У меня есть код в awk, подобный этому:
val = and($1, 0x03FFFFFF) + $2
Я написал версию Perl следующим образом:
$val = ($1 && 0x03FFFFFF) + $2;
Являются ли эти строки одинаковыми?
Не совсем - вы хотите &, а не &&:
&
&&
$val = ($1 & 0x03FFFFFF) + $2;
Обратите внимание, что вы правы в том, что скобка необходима из-за приоритета
Более подробно:
Ваше выражение awk использует and(), что определено в руководстве gawk ch. « 8.1.6 Функции управления битами gawk », таким образом:
and()
и (v1, v2) ======= Возвращает побитовое И значений, предоставленных v1 и v2.
Следовательно, в Perl вы хотите побитовый »и« ; не логичный, который согласно perldoc perlop представляет собой один амперсанд: "&"