说我有一个数字,$x = 0;
我想用一个子程序来增加它,但子程序不会返回它的值:是否可以在Perl中增加标量引用?
sub increment {
my ($var) = @_;
my @list = (
'a',
'b',
'c',
...
'x',
'y',
'z'
);
return $list[$var++];
}
while ($x < 10) {
print increment($x);
}
原样,这将打印aaaaaaaaaa
永远代替abcdefghij
。如果我将increment($x)
替换为increment(\$x)
,它会将标量地址转换为十进制数,然后递增。在上面的场景中,它最终会抛出一个错误,因为25423331或任何不是有效的数组元素。
如果$ X是在一个散列或数组的元素,我能通过父作为参考,以具有原始修改:
$x = {'val' => 0};
while ($x->{'val'} < 10) {
print increment($x);
}
sub increment {
...
return $list[$var->{$val}++];
}
如何修改标量参考的原始值?
请注意 - 你并不需要这么做。你可以改为'我的$字母='a';打印$ letter ++(1..10);' – Sobrique
尽管我提供了一个答案,可以满足您的要求,但我通常会建议您避免这样做。让循环索引“在一定距离”递增是有点让人迷惑的。 –
@Sobrique我不能相信这是有效的,但行为甚至[记录](http://perldoc.perl.org/perlop.html#Auto-increment-and-Auto-decrement)。谢谢你今天教我新东西。 –