system("linux_command")与Perl库函数

dul*_*shi 7 linux perl

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

cat file1 file2 | sort -u > file3
Run Code Online (Sandbox Code Playgroud)

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

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

yst*_*sth 11

通常,使用库函数的优点是,当出现问题时,您可以提供有意义的错误消息.

对于短期脚本或者当开发资源非常宝贵时,使用系统可能是有意义的.


Сух*_*й27 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{$_}++,
  <>;
Run Code Online (Sandbox Code Playgroud)

主要优点是可移植性,没有系统依赖性.

更明确的版本,

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;
}
Run Code Online (Sandbox Code Playgroud)

  • @duleshi:只是我是那些普通的Perl用户之一,他们不同意代码更好或更好地包含更少的单词或行.我们的测试脚本往往变得非常庞大和复杂,我更喜欢它们即使对于不熟悉Perl的人来说仍然易于阅读.这是因为通常不使用Perl的同事需要修改脚本,因为他们需要在我们开发的实际软件中测试不同的东西(C++).令我很生气的是,Perl如何拥有使用只写代码的灵气.Perl允许编写每个人都可以阅读的代码而无需了解Perl. (2认同)