我可以通过传递数组作为参数从Perl调用Expect脚本吗?

时间:2010-10-12 09:35:55

标签: perl expect

是否可以通过将数组作为参数传递来从Perl调用Expect脚本? 如果是这样,如何在Expect中检索该数组,就像我们检索非数组数据一样:

set value [lindex $argv 0]

2 个答案:

答案 0 :(得分:2)

我假设您在谈论Perl数组,这在Tcl中称为列表。来自Perl:

system 'myscript.exp', @ary;

然后您的Expect脚本将具有:

set list_of_arguments $argv

答案 1 :(得分:1)

格伦,我想知道萨拉尼亚是否理解你的答案。我会提供一些可能对他有帮助的背景知识。

首先,Saranyya,请注意您可以选择Perl和Expect的各种不同组合。如果现有的Expect脚本执行了您想要增强的功能,那么您可以简单地在Expect中编写功能,而不是Perl; Expect是一种完全通用的语言,可以完成Perl所做的一切。

相反,如果你有一个需要Expect功能的Perl应用程序,你几乎可以肯定地使用Expect.pm在 Perl中编写所需的一切;没有必要构建一个单独的Expect流程。

最后,做你似乎描述的事情以及Glenn认为你所追求的事情也是合理的:从 Perl调用一个独立的Expect进程。如果您这样做,并且如果像Glenn草图一样,您的Perl程序包括

system 'myscript.exp', @ary;

然后您的Expect脚本通过 $ :: argv 值访问传递给它的参数,该值是一个列表。我将稍微详细说明一下这个例子:假设您通过系统列出了主机名列表;然后在期待你可能有用

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

从一个进程到另一个进程的接口传递,而不是变量。当信息达到Expect时,它“不知道”它是Perl中的数组(例如)。您使用相同的技术取消引用$ :: argv,但是您在Perl端打包了东西。