-2

我可以使用导入的 .pm 文件中的变量。我可以使用 .pl 文件中的变量。但是当我在代码中添加“使用严格”时它不起作用。

我尝试了以下

source.pl
{
    var = 22;
}
1;

主文件

use strict;
my $ref = do "source.pl";
my ($mainvar) = @$ref{ qw(var) };
print "$mainvar\n";

这里将 $mainvar 打印为空字符串。请帮忙

4

1 回答 1

0

有两种基本的 Perl 变量类型:

  • my- 这些是词法范围的。这意味着它们的存在和不存在取决于它们的定义位置。词法范围的变量仅在它们所在的块中定义。如果它们在文件中定义,则只能由该文件访问。
  • our- 这些是变量。只是 Perl 创建一个特定于该代码区域(通常是整个文件)的命名空间。

在 Perl 中,当您在包中时,可以使用不带任何前缀的变量。否则,您需要在变量(和子例程名称)前加上它们的包名称。想想File::Find's$File::Find::dir . That's the$dir variable in theFile::Find` 包。

当 you 时use strict;,您必须使用our( 对于包变量或my( 对于词法范围的变量) 声明您的变量,或者使用该变量的完整包名称:

源码.pl

use strict;
use warnings;

our $var = 22;

测试.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只使用一次的警告。

于 2013-08-20T19:10:38.453 回答