使用\前面的数字打印垃圾值

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)

当我再次执行程序时输出会改变.

如果我在用户给出任何以零开头的输入时从用户获取值(数字),我不希望它将其解释为八进制数.所以如果数字从零开始,我想逃避零.

ike*_*ami 8

[在评论中,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"不成了"".