my @arr = qw( and you will be pleased with the results );
# 0 0 1 0 1 0 1 1
my $mask = 0x2b;
sub mask_array (\@$) {
my( $arr, $mask ) = @_;
my @want = split '', unpack( "b*", $mask );
return @{ $arr }[ grep { $want[ $_ ] } 0..$#{ $arr } ];
}
my @result = mask_array @arr => $mask;
foreach (@result) {
printf("%s\n", $_);
}
####
my @arr = qw( and you will be pleased with the results );
# 0 0 1 0 1 0 1 1
my $mask = "\x2b";
my @new = do { my $i = 0; map { vec($mask, $#arr - $i++, 1) ? $_ : () } @arr };
foreach (@new) {
printf("%s\n", $_);
}
####
@arr = qw( and you will be pleased with the results XX YY AA BB );
# \x2b 0 0 1 0 1 0 1 1 0 0 1 0
# \x2b20 0 0 1 0 0 0 1 0 1 0 1 1
$mask = "\x2b20";
@new = do { my $i = 0; map { vec($mask, $#arr - $i++, 1) ? $_ : () } @arr };
foreach (@new) {
printf("%s\n", $_);
}