← Index
NYTProf Performance Profile   « line view »
For /Users/brian/bin/perls/cpan5.26.1
  Run on Sat Dec 30 01:41:10 2017
Reported on Sat Dec 30 01:44:15 2017

Filename/usr/local/perls/perl-5.26.1/lib/5.26.1/Tie/Handle.pm
StatementsExecuted 10 statements in 1.47ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1111.20ms1.32msTie::Handle::::BEGIN@8Tie::Handle::BEGIN@8
11177µs77µsTie::Handle::::BEGIN@3Tie::Handle::BEGIN@3
11127µs240µsTie::Handle::::BEGIN@124Tie::Handle::BEGIN@124
11116µs74µsTie::Handle::::BEGIN@123Tie::Handle::BEGIN@123
0000s0sTie::Handle::::CLOSETie::Handle::CLOSE
0000s0sTie::Handle::::GETCTie::Handle::GETC
0000s0sTie::Handle::::PRINTTie::Handle::PRINT
0000s0sTie::Handle::::PRINTFTie::Handle::PRINTF
0000s0sTie::Handle::::READTie::Handle::READ
0000s0sTie::Handle::::READLINETie::Handle::READLINE
0000s0sTie::Handle::::TIEHANDLETie::Handle::TIEHANDLE
0000s0sTie::Handle::::WRITETie::Handle::WRITE
0000s0sTie::Handle::::newTie::Handle::new
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Tie::Handle;
2
32209µs177µs
# spent 77µs within Tie::Handle::BEGIN@3 which was called: # once (77µs+0s) by IO::Zlib::BEGIN@307 at line 3
use 5.006_001;
# spent 77µs making 1 call to Tie::Handle::BEGIN@3
410sour $VERSION = '4.2';
5
6# Tie::StdHandle used to be inside Tie::Handle. For backwards compatibility
7# loading Tie::Handle has to make Tie::StdHandle available.
82667µs11.32ms
# spent 1.32ms (1.20+124µs) within Tie::Handle::BEGIN@8 which was called: # once (1.20ms+124µs) by IO::Zlib::BEGIN@307 at line 8
use Tie::StdHandle;
# spent 1.32ms making 1 call to Tie::Handle::BEGIN@8
9
10=head1 NAME
11
12Tie::Handle - base class definitions for tied handles
13
14=head1 SYNOPSIS
15
16 package NewHandle;
17 require Tie::Handle;
18
19 @ISA = qw(Tie::Handle);
20
21 sub READ { ... } # Provide a needed method
22 sub TIEHANDLE { ... } # Overrides inherited method
23
24
25 package main;
26
27 tie *FH, 'NewHandle';
28
29=head1 DESCRIPTION
30
31This module provides some skeletal methods for handle-tying classes. See
32L<perltie> for a list of the functions required in tying a handle to a package.
33The basic B<Tie::Handle> package provides a C<new> method, as well as methods
34C<TIEHANDLE>, C<PRINT>, C<PRINTF> and C<GETC>.
35
36For developers wishing to write their own tied-handle classes, the methods
37are summarized below. The L<perltie> section not only documents these, but
38has sample code as well:
39
40=over 4
41
42=item TIEHANDLE classname, LIST
43
44The method invoked by the command C<tie *glob, classname>. Associates a new
45glob instance with the specified class. C<LIST> would represent additional
46arguments (along the lines of L<AnyDBM_File> and compatriots) needed to
47complete the association.
48
49=item WRITE this, scalar, length, offset
50
51Write I<length> bytes of data from I<scalar> starting at I<offset>.
52
53=item PRINT this, LIST
54
55Print the values in I<LIST>
56
57=item PRINTF this, format, LIST
58
59Print the values in I<LIST> using I<format>
60
61=item READ this, scalar, length, offset
62
63Read I<length> bytes of data into I<scalar> starting at I<offset>.
64
65=item READLINE this
66
67Read a single line
68
69=item GETC this
70
71Get a single character
72
73=item CLOSE this
74
75Close the handle
76
77=item OPEN this, filename
78
79(Re-)open the handle
80
81=item BINMODE this
82
83Specify content is binary
84
85=item EOF this
86
87Test for end of file.
88
89=item TELL this
90
91Return position in the file.
92
93=item SEEK this, offset, whence
94
95Position the file.
96
97Test for end of file.
98
99=item DESTROY this
100
101Free the storage associated with the tied handle referenced by I<this>.
102This is rarely needed, as Perl manages its memory quite well. But the
103option exists, should a class wish to perform specific actions upon the
104destruction of an instance.
105
106=back
107
108=head1 MORE INFORMATION
109
110The L<perltie> section contains an example of tying handles.
111
112=head1 COMPATIBILITY
113
114This version of Tie::Handle is neither related to nor compatible with
115the Tie::Handle (3.0) module available on CPAN. It was due to an
116accident that two modules with the same name appeared. The namespace
117clash has been cleared in favor of this module that comes with the
118perl core in September 2000 and accordingly the version number has
119been bumped up to 4.0.
120
121=cut
122
123242µs2132µs
# spent 74µs (16+58) within Tie::Handle::BEGIN@123 which was called: # once (16µs+58µs) by IO::Zlib::BEGIN@307 at line 123
use Carp;
# spent 74µs making 1 call to Tie::Handle::BEGIN@123 # spent 58µs making 1 call to Exporter::import
1242546µs2453µs
# spent 240µs (27+213) within Tie::Handle::BEGIN@124 which was called: # once (27µs+213µs) by IO::Zlib::BEGIN@307 at line 124
use warnings::register;
# spent 240µs making 1 call to Tie::Handle::BEGIN@124 # spent 213µs making 1 call to warnings::register::import
125
126sub new {
127 my $pkg = shift;
128 $pkg->TIEHANDLE(@_);
129}
130
131# "Grandfather" the new, a la Tie::Hash
132
133sub TIEHANDLE {
134 my $pkg = shift;
135 if (defined &{"{$pkg}::new"}) {
136 warnings::warnif("WARNING: calling ${pkg}->new since ${pkg}->TIEHANDLE is missing");
137 $pkg->new(@_);
138 }
139 else {
140 croak "$pkg doesn't define a TIEHANDLE method";
141 }
142}
143
144sub PRINT {
145 my $self = shift;
146 if($self->can('WRITE') != \&WRITE) {
147 my $buf = join(defined $, ? $, : "",@_);
148 $buf .= $\ if defined $\;
149 $self->WRITE($buf,length($buf),0);
150 }
151 else {
152 croak ref($self)," doesn't define a PRINT method";
153 }
154}
155
156sub PRINTF {
157 my $self = shift;
158
159 if($self->can('WRITE') != \&WRITE) {
160 my $buf = sprintf(shift,@_);
161 $self->WRITE($buf,length($buf),0);
162 }
163 else {
164 croak ref($self)," doesn't define a PRINTF method";
165 }
166}
167
168sub READLINE {
169 my $pkg = ref $_[0];
170 croak "$pkg doesn't define a READLINE method";
171}
172
173sub GETC {
174 my $self = shift;
175
176 if($self->can('READ') != \&READ) {
177 my $buf;
178 $self->READ($buf,1);
179 return $buf;
180 }
181 else {
182 croak ref($self)," doesn't define a GETC method";
183 }
184}
185
186sub READ {
187 my $pkg = ref $_[0];
188 croak "$pkg doesn't define a READ method";
189}
190
191sub WRITE {
192 my $pkg = ref $_[0];
193 croak "$pkg doesn't define a WRITE method";
194}
195
196sub CLOSE {
197 my $pkg = ref $_[0];
198 croak "$pkg doesn't define a CLOSE method";
199}
200
20115µs1;