【发布时间】:2015-09-11 20:55:21
【问题描述】:
我正在尝试完成一些脚本,以便将更改整体部署到大约 400 台 Cisco 设备。我有一个从 MrAudit 修改的 perl 脚本,它使用 Net::Telnet::Cisco 并且在我的一生中,我无法弄清楚命名参数组件。
在文档中,他们有:
$ok = $obj->cmd($string);
$ok = $obj->cmd(String => $string,
[Output => $ref,]
[Prompt => $match,]
[Timeout => $secs,]
[Cmd_remove_mode => $mode,]);
@output = $obj->cmd($string);
@output = $obj->cmd(String => $string,
[Output => $ref,]
[Prompt => $match,]
[Timeout => $secs,]
[Cmd_remove_mode => $mode,]
[Normalize_cmd => $boolean,]);
我的代码是:
$testString 是我在设备上运行的测试命令,$userTest1 是一个数组,我希望在其中存储输出。
$::OPENRTR->cmd(String=>$testString,[Timeout=>5,Output=>$userTest1,]);
而且每一次,无论我修改哪个组件或尝试以不同的方式编写它,我都会得到不同的错误:
Odd number of elements in hash assignment at(filename)
bad named parameter "ARRAY(0x2e46460)" given to Net::Telnet::Cisco::cmd() at mrAudit-TACACSMod.pl line 279
我知道它必须是一些简单的东西,但它只是飞来飞去。任何帮助,将不胜感激。
【问题讨论】:
-
您的
$obj实际上是main命名空间中的全局$OPENRTR并且您是从不同的包调用它吗?为什么?! -
这些错误消息是两个不同的错误。你用奇数个元素从第一条线中截断了这条线。你的代码中有
use strict和use warnings吗? -
全局中的对象是基于原脚本的,我没有写,只是用了,所以不用重新写轮子。并且使用警告在我的代码中。
标签: perl parameters