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/

Reply via email to