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();
}