[Moscow.pm] обработка ошибок в perl

Андрей Асякин asan999 на gmail.com
Пн Окт 28 15:31:09 PDT 2013


Ну мало ли, чего он требует. В описании модуля сказано, что - 'Using the 
"Error" module is *no longer recommended* due to the black-magical 
nature of its syntactic sugar, which often tends to break.'  Лучше в 
таком случае избавиться и от Error.pm, и от perlclinic perlcritic заодно))

А использовать наверно как-то так:

  perl -MError=:try -E 'try { throw XXX("Aaaaa") } catch XXX with { say 
shift }; package XXX; use parent "Error::Simple"; sub new { my $e = 
shift->SUPER::new(@_); bless $e, __PACKAGE__ } 1'

29.10.2013 1:51, Nikolay Mishin пишет:
> Андрей, спасибо, да действительно Try::Tiny работает,
> вот 2 теста
> с eval
> https://github.com/mishin/gists/blob/master/test_ff1.pl
> c Try::Tiny
> https://github.com/mishin/gists/blob/master/test_ff1_try.pl
> действительно ошибки ловятся,
> но все равно
> в 5.18 perlcritic -5 требует использования
> Error.pm
> а как написать на нем error class ума не приложу,
> все примеры в документации какие-то не выразительные
> может кто умеет?
>
> 29.10.2013, 01:10, "Андрей Асякин" <asan999 на gmail.com>:
>> $ERRNO это $!, а ни $@, а в Try::Tiny вроде $_ используется:
>>
>>   perl -MCarp -MTry::Tiny -E 'try { croak "aaaaa" } catch { say "XXX: $_" }'
>>
>> так что все работает
>>
>> 29.10.2013 0:04, Nikolay Mishin пишет:
>>
>>> MoscowPM, привет,
>>> ну и напоследок перед сном;))
>>>
>>> Нужно мне было, если не запущен firefox, то запустить его, пишу (https://github.com/mishin/gists/blob/master/trans.pl
>>>   100-133)
>>>
>>>      my $url = 'http://www.translate.ru/';
>>>      my $firemech;
>>>
>>>      my $lived = eval {
>>>          $firemech = WWW::Mechanize::Firefox->new( tab => qr/PROMT/sm, );
>>>          1;
>>>      };
>>>      my $err = $ERRNO;    # $@;
>>>
>>>      given ($err) {
>>>
>>> #Failed to connect to , problem connecting to "localhost", port 4242: Connection refused at /usr/local/share/perl/5.14.2/MozRepl/Client.pm line 144
>>>          when (/\QFailed to connect to , problem connecting to\E/xsm) {
>>>
>>>    #        use Test::More;
>>>    #         is $lived, undef, 'We died trying to connect to a non-existing tab';
>>>    #         like $err, q{/Couldn't find a tab matching/},
>>>    #           'We got the correct error message';
>>>              my $path_to_firefox =
>>>                os_is('MSWin32')
>>>                ? 'C:/Program Files (x86)/Mozilla Firefox/firefox.exe'
>>>                : '/usr/bin/firefox';
>>>              $firemech = WWW::Mechanize::Firefox->new(
>>>                  tab    => 'current',
>>>                  launch => $path_to_firefox
>>>              );
>>>              $firemech->get($url) or die "Cannot connect to $url\n";
>>>          }
>>>
>>>          #Couldn't find a tab matching /(?^ums:PROMT)/ at trans.pl line 100.
>>>          when (/\QCouldn't find a tab matching\E/xsm) {
>>>              say 'we match error' . $_;
>>>              $firemech = WWW::Mechanize::Firefox->new( tab => 'current', );
>>>              $firemech->get($url) or die "Cannot connect to $url\n";
>>>          }
>>>      }
>>>
>>> Так вот никакой Try:;Tiny ни Error.pm
>>> мне не помог, как это под них переписать
>>> я не пойму, чтобы работало
>>> Error.pm - вообще классы ошибок надо строить,а  как не ясно
>>>
>>> в общем по старинке ловлю ошибки эвалом eval
>>> дело в том еще, что WWW::Mechanize::Firefox
>>> https://metacpan.org/source/CORION/WWW-Mechanize-Firefox-0.74/lib/WWW/Mechanize/Firefox.pm
>>> внутри себя ипользует
>>> useCarpqw(carp croak );
>>> и, таким образом, все ошибки пролетают мимо Try::Tiny
>>> - их невозможно поймать,
>>> в общем я их обрабатываю, как в тестах к модулю
>>> https://metacpan.org/source/CORION/WWW-Mechanize-Firefox-0.74/t/50-mech-new.t
>>>
>>> хоть Try::Tiny я и люблю, но, когда нужно написать
>>> что-нибудь рабочее - плюешь на Perl Best Practice
>>> и пишешь, чтоб работало
>>> --
>>> С уважением
>>> Николай Мишин
>> ,
>> --
>> Moscow.pm mailing list
>> moscow-pm на pm.org | http://moscow.pm.org

----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20131029/11b408a9/attachment.html>


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