Así que he tenido una función de ucwords simple para Perl que he tenido durante un tiempo, y quería expandirla, esto es lo que se me ocurrió, así es como debería estar construyendo mis funciones para manejar opcionalmente parámetros?¿Es este el camino a seguir para construir subrutinas Perl?
original:
sub ucwords{
$str = @_[0];
$str = lc($str);
$str =~ s/\b(\w)/\u$1/g;
return $str;
}
extendido:
sub ucwords{
if(@_[0] ne undef){#make sure some argument was passed
@overloads = (0,1,2,3);
$str = @_[0];
if(@_[1] eq undef || @_[1] eq 0){ #default is to lowercase all but first
$str = lc($str);
$str =~ s/\b(\w)/\u$1/g;
return $str;
}else{ #second parameters
if(!grep $_ eq @_[1], @overloads){ die("No overload method of ucwords() takes "[email protected]_[1]." as second parameter."); }
if(@_[1] eq 1){ $str =~ s/\b(\w)/\u$1/g;} #first letter to upper, remaining case maintained
if(@_[1] eq 2){ $str = lc($str); $str =~ s/(\w)\b/\u$1/g;} #last letter to upper, remaining to lower
if(@_[1] eq 3){ $str =~ s/(\w)\b/\u$1/g;} #last letter to upper, remaining case maintained
return $str;
}
}else{
die("No overload method of ucwords() takes no arguments");
}
}
Psy
tl; dr, pero ¿su código no hace esto? 'join '' map {ucfirst} split/(\ s +)/$ string'? – Ether
@Psytronic debe leer 'perldoc perlsub': http://perldoc.perl.org/perlsub.html –
Gracias por el consejo, no estaba en particular buscando comentarios sobre la función en sí, sé que probablemente haya mejor formas de hacer el trabajo, fueron más los comentarios con respecto a la forma en que lo había construido, ya que no quiero estar haciendo las cosas mal desde el principio y repitiéndolo una y otra vez. – Psytronic