use webdav; my %callback = ( get_properties => \&get_properties_callback, get_content => \&get_content, get_options => \&get_options, put_content => \&put_content, move_member => \&move_member, copy_member => \©_member, make_collection => \&make_collection, delete_member => \&delete_member, ); webdavlisten(%callback); package webdav; #Exports, etc etc sub webdavlisten { my %callback = @_; ... &{$callback{get_content}}(data...);