在Perl中,可以使用Perl内置或使用system()调用shell命令来实现某个目标。问题是,对于我作为Perl初学者,有时很难找到与Linux命令相当的Perl。
以此为例:
cat file1 file2 | sort -u > file3
我真的只想使用Perl函数来制作更多Perlish,但我不能轻易找到如何在这种情况下避免使用system()。
所以我想知道,使用Perl Library函数比使用system()调用有什么好处吗?哪种方式更好?
答案 0 :(得分:11)
使用库函数的好处通常是,当出现问题时,您可以提供有意义的错误消息。
对于短期脚本或者当开发资源非常宝贵时,使用系统可能是有意义的。
答案 1 :(得分:9)
local $^I;
local @ARGV = qw(file1 file2);
open my $fh, ">", "file3" or die $!;
my %s;
# print {$fh} (LIST) # or using foreach:
print $fh $_ for
sort
grep !$s{$_}++,
<>;
主要优点是可移植性,没有系统依赖性。
更明确的版本,
use List::MoreUtils qw(uniq);
local $^I;
local @ARGV = qw(file1 file2);
open my $fh, ">", "file3" or die $!;
for my $line (sort uniq readline()) {
print $fh $line;
}
答案 2 :(得分:4)
使用perl库。节省处理器工作以产生另一个进程。当出现问题时也能得到更好的指示。
答案 3 :(得分:1)
如果你想执行系统命令并使其成为perlish,我建议使用open()。
open(fh,"cat test.txt text_file.txt | sort -u >new_file.txt | ");
这使得你的程序简单易懂。在perl中为系统命令提供的支持是它的优点之一。所以最好以它的方式使用它而不是整个行程只是为了使你的代码'Perlish'。
答案 4 :(得分:1)
您当然可以使用mpapec指出的Perl脚本版本。但Asif Idris指向的system
或open
版本的使用具有一些优势。例如,如果您需要对大量数据进行排序,使用系统命令sort
将为您带来更多的痛苦。使用perl对几GB进行排序是PITA,但对系统命令sort
来说并不是什么大问题,你甚至可以使用所有内核和更少的内存。