gpt4 book ai didi

raku - Perl 6 中 Buf.subbuf 的奇怪行为

转载 作者:行者123 更新时间:2023-12-04 07:56:37 25 4
gpt4 key购买 nike

今天我安装了 Rakudo Star 2012.07 并尝试编写一个简单的 Perl 6 脚本:

#!/usr/bin/env perl6

use v6;
use LWP::Simple;

my $html = LWP::Simple.get('http://perl6.org');
say $html;

由于以下错误,它不起作用:
No such method 'get_string' for invocant of type 'String'
in method decode at src/gen/CORE.setting:6766
in method parse_response at lib/LWP/Simple.pm:244
in method make_request at lib/LWP/Simple.pm:199
in method request_shell at lib/LWP/Simple.pm:63
in method get at lib/LWP/Simple.pm:28

第 244 行 LWP::Simple 的代码是:
my @header_lines = $resp.subbuf(
0, $header_end_pos
).decode('ascii').split(/\r\n/);

奇怪的是下面的代码是可以的:
> Buf.new(1,2,3,4,5).decode('ascii')

虽然这个失败了:
> Buf.new(1,2,3,4,5).subbuf(0,3).decode('ascii')
Method 'get_string' not found for invocant of class 'String'

请你解释一下,为什么会这样?据我所知,在这两种情况下, Buf.decode 方法都被调用:
> Buf.new(1,2,3,4,5).subbuf(0,3).isa('Buf')
True
> Buf.new(1,2,3,4,5).isa('Buf')
True

也许这是 Rakudo Perl 中的一个错误?或者 subbuf 是一种已弃用/未记录的方法?它不在 doc.perl6.org 上。在这种情况下应该使用哪种方法?

最佳答案

这是 Rakudo 中的一个错误,已在最新的开发版本中修复

$ perl6 -e 'say Buf.new(1,2,3,4,5).subbuf(0,3).decode("ascii")'|hexdump -C
00000000 01 02 03 0a |....|

(我很确定修复也是 Rakudo 2012.08 版本,基于编译器的 Rakudo Star 版本将在本周发布)。

它还没有记录的原因是我关注那些也在规范中的方法,因为它们有更高的生存机会。不过,我希望能尽快添加文档。

更新:解决它,见 http://doc.perl6.org/type/Buf#subbuf

关于raku - Perl 6 中 Buf.subbuf 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12141954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com