perl @ARGV在命令行上运行,但从其他应用程序传递时则不行

韦德

我有一个perl脚本,该脚本现在可以从Windows命令行运行(已安装ActivePerl)。它发送命令以打开/关闭电源控制器(智能配电盘)上的端口。我进行了设置,以便使用几个命令行参数。设备的IP地址以及我要对该设备执行的电源操作。即10.0.40.1开启应打开IP 10.0.40.1的设备,或者打开电源控制器中的相应端口。

我有一个if elseif语句,它将评估传递给脚本的IP地址并确定哪个电源控制器和哪个端口合适。唯一的其他操作是端口,并且该操作已合并,因此,如果设备在控制器的端口3上并且传递的操作为“ on”,则新变量将变为3on。这是脚本的其余部分所理解的,并且是新手,将其保持不变很容易。

问题:当我从Windows运行此命令时

perl Lpower.pl 10.0.30.15上

要么

Lpower.pl 10.0.30.15在

问题在于,这样做的目的是允许另一个应用程序在我的客户端上调用脚本。另一个应用程序是一块网络管理软件。通过受支持的自定义GUI扩展,我能够为每个受管理的设备在菜单中添加项目。我有一个用于“开机”,另一个用于“关机”。我将其指向客户端计算机本地路径的Lpower脚本,它被调用并运行,它也按预期传递参数,但是我的if语句不起作用。它不会在任何IP上匹配,也不会在“开”,“关”操作上匹配。我不需要评估后者,我只是在他们的陈述中进行测试。

我的脚本打印了变量,但确实显示了这些变量,但是if语句不起作用。似乎没有添加前导空格或任何东西。

这是相关部分的代码片段:

# $language = "PerlScript"
# $interface = "1.0" 

#!c:\perl64\bin\perl -w -CA
...
print STDERR "UserUtil $version\n\n";
my ($ipaddr, $onoff) = @ARGV;
print "$ipaddr $onoff\n";

if ($onoff eq "off") {print "it matched off"}
if ($ipaddr eq "10.0.40.1") {
    $epc='10.0.30.92';
    $port='1';
    }
elsif ($ipaddr eq "10.0.40.105") {
    $epc='10.0.30.92';
    $port='2';
    }
elsif (($ipaddr eq "10.0.40.100") || ($ipaddr eq "10.0.40.101")) {
    $epc='10.0.30.92';
    $port='3';
    }
...
else {print "no matches found"}
$oper="$port$onoff";
$base='http://'.$auth.'@'.$epc.'/';
print "$epc $oper $ipaddr";
cmd($oper) && die "Unknown Command $_\n";

其中有一些用于调试的打印语句。CLI的输出看起来像这样(并且可以正常工作,端口按预期方式打开/关闭):

10.0.30.15 off
it matched off10.0.30.93 1off 10.0.30.15

从网络应用程序调用(在我的客户端上启动脚本)

10.0.30.15 on
Unknown Command
no matches found  10.0.30.15 off

为什么会有所不同?我可以采取什么措施来强制正确处理传递的参数?如果我没有看错,它们应该是UTF-8编码的字符串,那么该应用程序是否可以发送不同的内容,因此if语句会中断?

还有一张便条。该应用程序直接调用脚本并传递参数,但不调用perl可执行文件,我的环境知道如何处理pl脚本。不知道这是否有所作为。

任何帮助深表感谢。我确实在远处有一些编码,但是从没从事过,对perl来说是全新的。

jm666

脚本的相关部分

my ($ipaddr, $onoff) = @ARGV;
print "$ipaddr $onoff\n";
if ($ipaddr eq "10.0.40.1") { print "matched\n"; }
else {print "no matches found\n"}

运行为

perl power.pl 10.0.40.1 off

印刷品:

10.0.40.1 off
matched

运行为

perl power.pl "10.0.40.1 off"    #two words as one arg

版画

10.0.40.1 off 
no matches found

当您添加

use strict;
use warnings;

my ($ipaddr, $onoff) = @ARGV;
print "$ipaddr $onoff\n";
if ($ipaddr eq "10.0.40.1") { print "matched\n"; }
else {print "no matches found\n"}

将打印:

