![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| burakov |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
по идее должно напечатать 0, а пишет не могу использовать undefined value as an ARRAY вопрос вот в чем, часто использую ссылки для передачи из попрограммы - как то удобно это А в результате непонятного вот такого поведения ссылки на массив, пришлось, сначала с массивом поработать, а затем через foreach запихать его в ссылку , может есть более простой синтаксис??? передачи массива по ссылке?
Спасибо. |
||||
|
|||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
# perl -le 'my $ref = []; print scalar @$ref'
0 # |
|||
|
||||
| burakov |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
А почему не работает в моем варианте (с круглыми скобками)?
Кто поможет расшифровать? чего я такое написал? |
|||
|
||||
| Pfailed |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 22 Всего: 39 |
Присваиваете скаляру список. При этом в скаляр ($ref) заносится последний элемент списка. undef в данном случае, т.к список пустой.
Посмотрите что даёт этот код, станет понятно. Достаточно было
|
||||||
|
|||||||
| burakov |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
Блин, сколько всего написал уже
Всегда думал что $ref = () это ссылка на безымянный массив. И главное что все всегда работало - этот косяк который обнаружил с undef перый за 5 лет $ref = {} а если так, то ссылка на безымянный хеш. а как тогда указать - на что ссылка? Или как ссылку разименуешь, так perl и будет ее обрабатывать? |
|||
|
||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 22 Всего: 39 |
За 5 лет можно было бы уже и какую-нибудь умную книжку прочитать.
[] - ссылка на анонимный массив {} - ссылка на анонимный хеш () - список @a - массив \@a - ссылка на массив %a - хеш \%a - ссылка на хеш |
|||
|
||||
| SkoobyDoo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 73 Регистрация: 4.10.2007 Репутация: нет Всего: нет |
Если надо узнать, какая структура данных скрывается за ссылкой, можно воспользоваться функцией ref
Это сообщение отредактировал(а) SkoobyDoo - 4.5.2011, 15:46 |
|||
|
||||
| burakov |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 554 Регистрация: 28.7.2006 Репутация: нет Всего: нет |
Так вроде ж где то и прочитал то ... что $ref = () - я ж не сам такое выдумал.
Спасибо за ответы, но все равно непонятно - чем допустим массив от списка (в perl) отличается - ведь у него массивы то и есть списки то есть $ref = (); по идее тоже самое что и $ref = [] Код вот ниже вполне рабочий
|
|||
|
||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 22 Всего: 39 |
Список - неизменчивая последовательность
Массив - напротив Например в perldoc: map BLOCK LIST shift ARRAY Видно, что у map вторым аргументом может быть любая последовательность, а у shift аргументом может быть только массив, т.к. shift изменяет свой аргумент. Подробнее можно найти в сети. https://www.socialtext.net/perl5/array_vs_list В вашем примере my $ref_array = () эквивалентно my $ref_array = undef. Уже писал почему. Затем происходит автооживление: http://en.wikipedia.org/wiki/Autovivification |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |