2012-08-27 17 views
8

Oggi ho installato Rakudo Stella 2.012,07 e provato a scrivere un semplice Perl 6 script:strano comportamento di Buf.subbuf in Perl 6

#!/usr/bin/env perl6 

use v6; 
use LWP::Simple; 

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

Non funziona a causa del seguente errore:

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 

codice di LWP :: Simple on line 244 è:

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

la cosa strana è che il seguente codice è OK:

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

mentre questo non riesce:

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

Mi può spiegare per favore, perché succede? Per quanto posso vedere, in entrambi i casi il metodo Buf.decode si chiama:

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

Forse è un bug in Rakudo Perl? O forse subbuf è un metodo deprecato/non documentato? Non è presente su doc.perl6.org. In questo caso quale metodo dovrebbe essere usato?

+2

Si potrebbe desiderare di chiedere che su IRC, canale # perl6. Vedi: http://irclog.perlgeek.de/perl6/oggi –

risposta

6

E 'stato un bug in Rakudo, che è già stato risolto nella versione più recente sviluppo

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

(sono abbastanza sicuro che la correzione è anche il rilascio Rakudo 2.012,08, il rilascio Rakudo Stella basato sulla il compilatore uscirà questa settimana).

La ragione per cui non è ancora documentato è che mi sono concentrato su quei metodi che sono anche nelle specifiche, dal momento che hanno una maggiore possibilità di sopravvivere. Spero di riuscire ad aggiungere presto la documentazione.

Aggiornamento: ottenuto intorno ad esso, vedere http://doc.perl6.org/type/Buf#subbuf