Quindi ho avuto una semplice funzione ucwords per Perl che ho avuto un po 'di tempo, e volevo espanderla, questo è quello che mi è venuto in mente, è questo il modo in cui dovrei costruire le mie funzioni per gestire opzionali parametri?È questa la strada da percorrere per creare subroutine Perl?
originale:
sub ucwords{
$str = @_[0];
$str = lc($str);
$str =~ s/\b(\w)/\u$1/g;
return $str;
}
estesa:
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, ma il tuo codice non lo fa? 'join '' map {ucfirst} split/(\ s +)/$ stringa'? – Ether
@Psytronic dovresti leggere 'perldoc perlsub': http://perldoc.perl.org/perlsub.html –
Grazie per il consiglio, non ero particolarmente attento ai commenti riguardo la funzione stessa, so che probabilmente ci sono migliori modi di fare il lavoro, è stato più commenti riguardo al modo in cui l'ho costruito, perché non voglio fare cose sbagliate dall'inizio e ripeterlo più e più volte. – Psytronic