![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| GoDleSS |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 11.2.2007 Где: Пироговский Репутация: 2 Всего: 2 |
Сторонние мануалы, проверил,
признаю свою неправоту по данному пункту Не перевыделение, а перезаполнение одной и той же области памяти - явный плюс в сторону перлы! Вообще исследование получается интересным, хоть и отрывает от работы ) Это сообщение отредактировал(а) GoDleSS - 20.3.2008, 18:25 --------------------
It's a nice day to die my friend! |
||||||
|
|||||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Уважаемые коллеги, спасибо за помощь!
Для себя из обсуждения вынес следующее: 1. Локальная переменная внутри цикла создается на первой итерации. На каждой итерации в этом месте ей присваивается значение undef. 2. В perlsub в разделе Private Variables via my() написано
что приводит к разным нетривиальным последствиям (примеры приведены выше). 3. При использовании переменной внутри цикла до строки объявления приводит к использованию одноименной переменной, определенной выше области видимости цикла на любой итерации. Это сообщение отредактировал(а) ginnie - 20.3.2008, 18:31 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| GoDleSS |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 11.2.2007 Где: Пироговский Репутация: 2 Всего: 2 |
Еще одно маленькое исследование
link SCALAR(0x18329f0) value 2 link SCALAR(0x226060) value 3 link SCALAR(0x225e8c) value 4 link SCALAR(0x1832984) value 5 link SCALAR(0x1832b70) value 6 link SCALAR(0x1832b88) value 7 link SCALAR(0x1832ba0) value 8 link SCALAR(0x1832bb8) value 9 link SCALAR(0x1832bd0) value 10 link SCALAR(0x1832be8) value 11 показало, что если на локальную переменную сохраняется ссылка, то память под нее таки выделяется по новой. Perl умный однако Далее замечается один момент: увеличение адреса статично - 24 байта/шаг выделяется сегмент под одну переменную + под 1 элемент массива и того получается, что перла изначально выделяет под скаляр 12 байт Это сообщение отредактировал(а) GoDleSS - 21.3.2008, 14:30 --------------------
It's a nice day to die my friend! |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
GoDleSS, спасибо за важное дополнение!
А вот за
надо по рукам надавать -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| GoDleSS |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 11.2.2007 Где: Пироговский Репутация: 2 Всего: 2 |
Это почему же, позвольте полюбопытствовать? 0_о Часто пользуюсь похожими конструкциями и не вижу в них ничего плохого. --------------------
It's a nice day to die my friend! |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Нигде не встречал рекомендаций по добавлению нового элемента в массив путем инкремента номера последнего элемента этого массива:
Можно ссылку на документацию по поводу ++$#array? -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| GoDleSS |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 11.2.2007 Где: Пироговский Репутация: 2 Всего: 2 |
Пока конструкция на ура, взял его из каких-то готовых решений очень давно использую на ряду с push(@array, LIST); и не вижу явных минусов, за исключением разве что соображения: "Зачем понижать читабельность кода, используя и push, и ++$#array Но это уже все слишком далеко от темы ;) --------------------
It's a nice day to die my friend! |
|||
|
||||
| ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
GoDleSS, если не сложно, расскажите, как работает конструкция
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
| GoDleSS |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 11.2.2007 Где: Пироговский Репутация: 2 Всего: 2 |
$#array содержит индекс последнего элемента массива
если мы говорим $#array=-1; все элементы удаляются (индекс всегда >=0), аналогично @array=(); если мы говорим $#array++ индекс последнего элемента увеличивается на еденицу, но после передачи значения индекса, поэтому $array[$#array++] = expr; приведет к переопределению текущего последнего элемента и созданию нового со значением undef выражение ++$#array увеличит индекс последнего с передачей индекса до выполнения, поэтому $array[++$#array] = expr; банальный аналог push(@array, expr); при условии, что expr - скаляр Надеюсь, что более или менее доступно изложил мысль Это сообщение отредактировал(а) GoDleSS - 21.3.2008, 16:21 --------------------
It's a nice day to die my friend! |
|||
|
||||
| KSURi |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 20 Всего: 27 |
Я вообще думал, что $#arr - readonly oO Спасибо, буду знать, хотя не знаю зачем) -------------------- Died at Life.pl line 21 |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |