I am writing a package to process blocks of text with Lingua::StanfordCoreNLP which uses Inline::Java to create subclasses (Lingua::StanfordCoreNLP::*). In a script everything works well but I've run into a problem with my package.
package Processor; use Lingua::StanfordCoreNLP; use strict; use warnings; use Class::MakeMethods ( 'Template::Hash:scalar' => [ 'text', ], 'Template::Hash:object' => [ { name=> 'results', class=> 'Lingua::StanfordCoreNLP::PipelineSentenceList' }, ], 'Standard::Global:object' => { name => 'pipeline', class => 'Lingua::StanfordCoreNLP::Pipeline', }, ); my $pipeline = new Lingua::StanfordCoreNLP::Pipeline(1, 1); Processor->pipeline( $pipeline ); sub new { my $callee = shift; my $package = ref $callee || $callee; my $self = shift; bless $self, $package; return $self; } sub process_text { my ($self,$text) = @_; $self->text( $text ) if $text; $self->results( $self->pipeline->process( $self->text ) ); } 1;
I get the following error message when I use Processor in a script:
Can't locate object method "new" via package "Lingua::StanfordCoreNLP: +:Pipeline" (perhaps you forgot to load "Lingua::StanfordCoreNLP::Pipe +line"?)
Not sure why this is happening. syphilis pointed out here, (Re^5: Exporter Problem), that this does not happen using Inline::C.
My current workaround is to have the calling script use Processor, use Lingua::StanfordCoreNLP, then pass a pipeline object to the Processor's constructor. But I'd prefer to have this hidden from the caller.
In reply to Inline::Java Problem by osler
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |