I am trying to construct a moose class that represents a single record retrieved from the db. I'm getting a problem which I'm pretty sure is from the attempt to assign values to a hash "property" of the class. But I could be wrong ;o)
package AXRecord;
# Our libraries
use lib 'C:\Users\Jay\Desktop\SBS DEV\CODE\perl\Utilities';
use AXControl;
use AXSQL;
use Moose;
use DBI;
# Attributes
has 'Name' => (is => 'rw', isa => 'Str', required => 1);
has 'Fields' => (is => 'ro', isa => 'Hash');
has 'FieldCount' => (is => 'ro', isa => 'Num');
has 'Changed' => (is=>'rw', isa => 'Boolean');
has 'Where' => (is => 'rw', isa => 'Str');
has 'ControlObject' => (is => 'rw', isa => 'Object', required => 1);
has 'Keys' => (is => 'rw', isa=>'Array');
# Contains a single record
sub BUILD
# Constructor
{
my $self;
$self = shift;
if (defined $self->Where)
{
$self->Select();
}
}
# Insert the record
sub Insert
{
}
#Delete using the keys in the record
sub Delete
{
}
#Update using the keys and values in the record
sub Update
{
}
#Save the record
sub Save
{
}
sub Select
{
my ($SQLStr, $Cnt, $sql, @Values, $self, $Col, @Flds, $i);
$self = shift;
$SQLStr = "SELECT * FROM " . $self->Name . ' ' . $self->Where;
$sql = AXSQL->new(ControlObject => $self->ControlObject, SQLString
+ => $SQLStr);
#construct a hash using the metadata and the data from the actual
+table
$self->Fields = {};
@Values = $sql->Fetch();
#Get field Names
$sql = AXSQL->new(ControlObject => $self->ControlObject, SQLString
+ => "show fields from '" . $self->Name . "'");
@Flds = $sql->fetch();
# Construct the hash
for ($i..$#Flds)
{
$self->Fields{$Flds[$i]} = $Values[$i];
}
$self->Keys = ();
$sql = AXSQL->new(ControlObject => $self->ControlObject, SQLString
+ => "SELECT column_name FROM information_schema.`key_column_usage` WH
+ERE table_name = '" . $self->name . "' order by ordinal_position");
while (($Col) = $sql.fetch())
{
push $self->Keys, $Col;
}
$Cnt = $self->Fields;
$self->FieldCount = $Cnt;
$self->Changed = -1;
}
The error messages I am getting all seem to be caused by what I'm doing wrong in this statement
$self->Fields{$Flds[$i]} = $Values[$i];
All of the declaration errors are about variables that work fine before that line.
The hash Fields is a property of the class and I'm trying to populate it with fieldname/value pairs
Here are the error messages (moose warnings excluded)
C:\Users\Jay\Desktop\SBS DEV\CODE\perl\Utilities>perl -w AXRecord.pm
push on reference is experimental at AXRecord.pm line 83.
syntax error at AXRecord.pm line 76, near "->Fields{"
Global symbol "$self" requires explicit package name (did you forget t
+o declare
"my $self"?) at AXRecord.pm line 79.
Global symbol "$sql" requires explicit package name (did you forget to
+ declare "
my $sql"?) at AXRecord.pm line 80.
Global symbol "$self" requires explicit package name (did you forget t
+o declare
"my $self"?) at AXRecord.pm line 80.
Global symbol "$self" requires explicit package name (did you forget t
+o declare
"my $self"?) at AXRecord.pm line 80.
Global symbol "$Col" requires explicit package name (did you forget to
+ declare "
my $Col"?) at AXRecord.pm line 81.
Global symbol "$sql" requires explicit package name (did you forget to
+ declare "
my $sql"?) at AXRecord.pm line 81.
Global symbol "$self" requires explicit package name (did you forget t
+o declare
"my $self"?) at AXRecord.pm line 83.
Global symbol "$Col" requires explicit package name (did you forget to
+ declare "
my $Col"?) at AXRecord.pm line 83.
Global symbol "$Cnt" requires explicit package name (did you forget to
+ declare "
my $Cnt"?) at AXRecord.pm line 86.
Global symbol "$self" requires explicit package name (did you forget t
+o declare
"my $self"?) at AXRecord.pm line 86.
Global symbol "$self" requires explicit package name (did you forget t
+o declare
"my $self"?) at AXRecord.pm line 87.
Global symbol "$Cnt" requires explicit package name (did you forget to
+ declare "
my $Cnt"?) at AXRecord.pm line 87.
Global symbol "$self" requires explicit package name (did you forget t
+o declare
"my $self"?) at AXRecord.pm line 88.
syntax error at AXRecord.pm line 90, near "}"
AXRecord.pm has too many errors.
C:\Users\Jay\Desktop\SBS DEV\CODE\perl\Utilities>