如何將局部變量傳遞給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