String 是否有一个内置的“;散列到字符串";用Perl?

String 是否有一个内置的“;散列到字符串";用Perl?,string,perl,hash,String,Perl,Hash,我将从Python背景中学习Perl,其中内置了以下哈希到字符串的转换: >>> d = {'a': 1, 'b': 2, 'c': 3} >>> str(d) "{'a': 1, 'c': 3, 'b': 2}" 是否有一个内置和/或模块,其子例程的输出如下: "('a' => 1, 'b' => 2, 'c' => 3)" 奇怪的是,对perl“hash to string”的web搜索并没有找到我所要查找的内容。谢谢 有一个模块,可

我将从Python背景中学习Perl,其中内置了以下哈希到字符串的转换:

>>> d = {'a': 1, 'b': 2, 'c': 3}
>>> str(d)
"{'a': 1, 'c': 3, 'b': 2}"
是否有一个内置和/或模块,其子例程的输出如下:

"('a' => 1, 'b' => 2, 'c' => 3)"
奇怪的是,对
perl“hash to string”
的web搜索并没有找到我所要查找的内容。谢谢

有一个模块,可以用哪种方法进行这种转换。

另请参见:

use Data::Dumper;
local $Data::Dumper::Terse = 1;
my $str = Dumper({a => 1, b => 2, c => 3});
这将产生:

{"c":3,"a":1,"b":2}
使用而不是Data::Dumper。它基本上是一样的,除了没有恼人的
$VAR1=…
cruft:

use Data::Dump "pp";
print pp({a => 1, b => 2, c => 3});
产生:

{ a => 1, b => 2, c => 3 }

如果您使用的是Windows,Data::Dump自5.8版起已预装。

另一个Swallow解决方案:

sub pp {
  my $h = shift();
  qq[{${\(join',',map"$_=>$h->{$_}",keys%$h)}}]
}
print pp({a => 1, b => 2, c => 3});
但是用它来代替

对于非常奇特的输出,您还可以使用:

use Data::Dumper;
use Perl::Tidy;
sub pp {
        local $Data::Dumper::Terse    = 1;
        local $Data::Dumper::Indent   = 0;
        my $source = Dumper(@_);
        my $result;
        Perl::Tidy::perltidy(
                source      => \$source,
                destination => \$result,
                argv        => [qw(-pbp -nst)]
        );
        return $result;
}
如果您喜欢某些键应该是第一个键,那么您可以使用这种方法(我希望
类型
第一个键和
位置
第二个键):


如果您有多层次结构的潜力,上述几种解决方案都有问题

特别是这面旗帜:

$Data::Dumper::Terse    = 1;
如Data::Dumper的perldoc页面所述,“terse”标志可能会生成不可perl解析的输出

如果您可能要使用多深度结构,正确的做法是使用:

$Data::Dumper::Indent = 0;

这保证了eval可以解析perl,这使得对明文进行序列化非常简单…

是的,但它确实在字符串前面加了一个
$VAR1=
。这是真的,很烦人,但很容易处理。在@INC中找不到数据/Dump.pm-这不是标准库。在ActivePerl 5.10上,构建1004,Data::Dump 1.08是预装的。+1,顺便说一句,我还没有意识到这个模块存在。它缺少某些附加组件,比如HTML格式,但是哦,好吧。Kev:你是说好的ol'Data::Dumper可以生成HTML格式的输出吗?如果是这样的话,那很酷…+1虽然看起来Data::Dumper被选为答案,但我认为JSON方法应该得到同样多的认可,因为它是一个非常简单的字符串哈希。虽然最初的问题并不意味着这是一个问题,但JSON::to_JSON很快,所以如果你需要序列化很多东西,这可能是比Data::Dumper更好的答案。()谢谢,无论如何我应该更多地使用JSON。当然,在MacOS上它没有安装,所以首先是“cpan安装JSON”,多亏了
$Data::Dumper::Terse    = 1;
$Data::Dumper::Indent = 0;