我在perl中编写了这段代码:
shift( @interfaces = qx'ifconfig -s' );
Run Code Online (Sandbox Code Playgroud)
并得到这个错误:
Type of arg 1 to shift must be array (not list assignment)
Run Code Online (Sandbox Code Playgroud)
当我这样写的时候:
@interfaces = qx'ifconfig -s';
shift @interfaces;
Run Code Online (Sandbox Code Playgroud)
它做我想要的,即将ifconfig命令的输出作为一个行数组并删除数组中的第一个元素(这是一个标题,而不是一个实际的接口).
我个人的偏好是把它写成一个班轮.在我看来,第一个例子中的括号应该导致赋值被完全解析,因此允许转换将@interfaces看作一个数组,但显然perl认为它是一个"列表赋值".
对于perl大师来说,这肯定是一个简单的问题,但我用Google搜索并用谷歌搜索并没有找到启示.
如果有人愿意提供具体的语义来完成我想要的一行,我将不胜感激.如果你也请花时间解释为什么我的第一个版本不起作用我会永远感激(教一个人钓鱼等等).
预先感谢您的帮助.
我知道如何做到这一点.我只是想从一个更大的字符串中获取一个子字符串并将其分配给标量.所以这是我破解的Perl脚本......
#!/usr/local/bin/perl
use warnings;
use strict;
my $thing = "thing1 thing2 thing3 thing4 thing5 thing6 thing7 thing8";
my $thing4 = ${@{split (/ /, $thing)}[3]};
print "thing4 is $thing4\n";
Run Code Online (Sandbox Code Playgroud)
...我得到的输出是......
Use of uninitialized value $_ in split at ./perlex.pl line 6.
Can't use string ("0") as an ARRAY ref while "strict refs" in use at ./perlex.pl line 6.
Run Code Online (Sandbox Code Playgroud)
......我希望输出结果......
thing4 is thing4
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
perl ×2