[Moscow.pm] Убейте меня пока я не сошел с ума.

Сергей Мартынов sergey на martynov.info
Пн Фев 4 03:42:05 PST 2008


> > Что-то я раньше такого не наблюдал :(
> > блин. Как то даже и не думал об этом.

> У истоков этой рассылки обсуждали, что map и grep приводят к неявному
> копированию [переменной цикла], а foreach - нет, что быстрее.
>
> Вот это как раз оно и есть.

Не помню, чтобы такое обсуждали, но в любом случае это не так: map и
grep в этом смысле ведут себя точно так же, как for.

Цитата из http://search.cpan.org/dist/perl/pod/perlfunc.pod

Note that $_ is an alias to the list value, so it can be used to
modify the elements of the LIST. While this is useful and supported,
it can cause bizarre results if the elements of LIST are not
variables.


То есть:

% perl -e '$var = "foo\n"; map { s/foo/bar/ } $var; print $var;'
bar

% perl -e '$var = "foo\n"; grep { s/foo/bar/ } $var; print $var;'
bar

% perl -e '$var = "foo\n"; for ($var) { s/foo/bar/ }; print $var;'
bar

% perl -e '$var = "foo\n"; s/foo/bar/ for $var; print $var;'
bar

- все эти конструкции работают одинаково.


-- 
С уважением, Сергей Мартынов.


Подробная информация о списке рассылки Moscow-pm