今日、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 にはありません。この場合、どの方法を使用する必要がありますか?