in reply to subroutine concatenation

You could wrap calls to the original and the added sub into a new anon sub:
$ perl -w sub addcoderef { my ($orig, $add) = @_; sub { $orig->(); $add->(); } } use strict; my $coderef = sub { print "SUB1\n"; }; $coderef = addcoderef( $coderef, sub { print "SUB2\n"; } ); $coderef->(); __END__ SUB1 SUB2
but using an array scales better.

Another option is to deparse them (but deparsing historically hasn't worked 100%):

$ perl -w use strict; sub addcoderef { use B::Deparse; my $d = B::Deparse->new(); eval join "\n", "sub {", map($d->coderef2text($_), @_), "}"; } my $coderef = sub { print "SUB1\n"; }; $coderef = addcoderef( $coderef, sub { print "SUB2\n"; } ); $coderef->(); __END__ SUB1 SUB2