Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re^2: Carp::Clan

by Aristotle (Chancellor)
on Jun 08, 2006 at 20:50 UTC ( #554359=note: print w/replies, xml ) Need Help??


in reply to Re: Carp::Clan
in thread Carp::Clan

my %handler; BEGIN { %handler = ( foo => sub { ref $_[0] eq 'ARRAY' or croak "foo key takes a hashre +f"; ... }, bar => sub { $_[0] =~ /wibble$/ or croak "bar key must end with 'w +ibble'"; ... }, ) } sub process_something { my %arg = @_; my @results; while( my ( $elem, $param ) = each %arg ) { push @results, $handler->{ $elem }->( $param ); } }

croak will say the error was in process_something, when you really want it to be thrown for the where the call to process_something was.

Makeshifts last the longest.

Replies are listed 'Best First'.
Re^3: Carp::Clan
by ikegami (Pope) on Jun 08, 2006 at 21:37 UTC
    croak will say the error was in process_something's caller if process_something was called from another package. For example,
    use strict; use warnings; package Module; use Carp qw( croak ); my %handler = ( foo => sub { ref $_[0] eq 'ARRAY' or croak "foo key takes a hashref +"; 1 }, bar => sub { $_[0] =~ /wibble$/ or croak "bar key must end with 'wi +bble'"; 1 }, ); sub process_something { my %arg = @_; my @results; while( my ( $elem, $param ) = each %arg ) { push @results, $handler{ $elem }( $param ); } } package main; Module::process_something( foo => 'a' ); # <-- line 27.

    outputs

    foo key takes a hashref at 554371.pl line 27

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://554359]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (5)
As of 2020-06-04 05:39 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Do you really want to know if there is extraterrestrial life?



    Results (30 votes). Check out past polls.

    Notices?