我想通过<>读取数据操作符.
它从stdin或指定为脚本args的文件中读取数据
但是,如果没有提供STDIN,也没有指定文件,我想从默认文件路径中读取数据;
所以,应该是这样的
my $file = ''; if ($ARGC) { open $file,'<default.txt'; } while (<$file>) # if no ARGs it should be <> { do_all; }
解决方法
<> operator从@ARGV读取输入文件名列表.因此,设置默认输入文件名的一种方法是检查@ARGV是否为空,如果是,则将默认文件名推送到其上:
push @ARGV,"default.txt" unless @ARGV;
我不确定你所说的“没有STDIN”是什么意思,但如果你的意思是你希望你的脚本从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;