#!/usr/local/bin/perl -w use strict; package ArrayOrString; use overload '""' => \&to_string; my $STRING_VAL = ''; sub new { my ($class, $arrayref) = @_; die "not an array ref" unless 'ARRAY' eq ref $arrayref; bless $arrayref, $class; } sub string { shift; $STRING_VAL = shift if @_; return $STRING_VAL; } sub to_string { return $STRING_VAL; } package main; my @bar = qw(one two three); my $foo = ArrayOrString->new(\@bar); $foo->string('bar'); print "*** $foo ***\n"; foreach my $baz (@$foo) { print "Val: $baz \n"; }