# Assume: version strings have same numbers of parts. Adjust if not. # Note: This is not efficient, but may help explain what needs to happen. sort { my @a_fn_parts = split( qr([_]), $a ); my @a_ver_parts = split( qr([.]), @a_fn_parts[1] ); my @b_fn_parts = split( qr([_]), $b ); my @b_ver_parts = split( qr([.]), @b_fn_parts[1] ); my $i = 0; while ( $i < @a_ver_parts ) { return $a_ver_parts[ $i ] <=> $b_ver_parts[ $i ] if ( $a_ver_parts[ $i ] != $b_ver_parts[ $i ] ); $i++; } return 0; }