Ejemplos

Uno de los ejemplos del tutorial:

osvaldo@vostro:/opt/src/rakudo/examples/files$ cat read_file.p6 
#!/usr/bin/perl6
use v6;
my $filename = "examples/files/read_file.p6";
if (my $fh = open $filename, :r) {
    for $fh.readline -> $line {
        say $line;
    }
} else {
    say "Could not open '$filename'";
}

da este error:

osvaldo@vostro:/opt/src/rakudo$ ./perl6 examples/files/read_file.p6 
Method 'readline' not found for invocant of class 'IO'

Claro, la respuesta la encontre en irc:freenode#perl6

<osvaldo> hi everyone, i'm trying to run some examples and keep on getting this error message:

perl6 examples/files/read_file.p6

Method 'readline' not found for invocant of class 'IO'

any idea what might be happening?

<s1n> osvaldo: doesn't look like readline is in the spec anymore

<avar> I think it's .get now

ol .getline

<osvaldo> ah, ok, so the examples might just be too old then? s1n?

<-- jonathanturner has quit ()

<s1n> osvaldo: yes, the standard is a moving target

<osvaldo> s1n: thks!!

<JimmyZ> osvaldo: that might be not implemented .

<s1n> osvaldo: http://perlcabal.org/syn/S32/IO.html#IO%3A%3AReadable%3A%3AEncoded

<s1n> looks like avar is right

<lambdabot> Title: S32::IO, http://tinyurl.com/oox6bm

en efecto, modifique el codigo del ejemplo

#!/usr/bin/perl6

use v6;

my $filename = "examples/files/read_file.p6";

if (my $fh = open $filename, :r) {

for $fh.get -> $line {

say $line;

}

} else {

say "Could not open '$filename'";

}

y funciona!

osvaldo@vostro:/opt/src/rakudo$ ./perl6 examples/files/read_file.p6

#!/usr/bin/perl6

pero claro, .get devuelve solo una linea hasta el input separator (newline en este caso).

==== Desarrolle un pequeño ejemplo en Perl6 que calcula la serie del amigo Fibonacchi

==== Ah.. es orientado a objetos. El objetivo de este ejemplo es mostrar fundamentos de

==== orientación a objetos con Perl 6. Programado por Walter Lamagna.

#!/bin/perl.exe

use v6;

"Calculando Fibonacci".say();

class Posicion {

has $!num_1; # Objeto privado

has $!num_2; # Objeto pri

method calc {

my $sum = $!num_1 + $!num_2;

return $sum;

}

};

# Fibonacci establece que los primeros 2 numeros de la serie

# son estos:

my $num_2 = 0;

my $num_1 = 1;

my $pos = Posicion.new(num_1 => $num_1, num_2 => $num_2);

my $num_1 = $pos.calc();

$num_2 = 1; # El numero -2 lugares ahora es el que estaba 1 lugar

# antes en la serie.

"$num_1".say();

while 1 {

$pos = Posicion.new(num_1=> $num_1, num_2 => $num_2);

$num_2 = $num_1;

$num_1 = $pos.calc();

"$num_1".say();

}