PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 134
Если нас интересует значение первого найденного элемента, присвойте его переменной $match. Мы не можем просто проверять $item в конце цикла, потому что f о reach автоматически локализует1 переменную-итератор и потому не позволяет узнать ее последнее значение после завершения цикла (см. рецепт АЛ)
Рассмотрим пример. Предположим, в массиве @employees находится список объектов с информацией о работниках, отсортированный в порядке убывания оклада. Мы хотим найти инженера с максимальным окладом; это будет первый инженер в массиве. Требуется только вывести имя инженера, поэтому нас интересует не индекс, а значение элемента.
foreach $employee (©employees) {
if ( $employee->category() eq engineer ) { $highest_engmeer = Semployee last,
print Highest paid engineer is , $highest_engineer->name(), \n ,
1 Термин «локализация» по отношению к переменной означает придание ей локальной области действия — Примеч перео
136 Глава 4 • Массивы
Если нас интересует лишь значение индекса, можно сократить программу — достаточно вспомнить, что при неудачном поиске $i будет содержать недопустимый индекс. В основном экономится объем кода, а не время выполнения, поскольку затраты на присваивание невелики по сравнению с затратами на проверку элементов списка. Однако проверка условия if ($i < ©ARRAY) выглядит несколько туманно по сравнению с очевндной проверкой defined из приведенного выше решения.
for ($1 =0, $1 < ©ARRAY, $l++) {
last if $cnterion, } If ($1 < @ARRAY) {
## Критерий выполняется по индексу $1 } else {
## Неудачный поиск
t> Смотри также
Разделы «For Loops», «Foreach Loops» и «Loop Control»perlsyn(l); описание функции grep вperlfunc(l).
4.13. Поиск всех элементов массива, удовлетворяющих определенному критерию
Проблема
Требуется найти все элементы списка, удовлетворяющие определенному критерию.
Проблема извлечения подмножества из списка остается прежней. Вопрос заключается в том, как найти всех инженеров в списке работников, всех пользователей в административной группе, все интересующие вас имена файлов и т. д.
