Использование системных команд в Perl вместо встроенных библиотек / функций

Иногда я вижу людей, вызывающих системный grep из Perl (и других языков сценариев) вместо использования встроенных языковых средств / библиотек для анализа файлов. Я хотел бы призвать людей использовать встроенные средства, и я хочу выяснить некоторые причины того, почему рекомендуется использовать встроенные средства. Я могу думать о некоторых, таких как

  • Использование библиотек / языковых средств быстрее. Производительность страдает из-за накладных расходов на выполнение внешних команд.
  • Придерживаться языковых возможностей более переносимо.

какие-то другие причины?

С другой стороны, есть ли причины предпочитать использовать системные команды вместо встроенных языковых средств? На этом примечании: если скрипт Perl в основном вызывает только внешние команды (например, пользовательские утилиты без библиотек), может быть лучше сделать его из сценария оболочки?

3 ответа

Решение

На самом деле, когда это важно, специализированный инструмент может быть быстрее.

Реальные выгоды от сохранения работы в Perl:

  • Портативность (даже между машинами с одной и той же ОС).
  • Легкость обнаружения ошибок.
  • Гибкость в обработке ошибок.
  • Большая настраиваемость / гибкость.
  • Меньше "движущихся частей". (Вы уверены, что правильно избежали всего и правильно настроили среду?)
  • Требуется меньше опыта. (Вам не нужно знать как Perl, так и внешние инструменты (и их порты) для кодирования и обслуживания программы.)

На этом примечании: если скрипт Perl в основном вызывает только внешние команды (например, пользовательские утилиты без библиотек), может быть лучше сделать его из сценария оболочки?

Возможно. Вы можете настроить некоторые оболочки для выхода, если какая-либо программа возвращает неудачный код ошибки. Это может сделать некоторые скрипты достаточно надежными. Например, у меня есть пара bash сценарии с изображением линии

trap 'e=$? ; echo "Error." ; exit $e' ERR

"С другой стороны, есть ли причины отдавать предпочтение системным командам вместо встроенных языковых средств? На этом замечании, если скрипт Perl в основном вызывает только внешние команды (например, пользовательские утилиты без библиотек), возможно, лучше сделать из нее скрипт?"

Рискуя гневом Perl сторонников жесткой линии здесь. Но для меня есть простая причина использовать системный grep вместо perl grep: я знаю его синтаксис.

По той же причине использовать Perl-скрипт вместо bash-скрипта: я знаю, как делать что-то в Perl, и никогда не беспокоился о синтаксисе bash-скрипта.

И пока мы говорим здесь о сценариях, моя главная задача - сделать это быстро и надежно (и читабельно). На работе мне не нужно беспокоиться о переносимости, так как все производство выполняется в одной и той же системе, вплоть до одних и тех же версий программного обеспечения для всего срока службы продукта.

Дома мне не нужно заботиться о жизни или о чем-либо другом, так как сценарий, скорее всего, имеет одно назначение.

И ни в том, ни в другом случае я не беспокоюсь о производительности или безопасности программного обеспечения, так как я бы использовал C++ или что-то еще для коммерческого программного обеспечения или в сценариях с ограниченным временем или памятью.

редактировать: не говоря, что эти причины будут относиться ни к кому, или даже к кому-либо еще Но хотя на самом деле я знаю, как использовать Perls grep, я действительно не знаю, как написать скрипт bash, и, скорее всего, никогда не пойду. Просто поставить несколько строк в Perl всегда быстрее для меня.

Использование внешних инструментов приводит к большему количеству ошибок. Более того, вы должны проанализировать результаты (если таковые имеются) внешней команды, которая является другим источником ошибок. Не нужно говорить, что это плохо с точки зрения безопасности.

Другие вопросы по тегам