in reply to MooseX-Types warnings

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;

Replies are listed 'Best First'.
Re^2: MooseX-Types warnings
by j1n3l0 (Friar) on Oct 02, 2010 at 20:17 UTC
    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
        Thanks for your insight.

        I've discovered the root of my problem was a typo in package Foo:

        package Foo; ... use MyDemoTypes "DataFromFile"; # should be MyTypes "DataFromFile" ...
        All works now (with your suggestions). I knew it would turn out to be something trivial. Thanks again :)


        Smoothie, smoothie, hundre prosent naturlig!