#!/usr/bin/perl -w use strict; sub on { my($f1,$f2,$l)=@_; my $parmtype = ref $f1; print "f1: $parmtype\n"; if ($parmtype eq 'CODE') { local $_=$$l; if (&$f1) { local *_=$l; &$f2($l); } }; } my $foo="abba is foo"; on sub{ /foo/ }, sub { tr/ab/ba/; }, \$foo; print "$foo\n"; on "bla", sub { tr/ab/ba/; }, \$foo;