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


in reply to Re^4: $1 not "freezing" in an addition
in thread $1 not "freezing" in an addition

Interesting. This gave me the idea of trying this code:

$_ = 1; print $_ + $_++;

Amazingly enough, this prints 3, not 2

But this does print 2:

$_ = 1; print 0+$_ + $_++;

Replies are listed 'Best First'.
Re^6: $1 not "freezing" in an addition
by tobyink (Canon) on Dec 14, 2012 at 16:03 UTC

    I can count as high as 7...

    sub r { $_[0] } # no-op? sub rr :lvalue { $_[0] } # no-op? $_ = 1; print ($_) + $_++; $_ = 1; print r($_) + $_++; $_ = 1; print $_ + $_++; $_ = 1; print $_ + ++$_; $_ = 1; print r(++$_) + r(++$_); $_ = 1; print ++$_ + ++$_; $_ = 1; print rr(++$_) + rr(++$_)++;

    (Requires Perl 5.16, though you can get up to 6 in Perl 5.10 and above.)

    Update: 0..10

    use v5.16; no v5.17; no strict 'subs'; sub r { $_[0] } # no-op? sub rr :lvalue { $_[0] } # no-op? $_ = 1; say ( $ ++ _ ) + $_++; $_ = 1; say ($_) + $_++; $_ = 1; say r($_) + $_++; $_ = 1; say $_ + $_++; $_ = 1; say $_ + ++$_; $_ = 1; say r(++$_) + r(++$_); $_ = 1; say ++$_ + ++$_; $_ = 1; say rr(++$_) + rr(++$_)++; $_ = 1; say ++rr(++$_) + rr(++$_); $_ = 1; say ++rr(++$_) + rr(++$_)++; $_ = 1; say ++rr(++$_) + ++rr(r(rr(++$_)++));
    perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'