+my $simple_cleanup = sub {
+ my ($version) = @_;
+
+ my $is_dev = $version =~ /_/;
+
+ for ($version) {
+ s/^v//;
+ y/_-//d;
+ s/^\.*//;
+ s/\.*\z//;
+ s/\.+/./g;
+ }
+
+ $version .= '_rc' if $is_dev;
+
+ return $version;
+};
+
+my $simple_and_correct_suffixes = sub {
+ my ($version) = @_;
+
+ $version = $simple_cleanup->($version);
+ $version =~ s/(?<!_)((?:alpha|beta|pre|rc|p)\d*)\b/_$1/g;
+
+ return $version;
+};
+
+my $simple_and_strip_letters = sub {
+ my ($version) = @_;
+
+ $version = $simple_cleanup->($version);
+ $version =~ s/(?<=\d)[a-z]+//g;
+
+ return $version;
+};
+
+my $simple_and_letters_as_suffix = sub {
+ my ($version) = @_;
+
+ $version = $simple_cleanup->($version);
+ $version =~ s/(?<=\d)b(?=\d)/_beta/g;
+
+ return $version;
+};
+
+my %version_mismatch;
+
+$version_mismatch{$_} = $default_but_ignore_v for qw<
+ Net-DNS-Resolver-Programmable
+>;
+
+$version_mismatch{$_} = $default_but_no_strip_1 for qw<
+ Crypt-RC4
+ FLV-AudioExtractor
+ File-Grep
+ MogileFS-Client-Async
+ MogileFS-Network
+ Test-Command-Simple
+ Unix-Getrusage
+>;
+
+$version_mismatch{$_} = sub { $insert_dot_every->($_[0], 1) } for qw<
+ HTTP-Cookies
+ HTTP-Negotiate
+>;
+
+$version_mismatch{$_} = sub { $insert_dot_every->($_[0], 3) } for qw<
+ Data-Diver
+>;
+
+$version_mismatch{$_} = $simple_cleanup for qw<
+ CGI-SpeedyCGI
+ Class-ISA
+ CryptX
+ Data-HexDump
+ Gtk2-Notify
+ HTML-Table
+ I18N-LangTags
+ IO
+ IPC-System-Simple
+ Lab-Measurement
+ Net-Ping
+ REST-Client
+ SDL
+ SOAP-WSDL
+ TAP-Parser-SourceHandler-pgTAP
+ TeX-Encode
+ Tie-Simple
+ Time-Piece
+ WattsUp-Daemon
+>;
+
+$version_mismatch{$_} = $simple_and_correct_suffixes for qw<
+ XML-Grove
+>;
+
+$version_mismatch{$_} = $simple_and_strip_letters for qw<
+ DelimMatch
+ SGMLSpm
+>;
+
+$version_mismatch{$_} = $simple_and_letters_as_suffix for qw<
+ Frontier-RPC
+>;
+
+sub version_c2g {
+ my ($n, $v) = @_;
+
+ return unless defined $v;
+
+ my $handler;
+ $handler = $version_mismatch{$n} if defined $n;
+ $handler = $default_mapping unless defined $handler;
+
+ return $handler->($v);