2014-10-13 2 views
0

Привет Я работаю над системой расширения для моего проекта, я пытаюсь загрузить несколько пакетов, чтобы я мог их использовать. У меня есть хэш пакетов с их ключами, я хочу использовать эти ключи в качестве ссылки для доступа к нескольким методам. Я могу использовать Moose или Moo для расширения этих пакетов, но я хочу попробовать что-то новое.Вызов нескольких классов - Perl

Вот код:

my %classes = (
    eng => 'EnglishClass', 
    esp => 'SpanishClass', 
    fre => 'FrenchClass', 
    hin => 'HindiClass' 
); 
while (my ($classType, $className) = each(%classes)) { 
    $self->{$classType} = $className->new(); 
} 

кажется, нагружать, но когда я пытаюсь получить доступ к методам, неправильный пакет вызывается, даже если я использую правильный ключ для справки.

+0

Ошибка в другом месте. Возможно, эти объекты ошибочно сохраняют некоторое или все их состояние в переменных, которые разделяются между объектами. – ikegami

ответ

2

Ваш пример работает для меня. Можете ли вы показать, как вы обращаетесь к объектам?

Вот мой быстрый прием;

#!/usr/bin/env perl 
use strict; 
use feature qw/say/; 

my %classes = (
    eng => 'ENG', 
    esp => 'ESP' 
); 

my $self = {}; 
while (my ($classType, $className) = each(%classes)) { 
    $self->{$classType} = $className->new(); 
} 

$self->{'eng'}->hello(); 

package ENG; 
sub new { return bless {}, shift; } 
sub hello { say 'Hello from ENG'; } 

package ESP; 
sub new { return bless {}, shift; } 
sub hello { say 'Hello from ESP'; } 

1; 
+0

Вот как я обращаюсь к методам '$ self -> {eng} -> hello();' – user2524169

+1

В вашем коде может быть что-то, что вы не показываете, насколько я вижу, система должна работать со всей информацией, поэтому далеко обеспечены. – harvey