system(" linux_command")与Perl库函数

时间:2013-11-12 06:58:19

标签: linux perl

在Perl中,可以使用Perl内置或使用system()调用shell命令来实现某个目标。问题是,对于我作为Perl初学者,有时很难找到与Linux命令相当的Perl。
以此为例:

cat file1 file2 | sort -u > file3

我真的只想使用Perl函数来制作更多Perlish,但我不能轻易找到如何在这种情况下避免使用system()。

所以我想知道,使用Perl Library函数比使用system()调用有什么好处吗?哪种方式更好?

5 个答案:

答案 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指向的systemopen版本的使用具有一些优势。例如,如果您需要对大量数据进行排序,使用系统命令sort将为您带来更多的痛苦。使用perl对几GB进行排序是PITA,但对系统命令sort来说并不是什么大问题,你甚至可以使用所有内核和更少的内存。