2012-08-27 8 views
8

Hoy he instalado Rakudo estrella 2012.07 y tryed para escribir un simple script en Perl 6:Extraño comportamiento de Buf.subbuf en Perl 6

#!/usr/bin/env perl6 

use v6; 
use LWP::Simple; 

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

No funciona debido al siguiente error:

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 

código de LWP :: simple en la línea 244 es:

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

lo extraño es que el siguiente código es correcto:

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

mientras éste falla:

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

¿Me podría explicar por favor, por qué sucede? Por lo que yo puedo ver, en ambos casos, se llama al método 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 

Tal vez sea un error en Rakudo Perl? ¿O quizás subbuf es un método obsoleto/no documentado? No está presente en doc.perl6.org. En este caso, ¿qué método debería usarse?

+2

Es posible que desee pedir que en el IRC, canal # Perl6. Ver: http://irclog.perlgeek.de/perl6/today –

Respuesta

6

Fue un error en Rakudo, que ya ha sido corregido en la versión más reciente desarrollo

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

(estoy bastante seguro de que la solución es también la liberación Rakudo 2012.08, la liberación Rakudo Star basado en el el compilador saldrá esta semana).

La razón por la que aún no está documentado es que me he centrado en los métodos que también están en la especificación, ya que tienen una mayor probabilidad de sobrevivir. Sin embargo, espero poder agregar pronto la documentación.

Actualización: llegó a hacerlo, ve http://doc.perl6.org/type/Buf#subbuf