Perl:使用来自script.pl和w / o系统,反引号和模块的参数调用another_script.pl

时间:2010-09-16 10:56:42

标签: perl call

我有两个脚本和两个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

  

./脚本

2 个答案:

答案 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);

这将命名变量声明为当前的包全局变量 包。它们可以在同一个文件和包中引用 不合格的名字;并且在完全合格的不同文件/包中 名。 这就是我所需要的一切!