does anyone know a way to achieve/emulate this behavior
Perl's sprintf can refer to arguments by number, but not by name.
>perl -le"print sprintf '%2$s %1$s', qw( a b )" b a
Double-quoted strings interpolate, so all you need
$hello = "Hello $name";
If you're asking for the format to be variable, then you're asking for a templating system. There are many of those. Here's a fair approximation of the syntax you requested:
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' });
Update: Added code
Update: haoess found Text::Sprintf::Named
In reply to Re: python like named placeholders sprintf ?
by ikegami
in thread python like named placeholders sprintf ?
by 2xlp
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |