in reply to CASE statement in Perl?

I'm sure this is covered in one of the documents linked in the above posts, but just the same, here's what I usually do to counter my many-else-if blues:

# SWITCH: for(thing to check) { # /regexp/ && do { condition 1; last SWITCH; }; # (condition) && do { condition 2; last SWITCH; }; # do { catch all }; # }

This works by setting the default variable ($_) to the thing to check and performing regexps or condition ops on the default variable. The nice thing about this structure is that it's very flexible: you can use an array or scalar as the thing-to-check, you can forego the last statements and have multiple statement blocks apply, you can combine regular expressions with conditional expressions, etc. I use this structure to check for variable types sometimes, sort of a generic want function.

$ref = \@array; # or, $ref = \%hash; # or, $ref = \$scalar; SWITCH: for(ref $ref) { # check variable type of referent # $ref is still our reference scalar # now $_ contains the referent variable type # (eg, ARRAY, SCALAR, HASH, or object class) /array/i && do { # do something with @$ref last SWITCH; }; /scalar/i && do { # do something with $$ref last SWITCH; }; /hash/i && do { # do something with %$ref last SWITCH; }; do { # panic, we have no handler for this variable type! die "don't know what to do with ". $_; }; }

Hope this helps!

Alakaboo

Replies are listed 'Best First'.
Re^2: CASE statement in Perl?
by grashoper (Monk) on Oct 02, 2007 at 18:14 UTC
    Thats totally what I need to do problem is I am so new to perl I am not sure where to do it. I posted the subroutine I am working on to my scratchpad, basically I want to have it break out of that subroutine, the previous coder was much better at perl than I am and has left the company, I understand the qq^ is to output the xml and I think the ^ (caret, means match from first character preceding qq^to itself so its like the endpoint?) anyways I am not sure how to get it to not display. I guess I could setup a switch with completely different modules, based on the other product thats a tremendous amount of work though when all I really want to do is display on the left hand menu a (trying to get to this site click here) A link to a userguide, and a link to some demos, and possibly a help tab to display the help ( I do want it to do the nifty toc thing). Alakaboo, you will totally be my hero if you can help me figure this out, I have been working on it for a week and a half and feel like I am no closer to a resolution than when I began.