in reply to Simple IF, IF, IF or ELSE
Fir a start that probably doesn't do what you mean. Consider:
use warnings; use strict; my $drink; my $punter = 'coffee'; if($punter eq 'coffee'){ $drink = 'non alky'; } if($punter eq 'beer'){ $drink = 'alky'; } if($punter eq 'whisky'){ $drink = 'proper alky'; } else { $drink = 'unknown'; } print $drink;
Prints:
unknown
Better would be:
use warnings; use strict; my $drink; my $punter = 'coffee'; if ('coffee' eq $punter){ $drink = 'non alky'; } elsif ('beer' eq $punter){ $drink = 'alky'; } elsif ('whisky' eq $punter) { $drink = 'proper alky'; } else { $drink = 'unknown'; } print $drink;
which prints:
non alky
as expected. However probably better still would be:
use warnings; use strict; my %drinkType = ('coffee' => 'non alky', 'beer' => 'alky', 'whisky' => + 'proper alky'); my $drink; my $punter = 'coffee'; if (exists $drinkType{$punter}) { $drink = $drinkType{$punter}; } else { $drink = 'unknown'; } print $drink;
If you have more work to do for each if clause you could:
use warnings; use strict; my %drinkType = ('coffee' => \&doNonalky, 'beer' => \&doAlky, 'whisky' + => \&doProperAlky); my $drink; my $punter = 'coffee'; if (exists $drinkType{$punter}) { $drinkType{$punter}->(); } else { print 'unknown'; } sub doNonalky { print 'non alky'; } sub doAlky { print 'alky'; } sub doProperAlky { print 'proper alky'; }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Simple IF, IF, IF or ELSE
by abachus (Monk) on Jun 28, 2006 at 21:25 UTC | |
by GrandFather (Saint) on Jun 28, 2006 at 21:32 UTC | |
by abachus (Monk) on Jun 28, 2006 at 22:47 UTC | |
by GrandFather (Saint) on Jun 28, 2006 at 22:58 UTC |