我可以使用导入的.pm文件中的变量。我可以使用.pl文件中的变量。但是当我在代码中添加'use strict'时它就不起作用了。
我尝试了以下
source.pl
{
var = 22;
}
1;
main.pl
use strict;
my $ref = do "source.pl";
my ($mainvar) = @$ref{ qw(var) };
print "$mainvar\n";
这里将$ mainvar打印为空字符串。请帮忙
答案 0 :(得分:0)
有两种基本的Perl变量类型:
my
- 这些是词汇范围的。这意味着它们根据它们定义的位置而存在和不存在。词汇范围变量仅在它们所在的块中定义。如果它们在文件中定义,则只能访问该文件。our
- 这些是包变量。 包只是Perl创建一个特定于该代码区域的命名空间(通常是整个文件)。在Perl中,当你在一个包中时,你可以使用没有任何前缀的变量。否则,您需要将变量(和子例程名称)作为其包名称的前缀。想想File::Find's
$ File :: Find :: dir . That's the
$ dir variable in the
File :: Find`包。
在use strict;
,则必须与任一our
(对于包变量或my
(对于词法变量声明的变量,或者使用该变量的完整的包名:
use strict;
use warnings;
our $var = 22;
use strict;
use warnings;
do "source.pl";
our $var; #Merely a declaration -- Doesn't change the value
my $local_var = $var;
print "$local_var\n";
你也可以这样做:
use strict;
use warnings;
no warnings qw(once);
do "source.pl";
my $local_var = $main::var; #Specified full package name of variable
print "$local_var\n";
我必须使用no warnings qw(once);
删除$main::var
仅使用一次的警告。