Página 2 de 2

Re: Manejador de módulos

NotaPublicado: 2016-11-02 17:22 @765
por BigBear
Gracias por la explicación, explorer. Tengo la duda final de cómo puedo saber los argumentos de cada función usando Class::Inspector, ¿o no se puede? Solo necesito que diga algo como funcion_cargar($variable,$tipo).

Re: Manejador de módulos

NotaPublicado: 2016-11-02 17:49 @784
por explorer
Creo que no, que no se puede. Ahora bien... si la función tiene un prototipo, entonces sí que se puede saber, llamando a prototype(nombre-función). Más información en perldoc -f prototype

Hay algunos módulos que lo intentan "adivinar" mirando el código de la propia función, las primeras líneas, porque es ahí donde encontramos cosas como esta:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my($variable,$tipo) = @_;
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4

y entonces deducen que son dos los argumentos, y que se llaman así. Pero hay que tener en cuenta otros casos:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $variable = shift;
  2. my $tipo     = shift;
  3.  
  4. my $variable = $_[0];
  5. my $tipo     = $_[1];
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

y cosas peores.

A partir de v5.22 (experimental) y de v5.24 (oficial), las subrutinas ya se pueden definir con una "firma":

sub funcion_cargar($variable, $tipo) { ... }

pero desconozco si, aún así, existe una forma de obtener los argumentos que no sea leyendo el código. Obviamente, ahora es más fácil saberlo, pero solo si el autor usar Perl >= v5.22.

En el Perl "bastardo", perl5i, sí que existe un método llamado signature(), que es un objeto que almacena el número de argumentos, y si la función es un método o una función.