いくつかの複雑なオブジェクト構造があり、Data::Printer を使用してそれらを調べています。オブジェクト (コンテナ) に別のオブジェクト (子) であるフィールドがある場合、子は DDP の出力にクラス名としてのみ表示されます。子の文字列化された値も見たいです。
例を見てみましょう:
{
package Child;
use Moo;
use overload '""' => "stringify";
has 'value', is => 'ro';
sub stringify {
my $self = shift;
return "<Child:" . $self->value . ">";
}
}
{
package Container;
use Moo;
has 'child', is => 'ro';
}
my $child_x = Child->new(value => 'x');
print "stringified child x: $child_x\n";
my $child_y = Child->new(value => 'y');
print "stringified child y: $child_y\n";
my $container_x = Container->new(child => $child_x);
my $container_y = Container->new(child => $child_y);
use DDP;
print "ddp x: " . p($container_x) . "\n";
print "ddp y: " . p($container_y) . "\n";
出力:
stringified child x: <Child:x>
stringified child y: <Child:y>
ddp x: Container {
Parents Moo::Object
public methods (2) : child, new
private methods (0)
internals: {
child Child # <- note this
}
}
ddp y: Container {
Parents Moo::Object
public methods (2) : child, new
private methods (0)
internals: {
child Child # <- and this
}
}
ご覧のとおり、子は出力で区別できません。クラス名に加えて、またはクラス名の代わりに、その場所で文字列化を確認したいと思います。