my @to_be_sorted; foreach my $filename (@filelist) { my ($root, $version) = $filename =~ /([a-z]+)_(\d+\.\d+\.\d+)/; my ($major, $minor, $third) = split /\./, $version; push @to_be_sorted, [$filename, $root, $major, $minor, $third]; }