|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Eugene Bodin 2:5020/400 18 Sep 2000 07:43:59 To : All Subject : Re: hash via subroutine -------------------------------------------------------------------------------- Hello Serge, Serge Matveev <Serge.Matveev@f182.n5030.z2.fidonet.org> wrote: SM> SM> A> #!/usr/bin/perl SM> A> @frm='From: @from@ Date: @date@ # (skipped) SM> SM> A> &show_frm(\%h); SM> SM> A> sub show_frm { SM> A> local *m = shift; SM> A> foreach $_ (@frm) { SM> A> s/@([a-z]*)@/$m{$1}/g ; SM> A> print $_; SM> A> } SM> A> } SM> SM> Я торможу, наверное. Hо почему этот s/// изменяет не только $_, но и @frm? Потому что $_ в конструкции "for (LIST){}" служит чем-то вроде ссылки на значения списка. В "Perl Cookbook" (книга с бараном или кто там нарисован?) так и написано (стр.123): =cookbook Модификация списков в цикле foreach оказывается более понятной и быстрой, чем в эквивалентном коде с циклом for и указанием конкретных индексов. Это не ошибка: такая возможность была намеренно предусмотрена разработчиками языка. Hе зная о ней, можно случайно изменить содержимое списка. Теперь вы знаете. =cut Regards, Eugene --- ifmail v.2.15dev5 * Origin: Fairness has no quantitive measurement (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/1109190a07d2e.html, оценка из 5, голосов 10
|