--- Jeff Pinyan <[EMAIL PROTECTED]> wrote: > On May 22, Paul said: > > >I know that in many C compilers, the a ? b : c construct with the > >ternary ?: operator si not stable after the second or third nesting, > >but I've never seen that sort of problem in tests I've run in Perl. > > The only to watch out for is precendence: > > $a ? $b = $c : $b = $d; > > is like > > ($a ? $b = $c : $b) = $d; > > which always sets $b to $d. Yup, tho in that case I'd usually say $b = $a ? $c : $d; > > > sub rate ($) { > > $_[0] eq 'A' ? .03 : > > $_[0] eq 'B' ? .05 : > > $_[0] eq 'C' ? .06 : > > .08; # the default > > } > > That's fine, but I prefer to use hashes for that sort of thing. > > { > my %rates = qw( > A .03 > B .05 > C .06 > ); > sub rate { > exists $rates{$_[0]} ? $rates{$_[0]} : .08 > } > } Yep! But the actual function has a little more processing: sub charge ($) { # receives a boolean; rerate or not my $band = @_ and $routes{$mf03->route} ? 0 : $mf03->band; my $mou = $mf03->bmou*($peak{$mf03->tod}||.50) #50% off-peak discount if $band; # wasted effort on 'X', but that's rare return int(100 * sprintf "%.2f", $band eq '0' ? .12 : $band eq 'X' ? .12 : $band eq 'A' ? .04 + $mou * .03 : # setup is .04 per call $band eq 'B' ? .04 + $mou * .05 : $band eq 'C' ? .04 + $mou * .06 : .04 + $mou * .08); } Still tossing this salad, but I think I've got all my veggies in it now. =o) __________________________________________________ Do You Yahoo!? Yahoo! Auctions - buy the things you want at great prices http://auctions.yahoo.com/