8

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

4

1 に答える 1

8

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 を参照してください

于 2012-08-27T17:47:44.453 に答える