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


in reply to Re^3: sub that sets $_
in thread sub that sets $_

On further investigation, it appears that you can tell the two contexts apart using the Want module. Specifically, want('BOOL') knows the difference. For example:
my $flipflop = 0; sub foo { use Want qw(want); print 'not ' if !want 'BOOL'; print "bool\n"; return $flipflop=!$flipflop; # alternate true and false } for (1..3) { while (foo() ) { # print "here 1\n"; } while ($answer = foo() ) { # print "here 2\n"; } }

Unfortunately, under 5.8.3 I get bus errors if there I uncomment the print statements, or if there is anything in the while blocks. :-(