Я wokring на perl-проекте, и мне приходится динамически использовать модули perl. У меня есть следующий модуль под названием CT.pm:Динамическое использование модулей perl
sub new {
my $class = shift;
my ($debug, $debug_matches,%checkHash) = @_;
my $self = {};
$self->{DEBUG} = shift;
$self->{DEBUG_MATCHES} = shift;
$self->{CHECKRESULT_OK} = "COMPLIANT";
$self->{CHECKRESULT_ERROR} = "NONCOMPLIANT";
%{$self->{checkHash}} = %checkHash;
eval{
use $checkHash{"type"};
$check = $checkHash{"type"}->new($self->{DEBUG},$self->{DEBUG_MATCHES},%checkHash);
};
bless($self,$class);
return $self;
}
Этот конструктор получает хэш, обозначаемый как% checkHash в качестве параметра. Этот хэш имеет ключевой тип. Значение, которое этот ключ сопоставляет с именем модуля perl, который я хочу использовать динамически.
Я придумал следующим образом, чтобы сделать это: (который я знаю, не будет работать, и я также знаю, что люди говорят, что Eval плохо):
eval{
use $checkHash{"type"};
$check = $checkHash{"type"}->new($self->{DEBUG},$self->{DEBUG_MATCHES},%checkHash);
};
Но идея динамически использовать perl с именем $ checkHash {"type"}.
Если у кого-то есть представление о том, как это сделать, помогите :) thx! : D
Нашли способ сделать это - не можете отправлять какие-либо решения в течение 8 часов. – Diemauerdk
Это обсуждалось ранее: http://stackoverflow.com/questions/251694/how-can-i-check-if-i-have-a-perl-module-before-using-it http: // stackoverflow. com/questions/1094125/try-to-use-module-in-perl-and-print-message-if-module-not-available http://stackoverflow.com/questions/1917261/how-can-i-dynamically -include-perl-modules http://stackoverflow.com/questions/2855207/how-do-i-load-a-module-at-runtime http://stackoverflow.com/questions/3470706/perl-dynamically-include http://stackoverflow.com/questions/3945583/how-can-i-condition-use http://stackoverflow.com/questions/6855970/use-of-eval – daxim