, , . !
, . , , , 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';