http://www.perlmonks.org?node_id=1039117

szabgab has asked for the wisdom of the Perl Monks concerning the following question:

With this module:
package Person; use Moo; has name => (is => 'rw', required => 1); 1;
this script:
use Person; my $anonymous = Person->new;
generates this error:
Missing required arguments: name at (eval 13) line 30.
Is there a way to get better error messages from Moo? Maybe with the correct filename and line number of the caller?

Replies are listed 'Best First'.
Re: Better error messages from Moo?
by poj (Abbot) on Jun 15, 2013 at 13:45 UTC
    Adding use Carp::Always to the script generates error :
    Missing required arguments: name at (eval 13) line 30. Person::new('Person') called at test2.pl line 6
    poj
Re: Better error messages from Moo?
by tobyink (Canon) on Jun 15, 2013 at 15:55 UTC

    File it as a bug report on the Moo RT. It should certainly be feasible; Moo could keep track of the line has occurs on, then use this when evaling the constructor. I've been doing some work on improving Moo exceptions thrown from isa and coerce in the last couple of weeks, so I'd be happy to add required to the list.

    package Cow { use Moo; has name => (is => 'lazy', default => sub { 'Mooington' }) } say Cow->new->name
      Actually I already sent a patch for Moo to MST using Carp::croak() instead of die(), and he already rejected it.

        That's because that wouldn't actually have been an improvement.

        What tobyink is working on will be.

        -- mst