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

Анатолий Шарифулин sharifulin на gmail.com
Пн Окт 3 04:31:11 PDT 2011


Олег, какой Вы настырный :-)

Специфицируйте входные данные и вам не придётся писать лишние проверки.
Если в сабу приходит только ссылка на массив, то не стоит писать код: ref eq
'ARRAY'
Это условие всегда будет тру. Я это имел в виду.


2011/10/3 Oleg Kostyuk <cub.uanic на gmail.com>

> Вопрос был не о том, "а каким другим способом это можно проверить".
> Возможно, формулировка была не однозначна, но имелось ввиду следующее:
> как же вообще можно <cite>безопасно "разименовать переменную и
> Получить массив или хэш", когда "не известен тип входной
> структуры"?</cite> - ведь если данные по ссылке и разыменование не
> совпадут по типам, то будет сгенерировано исключение.
>
>
> 3 октября 2011 г. 12:21 пользователь oleg alexeenkov <proler на gmail.com>
> написал:
> > 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 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
>



-- 
С уважением,
 Анатолий Шарифулин.
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20111003/8986a507/attachment.html>


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