use v5.14; use warnings; use DBI (); package MyApp { sub do_something { my ($version, $dbh, $output_file) = @_; if ( $version < 1.0 ) { # a local variable do_something_simple($output_file); } else { do_something_complex($output_file, $dbh); } } sub do_something_simple { my ($output_file) = @_; open my $fh, '>', $output_file or die; print $fh "Hello world\n"; } sub do_something_complex { my ($output_file, $dbh) = @_; open my $fh, '>', $output_file or die; print $fh "Hello world\n"; printf $fh "There are %d rows in the table.\n", $dbh->do("SELECT 1 FROM my_table"); } } MyApp::do_something( 1.2, DBI->connect("dbi:SQLite:dbname=myapp.sqlite"), '/tmp/output.txt', );