sub alpha { my $self = shift; ... foreach ... if ... if ... if ... push @foo, [ @bar ]; } } } else { push @foo, [ @bar ]; } } push @foo, [ @bar ]; return \@foo; } sub beta { my $self = shift; ... foreach ... if ... if ... if ... push @foo, [ @bar ] if $self->{baz} eq $gamma; } } } else { push @foo, [ @bar ] if $self->{baz} eq $gamma; } } push @foo, [ @bar ] if $self->{baz} eq $gamma; return \@foo; } #### push @foo, [ @bar ]; #### push @foo, [ @bar ] if $self->{baz} eq $gamma; #### sub alpha { my $self = shift; my $coderef = sub {1}; return $self->_internal_sub($coderef); } sub beta { my $self = shift; my $coderef = sub {$self->{baz} eq $gamma}; return $self->_internal_sub($coderef); } sub _internal_sub { my $self = shift; my $coderef = shift; ... foreach ... if ... if ... if ... push @foo, [ @bar ] if &$coderef; } } } else { push @foo, [ @bar ] if &$coderef; } } push @foo, [ @bar ] if &$coderef; return \@foo; }