LINUXSOFT.cz
Nazwa użytkownika: Hasło:     
    CZ UK PL

> Komentarze :: článek Perl (14) - Další nástroje pro seznamy

Malé doplnění 29.9.2005 10:13
Hynek (Pichi) Vychodil
V díle nazvaném Funkce pro seznamy bych čekal popis funkcí map, grep a sort. To jen tak pro zahřátí ;-) A teď ty zajímavější věci. Popis foreach:Do proměnné $klic se každou iteraci cyklu přiřadí jedna hodnota pole. To je popis, který by mohl začátečníkovi připadat, že ekvivalentem
foreach $item (@array) BLOK
je
for ($index = 0; $index < @array; $index++) {
  $item = $array[$index];
  BLOK
}
, ale on je to spíš
for ($index = 0; $index < @array; $index++) {
  *item = \$array[$index];
  BLOK
}
Rozdíl si lze demonstrovat na uvedeném příkladu
foreach $klic (@ptaci) {
  substr($klic,0,1) = uc substr $klic,0,1;
}
print join(", ", @ptaci), "\n"; # vytiskne Kos, Vrabec, Papoušek, Datel
Podobná kouzla lze provozovat i s hashem. Při použití keys sice zpracovávaný hash nezměníme, ale při práci s values jej modifikovat lze.
foreach $klic (keys %ptaci) {
  substr($klic,0,1) = uc substr $klic,0,1; # k modifikaci nedojde
}
foreach $value (values %ptaci) {
  substr($value,0,1) = uc substr $value,0,1; # k modifikaci dojde
}
while (($klic, $value) = each %ptaci) {
  print "$value je potrava pro $klic.\n";
} # vytiskne věty s velkým počátečním písmenem
Proto by uvedená formulace měla spíš znít: Proměnná $klic se každou iteraci cyklu stane prvkem pole.
A ještě něco 29.9.2005 10:31
Hynek (Pichi) Vychodil
Oddělovačem ve funkci split není normální řetězec, ale regexp. Viz man perlfunc ;-)
@a=split '.', 'jakykoli retezec';
print "Pole je prázdné protože všechny znaky jsou oddělovačem\n" unless @a;
P.S.: Přesnější by bylo v uvedeném příkladě místo '.' napsat /./s případně qr(.)s kvůli možnosti, že řetězec může obsahovat znak "\n" a ten . standardně nematchuje.

KOMENTARZE
Malé doplnění 29.9.2005 10:13 Hynek (Pichi) Vychodil
A ještě něco 29.9.2005 10:31 Hynek (Pichi) Vychodil
Tylko zarejestrowani użytkownicy mogą dopisywać komentarze.
> Szukanie oprogramowania
1. Pacman linux
Download: 4791x
2. FreeBSD
Download: 8984x
3. PCLinuxOS-2010
Download: 8488x
4. alcolix
Download: 10804x
5. Onebase Linux
Download: 9568x
6. Novell Linux Desktop
Download: 0x
7. KateOS
Download: 6142x

1. xinetd
Download: 2331x
2. RDGS
Download: 937x
3. spkg
Download: 4549x
4. LinPacker
Download: 9801x
5. VFU File Manager
Download: 3116x
6. LeftHand Mała Księgowość
Download: 7002x
7. MISU pyFotoResize
Download: 2700x
8. Lefthand CRM
Download: 3486x
9. MetadataExtractor
Download: 0x
10. RCP100
Download: 3001x
11. Predaj softveru
Download: 0x
12. MSH Free Autoresponder
Download: 0x
©Pavel Kysilka - 2003-2024 | mailatlinuxsoft.cz | Design: www.megadesign.cz