my $q = CGI->new( \ &WhizBang::upload_hook, $self ); # where $self is a ref to the current WhizBang object # then later sub upload_hook { my $remote_filename = shift; my $buffer = shift; my $bytes_read = shift; my $self = shift; my $progress = $self->param('progress'); my( $filename ) = $remote_filename =~ m/^ (?: .* [:>\]\\\/] )? ( .* ) $ /xs; $progress->{file_name} = $filename; $progress->{bytes_xfrd} = $bytes_read; $progress->{time_now} = time(); # other processing to output data to external storage # for display from another script }