在perl中复制输出并从中提取数字

时间:2014-02-24 15:18:32

标签: perl

我正在编写一个perl脚本,我将在其中运行命令并获得如下输出:your id is <895162>。我将存储此字符串并仅读取此字符串中的数字。问题是我的主命令将使用perl的system命令在shell中运行。

喜欢:

#ids.csh is "echo your id is <1123221>"
my $p = system ("./ids.csh 2>&1 > /dev/null"); 
print "$p\n";
$p =~ s/[^0-9]//g;

但输出没有复制到$ p文件,我哪里错了?

2 个答案:

答案 0 :(得分:2)

您已将所有输出重定向到/dev/null,这意味着您的所有输出都将被丢弃。

我想你可能意味着:

 ./ids.csh 2>/dev/null

将stderr重定向到/ dev / null,同时保持stdout不变。

答案 1 :(得分:2)

system运行命令但不捕获它。为此,您需要qx /反叛:

my $p = `./ids.csh 2>/dev/null`;

正如Len Jaffe所说,你可能想扔掉stderr输出(而不是将它显示在你的屏幕上或你的stderr去的地方),而不是stdout(包含你要捕获的消息)。

请注意,当qx失败时,它可以出于几个不同的原因这样做,并且构造有意义的错误消息并非易事。如果遇到问题,请考虑使用IPC::System::Simple的capture()代替。