【问题标题】:Modify variable in Perl subroutine在 Perl 子例程中修改变量
【发布时间】: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


    【解决方案1】:
    sub modify_a {
        $_[0] *= 2;
    }
    

    @_ 的元素是传入值的别名,因此如果直接修改它,就会更改调用者的值。这有时很有用,但通常不鼓励调用,因为它通常会让调用者感到意外。

    【讨论】:

    • 如果我有一长串传入的变量,我想按名称引用它们怎么办?
    • @jeffythedragonslayer - 查看 Data::Alias 模块。不过,由于意外因素,IMO 参考文献更好。
    • 我正要说我通过参考找到了它,我也会检查 Data::Alias。
    【解决方案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 函数保留的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 2012-04-25
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    • 1970-01-01
    相关资源
    最近更新 更多