Можно ли вызвать сценарий Expect из Perl, передав массив в качестве параметра? - PullRequest
0 голосов
/ 12 октября 2010

Можно ли вызвать сценарий Expect из Perl, передав массив в качестве параметра?Если это так, то как получить этот массив в Expect, как если бы мы извлекали данные, не являющиеся массивами, как:

set value [lindex $argv 0]

Ответы [ 2 ]

2 голосов
/ 12 октября 2010

Я предполагаю, что вы говорите о массиве Perl, который известен как список в Tcl.Из Perl:

system 'myscript.exp', @ary;

Тогда ваш скрипт Expect будет иметь:

set list_of_arguments $argv
1 голос
/ 12 октября 2010

Гленн, интересно, поймет ли Саранья твой ответ.Я предложу немного предыстории, которая могла бы помочь ему.

Во-первых, Саранья, учтите, что вы можете выбирать различные комбинации Perl и Expect.Если существующий сценарий Expect делает что-то, что вы хотите улучшить, то лучше всего просто кодировать функциональность в Expect, а не в Perl;Expect является языком общего назначения и может выполнять практически все, что делает Perl.

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

Наконец, также разумно делать то, что вы, кажется, описываете, и то, что, по мнению Гленна, вы ищете: вызов отдельного процесса Expect из Perl.Если вы это сделаете, и если, как показывает Гленн, ваша Perl-программа включает

system 'myscript.exp', @ary;

, то ваш скрипт Expect получает доступ к параметрам, переданным ему, через значение $ :: argv , котороеэто список.Я немного поясню пример: предположим, вы пропустили через систему список имен хостов;тогда в Expect вы могли бы с пользой иметь

set list_of_hostnames $::argv
foreach hostname $list_of_hostnames {
    do_something_valuable $hostname
}

Интерфейс от одного процесса к другому передает значения , а не переменные .К тому времени, когда информация достигает Expect, он «не знает», что это был массив (например) в Perl.Вы используете те же методы для разыменования $ :: argv, однако вы упаковали вещи на стороне Perl.

...