Use of uninitialized value $onoff in concatenation (.) or string at power.pl line 5.
10.0.40.1 off 
no matches found

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在命令行上运行perl -e时必须转义哪些字符

来自分类Dev

Perl中的命令行参数变量@ARGV

来自分类Dev

如何通过从命令行传递参数在Perl中应用IN子句

来自分类Dev

在单个命令行参数中将多个值传递给Perl程序

来自分类Dev

Perl:当我从命令行运行“ perl”时,什么都没有发生

来自分类Dev

Perl:当我从命令行运行“ perl”时,什么都没有发生

来自分类Dev

运行Perl单行代码时Windows cmd如何转换命令行?

来自分类Dev

通过命令行运行cron时出现Perl错误?

来自分类Dev

命令行上的Perl哈希语法错误

来自分类Dev

命令行上的Perl哈希语法错误

来自分类Dev

Perl命令行解释器在退出时崩溃

来自分类Dev

一个perl命令行,打印用于运行脚本的perl版本

来自分类Dev

Perl命令行自动拆分vs / /

来自分类Dev

perl命令行参数-MIO标志

来自分类Dev

Perl Regex命令行问题

来自分类Dev

从其他应用程序/命令行/Apple 脚本运行 Xcode

来自分类Dev

使perl在文件上运行

来自分类Dev

命令在命令行中运行,但不在Perl脚本中运行

来自分类Dev

如何在Perl中运行部分应用程序?

来自分类Dev

如何创建用于运行Perl脚本的桌面应用程序

来自分类Dev

perl使用shift命令解析命令行参数

来自分类Dev

获取命令行perl命令以报告所做的更改

来自分类Dev

Perl映像中缺少perl命令

来自分类Dev

命令行输入到C程序(使用Perl的“打印”命令)

来自分类Dev

使用未知的perl位置运行perl脚本

来自分类Dev

为什么此Perl命令在Windows命令行上失败?

来自分类Dev

是否同时使用while(<>)ARGV [1]格式的perl命令行参数,可能使用了shift命令?

来自分类Dev

是否同时使用while(<>)ARGV [1]格式的perl命令行参数,可能使用了shift命令?

来自分类Dev

如何将强制和可选命令行参数都传递给perl脚本?

Related 相关文章

  1. 1

    在命令行上运行perl -e时必须转义哪些字符

  2. 2

    Perl中的命令行参数变量@ARGV

  3. 3

    如何通过从命令行传递参数在Perl中应用IN子句

  4. 4

    在单个命令行参数中将多个值传递给Perl程序

  5. 5

    Perl:当我从命令行运行“ perl”时,什么都没有发生

  6. 6

    Perl:当我从命令行运行“ perl”时,什么都没有发生

  7. 7

    运行Perl单行代码时Windows cmd如何转换命令行?

  8. 8

    通过命令行运行cron时出现Perl错误?

  9. 9

    命令行上的Perl哈希语法错误

  10. 10

    命令行上的Perl哈希语法错误

  11. 11

    Perl命令行解释器在退出时崩溃

  12. 12

    一个perl命令行,打印用于运行脚本的perl版本

  13. 13

    Perl命令行自动拆分vs / /

  14. 14

    perl命令行参数-MIO标志

  15. 15

    Perl Regex命令行问题

  16. 16

    从其他应用程序/命令行/Apple 脚本运行 Xcode

  17. 17

    使perl在文件上运行

  18. 18

    命令在命令行中运行,但不在Perl脚本中运行

  19. 19

    如何在Perl中运行部分应用程序?

  20. 20

    如何创建用于运行Perl脚本的桌面应用程序

  21. 21

    perl使用shift命令解析命令行参数

  22. 22

    获取命令行perl命令以报告所做的更改

  23. 23

    Perl映像中缺少perl命令

  24. 24

    命令行输入到C程序(使用Perl的“打印”命令)

  25. 25

    使用未知的perl位置运行perl脚本

  26. 26

    为什么此Perl命令在Windows命令行上失败?

  27. 27

    是否同时使用while(<>)ARGV [1]格式的perl命令行参数,可能使用了shift命令?

  28. 28

    是否同时使用while(<>)ARGV [1]格式的perl命令行参数,可能使用了shift命令?

  29. 29

    如何将强制和可选命令行参数都传递给perl脚本?

热门标签

归档