Я только что был дан фрагмент кода:Что такое "% _" в perl?
@list = grep { !$_{$_}++ } @list;
Как идиомы для дедупликации. Кажется, что это работает, но - нет %_
, перечисленных в perlvar
.
Я обычно пишу выше, объявляя %seen
.: например
my %seen; my @list = grep { not $seen{$_}++ } @list;
Но %_
, кажется, работает, хотя, как представляется, глобальный масштаб. Может ли кто-нибудь указать мне на нее ссылку? (Или, по крайней мере, успокойте меня, что выполнение вышеизложенного не разрушает что-то важное!)
Вот несколько обсуждений по этому вопросу: http://www.perlmonks.org/?node_id=11757 –
Интригующий. Итак, может быть так же просто, как оставить символ '_' typeglob? Интересно, есть ли что-то более недавнее, что 15 лет назад. (Но я думаю, если бы он не изменился, для этого не было бы причин). – Sobrique
Не то, что вам понадобится «local% _;» в первом фрагменте по той же причине, что и «мой% увиденный», во втором. – ikegami