我有一个关于Perl和范围的问题.我有一个包含许多变量的公共文件.我在主脚本中需要公共文件,但我无法访问变量; 它们似乎超出了它的范围.我认为our声明会克服这个问题,但它似乎不起作用.
脚本1:common.pl
#!/usr/bin/perl
our $var1 = "something";
our $var2 = "somethingelse";
Run Code Online (Sandbox Code Playgroud)
脚本2:ftp.pl
#!/usr/bin/perl
use strict;
use warnings;
require('common.pl');
print $var1;
Run Code Online (Sandbox Code Playgroud)
我收到错误:
Global symbol "$var1" requires explicit package name
我会把配置放在一个模块中.
文件: MyConfig.pm
package MyConfig;
require Exporter;
use strict;
our @ISA = qw(Exporter);
our @EXPORT = qw( getconfig );
my %confighash = (
thisone => 'one',
thatone => 2,
somthingelse => 'froboz',
);
sub getconfig {
return %confighash;
}
1;
Run Code Online (Sandbox Code Playgroud)
用法示例:
#!/usr/bin/perl
use strict;
use warnings;
use MyConfig;
my %config = getconfig();
print $config{ somthingelse };
Run Code Online (Sandbox Code Playgroud)
这应该打印froboz
看起来你需要一个合适的配置文件.我会选择一个非代码配置文件,您可以在需要设置时阅读该文件.CPAN上有模块可以处理您可以想象的任何配置格式.
如果你想按照你拥有的方式去做,那就去除our并声明它们use vars.不要让PBP警察吓跑你.:)你真的只需要our限制一个包变量的范围,这与你想要做的完全相反.
| 归档时间: |
|
| 查看次数: |
5757 次 |
| 最近记录: |