That's not quite correct...
IO::Prompt returns an object, in that object bool is overloaded, and bool sets $_. (which is run for each iteration of the while to decided if it's a true or false value)
Which means that while ($z = prompt "") { will set $_ and $z. This is a bad idea. What if the code is used in an inner loop? when the outer loop uses $_ for example?
If one wants to get the same behaviour then it would be enough to do a simple assignment in the subroutine to $_ and return the value of $_.
Example code that is similar to the code in IO::Prompt
package Example; use overload q{bool} => sub { $_="def"; }; sub new { bless {}; } sub test { return $_[0]; } package main; my $z=new Example; $_="ghi"; while ($m = $z->test()) { print; print $m; last; };
Update: added relevant part of IO::Prompt
In reply to Re^2: sub that sets $_
by Animator
in thread sub that sets $_
by holli
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |