如何将全局变量的内容保存到Perl中的词法变量中,并从sub
我试图将主脚本中声明的如何将全局变量的内容保存到Perl中的词法变量中,并从sub,perl,Perl,我试图将主脚本中声明的our全局变量的内容保存到模块中的my词法变量中 main.pl use strict; use warnings; use module; our $global = "Hello"; function(); 模块.pm package module; use strict; use warnings; use Exporter 'import'; our @EXPORT = qw( function ); # some needed initializ
our
全局变量的内容保存到模块中的my
词法变量中
main.pl
use strict;
use warnings;
use module;
our $global = "Hello";
function();
模块.pm
package module;
use strict;
use warnings;
use Exporter 'import';
our @EXPORT = qw( function );
# some needed initialization & definition before subs
my $var = $main::global;
sub function {
print $var,"\n";
}
1;
我面临:使用未初始化值$var错误
即使我试着在作业下面打印,也不行!
谢谢。通过创建一个包含所有所需全局变量的模块,我终于得到了想要的。并在需要时随处使用 看起来像这样
package Globals;
use Exporter 'import';
our @EXPORT = qw( $VERSION $DEV_EMAIL $BASEDIR $CURRENT_PROJECT );
our $VERSION = "0.0.1";
our $DEV_EMAIL = "FOO@BAR.COM";
our $BASEDIR = "./Projects/";
our $CURRENT_PROJECT = '';
1;
下午三时三十分
package OtherPackage
use Globals;
my $var = $VERSION
# do something with $var
print $var;
1;
编写
使用模块代码>在编译器进一步运行之前加载模块,也就是说执行模块。简而言之,您正在执行my$var=$main::global代码>在我们的$global=“Hello”之前代码>。模块那样进入其用户的命名空间是没有意义的。你想做什么?事实上,你为什么要这么做?可以在use
语句中传递到模块的import
(您必须自己编写),但这几乎肯定是个坏主意,而且有更好的方法来完成您实际需要的任何操作。我正在尝试从不同的外部模块访问一次性声明的变量(在main.pl中),你认为这是可能的,还是我应该重新思考我的哲学。如果你把my$var=…
行放在子函数中,你的代码就会像你期望的那样工作。但这样做会导致非常混乱和难以阅读的代码(我从经验中知道)。最好作为参数传递,比如function($global)代码>,或者考虑使用面向对象的方法,将其传递给模块的构造函数(参见代码> PerLoc文档PerLutut 对于OO样式Perl的介绍)很好的工作,这是一个无可比拟的更好的方法(比所要求的更好)。请注意,导出变量(与函数相反)被认为是不正常的,至少可以说(在最简单的情况下考虑将这些常量导入<代码> @ ExpPosixOK < /COD>中,以便它们必须被明确要求)。最后,编写一个类会更好。