← Index
Performance Profile   « block view • line view • sub view »
For /wise/base/deliv/dev/bin/getfix
  Run on Thu May 20 15:30:03 2010
Reported on Thu May 20 16:25:35 2010

File/opt/wise/lib/perl5/5.10.0/Exporter.pm
Statements Executed3177
Total Time0.01518 seconds

Subroutines — ordered by exclusive time
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
176165650.028150.03141Exporter::import
42310.003230.00329Exporter::as_heavy
35430.000290.00343Exporter::export
5557.6e-50.00017Exporter::export_ok_tags
2111.7e-56.6e-5Exporter::export_to_level
00000Exporter::__ANON__[:64]
00000Exporter::export_fail
00000Exporter::export_tags
00000Exporter::require_version

LineStmts.Exclusive
Time
Avg.Code
1package Exporter;
2
312.7e-52.7e-5require 5.006;
4
5# Be lean.
6#use strict;
7#no strict 'refs';
8
918.0e-68.0e-6our $Debug = 0;
1011.0e-61.0e-6our $ExportLevel = 0;
11100our $Verbose ||= 0;
1211.0e-61.0e-6our $VERSION = '5.62';
1311.0e-61.0e-6our (%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
sub as_heavy {
181680.001458.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
sub export {
27350.000267.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
sub import {
3125680.009023.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 $_;
47360.000205.5e-6 if ($args and not %$export_cache) {
48 s/^&//, $export_cache->{$_} = 1
49 foreach (@$exports, @{"$pkg\::EXPORT_OK"});
50 }
5110.002630.00263 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.
543540.000712.0e-6 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 }
6210.000820.00082 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
71sub 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
sub export_to_level {
8122.0e-51.0e-5 goto &{as_heavy()};
# spent 49µs making 2 calls to Exporter::as_heavy, avg 24µs/call
82}
83
84sub export_tags {
85 goto &{as_heavy()};
86}
87
88sub export_ok_tags {
8953.6e-57.2e-6 goto &{as_heavy()};
# spent 98µs making 5 calls to Exporter::as_heavy, avg 20µs/call
90}
91
92sub require_version {
93 goto &{as_heavy()};
94}
95
9617.0e-67.0e-61;
97__END__
98
99=head1 NAME
100
101Exporter - Implements default import method for modules
102
103=head1 SYNOPSIS
104
105In 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
112or
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
118In other files which wish to use YourModule:
119
120 use ModuleName qw(frobnicate); # import listed symbols
121 frobnicate ($left, $right) # calls YourModule::frobnicate
122
123Take a look at L</Good Practices> for some variants
124you will like to use in modern Perl code.
125
126=head1 DESCRIPTION
127
128The Exporter module implements an C<import> method which allows a module
129to export functions and variables to its users' namespaces. Many modules
130use Exporter rather than implementing their own C<import> method because
131Exporter provides a highly flexible interface, with an implementation optimised
132for the common case.
133
134Perl automatically calls the C<import> method when processing a
135C<use> statement for a module. Modules and C<use> are documented
136in L<perlfunc> and L<perlmod>. Understanding the concept of
137modules and how the C<use> statement operates is important to
138understanding the Exporter.
139
140=head2 How to Export
141
142The arrays C<@EXPORT> and C<@EXPORT_OK> in a module hold lists of
143symbols that are going to be exported into the users name space by
144default, or which they can request to be exported, respectively. The
145symbols can represent functions, scalars, arrays, hashes, or typeglobs.
146The symbols must be given by full name with the exception that the
147ampersand 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
152If you are only exporting function names it is recommended to omit the
153ampersand, as the implementation is faster this way.
154
155=head2 Selecting What To Export
156
157Do B<not> export method names!
158
159Do B<not> export anything else by default without a good reason!
160
161Exports pollute the namespace of the module user. If you must export
162try to use @EXPORT_OK in preference to @EXPORT and avoid short or
163common symbol names to reduce the risk of name clashes.
164
165Generally anything not exported is still accessible from outside the
166module using the ModuleName::item_name (or $blessed_ref-E<gt>method)
167syntax. By convention you can use a leading underscore on names to
168informally 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
176However if you use them for methods it is up to you to figure out
177how to make inheritance work.)
178
179As a general rule, if the module is trying to be object oriented
180then export nothing. If it's just a collection of functions then
181@EXPORT_OK anything but use @EXPORT with caution. For function and
182method names use barewords in preference to names prefixed with
183ampersands for the export lists.
184
185Other module design guidelines can be found in L<perlmod>.
186
187=head2 How to Import
188
189In other files which wish to use your module there are three basic ways for
190them to load your module and import its symbols:
191
192=over 4
193
194=item C<use ModuleName;>
195
196This imports all the symbols from ModuleName's @EXPORT into the namespace
197of the C<use> statement.
198
199=item C<use ModuleName ();>
200
201This causes perl to load your module but does not import any symbols.
202
203=item C<use ModuleName qw(...);>
204
205This imports only the symbols listed by the caller into their namespace.
206All listed symbols must be in your @EXPORT or @EXPORT_OK, else an error
207occurs. The advanced export features of Exporter are accessed like this,
208but with list entries that are syntactically distinct from symbol names.
209
210=back
211
212Unless you want to use its advanced features, this is probably all you
213need to know to use Exporter.
214
215=head1 Advanced features
216
217=head2 Specialised Import Lists
218
219If any of the entries in an import list begins with !, : or / then
220the list is treated as a series of specifications which either add to
221or delete from the list of names to import. They are processed left to
222right. 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
229A leading ! indicates that matching names should be deleted from the
230list of names to import. If the first specification is a deletion it
231is treated as though preceded by :DEFAULT. If you just want to import
232extra names in addition to the default set you will still need to
233include :DEFAULT explicitly.
234
235e.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
244An application using Module can say something like:
245
246 use Module qw(:DEFAULT :T2 !B3 A3);
247
248Other examples include:
249
250 use Socket qw(!/^[AP]F_/ !SOMAXCONN !SOL_SOCKET);
251 use POSIX qw(:errno_h :termios_h !TCSADRAIN !/^EXIT/);
252
253Remember that most patterns (using //) will need to be anchored
254with a leading ^, e.g., C</^EXIT/> rather than C</EXIT/>.
255
256You can say C<BEGIN { $Exporter::Verbose=1 }> to see how the
257specifications are being processed and what is actually being imported
258into modules.
259
260=head2 Exporting without using Exporter's import method
261
262Exporter has a special method, 'export_to_level' which is used in situations
263where you can't directly call Exporter's import method. The export_to_level
264method looks like:
265
266 MyPackage->export_to_level($where_to_export, $package, @what_to_export);
267
268where $where_to_export is an integer telling how far up the calling stack
269to export your symbols, and @what_to_export is an array telling what
270symbols *to* export (usually this is @_). The $package argument is
271currently unused.
272
273For example, suppose that you have a module, A, which already has an
274import 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
286and you want to Export symbol $A::b back to the module that called
287package A. Since Exporter relies on the import method to work, via
288inheritance, as it stands Exporter::import() will never get called.
289Instead, 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
301This will export the symbols one level 'above' the current package - ie: to
302the program or module that used package A.
303
304Note: 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
309By including Exporter in your @ISA you inherit an Exporter's import() method
310but you also inherit several other helper methods which you probably don't
311want. To avoid this you can do
312
313 package YourModule;
314 use Exporter qw( import );
315
316which will export Exporter's own import() method into YourModule.
317Everything will work as before but you won't need to include Exporter in
318@YourModule::ISA.
319
320Note: This feature was introduced in version 5.57
321of Exporter, released with perl 5.8.3.
322
323=head2 Module Version Checking
324
325The Exporter module will convert an attempt to import a number from a
326module into a call to $module_name-E<gt>require_version($value). This can
327be used to validate that the version of the module being used is
328greater than or equal to the required version.
329
330The Exporter module supplies a default require_version method which
331checks the value of $VERSION in the exporting module.
332
333Since the default require_version method treats the $VERSION number as
334a simple numeric value it will regard version 1.10 as lower than
3351.9. For this reason it is strongly recommended that you use numbers
336with at least two decimal places, e.g., 1.09.
337
338=head2 Managing Unknown Symbols
339
340In some situations you may want to prevent certain symbols from being
341exported. Typically this applies to extensions which have functions
342or constants that may not exist on some systems.
343
344The names of any symbols that cannot be exported should be listed
345in the C<@EXPORT_FAIL> array.
346
347If a module attempts to import any of these symbols the Exporter
348will give the module an opportunity to handle the situation before
349generating an error. The Exporter will call an export_fail method
350with a list of the failed symbols:
351
352 @failed_symbols = $module_name->export_fail(@failed_symbols);
353
354If the export_fail method returns an empty list then no error is
355recorded and all the requested symbols are exported. If the returned
356list is not empty then an error is generated for each symbol and the
357export fails. The Exporter provides a default export_fail method which
358simply returns the list unchanged.
359
360Uses for the export_fail method include giving better error messages
361for some symbols and performing lazy architectural checks (put more
362symbols into @EXPORT_FAIL by default and then take them out if someone
363actually tries to use them and an expensive check shows that they are
364usable on that platform).
365
366=head2 Tag Handling Utility Functions
367
368Since the symbols listed within %EXPORT_TAGS must also appear in either
369@EXPORT or @EXPORT_OK, two utility functions are provided which allow
370you 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
377Any names which are not tags are added to @EXPORT or @EXPORT_OK
378unchanged but will trigger a warning (with C<-w>) to avoid misspelt tags
379names being silently added to @EXPORT or @EXPORT_OK. Future versions
380may make this a fatal error.
381
382=head2 Generating combined tags
383
384If several symbol categories exist in %EXPORT_TAGS, it's usually
385useful to create the utility ":all" to simplify "use" statements.
386
387The 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
400CGI.pm creates an ":all" tag which contains some (but not really
401all) of its categories. That could be done with one small
402change:
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
414Note that the tag names in %EXPORT_TAGS don't have the leading ':'.
415
416=head2 C<AUTOLOAD>ed Constants
417
418Many modules make use of C<AUTOLOAD>ing for constant subroutines to
419avoid having to compile and waste memory on rarely used values (see
420L<perlsub> for details on constant subroutines). Calls to such
421constant subroutines are not optimized away at compile time because
422they can't be checked at compile time for constancy.
423
424Even if a prototype is available at compile time, the body of the
425subroutine is not (it hasn't been C<AUTOLOAD>ed yet). perl needs to
426examine both the C<()> prototype and the body of a subroutine at
427compile time to detect that it can safely replace calls to that
428subroutine with the constant value.
429
430A 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
440This forces the C<AUTOLOAD> for C<SO_LINGER> to take place before
441SO_LINGER is encountered later in C<My> package.
442
443If you are writing a package that C<AUTOLOAD>s, consider forcing
444an C<AUTOLOAD> for any constants explicitly imported by other packages
445or 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
451When using C<Exporter> with the standard C<strict> and C<warnings>
452pragmas, the C<our> keyword is needed to declare the package
453variables C<@EXPORT_OK>, C<@EXPORT>, C<@ISA>, etc.
454
455 our @ISA = qw(Exporter);
456 our @EXPORT_OK = qw(munge frobnicate);
457
458If backward compatibility for Perls under 5.6 is important,
459one 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
467There are some caveats with the use of runtime statements
468like C<require Exporter> and the assignment to package
469variables, which can very subtle for the unaware programmer.
470This may happen for instance with mutually recursive
471modules, which are affected by the time the relevant
472constructions are executed.
473
474The ideal (but a bit ugly) way to never have to think
475about that is to use C<BEGIN> blocks. So the first part
476of 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
490The C<BEGIN> will assure that the loading of F<Exporter.pm>
491and the assignments to C<@ISA> and C<@EXPORT_OK> happen
492immediately, leaving no room for something to get awry
493or just plain wrong.
494
495With respect to loading C<Exporter> and inheriting, there
496are 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
502Any of these statements are nice replacements for
503C<BEGIN { require Exporter; @ISA = qw(Exporter); }>
504with the same compile-time effect. The basic difference
505is that C<base> code interacts with declared C<fields>
506while C<parent> is a streamlined version of the older
507C<base> code to just establish the IS-A relationship.
508
509For more details, see the documentation and code of
510L<base> and L<parent>.
511
512Another thorough remedy to that runtime vs.
513compile-time trap is to use L<Exporter::Easy>,
514which is a wrapper of Exporter that allows all
515boilerplate code at a single gulp in the
516use 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
526You have been warned already in L</Selecting What To Export>
527to not export:
528
529=over 4
530
531=item *
532
533method names (because you don't need to
534and that's likely to not do what you want),
535
536=item *
537
538anything by default (because you don't want to surprise your users...
539badly)
540
541=item *
542
543anything you don't need to (because less is more)
544
545=back
546
547There's one more item to add to this list. Do B<not>
548export variable names. Just because C<Exporter> lets you
549do that, it does not mean you should.
550
551 @EXPORT_OK = qw( $svar @avar %hvar ); # DON'T!
552
553Exporting variables is not a good idea. They can
554change under the hood, provoking horrible
555effects at-a-distance, that are too hard to track
556and to fix. Trust me: they are not worth it.
557
558To provide the capability to set/get class-wide
559settings, it is best instead to provide accessors
560as subroutines or class methods instead.
561
562=head1 SEE ALSO
563
564C<Exporter> is definitely not the only module with
565symbol exporter capabilities. At CPAN, you may find
566a bunch of them. Some are lighter. Some
567provide improved APIs and features. Peek the one
568that fits your needs. The following is
569a 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
580This library is free software. You can redistribute it
581and/or modify it under the same terms as Perl itself.
582
583=cut