On Tue, May 22, 2001 at 09:37:13AM -0700, Paul wrote:
> Anybody know if there would likely be any problem with building a
> "case" statement like the folowing (without installing Switch.pm)?
>
>  sub rate ($) {
>     $_[0] eq 'A' ? .03 :
>     $_[0] eq 'B' ? .05 :
>     $_[0] eq 'C' ? .06 :
>                    .08;   # the default
>  }
> Does anyone know of any arbitrary limit on this sort of structure?

Apparently not:
  print join("\n", rate('A'), rate('B'), rate('C'), rate('D'), undef);

produces:
        0.03
        0.05
        0.06
        0.08

If you were to add more rates, it'll get unmaintainable and confusing
pretty quickly.  You're doing simple string comparisons.  Try using
a hash instead:

        my %rate = (
                A => .03,
                B => .05,
                C => .06,
                default => .08,
        );

        my $default_rate = .08;

        sub rate ($) {
                return $rate{$_[0]} || $rate{default};
        }

You could also elimiate the function by examining the hash directly in your
code, depending on how you use it.

Z.

Reply via email to