c:\@Work\Perl\monks>perl -wMstrict -le "my $s = qq{[5:0]abc\n[0:5]def\nghi\njkl\n[22:22]mno\n[6:3]pqr\nstu\n}; print qq{<<$s>> \n}; ;; $s =~ s{ (\[ \d+ : \d+ \]) ([[:lower:]]{3}) } { make_replacement($1, $2) }xmsge; print qq{<<$s>>}; ;; sub make_replacement { my ($range_field, $string) = @_; ;; my ($hi, $lo) = $range_field =~ m{ \d+ }xmsg; return qq{$range_field$string} if $hi < $lo; ;; return join qq{\n}, map qq{$string\[$_]}, $lo .. $hi ; } " <<[5:0]abc [0:5]def ghi jkl [22:22]mno [6:3]pqr stu >> <>