use strict; use warnings; package Foo; sub new { my ($class, $callback) = @_; return bless {callback => $callback}, $class; } sub doIt { my ($self) = @_; return $self->{callback}->(); } package main; my $test = "Big test"; my $foo = Foo->new (sub {return hook (\$test);}); $foo->doIt (); print $test; sub hook { my ($test, $filename, $buffer, $bytes_read, $data) = @_; $$test .= ': success'; }