Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Dear Monks

I am using Net::Address::IP::Local to get the IP adress of a laptop. It occurs sometimes that the module fires an error blocking the further execution of the script. The error happens in this part of the script (Error line 167):

defined($socket) or throw Net::Address::IP::Local::Error("Unable to create UDP +socket: $!"); return $socket->sockhost;

What I would like is to catch such error end act consequently in my script. I don't really care what is the reason of the error (not important for my script). I'm using this line of code to get the IP:

our $ipaddress = Net::Address::IP::Local->public;

How can I implement it?

Replies are listed 'Best First'.
Re: Net::Address::IP::Local Error catching
by Eily (Monsignor) on Jul 02, 2013 at 12:38 UTC

    Perl doesn't have a throw keyword, so you have to ask yourself where this comes from. I'll give you an int, it's the Error module. On this page you can see that errors thrown can be catched with try and catch, except to do so you need to use Error qw(:try);

    But if you read carefully, Error is no longer recommended. So maybe you should try it another way. Under the hood, throw is mostly a hidden die, so you can eval the portion of code that throws the exception, and catch the error by checking $@.

    Actually you'll see in perlsub a way to make try and catch blocks with prototyped subs.

Re: Net::Address::IP::Local Error catching
by Anonymous Monk on Jul 02, 2013 at 13:32 UTC

    How can I implement it?

    eval