Не нужно просто заморачиваться там, где это не нужно, "милейший" :-)<div><br></div><div><div class="gmail_quote">2011/10/1 Oleg Kostyuk <span dir="ltr"><<a href="mailto:cub.uanic@gmail.com">cub.uanic@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">А как же без использования ref можно безопасно "разименовать<br>
переменную и Получить массив или хэш", когда "не известен тип входной<br>
структуры"?<br>
<br>
(то что в кавычках - цитаты)<br>
<br>
<br>
1 октября 2011 г. 11:43 пользователь Denis Fedoseev<br>
<<a href="mailto:denis.fedoseev@gmail.com">denis.fedoseev@gmail.com</a>> написал:<br>
<div><div></div><div class="h5">> Это паранойя в том плане  - что если тебе нужно разименовать переменную и Получить массив или хэш - то смысла в такой проверке нет. Если тебе нужно Проверить что ссылка это массив или хэш - то тогда надо пользоваться ref eq 'ARRAY'<br>

><br>
><br>
> On Sep 30, 2011, at 11:52 PM, Oleg Kostyuk wrote:<br>
><br>
>> Про перегрузку соглашусь, но почему использование ref eq 'ARRAY' - это<br>
>> паранойя? Это сплошь и рядом используется, например в том же<br>
>> DBIx::Class. Обоснуйте-ка, милейший!<br>
>><br>
>> 30 сентября 2011 г. 16:51 пользователь Анатолий Шарифулин<br>
>> <<a href="mailto:sharifulin@gmail.com">sharifulin@gmail.com</a>> написал:<br>
>>> Вместо:<br>
>>> @$t2 = @$t3;<br>
>>> обычно пишу:<br>
>>> $t2 = [ @$t3 ];<br>
>>><br>
>>> Ну и: нужно быть уверенным в том, что ты разыменовываешь, если не уверен, то<br>
>>> @{ $t2 || [] };<br>
>>> Только не нужно быть пароноиком и использовать ref eq 'ARRAY' или<br>
>>> использовать перегрузку, когда не известен тип входной структуры.<br>
>>> Такая практика меня ещё ни разу не привела к подобным ошибкам.<br>
>>><br>
>>> 2011/9/30 Alexander Onokhov <<a href="mailto:ccnweb@gmail.com">ccnweb@gmail.com</a>><br>
>>>><br>
>>>> Да про lvalue хорошо<br>
>>>><br>
>>>> @$t2 = (1,2,3);  # нет ошибки<br>
>>>><br>
>>>><br>
>>>> On Fri, Sep 30, 2011 at 4:42 PM, Dmitry Karpich <<a href="mailto:meettya@gmail.com">meettya@gmail.com</a>> wrote:<br>
>>>>><br>
>>>>><br>
>>>>> <a href="http://stackoverflow.com/questions/6419618/perl-vivification-question-while-dereferencing-undefined-array-reference" target="_blank">http://stackoverflow.com/questions/6419618/perl-vivification-question-while-dereferencing-undefined-array-reference</a><br>

