Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re^2: What I Most Recently Learned in Perl, But Should Have Already Known

by izut (Chaplain)
on Aug 17, 2006 at 17:28 UTC ( [id://567974]=note: print w/replies, xml ) Need Help??


in reply to Re: What I Most Recently Learned in Perl, But Should Have Already Known
in thread What I Most Recently Learned in Perl, But Should Have Already Known

Continuing the if-else statements problem, the idiom I like most is:

my $function = 'a'; my %functions = ( 'a' => sub { ... }, 'b' => sub { ... }, ); $functions{$function}->();

It's amazing how this replace an entire switch or if-else statements.

Igor 'izut' Sutton
your code, your rules.

  • Comment on Re^2: What I Most Recently Learned in Perl, But Should Have Already Known
  • Download Code

Replies are listed 'Best First'.
Re^3: What I Most Recently Learned in Perl, But Should Have Already Known
by sfink (Deacon) on Aug 18, 2006 at 16:48 UTC
    I always run into the problem of the default case when I use that -- what if $function isn't a key in %functions? The error message "Undefined subroutine &main:: called" can be very difficult to figure out.

    And the straightforward fix isn't all that pretty:

    ($functions{$function} || $functions{default})->();
    But I admit that I still use it. With comments, if there is any chance that someone with a capacity to do me bodily harm might read the code.

      I think this way is prettier.

      sub do_something { my ($function) = @_; $function = 'default' unless exists $functions{$function}; $functions{$function}->(); }

      Igor 'izut' Sutton
      your code, your rules.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others contemplating the Monastery: (4)
As of 2024-04-23 23:15 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found