in reply to Misunderstood array behavior

$sample2 is local to the inner loop but is tested outside the inner loop - it doesn't exist there. use strict would have told you about that unless you have another lexical $sample2 who's scope is global to the for loops.

Generally when you want to perform this sort of matching task in Perl you should first think "hash". Consider:

use strict; use warnings; my $file1Data = "1\t2\t3\t4"; my $file2Data = "5\t6\t7\t4"; open my $fileText, '<', \$file1Data; my @firstLine1 = split /\t/, <$fileText>; close $fileText; open my $fileText2, '<', \$file2Data; my %firstLine2Fields = map {$_ => 1} split /\t/, <$fileText2>; foreach my $sample1 (@firstLine1) { print "Matched $sample1\n" if exists $firstLine2Fields {$sample1}; }

Prints:

Matched 4

Perl reduces RSI - it saves typing