"but it's only about converting undef"
Lest you or anyone else read that as generally true, I repeat, for emphasis re warnings (or for brevity here, -w) and re 'consistent':
perl -we "$x="LanX"; print ($x * 3);"
Argument "LanX" isn't numeric in multiplication (*) at -e line 1.
0
perl -we "$x="LanX"; print ($x % 3);"
Argument "LanX" isn't numeric in modulus (%) at -e line 1.
0
perl -we "$x="LanX"; print (3^$x);"
Argument "LanX" isn't numeric in bitwise xor (^) at -e line 1.
3
perl -we "$x="LanX"; print (3**$x);"
Argument "LanX" isn't numeric in exponentiation (**) at -e line 1.
1
but
perl -we "$x='7LanX'; print (3^$x);"
Argument "7LanX" isn't numeric in bitwise xor (^) at -e line 1.
4
perl -we "$x='7LanX'; print ($x*3);"
Argument "7LanX" isn't numeric in multiplication (*) at -e line 1.
21
perl -we "$x='7LanX'; print (3**$x);"
Argument "7LanX" isn't numeric in exponentiation (**) at -e line 1.
2187
and where it's useful -- using a string as a number because it's being used in an operation which is arithmetic:
perl -we "$x=\"5\"; print ($x*3);" # 2
15
perl -we "$x='5'; print ($x*3);"
15
2 Interesting (or not enough coffee yet?): doze balked at doublequotes without escapes here, but passed 'em cheerfully above. WTF?