Hned na úvod se musím všem čtenářům omluvit za trochu nadnesený nadpis. Rád bych ukázal jak lze klasické programové konstrukce zapsat různými způsoby pomocí perlu. Je pravdou že TIMTOWTDI, obzvláště pak v Perlu, ale ke stovce způsobů zápisu jednoho příkladu se asi opravdu nedopracujeme.
Toto není kurz programování v jazyce Perl a ani se jím nesnaží být. Pro první seznámení s Perlem vřele doporučuji knihu pana Satrapy 'Perl pro zelenáče' (vydal Neokortex) jenž se mi jeví býti velmi příjemným, vtipným a přesto informačně dosti obsažným dílem. Pokročilejším pak doporučuji alespoň nahlédnout do Learning Perl (může být i český pčeklad, ale je v něm dosti chyb) a excelentní Object Oriented Programming in Perl[TODO: verify book name] od Damiana Conwaye.
Jen pro pořádek se letmo zmíním o pár základních věcech.
(TODO: duální povaha - číslo x text - automatická konverze)
Klasicke pole s číselným indexem jak je známe z jiných programovacích jazyků.
Pole jehož indexem nemusí být nutně číslo, ale libovolný textový řetězec.
Vypiste po sobe vsechy prvky seznamu oddelene mezerou
Mozne postupy reseni (a urcite naleznete i dalsi)
# nejaky ten seznam at mame co vypisovat my @pole = ( 1, '23', 'text'); # clovek zvykly na jazyk C for (my $i = 0; $i < scalar @pole; $i++) { # zpracovani aktualniho prvku pole print $pole[$i]; print " "; }
!!! TODO: preformatovat !!! Komentar: - scalar @pole vynucenim skalarniho kontextu ziskame delku pole - $pole[$i] vypis prvku pole - " " oddelovaci mezera # o neco lepsi je zapis for (my $i = 0; $i < @pole; $i++) { # zpracovani aktualniho prvku pole print $pole[$i], ' '; } Komentar: - @pole jelikoz je zde skalarni kontext implicitni, neni nutne si jej vynucovat - $pole[$i], ' ' print pracuje se seznamem a nedochazi k interpolaci textu diky tomu, ze nejsou pouzity dvojite uvozovky # 'perlivejsi' zapis for (@pole) { # zpracovani aktualniho prvku pole print $_, ' '; } Komentar: - for (@pole) predavame primo seznam prvku. Aktualne zpracovavany prvek je pak ulozen v implicitni promenne $_ nelze pouzit v pripade potrebby prace s indexem # muzeme pouzit o neco mene ukecany zapis print "$pole[$i] " for (@pole); Komentar: - "$pole[$i] " interpolaci promenne uvnitr textu diky tomu, ze jsou pouzity dvojite uvozovky # lepsi z hlediska trailing space je pak print join(' ', @pole); Komentar: - join(' ', @pole) spojime prvky seznamu do jednoho retezce jenz predame k vypisu pomoci print vyhodou teto konstrukce je chybejici mezera za poslednim prvkem a moznost volby oddelovace # a perlovy guru zapise jen print "@pole"; Komentar: - "@pole" je nutne pouzit interpolaci. V opacnem pripade totiz nejsou vlozeny mezery mezi jednotlive prvky seznamu tento zapis nedava mezeru za posledni prvek seznamu nelze pouzit v pripade potreby jineho oddelovace :-(