my $str = < John 001 A John 002 C EOF $str =~ s/(.*?)<\/student>/check_record($1)/gse; print $str; sub check_record { my $rec = shift; $rec =~ s/(\s*)C(\s*<\/gpa>)/$1B$2/ if($rec =~ /\s*002\s*<\/id>/); return "$rec"; }