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

oleg alexeenkov proler на gmail.com
Пн Окт 3 02:21:21 PDT 2011


Oleg Kostyuk <cub.uanic на gmail.com> писал(а) в своём письме Sat, 01 Oct  
2011 23:15:50 +0400:

UNIVERSAL::isa($a, 'HASH')

> А как же без использования 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
>>
>
>


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