[Moscow.pm] Интератор инициализирует ссылку на массив/хеш

Oleg Kostyuk cub.uanic на gmail.com
Сб Окт 1 12:15:50 PDT 2011


А как же без использования ref можно безопасно "разименовать
переменную и Получить массив или хэш", когда "не известен тип входной
структуры"?

(то что в кавычках - цитаты)


1 октября 2011 г. 11:43 пользователь Denis Fedoseev
<denis.fedoseev на gmail.com> написал:
> Это паранойя в том плане  - что если тебе нужно разименовать переменную и Получить массив или хэш - то смысла в такой проверке нет. Если тебе нужно Проверить что ссылка это массив или хэш - то тогда надо пользоваться ref eq 'ARRAY'
>
>
> On Sep 30, 2011, at 11:52 PM, Oleg Kostyuk wrote:
>
>> Про перегрузку соглашусь, но почему использование ref eq 'ARRAY' - это
>> паранойя? Это сплошь и рядом используется, например в том же
>> DBIx::Class. Обоснуйте-ка, милейший!
>>
>> 30 сентября 2011 г. 16:51 пользователь Анатолий Шарифулин
>> <sharifulin на gmail.com> написал:
>>> Вместо:
>>> @$t2 = @$t3;
>>> обычно пишу:
>>> $t2 = [ @$t3 ];
>>>
>>> Ну и: нужно быть уверенным в том, что ты разыменовываешь, если не уверен, то
>>> @{ $t2 || [] };
>>> Только не нужно быть пароноиком и использовать ref eq 'ARRAY' или
>>> использовать перегрузку, когда не известен тип входной структуры.
>>> Такая практика меня ещё ни разу не привела к подобным ошибкам.
>>>
>>> 2011/9/30 Alexander Onokhov <ccnweb на gmail.com>
>>>>
>>>> Да про lvalue хорошо
>>>>
>>>> @$t2 = (1,2,3);  # нет ошибки
>>>>
>>>>
>>>> On Fri, Sep 30, 2011 at 4:42 PM, Dmitry Karpich <meettya на gmail.com> wrote:
>>>>>
>>>>>
>>>>> http://stackoverflow.com/questions/6419618/perl-vivification-question-while-dereferencing-undefined-array-reference
>>>>>
>>>>> http://stackoverflow.com/questions/2206836/why-does-perl-autovivify-in-this-case
>>>>> stackoverflow наш друг :)
>>>>>
>>>>> On Sep 30, 2011, at 5:38 PM, Иван Бессарабов wrote:
>>>>>
>>>>> Ок. А почему в списочном контексте происходит инициализация ссылки?
>>>>>
>>>>> 30 сентября 2011 г. 17:32 пользователь Анатолий Шарифулин
>>>>> <sharifulin на gmail.com> написал:
>>>>>
>>>>> Потому что разный контекст.
>>>>>
>>>>> foreach (scalar @$t1) {}
>>>>>
>>>>> Вот так будет идентично ифу.
>>>>>
>>>>>
>>>>> 2011/9/30 Andrew Shitov <andy на shitov.ru>
>>>>>
>>>>> Потому что $t1 станет другим после foreach, а $t2 не станет :-)
>>>>>
>>>>> $ perl -E'use strict; use Data::Dumper; my $t; print Dumper($t); for
>>>>>
>>>>> (@$t) {}; print Dumper($t);'
>>>>>
>>>>> $VAR1 = undef;
>>>>>
>>>>> $VAR1 = [];
>>>>>
>>>>>
>>>>> 2011/9/30 Иван Бессарабов <ivan на bessarabov.ru>:
>>>>>
>>>>> Я не могу понять из-за чего происходит такое поведение.
>>>>>
>>>>> Покажите, пожалуйста, кусок доки где объянено, почему так.
>>>>>
>>>>>
>>>>> #!/usr/bin/perl
>>>>>
>>>>> use strict;
>>>>>
>>>>> use warnings;
>>>>>
>>>>> use 5.010;
>>>>>
>>>>> use Data::Dumper;
>>>>>
>>>>> my ($t1, $t2);
>>>>>
>>>>> foreach (@$t1) {} # почему-то не вызывает ошибку
>>>>>
>>>>> say Dumper $t1;
>>>>>
>>>>> say '' if @$t2; # вызывает ошибку, как и ожидалось
>>>>>
>>>>> say 'end';
>>>>>
>>>>> --
>>>>>
>>>>> Moscow.pm mailing list
>>>>>
>>>>> moscow-pm на pm.org | http://moscow.pm.org
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>>
>>>>> Andrew Shitov
>>>>>
>>>>> ______________________________________________________________________
>>>>>
>>>>> andy на shitov.ru | http://shitov.ru
>>>>>
>>>>> --
>>>>>
>>>>> Moscow.pm mailing list
>>>>>
>>>>> moscow-pm на pm.org | http://moscow.pm.org
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>>
>>>>> С уважением,
>>>>>
>>>>>  Анатолий Шарифулин.
>>>>>
>>>>> --
>>>>>
>>>>> Moscow.pm mailing list
>>>>>
>>>>> moscow-pm на pm.org | http://moscow.pm.org
>>>>>
>>>>>
>>>>> --
>>>>> Moscow.pm mailing list
>>>>> moscow-pm на pm.org | http://moscow.pm.org
>>>>>
>>>>>
>>>>> --
>>>>> Moscow.pm mailing list
>>>>> moscow-pm на pm.org | http://moscow.pm.org
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Alexander
>>>>
>>>> --
>>>> Moscow.pm mailing list
>>>> moscow-pm на pm.org | http://moscow.pm.org
>>>>
>>>
>>>
>>>
>>> --
>>> С уважением,
>>>  Анатолий Шарифулин.
>>>
>>> --
>>> Moscow.pm mailing list
>>> moscow-pm на pm.org | http://moscow.pm.org
>>>
>>>
>>
>>
>>
>> --
>> Sincerely yours,
>> Oleg Kostyuk (CUB-UANIC)
>> --
>> Moscow.pm mailing list
>> moscow-pm на pm.org | http://moscow.pm.org
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>



-- 
Sincerely yours,
Oleg Kostyuk (CUB-UANIC)


Подробная информация о списке рассылки Moscow-pm