我想通过<>读取数据操作
它从stdin或指定为脚本的args
的文件中读取数据但是,如果没有提供STDIN,也没有指定文件,我想从默认文件路径中读取数据;
所以,它应该像
my $file = '';
if ($ARGC) { open $file, '<default.txt'; }
while (<$file>) # if no ARGs it should be <>
{
do_all;
}
答案 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 < file
和foo | script
而失败。