my $package = My::Package->new( \&user_sub ); $package->add_data( @user_data ); my $value = $package->operate_on_all_data(); sub user_sub { # code here } #### # in My::Package sub operater_on_all_data { my $value; foreach ( @internal_data_storage ) { $value += &user_sub_variable(); } } # in user_sub sub user_sub { return $_ * 2; } #### # in My::Package sub operater_on_all_data { my $value; my $i = 0; foreach ( @internal_data_storage ) { $helper = $i++; $value += &user_sub_variable(); } } # in user_sub sub user_sub { return $_ * 2 * $My::Package::helper; } #### # in My::Package sub operater_on_all_data { my $value; my $i = 0; foreach ( @internal_data_storage ) { $helper = $i++; $value += &user_sub_variable( $i++ ); } } # in user_sub sub user_sub { my $multiplier = shift; return $_ * 2 * $multiplier; }