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

Анатолий Шарифулин sharifulin на gmail.com
Сб Окт 1 12:21:04 PDT 2011


Не нужно просто заморачиваться там, где это не нужно, "милейший" :-)

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

> А как же без использования 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 mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>



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


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