是否有可能(并且明智地)将Moose对象评估的值更改为标量上下文。例如,如果我
my $object = MyObject->new();
print $object;
而不是打印像:
MyObject=HASH(0x1fe9a64)
我可以让它打印一些其他自定义字符串吗?
答案 0 :(得分:6)
查看overload
pragma。我不认为你可以重载标量上下文,但尝试重载字符串化(由""
,表示,你必须引用它成为愚蠢的,引用使用'""'
q
运算符使其更具可读性。)
#!/usr/bin/env perl
use strict;
use warnings;
package MyObject;
use Moose;
use overload
q("") => sub { return shift->val() };
has 'val' => ( isa => 'Str', is => 'rw', required => 1);
package main;
my $obj = MyObject->new( val => 'Hello' );
print $obj; # Hello
答案 1 :(得分:2)
以下内容也可能让您有些头疼:
use namespace::autoclean;
,有时会提及/建议与Moose有关,与use overload q("")...
不兼容。
一般情况下,您放弃use namespace::autoclean;
,然后use overload q("")...
正常工作。
答案 2 :(得分:1)
是的,你可以。请查看overloading ""
。
决定,如果这是明智的,取决于你8)