in reply to Risque Romantic Rosetta Roman Race

Interestingly, I wrote my own converter when solving The Weekly Challenge 010 (and reused it when solving The Weekly Challenge 047). It performs comparably to your code on my machine while using a slightly different approach.
my %from_roman = ( I => 1, V => 5, X => 10, L => 50, C => 100, D => 500, M => 1000, ); sub from_roman (_) { my ($roman) = @_; my $n = 0; while ($roman =~ s/(I[VXLCDM]|X[LCDM]|C[DM])//) { my ($minus, $plus) = split //, $1; $n += $from_roman{$plus} - $from_roman{$minus}; } $n += $from_roman{$_} for split //, $roman; $n }
map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]