I have one object that has an attribute of an array of another group of objects. I have a toString method that I want to print out the entire contents of the objects. The main goal is to have the Job object call all the post process jobs that are in the array. I want to call the method toString on the objects in the object array as well. Currently, I'm getting this error:
Can't call method "toString" without a package or object reference at JobClass.pm line 52, <JOBFILE> line 5. (which is $item->toString(); in the foreach loop)
Dumper on $item shows the following:
$VAR1 = bless( {
'ImportID' => '22',
'ImportTableID' => '1234',
'ImportTable' => 'testImport'
}, 'PostJob' );
Main goal of what I'm trying to understand is how I can call a method on an object returned from an member array.
Classes instantiated this way:
my $postJob = PostJob->new(ImportTable => "testImport",ImportTableID => "1234", ImportID => "22");
my @postJobs ="";
push (@postJobs,$postJob);
$postJob->toString(); #this works fine
my $job = Job->new(DirectoryName => "testDir",StagingTableName => "stageTable", QBStagingTableID => "5678",postProcessJobs => \@postJobs);
$job->toString(); #Breaks with error above
Code is below:
package PostJob;
use Moose;
use strict;
use Data::Dumper;
has 'ImportTable' => (isa => 'Str', is => 'rw', required => 1);
has 'ImportTableID' => (isa => 'Str', is => 'rw', required => 1);
has 'ImportID' => (isa => 'Str', is => 'rw', required => 1);
sub toString {
# Print all the values
my $self = shift;;
print "Table Name for Post Job is ".$self->ImportTable."\n";
print "Table ID for Post Job is ".$self->ImportTableID."\n";
print "Import ID for Post Job is ".$self->ImportID."\n";
}
package Job;
use strict;
use Data::Dumper;
use Moose;
has 'DirectoryName' => (isa => 'Str', is => 'rw', required => 1);
has 'StagingTableName' => (isa => 'Str', is => 'rw', required => 1);
has 'StagingTableID' => (isa => 'Str', is => 'rw', required => 1);
has 'postProcessJobs'=> (isa => 'ArrayRef', is => 'rw', required => 0);
sub addPostJob {
my ($self,$postJob) = @_;
push(@{$self->postProcessJobs()},$postJob);
}
sub toString
{
# Print all the values.
my $self = shift;
print "DUMPING JOB OBJECT CONTENTS*****************************\n";
print "Directory is ".$self->DirectoryName."\n";
print "Staging Table is ".$self->StagingTableName."\n";
print "Staging Table ID is ".$self->StagingTableID."\n";
print "DUMPING POST JOB CONTENTS*****************************\n";
foreach my $item (@{$self->postProcessJobs()})
{
$item->toString();
print Dumper($item);
}
print "END DUMPING JOBS*****************************\n";
}
1;