| Filename | /usr/lib/perl5/5.14/i686-cygwin-threads-64int/IO/Seekable.pm |
| Statements | Executed 83233 statements in 480ms |
| Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
|---|---|---|---|---|---|
| 29825 | 10 | 2 | 180ms | 347ms | IO::Seekable::seek |
| 29825 | 1 | 1 | 168ms | 168ms | IO::Seekable::CORE:seek (opcode) |
| 11783 | 5 | 2 | 62.1ms | 70.9ms | IO::Seekable::tell |
| 11783 | 1 | 1 | 8.76ms | 8.76ms | IO::Seekable::CORE:tell (opcode) |
| 1 | 1 | 1 | 6.80ms | 11.8ms | IO::Seekable::BEGIN@101 |
| 1 | 1 | 1 | 3.57ms | 5.53ms | IO::Seekable::BEGIN@104 |
| 1 | 1 | 1 | 239µs | 239µs | IO::Seekable::BEGIN@97 |
| 1 | 1 | 1 | 16µs | 24µs | IO::Seekable::BEGIN@99 |
| 1 | 1 | 1 | 15µs | 88µs | IO::Seekable::BEGIN@98 |
| 0 | 0 | 0 | 0s | 0s | IO::Seekable::sysseek |
| Line | State ments |
Time on line |
Calls | Time in subs |
Code |
|---|---|---|---|---|---|
| 1 | # | ||||
| 2 | |||||
| 3 | package IO::Seekable; | ||||
| 4 | |||||
| 5 | =head1 NAME | ||||
| 6 | |||||
| 7 | IO::Seekable - supply seek based methods for I/O objects | ||||
| 8 | |||||
| 9 | =head1 SYNOPSIS | ||||
| 10 | |||||
| 11 | use IO::Seekable; | ||||
| 12 | package IO::Something; | ||||
| 13 | @ISA = qw(IO::Seekable); | ||||
| 14 | |||||
| 15 | =head1 DESCRIPTION | ||||
| 16 | |||||
| 17 | C<IO::Seekable> does not have a constructor of its own as it is intended to | ||||
| 18 | be inherited by other C<IO::Handle> based objects. It provides methods | ||||
| 19 | which allow seeking of the file descriptors. | ||||
| 20 | |||||
| 21 | =over 4 | ||||
| 22 | |||||
| 23 | =item $io->getpos | ||||
| 24 | |||||
| 25 | Returns an opaque value that represents the current position of the | ||||
| 26 | IO::File, or C<undef> if this is not possible (eg an unseekable stream such | ||||
| 27 | as a terminal, pipe or socket). If the fgetpos() function is available in | ||||
| 28 | your C library it is used to implements getpos, else perl emulates getpos | ||||
| 29 | using C's ftell() function. | ||||
| 30 | |||||
| 31 | =item $io->setpos | ||||
| 32 | |||||
| 33 | Uses the value of a previous getpos call to return to a previously visited | ||||
| 34 | position. Returns "0 but true" on success, C<undef> on failure. | ||||
| 35 | |||||
| 36 | =back | ||||
| 37 | |||||
| 38 | See L<perlfunc> for complete descriptions of each of the following | ||||
| 39 | supported C<IO::Seekable> methods, which are just front ends for the | ||||
| 40 | corresponding built-in functions: | ||||
| 41 | |||||
| 42 | =over 4 | ||||
| 43 | |||||
| 44 | =item $io->seek ( POS, WHENCE ) | ||||
| 45 | |||||
| 46 | Seek the IO::File to position POS, relative to WHENCE: | ||||
| 47 | |||||
| 48 | =over 8 | ||||
| 49 | |||||
| 50 | =item WHENCE=0 (SEEK_SET) | ||||
| 51 | |||||
| 52 | POS is absolute position. (Seek relative to the start of the file) | ||||
| 53 | |||||
| 54 | =item WHENCE=1 (SEEK_CUR) | ||||
| 55 | |||||
| 56 | POS is an offset from the current position. (Seek relative to current) | ||||
| 57 | |||||
| 58 | =item WHENCE=2 (SEEK_END) | ||||
| 59 | |||||
| 60 | POS is an offset from the end of the file. (Seek relative to end) | ||||
| 61 | |||||
| 62 | =back | ||||
| 63 | |||||
| 64 | The SEEK_* constants can be imported from the C<Fcntl> module if you | ||||
| 65 | don't wish to use the numbers C<0> C<1> or C<2> in your code. | ||||
| 66 | |||||
| 67 | Returns C<1> upon success, C<0> otherwise. | ||||
| 68 | |||||
| 69 | =item $io->sysseek( POS, WHENCE ) | ||||
| 70 | |||||
| 71 | Similar to $io->seek, but sets the IO::File's position using the system | ||||
| 72 | call lseek(2) directly, so will confuse most perl IO operators except | ||||
| 73 | sysread and syswrite (see L<perlfunc> for full details) | ||||
| 74 | |||||
| 75 | Returns the new position, or C<undef> on failure. A position | ||||
| 76 | of zero is returned as the string C<"0 but true"> | ||||
| 77 | |||||
| 78 | =item $io->tell | ||||
| 79 | |||||
| 80 | Returns the IO::File's current position, or -1 on error. | ||||
| 81 | |||||
| 82 | =back | ||||
| 83 | |||||
| 84 | =head1 SEE ALSO | ||||
| 85 | |||||
| 86 | L<perlfunc>, | ||||
| 87 | L<perlop/"I/O Operators">, | ||||
| 88 | L<IO::Handle> | ||||
| 89 | L<IO::File> | ||||
| 90 | |||||
| 91 | =head1 HISTORY | ||||
| 92 | |||||
| 93 | Derived from FileHandle.pm by Graham Barr E<lt>gbarr@pobox.comE<gt> | ||||
| 94 | |||||
| 95 | =cut | ||||
| 96 | |||||
| 97 | 2 | 189µs | 1 | 239µs | # spent 239µs within IO::Seekable::BEGIN@97 which was called:
# once (239µs+0s) by IO::File::BEGIN@133 at line 97 # spent 239µs making 1 call to IO::Seekable::BEGIN@97 |
| 98 | 2 | 57µs | 2 | 160µs | # spent 88µs (15+72) within IO::Seekable::BEGIN@98 which was called:
# once (15µs+72µs) by IO::File::BEGIN@133 at line 98 # spent 88µs making 1 call to IO::Seekable::BEGIN@98
# spent 72µs making 1 call to Exporter::import |
| 99 | 2 | 85µs | 2 | 31µs | # spent 24µs (16+8) within IO::Seekable::BEGIN@99 which was called:
# once (16µs+8µs) by IO::File::BEGIN@133 at line 99 # spent 24µs making 1 call to IO::Seekable::BEGIN@99
# spent 8µs making 1 call to strict::import |
| 100 | 1 | 500ns | our($VERSION, @EXPORT, @ISA); | ||
| 101 | 2 | 2.62ms | 1 | 11.8ms | # spent 11.8ms (6.80+4.96) within IO::Seekable::BEGIN@101 which was called:
# once (6.80ms+4.96ms) by IO::File::BEGIN@133 at line 101 # spent 11.8ms making 1 call to IO::Seekable::BEGIN@101 |
| 102 | # XXX we can't get these from IO::Handle or we'll get prototype | ||||
| 103 | # mismatch warnings on C<use POSIX; use IO::File;> :-( | ||||
| 104 | 2 | 3.25ms | 2 | 6.10ms | # spent 5.53ms (3.57+1.97) within IO::Seekable::BEGIN@104 which was called:
# once (3.57ms+1.97ms) by IO::File::BEGIN@133 at line 104 # spent 5.53ms making 1 call to IO::Seekable::BEGIN@104
# spent 570µs making 1 call to Exporter::import |
| 105 | 1 | 1µs | require Exporter; | ||
| 106 | |||||
| 107 | 1 | 3µs | @EXPORT = qw(SEEK_SET SEEK_CUR SEEK_END); | ||
| 108 | 1 | 24µs | @ISA = qw(Exporter); | ||
| 109 | |||||
| 110 | 1 | 1µs | $VERSION = "1.10"; | ||
| 111 | 1 | 34µs | $VERSION = eval $VERSION; # spent 6µs executing statements in string eval | ||
| 112 | |||||
| 113 | # spent 347ms (180+168) within IO::Seekable::seek which was called 29825 times, avg 12µs/call:
# 9982 times (65.2ms+49.5ms) by Archive::Zip::ZipFileMember::_seekToLocalHeader at line 68 of Archive/Zip/ZipFileMember.pm, avg 11µs/call
# 8601 times (50.4ms+65.5ms) by Archive::Zip::ZipFileMember::_skipLocalFileHeader at line 156 of Archive/Zip/ZipFileMember.pm, avg 13µs/call
# 8601 times (48.7ms+35.9ms) by Archive::Zip::ZipFileMember::rewindData at line 399 of Archive/Zip/ZipFileMember.pm, avg 10µs/call
# 1381 times (7.47ms+9.81ms) by Archive::Zip::ZipFileMember::_become at line 108 of Archive/Zip/ZipFileMember.pm, avg 13µs/call
# 210 times (1.28ms+1.70ms) by Archive::Zip::Archive::_findEndOfCentralDirectory at line 663 of Archive/Zip/Archive.pm, avg 14µs/call
# 210 times (1.30ms+1.50ms) by Archive::Zip::Archive::_findEndOfCentralDirectory at line 676 of Archive/Zip/Archive.pm, avg 13µs/call
# 210 times (1.46ms+1.11ms) by Archive::Zip::Archive::readFromFileHandle at line 579 of Archive/Zip/Archive.pm, avg 12µs/call
# 210 times (1.32ms+1.02ms) by Archive::Zip::Archive::_findEndOfCentralDirectory at line 690 of Archive/Zip/Archive.pm, avg 11µs/call
# 210 times (1.22ms+878µs) by Archive::Zip::Archive::readFromFileHandle at line 589 of Archive/Zip/Archive.pm, avg 10µs/call
# 210 times (1.16ms+925µs) by Archive::Zip::Archive::_readEndOfCentralDirectory at line 624 of Archive/Zip/Archive.pm, avg 10µs/call | ||||
| 114 | 59650 | 387ms | @_ == 3 or croak 'usage: $io->seek(POS, WHENCE)'; | ||
| 115 | 29825 | 168ms | seek($_[0], $_[1], $_[2]); # spent 168ms making 29825 calls to IO::Seekable::CORE:seek, avg 6µs/call | ||
| 116 | } | ||||
| 117 | |||||
| 118 | sub sysseek { | ||||
| 119 | @_ == 3 or croak 'usage: $io->sysseek(POS, WHENCE)'; | ||||
| 120 | sysseek($_[0], $_[1], $_[2]); | ||||
| 121 | } | ||||
| 122 | |||||
| 123 | # spent 70.9ms (62.1+8.76) within IO::Seekable::tell which was called 11783 times, avg 6µs/call:
# 8601 times (45.9ms+6.65ms) by Archive::Zip::ZipFileMember::_skipLocalFileHeader at line 169 of Archive/Zip/ZipFileMember.pm, avg 6µs/call
# 1381 times (7.06ms+911µs) by Archive::Zip::ZipFileMember::_become at line 105 of Archive/Zip/ZipFileMember.pm, avg 6µs/call
# 1381 times (6.79ms+881µs) by Archive::Zip::ZipFileMember::_readLocalFileHeader at line 240 of Archive/Zip/ZipFileMember.pm, avg 6µs/call
# 210 times (1.27ms+188µs) by Archive::Zip::Archive::_findEndOfCentralDirectory at line 666 of Archive/Zip/Archive.pm, avg 7µs/call
# 210 times (1.06ms+125µs) by Archive::Zip::Archive::readFromFileHandle at line 584 of Archive/Zip/Archive.pm, avg 6µs/call | ||||
| 124 | 23566 | 86.1ms | @_ == 1 or croak 'usage: $io->tell()'; | ||
| 125 | 11783 | 8.76ms | tell($_[0]); # spent 8.76ms making 11783 calls to IO::Seekable::CORE:tell, avg 743ns/call | ||
| 126 | } | ||||
| 127 | |||||
| 128 | 1 | 24µs | 1; | ||
# spent 168ms within IO::Seekable::CORE:seek which was called 29825 times, avg 6µs/call:
# 29825 times (168ms+0s) by IO::Seekable::seek at line 115, avg 6µs/call | |||||
# spent 8.76ms within IO::Seekable::CORE:tell which was called 11783 times, avg 743ns/call:
# 11783 times (8.76ms+0s) by IO::Seekable::tell at line 125, avg 743ns/call |