, , . !
, . , , , Perl, . use strict use warnings, . ? :
- , . , . , , . , .
- " " , .
- , . , , , , , . , , - .
?
, Perl, : eval require. , .
eval eval EXPR Perl . , . , , File:: Slurp:
eval read_file("$file_with_code", binmode => ':utf8');
if( $@ ) {
die "$file_with_code: error $@\n";
}
if( !defined &myfunction ) {
die "myfunction is not defined at $file_with_code\n";
}
read_file , . , . , $file_with_code :
sub myfunction(...) {
}
. , . .
()
, , require. use, , require . require :
my $mymodule = 'MyCompany::MyModule';
require $mymodule;
use, require , import. , . :
$mymodule->myfunction($a, $b);
. , . $a $b, $self. , .
require , , , :
eval "require $mymodule";
$@ + . , :
if( $mymodule->can('myfunction') ) {
die "myfunction is not defined at module $mymodule\n";
}
.pm :
MyCompany
MyModule.pm
MyModule.pm :
package MyCompany::MyModule;
sub myfunction {
my ($self, $a, $b);
}
1;
package , , , MyCompany::MyModule. 1; require, .
, , , , namespace:: clean . , , , . :
package MyCompany::MyModule;
use Library1 qw(def1 def2);
use Library2 qw(def3 def4);
...
sub private_function1 {
...
}
...
use namespace::clean;
sub myfunction {
}
...
1;
, ?
- . Perl , %INC. use require . use . require . , , %INC , module:: loaded, Perl:
use Module::Loaded;
if( !is_loaded( $mymodule ) {
eval "require $mymodule" );
...
}
, Perl ?
use require Perl @INC , . ( ) PERL5LIB :
use lib '/the/path/to/my/libs';
, , , . :
:: Load:: :
use Module::Load::Conditional qw(can_load);
my $use_list = {
CPANPLUS => 0.05,
LWP => 5.60,
'Test::More' => undef,
};
print can_load( modules => $use_list )
? 'all modules loaded successfully'
: 'failed to load required modules';