in reply to Re^2: Basic list manipulation, and a bit of map() confusion...
in thread Basic list manipulation, and a bit of map() confusion...

Not exactly:

perl -le "print for map s/x//g ? $_ : (), @ARGV" 1 2 3x 4xx xxx 6x 3 4 6
perl -le "print for map tr/x//d ? $_ : (), @ARGV" 1 2 3x 4xx xxx 6x 3 4 6

The return value of s/// and tr[] is the number of substitutions made, not the modified string (unfortunatley).

Replies are listed 'Best First'.
Re^4: Basic list manipulation, and a bit of map() confusion...
by jwkrahn (Abbot) on Feb 24, 2008 at 22:47 UTC

    Correct, the return value of s/// and tr[][] is the number of substitutions made.    However you are not returning the return value of s/// or tr[][], you are returning either the value of $_ or the empty list ().

      One of the items the OP processes is 'five'. That item does not match (does not contain 'x'), so tr/// and s/// would both be "false" as far as the ternary is concerned (and so would be removed from the list in your code). Nevertheless, the OP does what that element in the resulting list because it's not an empty string after the replacement happens.