Turning on warnings gives:
Argument "O" isn't numeric in substr at test.pl line 2.
hello
Turning on strict & warnings gives:
Global symbol "$string" requires explicit package name at test.pl line
+ 1.
Global symbol "$string" requires explicit package name at test.pl line
+ 2.
Bareword "O" not allowed while "strict subs" in use at test.pl line 2.
Execution of test.pl aborted due to compilation errors.
update: and yeah, without strict, barewords are interpreted as strings, and strings that don't start with numbers are converted to 0 in numeric context. Which should give a warning with warnings enabled.