($a,$b)=split(/\s/,$test1,2);
print "b=$b\n";
you should have noticed the extra blank line in your ouput, after the "b=mango" -- this is because the split is being told to take everything after the first whitespace character (in this case, everything after "apple ") and assign it to $y, and in this case, "everything" includes the line termination character(s) (LF or CRLF, depending on your OS).
When you look for that target word in the second file, "mango" happens to be in the first column, where it is followed by a space character (not LF or CRLF), so $b never matches, the substitution never happens, and nothing gets assigned to $test2.
You can either "chomp" the input from the first file before capturing the string you intend to use later, or else you can do @a = split ' ', $test1; and then use the appropriate element of @a later on.
(Note that using $a and $b for actual data variables is bad, because if you end up using the "sort" function as well, you'll get messed up. But using @a and @b is okay.)
UPDATE: Based on your closing comment:
Main purpose of the code is given apple I want to search file1 and file2 and find pineapple.
I think a simple script for that would be:
use strict;
my $target;
open( I, "file1" ) or die "file1: $!";
while (<I>) {
if ( /^apple\s+(.*)/ ) {
$target = $1; # note: .* does not match line terminators
last;
}
}
close I;
my $found;
open( I, "file2" ) or die "file2: $!";
while (<I>) {
if ( /^$target\s+(.*)/ ) {
$found = $1;
last;
}
}
close I;
print "found: <<$found>>\n";
|