Perl的默认对象到字符串转换在哪里定义?

Joh*_*nst 4 perl operator-overloading

如果我在Perl中打印一个对受祝福对象的引用,我会得到这样的结果:

Foo::Bar=HASH(0x0123456789ab)
Run Code Online (Sandbox Code Playgroud)

该代码定义在哪里?第一部分是ref($obj),但HASH十六进制值来自何处?

我正在尝试为to_string具有可选name属性的对象编写重载运算符.如果name提供,我希望它打印

Foo::Bar(name=joe)
Run Code Online (Sandbox Code Playgroud)

如果没有name未定义,则回退到默认的Perl字符串.所以我要么必须能够从我的代码中调用Perl的转换代码,要么自己编写等价的代码,因此我的问题.

ike*_*ami 5

我不相信格式是记录的,但它不太可能改变.它相当于

use Scalar::Util qw( blessed refaddr reftype );

my $pkg = blessed($ref);
my $str = sprintf("%s%s(0x%x)",
   ( defined($pkg) ? "$pkg=" : "" ),
   reftype($ref),
   refaddr($ref),
);
Run Code Online (Sandbox Code Playgroud)

您可以使用blessed,reftyperefaddr如果你想有一个参考的Perl的字符串化的成分,但下面是获得一个参考的Perl的字符串化的最佳方式:

use overload qw( );

my $str = overload::StrVal($ref);
Run Code Online (Sandbox Code Playgroud)