This is a very silly script I wrote to demonstrate the very possibility of how something could be done this way. The regex is to convert roman numerals to integers. It is neither useful nor witty.
use strict;
sub l { return length shift }
sub roman2int {
$_ = shift;
/(M*)(?{$a+=1000*l$1})(D*)(?:(?!M)(?{$a+=500*l$2})|(?{$a-=500*l$2}
+))(C*)(?:(?![MD])(?{$a+=100*l$3})|(?{$a-=100*l$3}))(L*)(?:(?![MDC])(?
+{$a+=50*l$4})|(?{$a-=50*l$4}))(X*)(?:(?![MDCL])(?{$a+=10*l$5})|(?{$a-
+=10*l$5}))(V*)(?:(?![MDCLX])(?{$a+=5*l$6})|(?{$a-=5*l$6}))(I*)(?:(?![
+MDCLXV])(?{$a+=1*l$7})|(?{$a-=1*l$7}))(M*)(?{$a+=1000*l$8})(D*)(?{$a+
+=500*l$9})(C*)(?:(?![MD])(?{$a+=100*l$10})|(?{$a-=100*l$10}))(L*)(?:(
+?![MDC])(?{$a+=50*l$11})|(?{$a-=50*l$11}))(X*)(?:(?![MDCL])(?{$a+=10*
+l$12})|(?{$a-=10*l$12}))(V*)(?:(?![MDCLX])(?{$a+=5*l$13})|(?{$a-=5*l$
+13}))(I*)(?:(?![MDCLXV])(?{$a+=1*l$14})|(?{$a-=1*l$14}))(C*)(?{$a+=10
+0*l$15})(L*)(?:(?![MDC])(?{$a+=50*l$16})|(?{$a-=50*l$16}))(X*)(?:(?![
+MDCL])(?{$a+=10*l$17})|(?{$a-=10*l$17}))(V*)(?:(?![MDCLX])(?{$a+=5*l$
+18})|(?{$a-=5*l$18}))(I*)(?:(?![MDCLXV])(?{$a+=1*l$19})|(?{$a-=1*l$19
+}))(L*)(?{$a+=100*l$20})(X*)(?:(?![MDCL])(?{$a+=10*l$21})|(?{$a-=10*l
+$21}))(V*)(?:(?![MDCLX])(?{$a+=5*l$22})|(?{$a-=5*l$22}))(I*)(?:(?![MD
+CLXV])(?{$a+=1*l$23})|(?{$a-=1*l$23}))(X*)(?{$a+=10*l$24})(V*)(?:(?![
+MDCLX])(?{$a+=5*l$25})|(?{$a-=5*l$25}))(I*)(?:(?![MDCLXV])(?{$a+=1*l$
+26})|(?{$a-=1*l$26}))(X*)(?{$a+=10*l$27})/;
return $a;
}
print roman2int shift;