Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

Re^2: Switch/case as a jump table with C-style fall-through

by Roy Johnson (Monsignor)
on May 12, 2005 at 16:06 UTC ( #456450=note: print w/ replies, xml ) Need Help??


in reply to Re: Switch/case as a jump table with C-style fall-through
in thread Switch/case as a dispatch table with C-style fall-through

I also wasn't sure it would be useful, but in the case of fall-through, I can see how it might come in handy to pass the matched string. That will go into the next revision.

I'm not married to the name 'new' (and when I package it with other flavors of Case, it will certainly have a different name), but I didn't have a better name. I think it's just as legitimate to call a factory "new" as it is to call an OO constructor "new". The users are expected to read the documentation.

I left out a default identifier because I didn't want to have a string that might conflict with an alternative. But it occurred to me that a call to a subroutine that returns an empty list could be tucked in there and be absolutely transparent. That will also be in the next revision.

I don't know what a continue/finalise block should do here. Could you explain?

Thanks for your input.


Caution: Contents may have been coded under pressure.


Comment on Re^2: Switch/case as a jump table with C-style fall-through
Re^3: Switch/case as a jump table with C-style fall-through
by Animator (Hermit) on May 12, 2005 at 17:05 UTC

    I see now that I basiclly took it from the wrong concept... (what I initially though about had more to do with something like eval then with switch)

    I have no idea wheter or not it would be a good idea to implement what I was thinking about... I'll continue explaining and then you can make up your mind... I was thinking about creating a 'handler' that is run at the end if one (or more) case-statements matched...

    I'm afraid I didn't explain to well and that it might be easier to explain it with an example/code, so that's what I will do now:

    Assume that at the end of each case there is some default action that should be taken (update a hash with a list of matches or something). With the current implementation there are two ways to accomplish this:

    a) adding the code it in each code-ref (by calling another subroutine)
    b) using something like $case->("something") and some_other_code; (although in this case it would depend on the return value, but let's assume it returns a true value when the code-ref was run)

    Both of these have some disadvantages, the first one has the disadvantage of the duplicate function-call and the second depends on the return value

    What my suggestion was about was to be able to set up something like 'FINAL' (or 'CONTINUE') => sub { ... } which will run the code (add it to a hash or whatever) if a case returned true

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (7)
As of 2014-07-13 13:42 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    When choosing user names for websites, I prefer to use:








    Results (249 votes), past polls