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
In reply to (switch using for) RE: CASE statement in Perl?
by mwp
in thread CASE statement in Perl?
by tROCK
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |