gpt4 book ai didi

perl - 如何统一处理输入文件

转载 作者:行者123 更新时间:2023-12-04 06:55:32 25 4
gpt4 key购买 nike

我有一个程序需要来自 stdin 的输入,或者来自 .log 和 .log.gz 文件的混合输入。以下是我希望程序处理的三种类型的调用:

cat input.log | prog
prog < input.log
prog input.log input.log.gz

程序将所有输入文件视为一个文件。我希望利用 ARGV 来统一处理所有输入:

while (<>) {
# process input
}

我的目标是在同一个循环中处理 gz 文件。如何才能做到这一点?我想知道它有多乱。如果太糟糕我会单独处理gz。

我只能在 Perl 5.8.8 中使用核心模块。

最佳答案

您不能真正做到这一点并获得钻石运营商的速记 yield 。

  • 因为您将不得不修改输入句柄,所以您将需要自己打开文件。
  • 您可以为此使用 @ARGV,但只有为这些文件重新打开 *::STDIN 才能轻松处理.

    my $file = shift;
    if ( !$file ) {} # use STDIN as is.
    elsif ( $file =~ /\.gz$/ ) {
    open( ::STDIN, '-|', "gunzip $file" ) or die "Could not open: $!!";
    }
    else {
    open( ::STDIN, '<', $file ) or die "Could not open $file: $!!";
    }

    while ( <> ) {
    ...
    }
    close STDIN;

关于perl - 如何统一处理输入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13198010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com