Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

Re: Using Number Ranges in a Dispatch Table

by RichardK (Vicar)
on Feb 19, 2012 at 12:26 UTC ( #954859=note: print w/ replies, xml ) Need Help??


in reply to Using Number Ranges in a Dispatch Table

I think using given Switch statements gives you much more flexibility, as it uses smart matching and can do lots of clever things. You do have to type a bit more but it's worth it ;)

So something like this :-

use v5.14; use warnings; sub ident_number { my ($num) = @_; given ($num) { when ('01') { say 'geographic'; } when (/^\d+$/ && $_ >= 124 && $_ <= 140) { say '124 - 140'; } when ([143 .. 146, 148 .. 149]) { say "$_ other stuff"; } when ([181 ..189]) { say '181 -- 189'; } default { say "$_ not found"; } } } my @tests = qw/ 01 02 125 127 186 500 143 149 189/; for (@tests) { ident_number($_); }


Comment on Re: Using Number Ranges in a Dispatch Table
Download Code
Replies are listed 'Best First'.
Re^2: Using Number Ranges in a Dispatch Table
by tobyink (Abbot) on Feb 19, 2012 at 22:15 UTC

    My initial attempt was based on given but I switched to using a list of smart matches and subroutines because given has a drawback compared to dispatch tables...

    With dispatch tables you can check whether a particular value can dispatch, without actually doing the dispatching yet. If your dispatch table is a hash, then it's just defined($dispatch{$value}).

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://954859]
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: (14)
As of 2015-07-29 15:55 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (265 votes), past polls