File | /opt/wise/lib/perl5/5.10.0/Exporter.pm | Statements Executed | 3175 | Total Time | 0.0151799999999988 seconds |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine | |
---|---|---|---|---|---|---|
176 | 165 | 65 | 0.02815 | 0.03141 | Exporter:: | import |
42 | 3 | 1 | 0.00323 | 0.00329 | Exporter:: | as_heavy |
35 | 4 | 3 | 0.00029 | 0.00343 | Exporter:: | export |
5 | 5 | 5 | 7.6e-5 | 0.00017 | Exporter:: | export_ok_tags |
2 | 1 | 1 | 1.7e-5 | 6.6e-5 | Exporter:: | export_to_level |
0 | 0 | 0 | 0 | 0 | Exporter:: | __ANON__[:64] |
0 | 0 | 0 | 0 | 0 | Exporter:: | export_fail |
0 | 0 | 0 | 0 | 0 | Exporter:: | export_tags |
0 | 0 | 0 | 0 | 0 | Exporter:: | require_version |
Line | Stmts. | Exclusive Time | Avg. | Code |
---|---|---|---|---|
1 | package Exporter; | |||
2 | ||||
3 | 1 | 2.7e-5 | 2.7e-5 | require 5.006; |
4 | ||||
5 | # Be lean. | |||
6 | #use strict; | |||
7 | #no strict 'refs'; | |||
8 | ||||
9 | 1 | 8.0e-6 | 8.0e-6 | our $Debug = 0; |
10 | 1 | 1.0e-6 | 1.0e-6 | our $ExportLevel = 0; |
11 | 1 | 0 | 0 | our $Verbose ||= 0; |
12 | 1 | 1.0e-6 | 1.0e-6 | our $VERSION = '5.62'; |
13 | 1 | 1.0e-6 | 1.0e-6 | our (%Cache); |
14 | # Carp does this now for us, so we can finally live w/o Carp | |||
15 | #$Carp::Internal{Exporter} = 1; | |||
16 | ||||
17 | # spent 3.29ms (3.23+56µs) within Exporter::as_heavy which was called 42 times, avg 78µs/call:
# 35 times (3.08ms+56µs) by Exporter::export at line 27, avg 90µs/call
# 5 times (98µs+0) by Exporter::export_ok_tags at line 89, avg 20µs/call
# 2 times (49µs+0) by Exporter::export_to_level at line 81, avg 24µs/call | |||
18 | 168 | 0.00145 | 8.6e-6 | require Exporter::Heavy; |
19 | # Unfortunately, this does not work if the caller is aliased as *name = \&foo | |||
20 | # Thus the need to create a lot of identical subroutines | |||
21 | my $c = (caller(1))[3]; | |||
22 | $c =~ s/.*:://; | |||
23 | \&{"Exporter::Heavy::heavy_$c"}; | |||
24 | } | |||
25 | ||||
26 | # spent 3.43ms (287µs+3.14) within Exporter::export which was called 35 times, avg 98µs/call:
# 29 times (237µs+3.05ms) by Exporter::import at line 62, avg 113µs/call
# 2 times (18µs+38µs) by FileHandle::import at line 73 of /opt/wise/lib/perl5/5.10.0/FileHandle.pm, avg 28µs/call
# 2 times (16µs+28µs) by Exporter::Heavy::heavy_export_to_level at line 216 of /opt/wise/lib/perl5/5.10.0/Exporter/Heavy.pm, avg 22µs/call
# 2 times (16µs+27µs) by FileHandle::import at line 81 of /opt/wise/lib/perl5/5.10.0/FileHandle.pm, avg 22µs/call | |||
27 | 35 | 0.00026 | 7.5e-6 | goto &{as_heavy()}; # spent 3.14ms making 35 calls to Exporter::as_heavy, avg 90µs/call |
28 | } | |||
29 | ||||
30 | # spent 31.4ms (28.2+3.26) within Exporter::import which was called 176 times, avg 178µs/call:
# 12 times (2.25ms+48µs) by POSIX::import at line 26 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/POSIX.pm, avg 191µs/call
# once (7.78ms+59µs) at line 46 of /wise/base/deliv/dev/lib/perl/FITSIO.pm
# once (193µs+2.49ms) by WISE::Time::BEGIN at line 21 of /wise/base/deliv/dev/lib/perl/WISE/Time.pm
# once (1.73ms+33µs) at line 14 of /wise/base/deliv/dev/lib/perl/WISE/FITSIO/Utils.pm
# once (797µs+60µs) at line 34 of /wise/base/deliv/dev/lib/perl/WISE/UtilsLight.pm
# once (686µs+32µs) at line 65 of /wise/base/deliv/dev/lib/perl/WISE/Utils.pm
# once (657µs+20µs) at line 7 of /wise/base/static/lib/perl5/site_perl/5.10.0/File/Slurp.pm
# once (407µs+0) at line 12 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/Compress/Zlib.pm
# once (367µs+34µs) at line 35 of /wise/base/deliv/dev/lib/perl/WISE/IOUtils.pm
# once (274µs+21µs) at line 16 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Uncompress/Gunzip.pm
# once (255µs+40µs) at line 19 of /wise/base/deliv/dev/lib/perl/WISE/FITSIO.pm
# once (262µs+27µs) by Compress::Zlib::BEGIN at line 455 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/Compress/Zlib.pm
# once (241µs+34µs) at line 50 of /wise/base/static/lib/perl5/site_perl/5.10.0/Astro/Coord.pm
# once (246µs+25µs) by IO::Compress::Zlib::Extra::BEGIN at line 13 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Compress/Zlib/Extra.pm
# once (243µs+20µs) at line 15 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Compress/Gzip.pm
# once (263µs+0) at line 30 of /wise/base/deliv/dev/lib/perl/FITSIO.pm
# once (219µs+31µs) at line 11 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Compress/RawDeflate.pm
# once (249µs+0) at line 8 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Uncompress/RawInflate.pm
# once (249µs+0) at line 13 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/POSIX.pm
# once (205µs+21µs) at line 14 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Compress/Gzip.pm
# once (220µs+0) at line 13 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Compress/Gzip.pm
# once (220µs+0) by DBIx::Class::Storage::BEGIN at line 10 of /wise/base/static/lib/perl5/site_perl/5.10.0/DBIx/Class/Storage.pm
# once (216µs+0) by DBIx::Class::Storage::Statistics::BEGIN at line 6 of /wise/base/static/lib/perl5/site_perl/5.10.0/DBIx/Class/Storage/Statistics.pm
# once (146µs+52µs) at line 264 of /wise/base/deliv/dev/bin/getfix
# once (191µs+0) at line 148 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/File.pm
# once (169µs+21µs) by IO::Compress::RawDeflate::getZlibParams at line 146 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Compress/RawDeflate.pm
# once (183µs+0) at line 17 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Uncompress/Base.pm
# once (182µs+0) at line 20 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Uncompress/Base.pm
# once (181µs+0) at line 9 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Compress/Base.pm
# once (150µs+27µs) at line 7 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Uncompress/Adapter/Inflate.pm
# once (155µs+18µs) at line 70 of /wise/base/deliv/dev/lib/perl/WISE/Utils.pm
# once (172µs+0) by WISE::CoUtils::posmatch at line 574 of /wise/base/deliv/dev/lib/perl/WISE/CoUtils.pm
# once (171µs+0) at line 11 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/Compress/Zlib.pm
# once (171µs+0) at line 39 of /wise/base/deliv/dev/lib/perl/WISE/IOUtils.pm
# once (150µs+20µs) by IO::Uncompress::Gunzip::BEGIN or IO::Uncompress::Gunzip::getExtraParams at line 50 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Uncompress/Gunzip.pm
# once (166µs+0) at line 11 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Compress/Base.pm
# once (154µs+0) at line 23 of /wise/base/deliv/dev/lib/perl/WISE/CoUtils.pm
# once (134µs+20µs) at line 45 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/Storable.pm
# once (133µs+20µs) at line 9 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Uncompress/RawInflate.pm
# once (121µs+26µs) at line 33 of /wise/base/deliv/dev/lib/perl/WISE/IOUtils.pm
# once (147µs+0) at line 39 of /opt/wise/lib/perl5/5.10.0/FileHandle.pm
# once (144µs+0) by WISE::CoUtils::BEGIN at line 105 of /wise/base/deliv/dev/lib/perl/WISE/CoUtils.pm
# once (122µs+20µs) at line 15 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Uncompress/Gunzip.pm
# once (133µs+0) at line 104 of /wise/base/deliv/dev/lib/perl/WISE/CoUtils.pm
# once (109µs+21µs) at line 7 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Compress/Adapter/Deflate.pm
# once (119µs+0) at line 72 of /wise/base/deliv/dev/lib/perl/WISE/Utils.pm
# once (97µs+20µs) at line 69 of /wise/base/deliv/dev/lib/perl/WISE/Utils.pm
# once (114µs+0) at line 32 of /wise/base/deliv/dev/lib/perl/WISE/UtilsLight.pm
# once (103µs+0) at line 144 of /wise/base/static/lib/perl5/site_perl/5.10.0/SQL/Abstract.pm
# once (96µs+0) at line 6 of (eval 4)[/wise/base/deliv/dev/lib/perl/WISE.pm:11] at line 11 of /wise/base/deliv/dev/lib/perl/WISE.pm
# once (95µs+0) at line 20 of /wise/base/deliv/dev/lib/perl/WISE/Pars.pm
# once (92µs+0) at line 37 of /wise/base/deliv/dev/lib/perl/WISE/IOUtils.pm
# once (91µs+0) at line 6 of /opt/wise/lib/perl5/5.10.0/File/Path.pm
# once (91µs+0) by IO::Compress::Adapter::Deflate::BEGIN at line 9 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Compress/Adapter/Deflate.pm
# once (83µs+0) at line 45 of /wise/base/static/lib/perl5/site_perl/5.10.0/Class/C3/Componentised.pm
# once (82µs+0) at line 23 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Uncompress/Base.pm
# once (80µs+0) at line 8 of /wise/base/static/lib/perl5/site_perl/5.10.0/File/Slurp.pm
# once (80µs+0) at line 260 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Handle.pm
# once (79µs+0) at line 56 of /wise/base/deliv/dev/lib/perl/WISE/Params.pm
# once (76µs+0) at line 2 of /wise/base/static/lib/perl5/site_perl/5.10.0/Data/Page.pm
# once (75µs+0) at line 6 of /wise/base/static/lib/perl5/site_perl/5.10.0/DBIx/Class/Storage/DBI/SQLite.pm
# once (75µs+0) at line 11 of (eval 4)[/wise/base/deliv/dev/lib/perl/WISE.pm:11] at line 11 of /wise/base/deliv/dev/lib/perl/WISE.pm
# once (72µs+0) at line 6 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO.pm
# once (71µs+0) at line 268 of /wise/base/deliv/dev/bin/getfix
# once (69µs+0) at line 29 of /wise/base/deliv/dev/lib/perl/FITSIO.pm
# once (68µs+0) at line 5 of /wise/base/static/lib/perl5/site_perl/5.10.0/DBIx/Class/ResultSourceHandle.pm
# once (68µs+0) at line 11 of /wise/base/static/lib/perl5/site_perl/5.10.0/DBIx/Class/ResultSet.pm
# once (67µs+0) at line 64 of /wise/base/deliv/dev/lib/perl/WISE/Utils.pm
# once (66µs+0) by IO::Compress::RawDeflate::BEGIN at line 179 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Compress/RawDeflate.pm
# once (65µs+0) at line 5 of /wise/base/static/lib/perl5/site_perl/5.10.0/x86_64-linux-thread-multi/Clone.pm
# once (63µs+0) at line 8 of /wise/base/static/lib/perl5/site_perl/5.10.0/DBIx/Class/ResultSourceProxy.pm
# once (62µs+0) at line 57 of /wise/base/deliv/dev/lib/perl/WISE/Params.pm
# once (61µs+0) by WISE::FITSIO::BEGIN at line 24 of /wise/base/deliv/dev/lib/perl/WISE/FITSIO.pm
# once (61µs+0) at line 5 of /wise/base/static/lib/perl5/site_perl/5.10.0/x86_64-linux-thread-multi/Astro/FITS/CFITSIO.pm
# once (61µs+0) at line 21 of /wise/base/deliv/dev/lib/perl/WISE/Spawn.pm
# once (60µs+0) by DBIC::SQL::Abstract::BEGIN or DBIx::Class::Storage::DBI::BEGIN at line 66 of /wise/base/static/lib/perl5/site_perl/5.10.0/DBIx/Class/Storage/DBI.pm
# once (60µs+0) at line 12 of /wise/base/static/lib/perl5/site_perl/5.10.0/DBIx/Class/Storage/DBI.pm
# once (60µs+0) by IO::Compress::RawDeflate::getZlibParams at line 147 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Compress/RawDeflate.pm
# once (59µs+0) at line 10 of /wise/base/deliv/dev/lib/perl/WISE/DB/FrameIndex.pm
# once (59µs+0) at line 11 of /wise/base/static/lib/perl5/site_perl/5.10.0/Time/Timezone.pm
# once (59µs+0) by IO::Uncompress::Adapter::Inflate::BEGIN at line 8 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Uncompress/Adapter/Inflate.pm
# once (58µs+0) at line 19 of /wise/base/deliv/dev/lib/perl/WISE/Time.pm
# once (58µs+0) at line 7 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Compress/Base/Common.pm
# once (58µs+0) at line 5 of /wise/base/static/lib/perl5/site_perl/5.10.0/DBIx/Class/InflateColumn.pm
# once (58µs+0) at line 6 of /wise/base/static/lib/perl5/site_perl/5.10.0/x86_64-linux-thread-multi/Astro/WCS/LibWCS.pm
# once (58µs+0) at line 34 of /wise/base/deliv/dev/lib/perl/WISE/IOUtils.pm
# once (57µs+0) at line 47 of /wise/base/static/lib/perl5/site_perl/5.10.0/Astro/Coord.pm
# once (57µs+0) at line 261 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Handle.pm
# once (56µs+0) by IO::Seekable::BEGIN at line 104 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Seekable.pm
# once (56µs+0) by Module::Find::BEGIN at line 8 of /wise/base/static/lib/perl5/site_perl/5.10.0/Module/Find.pm
# once (56µs+0) at line 38 of /wise/base/deliv/dev/lib/perl/WISE/IOUtils.pm
# once (56µs+0) at line 8 of /wise/base/static/lib/perl5/site_perl/5.10.0/DBIx/Class/Storage.pm
# once (55µs+0) by IO::Compress::Base::seek or IO::Compress::Base::BEGIN at line 843 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Compress/Base.pm
# once (55µs+0) at line 67 of /wise/base/deliv/dev/lib/perl/WISE/Utils.pm
# once (54µs+0) at line 29 of /wise/base/deliv/dev/lib/perl/WISE/IOUtils.pm
# once (54µs+0) at line 14 of /wise/base/deliv/dev/lib/perl/WISE/FITSIO.pm
# once (54µs+0) at line 71 of /wise/base/deliv/dev/lib/perl/WISE/Utils.pm
# once (53µs+0) at line 26 of /wise/base/deliv/dev/lib/perl/FITSIO.pm
# once (53µs+0) at line 188 of /opt/wise/lib/perl5/5.10.0/Tie/Hash.pm
# once (53µs+0) at line 68 of /wise/base/deliv/dev/lib/perl/WISE/Utils.pm
# once (53µs+0) at line 19 of /wise/base/deliv/dev/lib/perl/WISE/Spawn.pm
# once (52µs+0) at line 4 of /opt/wise/lib/perl5/5.10.0/Time/Local.pm
# once (52µs+0) by SelectSaver::BEGIN at line 39 of /opt/wise/lib/perl5/5.10.0/SelectSaver.pm
# once (52µs+0) at line 8 of (eval 4)[/wise/base/deliv/dev/lib/perl/WISE.pm:11] at line 11 of /wise/base/deliv/dev/lib/perl/WISE.pm
# once (51µs+0) at line 32 of /wise/base/deliv/dev/lib/perl/WISE/IOUtils.pm
# once (51µs+0) at line 5 of /wise/base/static/lib/perl5/site_perl/5.10.0/File/Slurp.pm
# once (51µs+0) at line 25 of /wise/base/deliv/dev/lib/perl/FITSIO.pm
# once (51µs+0) at line 21 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Uncompress/Base.pm
# once (51µs+0) at line 53 of /wise/base/static/lib/perl5/site_perl/5.10.0/Astro/Time.pm
# once (51µs+0) at line 6 of /wise/base/deliv/dev/lib/perl/WISE/Dumper.pm
# once (51µs+0) at line 30 of /wise/base/deliv/dev/lib/perl/WISE/IOUtils.pm
# once (51µs+0) at line 9 of (eval 4)[/wise/base/deliv/dev/lib/perl/WISE.pm:11] at line 11 of /wise/base/deliv/dev/lib/perl/WISE.pm
# once (50µs+0) at line 130 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/File.pm
# once (49µs+0) at line 7 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/Compress/Raw/Zlib.pm
# once (49µs+0) at line 22 of /wise/base/deliv/dev/lib/perl/WISE/FITSIO.pm
# once (49µs+0) at line 22 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Uncompress/Base.pm
# once (49µs+0) at line 20 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/Data/Dumper.pm
# once (49µs+0) at line 131 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/File.pm
# once (49µs+0) by IO::Compress::Base::Common::BEGIN at line 499 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Compress/Base/Common.pm
# once (47µs+0) at line 98 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Seekable.pm
# once (47µs+0) at line 35 of /wise/base/deliv/dev/lib/perl/WISE/UtilsLight.pm
# once (46µs+0) at line 40 of /wise/base/deliv/dev/lib/perl/WISE/IOUtils.pm
# once (46µs+0) at line 7 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/Compress/Zlib.pm
# once (46µs+0) at line 13 of (eval 4)[/wise/base/deliv/dev/lib/perl/WISE.pm:11] at line 11 of /wise/base/deliv/dev/lib/perl/WISE.pm
# once (46µs+0) at line 8 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Compress/Base/Common.pm
# once (46µs+0) at line 16 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Compress/Base.pm
# once (45µs+0) at line 18 of /wise/base/deliv/dev/lib/perl/WISE/Time.pm
# once (45µs+0) at line 5 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/File/GlobMapper.pm
# once (45µs+0) at line 8 of /wise/base/static/lib/perl5/site_perl/5.10.0/DBIx/Class/Storage/DBI.pm
# once (45µs+0) at line 17 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Compress/Base.pm
# once (44µs+0) at line 38 of /opt/wise/lib/perl5/5.10.0/SelectSaver.pm
# once (44µs+0) at line 9 of /wise/base/static/lib/perl5/site_perl/5.10.0/DBIx/Class/ResultSource.pm
# once (44µs+0) at line 133 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/File.pm
# once (44µs+0) at line 11 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Uncompress/RawInflate.pm
# once (44µs+0) at line 24 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Uncompress/Base.pm
# once (43µs+0) at line 12 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Compress/Base.pm
# once (43µs+0) at line 41 of /wise/base/deliv/dev/lib/perl/WISE/IOUtils.pm
# once (43µs+0) at line 7 of /wise/base/static/lib/perl5/site_perl/5.10.0/DBIx/Class/Exception.pm
# once (41µs+0) at line 10 of /wise/base/deliv/dev/lib/perl/WISE/Time.pm
# once (41µs+0) at line 15 of /wise/base/deliv/dev/lib/perl/WISE/FITSIO/Utils.pm
# once (41µs+0) at line 14 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Uncompress/Gunzip.pm
# once (40µs+0) at line 38 of /wise/base/deliv/dev/lib/perl/WISE/DB/FrameIndex.pm
# once (40µs+0) at line 9 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/Compress/Zlib.pm
# once (40µs+0) at line 14 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/Compress/Zlib.pm
# once (39µs+0) at line 270 of /wise/base/deliv/dev/bin/getfix
# once (39µs+0) at line 13 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/Compress/Zlib.pm
# once (37µs+0) at line 8 of /wise/base/static/lib/perl5/site_perl/5.10.0/DBIx/Class/Schema.pm
# once (37µs+0) at line 27 of /wise/base/deliv/dev/lib/perl/FITSIO.pm
# once (37µs+0) by WISE::Dumper::BEGIN at line 8 of /wise/base/deliv/dev/lib/perl/WISE/Dumper.pm
# once (35µs+0) at line 11 of /wise/base/deliv/dev/lib/perl/WISE/IPACTbl.pm
# once (35µs+0) at line 10 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Compress/RawDeflate.pm
# once (34µs+0) at line 13 of /wise/base/deliv/dev/lib/perl/FITSIO.pm
# once (34µs+0) at line 14 of (eval 4)[/wise/base/deliv/dev/lib/perl/WISE.pm:11] at line 11 of /wise/base/deliv/dev/lib/perl/WISE.pm
# once (34µs+0) at line 171 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/Cwd.pm
# once (34µs+0) at line 5 of /wise/base/deliv/dev/lib/perl/WISE/Dumper.pm
# once (32µs+0) by WISE::Pars::BEGIN at line 21 of /wise/base/deliv/dev/lib/perl/WISE/Pars.pm
# once (31µs+0) at line 11 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Compress/Gzip.pm
# once (31µs+0) at line 12 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Uncompress/Gunzip.pm
# once (31µs+0) at line 16 of /wise/base/deliv/dev/lib/perl/WISE/Utils.pm
# once (30µs+0) at line 12 of /wise/base/deliv/dev/lib/perl/WISE/IOUtils.pm
# once (30µs+0) at line 18 of /wise/base/deliv/dev/lib/perl/WISE/FITSIO.pm
# once (29µs+0) at line 8 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/Compress/Zlib.pm
# once (28µs+0) at line 8 of /opt/wise/lib/perl5/5.10.0/Text/ParseWords.pm
# once (28µs+0) at line 11 of /wise/base/deliv/dev/lib/perl/WISE/CoUtils.pm
# once (26µs+0) at line 31 of /wise/base/deliv/dev/lib/perl/WISE/IOUtils.pm | |||
31 | 2958 | 0.01336 | 4.5e-6 | my $pkg = shift; |
32 | my $callpkg = caller($ExportLevel); | |||
33 | ||||
34 | if ($pkg eq "Exporter" and @_ and $_[0] eq "import") { | |||
35 | *{$callpkg."::import"} = \&import; | |||
36 | return; | |||
37 | } | |||
38 | ||||
39 | # We *need* to treat @{"$pkg\::EXPORT_FAIL"} since Carp uses it :-( | |||
40 | my($exports, $fail) = (\@{"$pkg\::EXPORT"}, \@{"$pkg\::EXPORT_FAIL"}); | |||
41 | return export $pkg, $callpkg, @_ | |||
42 | if $Verbose or $Debug or @$fail > 1; | |||
43 | my $export_cache = ($Cache{$pkg} ||= {}); | |||
44 | my $args = @_ or @_ = @$exports; | |||
45 | ||||
46 | local $_; | |||
47 | if ($args and not %$export_cache) { | |||
48 | s/^&//, $export_cache->{$_} = 1 | |||
49 | foreach (@$exports, @{"$pkg\::EXPORT_OK"}); | |||
50 | } | |||
51 | my $heavy; | |||
52 | # Try very hard not to use {} and hence have to enter scope on the foreach | |||
53 | # We bomb out of the loop with last as soon as heavy is set. | |||
54 | if ($args or $fail) { | |||
55 | ($heavy = (/\W/ or $args and not exists $export_cache->{$_} | |||
56 | or @$fail and $_ eq $fail->[0])) and last | |||
57 | foreach (@_); | |||
58 | } else { | |||
59 | ($heavy = /\W/) and last | |||
60 | foreach (@_); | |||
61 | } | |||
62 | return export $pkg, $callpkg, ($args ? @_ : ()) if $heavy; # spent 3.29ms making 29 calls to Exporter::export, avg 113µs/call | |||
63 | local $SIG{__WARN__} = | |||
64 | sub {require Carp; &Carp::carp}; | |||
65 | # shortcut for the common case of no type character | |||
66 | *{"$callpkg\::$_"} = \&{"$pkg\::$_"} foreach @_; | |||
67 | } | |||
68 | ||||
69 | # Default methods | |||
70 | ||||
71 | sub export_fail { | |||
72 | my $self = shift; | |||
73 | @_; | |||
74 | } | |||
75 | ||||
76 | # Unfortunately, caller(1)[3] "does not work" if the caller is aliased as | |||
77 | # *name = \&foo. Thus the need to create a lot of identical subroutines | |||
78 | # Otherwise we could have aliased them to export(). | |||
79 | ||||
80 | # spent 66µs (17+49) within Exporter::export_to_level which was called 2 times, avg 33µs/call:
# 2 times (17µs+49µs) by Time::HiRes::import at line 62 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/Time/HiRes.pm, avg 33µs/call | |||
81 | 2 | 2.0e-5 | 1.0e-5 | goto &{as_heavy()}; # spent 49µs making 2 calls to Exporter::as_heavy, avg 24µs/call |
82 | } | |||
83 | ||||
84 | sub export_tags { | |||
85 | goto &{as_heavy()}; | |||
86 | } | |||
87 | ||||
88 | # spent 174µs (76+98) within Exporter::export_ok_tags which was called 5 times, avg 35µs/call:
# once (24µs+25µs) at line 37 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Compress/Gzip.pm
# once (20µs+18µs) at line 65 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Compress/RawDeflate.pm
# once (11µs+22µs) at line 261 of /wise/base/static/lib/perl5/site_perl/5.10.0/x86_64-linux-thread-multi/DBI.pm
# once (10µs+17µs) at line 28 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Uncompress/RawInflate.pm
# once (11µs+16µs) at line 27 of /opt/wise/lib/perl5/5.10.0/x86_64-linux-thread-multi/IO/Uncompress/Gunzip.pm | |||
89 | 5 | 3.6e-5 | 7.2e-6 | goto &{as_heavy()}; # spent 98µs making 5 calls to Exporter::as_heavy, avg 20µs/call |
90 | } | |||
91 | ||||
92 | sub require_version { | |||
93 | goto &{as_heavy()}; | |||
94 | } | |||
95 | ||||
96 | 1 | 7.0e-6 | 7.0e-6 | 1; |
97 | __END__ | |||
98 | ||||
99 | =head1 NAME | |||
100 | ||||
101 | Exporter - Implements default import method for modules | |||
102 | ||||
103 | =head1 SYNOPSIS | |||
104 | ||||
105 | In module YourModule.pm: | |||
106 | ||||
107 | package YourModule; | |||
108 | require Exporter; | |||
109 | @ISA = qw(Exporter); | |||
110 | @EXPORT_OK = qw(munge frobnicate); # symbols to export on request | |||
111 | ||||
112 | or | |||
113 | ||||
114 | package YourModule; | |||
115 | use Exporter 'import'; # gives you Exporter's import() method directly | |||
116 | @EXPORT_OK = qw(munge frobnicate); # symbols to export on request | |||
117 | ||||
118 | In other files which wish to use YourModule: | |||
119 | ||||
120 | use ModuleName qw(frobnicate); # import listed symbols | |||
121 | frobnicate ($left, $right) # calls YourModule::frobnicate | |||
122 | ||||
123 | Take a look at L</Good Practices> for some variants | |||
124 | you will like to use in modern Perl code. | |||
125 | ||||
126 | =head1 DESCRIPTION | |||
127 | ||||
128 | The Exporter module implements an C<import> method which allows a module | |||
129 | to export functions and variables to its users' namespaces. Many modules | |||
130 | use Exporter rather than implementing their own C<import> method because | |||
131 | Exporter provides a highly flexible interface, with an implementation optimised | |||
132 | for the common case. | |||
133 | ||||
134 | Perl automatically calls the C<import> method when processing a | |||
135 | C<use> statement for a module. Modules and C<use> are documented | |||
136 | in L<perlfunc> and L<perlmod>. Understanding the concept of | |||
137 | modules and how the C<use> statement operates is important to | |||
138 | understanding the Exporter. | |||
139 | ||||
140 | =head2 How to Export | |||
141 | ||||
142 | The arrays C<@EXPORT> and C<@EXPORT_OK> in a module hold lists of | |||
143 | symbols that are going to be exported into the users name space by | |||
144 | default, or which they can request to be exported, respectively. The | |||
145 | symbols can represent functions, scalars, arrays, hashes, or typeglobs. | |||
146 | The symbols must be given by full name with the exception that the | |||
147 | ampersand in front of a function is optional, e.g. | |||
148 | ||||
149 | @EXPORT = qw(afunc $scalar @array); # afunc is a function | |||
150 | @EXPORT_OK = qw(&bfunc %hash *typeglob); # explicit prefix on &bfunc | |||
151 | ||||
152 | If you are only exporting function names it is recommended to omit the | |||
153 | ampersand, as the implementation is faster this way. | |||
154 | ||||
155 | =head2 Selecting What To Export | |||
156 | ||||
157 | Do B<not> export method names! | |||
158 | ||||
159 | Do B<not> export anything else by default without a good reason! | |||
160 | ||||
161 | Exports pollute the namespace of the module user. If you must export | |||
162 | try to use @EXPORT_OK in preference to @EXPORT and avoid short or | |||
163 | common symbol names to reduce the risk of name clashes. | |||
164 | ||||
165 | Generally anything not exported is still accessible from outside the | |||
166 | module using the ModuleName::item_name (or $blessed_ref-E<gt>method) | |||
167 | syntax. By convention you can use a leading underscore on names to | |||
168 | informally indicate that they are 'internal' and not for public use. | |||
169 | ||||
170 | (It is actually possible to get private functions by saying: | |||
171 | ||||
172 | my $subref = sub { ... }; | |||
173 | $subref->(@args); # Call it as a function | |||
174 | $obj->$subref(@args); # Use it as a method | |||
175 | ||||
176 | However if you use them for methods it is up to you to figure out | |||
177 | how to make inheritance work.) | |||
178 | ||||
179 | As a general rule, if the module is trying to be object oriented | |||
180 | then export nothing. If it's just a collection of functions then | |||
181 | @EXPORT_OK anything but use @EXPORT with caution. For function and | |||
182 | method names use barewords in preference to names prefixed with | |||
183 | ampersands for the export lists. | |||
184 | ||||
185 | Other module design guidelines can be found in L<perlmod>. | |||
186 | ||||
187 | =head2 How to Import | |||
188 | ||||
189 | In other files which wish to use your module there are three basic ways for | |||
190 | them to load your module and import its symbols: | |||
191 | ||||
192 | =over 4 | |||
193 | ||||
194 | =item C<use ModuleName;> | |||
195 | ||||
196 | This imports all the symbols from ModuleName's @EXPORT into the namespace | |||
197 | of the C<use> statement. | |||
198 | ||||
199 | =item C<use ModuleName ();> | |||
200 | ||||
201 | This causes perl to load your module but does not import any symbols. | |||
202 | ||||
203 | =item C<use ModuleName qw(...);> | |||
204 | ||||
205 | This imports only the symbols listed by the caller into their namespace. | |||
206 | All listed symbols must be in your @EXPORT or @EXPORT_OK, else an error | |||
207 | occurs. The advanced export features of Exporter are accessed like this, | |||
208 | but with list entries that are syntactically distinct from symbol names. | |||
209 | ||||
210 | =back | |||
211 | ||||
212 | Unless you want to use its advanced features, this is probably all you | |||
213 | need to know to use Exporter. | |||
214 | ||||
215 | =head1 Advanced features | |||
216 | ||||
217 | =head2 Specialised Import Lists | |||
218 | ||||
219 | If any of the entries in an import list begins with !, : or / then | |||
220 | the list is treated as a series of specifications which either add to | |||
221 | or delete from the list of names to import. They are processed left to | |||
222 | right. Specifications are in the form: | |||
223 | ||||
224 | [!]name This name only | |||
225 | [!]:DEFAULT All names in @EXPORT | |||
226 | [!]:tag All names in $EXPORT_TAGS{tag} anonymous list | |||
227 | [!]/pattern/ All names in @EXPORT and @EXPORT_OK which match | |||
228 | ||||
229 | A leading ! indicates that matching names should be deleted from the | |||
230 | list of names to import. If the first specification is a deletion it | |||
231 | is treated as though preceded by :DEFAULT. If you just want to import | |||
232 | extra names in addition to the default set you will still need to | |||
233 | include :DEFAULT explicitly. | |||
234 | ||||
235 | e.g., Module.pm defines: | |||
236 | ||||
237 | @EXPORT = qw(A1 A2 A3 A4 A5); | |||
238 | @EXPORT_OK = qw(B1 B2 B3 B4 B5); | |||
239 | %EXPORT_TAGS = (T1 => [qw(A1 A2 B1 B2)], T2 => [qw(A1 A2 B3 B4)]); | |||
240 | ||||
241 | Note that you cannot use tags in @EXPORT or @EXPORT_OK. | |||
242 | Names in EXPORT_TAGS must also appear in @EXPORT or @EXPORT_OK. | |||
243 | ||||
244 | An application using Module can say something like: | |||
245 | ||||
246 | use Module qw(:DEFAULT :T2 !B3 A3); | |||
247 | ||||
248 | Other examples include: | |||
249 | ||||
250 | use Socket qw(!/^[AP]F_/ !SOMAXCONN !SOL_SOCKET); | |||
251 | use POSIX qw(:errno_h :termios_h !TCSADRAIN !/^EXIT/); | |||
252 | ||||
253 | Remember that most patterns (using //) will need to be anchored | |||
254 | with a leading ^, e.g., C</^EXIT/> rather than C</EXIT/>. | |||
255 | ||||
256 | You can say C<BEGIN { $Exporter::Verbose=1 }> to see how the | |||
257 | specifications are being processed and what is actually being imported | |||
258 | into modules. | |||
259 | ||||
260 | =head2 Exporting without using Exporter's import method | |||
261 | ||||
262 | Exporter has a special method, 'export_to_level' which is used in situations | |||
263 | where you can't directly call Exporter's import method. The export_to_level | |||
264 | method looks like: | |||
265 | ||||
266 | MyPackage->export_to_level($where_to_export, $package, @what_to_export); | |||
267 | ||||
268 | where $where_to_export is an integer telling how far up the calling stack | |||
269 | to export your symbols, and @what_to_export is an array telling what | |||
270 | symbols *to* export (usually this is @_). The $package argument is | |||
271 | currently unused. | |||
272 | ||||
273 | For example, suppose that you have a module, A, which already has an | |||
274 | import function: | |||
275 | ||||
276 | package A; | |||
277 | ||||
278 | @ISA = qw(Exporter); | |||
279 | @EXPORT_OK = qw ($b); | |||
280 | ||||
281 | sub import | |||
282 | { | |||
283 | $A::b = 1; # not a very useful import method | |||
284 | } | |||
285 | ||||
286 | and you want to Export symbol $A::b back to the module that called | |||
287 | package A. Since Exporter relies on the import method to work, via | |||
288 | inheritance, as it stands Exporter::import() will never get called. | |||
289 | Instead, say the following: | |||
290 | ||||
291 | package A; | |||
292 | @ISA = qw(Exporter); | |||
293 | @EXPORT_OK = qw ($b); | |||
294 | ||||
295 | sub import | |||
296 | { | |||
297 | $A::b = 1; | |||
298 | A->export_to_level(1, @_); | |||
299 | } | |||
300 | ||||
301 | This will export the symbols one level 'above' the current package - ie: to | |||
302 | the program or module that used package A. | |||
303 | ||||
304 | Note: Be careful not to modify C<@_> at all before you call export_to_level | |||
305 | - or people using your package will get very unexplained results! | |||
306 | ||||
307 | =head2 Exporting without inheriting from Exporter | |||
308 | ||||
309 | By including Exporter in your @ISA you inherit an Exporter's import() method | |||
310 | but you also inherit several other helper methods which you probably don't | |||
311 | want. To avoid this you can do | |||
312 | ||||
313 | package YourModule; | |||
314 | use Exporter qw( import ); | |||
315 | ||||
316 | which will export Exporter's own import() method into YourModule. | |||
317 | Everything will work as before but you won't need to include Exporter in | |||
318 | @YourModule::ISA. | |||
319 | ||||
320 | Note: This feature was introduced in version 5.57 | |||
321 | of Exporter, released with perl 5.8.3. | |||
322 | ||||
323 | =head2 Module Version Checking | |||
324 | ||||
325 | The Exporter module will convert an attempt to import a number from a | |||
326 | module into a call to $module_name-E<gt>require_version($value). This can | |||
327 | be used to validate that the version of the module being used is | |||
328 | greater than or equal to the required version. | |||
329 | ||||
330 | The Exporter module supplies a default require_version method which | |||
331 | checks the value of $VERSION in the exporting module. | |||
332 | ||||
333 | Since the default require_version method treats the $VERSION number as | |||
334 | a simple numeric value it will regard version 1.10 as lower than | |||
335 | 1.9. For this reason it is strongly recommended that you use numbers | |||
336 | with at least two decimal places, e.g., 1.09. | |||
337 | ||||
338 | =head2 Managing Unknown Symbols | |||
339 | ||||
340 | In some situations you may want to prevent certain symbols from being | |||
341 | exported. Typically this applies to extensions which have functions | |||
342 | or constants that may not exist on some systems. | |||
343 | ||||
344 | The names of any symbols that cannot be exported should be listed | |||
345 | in the C<@EXPORT_FAIL> array. | |||
346 | ||||
347 | If a module attempts to import any of these symbols the Exporter | |||
348 | will give the module an opportunity to handle the situation before | |||
349 | generating an error. The Exporter will call an export_fail method | |||
350 | with a list of the failed symbols: | |||
351 | ||||
352 | @failed_symbols = $module_name->export_fail(@failed_symbols); | |||
353 | ||||
354 | If the export_fail method returns an empty list then no error is | |||
355 | recorded and all the requested symbols are exported. If the returned | |||
356 | list is not empty then an error is generated for each symbol and the | |||
357 | export fails. The Exporter provides a default export_fail method which | |||
358 | simply returns the list unchanged. | |||
359 | ||||
360 | Uses for the export_fail method include giving better error messages | |||
361 | for some symbols and performing lazy architectural checks (put more | |||
362 | symbols into @EXPORT_FAIL by default and then take them out if someone | |||
363 | actually tries to use them and an expensive check shows that they are | |||
364 | usable on that platform). | |||
365 | ||||
366 | =head2 Tag Handling Utility Functions | |||
367 | ||||
368 | Since the symbols listed within %EXPORT_TAGS must also appear in either | |||
369 | @EXPORT or @EXPORT_OK, two utility functions are provided which allow | |||
370 | you to easily add tagged sets of symbols to @EXPORT or @EXPORT_OK: | |||
371 | ||||
372 | %EXPORT_TAGS = (foo => [qw(aa bb cc)], bar => [qw(aa cc dd)]); | |||
373 | ||||
374 | Exporter::export_tags('foo'); # add aa, bb and cc to @EXPORT | |||
375 | Exporter::export_ok_tags('bar'); # add aa, cc and dd to @EXPORT_OK | |||
376 | ||||
377 | Any names which are not tags are added to @EXPORT or @EXPORT_OK | |||
378 | unchanged but will trigger a warning (with C<-w>) to avoid misspelt tags | |||
379 | names being silently added to @EXPORT or @EXPORT_OK. Future versions | |||
380 | may make this a fatal error. | |||
381 | ||||
382 | =head2 Generating combined tags | |||
383 | ||||
384 | If several symbol categories exist in %EXPORT_TAGS, it's usually | |||
385 | useful to create the utility ":all" to simplify "use" statements. | |||
386 | ||||
387 | The simplest way to do this is: | |||
388 | ||||
389 | %EXPORT_TAGS = (foo => [qw(aa bb cc)], bar => [qw(aa cc dd)]); | |||
390 | ||||
391 | # add all the other ":class" tags to the ":all" class, | |||
392 | # deleting duplicates | |||
393 | { | |||
394 | my %seen; | |||
395 | ||||
396 | push @{$EXPORT_TAGS{all}}, | |||
397 | grep {!$seen{$_}++} @{$EXPORT_TAGS{$_}} foreach keys %EXPORT_TAGS; | |||
398 | } | |||
399 | ||||
400 | CGI.pm creates an ":all" tag which contains some (but not really | |||
401 | all) of its categories. That could be done with one small | |||
402 | change: | |||
403 | ||||
404 | # add some of the other ":class" tags to the ":all" class, | |||
405 | # deleting duplicates | |||
406 | { | |||
407 | my %seen; | |||
408 | ||||
409 | push @{$EXPORT_TAGS{all}}, | |||
410 | grep {!$seen{$_}++} @{$EXPORT_TAGS{$_}} | |||
411 | foreach qw/html2 html3 netscape form cgi internal/; | |||
412 | } | |||
413 | ||||
414 | Note that the tag names in %EXPORT_TAGS don't have the leading ':'. | |||
415 | ||||
416 | =head2 C<AUTOLOAD>ed Constants | |||
417 | ||||
418 | Many modules make use of C<AUTOLOAD>ing for constant subroutines to | |||
419 | avoid having to compile and waste memory on rarely used values (see | |||
420 | L<perlsub> for details on constant subroutines). Calls to such | |||
421 | constant subroutines are not optimized away at compile time because | |||
422 | they can't be checked at compile time for constancy. | |||
423 | ||||
424 | Even if a prototype is available at compile time, the body of the | |||
425 | subroutine is not (it hasn't been C<AUTOLOAD>ed yet). perl needs to | |||
426 | examine both the C<()> prototype and the body of a subroutine at | |||
427 | compile time to detect that it can safely replace calls to that | |||
428 | subroutine with the constant value. | |||
429 | ||||
430 | A workaround for this is to call the constants once in a C<BEGIN> block: | |||
431 | ||||
432 | package My ; | |||
433 | ||||
434 | use Socket ; | |||
435 | ||||
436 | foo( SO_LINGER ); ## SO_LINGER NOT optimized away; called at runtime | |||
437 | BEGIN { SO_LINGER } | |||
438 | foo( SO_LINGER ); ## SO_LINGER optimized away at compile time. | |||
439 | ||||
440 | This forces the C<AUTOLOAD> for C<SO_LINGER> to take place before | |||
441 | SO_LINGER is encountered later in C<My> package. | |||
442 | ||||
443 | If you are writing a package that C<AUTOLOAD>s, consider forcing | |||
444 | an C<AUTOLOAD> for any constants explicitly imported by other packages | |||
445 | or which are usually used when your package is C<use>d. | |||
446 | ||||
447 | =head1 Good Practices | |||
448 | ||||
449 | =head2 Declaring C<@EXPORT_OK> and Friends | |||
450 | ||||
451 | When using C<Exporter> with the standard C<strict> and C<warnings> | |||
452 | pragmas, the C<our> keyword is needed to declare the package | |||
453 | variables C<@EXPORT_OK>, C<@EXPORT>, C<@ISA>, etc. | |||
454 | ||||
455 | our @ISA = qw(Exporter); | |||
456 | our @EXPORT_OK = qw(munge frobnicate); | |||
457 | ||||
458 | If backward compatibility for Perls under 5.6 is important, | |||
459 | one must write instead a C<use vars> statement. | |||
460 | ||||
461 | use vars qw(@ISA @EXPORT_OK); | |||
462 | @ISA = qw(Exporter); | |||
463 | @EXPORT_OK = qw(munge frobnicate); | |||
464 | ||||
465 | =head2 Playing Safe | |||
466 | ||||
467 | There are some caveats with the use of runtime statements | |||
468 | like C<require Exporter> and the assignment to package | |||
469 | variables, which can very subtle for the unaware programmer. | |||
470 | This may happen for instance with mutually recursive | |||
471 | modules, which are affected by the time the relevant | |||
472 | constructions are executed. | |||
473 | ||||
474 | The ideal (but a bit ugly) way to never have to think | |||
475 | about that is to use C<BEGIN> blocks. So the first part | |||
476 | of the L</SYNOPSIS> code could be rewritten as: | |||
477 | ||||
478 | package YourModule; | |||
479 | ||||
480 | use strict; | |||
481 | use warnings; | |||
482 | ||||
483 | our (@ISA, @EXPORT_OK); | |||
484 | BEGIN { | |||
485 | require Exporter; | |||
486 | @ISA = qw(Exporter); | |||
487 | @EXPORT_OK = qw(munge frobnicate); # symbols to export on request | |||
488 | } | |||
489 | ||||
490 | The C<BEGIN> will assure that the loading of F<Exporter.pm> | |||
491 | and the assignments to C<@ISA> and C<@EXPORT_OK> happen | |||
492 | immediately, leaving no room for something to get awry | |||
493 | or just plain wrong. | |||
494 | ||||
495 | With respect to loading C<Exporter> and inheriting, there | |||
496 | are alternatives with the use of modules like C<base> and C<parent>. | |||
497 | ||||
498 | use base qw( Exporter ); | |||
499 | # or | |||
500 | use parent qw( Exporter ); | |||
501 | ||||
502 | Any of these statements are nice replacements for | |||
503 | C<BEGIN { require Exporter; @ISA = qw(Exporter); }> | |||
504 | with the same compile-time effect. The basic difference | |||
505 | is that C<base> code interacts with declared C<fields> | |||
506 | while C<parent> is a streamlined version of the older | |||
507 | C<base> code to just establish the IS-A relationship. | |||
508 | ||||
509 | For more details, see the documentation and code of | |||
510 | L<base> and L<parent>. | |||
511 | ||||
512 | Another thorough remedy to that runtime vs. | |||
513 | compile-time trap is to use L<Exporter::Easy>, | |||
514 | which is a wrapper of Exporter that allows all | |||
515 | boilerplate code at a single gulp in the | |||
516 | use statement. | |||
517 | ||||
518 | use Exporter::Easy ( | |||
519 | OK => [ qw(munge frobnicate) ], | |||
520 | ); | |||
521 | # @ISA setup is automatic | |||
522 | # all assignments happen at compile time | |||
523 | ||||
524 | =head2 What not to Export | |||
525 | ||||
526 | You have been warned already in L</Selecting What To Export> | |||
527 | to not export: | |||
528 | ||||
529 | =over 4 | |||
530 | ||||
531 | =item * | |||
532 | ||||
533 | method names (because you don't need to | |||
534 | and that's likely to not do what you want), | |||
535 | ||||
536 | =item * | |||
537 | ||||
538 | anything by default (because you don't want to surprise your users... | |||
539 | badly) | |||
540 | ||||
541 | =item * | |||
542 | ||||
543 | anything you don't need to (because less is more) | |||
544 | ||||
545 | =back | |||
546 | ||||
547 | There's one more item to add to this list. Do B<not> | |||
548 | export variable names. Just because C<Exporter> lets you | |||
549 | do that, it does not mean you should. | |||
550 | ||||
551 | @EXPORT_OK = qw( $svar @avar %hvar ); # DON'T! | |||
552 | ||||
553 | Exporting variables is not a good idea. They can | |||
554 | change under the hood, provoking horrible | |||
555 | effects at-a-distance, that are too hard to track | |||
556 | and to fix. Trust me: they are not worth it. | |||
557 | ||||
558 | To provide the capability to set/get class-wide | |||
559 | settings, it is best instead to provide accessors | |||
560 | as subroutines or class methods instead. | |||
561 | ||||
562 | =head1 SEE ALSO | |||
563 | ||||
564 | C<Exporter> is definitely not the only module with | |||
565 | symbol exporter capabilities. At CPAN, you may find | |||
566 | a bunch of them. Some are lighter. Some | |||
567 | provide improved APIs and features. Peek the one | |||
568 | that fits your needs. The following is | |||
569 | a sample list of such modules. | |||
570 | ||||
571 | Exporter::Easy | |||
572 | Exporter::Lite | |||
573 | Exporter::Renaming | |||
574 | Exporter::Tidy | |||
575 | Sub::Exporter / Sub::Installer | |||
576 | Perl6::Export / Perl6::Export::Attrs | |||
577 | ||||
578 | =head1 LICENSE | |||
579 | ||||
580 | This library is free software. You can redistribute it | |||
581 | and/or modify it under the same terms as Perl itself. | |||
582 | ||||
583 | =cut |