【发布时间】:2017-02-17 21:51:35
【问题描述】:
如何将局部变量传递给 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
}
【问题讨论】:
标签: perl
sub modify_a {
$_[0] *= 2;
}
@_ 的元素是传入值的别名,因此如果直接修改它,就会更改调用者的值。这有时很有用,但通常不鼓励调用,因为它通常会让调用者感到意外。
【讨论】:
一种不那么神奇的方法是传递一个引用。
use strict;
use warnings;
sub modify_a
{
my ($a_ref) = @_;
$$a_ref = 10;
}
{
my $a = 5;
modify_a(\$a);
print "$a\n";
}
【讨论】:
$a 或$b 用作变量,因为它们是专门为sort 函数保留的。