use strict; use warnings; my @testStrings = qw{ abc.1.0.1.0 bnnn.1.0.1.1 this.that.1.0.12.0 dots.a.plenty.here.1.0.2.1 }; foreach my $testString ( @testStrings ) { my @parts = split m{\.}, (scalar reverse $testString), 5; my $rest = scalar reverse $parts[4]; my $digits = join q{.}, map{ scalar reverse $_ } reverse @parts[0..3]; print qq{$rest -- $digits\n}; }