Используя tail
? Хорошо. Но это действительно особый случай, поскольку он так прост в использовании и так тривиален.
Проблема, как правило, заключается не в эффективности или переносимости, что в значительной степени не имеет значения;проблема в простоте использования. Чтобы запустить внешнюю утилиту, вы должны выяснить, какие аргументы она принимает, написать код для преобразования структур данных вашей программы в этот формат, правильно заключить их в кавычки, построить командную строку и запустить приложение. Затем вам может потребоваться передать им данные и прочитать данные из них (включая сложность, такую как цикл обработки событий, беспокойство о взаимоблокировке и т. Д.), И, наконец, интерпретировать возвращаемое значение. (Процессы UNIX считают «0» истинным, а все остальное ложным, но Perl допускает обратное. foo() and die
трудно читать.) Это большая работа, и поэтому люди ее избегают. Гораздо проще создать экземпляр класса и вызвать для него методы для получения необходимых данных.
(Вы можете абстрагировать процессы таким способом; см., Например, Crypt :: GpgME. Он обрабатывает сложность, связанную с этим. с вызовом gpg
, что обычно включает создание нескольких файловых дескрипторов, отличных от STDOUT, STDIN и STDERR, среди прочего.)