-1

在数字前加上转义字符 '\' 会产生垃圾值 Ex:

$a = \12;
print $a;

此代码给出以下输出

SCALAR(0x2001ea8)

当我再次执行程序时,输出会发生变化。

如果当用户给出以零开头的任何输入时我从用户那里获取一个值(数字),我不希望它被解释为八进制数。因此,如果数字以零开头,我想转义零。

4

3 回答 3

8

[在评论中,OP 解释说他希望用户输入的数字被视为十进制,即使它们有前导零。]

在数字文字(产生数字的代码)中,前导零告诉 Perl 该数字是八进制的。

$ perl -E'say 045'
37

但这不适用于数字化(将字符串转换为数字)。

# "045" is the same as reading 045 from handle or @ARGV.
$ perl -E'say 0+"045"'
45

所以你不必做任何特别的事情。如果045您将其用作数字,则用户输入意味着四十五(不是三十七)。

如果由于某种原因您确实需要摆脱前导零,您可以使用

$var =~ s/^0+(?!\z)//;

(?!\z)确保"0"不会""变成.

于 2012-09-25T20:04:04.367 回答
4

这不是垃圾值。当 Perl 打印一个引用时,您将得到它所打印的内容。

TYPE(ADDRESS)

这是预期的功能。如果你想要一个 \ 在你的字符串中,你需要转义它。

$str = "\\12";

或者正如Ted Hopp在评论中用字符串文字指出的那样

$str = '\12';

有关详细信息,请参阅Perl 文档

于 2012-09-25T19:58:34.277 回答
3

在 Perl 中,\是引用运算符。它类似于 C 的&(address-of)

于 2012-09-25T19:57:14.153 回答