I want to search for all elements in an array which have the same starting set of characters as an element in another array. To make it clear:
@array = ("1a","9","3c");
@temp =("1","2","3");
I want to print only 1a and 3c. When I try to use the following program it prints out all the elements in the array instead of the two I want:
foreach $word (@temp)
{
if( grep /^$word/ , @array)
{
print $_;
}
}
This answer will do what the OP wants as well as prevent any duplicates from printing on the screen through the use of a hash lookup.
#!/usr/bin/perl
use strict;
use warnings;
my @array = ("1a","9","3c","3c");
my @temp =("1","2","3");
my %dups_hash;
for my $w (@temp) {
my ($match) = grep /^$w/, @array;
# Need to check if $match is defined before doing the hash lookup.
# This suppresses error messages for uninitialized values; if defined($match) is
# false, we short circuit and continue in the loop.
if(defined($match) && !defined($dups_hash{$match})) {
print $match;
}
}