我正在尝试编写一个脚本,该脚本读取以空格分隔的文本文件并识别某种模式PATTERN
。识别PATTERN
后,脚本应阅读从RANDOM_NUMBER
开始的PATTERN
个字词。例如,假设PATTERN
为a
且RANDOM_NUMBER
为7
。然后为这个文本文件:
1 2 3 4 5 6
a b c d e f
g h i j k j
我想得到:
a b c d e f
g
作为输出。
到目前为止,我已经到了识别这些模式的地步,但我不知道如何处理它。阅读单词的最佳方式是什么?
顺便说一句,我看过Read text file in Perl word by word instead of line by line,这对我的目的来说有点过于模糊。此外,答案并未就代码的作用提供太多解释。
答案 0 :(得分:5)
好的,这里的诀窍是设置$/
- 记录分隔符。如果我们将其设置为' '
,我们可以一次迭代一个'字'。
然后我们可以使用范围运算符来“检测”我们是否在我们的模式之间。
local $/ = ' ';
while ( <DATA> ) {
if ( m/a/ .. 10 ) { print; }
}
现在,这会将从 a打印到“字段10” - 这不是特别有用,因为“count”从文件的开头开始。 (通过
所以我们可能希望在看到的条件为真时“触发”,并继续进行其他一些迭代:
#!/usr/bin/perl
use strict;
use warnings;
local $/ = ' ';
while (<DATA>) {
if (m/a/) {
print;
for ( 2 .. 7 ) { print scalar <DATA>; } #2 because we already have "1"
last; #assuming we only want to do this once.
}
}
__DATA__
1 2 3 4 5 6
a b c d e f
g h i j k j
打印哪些:
a b c d e f
g