Оператор Awk и ()

#perl #awk

#perl #awk

Вопрос:

У меня есть код в awk, подобный этому:

 val = and($1, 0x03FFFFFF)   $2
  

Я написал версию Perl следующим образом:

 $val = ($1 amp;amp; 0x03FFFFFF)   $2;
  

Являются ли эти строки одинаковыми?

Комментарии:

1. perl поставляется с a2p, который превращает awk в код Perl.

Ответ №1:

Не совсем — вы хотите amp; , не amp;amp; :

 $val = ($1 amp; 0x03FFFFFF)   $2; 
  

Пожалуйста, обратите внимание, что вы правы в том, что круглые скобки необходимы из-за приоритета


Более подробно:

  • Ваше выражение awk использует and() , которое определено в главе руководства по gawk «8.1.6 Функции управления битами в gawk«, таким образом:

    и(v1, v2) ======= Возвращает побитовое значение И значений, предоставленных v1 и v2.

  • Следовательно, в Perl требуется побитовое «и» ; не логическое, которое согласно perldoc perlop является единственным амперсандом: « amp; «