<div dir="ltr"><div class="gmail_extra">Ah yes - precedence :)</div><div class="gmail_extra"><br></div><div class="gmail_extra">And thanks for the deparse trick, it looks like a true time saver.<br><br><div class="gmail_quote">
On 24 April 2012 15:05, Gabor Szabo <span dir="ltr"><<a href="mailto:gabor@szabgab.com" target="_blank">gabor@szabgab.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">On Tue, Apr 24, 2012 at 2:54 PM, ynon perek <<a href="mailto:ynonperek@gmail.com">ynonperek@gmail.com</a>> wrote:<br>
</div><div><div class="h5">> Hi Everyone,<br>
> I was bitten today by this snippet that I still can't understand (second<br>
> test fails):<br>
><br>
> use v5.14;<br>
> use Test::More;<br>
><br>
> my @l = qw/red blue green/;<br>
><br>
> my $has_red_1 = grep /red/, @l;<br>
> my $has_red_2 = ( grep /red/, @l ? 1 : 0 );<br>
><br>
> is ( $has_red_1, 1, "Expected" );<br>
> is ( $has_red_2, 1, "This one fails - Why ?" );<br>
><br>
> done_testing;<br>
><br>
> I know that grep does nothing in void context, but here I have a valid<br>
> boolean context - what's going on ?<br>
<br>
</div></div>save the script in <a href="http://a.pl" target="_blank">a.pl</a> then run:<br>
<br>
perl -MO=Deparse,-p <a href="http://a.pl" target="_blank">a.pl</a><br>
<br>
<br>
sub BEGIN {<br>
require(v5.14);<br>
}<br>
use Test::More;<br>
use strict 'refs';<br>
BEGIN {<br>
$^H{'feature_unicode'} = q(1);<br>
$^H{'feature_say'} = q(1);<br>
$^H{'feature_state'} = q(1);<br>
$^H{'feature_switch'} = q(1);<br>
}<br>
(my(@l) = ('red', 'blue', 'green'));<br>
(my $has_red_1 = grep(/red/, @l));<br>
(my $has_red_2 = grep(/red/, (@l ? 1 : 0)));<br>
is($has_red_1, 1, 'Expected');<br>
is($has_red_2, 1, 'This one fails - Why ?');<br>
done_testing();<br>
<a href="http://a.pl" target="_blank">a.pl</a> syntax OK<br>
<br>
<br>