如果我在 Perl 中打印对受祝福对象的引用,我会得到如下内容:
Foo::Bar=HASH(0x0123456789ab)
该代码在哪里定义?第一部分是
ref($obj)
,但 HASH 十六进制值从何而来?我正在尝试为具有可选
to_string
属性的对象编写 name
重载运算符。如果提供了 name
,我希望它打印Foo::Bar(name=joe)
如果
name
未定义,则回退到默认的 Perl 字符串。所以我要么必须能够从我的代码中调用 Perl 的转换代码,要么自己编写等效的代码,因此我的问题。
最佳答案
我不相信格式被记录在案,但它不太可能改变。它相当于
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),
);
您可以使用
blessed
, reftype
和 refaddr
如果您想要 Perl 引用字符串化的组件,但以下是获取 Perl 引用字符串化的最佳方法:use overload qw( );
my $str = overload::StrVal($ref);
关于perl - Perl 的默认对象到字符串转换在哪里定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46204472/