in reply to Regexp and substitution question

The substitution operator will clear all match variables upon a successful pattern match. From perlre (emphasis mine):
The numbered match variables ($1, $2, $3, etc.) and the related punctuation set ($+ , $& , $` , $' , and $^N ) are all dynamically scoped until the end of the enclosing block or until the next successful match, whichever comes first.

If the match had failed, and the substitution had not been performed, the match variables retain their values:

my $line="One two three four five"; if($line =~ m/(one)\s(two)\s(three)\s(four)\s(five)/i){ my $one=$1; $one =~ s/ten/ONE/i; # <--- no match print "1: $one\n"; print "2: $2\n"; print "3: $3\n"; print "4: $4\n"; print "5: $5\n"; }#if __END__ 1: One 2: two 3: three 4: four 5: five