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"))'