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. }




