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. :-(