我可以使用导入的 .pm 文件中的变量。我可以使用 .pl 文件中的变量。但是当我在代码中添加“使用严格”时它不起作用。
我尝试了以下
source.pl
{
var = 22;
}
1;
主文件
use strict;
my $ref = do "source.pl";
my ($mainvar) = @$ref{ qw(var) };
print "$mainvar\n";
这里将 $mainvar 打印为空字符串。请帮忙
我可以使用导入的 .pm 文件中的变量。我可以使用 .pl 文件中的变量。但是当我在代码中添加“使用严格”时它不起作用。
我尝试了以下
source.pl
{
var = 22;
}
1;
主文件
use strict;
my $ref = do "source.pl";
my ($mainvar) = @$ref{ qw(var) };
print "$mainvar\n";
这里将 $mainvar 打印为空字符串。请帮忙
有两种基本的 Perl 变量类型:
my
- 这些是词法范围的。这意味着它们的存在和不存在取决于它们的定义位置。词法范围的变量仅在它们所在的块中定义。如果它们在文件中定义,则只能由该文件访问。our
- 这些是包变量。包只是 Perl 创建一个特定于该代码区域(通常是整个文件)的命名空间。在 Perl 中,当您在包中时,可以使用不带任何前缀的变量。否则,您需要在变量(和子例程名称)前加上它们的包名称。想想File::Find's
$File::Find::dir . That's the
$dir variable in the
File::Find` 包。
当 you 时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
只使用一次的警告。