Perl 在数字前面加\prints垃圾值
在带有转义字符“\”的数字之前产生垃圾值 例: 此代码给出以下输出Perl 在数字前面加\prints垃圾值,perl,variables,scalar,Perl,Variables,Scalar,在带有转义字符“\”的数字之前产生垃圾值 例: 此代码给出以下输出 SCALAR(0x2001ea8) 当我再次执行程序时,输出会改变 如果当用户给出任何以零开始的输入时,我从用户那里获取一个值(数字),我不希望它被解释为八进制数。因此,如果数字以零开头,我想转义为零。在Perl中,\是引用运算符。它类似于C的&(地址)它不是垃圾值。当Perl打印引用时,您将得到它打印出来的内容 TYPE(ADDRESS) 这是预期的功能。如果希望字符串中有\,则需要将其转义 $str = "\\12";
SCALAR(0x2001ea8)
当我再次执行程序时,输出会改变
如果当用户给出任何以零开始的输入时,我从用户那里获取一个值(数字),我不希望它被解释为八进制数。因此,如果数字以零开头,我想转义为零。在Perl中,
\
是引用运算符。它类似于C的&
(地址)它不是垃圾值。当Perl打印引用时,您将得到它打印出来的内容
TYPE(ADDRESS)
这是预期的功能。如果希望字符串中有\,则需要将其转义
$str = "\\12";
或者如注释中所指出的,使用字符串文字
$str = '\12';
有关更多信息,请参阅。[在一条评论中,OP解释说,他希望用户输入的数字被视为十进制数字,即使它们有前导零。] 在数字文字(生成数字的代码)中,前导零告诉Perl数字是八进制的
$ perl -E'say 045'
37
但这不适用于numification(将字符串转换为数字)
所以你不必做任何特别的事。如果将用户输入的045
用作数字,则表示45(而不是37)
如果出于某种原因确实需要去掉前导零,可以使用
$var =~ s/^0+(?!\z)//;
(?!\z)
确保“0”
不会变为“
”如果从用户处获取值(数字),如果用户提供任何以零开始的输入,我不希望将其解释为八进制数。所以,如果数字以零开头,我想逃避零。我应该问这个问题!
# "045" is the same as reading 045 from handle or @ARGV.
$ perl -E'say 0+"045"'
45
$var =~ s/^0+(?!\z)//;