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

在perl中复制输出并从中提取数字,perl,Perl,我正在编写一个perl脚本,在该脚本中,我将运行一个命令并获得如下输出:您的id是。我将存储此字符串并仅从该字符串读取数字。问题是我的主命令将使用来自perl的系统命令在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; #ids.csh是“回显您的

我正在编写一个perl脚本,在该脚本中,我将运行一个命令并获得如下输出:
您的id是
。我将存储此字符串并仅从该字符串读取数字。问题是我的主命令将使用来自perl的系统命令在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;
#ids.csh是“回显您的id是”
my$p=系统(“/ids.csh 2>&1>/dev/null”);
打印“$p\n”;
$p=~s/[^0-9]//g;

但是输出没有复制到$p文件,这是我出错的地方?

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

我想你可能是说:

 ./ids.csh 2>/dev/null
将stderr重定向到/dev/null,同时保持stdout不变。

运行命令但不捕获它。为此,您需要/backticks:

my $p = `./ids.csh 2>/dev/null`;
正如Len Jaffe所说,您可能希望丢弃stderr输出(而不是将其显示在屏幕上或stderr要去的任何地方),而不是stdout(包含您想要捕获的消息)


请注意,当qx失败时,它可以出于几个不同的原因这样做,并且构造一条有意义的错误消息并非易事。如果您遇到问题,请考虑使用“s CAPETHORE())。谢谢,但我想把结果存储到$P,让我的ID.CSH只有<代码>回声“我的名字是ToYB1234”< /代码>,所以当我运行这个文件时,它将给出输出<代码>我的名字是toBy1234 < /Cord>。我想把它存储在$P中,然后我将从中提取数字。抱歉解释错误尽管system()和backticks之间存在差异,但将输出重定向到/dev/null意味着将永远看不到echo语句的结果。现在此命令将
/ids.csh 2>/dev/null
作为输出打印,我尝试使用system,然后它会打印回显行,但不会将其复制到$p,如果我打印,则$p值为0。然后您没有使用反勾号,而是使用单引号。反勾号通常与tilde~位于键盘上的同一个键上。或者你可以只做
my$p=qx/ids.csh 2>/dev/null(明确指定qx可以让您选择所需的任何分隔符)。