package LuckyDeck; use Tie::Array; use overload '<>' => sub { use Want; my $self = shift; foreach (qw(BOOL SCALAR LIST ASSIGN REF)) { print STDERR "want $_\n" if want $_; } if (want ('BOOL') or want ('SCALAR')) { return splice( @$self, rand @$self, 1) unless wantarray; } my @deck; push @deck, splice( @$self, rand @$self, 1) while @$self; @deck; }; sub new { my $class = shift; bless [@_], $class; } package main; my $quux = LuckyDeck->new(1..9); print 'List Context',$/; print for <$quux>; print $/;