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


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Timur Elzhov                         2:5020/400     14 Dec 2003  20:21:55
 To : All
 Subject : Perl и ссылки
 -------------------------------------------------------------------------------- 
 
 Добрый день.
 
 Пусть есть массив @a из 50 элементов, от 1 до 50. Я хочу разбить его
 на 5 частей и занести в другой массив @res, что первый элемент содержал
 массив 1..10, второй 11..20 и тд. Итак:
 
 @a = (1..50);
 @res = ();
 
 for ($i = 0; $i < 5; $i++) {
     $begin  = 10 * $i;
     $end    = 10 * ($i + 1) - 1;
     @a_slice = @a[$begin..$end];  # копируем срез во временный массив
     push @res, \@a_slice;         # и в новом массиве делаем на него ссылку
 }
 
 печатаем аолучившийся массив на экран:
 for ($i = 0; $i < 5; $i++) {
     for ($j = 0; $j < 10; $j++) {
         printf " %2d", ${$res[$i]}[$j];
     }
     print "\n";
 }
 
  41 42 43 44 45 46 47 48 49 50
  41 42 43 44 45 46 47 48 49 50
  41 42 43 44 45 46 47 48 49 50
  41 42 43 44 45 46 47 48 49 50
  41 42 43 44 45 46 47 48 49 50
 
 ну понятно. В окончательном массиве мы имеем пять ссылок на один и тот
 же массив, который 5 раз обновлялся, и в последний раз туда записались
 последние 10 из 50 элементов.
 Ладно. Открываю perlref(tut) и читаю, что ссылки в Perl - это как
 жесткие ссылки в Unix. Ага. Это в Unix означает, что у файла просто
 2 имени - меняем содержимое одного, меняется, естественно, и у
 другого - оба имени ссылаются на одну область памяти. Hо если мы
 удаляем одно из имен, то содержимое файла сохраняется - до тех пор,
 пока мы не удали все имена. Поэтому я решил после того, как занес
 в новый массив ссылку на @a_slice, сделать
   undef @a_slice;
 
 Hо в итоге и ссылки в @res стали указывать на пустое место :(
 То есть ссылки в Perl действуют несколько по-другому...
 
 Как мне быть с моей задачей? Каждый раз в цикле называть временные
 переменные по-разному?
 
 Спасибо всем, кто поможет!
            
 
 Мур.
 
 --- ifmail v.2.15dev5.1
  * Origin: FidoNet Online - http://www.fido-online.com (2:5020/400)
 
 

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

 Тема:    Автор:    Дата:  
 Perl и ссылки   Timur Elzhov   14 Dec 2003 20:21:55 
 Perl и ссылки   Andrew Alakozow   14 Dec 2003 23:32:23 
 Re: Perl и ссылки   Mikhail Polykovsky   15 Dec 2003 15:03:32 
Архивное /ru.perl/16679084fcbb9.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional