Perl: вызов another_script.pl с параметрами из script.pl и без системы, обратных ссылок и модулей - PullRequest
0 голосов
/ 16 сентября 2010

У меня есть два скрипта и два файла 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";
    }
}

Я хотел бы вызвать another_script.pl с именами файлов conf из script.pl, чтобы% deny был виден в another_script.pl. И я не хочу использовать модули Perl, и я хочу иметь сценарии в отдельных файлах. Например

. / Another_script.pl conf2.pl

и

. / Сценарий

Ответы [ 2 ]

4 голосов
/ 16 сентября 2010

Эта проблема - то, для чего предназначены модули.То, что вы спрашиваете, похоже на «как условно выполнить код без 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}++;
}
0 голосов
/ 17 сентября 2010

С http://www.serverwatch.com/tutorials/article.php/1128981/The-Perl-Basics-You-Need-To-Know.htm

Создание глобальных переменных со строгой прагмой Сначала вы используете:

use strict;

Тогда вы используете:

use vars qw( %hash @array);

Это объявляет именованные переменные как глобальные переменные пакета в текущем пакет. На них можно ссылаться в одном файле и пакете с их неквалифицированные имена; и в разных файлах / пакетах с их полной квалификацией имена. Это все, что мне было нужно!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...