in reply to (Golf) Grey code

51 characters:
@;="";$x=0,@;=map{$_.$x,$_.($x^=1)}@;for 1..pop;\@;
Am I going to get myself in trouble using random punctuation mark variables like @;? It saved me one space character...

Update: Down to 45, even passes strict and warnings!

[map{sprintf"%0$_[0]b",$_^$_/2}0..2**$_[0]-1]