my @odds = map { $_ % 2 != 0 } @array;

That's not going to do what you think. Consider the following:-

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.

Cheers,

JohnGG


In reply to Re^3: Stupidest Prime Number detector ever!! by johngg
in thread Stupidest Prime Number detector ever!! by Anonymous Monk

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":