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

Monks-

I made the mistake of burying this in my recent What does "my Foo $bar" do? question (thanks all! esp. Joost), so I'm posting it separately.

I tried to run the following example--which is stated to by syntactically correct--from the attributes pod:

package Canine; package Dog; my Canine $spot : Watchful ;

I know it's not going to produce any output, but it actually doesn't compile:

Invalid SCALAR attribute: Watchful at test.pl line 3

What am I missing here?

Cheers,

Brad

Replies are listed 'Best First'.
Re: Invalid SCALAR attribute?
by Joost (Canon) on Aug 09, 2004 at 00:09 UTC
    The attributes documentation is a bit unclear (to me, at least), but as I recall, you need to define custom attributes before you can use them, probably using Attribute::Handlers:

    package Canine; use Attribute::Handlers; sub Watchful : ATTR(SCALAR) { my ($package, $symbol, $referent, $attr, $data) = @_; print "Watchful called with $package, $symbol, $referent, $attr, $ +data\n"; } my Canine $spot : Watchful; __OUTPUT__ Watchful called with Canine, LEXICAL, SCALAR(0x81606a4), Watchful,

    Also note that handler subs on lexicals get called at run-time, even though most other handlers get called at compile time, and all checking appears to be done at compile time too.

    I've never used this construct, though, so I suggest reading the Attribute::Handlers documentation.

    J.

Re: Invalid SCALAR attribute?
by dragonchild (Archbishop) on Aug 08, 2004 at 22:13 UTC
    I've never played with attributes, but take a look at attributes for more info.

    ------
    We are the carpenters and bricklayers of the Information Age.

    Then there are Damian modules.... *sigh* ... that's not about being less-lazy -- that's about being on some really good drugs -- you know, there is no spoon. - flyingmoose

    I shouldn't have to say this, but any code, unless otherwise stated, is untested