我有两个脚本和两个conf文件(实际上也是perl脚本):
conf1.pl
@some_array = ({name =>"orange", deny = > "yes"},
{name =>"apple", deny = > "no"});
conf2.pl
@some_array = ({name =>"male", deny = > "yes"},
{name =>"female", deny = > "no"});
script.pl
#!/usr/bin/perl -w
use strict;
our %deny = ();
call_another_script.pl_somehow_with_param conf1.pl
call_another_script.pl_somehow_with_param conf2.pl
foreach my $key (%deny) {
print $deny{$key},"\n";
}
another_script.pl
#!/usr/bin/perl -w
my $conf_file = shift;
do $conf_file;
foreach my $item (@some_array) {
print $item->{name},"\n";
if (defined $deny) {
$deny{$item{name}}++ if $item{deny} eq "yes";
}
}
我想用script.pl中的conf文件名调用another_script.pl,因此%deny将在another_script.pl中可见。我不想使用Perl模块,我想在单独的文件中使用脚本。 例如
./ another_script.pl conf2.pl
和
./脚本
答案 0 :(得分:4)
此问题是模块旨在解决的问题。你问的是什么类似于“我如何有条件地执行代码if
?”。我们可以告诉你如何做,但这不是一个好主意。
conf1.pl
#!/usr/bin/perl
use strict;
use warnings;
our @a = (1 .. 10);
conf2.pl
#!/usr/bin/perl
use strict;
use warnings;
our @a = ("a" .. "j");
master.pl
#!/usr/bin/perl
use strict;
use warnings;
our %deny;
do "conf1.pl";
do "child.pl";
do "conf2.pl";
do "child.pl";
use Data::Dumper;
print Dumper \%deny;
child.pl
#!/usr/bin/perl
use strict;
use warnings;
our %deny;
our @a;
for my $item (@a) {
$deny{$item}++;
}
答案 1 :(得分:0)
从 http://www.serverwatch.com/tutorials/article.php/1128981/The-Perl-Basics-You-Need-To-Know.htm
以严格的语用为基础使变量全球化 首先你使用:
use strict;
然后你使用:
use vars qw( %hash @array);
这将命名变量声明为当前的包全局变量 包。它们可以在同一个文件和包中引用 不合格的名字;并且在完全合格的不同文件/包中 名。 这就是我所需要的一切!