What do you expect to get?
Here's what I get when I run the OP's code:
perl -e 'print(($_^$_>>1).$/)for(0..pop)' 15
0
1
3
2
6
7
5
4
12
13
15
14
10
11
9
8
Are you questioning why you have no newlines? That is puzzling. Did you do this
undef $/; by any chance?
Or, are you questioning the sequence of values? Maybe looking at the Gray_code in the binary format makes it more obvious:
perl -e 'printf("%04b$/",($_^$_>>1))for(0..pop)' 15
0000
0001
0011
0010
0110
0111
0101
0100
1100
1101
1111
1110
1010
1011
1001
1000