MoscowPM, привет,
ну и напоследок перед сном;))
Нужно мне было, если не запущен firefox, то запустить его, пишу (https://github.com/mishin/gists/blob/master/trans.pl
100-133)
my $url = '';
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";
}
}
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
- их невозможно поймать,
в общем я их обрабатываю, как в тестах к модулю
хоть Try::Tiny я и люблю, но, когда нужно написать
что-нибудь рабочее - плюешь на Perl Best Practice
и пишешь, чтоб работало
--
С уважением
Николай Мишин
-- Moscow.pm mailing list [email protected] | http://moscow.pm.org
