1: sub seval
   2: {
   3:     my ($sub) = shift;
   4:     $vni++;
   5:     $sub =~ s#s/([^/]+)/([^/]+)/(.+)#s/\1/\$i$vni++ == \3 ? \2 : \$&/egs#;
   6:     return $sub;
   7: }
   8: 
   9: # Evals 's/foo/$i1++ == 1 ? bar : $&/egs', replacing match 3 only
  10: eval(seval("s/foo/bar/2"));