use Modern::Perl; my $a = "AB:APPLE:BOY:ZOO:ZOOM"; my $b = "APPLE:ZOO"; my $c = "BOY:GIRL"; say isSubset( $b, $a ); #Returns 1 say !isSubset( $c, $a ); #Returns 1 sub isSubset { my @small = split ':', $_[0]; my @big = split ':', $_[1]; @small ~~ [ grep $_ ~~ @big, @small ]; } #### sub isSubset { my $count = my @small = split ':', $_[0]; my @big = split ':', $_[1]; do { $count-- when @big } for @small; !$count; } #### use Modern::Perl; use Benchmark qw(cmpthese); my $a = "AB:APPLE:BOY:ZOO:ZOOM"; my $b = "APPLE:ZOO"; my $c = "BOY:GIRL"; sub isSubset { my @small = split ':', $_[0]; my @big = split ':', $_[1]; @small ~~ [ grep $_ ~~ @big, @small ]; } sub isSubsetSmarter { my $count = my @small = split ':', $_[0]; my @big = split ':', $_[1]; do { $count-- when @big } for @small; !$count; } sub isSubsetHash { my $count = my @small = split ':', $_[0]; my %big; $big{$_} = 1 for split ':', $_[1]; do { $count-- if $big{$_} } for @small; !$count; } cmpthese( -5, { isSubset => sub { isSubset( $b, $a ) }, isSubsetSmarter => sub { isSubsetSmarter( $b, $a ) }, isSubsetHash => sub { say isSubsetHash( $b, $a ) }, } ); #### Rate isSubset isSubsetHash isSubsetSmarter isSubset 143452/s -- -15% -54% isSubsetHash 169263/s 18% -- -45% isSubsetSmarter 309705/s 116% 83% --