是否可以包含.pl文件中的变量而不是.pm?

时间:2013-08-19 08:34:29

标签: perl

我可以使用导入的.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打印为空字符串。请帮忙

1 个答案:

答案 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(对于词法变量声明的变量,或者使用该变量的完整的包名:

source.pl

use strict;
use warnings;

our $var = 22;

test.pl

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仅使用一次的警告。