Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Artem Chuprina                       2:5020/371.32  02 Feb 2001  17:05:27
 To : Max Martynov
 Subject : Re: вопросик по grep
 -------------------------------------------------------------------------------- 
 
 В твоём письме от Fri, 02 Feb 2001 12:47:23 +0300 написано:
 
 MM> Similarly, grep returns aliases into the original list, much as a for
 MM> loop's index variable aliases the list elements.
 >>That is, modifying an element of a list returned by grep (for example, in
 >>a `foreach', `map' or another `grep') actually modifies the element in
 >>the original list.
 
 MM>     Пишу пpогу:
 
 MM> @allLines=qw(max bucks hi bye hint pink hitro asshole himera lalala);
 MM> my @lines = grep /^hi/, @allLines;
 MM> print "@lines\n";
 MM> print "@allLines\n";
 MM> $lines[2]="qweqweqwe";
 MM> print "@lines\n";
 MM> print "@allLines\n";
 
 MM>     Получаю:
 
 MM> hi hint hitro himera
 MM> max bucks hi bye hint pink hitro asshole himera lalala
 MM> hi hint qweqweqwe himera
 MM> max bucks hi bye hint pink hitro asshole himera lalala
 
 MM> Тоесть в 3 стpоке pезультата замена hitro на qweqweqwe пpошла, а в 4 hitro
 MM> так и осталась, хотя по доке должна была измениться. Я видимо что-то не
 MM> понимаю...
 
 При присваивании результата грепа @lines у тебя происходит копирование
 значений. Вышеупомянутое верно только пока ты работаешь с результатом грепа.
 
 @allLines=qw(max bucks hi bye hint pink hitro asshole himera lalala); 
 (grep /^hi/, @allLines)[2]="qweqweqwe";
 Can't modify list slice in scalar assignment at - line 2, near ""qweqweqwe";"
 
 В то же время
 
 @allLines=qw(max bucks hi bye hint pink hitro asshole himera lalala); 
 map { $_ = "qweqweqwe" if $i==2; $i++ } grep /^hi/, @allLines;
 print "@allLines\n";
 
 дает
 
 max bucks hi bye hint pink qweqweqwe asshole himera lalala
 
 -- 
 Artem Chuprina                            E-mail: ran@ran.pp.ru
 Programmer                                  FIDO: 2:5020/371.32
 Memonet Ltd.                             Phone: +7-095-284-1356
 --- slrn/0.9.6.3-as (Linux)
  * Origin: AKA с подствольным плюсомётом (2:5020/371.32)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 вопросик по grep   Max Martynov   02 Feb 2001 13:47:23 
 Re: вопросик по grep   Artem Chuprina   02 Feb 2001 17:05:27 
Архивное /ru.perl/7279929c0d3d7.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional