hex()
принимает строковый аргумент, поэтому из-за слабой типизации Perl он будет читать аргумент как строку независимо от того, что вы передаете ему.
Первый из них передает 0x30
как строку, что hex()
затем напрямую преобразуется в десятичное число.
Последнее представляет собой шестнадцатеричное число 0x30
, равное 48 в десятичном виде, передается в hex()
, которое затем снова интерпретируется как шестнадцатеричное и преобразуется в десятичное число 72это как hex(hex("0x30"))
.
Вы должны придерживаться hex("0x30")
.
$ perl -e 'print 0x30';
48
$ perl -e 'print hex(0x30)';
72
$ perl -e 'print hex(30)';
48
$ perl -e 'print hex("0x30")';
48
$ perl -e 'print hex(hex(30))';
72