【问题标题】:Why does this program not find the word 'error' in my text file?为什么这个程序在我的文本文件中找不到“错误”这个词?
【发布时间】:2011-03-24 11:22:25
【问题描述】:
open(LOG,"logfile.txt") or die "Unable to open $logfile:$!";
print "\n";
while(<$LOG>){
  print if /\berror\b/i;
}
close(LOG);

【问题讨论】:

  • 使用严格。使用严格。使用严格。
  • 使用警告;比使用严格更重要
  • 使用 3-arg 打开和词法文件句柄 :)

标签: perl perl-io


【解决方案1】:

open LOG, "logfile.txt"; while (<LOG>) { print if /\berror\b/i; }

【讨论】:

    【解决方案2】:

    你有一个错误:

    while (<$LOG>)
    

    应该阅读

    while (<LOG>)
    

    文件句柄不是变量,所以没有 $。

    【讨论】:

    • 如果你使用词法文件句柄,文件句柄可以是变量
    • +1 @jmz,您是唯一(到目前为止)明确回答问题的人。也许您应该澄清一下,“文件句柄”是指代表打开文件的动态范围的文字标识符。
    【解决方案3】:

    您的错字实际上使您更接近以正确的方式打开文件——即使用推荐的 3 参数形式 open

    use strict;
    use warnings;
    
    open(my $log, '<', "logfile.txt") or die "Open failed : $logfile : $!";
    while (<$log>) {
        ...
    }
    

    这种方法更好,因为您的文件句柄可以存储在词法范围的变量中(而不是像LOG 这样的全局名称)。这为在词法变量超出范围时自动关闭文件提供了额外的好处。此外,词法文件句柄可以使用更熟悉的语法在子例程之间传递。

    【讨论】:

      【解决方案4】:

      如果您想要更轻松的open,您可以这样做:

      @ARGV = 'logfile.txt';
      while ( <> ) { 
          print if /\berror\b/i;
      }
      

      【讨论】:

        猜你喜欢
        • 2022-01-05
        • 1970-01-01
        • 2017-09-18
        • 2011-08-03
        • 2014-01-05
        • 1970-01-01
        • 2022-01-19
        • 2011-05-06
        • 1970-01-01
        相关资源
        最近更新 更多