in reply to match and count the number of times

@array2 =~ /$code/; will give you a warning. Did you read the warning message? You cannot test an RE against an array like that.
grep is sometimes useful for that, but in your case you need another solution, of which there are many.

Here is mine:
#!/usr/bin/perl use strict; # Always use strict use warnings; # Always test the return value from open open(my $fh1,"file1.txt") or die "Unable to open file1:$!"; my @array1=<$fh1>; close($fh1); chomp @array1; # Create a hash using the code values from file1 my %hash; @hash{@array1} = undef; # Create an RE pattern from code values from file1 my $pattern = join ('|', @array1); open(my $fh2,"file2.txt") or die "Unable to open file2:$!";; # If we find the code, increment the count in the hash for my $line (<$fh2>) { chomp $line; if ($line =~ /($pattern)/) { $hash{$1}++; } } close($fh2); # Print out the hash for my $code (keys %hash) { print "$code $hash{$code}\n" }