Мне хорошо известно, что есть несколько вопросов по подобным темам, но я не вижу, как применить ответы на мою проблему: < Не удается найти метод объекта «idx» через пакет «1»>Не удается найти метод объекта XX через пакет «1»
Я не понимаю, что я использую одну и ту же архитектуру в двух пакетах и что это нормально в первом ... Где находится пакет «1» из ?
Вот пакет, который работает отлично:
package ObjA;
use warnings;
use strict;
use Data::Dumper;
use Carp;
use ObjB;
#CONSTRUCTOR AND INITIALISATION
sub new {
my $class = shift;
my $self = {@_};
bless($self,$class);
$self->language();
return $self;
}
sub load {
my $self = shift;
open (my $stream,"<",$self ->{name});
my @glob_xs=();
my $i = 0;
while (<$stream>){
$i += 1;
my @x = extract($stream,());
@glob_xs=(@glob_tokens,@x);
}
$self->tokens(\@glob_xs);
}
sub extract{
my ($stream,@x) = @_;
my $line = <$stream>;
chomp $line;
if ($line =~ /^\s*$/){
return @x;
}
print join("/",split("\t",$line));
my $b = ObjB::new(split("\t",$line));
push @x,$b->form;
extract_sentence($stream,@x);
}
# OBJECT ACCESSOR METHODS
sub language {$_[0]->{language}=$_[1] if defined $_[1] ; $_[0]->{language}}
1;
И вот один, который производит ошибку:
package ObjB;
use warnings;
use strict;
use Data::Dumper;
use Carp;
# CONSTRUCTOR AND INITIALISATION
sub new {
my $class = shift;
my $self = {@_};
bless($self,$class);
$self->idx(); # Dies here.
return $self;
}
# OBJECT ACCESSOR METHODS
sub idx {$_[0]->{idx}=$_[1] if defined $_[1] ; $_[0]->{idx}}
1;
Будет ли это быть потому, что ObjB называется внутри ObjA? Или потому, что они объявлены в двух разных файлах?
Я действительно надеюсь, что кто-то есть ответ, потому что я был бег по кругу ...
Спасибо !!
'ObjB :: new' выглядит подозрительно –