Perl6 字符串强制运算符 ~ 不喜欢前导零
Perl6 string coercion operator ~ doesn't like leading zeros
我在玩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)
我知道这是一个愚蠢的例子,但这是设计使然吗?如果是,为什么?
我该如何抑制这种警告信息?
你的数据前导零是有原因的吗?当我有一列邮政编码时,我倾向于 运行 解决这个问题。
当他们第一次考虑 Perl 6 时,其中一个目标是解决一些一致性问题。我们有 0x
和 0b
(我想那时候),但是 Perl 5 仍然需要寻找前导 0
来猜测它是八进制的。参见 Radix Markers in Synopsis 2。
但是,Perl 6 还必须关心 Perl 5 程序员将要尝试做什么以及他们期望什么。大多数人会期望前导 0
表示八进制。但是,这并不意味着八进制。这是你输入的文字,而不是你如何使用它。 Perl 6 有很多关于 Perl 5 人会尝试使用的东西的警告,比如 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
我在玩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)
我知道这是一个愚蠢的例子,但这是设计使然吗?如果是,为什么?
我该如何抑制这种警告信息?
你的数据前导零是有原因的吗?当我有一列邮政编码时,我倾向于 运行 解决这个问题。
当他们第一次考虑 Perl 6 时,其中一个目标是解决一些一致性问题。我们有 0x
和 0b
(我想那时候),但是 Perl 5 仍然需要寻找前导 0
来猜测它是八进制的。参见 Radix Markers in Synopsis 2。
但是,Perl 6 还必须关心 Perl 5 程序员将要尝试做什么以及他们期望什么。大多数人会期望前导 0
表示八进制。但是,这并不意味着八进制。这是你输入的文字,而不是你如何使用它。 Perl 6 有很多关于 Perl 5 人会尝试使用的东西的警告,比如 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