【问题标题】:Is it possible to read multiple files with a single filehandle in Perl?是否可以在 Perl 中使用单个文件句柄读取多个文件?
【发布时间】:2010-03-29 09:37:11
【问题描述】:

我有一些这样的日志文件:

  • /var/log/pureftpd.log
  • /var/log/pureftpd.log-20100328
  • /var/log/pureftpd.log-20100322

是否可以将它们全部加载到单个文件句柄中,还是需要分别加载它们?

【问题讨论】:

    标签: perl filehandle


    【解决方案1】:

    一个丑陋的黑客是这样的:

    local @ARGV = qw(
        /var/log/pureftpd.log 
        /var/log/pureftpd.log-20100328 
        /var/log/pureftpd.log-20100322
    );
    
    while(<>) {
        # do something with $_;
    }
    

    【讨论】:

    • 使用特殊的ARGV 文件句柄隐式打开@ARGV 中的每个文件。
    • 这就是我所做的。我不会说它“丑陋”,但它也不漂亮。
    • 嗯,它“丑陋”的原因是因为它很脆弱:您的代码(或其他人的)的任何其他部分都可以通过修改@ARGV 来破坏此代码。对于一个快速的一次性脚本,很好。
    【解决方案2】:

    您可以使用管道将这些文件虚拟地连接到一个文件中。

    【讨论】:

    • 谢谢,这就是我要找的关键字。
    【解决方案3】:

    为每个文件使用不同的文件句柄来做同样的事情并不难:

    foreach my $file ( @ARGV )
        {
        open my($fh), '<', $file or do { warn '...'; next };
        while( <$fh> )
             {
             ...
             }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多