140 likes | 366 Views
Seznamy. Seznam = očíslovaná posloupnost skalárů Zápis seznamu do kulatých závorek: ("máslo" ) # jedno členný seznam (1,2,3) # seznam se 3 členy ("jedna",2,3,"osm",100,$pozdrav) () # prázdný seznam (2..7) # (2,3,4,5,6,7) print – seznamový operátor => netřeba závorek
E N D
Seznamy • Seznam = očíslovaná posloupnost skalárů • Zápis seznamu do kulatých závorek:("máslo") # jednočlenný seznam(1,2,3)# seznam se 3 členy("jedna",2,3,"osm",100,$pozdrav) ()# prázdný seznam (2..7) # (2,3,4,5,6,7) • print – seznamový operátor => netřeba závorek • print "Výsledek je ", $prijmeni, "\n"; • tiskne 3členný seznam, nepřidává mezery !
Zápis seznamuřetězců • Místo uvozovek (jednoduchých či dvojitých) lze použít operátory q nebo qq • Operátor qw - nemusí (NESMÍ) se psát uvozovky:qw(máslo mouka sýr rozinky) • Místo závorek lze použít jiný oddělovač, stejně jako pro q, qq • Mezi členy seznamu mohou být mezery, tabulátory, znaky konce řádku:qw[máslo moukasýrrozinky ]
Seznamy a proměnné • ($jedna, $dve) = (1,2); • totéž jako $jedna = 1; $dve = 2; • ($tri, $ctyri) = ($jedna, $dve); • napřed se vyhodnotí seznam vpravo, ten se pak přiřadí do seznamu nalevo • ($tri, $ctyri) = ($ctyri, $tri); # výměna obsahu dvou proměnných • Je to totéž jako $tri = $ctyri; $ctyri = $tri; ?
Pole (array) • = zařízení na ukládání seznamů • Název pole - začíná @, dále stejná pravidla jako pro název proměnné • Ukládání dat do polí: přiřazení seznamu: • my @pole; # deklarace • @pole = (1,3,5); • @pole = qw(máslo mouka sýr rozinky); • Rozdíl print @pole; <--> print "@pole";
Pole a skaláry • @pole je něco jiného než $pole!NEDĚLEJTE TO !!! • Ale lze přiřazovat skaláru pole: @pole = qw(máslo mouka sýr rozinky); $skalar = @pole; print $skalar; # Výsledek je 4 = počet prvků pole print scalar @pole; # totéž • Skalární kontext vs. seznamový kontext @pole2 = @pole; $pole2 = @pole;
Prvky pole • Index pole - pořadí prvku pole • Čísluje se od nuly ! • @pady = qw(nominativ genitiv dativ akuzativ vocativ local instrumental); • print $pady[2]; # co se vypíše? • záporný index - odzadu: print $pady[-3]; • Výpis více prvků najednou: • @pady[3,5,6] # proč tu není $ ? • @pady[0..4] • reverse(@pady[0..4]) #nikoli @pady[4..0] !
Prvky pole - pokr. • Přiřazování prvků pole $pad1 = $pady[0]; @vyber = @pady[0..3,6]; ($pad1,$pad3, $pad7) = @pady[0,2,6]; • Zvl. proměnná $#pole- index posledního prvku pole • Změna obsahu prvku pole - prosté přiřazení: $pole[2] = "třetí pád"; • Vložení jiného pole: @pole1 = (3,5,7); @pole2 = (1,@pole1,9,11); print $pole2[2]; # co se vypíše?
Funkce na polích pop máslo mouka sýr rozinky rozinky pop(@pole); push máslo mouka sýr rum chléb push(@pole,qw/rum chléb/); rum chléb shift máslo mouka sýr rum chléb shift(@pole); máslo unshift cukr sůl mouka sýr rum chléb cukr sůl unshift(@pole, "cukr", sůl");
Další funkce splice cukr sůl mouka sýr rum chléb krupice tvaroh splice(@pole,2,3,"krupice","tvaroh"); pole kolik čím (seznam) odkud Podobné jako u funkce substr, jenže pro prvky pole.
Funkce split • Pracuje na řetězcích, výsledek je seznam $veta = "Dnes máme ale hezké počasí."; @slova = split(" ",$veta); print @slova[1,4], "\n"; # co se vypíše ? split(vzor, řetězec) Vzor může být i více znaků.
Cyklus foreach foreach proměnná (seznam) { blok } • Cyklus se opakuje tolikrát, kolik prvků má seznam • Použití při procházení pole – s každým prvkem seněco provede • Nelze nekonečný cyklus - výhoda foreach $pad (@pady) { print $pad, "\n"; }
Cyklus for for (inicializace ; podmínka ; změna) { blok} for($i = 0; $i <= $#pady; $i++) { print $pady[$i], "\n"; } Použití deklarace my uvnitř cyklu neovlivní hodnotu proměnné vně $i = 666; for(my $i=10;$i>0;$i--) {print $i} print $i; # bude 666
Vnořené cykly my @konce = qw/konec exit quit leave stop/; while(<STDIN>) { chomp; foreach my $k (@konce) { last if ($k eq $_) } print "Stále jsme neskončili, říkáš $_!\n"; } print "Končíme\n";
Návěští my @konce = qw/konec exit quit leave stop/; VNEJSI:while(<STDIN>) { chomp; VNITRNI:foreach my $k (@konce) { last VNEJSIif ($k eq $_) } print "Stále jsme neskončili, říkáš $_!\n"; } print "Končíme\n";