我正在解析来自stdin的输入,其格式如下:
1
2
3
done
我目前的代码是:
while(<> =~ /(\d+)/) {
# do something with $1
}
# I want to access the line following the last number here
对于文件的第1部分(带有数字列表)很好。 但是,我希望该行的内容紧跟在最后一个数字之后。
有没有优雅的方法呢?
答案 0 :(得分:3)
您可以使用:
my $line;
while( ($line = <>) =~ /^(\d+)$/ ) {
# do something with $1
}
chomp $line;
# Do something with $line (done)
另一个答案指出,使用chomp
输入行是个好主意。它将以独立于平台的方式处理换行符char或chars。如果您使用正则表达式匹配数字,$1
将&#34;清理&#34;。
另外,如另一个答案所述,/(\d+)/
将匹配该行中任意位置的数字。 /^(\d+)$/
将匹配仅包含数字的行。
另一种方式:
foreach my $line (<>) {
if( $line =~ /^(\d+)$/ ) {
# Do something with $1
}
else {
chomp $line;
# Do something with $line (done)
}
}
这将让您处理多个甚至交替的数字和其他文本行。
答案 1 :(得分:1)
while (<>) {
chomp;
last if !/^\d+\z/;
... $_ ...
}
die("Premature EOF") if !defined($_);
... $_ ...
答案 2 :(得分:0)
你可以这样做
my $var = <>;
chomp $var;
while($var =~ /^(\d+)$/)
{
#here do stuff with $var, containing only numbers
$var = <>;
chomp $var;
}
# here do stuff with $var, containing now a word
其他事项:通过更改/(\d+)/
/^(\d+)$/
,确保您的条目仅包含数字;)