This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Removed unnecessary pointers checks
[perl5.git] / pod / perlfaq5.pod
CommitLineData
68dc0745 1=head1 NAME
2
500071f4 3perlfaq5 - Files and Formats ($Revision: 3606 $)
68dc0745 4
5=head1 DESCRIPTION
6
7This section deals with I/O and the "f" issues: filehandles, flushing,
8formats, and footers.
9
5a964f20 10=head2 How do I flush/unbuffer an output filehandle? Why must I do this?
d74e8afc 11X<flush> X<buffer> X<unbuffer> X<autoflush>
68dc0745 12
c90536be
JH
13Perl does not support truly unbuffered output (except
14insofar as you can C<syswrite(OUT, $char, 1)>), although it
15does support is "command buffering", in which a physical
16write is performed after every output command.
17
18The C standard I/O library (stdio) normally buffers
19characters sent to devices so that there isn't a system call
20for each byte. In most stdio implementations, the type of
21output buffering and the size of the buffer varies according
22to the type of device. Perl's print() and write() functions
23normally buffer output, while syswrite() bypasses buffering
24all together.
25
26If you want your output to be sent immediately when you
27execute print() or write() (for instance, for some network
28protocols), you must set the handle's autoflush flag. This
29flag is the Perl variable $| and when it is set to a true
30value, Perl will flush the handle's buffer after each
31print() or write(). Setting $| affects buffering only for
32the currently selected default file handle. You choose this
33handle with the one argument select() call (see
197aec24 34L<perlvar/$E<verbar>> and L<perlfunc/select>).
c90536be
JH
35
36Use select() to choose the desired handle, then set its
37per-filehandle variables.
5a964f20 38
500071f4
RGS
39 $old_fh = select(OUTPUT_HANDLE);
40 $| = 1;
41 select($old_fh);
5a964f20 42
c90536be 43Some idioms can handle this in a single statement:
5a964f20 44
500071f4 45 select((select(OUTPUT_HANDLE), $| = 1)[0]);
818c4caa 46
500071f4 47 $| = 1, select $_ for select OUTPUT_HANDLE;
5a964f20 48
c90536be
JH
49Some modules offer object-oriented access to handles and their
50variables, although they may be overkill if this is the only
51thing you do with them. You can use IO::Handle:
68dc0745 52
500071f4
RGS
53 use IO::Handle;
54 open(DEV, ">/dev/printer"); # but is this?
55 DEV->autoflush(1);
68dc0745 56
c90536be 57or IO::Socket:
68dc0745 58
500071f4 59 use IO::Socket; # this one is kinda a pipe?
4358a253 60 my $sock = IO::Socket::INET->new( 'www.example.com:80' );
68dc0745 61
500071f4 62 $sock->autoflush();
68dc0745 63
64=head2 How do I change one line in a file/delete a line in a file/insert a line in the middle of a file/append to the beginning of a file?
d74e8afc 65X<file, editing>
68dc0745 66
1f089b22
JH
67Use the Tie::File module, which is included in the standard
68distribution since Perl 5.8.0.
68dc0745 69
70=head2 How do I count the number of lines in a file?
d74e8afc 71X<file, counting lines> X<lines> X<line>
68dc0745 72
73One fairly efficient way is to count newlines in the file. The
74following program uses a feature of tr///, as documented in L<perlop>.
75If your text file doesn't end with a newline, then it's not really a
76proper text file, so this may report one fewer line than you expect.
77
500071f4
RGS
78 $lines = 0;
79 open(FILE, $filename) or die "Can't open `$filename': $!";
80 while (sysread FILE, $buffer, 4096) {
81 $lines += ($buffer =~ tr/\n//);
82 }
83 close FILE;
68dc0745 84
5a964f20
TC
85This assumes no funny games with newline translations.
86
4750257b 87=head2 How can I use Perl's C<-i> option from within a program?
d74e8afc 88X<-i> X<in-place>
4750257b
MJD
89
90C<-i> sets the value of Perl's C<$^I> variable, which in turn affects
91the behavior of C<< <> >>; see L<perlrun> for more details. By
92modifying the appropriate variables directly, you can get the same
93behavior within a larger program. For example:
94
500071f4
RGS
95 # ...
96 {
97 local($^I, @ARGV) = ('.orig', glob("*.c"));
98 while (<>) {
99 if ($. == 1) {
100 print "This line should appear at the top of each file\n";
101 }
102 s/\b(p)earl\b/${1}erl/i; # Correct typos, preserving case
103 print;
104 close ARGV if eof; # Reset $.
105 }
106 }
107 # $^I and @ARGV return to their old values here
4750257b
MJD
108
109This block modifies all the C<.c> files in the current directory,
110leaving a backup of the original data from each file in a new
111C<.c.orig> file.
112
7678cced 113=head2 How can I copy a file?
d74e8afc 114X<copy> X<file, copy>
7678cced
RGS
115
116(contributed by brian d foy)
117
118Use the File::Copy module. It comes with Perl and can do a
119true copy across file systems, and it does its magic in
120a portable fashion.
121
122 use File::Copy;
123
124 copy( $original, $new_copy ) or die "Copy failed: $!";
125
126If you can't use File::Copy, you'll have to do the work yourself:
127open the original file, open the destination file, then print
128to the destination file as you read the original.
129
68dc0745 130=head2 How do I make a temporary file name?
d74e8afc 131X<file, temporary>
68dc0745 132
7678cced
RGS
133If you don't need to know the name of the file, you can use C<open()>
134with C<undef> in place of the file name. The C<open()> function
135creates an anonymous temporary file.
136
137 open my $tmp, '+>', undef or die $!;
6670e5e7 138
7678cced 139Otherwise, you can use the File::Temp module.
68dc0745 140
500071f4 141 use File::Temp qw/ tempfile tempdir /;
a6dd486b 142
500071f4
RGS
143 $dir = tempdir( CLEANUP => 1 );
144 ($fh, $filename) = tempfile( DIR => $dir );
5a964f20 145
500071f4 146 # or if you don't need to know the filename
5a964f20 147
500071f4 148 $fh = tempfile( DIR => $dir );
5a964f20 149
16394a69
JH
150The File::Temp has been a standard module since Perl 5.6.1. If you
151don't have a modern enough Perl installed, use the C<new_tmpfile>
152class method from the IO::File module to get a filehandle opened for
153reading and writing. Use it if you don't need to know the file's name:
5a964f20 154
500071f4
RGS
155 use IO::File;
156 $fh = IO::File->new_tmpfile()
16394a69 157 or die "Unable to make new temporary file: $!";
5a964f20 158
a6dd486b
JB
159If you're committed to creating a temporary file by hand, use the
160process ID and/or the current time-value. If you need to have many
161temporary files in one process, use a counter:
5a964f20 162
500071f4 163 BEGIN {
68dc0745 164 use Fcntl;
16394a69 165 my $temp_dir = -d '/tmp' ? '/tmp' : $ENV{TMPDIR} || $ENV{TEMP};
68dc0745 166 my $base_name = sprintf("%s/%d-%d-0000", $temp_dir, $$, time());
500071f4 167
68dc0745 168 sub temp_file {
500071f4
RGS
169 local *FH;
170 my $count = 0;
171 until (defined(fileno(FH)) || $count++ > 100) {
68dc0745 172 $base_name =~ s/-(\d+)$/"-" . (1 + $1)/e;
2359510d 173 # O_EXCL is required for security reasons.
5a964f20 174 sysopen(FH, $base_name, O_WRONLY|O_EXCL|O_CREAT);
500071f4
RGS
175 }
176
177 if (defined(fileno(FH))
5a964f20 178 return (*FH, $base_name);
500071f4
RGS
179 }
180 else {
68dc0745 181 return ();
182 }
183 }
500071f4 184 }
68dc0745 185
68dc0745 186=head2 How can I manipulate fixed-record-length files?
d74e8afc 187X<fixed-length> X<file, fixed-length records>
68dc0745 188
793f5136
RGS
189The most efficient way is using L<pack()|perlfunc/"pack"> and
190L<unpack()|perlfunc/"unpack">. This is faster than using
191L<substr()|perlfunc/"substr"> when taking many, many strings. It is
192slower for just a few.
5a964f20
TC
193
194Here is a sample chunk of code to break up and put back together again
195some fixed-format input lines, in this case from the output of a normal,
196Berkeley-style ps:
68dc0745 197
500071f4
RGS
198 # sample input line:
199 # 15158 p5 T 0:00 perl /home/tchrist/scripts/now-what
200 my $PS_T = 'A6 A4 A7 A5 A*';
201 open my $ps, '-|', 'ps';
202 print scalar <$ps>;
203 my @fields = qw( pid tt stat time command );
204 while (<$ps>) {
205 my %process;
206 @process{@fields} = unpack($PS_T, $_);
793f5136 207 for my $field ( @fields ) {
500071f4 208 print "$field: <$process{$field}>\n";
68dc0745 209 }
793f5136 210 print 'line=', pack($PS_T, @process{@fields} ), "\n";
500071f4 211 }
68dc0745 212
793f5136
RGS
213We've used a hash slice in order to easily handle the fields of each row.
214Storing the keys in an array means it's easy to operate on them as a
215group or loop over them with for. It also avoids polluting the program
216with global variables and using symbolic references.
5a964f20 217
500071f4 218=head2 How can I make a filehandle local to a subroutine? How do I pass filehandles between subroutines? How do I make an array of filehandles?
d74e8afc 219X<filehandle, local> X<filehandle, passing> X<filehandle, reference>
68dc0745 220
c90536be
JH
221As of perl5.6, open() autovivifies file and directory handles
222as references if you pass it an uninitialized scalar variable.
223You can then pass these references just like any other scalar,
224and use them in the place of named handles.
68dc0745 225
c90536be 226 open my $fh, $file_name;
818c4caa 227
c90536be 228 open local $fh, $file_name;
818c4caa 229
c90536be 230 print $fh "Hello World!\n";
818c4caa 231
c90536be 232 process_file( $fh );
68dc0745 233
500071f4
RGS
234If you like, you can store these filehandles in an array or a hash.
235If you access them directly, they aren't simple scalars and you
236need to give C<print> a little help by placing the filehandle
237reference in braces. Perl can only figure it out on its own when
238the filehandle reference is a simple scalar.
239
240 my @fhs = ( $fh1, $fh2, $fh3 );
241
242 for( $i = 0; $i <= $#fhs; $i++ ) {
243 print {$fhs[$i]} "just another Perl answer, \n";
244 }
245
246
c90536be
JH
247Before perl5.6, you had to deal with various typeglob idioms
248which you may see in older code.
68dc0745 249
c90536be
JH
250 open FILE, "> $filename";
251 process_typeglob( *FILE );
252 process_reference( \*FILE );
818c4caa 253
c90536be
JH
254 sub process_typeglob { local *FH = shift; print FH "Typeglob!" }
255 sub process_reference { local $fh = shift; print $fh "Reference!" }
5a964f20 256
c90536be
JH
257If you want to create many anonymous handles, you should
258check out the Symbol or IO::Handle modules.
5a964f20
TC
259
260=head2 How can I use a filehandle indirectly?
d74e8afc 261X<filehandle, indirect>
5a964f20
TC
262
263An indirect filehandle is using something other than a symbol
264in a place that a filehandle is expected. Here are ways
a6dd486b 265to get indirect filehandles:
5a964f20 266
500071f4
RGS
267 $fh = SOME_FH; # bareword is strict-subs hostile
268 $fh = "SOME_FH"; # strict-refs hostile; same package only
269 $fh = *SOME_FH; # typeglob
270 $fh = \*SOME_FH; # ref to typeglob (bless-able)
271 $fh = *SOME_FH{IO}; # blessed IO::Handle from *SOME_FH typeglob
5a964f20 272
c90536be 273Or, you can use the C<new> method from one of the IO::* modules to
5a964f20
TC
274create an anonymous filehandle, store that in a scalar variable,
275and use it as though it were a normal filehandle.
276
500071f4
RGS
277 use IO::Handle; # 5.004 or higher
278 $fh = IO::Handle->new();
5a964f20
TC
279
280Then use any of those as you would a normal filehandle. Anywhere that
281Perl is expecting a filehandle, an indirect filehandle may be used
282instead. An indirect filehandle is just a scalar variable that contains
368c9434 283a filehandle. Functions like C<print>, C<open>, C<seek>, or
c90536be 284the C<< <FH> >> diamond operator will accept either a named filehandle
5a964f20
TC
285or a scalar variable containing one:
286
500071f4
RGS
287 ($ifh, $ofh, $efh) = (*STDIN, *STDOUT, *STDERR);
288 print $ofh "Type it: ";
289 $got = <$ifh>
290 print $efh "What was that: $got";
5a964f20 291
368c9434 292If you're passing a filehandle to a function, you can write
5a964f20
TC
293the function in two ways:
294
500071f4
RGS
295 sub accept_fh {
296 my $fh = shift;
297 print $fh "Sending to indirect filehandle\n";
298 }
46fc3d4c 299
5a964f20 300Or it can localize a typeglob and use the filehandle directly:
46fc3d4c 301
500071f4
RGS
302 sub accept_fh {
303 local *FH = shift;
304 print FH "Sending to localized filehandle\n";
305 }
46fc3d4c 306
5a964f20
TC
307Both styles work with either objects or typeglobs of real filehandles.
308(They might also work with strings under some circumstances, but this
309is risky.)
310
500071f4
RGS
311 accept_fh(*STDOUT);
312 accept_fh($handle);
5a964f20
TC
313
314In the examples above, we assigned the filehandle to a scalar variable
a6dd486b
JB
315before using it. That is because only simple scalar variables, not
316expressions or subscripts of hashes or arrays, can be used with
317built-ins like C<print>, C<printf>, or the diamond operator. Using
8305e449 318something other than a simple scalar variable as a filehandle is
5a964f20
TC
319illegal and won't even compile:
320
500071f4
RGS
321 @fd = (*STDIN, *STDOUT, *STDERR);
322 print $fd[1] "Type it: "; # WRONG
323 $got = <$fd[0]> # WRONG
324 print $fd[2] "What was that: $got"; # WRONG
5a964f20
TC
325
326With C<print> and C<printf>, you get around this by using a block and
327an expression where you would place the filehandle:
328
500071f4
RGS
329 print { $fd[1] } "funny stuff\n";
330 printf { $fd[1] } "Pity the poor %x.\n", 3_735_928_559;
331 # Pity the poor deadbeef.
5a964f20
TC
332
333That block is a proper block like any other, so you can put more
334complicated code there. This sends the message out to one of two places:
335
500071f4
RGS
336 $ok = -x "/bin/cat";
337 print { $ok ? $fd[1] : $fd[2] } "cat stat $ok\n";
338 print { $fd[ 1+ ($ok || 0) ] } "cat stat $ok\n";
5a964f20
TC
339
340This approach of treating C<print> and C<printf> like object methods
341calls doesn't work for the diamond operator. That's because it's a
342real operator, not just a function with a comma-less argument. Assuming
343you've been storing typeglobs in your structure as we did above, you
c90536be 344can use the built-in function named C<readline> to read a record just
c47ff5f1 345as C<< <> >> does. Given the initialization shown above for @fd, this
c90536be 346would work, but only because readline() requires a typeglob. It doesn't
5a964f20
TC
347work with objects or strings, which might be a bug we haven't fixed yet.
348
500071f4 349 $got = readline($fd[0]);
5a964f20
TC
350
351Let it be noted that the flakiness of indirect filehandles is not
352related to whether they're strings, typeglobs, objects, or anything else.
353It's the syntax of the fundamental operators. Playing the object
354game doesn't help you at all here.
46fc3d4c 355
68dc0745 356=head2 How can I set up a footer format to be used with write()?
d74e8afc 357X<footer>
68dc0745 358
54310121 359There's no builtin way to do this, but L<perlform> has a couple of
68dc0745 360techniques to make it possible for the intrepid hacker.
361
362=head2 How can I write() into a string?
d74e8afc 363X<write, into a string>
68dc0745 364
65acb1b1 365See L<perlform/"Accessing Formatting Internals"> for an swrite() function.
68dc0745 366
367=head2 How can I output my numbers with commas added?
d74e8afc 368X<number, commify>
68dc0745 369
b68463f7
RGS
370(contributed by brian d foy and Benjamin Goldberg)
371
372You can use L<Number::Format> to separate places in a number.
373It handles locale information for those of you who want to insert
374full stops instead (or anything else that they want to use,
375really).
376
49d635f9
RGS
377This subroutine will add commas to your number:
378
379 sub commify {
500071f4
RGS
380 local $_ = shift;
381 1 while s/^([-+]?\d+)(\d{3})/$1,$2/;
382 return $_;
383 }
49d635f9
RGS
384
385This regex from Benjamin Goldberg will add commas to numbers:
68dc0745 386
500071f4 387 s/(^[-+]?\d+?(?=(?>(?:\d{3})+)(?!\d))|\G\d{3}(?=\d))/$1,/g;
68dc0745 388
49d635f9 389It is easier to see with comments:
68dc0745 390
500071f4
RGS
391 s/(
392 ^[-+]? # beginning of number.
393 \d+? # first digits before first comma
394 (?= # followed by, (but not included in the match) :
395 (?>(?:\d{3})+) # some positive multiple of three digits.
396 (?!\d) # an *exact* multiple, not x * 3 + 1 or whatever.
397 )
398 | # or:
399 \G\d{3} # after the last group, get three digits
400 (?=\d) # but they have to have more digits after them.
401 )/$1,/xg;
46fc3d4c 402
68dc0745 403=head2 How can I translate tildes (~) in a filename?
d74e8afc 404X<tilde> X<tilde expansion>
68dc0745 405
575cc754
JH
406Use the <> (glob()) operator, documented in L<perlfunc>. Older
407versions of Perl require that you have a shell installed that groks
408tildes. Recent perl versions have this feature built in. The
d6260402 409File::KGlob module (available from CPAN) gives more portable glob
575cc754 410functionality.
68dc0745 411
412Within Perl, you may use this directly:
413
414 $filename =~ s{
415 ^ ~ # find a leading tilde
416 ( # save this in $1
417 [^/] # a non-slash character
418 * # repeated 0 or more times (0 means me)
419 )
420 }{
421 $1
422 ? (getpwnam($1))[7]
423 : ( $ENV{HOME} || $ENV{LOGDIR} )
424 }ex;
425
5a964f20 426=head2 How come when I open a file read-write it wipes it out?
d74e8afc 427X<clobber> X<read-write> X<clobbering> X<truncate> X<truncating>
68dc0745 428
429Because you're using something like this, which truncates the file and
430I<then> gives you read-write access:
431
500071f4 432 open(FH, "+> /path/name"); # WRONG (almost always)
68dc0745 433
434Whoops. You should instead use this, which will fail if the file
197aec24 435doesn't exist.
d92eb7b0 436
500071f4 437 open(FH, "+< /path/name"); # open for update
d92eb7b0 438
c47ff5f1 439Using ">" always clobbers or creates. Using "<" never does
d92eb7b0 440either. The "+" doesn't change this.
68dc0745 441
5a964f20
TC
442Here are examples of many kinds of file opens. Those using sysopen()
443all assume
68dc0745 444
500071f4 445 use Fcntl;
68dc0745 446
5a964f20 447To open file for reading:
68dc0745 448
500071f4
RGS
449 open(FH, "< $path") || die $!;
450 sysopen(FH, $path, O_RDONLY) || die $!;
5a964f20
TC
451
452To open file for writing, create new file if needed or else truncate old file:
453
500071f4
RGS
454 open(FH, "> $path") || die $!;
455 sysopen(FH, $path, O_WRONLY|O_TRUNC|O_CREAT) || die $!;
456 sysopen(FH, $path, O_WRONLY|O_TRUNC|O_CREAT, 0666) || die $!;
5a964f20
TC
457
458To open file for writing, create new file, file must not exist:
459
500071f4
RGS
460 sysopen(FH, $path, O_WRONLY|O_EXCL|O_CREAT) || die $!;
461 sysopen(FH, $path, O_WRONLY|O_EXCL|O_CREAT, 0666) || die $!;
5a964f20
TC
462
463To open file for appending, create if necessary:
464
500071f4
RGS
465 open(FH, ">> $path") || die $!;
466 sysopen(FH, $path, O_WRONLY|O_APPEND|O_CREAT) || die $!;
467 sysopen(FH, $path, O_WRONLY|O_APPEND|O_CREAT, 0666) || die $!;
5a964f20
TC
468
469To open file for appending, file must exist:
470
500071f4 471 sysopen(FH, $path, O_WRONLY|O_APPEND) || die $!;
5a964f20
TC
472
473To open file for update, file must exist:
474
500071f4
RGS
475 open(FH, "+< $path") || die $!;
476 sysopen(FH, $path, O_RDWR) || die $!;
5a964f20
TC
477
478To open file for update, create file if necessary:
479
500071f4
RGS
480 sysopen(FH, $path, O_RDWR|O_CREAT) || die $!;
481 sysopen(FH, $path, O_RDWR|O_CREAT, 0666) || die $!;
5a964f20
TC
482
483To open file for update, file must not exist:
484
500071f4
RGS
485 sysopen(FH, $path, O_RDWR|O_EXCL|O_CREAT) || die $!;
486 sysopen(FH, $path, O_RDWR|O_EXCL|O_CREAT, 0666) || die $!;
5a964f20
TC
487
488To open a file without blocking, creating if necessary:
489
500071f4 490 sysopen(FH, "/foo/somefile", O_WRONLY|O_NDELAY|O_CREAT)
2359510d 491 or die "can't open /foo/somefile: $!":
5a964f20
TC
492
493Be warned that neither creation nor deletion of files is guaranteed to
494be an atomic operation over NFS. That is, two processes might both
a6dd486b
JB
495successfully create or unlink the same file! Therefore O_EXCL
496isn't as exclusive as you might wish.
68dc0745 497
87275199 498See also the new L<perlopentut> if you have it (new for 5.6).
65acb1b1 499
04d666b1 500=head2 Why do I sometimes get an "Argument list too long" when I use E<lt>*E<gt>?
d74e8afc 501X<argument list too long>
68dc0745 502
c47ff5f1 503The C<< <> >> operator performs a globbing operation (see above).
3a4b19e4
GS
504In Perl versions earlier than v5.6.0, the internal glob() operator forks
505csh(1) to do the actual glob expansion, but
68dc0745 506csh can't handle more than 127 items and so gives the error message
507C<Argument list too long>. People who installed tcsh as csh won't
508have this problem, but their users may be surprised by it.
509
3a4b19e4 510To get around this, either upgrade to Perl v5.6.0 or later, do the glob
d6260402 511yourself with readdir() and patterns, or use a module like File::KGlob,
3a4b19e4 512one that doesn't use the shell to do globbing.
68dc0745 513
514=head2 Is there a leak/bug in glob()?
d74e8afc 515X<glob>
68dc0745 516
517Due to the current implementation on some operating systems, when you
518use the glob() function or its angle-bracket alias in a scalar
a6dd486b 519context, you may cause a memory leak and/or unpredictable behavior. It's
68dc0745 520best therefore to use glob() only in list context.
521
c47ff5f1 522=head2 How can I open a file with a leading ">" or trailing blanks?
d74e8afc 523X<filename, special characters>
68dc0745 524
b68463f7 525(contributed by Brian McCauley)
68dc0745 526
b68463f7
RGS
527The special two argument form of Perl's open() function ignores
528trailing blanks in filenames and infers the mode from certain leading
529characters (or a trailing "|"). In older versions of Perl this was the
530only version of open() and so it is prevalent in old code and books.
65acb1b1 531
b68463f7
RGS
532Unless you have a particular reason to use the two argument form you
533should use the three argument form of open() which does not treat any
534charcters in the filename as special.
58103a2e 535
881bdbd4
JH
536 open FILE, "<", " file "; # filename is " file "
537 open FILE, ">", ">file"; # filename is ">file"
65acb1b1 538
68dc0745 539=head2 How can I reliably rename a file?
d74e8afc 540X<rename> X<mv> X<move> X<file, rename> X<ren>
68dc0745 541
49d635f9
RGS
542If your operating system supports a proper mv(1) utility or its
543functional equivalent, this works:
68dc0745 544
500071f4 545 rename($old, $new) or system("mv", $old, $new);
68dc0745 546
d2321c93
JH
547It may be more portable to use the File::Copy module instead.
548You just copy to the new file to the new name (checking return
549values), then delete the old one. This isn't really the same
550semantically as a rename(), which preserves meta-information like
68dc0745 551permissions, timestamps, inode info, etc.
552
d2321c93 553Newer versions of File::Copy export a move() function.
5a964f20 554
68dc0745 555=head2 How can I lock a file?
d74e8afc 556X<lock> X<file, lock> X<flock>
68dc0745 557
54310121 558Perl's builtin flock() function (see L<perlfunc> for details) will call
68dc0745 559flock(2) if that exists, fcntl(2) if it doesn't (on perl version 5.004 and
560later), and lockf(3) if neither of the two previous system calls exists.
561On some systems, it may even use a different form of native locking.
562Here are some gotchas with Perl's flock():
563
564=over 4
565
566=item 1
567
568Produces a fatal error if none of the three system calls (or their
569close equivalent) exists.
570
571=item 2
572
573lockf(3) does not provide shared locking, and requires that the
574filehandle be open for writing (or appending, or read/writing).
575
576=item 3
577
d92eb7b0
GS
578Some versions of flock() can't lock files over a network (e.g. on NFS file
579systems), so you'd need to force the use of fcntl(2) when you build Perl.
a6dd486b 580But even this is dubious at best. See the flock entry of L<perlfunc>
d92eb7b0
GS
581and the F<INSTALL> file in the source distribution for information on
582building Perl to do this.
583
584Two potentially non-obvious but traditional flock semantics are that
a6dd486b 585it waits indefinitely until the lock is granted, and that its locks are
d92eb7b0
GS
586I<merely advisory>. Such discretionary locks are more flexible, but
587offer fewer guarantees. This means that files locked with flock() may
588be modified by programs that do not also use flock(). Cars that stop
589for red lights get on well with each other, but not with cars that don't
590stop for red lights. See the perlport manpage, your port's specific
591documentation, or your system-specific local manpages for details. It's
592best to assume traditional behavior if you're writing portable programs.
a6dd486b 593(If you're not, you should as always feel perfectly free to write
d92eb7b0
GS
594for your own system's idiosyncrasies (sometimes called "features").
595Slavish adherence to portability concerns shouldn't get in the way of
596your getting your job done.)
68dc0745 597
197aec24 598For more information on file locking, see also
13a2d996 599L<perlopentut/"File Locking"> if you have it (new for 5.6).
65acb1b1 600
68dc0745 601=back
602
04d666b1 603=head2 Why can't I just open(FH, "E<gt>file.lock")?
d74e8afc 604X<lock, lockfile race condition>
68dc0745 605
606A common bit of code B<NOT TO USE> is this:
607
500071f4
RGS
608 sleep(3) while -e "file.lock"; # PLEASE DO NOT USE
609 open(LCK, "> file.lock"); # THIS BROKEN CODE
68dc0745 610
611This is a classic race condition: you take two steps to do something
612which must be done in one. That's why computer hardware provides an
613atomic test-and-set instruction. In theory, this "ought" to work:
614
500071f4 615 sysopen(FH, "file.lock", O_WRONLY|O_EXCL|O_CREAT)
9b55d3ab 616 or die "can't open file.lock: $!";
68dc0745 617
618except that lamentably, file creation (and deletion) is not atomic
619over NFS, so this won't work (at least, not every time) over the net.
65acb1b1 620Various schemes involving link() have been suggested, but
46fc3d4c 621these tend to involve busy-wait, which is also subdesirable.
68dc0745 622
fc36a67e 623=head2 I still don't get locking. I just want to increment the number in the file. How can I do this?
d74e8afc 624X<counter> X<file, counter>
68dc0745 625
46fc3d4c 626Didn't anyone ever tell you web-page hit counters were useless?
5a964f20 627They don't count number of hits, they're a waste of time, and they serve
a6dd486b
JB
628only to stroke the writer's vanity. It's better to pick a random number;
629they're more realistic.
68dc0745 630
5a964f20 631Anyway, this is what you can do if you can't help yourself.
68dc0745 632
500071f4
RGS
633 use Fcntl qw(:DEFAULT :flock);
634 sysopen(FH, "numfile", O_RDWR|O_CREAT) or die "can't open numfile: $!";
635 flock(FH, LOCK_EX) or die "can't flock numfile: $!";
636 $num = <FH> || 0;
637 seek(FH, 0, 0) or die "can't rewind numfile: $!";
638 truncate(FH, 0) or die "can't truncate numfile: $!";
639 (print FH $num+1, "\n") or die "can't write numfile: $!";
640 close FH or die "can't close numfile: $!";
68dc0745 641
46fc3d4c 642Here's a much better web-page hit counter:
68dc0745 643
500071f4 644 $hits = int( (time() - 850_000_000) / rand(1_000) );
68dc0745 645
646If the count doesn't impress your friends, then the code might. :-)
647
f52f3be2 648=head2 All I want to do is append a small amount of text to the end of a file. Do I still have to use locking?
d74e8afc 649X<append> X<file, append>
05caf3a7
GJ
650
651If you are on a system that correctly implements flock() and you use the
652example appending code from "perldoc -f flock" everything will be OK
653even if the OS you are on doesn't implement append mode correctly (if
654such a system exists.) So if you are happy to restrict yourself to OSs
655that implement flock() (and that's not really much of a restriction)
656then that is what you should do.
657
658If you know you are only going to use a system that does correctly
659implement appending (i.e. not Win32) then you can omit the seek() from
660the above code.
661
662If you know you are only writing code to run on an OS and filesystem that
663does implement append mode correctly (a local filesystem on a modern
664Unix for example), and you keep the file in block-buffered mode and you
665write less than one buffer-full of output between each manual flushing
8305e449 666of the buffer then each bufferload is almost guaranteed to be written to
05caf3a7
GJ
667the end of the file in one chunk without getting intermingled with
668anyone else's output. You can also use the syswrite() function which is
669simply a wrapper around your systems write(2) system call.
670
671There is still a small theoretical chance that a signal will interrupt
672the system level write() operation before completion. There is also a
673possibility that some STDIO implementations may call multiple system
674level write()s even if the buffer was empty to start. There may be some
675systems where this probability is reduced to zero.
676
68dc0745 677=head2 How do I randomly update a binary file?
d74e8afc 678X<file, binary patch>
68dc0745 679
680If you're just trying to patch a binary, in many cases something as
681simple as this works:
682
500071f4 683 perl -i -pe 's{window manager}{window mangler}g' /usr/bin/emacs
68dc0745 684
685However, if you have fixed sized records, then you might do something more
686like this:
687
500071f4
RGS
688 $RECSIZE = 220; # size of record, in bytes
689 $recno = 37; # which record to update
690 open(FH, "+<somewhere") || die "can't update somewhere: $!";
691 seek(FH, $recno * $RECSIZE, 0);
692 read(FH, $record, $RECSIZE) == $RECSIZE || die "can't read record $recno: $!";
693 # munge the record
694 seek(FH, -$RECSIZE, 1);
695 print FH $record;
696 close FH;
68dc0745 697
698Locking and error checking are left as an exercise for the reader.
a6dd486b 699Don't forget them or you'll be quite sorry.
68dc0745 700
68dc0745 701=head2 How do I get a file's timestamp in perl?
d74e8afc 702X<timestamp> X<file, timestamp>
68dc0745 703
881bdbd4
JH
704If you want to retrieve the time at which the file was last
705read, written, or had its meta-data (owner, etc) changed,
a05e4845 706you use the B<-A>, B<-M>, or B<-C> file test operations as
881bdbd4
JH
707documented in L<perlfunc>. These retrieve the age of the
708file (measured against the start-time of your program) in
709days as a floating point number. Some platforms may not have
710all of these times. See L<perlport> for details. To
711retrieve the "raw" time in seconds since the epoch, you
712would call the stat function, then use localtime(),
713gmtime(), or POSIX::strftime() to convert this into
714human-readable form.
68dc0745 715
716Here's an example:
717
500071f4
RGS
718 $write_secs = (stat($file))[9];
719 printf "file %s updated at %s\n", $file,
c8db1d39 720 scalar localtime($write_secs);
68dc0745 721
722If you prefer something more legible, use the File::stat module
723(part of the standard distribution in version 5.004 and later):
724
500071f4
RGS
725 # error checking left as an exercise for reader.
726 use File::stat;
727 use Time::localtime;
728 $date_string = ctime(stat($file)->mtime);
729 print "file $file updated at $date_string\n";
68dc0745 730
65acb1b1
TC
731The POSIX::strftime() approach has the benefit of being,
732in theory, independent of the current locale. See L<perllocale>
733for details.
68dc0745 734
735=head2 How do I set a file's timestamp in perl?
d74e8afc 736X<timestamp> X<file, timestamp>
68dc0745 737
738You use the utime() function documented in L<perlfunc/utime>.
739By way of example, here's a little program that copies the
740read and write times from its first argument to all the rest
741of them.
742
500071f4
RGS
743 if (@ARGV < 2) {
744 die "usage: cptimes timestamp_file other_files ...\n";
745 }
746 $timestamp = shift;
747 ($atime, $mtime) = (stat($timestamp))[8,9];
748 utime $atime, $mtime, @ARGV;
68dc0745 749
65acb1b1 750Error checking is, as usual, left as an exercise for the reader.
68dc0745 751
19a1cd16
SP
752The perldoc for utime also has an example that has the same
753effect as touch(1) on files that I<already exist>.
754
755Certain file systems have a limited ability to store the times
756on a file at the expected level of precision. For example, the
757FAT and HPFS filesystem are unable to create dates on files with
758a finer granularity than two seconds. This is a limitation of
759the filesystems, not of utime().
68dc0745 760
761=head2 How do I print to more than one file at once?
d74e8afc 762X<print, to multiple files>
68dc0745 763
49d635f9
RGS
764To connect one filehandle to several output filehandles,
765you can use the IO::Tee or Tie::FileHandle::Multiplex modules.
68dc0745 766
49d635f9
RGS
767If you only have to do this once, you can print individually
768to each filehandle.
68dc0745 769
500071f4 770 for $fh (FH1, FH2, FH3) { print $fh "whatever\n" }
5a964f20 771
49d635f9 772=head2 How can I read in an entire file all at once?
d74e8afc 773X<slurp> X<file, slurping>
68dc0745 774
49d635f9 775You can use the File::Slurp module to do it in one step.
68dc0745 776
49d635f9 777 use File::Slurp;
197aec24 778
49d635f9 779 $all_of_it = read_file($filename); # entire file in scalar
500071f4 780 @all_lines = read_file($filename); # one line perl element
d92eb7b0
GS
781
782The customary Perl approach for processing all the lines in a file is to
783do so one line at a time:
784
500071f4
RGS
785 open (INPUT, $file) || die "can't open $file: $!";
786 while (<INPUT>) {
787 chomp;
788 # do something with $_
789 }
790 close(INPUT) || die "can't close $file: $!";
d92eb7b0
GS
791
792This is tremendously more efficient than reading the entire file into
793memory as an array of lines and then processing it one element at a time,
a6dd486b 794which is often--if not almost always--the wrong approach. Whenever
d92eb7b0
GS
795you see someone do this:
796
500071f4 797 @lines = <INPUT>;
d92eb7b0 798
30852c57
JH
799you should think long and hard about why you need everything loaded at
800once. It's just not a scalable solution. You might also find it more
801fun to use the standard Tie::File module, or the DB_File module's
802$DB_RECNO bindings, which allow you to tie an array to a file so that
803accessing an element the array actually accesses the corresponding
804line in the file.
d92eb7b0 805
f05bbc40 806You can read the entire filehandle contents into a scalar.
d92eb7b0 807
500071f4 808 {
d92eb7b0
GS
809 local(*INPUT, $/);
810 open (INPUT, $file) || die "can't open $file: $!";
811 $var = <INPUT>;
500071f4 812 }
d92eb7b0 813
197aec24 814That temporarily undefs your record separator, and will automatically
d92eb7b0
GS
815close the file at block exit. If the file is already open, just use this:
816
500071f4 817 $var = do { local $/; <INPUT> };
d92eb7b0 818
f05bbc40
JH
819For ordinary files you can also use the read function.
820
821 read( INPUT, $var, -s INPUT );
822
823The third argument tests the byte size of the data on the INPUT filehandle
824and reads that many bytes into the buffer $var.
825
68dc0745 826=head2 How can I read in a file by paragraphs?
d74e8afc 827X<file, reading by paragraphs>
68dc0745 828
65acb1b1 829Use the C<$/> variable (see L<perlvar> for details). You can either
68dc0745 830set it to C<""> to eliminate empty paragraphs (C<"abc\n\n\n\ndef">,
831for instance, gets treated as two paragraphs and not three), or
832C<"\n\n"> to accept empty paragraphs.
833
197aec24 834Note that a blank line must have no blanks in it. Thus
c4db748a 835S<C<"fred\n \nstuff\n\n">> is one paragraph, but C<"fred\n\nstuff\n\n"> is two.
65acb1b1 836
68dc0745 837=head2 How can I read a single character from a file? From the keyboard?
d74e8afc 838X<getc> X<file, reading one character at a time>
68dc0745 839
840You can use the builtin C<getc()> function for most filehandles, but
841it won't (easily) work on a terminal device. For STDIN, either use
a6dd486b 842the Term::ReadKey module from CPAN or use the sample code in
68dc0745 843L<perlfunc/getc>.
844
65acb1b1
TC
845If your system supports the portable operating system programming
846interface (POSIX), you can use the following code, which you'll note
847turns off echo processing as well.
68dc0745 848
500071f4
RGS
849 #!/usr/bin/perl -w
850 use strict;
851 $| = 1;
852 for (1..4) {
853 my $got;
854 print "gimme: ";
855 $got = getone();
856 print "--> $got\n";
857 }
68dc0745 858 exit;
859
500071f4 860 BEGIN {
68dc0745 861 use POSIX qw(:termios_h);
862
863 my ($term, $oterm, $echo, $noecho, $fd_stdin);
864
865 $fd_stdin = fileno(STDIN);
866
867 $term = POSIX::Termios->new();
868 $term->getattr($fd_stdin);
869 $oterm = $term->getlflag();
870
871 $echo = ECHO | ECHOK | ICANON;
872 $noecho = $oterm & ~$echo;
873
874 sub cbreak {
500071f4
RGS
875 $term->setlflag($noecho);
876 $term->setcc(VTIME, 1);
877 $term->setattr($fd_stdin, TCSANOW);
878 }
879
68dc0745 880 sub cooked {
500071f4
RGS
881 $term->setlflag($oterm);
882 $term->setcc(VTIME, 0);
883 $term->setattr($fd_stdin, TCSANOW);
884 }
68dc0745 885
886 sub getone {
500071f4
RGS
887 my $key = '';
888 cbreak();
889 sysread(STDIN, $key, 1);
890 cooked();
891 return $key;
892 }
68dc0745 893
500071f4 894 }
68dc0745 895
500071f4 896 END { cooked() }
68dc0745 897
a6dd486b 898The Term::ReadKey module from CPAN may be easier to use. Recent versions
65acb1b1 899include also support for non-portable systems as well.
68dc0745 900
500071f4
RGS
901 use Term::ReadKey;
902 open(TTY, "</dev/tty");
903 print "Gimme a char: ";
904 ReadMode "raw";
905 $key = ReadKey 0, *TTY;
906 ReadMode "normal";
907 printf "\nYou said %s, char number %03d\n",
908 $key, ord $key;
68dc0745 909
65acb1b1 910=head2 How can I tell whether there's a character waiting on a filehandle?
68dc0745 911
5a964f20 912The very first thing you should do is look into getting the Term::ReadKey
65acb1b1
TC
913extension from CPAN. As we mentioned earlier, it now even has limited
914support for non-portable (read: not open systems, closed, proprietary,
915not POSIX, not Unix, etc) systems.
5a964f20
TC
916
917You should also check out the Frequently Asked Questions list in
68dc0745 918comp.unix.* for things like this: the answer is essentially the same.
919It's very system dependent. Here's one solution that works on BSD
920systems:
921
500071f4
RGS
922 sub key_ready {
923 my($rin, $nfd);
924 vec($rin, fileno(STDIN), 1) = 1;
925 return $nfd = select($rin,undef,undef,0);
926 }
68dc0745 927
65acb1b1
TC
928If you want to find out how many characters are waiting, there's
929also the FIONREAD ioctl call to be looked at. The I<h2ph> tool that
930comes with Perl tries to convert C include files to Perl code, which
931can be C<require>d. FIONREAD ends up defined as a function in the
932I<sys/ioctl.ph> file:
68dc0745 933
500071f4 934 require 'sys/ioctl.ph';
68dc0745 935
500071f4
RGS
936 $size = pack("L", 0);
937 ioctl(FH, FIONREAD(), $size) or die "Couldn't call ioctl: $!\n";
938 $size = unpack("L", $size);
68dc0745 939
5a964f20
TC
940If I<h2ph> wasn't installed or doesn't work for you, you can
941I<grep> the include files by hand:
68dc0745 942
500071f4
RGS
943 % grep FIONREAD /usr/include/*/*
944 /usr/include/asm/ioctls.h:#define FIONREAD 0x541B
68dc0745 945
5a964f20 946Or write a small C program using the editor of champions:
68dc0745 947
500071f4
RGS
948 % cat > fionread.c
949 #include <sys/ioctl.h>
950 main() {
951 printf("%#08x\n", FIONREAD);
952 }
953 ^D
954 % cc -o fionread fionread.c
955 % ./fionread
956 0x4004667f
5a964f20 957
8305e449 958And then hard code it, leaving porting as an exercise to your successor.
5a964f20 959
500071f4 960 $FIONREAD = 0x4004667f; # XXX: opsys dependent
5a964f20 961
500071f4
RGS
962 $size = pack("L", 0);
963 ioctl(FH, $FIONREAD, $size) or die "Couldn't call ioctl: $!\n";
964 $size = unpack("L", $size);
5a964f20 965
a6dd486b 966FIONREAD requires a filehandle connected to a stream, meaning that sockets,
5a964f20 967pipes, and tty devices work, but I<not> files.
68dc0745 968
969=head2 How do I do a C<tail -f> in perl?
d74e8afc 970X<tail>
68dc0745 971
972First try
973
500071f4 974 seek(GWFILE, 0, 1);
68dc0745 975
976The statement C<seek(GWFILE, 0, 1)> doesn't change the current position,
977but it does clear the end-of-file condition on the handle, so that the
978next <GWFILE> makes Perl try again to read something.
979
980If that doesn't work (it relies on features of your stdio implementation),
981then you need something more like this:
982
983 for (;;) {
984 for ($curpos = tell(GWFILE); <GWFILE>; $curpos = tell(GWFILE)) {
985 # search for some stuff and put it into files
986 }
987 # sleep for a while
988 seek(GWFILE, $curpos, 0); # seek to where we had been
989 }
990
991If this still doesn't work, look into the POSIX module. POSIX defines
992the clearerr() method, which can remove the end of file condition on a
993filehandle. The method: read until end of file, clearerr(), read some
994more. Lather, rinse, repeat.
995
65acb1b1
TC
996There's also a File::Tail module from CPAN.
997
68dc0745 998=head2 How do I dup() a filehandle in Perl?
d74e8afc 999X<dup>
68dc0745 1000
1001If you check L<perlfunc/open>, you'll see that several of the ways
1002to call open() should do the trick. For example:
1003
500071f4
RGS
1004 open(LOG, ">>/foo/logfile");
1005 open(STDERR, ">&LOG");
68dc0745 1006
1007Or even with a literal numeric descriptor:
1008
1009 $fd = $ENV{MHCONTEXTFD};
1010 open(MHCONTEXT, "<&=$fd"); # like fdopen(3S)
1011
c47ff5f1 1012Note that "<&STDIN" makes a copy, but "<&=STDIN" make
5a964f20 1013an alias. That means if you close an aliased handle, all
197aec24 1014aliases become inaccessible. This is not true with
5a964f20
TC
1015a copied one.
1016
1017Error checking, as always, has been left as an exercise for the reader.
68dc0745 1018
1019=head2 How do I close a file descriptor by number?
d74e8afc 1020X<file, closing file descriptors>
68dc0745 1021
1022This should rarely be necessary, as the Perl close() function is to be
1023used for things that Perl opened itself, even if it was a dup of a
a6dd486b 1024numeric descriptor as with MHCONTEXT above. But if you really have
68dc0745 1025to, you may be able to do this:
1026
500071f4
RGS
1027 require 'sys/syscall.ph';
1028 $rc = syscall(&SYS_close, $fd + 0); # must force numeric
1029 die "can't sysclose $fd: $!" unless $rc == -1;
68dc0745 1030
a6dd486b 1031Or, just use the fdopen(3S) feature of open():
d92eb7b0 1032
500071f4 1033 {
197aec24 1034 local *F;
d92eb7b0
GS
1035 open F, "<&=$fd" or die "Cannot reopen fd=$fd: $!";
1036 close F;
500071f4 1037 }
d92eb7b0 1038
883f1635 1039=head2 Why can't I use "C:\temp\foo" in DOS paths? Why doesn't `C:\temp\foo.exe` work?
d74e8afc 1040X<filename, DOS issues>
68dc0745 1041
1042Whoops! You just put a tab and a formfeed into that filename!
1043Remember that within double quoted strings ("like\this"), the
1044backslash is an escape character. The full list of these is in
1045L<perlop/Quote and Quote-like Operators>. Unsurprisingly, you don't
1046have a file called "c:(tab)emp(formfeed)oo" or
65acb1b1 1047"c:(tab)emp(formfeed)oo.exe" on your legacy DOS filesystem.
68dc0745 1048
1049Either single-quote your strings, or (preferably) use forward slashes.
46fc3d4c 1050Since all DOS and Windows versions since something like MS-DOS 2.0 or so
68dc0745 1051have treated C</> and C<\> the same in a path, you might as well use the
a6dd486b 1052one that doesn't clash with Perl--or the POSIX shell, ANSI C and C++,
65acb1b1
TC
1053awk, Tcl, Java, or Python, just to mention a few. POSIX paths
1054are more portable, too.
68dc0745 1055
1056=head2 Why doesn't glob("*.*") get all the files?
d74e8afc 1057X<glob>
68dc0745 1058
1059Because even on non-Unix ports, Perl's glob function follows standard
46fc3d4c 1060Unix globbing semantics. You'll need C<glob("*")> to get all (non-hidden)
65acb1b1
TC
1061files. This makes glob() portable even to legacy systems. Your
1062port may include proprietary globbing functions as well. Check its
1063documentation for details.
68dc0745 1064
1065=head2 Why does Perl let me delete read-only files? Why does C<-i> clobber protected files? Isn't this a bug in Perl?
1066
06a5f41f
JH
1067This is elaborately and painstakingly described in the
1068F<file-dir-perms> article in the "Far More Than You Ever Wanted To
49d635f9 1069Know" collection in http://www.cpan.org/misc/olddoc/FMTEYEWTK.tgz .
68dc0745 1070
1071The executive summary: learn how your filesystem works. The
1072permissions on a file say what can happen to the data in that file.
1073The permissions on a directory say what can happen to the list of
1074files in that directory. If you delete a file, you're removing its
1075name from the directory (so the operation depends on the permissions
1076of the directory, not of the file). If you try to write to the file,
1077the permissions of the file govern whether you're allowed to.
1078
1079=head2 How do I select a random line from a file?
d74e8afc 1080X<file, selecting a random line>
68dc0745 1081
1082Here's an algorithm from the Camel Book:
1083
500071f4
RGS
1084 srand;
1085 rand($.) < 1 && ($line = $_) while <>;
68dc0745 1086
49d635f9
RGS
1087This has a significant advantage in space over reading the whole file
1088in. You can find a proof of this method in I<The Art of Computer
1089Programming>, Volume 2, Section 3.4.2, by Donald E. Knuth.
1090
1091You can use the File::Random module which provides a function
1092for that algorithm:
1093
1094 use File::Random qw/random_line/;
1095 my $line = random_line($filename);
1096
1097Another way is to use the Tie::File module, which treats the entire
1098file as an array. Simply access a random array element.
68dc0745 1099
65acb1b1
TC
1100=head2 Why do I get weird spaces when I print an array of lines?
1101
1102Saying
1103
500071f4 1104 print "@lines\n";
65acb1b1
TC
1105
1106joins together the elements of C<@lines> with a space between them.
1107If C<@lines> were C<("little", "fluffy", "clouds")> then the above
a6dd486b 1108statement would print
65acb1b1 1109
500071f4 1110 little fluffy clouds
65acb1b1
TC
1111
1112but if each element of C<@lines> was a line of text, ending a newline
1113character C<("little\n", "fluffy\n", "clouds\n")> then it would print:
1114
500071f4
RGS
1115 little
1116 fluffy
1117 clouds
65acb1b1
TC
1118
1119If your array contains lines, just print them:
1120
500071f4
RGS
1121 print @lines;
1122
1123=head1 REVISION
1124
1125Revision: $Revision: 3606 $
1126
1127Date: $Date: 2006-03-06 12:05:47 +0100 (lun, 06 mar 2006) $
1128
1129See L<perlfaq> for source control details and availability.
65acb1b1 1130
68dc0745 1131=head1 AUTHOR AND COPYRIGHT
1132
58103a2e 1133Copyright (c) 1997-2006 Tom Christiansen, Nathan Torkington, and
7678cced 1134other authors as noted. All rights reserved.
5a964f20 1135
5a7beb56
JH
1136This documentation is free; you can redistribute it and/or modify it
1137under the same terms as Perl itself.
c8db1d39 1138
87275199 1139Irrespective of its distribution, all code examples here are in the public
c8db1d39
TC
1140domain. You are permitted and encouraged to use this code and any
1141derivatives thereof in your own programs for fun or for profit as you
1142see fit. A simple comment in the code giving credit to the FAQ would
1143be courteous but is not required.