johngg@abouriou:~$ perl -Mstrict -Mwarnings -E '
say for map { $_ % 2 != 0 } 0 .. 10;'
1
1
1
1
1
The alternating blanks and ones are registering the FALSE and TRUE results of the expression in the map, which essentially has a one to one relation between input on the right and output on the left. What you should be using instead is grep which filters input, only passing to the left those items for which the expression is TRUE.
johngg@abouriou:~$ perl -Mstrict -Mwarnings -E '
say for grep { $_ % 2 != 0 } 0 .. 10;'
1
3
5
7
9
Note also that you could dispense with the != 0 as the expression $_ % 2 will evaluate to either 0 or 1.
johngg@abouriou:~$ perl -Mstrict -Mwarnings -E '
say for grep { $_ % 2 } 0 .. 10;'
1
3
5
7
9
I hope this is helpful.
|