On Fri, 2002-03-29 at 11:46, Ned Cunningham wrote: > HI, > I am having a very newbie problem. > I am reading an Access database with ODBC and have my data read into > > $Data{STATE} > > My problem is now I need to match to 16 different states. > > > > I have so far > > If ( $Data{STATE} eq "MA" ) > > Process data > > > My question is should I use an array to test against and how to code it? > > ??- > @state="MA CI DE IN OH"; > > Thank you for anyhelp
What you want is a hash of coderefs: <example> my %state = ( MA => sub { print "In Maryland the sales tax is 4.5%\n"; return shift * 1.045; }, OH => sub { print "In Ohio the sales tax is 3%\n"; return shift * 1.03; }, GL => sub { print "In Gonawana Land the sales tax is ", "the square root of the price or ten ", "dollars, whichever is smaller\n"; my $price = shift; my $tax = sqrt($price); $tax = 10 if $tax > 10; return $price + $tax; } ); $sth = $dbh->prepare("select * from transactions"); $sth->execute; while (my $trans = $sth->fetchrow_hashref) { my $cost = ($state{$trans->{STATE}})($trans->{PRICE}); print "Customer $trans->{CUST_NAME} owes $cost dollars\n"; } $sth->finish; </example> Of course I don't know what you want to do, I just assumed sales tax because that is something different in between states in the US. NOTE: This example (except for GL, which required actual code, which is why I included it) could have been much easier to code like this: my %sales_tax = ( MA => 1.045, OH => 1.03, ); <snip /> my $cost = $trans->{PRICE} * $sales_tax{$trans->{STATE}}; <snip /> -- Today is Pungenday the 15th day of Discord in the YOLD 3168 All Hail Discordia! Missile Address: 33:48:3.521N 84:23:34.786W -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]