Perl - мастер-скрипт, вызывающий подпрограммы и возвращающий статус - PullRequest
0 голосов
/ 28 января 2011

Вот дизайн, который я хочу реализовать в Perl:

Главный сценарий вызывает несколько вложенных сценариев. Главный сценарий управляет вызовом каждого вспомогательного сценария в определенной последовательности и записывает выходные данные каждого вспомогательного сценария, чтобы определить, следует ли вызывать следующий сценарий.

В настоящее время у меня есть мастер-сценарий, который вызывает подпрограмму с помощью системного вызова (), но у меня возникают проблемы с передачей статуса подпрограммы в главный скрипт.

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

Чтобы пролить больше света на проблему: Под сценарий должен решить, что сообщить в основной сценарий. Например, дополнительный сценарий отправляет код 1, когда дополнительный сценарий находит строковое значение в базе данных, он отправляет код 2, когда подстрока не находит файл, который ищет, и отправляет код 0, когда все идет хорошо.

Ответы [ 3 ]

4 голосов
/ 28 января 2011

Разве вы не можете просто использовать exit коды для этого?

my $code = system( 'perl', '-e', 'exit 2;' ) >> 8; # $code = 2
say "\$code=$code";

Коды выхода может быть 255 различаться значениями.

0 голосов
/ 28 января 2011

Глядя на ответ Аксемана, вы можете использовать модуль IPC :: System :: Simple :

#!/usr/bin/perl
use warnings;
use 5.012;
use IPC::System::Simple qw(system $EXITVAL EXIT_ANY);


system( [2], 'perl', '-e', 'exit 2' );
say "EXITVAL: $EXITVAL";
0 голосов
/ 28 января 2011

Вы можете выполнять и захватывать выходные данные из системных команд с синтаксисом обратной черты.

# get result as scalar
$result = `ls -lA`;

# get the result as an array, each line of output is a separate array entry
@result = `ls -lA`;

Каждый раз, когда вы используете синтаксис обратной черты, состояние выхода команды также сохраняется в автоматической переменной $?

После этого мастер-скрипт может решить, хорош ли вывод или нет, используя ту логику, которая вам нужна.

...