如何将局部变量传递给Perl子程序并进行修改?在Perl子程序中修改变量
use strict;
use warnings;
sub modify_a
{
# ????
}
{
my $a = 5;
modify_a($a);
print "$a\n"; # want this to print 10
}
如何将局部变量传递给Perl子程序并进行修改?在Perl子程序中修改变量
use strict;
use warnings;
sub modify_a
{
# ????
}
{
my $a = 5;
modify_a($a);
print "$a\n"; # want this to print 10
}
一个不太神奇的方法是通过一个参考。
use strict;
use warnings;
sub modify_a
{
my ($a_ref) = @_;
$$a_ref = 10;
}
{
my $a = 5;
modify_a(\$a);
print "$a\n";
}
sub modify_a {
$_[0] *= 2;
}
的@_
元素是别名传递的值,因此,如果您直接修改,你会改变调用者的价值观。有时候这可能很有用,但通常是不鼓励的,因为对呼叫者来说这通常是一个惊喜。
如果我有一个很长的变量列表,我想通过名称来引用它们,那该怎么办? – jeffythedragonslayer
@jeffythedragonslayer - 检查Data :: Alias模块。尽管如此,参考文献更好,因为出乎意料的因素。 – Tanktalus
我刚才说我想到了它的引用,我也会看看Data :: Alias。 – jeffythedragonslayer
您应该总是不鼓励使用'$ a'或'$ b'作为变量,因为它们专门用于'sort'函数。 – stevieb