Perl中带哈希的字典Python等效字符串格式

Perl中带哈希的字典Python等效字符串格式,perl,hash,dictionary,string-formatting,Perl,Hash,Dictionary,String Formatting,我喜欢Python使用字典格式化字符串的方式: print "%(key1)s and %(key2)s" % aDictObj 我想在Perl中通过哈希实现同样的功能。是否有任何代码片段或小型库可以这样做 编辑: 谢谢你尝试这个答案。至于我,我给出了一段简短的代码: sub dict_replace { my ($tempStr, $tempHash) = @_; my $key; foreach $key (sort keys %$tempHash) {

我喜欢Python使用字典格式化字符串的方式:

print "%(key1)s and %(key2)s" % aDictObj
我想在Perl中通过哈希实现同样的功能。是否有任何代码片段或小型库可以这样做

编辑: 谢谢你尝试这个答案。至于我,我给出了一段简短的代码:

sub dict_replace
{
    my ($tempStr, $tempHash) = @_;
    my $key;

    foreach $key (sort keys %$tempHash) {
        my $tmpTmp = $tempHash->{$key};
        $tempStr =~ s/%\($key\)s/$tmpTmp/g;
    }

    return $tempStr;
}
它只是工作。这项功能不如使用字典的Python字符串格式完整,但我希望在这方面有所改进。

您可以将其编写为:

say format_map '{$key1} and {$key2}', \%aDictObj
如果您定义:

sub format_map($$) {
 my ($s, $h) = @_;
 Text::Template::fill_in_string($s, HASH=>$h);
}

它是Python中{code>“{key1}和{key2}”格式映射(aDictObj)的直接等价物。

来自Python文档:

其效果类似于在C语言中使用sprintf()

这是一个使用or的解决方案

还有一个新模块,它使用命名参数来执行此操作:

use Text::sprintfn;
my %dict = (key1 => 'foo', key2 => 'bar');
printfn '%(key1)s and %(key2)s', \%dict;

不太确定这里的字符串插值有什么问题

print "$aDictObj{key1} and $aDictObj{key2}\n";

您正在寻找Text::Template吗?谢谢你,大卫。然而,它并没有Python那么优雅。那么,你是在建议这样的东西吗<代码>%aDictObj=(定义=>此处);为\%aDictObj打印“$\->{key1}s和$\->{key2}s”数据::转储程序如何?谢谢斯波克。这不是我要找的。使用字典格式化与C printf()完全不同。它允许指定在基于名称而不是基于其在参数列表中的位置构建字符串时要使用的参数。
cpan Text::sprintfn
不起作用:无法安装Text::sprintfn,不知道它是什么。J.F。塞巴斯蒂安,有个索引错误什么的。使用更合格的符号安装
SHARYANTO/Text-sprintfn-0.03.tar.gz
。Perl字符串插值不如Python字符串的字典格式灵活。
print“%(key1)s和%(key2)s”%aDictObj
print“$aDictObj{key1}和$aDictObj{key}”
实际上是一样的。Python版本如何更灵活?@flesk:Vieta可能意味着您可以在Python版本中使用宽度、精度说明符等。然后回到printf()。还是NBD。
print "$aDictObj{key1} and $aDictObj{key2}\n";