I wouldn't say Switch.pm is buggy (update: in this specific case).
It is a very simplistic source-filter, which gives you plenty of warning in its documentation on the risks and limits of its use.
A "dispatch table" (as the hash of subs is usually called) is indeed a very useful construct, but sometimes a real switch/case-like construct is better.
For example, if your algorithm calls for falling through from one case to another, it's hard to achieve that cleanly with a dispatch table (without additional external machinery).
As mentioned above, Perl 5.10 (and 6) will introduce the given/when construct, which works like switch/case but is more powerful. The switch/case construct in most languages allows only integer or scalar values in case expressions, but given/when will allow many more possibilities (by using the "smart match" operator). Example:
given $data {
when /^\d+$/ { return %var{""} = $_ }
when 'previous' { return %var{""} // fail NoData }
when %var { return %var{""} = %var{$_} }
default { die Err::BadData : msg=>"Don't understand $_" }
}
I know I'll be using it with abandon as soon as 5.10 comes out :-)
-David |