%20%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%20%D0%BF%D0%BE%20%D1%83%D0%BC%D0%BE%D0%BB%D1%87%D0%B0%D0%BD%D0%B8%D1%8E%3F%20%D0%97%D0%B0%D1%87%D0%B5%D0%BC%20%D0%BC%D0%BD%D0%B5%20%D0%BA%D0%BE%D0%BD%D0%B2%D0%B5%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20Awk%20%D0%B2%20Perl%3F%20.png)
Я удивлен, обнаружив, что эта a2p
утилита установлена по умолчанию в моем дистрибутиве Linux.
a2p
это утилита командной строки, которая преобразуетАвкпрограмма отстандартный вводкперлпрограмма, которую он выводитстандартный вывод.
Зачем мне вообще может понадобиться конвертироватьАвкпрограмма кПерлпрограмма, когда у меня естьАвкпереводчик установлен?
Почему это так?Линуксдистрибутивы включают a2p
в свои установки по умолчанию?
решение1
Возможно, вы захотите использовать эти инструменты для повышения эффективности perl
скриптов.
Вы бы хотели сделать это, если бы у вас была большая perl
программа и вы хотели бы интегрировать функциональность скрипта awk
без вызова подпроцесса. Вы бы вызвали a2p
и интегрировали сгенерированный код в существующий скрипт perl.
Существует похожая утилита, find2perl
которая берет find
командную строку и генерирует perl
код, выполняющий ту же задачу, избегая вызова подпроцесса find
.
Это инструменты оптимизации perl
скриптов.
решение2
Почему он установлен по умолчанию?: Это зависит от разработчика/сопровождающего дистрибутива, который вы используете.
Зачем вам это нужно?
a2p
В awk есть идиома помещения int() вокруг строкового выражения для принудительной числовой интерпретации, даже если аргумент всегда является целым числом. В perl это обычно не нужно, но a2p не может определить, всегда ли аргумент будет целым числом, поэтому он оставляет его. Вы можете захотеть удалить его.
Perl различает числовое сравнение и сравнение строк. В Awk есть один оператор для обоих, который решает во время выполнения, какое сравнение выполнять. A2p не пытается выполнить полную работу по эмуляции awk на этом этапе. Вместо этого он угадывает, что вам нужно. Это почти всегда правильно, но его можно подделать. Все такие угадывания помечаются комментарием "#??? ". Вам следует просмотреть и проверить их. Вы можете запустить perl хотя бы один раз с ключом -w, который предупредит вас, если вы используете == там, где вам следовало использовать eq.
Для дополнительной информации :А2П