my $find = "score";
open (TEST, "lines.txt");
my @line = <TEST>;
for (@line) {
if ($_ =~ /$find/) {
print split ( /score/, $_);
}
}
close (TEST);
打印出来:
100000000 100
100000001 100
100000002 100
但我只希望第一个值不是&#34; 100&#34;
答案 0 :(得分:0)
来自perldoc split
:
将字符串EXPR拆分为字符串列表并返回列表 列表上下文,或标量上下文中列表的大小。
split ( /score/, $_);
返回您打印的字符串列表。鉴于您的输出,我假设您的输入文件行如下所示:
100000000 score100
如果您只想要第一个值,那么您应该从分割中捕获该结果并仅打印该结果。您可以使用undef
忽略您不想捕获的值:
my ($value, undef) = split /score/; # split works on $_ by default
print $value;
另一种方法是不使用正则表达式捕获组对每行进行拆分和替代模式匹配:
if (my ($value) =~ /(\w+) $find/) {
print $value;
}
答案 1 :(得分:0)
if ($_ =~ /$find\s*(\d+)/) {
print "$1\n";
}
答案 2 :(得分:0)
您对拆分的使用是错误的。
虽然这不是最好的方法,但我会纠正你自己的代码,而不是建议更好的方法:
my $find = "score";
open (TEST, "lines.txt");
my @line = <TEST>;
for (@line) {
if ($_ =~ /($find)(\s+)(\d+)(\s+)(\d+)/) {
print $3; $1 will be Score. $2 will be space. $3 will be your value etc.
}
}
close (TEST);