sub foo { print 'Foo!' }; sub bar { my( $output ) = @_; $output->(); }; bar( \&foo ); #### sub foo1 { print 'Foo! One' }; sub foo2 { print 'Foo! Two' }; bar( \&foo1 ); bar( \&foo2 ); #### sub foo1 { print 'Foo! One' }; sub foo2 { print 'Foo! Two' }; use vars '$output'; sub bar { $output->(); }; local $output = \&foo1; bar(); local $output = \&foo2; bar(); #### sub foo { print 'Foo!' }; sub bar { foo(); }; bar(); { local *foo = sub { print 'Foo! reloaded!'; }; bar(); }