use 5.010; use strict; use warnings; package Foo; use overload '""' => sub {${$_[0]}{SCALAR}}, '@{}' => sub {${$_[0]}{ARRAY}} ; sub XX { bless {SCALAR => 'one', ARRAY => ['two', 'three']}, shift; } package main; my $y = Foo->XX; say join ", ", $y, @$y; __END__ one, two, three