package All_In; use strict; use warnings; sub new { my $class = shift; my( $p_types, $c_types ) = @_; my( %p_hash, %c_hash ); @p_hash{ @{$p_types} } = (); @c_hash{ @{$c_types} } = (); my $self = {}; $self->{p_hash} = \%p_hash; $self->{c_hash} = \%c_hash; bless $self, $class; } sub qualify { my( $self, @target ) = @_; if( grep{ exists $self->{p_hash}{$_} } @target and grep{ exists $self->{c_hash}{$_} } @target ){ return 1; } else { return 0; } } 1; package main; use strict; use warnings; my $sets = All_In->new( [ qw/ pam php kph / ], [ qw/ cam c1 c2 / ] ); my @true = qw/ pam c2 /; my @false = qw/ cam c2 /; print "\@true is ", $sets->qualify( @true ) ? "True.\n" : "False.\n"; print "\@false is ", $sets->qualify( @false ) ? "True.\n" : "False.\n";