#!/usr/bin/perl

use strict;
use warnings;
use v5.24;

my @Arr = ('1.1', '2.4.5', '1.1.1', '3.4');
my %Tmp = ();

foreach my $i (@Arr) {
  $Tmp{$i} = '*';
  my $j = $i;
  while ($j =~ /^(.+).\d/) {
    $j = $1;
    $Tmp{$j} = '*';
  }
}

my @Res = sort {return (length($a) == length($b)) ? $a cmp $b : length($b) <=> length($a)} keys %Tmp;
map {say $_ } @Res;