$ 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;