The short story is that a closure (not just an anonymous function) loses its attributes. Demo: #!/usr/bin/perl -l use attributes; sub prat { "[" . join(" : ", attributes::get(shift)) . "]" } my $empty = sub () : locked: method { }; my $full = sub () : locked: method { time() }; my $closed = sub () : locked: method { $empty }; print "empty has attrs: ", prat($empty); print "full has attrs: ", prat($full); print "closed has attrs: ", prat($closed); Output: empty has attrs: [locked : method] full has attrs: [locked : method] closed has attrs: [] --tomThread Next