如何将局部变量传递给Perl子例程并进行修改?
use strict;
use warnings;
sub modify_a
{
# ????
}
{
my $a = 5;
modify_a($a);
print "$a\n"; # want this to print 10
}
答案 0 :(得分:3)
sub modify_a {
$_[0] *= 2;
}
@_
的元素是传入的值的别名,因此如果直接修改它,您将更改调用者的值。这有时很有用,但通常不鼓励,因为通常会给来电者带来惊喜。
答案 1 :(得分:2)
一种不太神奇的方法是传递参考。
use strict;
use warnings;
sub modify_a
{
my ($a_ref) = @_;
$$a_ref = 10;
}
{
my $a = 5;
modify_a(\$a);
print "$a\n";
}