【问题标题】:Using global variables with strict pragma in Perl在 Perl 中使用具有严格编译指示的全局变量
【发布时间】:2013-07-08 06:40:30
【问题描述】:

我想知道是否可以在使用严格 pragma 的同时使用一些全局变量。

例如,我尝试过这样做:

#!/usr/bin/perl -w

use strict;

sub print_global{
     print "your global is: $global\n";
}

$global = 1234;     #or even my $global = 1234;

print_global;

但是你可以注意到它不起作用。

在使用 strict pragma 时有什么方法可以定义全局变量吗? (如果有的话,当然)

【问题讨论】:

    标签: perl global-variables strict


    【解决方案1】:

    在您的函数上方声明my $global;,它将与use strict;一起使用。

    【讨论】:

    • 是的,它有效。但是我的关键字没有修改函数之间的范围吗?为什么我的 $global 对上面声明它的其他子例程也可见?
    • 在大多数外部范围内用my 声明的变量对下面的所有代码都是可见的,无论是否在子程序中。
    • 好的,但是上面的例子怎么可能?
    • 检查my vs our 以及它们的实际行为stackoverflow.com/a/885888/223226
    • our 变量总是引用完全限定的包变量${__PACKAGE__}::VariableName,它不像my 变量那样在词法范围内。词法范围是别名$VariableName
    【解决方案2】:

    在使用前声明全局:

    our $global;
    

    my 不同,这不会创建新变量,而是使变量在此范围内可用。所以你可以安全地拥有类似的代码

    sub print_global{
         our $global;  # does not create a new variable like `my` would
         print "your global is: $global\n";
    }
    
    our $global = 1234;
    
    print_global;
    

    【讨论】:

    • 请告诉我您打算创建什么:声明还是定义?
    【解决方案3】:

    use strict; 告诉 Perl 你希望强制声明你的变量,而你没有这样做。在适当的地方添加声明。

    #!/usr/bin/perl -w
    
    use strict;
    
    my $global;     # <----
    
    sub print_global{
         print "your global is: $global\n";
    }
    
    $global = 1234;
    print_global;
    

    【讨论】:

      猜你喜欢
      • 2021-06-20
      • 2013-07-31
      • 1970-01-01
      • 2019-03-25
      • 2013-10-06
      • 2017-01-25
      • 1970-01-01
      • 2014-08-29
      • 2021-10-04
      相关资源
      最近更新 更多