2012-08-27 54 views
8

今天我裝Rakudo星2012.07和tryed寫一個簡單的Perl腳本6:奇怪的行爲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 

代碼LWP的::上線244簡單就是:

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

奇怪的是,下面的代碼是OK:

> 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上。在這種情況下應該使用哪種方法?

+2

你可能會想要問的IRC,通道#perl6。 參見:http://irclog.perlgeek.de/perl6/today –

回答

6

這是在Rakudo一個bug,已經被固定在最新開發版本

$ 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星發佈基礎上,編譯器將於本週發佈)。

尚未記錄的原因是我專注於規範中的那些方法,因爲他們有更高的生存機會。儘管如此,我希望儘快添加文檔。

更新:抽時間去了,看到http://doc.perl6.org/type/Buf#subbuf