在Perl子例程中修改变量

时间:2017-02-17 21:51:35

标签: perl

如何将局部变量传递给Perl子例程并进行修改?

use strict;
use warnings;

sub modify_a
{
        # ????
}

{
        my $a = 5;
        modify_a($a);
        print "$a\n"; # want this to print 10
}

2 个答案:

答案 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";
}