Na další pokračování článku mě upozornil kolega. Zarazil jsem se už na první ukázce:
sub rada {
my $max = shift // 0;
croak "Parametr musi byt kladny" if $max " = 0;
local ($\, $,) q/ /);
print (1 .. $max);
};
Operátor // je sice elegantní, ale poměrně nový, přidaný až v Perlu 5.10, to znamená, že uživatelé se staršími Perly si nevrznou. Navíc děláte zbytečně flexibilní rozhraní, defaultní hodnota horní meze nemá smysl.
local ... je nesmyslná masáž ega. Co chcete udělat? Vytisknout všechny prvky řady oddělené mezerami a za ně znak konce řádku, což je:
print join(' ', 1 .. $max), "\n";
Proč na to používat obskurní globální proměnné, jejichž význam je nutné dohledávat v manuálu a kvůli "čistotě" je lokalizovat? Ženský s tím neohromíte a mě taky ne :-)
Za "normálními" subroutinami se většinou nepíše středník - prohlédněte si svoji instalaci Perlu. Je to sice hloupost, ale zbytečně nutíte čtenáře k přemýšlení typu: "... nikdo tady středníky nepíše, autor k tomu má jistě nějaký důvod. Ale jaký?"
Jenomže defined-or tady smysl nemá a naopak je matoucí:
sub rada {
my $max = shift // 0;
die bless {}, 'Rada::ZapornyParametr' if $max "= 0; ....
}
Zavolám rada(), dostanu výjimku Rada::ZapornyParametr
a ... budu se drbat na hlavě
Asi by bylo logičtější něco v duchu:
sub rada {
die bless {}, 'Rada::ZadnyParametr' if !@_;
my $max = shift;
...
}