....
my ($class,$alias_for) = @_;
install_sub(
$class,
'find_ids',
sub {
my ($class,$params) = @_;
do_something_with($alias_for);
# $alias_for is a lexical which defined outside this sub
# which uses deep binding so that it is available
# when this sub is called
return $class->SUPER::find_ids($params);
});
....
####
eval "package $class; sub find_ids { ..... }";
####
....
my ($class,$alias_for) = @_;
# Store the original find_ids here
my $original_find_ids = $class->can('find_ids')
or die "Super-classes of $class don't define sub find_ids";
install_sub(
$class,
'find_ids',
sub {
my ($class,$params) = @_;
# Do something with $alias_for;
# Use the original find_ids as a function
# $class as its first argument, so it thinks
# that it has been called as a method
return $original_find_ids->($class,$params);
});
....