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

标签 perl operator-overloading

如果我在 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 , reftyperefaddr如果您想要 Perl 引用字符串化的组件,但以下是获取 Perl 引用字符串化的最佳方法:
use overload qw( );

my $str = overload::StrVal($ref);

关于perl - Perl 的默认对象到字符串转换在哪里定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46204472/

相关文章:

windows - 如何使我的 Perl 脚本像 Windows 上的普通程序一样运行?

arrays - 在 Perl 数组中保存命令行选项的多个值

c++ - 重载数组访问运算符时如何访问 SIMD vector 元素?

c++ - 运算符重载删除函数

c++ - 重载内部没有数组的 [] 运算符

linux - 使用bash替换文本文件中的字符串

regex - 为什么 pos() 即使与非捕获组也报告匹配?

perl - 是否有 PDF 文件的测试套件?

c++ - 检查 operator= 中的自赋值

c++ - 如何改变 boost::variant operator < 的行为