http://www.perlmonks.org?node_id=698788


in reply to Re: Secret Perl Operators: the boolean list squash operator, x!!
in thread Secret Perl Operators: the boolean list squash operator, x!!

I find that a lot harder to read. It decouples the logic from the individual parts of the list so it only works at all for lists where nearly every part is conditional, like the example I gave. If you want to conditionally include only one thing in a much larger unconditional list it really breaks down. Contrast:

join '/', 'foo', 'bar', $baz, 'quux', ( @qux ) x!! $somecond, $wibble, + $wobble; # vs join '/', map { defined $_->[-1] ? $_->[0] : () } ( [ 'foo' ], [ 'bar' ], [ $baz ], [ 'quux' ], [ @qux, $somecond ], [ $wibble ], [ $wobble ], );

Maybe you find the second one easier to read than the first, but I don’t. It gets a little clearer with each element on its own line (in particular, the $somecond gets completely lost in the noise if you put several elements on each line), but then you’ve gone from a single line to 10.

Your proposed solution is worth considering, but is useful only in limited circumstances. I was trying to find an option that would work in a wide range of cases.

I have to note that my proposed composite operator ()x!! is not that option, either: it doesn’t shortcircuit (nor do any of the clever alternatives given, yours included), and that has killed it in every case I might have used it since writing this node. I might find the syntactical requirements of the ternary onerous, but another option – not even a better one, but any option at all – has yet to show up. Sigh.

Makeshifts last the longest.

Replies are listed 'Best First'.
Re^3: Secret Perl Operators: the boolean list squash operator, x!!
by blazar (Canon) on Jul 19, 2008 at 13:58 UTC
    I find that a lot harder to read. ... If you want to conditionally include only one thing in a much larger unconditional list it really breaks down.

    I personally believe that ease of reading is in the eye of the beholder, but as far as the second remark is concerned, of course it's fully seconded++. Long story made short - IMHO: no clear-cut, all encompassing solution. Just many different situations. (And incidentally, nothing which will take our sleeping away, I hope! ;)

    --
    If you can't understand the incipit, then please check the IPB Campaign.