$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
In reply to Re: Misunderstood array behavior
by GrandFather
in thread Misunderstood array behavior
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |