Bueno, sigues estando de suerte: Inline::Ruby.gerkrt escribiste:Solo un detalle: a mi no me apasiona el Python, prefiero el Ruby o Perl
Ahora mismo no me acuerdo, pero creo que hace años vi un ejemplo de 'end' en Perl, usando un módulo que filtraba el código del programa Perl. Pero no he vuelto a leer nada al respecto, supongo que porque escribir Perl como algo que no es Perl, no deja de ser algo poco productivo (para una empresa, es primordial que todos los programadores escriban el mismo tipo de código. Para Perl, lo recomendable es seguir las recomendaciones del libro PBP comentado antes).gerkrt escribiste:Nota que el end es en sí, más largo de escribir que el '{}', pero personalmente me gusta más.
Bueno, en Perl puedes hacer algo parecido:gerkrt escribiste:De nuevo me refiero a Ruby diciendo que cuando tu pasas un array a una función no pasas el dato entero, sino la referencia, pero el manejo de ésta es automática.
Using perl Syntax Highlighting
- sub metodo(\@); # declaramos nuestro método, que admite solo una ref. a un array
- @x = 1..4; # creamos un array
- metodo @x; # llamamos al método. No hacen falta ni paréntesis,
- # porque Perl sabe cuántos argumentos necesita.
- # Estamos escribiendo un array, como argumento, pero Perl lo pasará como referencia
- sub metodo (\@) { # definición del método
- my @valores = @{ $_[0]} }; # solo estamos pasando un argumento, y lo desreferenciamos a un array privado
- say join q[-], @valores;
- }
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
De momento, lo único que hay son estos mismos foros. Y con el uso de Google se localiza (casi) todo.gerkrt escribiste:No sé si existirá, pero podrías escribir algún tipo de FAQ o algo así con este tipo de cosas.
Hay unos cuantos módulos que intentan esconder la necesidad de "desplegar" los argumentos pasados. Por ejemplo, selfvars:gerkrt escribiste:P.D.: ¿no hay ningún módulo que mejore el uso de argumentos de las sub(), o algo así?
Using perl Syntax Highlighting
- package MiClase;
- ### Importa $self, @args, %opts y %hopts:
- use selfvars;
- ### Creamos el constructor de la forma normal:
- sub new {
- return bless({}, shift);
- }
- ### Usamos $self en lugar de $_[0]:
- sub foo {
- $self->{foo};
- }
- ### Usamos @args en lugar de @_[1..$#_]:
- sub bar {
- my ($foo, $bar) = @args;
- $self->{foo} = $foo;
- $self->{bar} = $bar;
- }
- ### Usamos %opts en lugar de %{$_[1]}:
- sub baz {
- $self->{x} = $opts{x};
- $self->{y} = $opts{y};
- }
- ### Usamos %hopts con la sintaxis $obj->yada( x => 1, y => 2 )
- sub yada {
- $self->{x} = $hopts{x}
- $self->{y} = $hopts{y}
- }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Por último, creo que te gustará echarle un vistazo a un entorno de trabajo para POO completo en Perl: Spiffy:
Using perl Syntax Highlighting
- package Keen;
- use Spiffy -Base;
- field 'mirth';
- const mood => ':-)';
- sub happy {
- if ($self->mood eq ':-(') {
- $self->mirth(-1);
- print "Cheer up!";
- }
- super;
- }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4