my $tokens = $ARGV[0]; my %meta = ( 't' => \&time, 'l' => \&log_level, 'm' => \&message, '%' => sub { '%' }, # So you can put "50%%" into your template and have it render as "50%" ); ($output = $tokens) =~ s/%(.)/$meta{$1}->()/ge;