Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re: The dreaded if-elsif-else construct (code)

by Masem (Monsignor)
on Nov 17, 2001 at 01:24 UTC ( [id://125921]=note: print w/replies, xml ) Need Help??


in reply to The dreaded if-elsif-else construct (code)

The Switch module is probably what could help here, though you are basically emulating a giant if-elsif-else statement with that.

Alternatively, assuming that I understand the problem right, you can create an array of hashes as shown below:

my @actions = ( { match => sub { $_[0] =~ /^(\w*)\.(\d*)$/; }, type => "inventory", action => &add_inventory; }, { match => sub { $_[0] =~ /^maimed(\w*)$/; }, type => "maimed", action => &handle_maimed; }, { match => sub { $_[0] }, type => "default", action => sub { print "I cannot handle ", $_[0]; } } ); # much later foreach my $file ( @filelist ) { foreach my $action ( @actions ) { if ( my @parts = &{ $action->{ match } }( $file ) ) { print "Am doing $action->{ type } on $file\n"; &{ $action->{ action } }( @parts ); last; } } }
This avoids large if or switch blocks, and allows you to wrap code a bit better with a better explaination in the code to what is going on with each possible file type.

-----------------------------------------------------
Dr. Michael K. Neylon - mneylon-pm@masemware.com || "You've left the lens cap of your mind on again, Pinky" - The Brain
"I can see my house from here!"
It's not what you know, but knowing how to find it if you don't know that's important

Replies are listed 'Best First'.
(tye)Re: The dreaded if-elsif-else construct (code)
by tye (Sage) on Nov 17, 2001 at 05:25 UTC

    Seemingly minor changes to your code can break code that uses Switch. I can't recommend anyone use it in production code.

            - tye (but my friends call me "Tye")
      Agreed. It was only ever intended to be a proof-of-concept for Perl 6, and isn't at all ruggedized against the exigencies of the production environment.

      However, it will be core in 5.8 and I've been working on toughening it up for that. You may find it is now far more reliable than it used to be.

      In addition, the next release will be layered over Filter::Simple, rather than Filter::Util::Call, and that will definitely make it more robust.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others goofing around in the Monastery: (1)
As of 2024-04-25 19:41 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found