Перебор массива по ссылке

Проблема

Имеется ссылка на массив. Вы хотите использовать 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";
}

См. также




2013-09-10 17:05:19

Proverte kod v komentariyah gde pro list tam oshibki detskie




Оставить комментарий:
Ваше Имя:
Email:
Антибот: *  
Ваш комментарий: