2012-08-27 24 views
8

Hôm nay tôi cài đặt Rakudo sao 2012,07 và tryed để viết một đơn giản Perl 6 kịch bản:hành vi kỳ lạ của Buf.subbuf trong Perl 6

#!/usr/bin/env perl6 

use v6; 
use LWP::Simple; 

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

Nó không làm việc vì các lỗi sau:

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 

mã của LWP :: đơn giản trên đường dây 244 là:

my @header_lines = $resp.subbuf(
    0, $header_end_pos 
).decode('ascii').split(/\r\n/); 

điều lạ là đoạn mã sau là OK:

> Buf.new(1,2,3,4,5).decode('ascii') 

trong khi một thất bại này:

> Buf.new(1,2,3,4,5).subbuf(0,3).decode('ascii') 
Method 'get_string' not found for invocant of class 'String' 

Ông có thể giải thích cho tôi xin vui lòng, tại sao nó xảy ra? Theo như tôi thấy, trong cả hai trường hợp, phương thức Buf.decode được gọi là:

> Buf.new(1,2,3,4,5).subbuf(0,3).isa('Buf') 
True 
> Buf.new(1,2,3,4,5).isa('Buf') 
True 

Có lẽ đó là lỗi trong Rakudo Perl? Hoặc có thể subbuf là một phương pháp không được chấp nhận/không có giấy tờ? Nó không có trên doc.perl6.org. Trong trường hợp này, phương pháp nào nên được sử dụng?

+2

Bạn có thể muốn hỏi điều đó trên IRC, kênh # perl6. Xem: http://irclog.perlgeek.de/perl6/today –

Trả lời

6

Đó là một lỗi trong Rakudo, mà đã được cố định trong phiên bản phát triển mới nhất

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

(Tôi chắc rằng việc sửa chữa cũng là phiên bản Rakudo 2012,08, việc phát hành Rakudo sao dựa trên trình biên dịch sẽ được ra trong tuần này).

Lý do chưa được ghi lại là tôi đã tập trung vào những phương pháp cũng có trong thông số kỹ thuật, vì chúng có cơ hội sống sót cao hơn. Tôi sẽ hy vọng để có được xung quanh để thêm các tài liệu sớm mặc dù.

Cập nhật: tham gia vào nó, xem http://doc.perl6.org/type/Buf#subbuf