[OT] best way to determine existence of a function in a package

Yitzchak Scott-Thoennes sthoenna at efn.org
Wed Nov 21 23:57:40 GMT 2007


On Mon, November 19, 2007 2:53 pm, Dirk Koopman wrote:
> I *would* like to know "defined *Local::bar" always returns true.

Because mentioning any {$,@,%,&,*,iohandle}Local::bar thingy (or defining
a format) causes the glob to be created.

$ perl -le'print 0+defined *Local::bar'
1

Symbolic reference works:

$ perl -wle'print 0+defined *{"Local::bar"}'
0

(in a defined-context, anyway):

$ perl -wle'print !!*{"Local::bar"}, 0+defined *{"Local::bar"}'
11

Note that the non-symbolic reference creates
the glob at compile time, not run time:

$ perl -le'print 0+defined *{"Local::bar"}, 0+defined *Local::bar'
11




More information about the london.pm mailing list