您的位置:首页 >> Web开发 >> CGI技术 >> 正文
CGI技术 RSS
 

Perl的经典用法

http://www.rdxx.com 06年04月21日 07:27 网海之贝 我要投稿

关键词: Perl


在读入文本时,第二个解释用途不大。如果你正在读的段落出现上述情况,你不必过滤出“空”段落。

$/ = "\n\n";

  while (<FH>) {

    chomp;

next unless length;     # 跳过空段

    # ...

  }


你可以把 $/设置为undef,它用于读入后面跟着两个或多个换行符组成的段落:  undef $/;

while (<FH>) {

    chomp;

    # ...

  }


读入整个文件

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

因为改变了 $/的值,将会影响以后的每次读操作,而不仅是下一个读操作。通常,你需要将该操作限制在局部。通过下面的例子,可以把文件句柄的内容读入到一个串中:
{
  local $/ = undef;
  $file = <FH>;
}
记住:Perl变量可读入很长的串。尽管你的文件大小不可以超出你的虚拟内存容量的限度,你仍可以读入尽可能多的数据。
正则表达式对文件进行操作
一旦你有个包含了整个串的变量,你可以使用正则表达式,对整个文件进行操作,而不是对文件中的某个块进行操作。有两个有用的正则表达式标记/s和/m。一般,Perl的正则表达式对行进行处理,你可以这样写:

undef $/;

  $line = <FH>;

  if ($line =~ /(b.*grass)$/) {

    print "found $1\n";

  }


如果把我们的文件填入如下内容:
  browngrass

  bluegrass

则输出为:

found bluegrass

它没有找到“browngrass”,这是因为$ 仅在串尾寻找其匹配, (或者在串结束前的一行)。如果在包含很多行的串中,用"^" 和"$" 来匹配,, 我们可以使用 /m ("multiline") 选项:

if ($line =~ /(b.*grass)$/m) {}

现在程序会把如下的信息输出:

  found browngrass

类似地,句点可以匹配除了换行符之外的所有字符:

while (<FH>) {

    if (/19(.*)$/) {

      if ($1 < 20) {

      $year = 2000+$1;

      } else {

      $year = 1900+$1;

      }

    }

  }


如果我们从文件中读入“1981”,$_ 将包含“1981\n”。正则表达式中的句点匹配“8”和“1”, 而不匹配“\n”。这里正需要这样做,因为换行符不是日期的组成部分。

共7页  第1页 第2页 第3页 第4页 第5页 第6页 第7页


 
 
标签: Perl 打印本文
 
 
  热点搜索
 
 
 



Valid XHTML 1.0 Transitional
Copyright ©2005 - 2008 Rdxx.Com,All Rights Reserved
收藏本页
收藏本站