Hi,
You cannot return `die`, die is a fatal exception that causes`test.pl` to
exit immediately.
One option would be to use warn to emit a warning to STDERR and return to
the caller and let them handle the failure. You may as well add the $! to
the output so the caller gets a copy of the last error.
...
$p->close();
warn "can't ping $host: $!";
return 0;
}
https://perldoc.perl.org/functions/die.html
https://perldoc.perl.org/functions/warn.html
https://perldoc.perl.org/perlvar.html#Error-Variables
On Thu, 31 Oct 2019 at 09:42, Maggie Q Roth <[email protected]> wrote:
> Hello
>
> Sorry I am new to perl, I was reading the charter about package.
>
> I tried to write the code below:
>
> use strict;
> use Net::Ping;
>
> package A;
>
> sub mytest {
>
> my $host = shift;
> my $p = Net::Ping->new();
> unless ($p->ping($host)) {
> $p->close();
> die "can't ping $host";
> }
> }
>
> 1;
>
> package B;
>
> sub mytest {
>
> my $host = shift;
> my $p = Net::Ping->new();
> unless ($p->ping($host)) {
> $p->close();
> return 0;
> }
> }
>
> 1;
>
> package main;
>
> A::mytest('www.google.com');
>
> print B::mytest('www.google.com');
>
>
>
> When I run it, always get:
> $ perl test.pl
> can't ping www.google.com at test.pl line 12.
>
>
> Shouldn't I return die() in package's method?
> How do I let the caller know what happens when the method fails to run?
>
> Thanks in advance.
>
> Yours
> Maggie
>