in reply to Is there a Better work around rather than 9 If else Looping

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

DWIM is Perl's answer to Gödel