Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

Re^2: Moo and Spreadsheet::ParseExcel

by karlgoethebier (Abbot)
on Nov 09, 2012 at 07:59 UTC ( [id://1003079]=note: print w/replies, xml ) Need Help??


in reply to Re: Moo and Spreadsheet::ParseExcel
in thread Moo and Spreadsheet::ParseExcel

Spreadsheet::ParseExcel 0.59 Moo 1.000005 MooX::Types::MooseLike::Base 0.16

All up to date. Re-ordering the use statements brought no success. I've tried this already. I don't have any idea for the moment.

Regards, Karl

«The Crux of the Biscuit is the Apostrophe»

Replies are listed 'Best First'.
Re^3: Moo and Spreadsheet::ParseExcel
by tobyink (Canon) on Nov 09, 2012 at 10:46 UTC

    What's in run.pl??

    perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'

      The whole stuff:

      ETL.pm

      package Karl::ETL; use Moo; use MooX::Types::MooseLike::Base qw( Str ); has user => ( is => 'rw', isa => Str ); has passwd => ( is => 'rw', isa => Str ); has dsn => ( is => 'rw', isa => Str ); with qw( Karl::DBIxODBC Karl::MyParseExcel ); 1;

      DBIxODBC.pm

      package Karl::DBIxODBC; use Moo::Role; use MooX::Types::MooseLike::Base qw(InstanceOf HashRef ArrayRef); use DBIx::Simple; requires qw( user passwd dsn ); has 'loader' => ( is => 'rw', isa => HashRef[ ArrayRef ], trigger => \&_load, ); has '_dbix' => ( is => 'ro', isa => InstanceOf('DBIx::Simple'), handles => [qw( insert )], builder => '_build_dbix', lazy => 1, ); sub _build_dbix() { my $self = shift; my $connect_string; $connect_string = "dbi:ODBC:" . $self->dsn; DBIx::Simple->new( $connect_string, $self->user, $self->passwd ); } sub _load() { my ( $self, $input ) = @_; my $table = ( keys %$input )[0]; foreach my $row ( @{ $input->{$table} } ) { $self->insert( $table, $row ); } } 1;

      MyParseExcel.pm

      package Karl::MyParseExcel; use Moo::Role; use Spreadsheet::ParseExcel; use MooX::Types::MooseLike::Base qw(InstanceOf Str); 1;

      etl.pl (was run.pl)

      #!C:/perl/bin/perl.exe use strict; use warnings; use lib q(C:/local/lib/perl); use Karl::ETL; my $etl = Karl::ETL->new( dsn => 'dsn_name', user => 'name', passwd => 'secret', ); my $data->{test} = [ [qw(foo bar)] ]; $etl->loader($data);
      Regards, Karl
      «The Crux of the Biscuit is the Apostrophe» Karl Goethebier

        Error reproduced! :-)

        Here's a one line patch for Moo::Role that fixes your issue. I'll report it to the Moo bug tracker when I've figured out why this patch makes any difference to anything!

        # Replace this sub... sub apply_roles_to_package { my ($me, $to, @roles) = @_; $me->_inhale_if_moose($_) for @roles; $me->SUPER::apply_roles_to_package($to, @roles); } # With this instead... sub apply_roles_to_package { my ($me, $to, @roles) = @_; for my $r (@roles) { $me->_inhale_if_moose($r) }; $me->SUPER::apply_roles_to_package($to, @roles); }

        Update: OK, it happens because something inadvertently causes the global $_ to become undefined.

        Update 2: Bug report submitted.

        Update 3: patched on git.

        Update 4 (about a week later): Moo 1.000006 released.

        perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1003079]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others surveying the Monastery: (5)
As of 2024-04-23 17:35 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found