>>>>><br>
>>>>> <a href="http://stackoverflow.com/questions/2206836/why-does-perl-autovivify-in-this-case" target="_blank">http://stackoverflow.com/questions/2206836/why-does-perl-autovivify-in-this-case</a><br>
>>>>> stackoverflow наш друг :)<br>
>>>>><br>
>>>>> On Sep 30, 2011, at 5:38 PM, Иван Бессарабов wrote:<br>
>>>>><br>
>>>>> Ок. А почему в списочном контексте происходит инициализация ссылки?<br>
>>>>><br>
>>>>> 30 сентября 2011 г. 17:32 пользователь Анатолий Шарифулин<br>
>>>>> <<a href="mailto:sharifulin@gmail.com">sharifulin@gmail.com</a>> написал:<br>
>>>>><br>
>>>>> Потому что разный контекст.<br>
>>>>><br>
>>>>> foreach (scalar @$t1) {}<br>
>>>>><br>
>>>>> Вот так будет идентично ифу.<br>
>>>>><br>
>>>>><br>
>>>>> 2011/9/30 Andrew Shitov <<a href="mailto:andy@shitov.ru">andy@shitov.ru</a>><br>
>>>>><br>
>>>>> Потому что $t1 станет другим после foreach, а $t2 не станет :-)<br>
>>>>><br>
>>>>> $ perl -E'use strict; use Data::Dumper; my $t; print Dumper($t); for<br>
>>>>><br>
>>>>> (@$t) {}; print Dumper($t);'<br>
>>>>><br>
>>>>> $VAR1 = undef;<br>
>>>>><br>
>>>>> $VAR1 = [];<br>
>>>>><br>
>>>>><br>
>>>>> 2011/9/30 Иван Бессарабов <<a href="mailto:ivan@bessarabov.ru">ivan@bessarabov.ru</a>>:<br>
>>>>><br>
>>>>> Я не могу понять из-за чего происходит такое поведение.<br>
>>>>><br>
>>>>> Покажите, пожалуйста, кусок доки где объянено, почему так.<br>
>>>>><br>
>>>>><br>
>>>>> #!/usr/bin/perl<br>
>>>>><br>
>>>>> use strict;<br>
>>>>><br>
>>>>> use warnings;<br>
>>>>><br>
>>>>> use 5.010;<br>
>>>>><br>
>>>>> use Data::Dumper;<br>
>>>>><br>
>>>>> my ($t1, $t2);<br>
>>>>><br>
>>>>> foreach (@$t1) {} # почему-то не вызывает ошибку<br>
>>>>><br>
>>>>> say Dumper $t1;<br>
>>>>><br>
>>>>> say '' if @$t2; # вызывает ошибку, как и ожидалось<br>
>>>>><br>
>>>>> say 'end';<br>
>>>>><br>
>>>>> --<br>
>>>>><br>
>>>>> Moscow.pm mailing list<br>
>>>>><br>
>>>>> <a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
>>>>><br>
>>>>><br>
>>>>><br>
>>>>><br>
>>>>> --<br>
>>>>><br>
>>>>> Andrew Shitov<br>
>>>>><br>
>>>>> ______________________________________________________________________<br>
>>>>><br>
>>>>> <a href="mailto:andy@shitov.ru">andy@shitov.ru</a> | <a href="http://shitov.ru" target="_blank">http://shitov.ru</a><br>
>>>>><br>
>>>>> --<br>
>>>>><br>
>>>>> Moscow.pm mailing list<br>
>>>>><br>
>>>>> <a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
>>>>><br>
>>>>><br>
>>>>><br>
>>>>> --<br>
>>>>><br>
>>>>> С уважением,<br>
>>>>><br>
>>>>>  Анатолий Шарифулин.<br>
>>>>><br>
>>>>> --<br>
>>>>><br>
>>>>> Moscow.pm mailing list<br>
>>>>><br>
>>>>> <a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
>>>>><br>
>>>>><br>
>>>>> --<br>
>>>>> Moscow.pm mailing list<br>
>>>>> <a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
>>>>><br>
>>>>><br>
>>>>> --<br>
>>>>> Moscow.pm mailing list<br>
>>>>> <a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
>>>>><br>
>>>><br>
>>>><br>
>>>><br>
>>>> --<br>
>>>> Alexander<br>
>>>><br>
>>>> --<br>
>>>> Moscow.pm mailing list<br>
>>>> <a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
>>>><br>
>>><br>
>>><br>
>>><br>
>>> --<br>
>>> С уважением,<br>
>>>  Анатолий Шарифулин.<br>
>>><br>
>>> --<br>
>>> Moscow.pm mailing list<br>
>>> <a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
>>><br>
>>><br>
>><br>
>><br>
>><br>
>> --<br>
>> Sincerely yours,<br>
>> Oleg Kostyuk (CUB-UANIC)<br>
>> --<br>
>> Moscow.pm mailing list<br>
>> <a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
><br>
> --<br>
> Moscow.pm mailing list<br>
> <a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
><br>
<br>
<br>
<br>
--<br>
Sincerely yours,<br>
Oleg Kostyuk (CUB-UANIC)<br>
--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>С уважением,<br> Анатолий Шарифулин.<br>
</div>