我想通过perl执行$filename = `ls *.gz | head -n 1`;
,但我认为管道导致错误。 Execution of -e aborted due to compilation errors.
这将是perl脚本的一部分,而不是通过-e
运行。
这样做的正确方法是什么?
答案 0 :(得分:3)
怎么样
my $filename = (sort glob "*.gz")[0];
你陈述按字母顺序排列sort,默认情况下使用" 标准字符串比较顺序"。请注意,ls
可以是别名,而其默认值也可能取决于系统。
只有在使用ls
的某些特定优势时,才能使用shell,这在Perl中需要做很多工作。仅仅排序,没有理由退出你的计划。效率低得多,并且需要解决一系列新问题。
mob提出了一个很好的观点。由于sort调用sort BLOCK|SUB LIST
,人们可能想知道上面的glob是否可能以非预期的方式被视为SUB
。事实并非如此,因为内置运动首先出现。然而,这有点接近,这只是更清楚
my ($filename) = sort (glob "*.gz");