The documentation for pos
explains this behaviour - Where a variable is not specified as the first argument to the pos
function, the match offset is attempted against $_
In the example code that you provide, you are matching against the variable $str while trying to find the match offset against the default variable $_, which naturally returns an undefined error. If you update the code to either match against the variable $_ or return the match offset against the variable $str, your code will execute as expected.
perl -le 'print+unpack("N",pack("B32","00000000000000000000000111111010"))'