Почему a2p (переводчик Awk в Perl) установлен по умолчанию? Зачем мне конвертировать Awk в Perl?

Почему a2p (переводчик Awk в Perl) установлен по умолчанию? Зачем мне конвертировать Awk в Perl?

Я удивлен, обнаружив, что эта a2pутилита установлена ​​по умолчанию в моем дистрибутиве Linux.

a2pэто утилита командной строки, которая преобразуетАвкпрограмма отстандартный вводкперлпрограмма, которую он выводитстандартный вывод.

Зачем мне вообще может понадобиться конвертироватьАвкпрограмма кПерлпрограмма, когда у меня естьАвкпереводчик установлен?

Почему это так?Линуксдистрибутивы включают a2pв свои установки по умолчанию?

решение1

Возможно, вы захотите использовать эти инструменты для повышения эффективности perlскриптов.

Вы бы хотели сделать это, если бы у вас была большая perlпрограмма и вы хотели бы интегрировать функциональность скрипта awkбез вызова подпроцесса. Вы бы вызвали a2pи интегрировали сгенерированный код в существующий скрипт perl.

Существует похожая утилита, find2perlкоторая берет findкомандную строку и генерирует perlкод, выполняющий ту же задачу, избегая вызова подпроцесса find.

Это инструменты оптимизации perlскриптов.

решение2

  1. Почему он установлен по умолчанию?: Это зависит от разработчика/сопровождающего дистрибутива, который вы используете.

  2. Зачем вам это нужно?a2p

В awk есть идиома помещения int() вокруг строкового выражения для принудительной числовой интерпретации, даже если аргумент всегда является целым числом. В perl это обычно не нужно, но a2p не может определить, всегда ли аргумент будет целым числом, поэтому он оставляет его. Вы можете захотеть удалить его.

Perl различает числовое сравнение и сравнение строк. В Awk есть один оператор для обоих, который решает во время выполнения, какое сравнение выполнять. A2p не пытается выполнить полную работу по эмуляции awk на этом этапе. Вместо этого он угадывает, что вам нужно. Это почти всегда правильно, но его можно подделать. Все такие угадывания помечаются комментарием "#??? ". Вам следует просмотреть и проверить их. Вы можете запустить perl хотя бы один раз с ключом -w, который предупредит вас, если вы используете == там, где вам следовало использовать eq.

Для дополнительной информации :А2П

Связанный контент