VAR*_*121 -1 variables perl scalar
前面带有转义字符'\'的数字会产生垃圾值Ex:
$a = \12;
print $a;
Run Code Online (Sandbox Code Playgroud)
此代码给出了以下输出
SCALAR(0x2001ea8)
Run Code Online (Sandbox Code Playgroud)
当我再次执行程序时输出会改变.
如果我在用户给出任何以零开头的输入时从用户获取值(数字),我不希望它将其解释为八进制数.所以如果数字从零开始,我想逃避零.
[在评论中,OP解释说他希望用户输入的数字被视为十进制,即使它们具有前导零.]
在数字文字(产生数字的代码)中,前导零告诉Perl该数字是八进制的.
$ perl -E'say 045'
37
Run Code Online (Sandbox Code Playgroud)
但这不适用于数字化(将字符串转换为数字).
# "045" is the same as reading 045 from handle or @ARGV.
$ perl -E'say 0+"045"'
45
Run Code Online (Sandbox Code Playgroud)
所以你不必做任何特别的事情.一个045由用户输入工具45(非37)如果你使用它作为一个数字.
如果由于某种原因你确实需要摆脱前导零,你可以使用
$var =~ s/^0+(?!\z)//;
Run Code Online (Sandbox Code Playgroud)
在(?!\z)确保"0"不成了"".