On 10/01/2010 02:06 PM, Gavin Aiken wrote:
[Thu Sep 30 19:57:59 2010] [warn] [client 208.93.49.4] mod_fcgid:
stderr: Odd number of elements in anonymous hash at
/usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/Moose/Object.pm
line 39.
Any ideas what is causing it? I've tried to debug it but haven't
managed to figure it out myself yet. If I roll back to the previous
version of the table classes without the Moose stuff the error goes
away - but I don't want to do that!
I just discovered that if I keep the Moose stuff at the top of the
table classes, but comment out the line:
__PACKAGE__->meta->make_immutable;
at the bottom of all of them, the "Odd number of elements" error stops
happening. I still don't know why, or if this is a BAD THING to do -
if anyone can offer any advice I'd be grateful.
ps I've posted this to the Catalyst list rather than DBIx::Class,
because I can use the Moose-ified schema outside of Catalyst without
getting any errors. I'm not sure if this really is therefore a
Catalyst error, but as that's the only place I see the error it seemed
like the best place to start asking for help.
_______________________________________________
List: [email protected]
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive:
http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/
I know this is a little late, but it may be of some small use:
I notice that the relevant bit of Moose::Object (line 39 from the error
you got) says:
28 sub BUILDARGS {
29 my $class = shift;
30 if ( scalar @_ == 1 ) {
31 unless ( defined $_[0] && ref $_[0] eq 'HASH' ) {
32 Class::MOP::class_of($class)->throw_error(
33 "Single parameters to new() must be a HASH ref",
34 data => $_[0] );
35 }
36 return { %{ $_[0] } };
37 }
38 else {
* 39 return {...@_};*
40 }
41 }
Based on that, it looks like some object is trying to instantiate with
an odd number of args, but not just one arg. Something like
my $obj = My::Awesome::Moose::Class->new(a=>1, b=>2, 'c');
The check in line 30 checks if there was just one arg. Probably, it
should do something more like
--- Object.old.pm 2010-10-13 11:03:48.000000000 -0400
+++ Object.new.pm 2010-10-13 11:07:15.000000000 -0400
@@ -35,9 +35,11 @@
}
return { %{ $_[0] } };
}
- else {
- return {...@_};
+ elsif (scalar @_ % 2) {
+ warn "all args should be paired values (e.g. a=>1), not: @_";
}
+
+ return {...@_};
}
sub BUILDALL {
or maybe croak or something.
-Sir
_______________________________________________
List: [email protected]
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/