Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将全局变量的内容保存到Perl中的词法变量中,并从sub_Perl - Fatal编程技术网

如何将全局变量的内容保存到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>中,以便它们必须被明确要求)。最后,编写一个类会更好。