__DATA__
name1 4.5
name3
name5 6.5
name4 -7.9
name6 3.2
The the entire pattern will not match since the second value is required according to the regex. Also, a simple test of adding a print statement during the match will educate you that the $1 and $2 are not carried over.
Run this to see...
my @order = qw(name1 name2 name3 name4 name5 name6);
map{/(\S+)\s+(-?[\d.]+)/;$a{$1}=$2?$2:'';print "$1 -- $2 \n";}<DATA>;
map{push(@result,defined $a{$_} ? $a{$_} : 999)}@order;
print join("\n", @result),"\n";
__DATA__
name1 4.5
name3
name5 6.5
name4 -7.9
name6 3.2
Notice the added print line will show you that $1 and $2 are empty, not the previous values.
So, to conclude -- actually running it would have shown you that there was no error. |