On Tuesday 15 Dec 2009 09:50:27 Xiao Lan (小兰) wrote:
> Hello,
> 
> It seems in ruby and python we have a good exception capturing way.
> The ruby's:
> 
> irb(main):042:0> begin
> irb(main):043:1*   x=12/0
> irb(main):044:1> rescue
> irb(main):045:1>   puts "0 div error"
> irb(main):046:1> end
> 0 div error
> 
> The python's:
> >>> try:
> 
> ...   x=12/0
> ... except:
> ...   print "0 div error"
> ...
> 0 div error
> 
> 
> 
> But in Perl I have to use an eval:
> 
> # perl -e '
> eval "$x=12/0";
> if ($@) { print "0 div error" }'
> 0 div error
> 
> 
> 
> So what's the equivalent of perl's exception handling like python/ruby?

You can use block eval {} instead of string eval "":

<<<<<<<<<<<<<<<<
#!/usr/bin/perl

use strict;
use warnings;

my $x;

eval
{
    $x=12/0;
};

if ($@)
{ 
    print "0 div error\n";
}
>>>>>>>>>>>>>>>>

One problem with that is that Perl 5's exception handling is not inherently 
object-oriented. If you'd like that (and you likely would), look at the 
following CPAN modules:

* http://search.cpan.org/dist/Exception-Class/

* http://search.cpan.org/dist/TryCatch/ (never used it though).

* http://search.cpan.org/dist/Try-Tiny/ (likewise).

There's also http://search.cpan.org/dist/Error/ , which I've used, and have 
been co-maintaining, but cannot really recommend because it is Black Magick 
and quirky.

Regards,

        Shlomi Fish

> 
> Thanks in advance.
> 

-- 
-----------------------------------------------------------------
Shlomi Fish       http://www.shlomifish.org/
Stop Using MSIE - http://www.shlomifish.org/no-ie/

Bzr is slower than Subversion in combination with Sourceforge. 
( By: http://dazjorz.com/ )

--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to