in reply to Advanced Bubble Sort

#!/usr/bin/perl -l # http://perlmonks.org/?node_id=1173958 use strict; use warnings; my @data = <DATA>; my $numbers = ''; $numbers |= $_ for "@data" =~ /\d+/g; my $length = length $numbers; my %packages; @packages{ /^([\w-]+)/ } = $_ for map $_->[0], sort { $a->[1] cmp $b->[1] } map [ $_, s/\d+/ sprintf "%0${length}d", $& /ger ], @data; print sort values %packages; __DATA__ samba-common-libs-4.2.10-6.2.el7_2.x86_64 samba-common-libs-4.2.10-8.el7_2.x86_64 samba-common-libs-4.2.12-7.el7_2.x86_64 samba-common-libs-4.2.10-6.el7_2.x86_64 samba-common-libs-4.2.10-3.el7_2.x86_64 xyz-libs-4.2.10-7.el7_2.x86_64 xyz-libs-4.2.12-7.el7_2.x86_64 xyz-libs-4.2.13-7.el7_2.x86_64 xyz-libs-4.2.11-7.el7_2.x86_64 abc-4.2.11-7.el7_2.x86_64 abc-4.2.11-8.el7_2.x86_64 abc-4.2.11-6.el7_2.x86_64

prints:

abc-4.2.11-8.el7_2.x86_64 samba-common-libs-4.2.12-7.el7_2.x86_64 xyz-libs-4.2.13-7.el7_2.x86_64