我试图理解use vars ($var);
是如何工作的。我意识到,如果我想全局声明一个变量,我可以使用use vars ($var);
或Perl 5.6和更高版本我可以使用our $var;
在perl中声明全局变量
但是,我仍然只是试图了解它是如何工作的。看看the source,它看起来像你只是将该变量声明为一个typeglob并将其设置为它自己的引用版本。什么!?
# My_Module.pm
use strict (vars, subs);
use CGI::Carp;
*My_Module::My_Global = \$My_Module::My_Global;
sub my_function {
$My_Global = 'Am I declared?';
}
现在这不起作用,我明显得到'未定义的符号'错误。那么use vars
怎么做?
---------------- UPDATE ---------------
我简直复制你的代码完全相同,跑从test.cgi与use X;
,而不是外壳...
X.pm
use strict;
BEGIN { package X; no strict qw(refs); *main::x = \${"main::x"}; }
print "Content-type: text/html\n\n"; # I added this line since not printing to shell
$x = 123; say $x;
1;
test.cgi
#!/usr/bin/perl
use strict;
use X;
...我得到了我之前做了同样的编译错误:
Global symbol "$x" requires explicit package name at X.pm line 4.
是否在一个外壳,而不是在一个模块这只是工作的?
不知道你添加的代码是假设要做的。 – ikegami
我完全复制了你的代码,试着让它工作,因为我改变了上面。我的目标是让脚本在不使用'我们'或'使用变量'的情况下工作。我想了解这些代码如何工作并使其工作,但不行。它只能在这样的外壳中工作吗? – Jonathan