Using a bit for each test and a dispatch table may help:
use warnings; use strict; my $tName = 'Fred'; my $tHost = 'All'; my $tModule = 'Bobble'; my %dispatch = ( 0 => \&NoMatch, 1 => \&Name, 2 => \&Host, 3 => \&NameHost, 4 => \&Mod, 5 => \&NameMod, 6 => \&HostMod, 7 => \&NameHostMod, ); while (<DATA>) { chomp; my ($name, $host, $mod) = split; my $code = $name eq $tName || $tName eq 'All' ? 1 : 0; $code |= $host eq $tHost || $tHost eq 'All' ? 2 : 0; $code |= $mod eq $tModule || $tModule eq 'All' ? 4 : 0; $dispatch{$code}->($_); } sub NoMatch { print "NoMatch\n"; } sub Name { print "Name\n"; } sub Host { print "Host\n"; } sub NameHost { print "NameHost\n"; } sub Mod { print "Mod\n"; } sub NameMod { print "NameMod\n"; } sub HostMod { print "HostMod\n"; } sub NameHostMod { print "NameHostMod\n"; } __DATA__ Fred Wizzle Tangle Fred Plonk Bobble Joe Wizzle Bobble Bob Fizz Knot
Prints:
NameHost NameHostMod HostMod Host
In reply to Re: Is there a Better work around rather than 9 If else Looping
by GrandFather
in thread Is there a Better work around rather than 9 If else Looping
by msk_0984
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |