# private getCreditAccounts sub getCreditAccounts { caller(0) eq __PACKAGE__ || confess "getCreditAccounts is private"; my $closure = shift; my @accounts = @{ &{$closure}( "CREDITACCOUNTS" ) }; return @accounts; } # working on a copy of the original array... my @anotherArray = $obj->getCreditAccounts(); push @anotherArray, "Data"; #### # private getCreditAccounts # now returning reference to the original array sub getCreditAccounts { caller(0) eq __PACKAGE__ || confess "getCreditAccounts is private"; my $closure = shift; return &{$closure}( "CREDITACCOUNTS" ) }; } # public to add accounts to the creditaccounts sub addCreditAccount { my $closure = shift; my $account = shift; push @{ $closure->getCreditAccounts() }, $account; }