Perl拆分字符串

Perl拆分字符串,perl,Perl,我得到的结果是: #!/usr/bin/perl $command="lscpu | grep -i Architecture"; #$arch = system($command); @SplitArch = split(/:/, system($command)); print @SplitArch[1]; 我希望唯一能展示的是: Architecture: x86_64 这和你想象的不一样。运行命令并返回其退出状态;因此,在您的情况下,这: x86_64 打印体系结

我得到的结果是:

#!/usr/bin/perl
$command="lscpu | grep -i Architecture";
#$arch = system($command);
@SplitArch = split(/:/, system($command));
print @SplitArch[1];
我希望唯一能展示的是:

Architecture:          x86_64

这和你想象的不一样。运行命令并返回其退出状态;因此,在您的情况下,这:

x86_64
打印
体系结构:x86_64
,因此:

system($command)
打印
体系结构:x86_64
并将
@SplitArch
设置为
(0)

print@SplitArch[1]
然后什么也不打印,因为
@SplitArch
只有一个元素。(顺便说一句,你可能想写
$SplitArch[1]
,而不是
@SplitArch[1]
,但这既不在这里也不在那里。)

由于您显然打算捕获
$command
的输出,请改用:


这和你想象的不一样。运行命令并返回其退出状态;因此,在您的情况下,这:

x86_64
打印
体系结构:x86_64
,因此:

system($command)
打印
体系结构:x86_64
并将
@SplitArch
设置为
(0)

print@SplitArch[1]
然后什么也不打印,因为
@SplitArch
只有一个元素。(顺便说一句,你可能想写
$SplitArch[1]
,而不是
@SplitArch[1]
,但这既不在这里也不在那里。)

由于您显然打算捕获
$command
的输出,请改用:


如果要获取命令的输出,应使用
qx{}
运算符:

@SplitArch = split(/:/, `$command`);
要打印数组索引#1处的值,应使用标量值所需的
$
符号:

my @SplitArch = split /:/ qx{$command};

如果要获取命令的输出,应使用
qx{}
运算符:

@SplitArch = split(/:/, `$command`);
要打印数组索引#1处的值,应使用标量值所需的
$
符号:

my @SplitArch = split /:/ qx{$command};

我相信系统的返回值是命令的退出值,而不是输出

你或许应该:

print $SplitArch[1], "\n";

希望这有帮助。

我相信系统的返回值是命令的退出值,而不是输出值

你或许应该:

print $SplitArch[1], "\n";

希望这有帮助。

已经给出的解释-
系统不会返回您认为它会返回的结果-我只是提供一个替代解决方案

$output = `$command`;
@SplitArch = split(/:/, $output);
open(我的$LSCPU,'-|','LSCPU')或die$!;
而(){
咀嚼;
my($key,$val)=拆分(/:\s*/,$\u2);
if($key eq‘架构’){
打印“$val\n”;
最后;
}
}
关闭($LSCPU);
优点:

  • 尽快离开
  • 不涉及外壳
  • 除了shell之外,还少了一个外部程序
  • 更精确地匹配所需线条

已经给出了解释-
系统
不会返回您认为的结果-我只是提供了一个替代解决方案

$output = `$command`;
@SplitArch = split(/:/, $output);
open(我的$LSCPU,'-|','LSCPU')或die$!;
而(){
咀嚼;
my($key,$val)=拆分(/:\s*/,$\u2);
if($key eq‘架构’){
打印“$val\n”;
最后;
}
}
关闭($LSCPU);
优点:

  • 尽快离开
  • 不涉及外壳
  • 除了shell之外,还少了一个外部程序
  • 更精确地匹配所需线条

在split语句之后,放入此print语句以帮助找出发生了什么…
print“\n\t--$\uu”foreach(@SplitArch)
将溢出控制台中数组的内容,使代码无法正常工作的原因显而易见。在split语句之后,放入此print语句以帮助确定发生了什么…
print“\n\t--$\u”foreach(@SplitArch)
将溢出控制台中数组的内容,从而清楚地说明代码无法工作的原因。