open(MR, "<path_to_report");
$rid;
文件可能非常大。它内部有一个独特的行,格式如下
Root identifier: <some number>
例如
Root identifier: 12987
我需要将12987
提取到$rid
。
我怎样才能在Perl中做到这一点?
答案 0 :(得分:4)
这是另一种使用更现代的习语的方法:
use warnings;
use strict;
open my $file, '<', 'path_to_report' # 3 arg open is safer
or die "could not open file: $!"; # checking for errors is good
my $rid;
while (<$file>) {
last if defined( ($rid) = /Root identifier: (\d+)/ );
}
close $file;
if (defined $rid) {
# do something with $rid
}
答案 1 :(得分:1)
while(<MR>) {
chomp;
($rid) = $_ =~ m/Root identifier: (\d+)/;
last if defined $rid;
}
答案 2 :(得分:0)
使用<>
运算符一次读取一行,并使用Perl正则表达式查找并提取所需内容。如果您处于类似unix的环境中,请检查man perlre
以获取Perl正则表达式参考。
答案 3 :(得分:0)
#!/usr/bin/perl
use strict;
use warning;
open(IN, '<', file) or die $!;
read(IN, my $data, -s file);
$rid =~ $data = m/Root identifier: (\d+)/;
print"$rid";
close(IN);
答案 4 :(得分:0)
以下内容会找到该号码,并将其保留在$rid
open(MR, "<path_to_report");
while(<MR>) {
chomp;
next unless /Root identifier:\s*[0-9]+\s*$/;
tr/\D//g;
$rid = $_;
}
您没有在“:”和数字之间或数字之后指定空格的确切数量或类型,因此我在数字前后包括\s*
以允许可变数量。< / p>
答案 5 :(得分:-2)
我会用这样的东西:
#!/usr/bin/perl
use 5.010;
open(MR, "<", file) or die "cannot open file";
while(<MR>) {
last if(/^Root identifier: (\d+)$/ig);
}
say($1);
P.S。:你也可以使用:
last if(/^Root identifier: (\d+)$/ig) while(<MR>);