Avi*_*wal 3 windows debugging perl path
我试图导航到我存储了我的函数的目录,我需要在我的脚本中使用它来生成结果.但我被卡住了,因为Perl无法理解我的函数位置语法(使用空格).
这是我的代码:
$path ="D:\\AVI MEHENWAL\\PERL\\SCRIPTS\\PROJECTS\\SnmpCheck";
$snmpwalk = `$path\\SnmpWalk.exe -q -t:60 -r:$ip -v:2c -c:$comm -os:1.3.6.1.2.1.1 -op:1.3.6.1.2.1.1.9`;
print "$snmpwalk";
Run Code Online (Sandbox Code Playgroud)
其中SnmpWalk是我的函数,位于路径中,如变量$ path.
Perl在运行时返回以下错误:
D:\AVI MEHENWAL\PERL\SCRIPTS\PROJECTS\SnmpCheck>perl perl_snmpwalk_v2.0.pl
'D:\AVI' is not recognized as an internal or external command,
operable program or batch file.
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
明智地使用正确的引号,这可以整理很多.单引号内的反斜杠不需要转义,除非它们是字符串中的最后一个字符,并且双引号只有在它们也用作字符串分隔符时才需要转义.$snmpwalk打印时输入引号也是(几乎可以肯定)错误的.
my $path = 'D:\AVI MEHENWAL\PERL\SCRIPTS\PROJECTS\SnmpCheck';
my $snmpwalk = `"$path\\SnmpWalk.exe" -q -t:60 -r:$ip -v:2c -c:$comm -os:1.3.6.1.2.1.1 -op:1.3.6.1.2.1.1.9`;
print $snmpwalk;
Run Code Online (Sandbox Code Playgroud)
在Perl中,q{string}可以用来代替'string'(助记符单引号),而qq{string}不是"string"(助记符双引号).双引号评估变量和反斜杠,而单引号则不然.此外,qx{cmd}可以使用而不是反引号`cmd`(助记符引用和执行).
使用这些结构可以在像你这样的情况下更容易地转义字符串:
my $snmpwalk = q{"D:\AVI MEHENWAL\PERL\SCRIPTS\PROJECTS\SnmpCheck\snmpwalk"};
my $result = qx{$snmpwalk -q -t:60 -r:$ip -v:2c -c:$comm -os:1.3.6.1.2.1.1 -op:1.3.6.1.2.1.1.9};
print $result;
Run Code Online (Sandbox Code Playgroud)
另请注意,即使在Windows下,也可以/在路径中使用正斜杠().只要您使用可执行文件的完整路径,它就可以正常工作.