我有一个大的(300 kB)文本文件,其中包含由空格分隔的单词.现在我想打开这个文件并逐个处理它中的每个单词.
问题是perl一次一行地读取文件(即)整个文件,这给我带来了奇怪的结果.我知道正常的方法是做类似的事情
open($inFile, 'tagged.txt') or die $!;
$_ = <$inFile>;
@splitted = split(' ',$_);
print $#splitted;
Run Code Online (Sandbox Code Playgroud)
但这给了我一个错误的字数(太大的数组?).
是否可以逐字阅读文本文件?
而不是一下子读取它,尝试逐行的方法,这也更容易在您的机器的内存使用上(虽然300 KB对于现代计算机来说不是太大).
use strict;
use warnings;
my @words;
open (my $inFile, '<', 'tagged.txt') or die $!;
while (<$inFile>) {
chomp;
@words = split(' ');
foreach my $word (@words) { # process }
}
close ($inFile);
Run Code Online (Sandbox Code Playgroud)
要一次读一个字,请将输入记录分隔符 ( $/) 更改为空格:
local $/ = ' ';
Run Code Online (Sandbox Code Playgroud)
例子:
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
{
local $/ = ' ';
while (<DATA>) {
say;
}
}
__DATA__
one two three four five
Run Code Online (Sandbox Code Playgroud)
输出:
one
two
three
four
five
Run Code Online (Sandbox Code Playgroud)