Perl Net::Telnet::Cisco命名参数错误
我正在尝试完成一些脚本编写工作,以便将更改部署到大约400台Cisco设备上。我已经修改了一个perl脚本,在我的生命中,我无法理解命名参数组件 在文件中,他们有:Perl Net::Telnet::Cisco命名参数错误,perl,parameters,Perl,Parameters,我正在尝试完成一些脚本编写工作,以便将更改部署到大约400台Cisco设备上。我已经修改了一个perl脚本,在我的生命中,我无法理解命名参数组件 在文件中,他们有: $ok = $obj->cmd($string); $ok = $obj->cmd(String => $string, [Output => $ref,] [Prompt => $match,] [
$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
我知道它必须是简单的,但它只是飞过。任何帮助都将不胜感激 我认为文档中的方括号只是表明参数是可选的,您不应该在实际代码中使用它们:
$OPENRTR->cmd( String => $testString,
Timeout => 5,
Output => $userTest1);
您的
$obj
是否实际上是main
命名空间中的全局$OPENRTR
,并且您是从另一个包调用它的?为什么?这些错误消息是两个不同的错误。将第一行中的元素数为奇数的行切掉。您的代码中是否有use strict
和use warnings
?全局中的对象基于原始脚本,我没有编写它,只是使用它,因此我不必重新编写控制盘。我的代码中有使用警告。很难从文档中看出问题中的代码。事实上OP用错了。他们做了cmd(foo=>“bar”、[baz=>“qux”、“asd”=>“fgh”])
而不是cmd(foo=>“bar”、[baz=>“qux”]、[“asd”=>“fgh”])
,正如文档所建议的那样。我也尝试过这种格式,但它不起作用。@choroba simbabque建议,将每个可选参数放在单独的“[]”语句中。看起来你的文件正在运行,把它们全部包括进去感觉像个白痴。@Davidstasar:我可能会提交一份错误报告来获取文档。