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的转换代码,要么自己编写等价的代码,因此我的问题.
我不相信格式是记录的,但它不太可能改变.它相当于
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
,reftype
而refaddr
如果你想有一个参考的Perl的字符串化的成分,但下面是获得一个参考的Perl的字符串化的最佳方式:
use overload qw( );
my $str = overload::StrVal($ref);
Run Code Online (Sandbox Code Playgroud)