use String::Interpolate qw( ); sub format { my ($pat, $args) = @_; my $t = String::Interpolate->new($args); $t->($pat); return "$t"; } my $hello = format('Hello $name', { name => 'World' });