#!perl -w # cases above the blank line should be replaced # successfully, below should not use strict; my ($len1, $len2, $len3) = (1, 8, 1); my $valid = qr/^.{$len1}(\d{$len2}).{$len3}$/; while () { next unless $_ =~ $valid; next unless $1 ne "00000000"; substr($_, $len1, $len2) = "20020101"; print; } __DATA__ X12345678X X14322678X X12534654X X12345678X X00000000X 12345678X X12345678 XX 12345678