Creative Commons License
Excepto donde se indique otra cosa, todo el contenido de este lugar está bajo una licencia de Creative Commons.
Taquiones > perl > pbp > essential > Cuando faltan parámetros

Cuando faltan parámetros ...

... en la llamada a una función lo normal es efectuar una comprobación al inicio de ésta. Ahora bien, un error común es emplear expresiones de este tipo

sub rellenar {
    my ($texto$ancho$relleno) = @_;

    croak "usage: ..." 
        if !texto || !$ancho || !$relleno;

    # etc.
}

puesto que alguno de los parámetros puede contener un valor que expande a cero (como el carácter de relleno 0) que sería aceptable en otro caso.

Existe una forma más fiable de verificar esto y consiste en aplicar un test de definición (defined) a cada uno de los elementos.

Gracias al módulo list moreutils disponemos de varias funciones para trabajar rápidamente con listas:

use List::MoreUtils qw(any);

sub rellenar {
    my ($texto$ancho$relleno) = @_;

    croak "usage: ..."
        if any { !defined $_ } $texto$ancho$relleno;

    # etc.
}

En el caso de que un valor undef sea aceptable para uno ó todos los parámetros bastará con comprobar si tenemos tantos como esperamos, pero sin inspeccionar su valor:

sub rellenar {
    croack "usage: ..." if @_ != 3; 

    my ($texto$ancho$relleno) = @_;

    # etc.
}

Como vimos en [[el paso de parámetros por nombre|perl/pbp/essential/named_arguments]] teníamos otra posibilidad bastante común: uno ó más parámetros fijos seguidos por un hash con el resto. Y en este caso también es posible verificar el número de parámetros (e incluso su contenido) de manera sencilla:

sub rellenar {
    croak "usage: ..." if @_ < 1 || @_ > 2;

    my ($text$arg_ref) = @_;

    # etc.
}