use strict; use warnings; use feature "say"; my @array = qw(Patch_11.4 Patch_1.0 Patch_4.22 Patch_3.1 Patch_5.0 Patch_4.2 Patch_6.0 Patch_4.8 Patch_4.7 Patch_4.20 Patch_9.3 Patch_10.2 Patch_11.2 Patch_4.18); @array = map { $_->[0] } sort { $a->[1] <=> $b->[1] or $a->[2] <=> $b->[2] } map { /Patch_(\d+)\.(\d+)/; [$_, $1, $2]} @array; say for @array;