}
因为要大量进行这样的工作,通常再进行一下简化,
把记录放到$_ 中,而不是$record中:
while (<FH>) {
# $_ 每次为文件中的一个记录
}
在Perl 5.004_04中,我们可以这样做:
while ($record = <FH>) {
# $record 每次为文件中的一个记录
}
defined() 将自动加上,在Perl 5.004_04以前的版本中,该命令给出一个警示。要了解所用的Perl版本,可在命令行下打入:
perl -v
一旦我们读出了一个记录,通常打算去掉记录分隔符,(缺省值为换行符字符):
chomp($record);
Perl 4.0版本仅有chop()操作,去掉串的最后一个字符, 不管该字符是什么。chomp() 没有这么大的破坏性,如果有行分隔符存在,它仅去掉行分隔符。如果你打算去掉行分隔符,就用chomp() 来代替chop()。
读入多个记录
如果你调用<FH>,返回文件中剩余的记录。如果你处于文件尾,则返回空表:
@records = <FH>;
if (@records) {
print "There were ", scalar(@records), " records read.\n";
}
在下面的一步中,进行赋值和测试两项工作:
if (@records = <FH>) {
print "There were ", scalar(@records), " records read.\n";
}
chomp() 也可适用对数组操作:
@records = <FH>;
chomp(@records);
对于任何表达式,都可以进行chomp操作,故你可以在下面的一步中这样写:
chomp(@records = <FH>);
什么是记录?
记录的缺省定义为:“行”。
记录的定义由$/ 变量控制的,该变量存放所输入的记录的分隔符,因为换行符字符(根据定义!)是用来分隔行的,故其缺省值为串“\n”。
例如,你可以用任何你想要替换的符号来代替“\n”。
$/ = ";";
$record = <FH>; # 读入下一个用分号分隔的记录
$/可以取其它两个有趣的值:空串("") 和undef。
读入段落
$/ =""的写法是用来指示Perl读入段落的,段落是由两个或两个以上的换行符构成的文本块。这不同于设置为"\n\n",后者仅读入由两行组成的文本块。在这种情况下,将出现这样一个问题:如果有连续的空行存在,例如“text\n\n\n\n”,你既可以把它解释为一个段落 ("text"),也可以解释为两个段落 ("text", 后面跟两个换行符,以及一个空段落,后面跟两个空行。)
9
7
3
1
2
3
4
5
6
7
4
8
: