Hello, You don't need to setup $!. It is a global variable.
In the documentation I referenced it says: "When referenced, $! retrieves the current value of the C errno integer variable. If $! is assigned a numerical value, that value is stored in errno . When referenced as a string, $! yields the system error string corresponding to errno ... Mnemonic: What just went bang? " https://perldoc.perl.org/perlvar.html#Error-Variables On Fri, 1 Nov 2019 at 00:47, Maggie Q Roth <rot...@gmail.com> wrote: > Thank you. how to setup $! in module, and how can I get the $! in caller? > > regards. > > On Fri, Nov 1, 2019 at 4:56 AM Dermot <paik...@gmail.com> wrote: > >> 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 <rot...@gmail.com> 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 >>> >>