我在玩Rakudo Star 2015.09。
如果我试图字符串化一个带前导零的整数,编译器会发出警告:
> say (~01234).WHAT
Potential difficulties:
Leading 0 does not indicate octal in Perl 6.
Please use 0o123 if you mean that.
at <unknown file>:1
------> say (~0123<HERE>).WHAT
(Str)
我想也许我可以通过将整数值分配给一个变量来帮助编译器,但得到了相同的结果:
> my $x = 01234; say (~$x).WHAT
Potential difficulties:
Leading 0 does not indicate octal in Perl 6.
Please use 0o1234 if you mean that.
at <unknown file>:1
------> my $x = 01234<HERE>; say (~$x).WHAT
(Str)
我知道这是一个愚蠢的例子,但这是故意的吗?如果是,为什么?
我该如何抑制这种警告信息?
您的数据以零开头是有原因的吗?当我有一列邮政编码时,我往往会遇到这个问题。
当他们第一次考虑Perl6时,其中一个目标是清理一些一致性问题。我们有0x
和0b
(我想那时),但Perl5仍然需要查找领先的0
才能猜测它是八进制的。参见概要2中的根标记。
但是,Perl6还必须关心Perl5程序员将要尝试做什么以及他们期望做什么。大多数人都期望一个前导0
是八进制。但是,它并不意味着八进制。这是你键入的文字,而不是你如何使用它。Perl6有很多关于Perl5用户尝试使用的东西的警告,比如foreach
:
$ perl6 -e 'foreach @*ARGS -> $arg { say $arg }' 1 2 3
===SORRY!=== Error while compiling -e
Unsupported use of 'foreach'; in Perl 6 please use 'for' at -e:1
------> foreach⏏ @*ARGS -> $arg { say $arg }
为了抑制这种警告,不要做它警告你的事情。语言不希望你那样做。如果需要字符串,请从字符串'01234'
开始。或者,如果您希望它是八进制,请从0o
开始。但是,要意识到,字符串化一个数字会让你回到十进制表示:
$ perl6 -e 'say ~0o1234'
668