#!perl -w use strict; for my $name () { chomp $name; my %parts; $name =~ s/(.*)(\.[^.]*)/$1/; $parts{"suffix"} = $2 or die "Not a valid file name: $name"; $parts{"prefix"} = []; $parts{"number"} = []; while ($name =~ s/^(\D*)(\d+)//) { push @{$parts{"prefix"}}, $1; push @{$parts{"number"}}, $2; } $name and die "Invalid file name format. Rest '$name' remained"; print "Filename splits as follows: [" . join("][", map { "(" . $parts{"prefix"}->[$_] . ")(" . $parts{"number"}->[$_] . ")" } 0..@{$parts{"number"}}-1) . "]<" . $parts{"suffix"} . ">\n"; } __DATA__ 01-html02.html 01-htm23-43.htm 01-file-01.html #### ++$parts{"number"}->[$i]; $filename = join('', map { $parts{"prefix"}->[$_] . $parts{"number"}->[$_] } 0..@{$parts{"number"}}-1) . $parts{"suffix"};