Должны ли мы в сценариях Perl использовать команды оболочки или вызывать функции Perl, имитирующие операции оболочки?

Я хочу узнать о лучших практиках здесь. Предположим, я хочу получить содержимое некоторой строки файла. Я могу использовать однострочную команду оболочки, чтобы получить ответ, или написать подпрограмму, как показано в коде ниже.

Текстовый файл с именем some_text:

She laughed. Then both continued eating in silence, like strangers,
but after dinner they walked side by side; and there sprang up
between them the light jesting conversation of people who are free
and satisfied, to whom it does not matter where they go or what
they talk about.

Код для получения содержимого строки 5 файла

#!perl
use warnings;
use strict;

my $file = "some_text";
my $lnum = 5;
my $shellcmd = "awk 'NR==$lnum' $file";
print qx($shellcmd);
print getSrcLine($file, $lnum);

sub getSrcLine {
    my($file, $lnum) = @_;
    open FILE, $file or die "$!";
    my @ray = <FILE>;
    return $ray[$lnum-1];
}

Я спрашиваю об этом, потому что вижу много сценариев Perl, где в какой-то момент команда оболочки была вызвана, в то время как в какой-то более поздний момент та же задача выполнялась вызовом (библиотечной или рукописной) функции, например, rm -rfвместо File::Path::rmtree. Я просто хочу сделать это последовательным.

Что рекомендуется делать?

5
задан Unos 1 April 2012 в 18:32
поделиться