Я пытаюсь понять, как использовать переменную экземпляра в Perl OO - более конкретно в сочетании с внешними ресурсами. Позвольте мне объяснить:
У нас есть DLL, которая предоставляет некоторые функции, которые я хотел бы представить через Perl API. Я использую Win32 :: OLE , чтобы получить доступ к этой DLL. Так что мой конструктор прост:
package MY_CLASS;
use Win32::OLE;
sub new
{
my ($class) = @_;
# instantiate the dll control
my $my_dll = Win32::OLE->new("MY_DLL.Control");
my $self = {
MY_DLL => \$my_dll,
};
bless $self, $class or die "Can't bless $!";
return $self;
}
sub DESTROY
{
my ($self) = shift;
undef $sef->{MY_DLL};
}
Как видите, я присваиваю переменной экземпляра MY_DLL ссылку на $my_dll
. У меня есть пара вопросов:
1) Как вызвать переменную экземпляра, поскольку она указывает на ссылку. Итак, другими словами, как я могу вызывать методы для экземпляра dll, как это:
my $dll_class = new MY_CLASS;
$dll_class->{MY_DLL}->launch();
при условии, что launch () - это метод, предоставляемый DLL. Но поскольку {MY_DLL} указывает на ссылку, Perl жалуется, что понятно. Какой синтаксис?
2) Нужно ли конкретно undef
в DESTROY? То есть Perl будет автоматически очищаться, даже если я не специально undef
это?