1

<>perl プログラムへのパイプライン入力をループするために使用できます。ただし、パイプライン化された入力があるかどうかを判断するにはどうすればよいですか。パイプライン化された入力がない場合は、環境変数を使用してファイルをロードします。私は使用しようとしています:

my @lines = (<>);
if ($#lines == -1) {
    use setenv;
    open FILE, "$ENV{'ART_FILE_LIST'}" or die $!;
    @lines = <FILE>;
}

プログラムは最初の行で待機するため、明らかに機能しません

4

3 に答える 3

2
use 5.010_000;

use utf8;
use strict;
use autodie;
use warnings qw<  FATAL all  >;
use open     qw< :std  :utf8 >;

END {
   close(STDOUT) 
       || die "can't close stdout: $!";
}


if (@ARGV == 0 && -t STDIN) {
    # NB: This is magic open, so the envariable
    #     could hold a pipe, like 'cat -n /some/file |'
    @ARGV = $ENV{ART_FILE_LIST} 
          || die q(need $ART_FILE_LIST envariable set);
}

while (<>) {
    # blah blah blah
}
于 2010-11-19T22:54:23.340 に答える
1

-t 演算子を使用して、端末であるかどうか、つまりパイプラインではないかどうかを確認できます。

if (-t STDIN) { print "Terminal\n" } 
        else { print "Not a terminal\n" }
于 2010-11-19T22:48:44.073 に答える
0

使用するGetopt::Long

perl -Mylib -e 'Mylib::do_stuff' --i_am_pipe_lined

UNIX パイプラインの利点の 1 つは、パイプラインの前後に関係なく、その有用性を実現することです。彼らにはやるべき仕事があり、それを実行します。それらは単純に 1 つのことを行いますが、もう少しカスタマイズして単純な仕事を行うためのスイッチがすべてあります。

于 2010-11-19T22:55:24.377 に答える