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 jefor ($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říkladuforeach $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. |