$ cat > Communicate.pm package Communicate; use 5.010_000; use strict; use warnings; sub build_greeter { my ( $class, $name, $arg ) = @_; return sub { my $person = shift // 'World'; my $comment = $arg->{greeting} // 'Hello'; say sprintf '%s, %s!', $comment, $person; } } use Sub::Exporter -setup => { exports => [ greet => \'build_greeter' ], }; 1; $ cat > communicate.pl #! perl use 5.010_000; use strict; use warnings; use lib '.'; use Communicate greet => { greeting => 'Well-done', -as => 'say_to', }; say_to('Nelo'); exit 0; #### $ perl communicate.pl Well-done, Nelo! #### $ perl -I. -e 'use Communicate greet => { greeting => q{Good job}, -as => q{say_to} }; say_to(q{Nelo})' Good job, Nelo!