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
>>>
>>

Reply via email to