in reply to Eval str return different from Eval block return

You have a precedence/grouping problem:

print "Eval ret:",readonly((eval'capture(5)')->[0]);
and
print "Eval ret:",readonly(eval('capture(5)')->[0]);
both print "Str Eval ret   :1"

Update: Now that is odd that the grouping doesn't work for you,, mine's on Linux/Perl5.6.1.

Update 2 : Sure does look like a platform difference, and where one should not be. I can confirm that demerphq's initial results agree with what mine does with that code. It appears that it's only the parenthesized ones that differ.

Update 3 : One more test case:

print "Eval ret:",readonly(eval('capture(5)'->[0]));
prints "Str Eval ret   :0" on mine. It looks like AS groups thataway. Curiouser and curiouser.

After Compline,
Zaxo

Replies are listed 'Best First'.
Re: Re: Eval str return different from Eval block return
by Dog and Pony (Priest) on May 17, 2002 at 09:49 UTC
    Not on Win2k / ActivePerl 5.6.1 they don't. So this could be a platform issue then?
    No eval :1 In str eval :1 In block eval :1 Block Eval ret :1 Str Eval ret :0 Str Eval ret2 :0
    Update:

    On the same machine, with cygwin and perl 5.6.1, it runs fine:

    No eval :1 In str eval :1 In block eval :1 Block Eval ret :1 Str Eval ret :1 Str Eval ret2 :1


    You have moved into a dark place.
    It is pitch black. You are likely to be eaten by a grue.
Re: Re: Eval str return different from Eval block return
by demerphq (Chancellor) on May 17, 2002 at 09:47 UTC
    Which OS and Perl version Zaxo? I still get incorrect results
    use strict; use warnings; sub capture {\@_}; sub readonly{ my $v=$_[0]; eval{$_[0]=$v;1} ? 0 : 1 } $\="\n"; print "No eval :",readonly(capture(5)->[0]); eval ' print "In str eval :",readonly(capture(5)->[0]); '; eval { print "In block eval :",readonly(capture(5)->[0]); }; print "Block Eval ret :",readonly(eval{capture(5)}->[0]); print "Str Eval ret :",readonly((eval'capture(5)')->[0]); print "Str Eval ret2 :",readonly(eval('capture(5)')->[0]); __END__ No eval :1 In str eval :1 In block eval :1 Block Eval ret :1 Str Eval ret :0 Str Eval ret2 :0

    Yves / DeMerphq
    ---
    Writing a good benchmark isnt as easy as it might look.

      On Win NT and AS perl 5.6.1 you get

      --<br> No eval :1 In str eval :1 In block eval :1 Block Eval ret :1 Str Eval ret :0 Str Eval ret2 :0 --
      Anthony Staines