如何仅通过其名称访问外部注入的全局变量?
如果没有完全限定变量,该代码段不能工作:
#! /bin/perl
use strict; use warnings;
package Haus;
sub test{
print __PACKAGE__."n";
# Works
print "qualified var [$Haus::var]n"; # OK
# not working, why and how to achieve that without
# local "our $var" instead external injected
print "simple var [$var]n"; # NOK
}
package main;
$Haus::var=1;
Haus::test();
您(适当地)要求Perl不允许您在未声明$var
之前使用$var
。
strict vars
如果您访问的变量既没有显式声明(使用
my
、our
、state
或use vars
中的任何一种),也没有完全限定,则会生成编译时错误。(因为这是为了避免变量自杀问题和微妙的动态作用域问题,仅仅一个local
变量是不够好的。)看到"my"实际上,"我们的";在perfunc中,"状态"。在perlfunc中,"本地";
你需要做的就是声明$var
。our $var;
和use vars qw( $var );
都可以。
您也可以删除请求(通过使用use strict; no strict qw( vars );
),但是没有理由这样做,而且有很多理由不这样做。
我认为,你得到了一个编译时错误,因为结构是启用的,$var
没有在你的例子中声明。用our
声明变量,以便Perl知道您指的是$Haus::var
。看到我们的