use strict; use warnings; package Results; { sub new { return (bless(\do{ my $scalar; }, __PACKAGE__)); } use overload ( '%{}' => \&as_hash ); sub as_hash { return ({ 'key1' => 'value1', 'key2' => 'value2' }); } } package main; my $obj = Results->new(); while (my ($key, $val) = each(%{$obj})) { print("$key => $val\n"); }