假设我有一个子程序printvar
,我从另一个子程序main
调用它。我可以灵活地使用
$var
是词法范围的
my $var;
sub printvar {
print "var is: $var";
}
sub main {
$var = 5.0;
printvar();
}
main();
或使用
动态范围化sub printvar {
print "var is: $var";
}
sub main {
local $var = 5.0;
printvar();
}
main();
但是当use strict
生效时,第二个示例在编译时失败,有两条消息(一个在printvar
,另一个在main
):
Global symbol "$var" requires explicit package name
如果我想在$var
中使用printvar
作为全局,而不是将其作为参数传递,我希望printvar
不关心$var
来自哪个范围from,有没有办法在use strict
下执行此操作?
使用our
,我已经修改了第二个例子:
sub printvar {
our $var;
print "var is: $var";
}
sub main {
our $var = 5;
{
local $var = 10;
printvar();
}
printvar();
}
我看到输出
var is: 10
var is: 5
因此our $var
中的printvar
似乎是关键所在。
答案 0 :(得分:2)
不,在您的方案中 - 使用严格,您只能使用our
向/从全局范围提升或显式检索变量。
#!/usr/bin/perl -w
use strict;
sub printvar {
our $var;
print "var is: $var";
}
sub main {
our $var = 5.0;
printvar();
}
&main();