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