我有一个关于Perl和范围的问题.我有一个包含许多变量的公共文件.我在主脚本中需要公共文件,但我无法访问变量; 它们似乎超出了它的范围.我认为our声明会克服这个问题,但它似乎不起作用.
脚本1:common.pl
#!/usr/bin/perl
our $var1 = "something";
our $var2 = "somethingelse";
脚本2:ftp.pl
#!/usr/bin/perl
use strict;
use warnings;
require('common.pl');
print $var1; 
我收到错误:
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;
用法示例:
#!/usr/bin/perl
use strict;
use warnings;
use MyConfig;
my %config = getconfig();
print $config{ somthingelse };
这应该打印froboz
看起来你需要一个合适的配置文件.我会选择一个非代码配置文件,您可以在需要设置时阅读该文件.CPAN上有模块可以处理您可以想象的任何配置格式.
如果你想按照你拥有的方式去做,那就去除our并声明它们use vars.不要让PBP警察吓跑你.:)你真的只需要our限制一个包变量的范围,这与你想要做的完全相反.