sub foo { my($qr, $replace) = @_; s/$qr/$replace->()/ge; } $_ = "This is a new dawn."; foo(qr/(\w+)/, sub { ucfirst $1 }); print; #### sub bar { my $callback = shift; $callback->(); } bar(sub { s/(\w+)/\u$1/g; });