strange. the following code, which seems equivalent to me,
does work as expected:
my ($a, $b) = (10, 20);
sub mysub : lvalue { $_[0] > 0 ? $a : $b }
mysub(2) = 15;
mysub(-1) = 9;
printf "\$a: %d, \$b: %d, mysub(2): %d, mysub(-1): %d\n",
$a, $b, mysub(2), mysub(-1);
Outputs:
$a: 15, $b: 9, mysub(2): 15, mysub(-1): 9
the only difference that i could see mattering is the
lack of 'return' statements in my version. | [reply] [d/l] |
Aha. That's it. The explicit return seems
to make the sub return the value of the rhs, but the
variable is never modified.
That's what "experimental" means.
This works as expected:
#!/usr/bin/perl -wl
use strict;
{
my $count = 0;
sub counter : lvalue { ++$count }
}
print counter() for 1..5;
print counter() = -5;
print counter() for 1..5;
| [reply] [d/l] |