in reply to Re: Stupidest Prime Number detector ever!!
in thread Stupidest Prime Number detector ever!!

Thank you for such a detailed post, but, the only way I have used map is to gather the output in another array, for example:  my @array (1..1000);  my @odds = map { $_ % 2 != 0 } @array; .So I am taking a bit of a time getting used to the way you are doing it in the sample code, but that's my bad. Thanks again

.

Replies are listed 'Best First'.
Re^3: Stupidest Prime Number detector ever!!
by johngg (Canon) on Jun 23, 2021 at 21:37 UTC
    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

      Yikes!!!

      I meant  grep and not  map. Truly my bad!!