Перебор массива по ссылке
Проблема
Имеется ссылка на массив. Вы хотите использовать foreach для обращения к каждому элементу массива.
Решение
Для перебора разыменованного (dereferenced) массива используется цикл foreach или for:
# Перебор элементов массива $ARRAYREF
foreach $item((@$$ARRAYREF) {
# Сделать что-то с $item
}
for ($i = 0; $i <= $#$ARRAYREF; $i++) {
# Сделать что-то с $ARARAYREF->[$i]
}
Комментарий
Приведенное решение предполагает, что у вас имеется скалярная переменная, содержащая ссылку на массив.
Это позволяет делать следующее:
@fruits = ( "Apple", "Blackberry" );
$fruit_ref = \@fruits;
foreach $fruit (@$fruit_ref ) {
print "$fruit tastes good in a pie.\n";
}
Цикл foreach можно переписать в цикле for следующего вида:
for ($i=0; $i <= $#$fruit_ref; $i++) {
print "$fruit_ref->[$i] tastes good in a pie.\n";
}
Однако ссылка на массив нередко является результатом более сложного выражения. Для превращения
такого результата в массив применяется конструкция @{ EXPR }:
$namelist{felines} = \@rogue_cats;
foreach $cat ( @{ $namelist{felines} } ) {
print "$cat purrs hypnotically..\n";
}
print "--More--\nYou are controlled.\n";
Как и прежде, цикл fоreach можно заменить эквивалентным циклом for:
for ($i=0; $i <= $#{ $namelist{felines} }; $i++) {
print "$namelist{felines}[$i] purrs hypnotically.\n";
}
См. также
Proverte kod v komentariyah gde pro list tam oshibki detskie
Оставить комментарий:
|
|