Perl的经典用法分享

2019-10-01 13:36:43王旭

chomp($record);
Perl 4.0版本仅有chop()操作,去掉串的最后一个字符, 不管该字符是什么。chomp() 没有这么大的破坏性,如果有行分隔符存在,它仅去掉行分隔符。如果你打算去掉行分隔符,就用chomp() 来代替chop()。
读入多个记录
如果你调用<FH>,返回文件中剩余的记录。如果你处于文件尾,则返回空表:

@records = <FH>;
  if (@records) {
    print "There were ", scalar(@records), " records read. ";
  } 

在下面的一步中,进行赋值和测试两项工作:

if (@records = <FH>) {
    print "There were ", scalar(@records), " records read. ";
  }

chomp() 也可适用对数组操作:
  @records = <FH>;
  chomp(@records);
 对于任何表达式,都可以进行chomp操作,故你可以在下面的一步中这样写:
 chomp(@records = <FH>);

什么是记录?
记录的缺省定义为:“行”。
记录的定义由$/ 变量控制的,该变量存放所输入的记录的分隔符,因为换行符字符(根据定义!)是用来分隔行的,故其缺省值为串“ ”。
例如,你可以用任何你想要替换的符号来代替“ ”。
  $/ = ";";
  $record = <FH>;  # 读入下一个用分号分隔的记录
$/可以取其它两个有趣的值:空串("") 和undef。
读入段落
$/ =""的写法是用来指示Perl读入段落的,段落是由两个或两个以上的换行符构成的文本块。这不同于设置为" ",后者仅读入由两行组成的文本块。在这种情况下,将出现这样一个问题:如果有连续的空行存在,例如“text ”,你既可以把它解释为一个段落 ("text"),也可以解释为两个段落 ("text", 后面跟两个换行符,以及一个空段落,后面跟两个空行。)
在读入文本时,第二个解释用途不大。如果你正在读的段落出现上述情况,你不必过滤出“空”段落。

$/ = " ";
  while (<FH>) {
    chomp;
next unless length;     # 跳过空段
    # ...
  }

你可以把 $/设置为undef,它用于读入后面跟着两个或多个换行符组成的段落:  undef $/;
while (<FH>) {
    chomp;
    # ...
  }

读入整个文件
$/ 的其它有趣的值为undef。如果设置为该值,就将告诉Perl,读命令将把文件的剩余部分作为一个串返回:

undef $/;
  $file = <FH>;

因为改变了 $/的值,将会影响以后的每次读操作,而不仅是下一个读操作。通常,你需要将该操作限制在局部。通过下面的例子,可以把文件句柄的内容读入到一个串中:

{
    local $/ = undef;