http://www.perlmonks.org?node_id=1210520


in reply to Help Changing use into require/import

Generally in a case like this I use either BEGIN blocks or fully-qualified names, whichever seems appropriate. In this case the latter seems a better fit:

#!/usr/bin/env perl use strict; use warnings; my ( $stdout, $stderr, $errcode ); if (eval { require Capture::Tiny } ) { print "Using Capture::Tiny\n"; ( $stdout, $stderr, $errcode ) = Capture::Tiny::capture( sub { system "echo Hello, World | cat"; } ) } elsif (eval { require IPC::Run } ) { print "Using IPC::Run\n"; no warnings qw{ qw }; # Otherwise Perl complains about the comm +a IPC::Run::run( [ qw{ echo Hello, World } ], \'', '|', [ 'cat' ], \$stdout, \$stderr ); } print "STDOUT: $stdout";