Андрей, спасибо, да действительно 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, "Андрей Асякин" <[email protected]>: > $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 > [email protected] | http://moscow.pm.org -- С уважением Николай Мишин -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
