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
|