<div>MoscowPM, привет,</div><div>ну и напоследок перед сном;))</div><div> </div><div>Нужно мне было, если не запущен firefox, то запустить его, пишу (<a>https://github.com/mishin/gists/blob/master/trans.pl</a></div><div> 100-133)</div><div> </div><div>    my $url = 'http://www.translate.ru/';<br />    my $firemech;<br /><br />    my $lived = eval {<br />        $firemech = WWW::Mechanize::Firefox->new( tab => qr/PROMT/sm, );<br />        1;<br />    };<br />    my $err = $ERRNO;    # $@;<br /><br />    given ($err) {<br /><br />#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<br />        when (/\QFailed to connect to , problem connecting to\E/xsm) {<br /><br />  #        use Test::More;<br />  #         is $lived, undef, 'We died trying to connect to a non-existing tab';<br />  #         like $err, q{/Couldn't find a tab matching/},<br />  #           'We got the correct error message';<br />            my $path_to_firefox =<br />              os_is('MSWin32')<br />              ? 'C:/Program Files (x86)/Mozilla Firefox/firefox.exe'<br />              : '/usr/bin/firefox';<br />            $firemech = WWW::Mechanize::Firefox->new(<br />                tab    => 'current',<br />                launch => $path_to_firefox<br />            );<br />            $firemech->get($url) or die "Cannot connect to $url\n";<br />        }<br /><br />        #Couldn't find a tab matching /(?^ums:PROMT)/ at trans.pl line 100.<br />        when (/\QCouldn't find a tab matching\E/xsm) {<br />            say 'we match error' . $_;<br />            $firemech = WWW::Mechanize::Firefox->new( tab => 'current', );<br />            $firemech->get($url) or die "Cannot connect to $url\n";<br />        }<br />    }</div><div> </div><div>Так вот никакой Try:;Tiny ни Error.pm</div><div>мне не помог, как это под них переписать</div><div>я не пойму, чтобы работало</div><div>Error.pm - вообще классы ошибок надо строить,а  как не ясно</div><div> </div><div>в общем по старинке ловлю ошибки эвалом eval</div><div>дело в том еще, что <a href="https://metacpan.org/source/WWW::Mechanize::Firefox">WWW::Mechanize::Firefox</a></div><div>https://metacpan.org/source/CORION/WWW-Mechanize-Firefox-0.74/lib/WWW/Mechanize/Firefox.pm</div><div><div>внутри себя ипользует</div><div>use<a href="https://metacpan.org/source/Carp">Carp</a>qw(carp croak );</div><div>и, таким образом, все ошибки пролетают мимо Try::Tiny</div><div>- их невозможно поймать,</div><div>в общем я их обрабатываю, как в тестах к модулю</div><div><a href="https://metacpan.org/source/CORION/WWW-Mechanize-Firefox-0.74/t/50-mech-new.t">https://metacpan.org/source/CORION/WWW-Mechanize-Firefox-0.74/t/50-mech-new.t</a></div><div> </div></div><div>хоть Try::Tiny я и люблю, но, когда нужно написать</div><div>что-нибудь рабочее - плюешь на Perl Best Practice</div><div>и пишешь, чтоб работало</div><div>-- <br /><div>С уважением</div><div>Николай Мишин<br /><div> </div></div></div>