|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/16679084fcbb9.html, оценка из 5, голосов 10
|