my %cb = ( use => \&use, dbl => \&dbl, ); 1 while s/<([^<]+?)>([^<]*?)<\/>/ #TODO: Make sure $cb->{$1} exists. $_{$1}->{$2} ||= $cb->{$1}->($2) /e;