Size: a a a

2021 July 05

VO

Vyacheslav Olkhovche... in Modern::Perl
а можно ли как-то устроить такое извращение -- обрабатывать список в нескольких циклах а-ля файл?
ну т.е. для файла можно писать

while(<F>) { ... last ...}
while(<F>) { ... last ...}
while(<F>) { ... last ...}

с сохранением позиции в файле, а можно ли как-то подобным образом обрабатывать список? ну и что бы текущий элемнт оказывался в $_, разумеется.
источник

МС

Мастер Спирта... in Modern::Perl
foreach например
источник

МС

Мастер Спирта... in Modern::Perl
а, нет
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
и как?
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
во-во
источник

МС

Мастер Спирта... in Modern::Perl
ну тогда вручную сохранять позицию )
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
второй foreach будет игнорировать last в первом.
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
внутри foreach ты позицию просто так не знаешь
источник

МС

Мастер Спирта... in Modern::Perl
my $total = @list;
my $pos = 0;
foreach my $i ($pos .. $total) {
 # do something
}
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
хм, интересно each может сработать
источник

МС

Мастер Спирта... in Modern::Perl
не, опять хрень я написал )
источник

VG

Vadim Goncharov in Modern::Perl
оберни свой список в класс-итератор и делай while ($iter->next)
источник

МС

Мастер Спирта... in Modern::Perl
my $total = @list;
my $pos = 0;
while ($pos < $total) {
 my $elm = $list[$pos];
 $pos++;
 # do something
}
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
As of Perl 5.18 you can use a bare "each" in a "while" loop,
              which will set $_ on every iteration.  If either an "each"
              expression or an explicit assignment of an "each" expression to
              a scalar is used as a "while"/"for" condition, then the
              condition actually tests for definedness of the expression's
              value, not for its regular truth value.
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
но он при этом ставит $_ в индекс, что неудобно
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
о.
while(($_,$_) = each @array
интересно долго ли будет такое работать? я про ($_,$_) =
источник

sA

saintserge Andreev in Modern::Perl
Привет, подскажите куда копать. Одна и таже функция, вызванная через http-get который работает на Mojolicious и вызванная в stand alone script через Test::Mojo и со всеми инициализациями работает почти в 10 раз медленнее.
источник

sA

saintserge Andreev in Modern::Perl
Долго именно работает функция внутри а не все что до и после
источник

a

allter in Modern::Perl
Если я правильно понял такую странную задачу, то вы можете:
1) вручную сохранять позицию
2) сделать итератор по вашему массиву - как просто через какую-то функцию, так и с полным ООП и перегрузкой

В любом случае, учтите, что:
1) данные из файла у вас могут быть только defined, а скаляры в массиве могут быть undef (т.е. стандартный тест на defined, который неявно подразумевается в while (<FH>) не обработает все случаи)
2) данные в файл по мере чтения из него не могут попасть (вставиться), а в массив могут.

Т.е. более правильные варианты обработки массивов - for (;;)/foreach/map
источник

VO

Vyacheslav Olkhovche... in Modern::Perl
1 -- похуй. я файл как раз в этот массив и зачитал, просто мне его надо еще раз обработать типа
источник