<>的默认文件来源在perl

时间:2014-12-06 09:16:42

标签: perl stdin

我想通过<>读取数据操作

它从stdin或指定为脚本的args

的文件中读取数据

但是,如果没有提供STDIN,也没有指定文件,我想从默认文件路径中读取数据;

所以,它应该像

my $file = '';
if ($ARGC) { open $file, '<default.txt'; }
while (<$file>)  # if no ARGs it should be <>
{
   do_all;
}

3 个答案:

答案 0 :(得分:4)

<>运算符从@ARGV读取输入文件名列表。因此,设置默认输入文件名的一种方法是检查@ARGV是否为空,如果是,请将默认文件名推送到其上:

push @ARGV, "default.txt" unless @ARGV;

我不确定你的意思是什么&#34;没有提交STDIN&#34;,但如果你的意思是你希望你的脚本从foo.txt而不是default.txt读取被调用为例如:

perl script.pl < foo.txt

或:

cat foo.txt | perl script.pl

然后通过使用-t file test检查STDIN是否正在从终端读取来执行此操作。如果STDIN 是tty,则很可能是管道或文件,因此尝试从中读取:

push @ARGV, "default.txt" unless @ARGV or !-t STDIN;

答案 1 :(得分:2)

  

但是,如果没有提供STDIN,也没有指定文件,我想从默认文件路径中读取数据

我想这是因为#34;没有STDIN&#34;你指的是perl STDIN

上没有管道
push @ARGV, "default.txt" if !@ARGV and -t STDIN;

答案 2 :(得分:1)

@ARGV = 'default.txt'
   if !@ARGV && !defined(fileno(STDIN));

从指定文件中读取,或者 如果打开,则从STDIN读取,或者 从default.txt读取。

上述-t测试将因script < filefoo | script而失败。