Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 在数字前面加\prints垃圾值_Perl_Variables_Scalar - Fatal编程技术网

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)//;