#! perl -slw use strict; package Gimme; use Scalar::Util qw[ refaddr ]; my %hashes; my %arrays; use overload '%{}' => sub { return $hashes{ refaddr( $_[ 0 ] ) }; }, '@{}' => sub { return $arrays{ refaddr( $_[ 0 ] ) }; }, '""' => sub { return overload::StrVal( $_[ 0 ] ); }, '0+' => sub { return overload::StrVal( $_[ 0 ] ); }, ; sub new { my( $class, $dummy ) = shift; my $self = \$dummy; $hashes{ 0+$self } = {}; $arrays{ 0+$self } = []; return bless $self, $class; } package main; my $gimme = new Gimme; @{ $gimme } = 1 .. 10; print @{ $gimme }; %{ $gimme } = 'A' .. 'Z'; print %{ $gimme }; print $gimme->{ fred } = 'bill'; print $gimme->[ 123 ] = 456; __END__ C:\test>junk9 12345678910 STABOPWXKLYZEFQRMNCDIJGHUV bill 456