#!/usr/bin/env perl use strict; use warnings; use IO::Prompt::Tiny qw(prompt); my $user = prompt("What is your name? "); greet($user); exit(0); sub make_hello { return "Hello"; } sub make_subject { return shift; } sub greeting { my $who = shift; return make_hello() . ' ' . make_subject($who) } sub greet { print greeting(shift), "\n"; } #### #!/usr/bin/env perl package MyScript; use strict; use warnings; use IO::Prompt::Tiny qw(prompt); main() if !caller(); exit(0); sub main { my $user = prompt("What is your name? "); greet($user); } sub make_hello { return "Hello"; } sub make_subject { return shift; } sub greeting { my $who = shift; return make_hello() . ' ' . make_subject($who) } sub greet { print greeting(shift), "\n"; } 1; #### use strict; use warnings; use Test::More; require '/path/to/myscript.pl'; can_ok MyScript => qw(greet greeting make_subject make_hello main); is MyScript::make_hello, 'Hello', 'Got Hello'; is MyScript::make_subject('Monk'), 'Monk', 'Got correct subject.'; is MyScript::greeting('Monk'), 'Hello Monk', 'Got a correct greeting.'; use Capture::Tiny qw(capture_stdout); my $resp = capture_stdout {MyScript::greet('Monk')}; is $resp, "Hello Monk\n", 'Got correct output in STDOUT.'; done_testing();