in reply to Invalid SCALAR attribute?

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.