所以,我有一个像这样的文件
Some.Text~~~Some big text with spaces and numbers and something~~~Some.Text2~~~Again some big test, etc~~~Text~~~Big text~~~And so on
我想要的是,如果$ x与Some.Text匹配,例如,我如何获得带有“带空格和数字等的大文本”的变量,或者如果它与“Some.Text2”匹配得到“再次”一些重大考验等。“
open FILE, "<cats.txt" or die $!;
while (<FILE>) {
chomp;
my @values = split('~~~', $_);
foreach my $val (@values) {
print "$val\n" if ($val eq $x)
}
exit 0;
}
close FILE;
从现在开始,我不知道该怎么做。我只是设法打印“Some.text”,如果它与我的变量匹配。
答案 0 :(得分:2)
splice
可用于从@values
成对删除元素:
while(my ($matcher, $printer) = splice(@values, 0, 2)) {
print $printer if $matcher eq $x;
}
或者,如果您需要保持@values
完整,则可以使用c样式循环:
for (my $i=0; $i<@values; $i+=2) {
print $values[$i+1] if $values[$i] eq $x;
}
答案 1 :(得分:1)
你最好的选择可能不是拆分,而是使用正则表达式,如下所示:
use strict;
use warnings;
use feature 'say';
while (<DATA>) {
while (/Some.Text2?~~~(.+?)~~~/g) {
say $1;
}
}
__DATA__
Some.Text~~~Some big text with spaces and numbers and something~~~Some.Text2~~~Again some big test, etc~~~Text~~~Big text~~~And so on
<强>输出:强>
Some big text with spaces and numbers and something
Again some big test, etc