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

MooseX-Types warnings

by j1n3l0 (Friar)
on Oct 02, 2010 at 18:13 UTC ( [id://863095]=perlquestion: print w/replies, xml ) Need Help??

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

Hi venerable monks,

I've been experimenting with MooseX::Types and built a library of my types following the example given as closely as possible. Here is my library definition:

package MyTypes; use 5.010; use MooseX::Types -declare => [qw( ExistingFile DataFromFile )]; use MooseX::Types::Moose qw( ArrayRef Str ); use Tie::File; # ABSTRACT: my demo types subtype ExistingFile => as Str => where { -e } => message { "file '$_' does not exist" }; subtype DataFromFile => as ArrayRef => where { ref $_ eq "ARRAY" } => message { "argument is not an ArrayRef" }; coerce DataFromFile => from ExistingFile => via { tie my @array, "Tie::File", $_; return \@array }; 1;
And the example usage:
package Foo; use 5.010; use Moose; use MyDemoTypes "DataFromFile"; # ABSTRACT: test library for my types has names => ( traits => ["Array"], isa => "DataFromFile", # won't compile without the quotes coerce => 1, required => 1, handles => { names => "elements" }, ); 1;
When I try to use it I get the following warnings:
WARNING: String found where Type expected (did you use a => instead of + a , ?) at lib/MyDemoTypes.pm line 14 WARNING: String found where Type expected (did you use a => instead of + a , ?) at lib/MyDemoTypes.pm line 19 WARNING: String found where Type expected (did you use a => instead of + a , ?) at lib/MyDemoTypes.pm line 19 WARNING: String found where Type expected (did you use a => instead of + a , ?) at lib/MyDemoTypes.pm line 23 WARNING: String found where Type expected (did you use a => instead of + a , ?) at lib/MyDemoTypes.pm line 23
When I make the suggested changes it gets much worse:
Can't call method "is_a_type_of" on an undefined value at /Users/io1/p +erl5/perlbrew/perls/p512/lib/site_perl/5.12.0/darwin-thread-multi-2le +vel/Moose/Meta/Attribute/Native/Trait.pm line 62. Compilation failed in require. BEGIN failed--compilation aborted.
What exactly am I doing wrong here? As usual I appreciate any assistance ;)


Smoothie, smoothie, hundre prosent naturlig!

Replies are listed 'Best First'.
Re: MooseX-Types warnings
by Khen1950fx (Canon) on Oct 02, 2010 at 19:44 UTC
    In your library definition, you used the fat comma; however, that stringifies everything on the left. So here you need a good, old-fashioned comma. Also, MooseX::Types doesn't automatically use strict or use warnings. So here's my take on it:
    package MyTypes; use 5.010; use strict; use warnings; use MooseX::Types -declare => [qw( ExistingFile DataFromFile )]; use MooseX::Types::Moose qw( ArrayRef Str ); use Tie::File; subtype ExistingFile, as Str, where { -e }, message { "file '$_' does not exist" }; subtype DataFromFile, as ArrayRef, where { ref $_ eq "ARRAY" }, message { "argument is not an ArrayRef" }; coerce DataFromFile, from ExistingFile, via { tie my @array, "Tie::File", $_; return \@array }; 1;
      Hi,

      Thanks for that but that's the change I make that ends up with the error:

      Can't call method "is_a_type_of" on an undefined value at /Users/io1/p +erl5/perlbrew/perls/p512/l\ ib/site_perl/5.12.0/darwin-thread-multi-2level/Moose/Meta/Attribute/Na +tive/Trait.pm line 62.


      Smoothie, smoothie, hundre prosent naturlig!

        You're using "DataFromFile" as type in your attribute declaration. You should specify it without the quotes, since your type library will export those as symbols.

        You have a comment there saying "won't compile without the quotes," but that should work if you're using commata instead of the arrow.

        Also, you don't need to check that your subclass of ArrayRef is an array reference, the Moose type system will do that.


        Ordinary morality is for ordinary people. -- Aleister Crowley

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (5)
As of 2024-04-24 04:18 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found