diff options
author | Ivan Tubert-Brohman <itub@cpan.org> | 2005-10-12 15:20:18 -0400 |
---|---|---|
committer | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2005-10-13 11:20:23 +0000 |
commit | d74e8afc9309529cf5c6c4390fc311850865d506 (patch) | |
tree | e2e6f5cb76495c762f9de01020f6d7eae39011dd /pod/perlfaq5.pod | |
parent | fab416db1cda0a357b1699b6efa75dd50332ea26 (diff) | |
download | perl-d74e8afc9309529cf5c6c4390fc311850865d506.tar.gz |
POD index entries with X<>
Message-ID: <434D9A32.4050305@cpan.org>
p4raw-id: //depot/perl@25748
Diffstat (limited to 'pod/perlfaq5.pod')
-rw-r--r-- | pod/perlfaq5.pod | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/pod/perlfaq5.pod b/pod/perlfaq5.pod index 85f1c546e5..bab49a2130 100644 --- a/pod/perlfaq5.pod +++ b/pod/perlfaq5.pod @@ -8,6 +8,7 @@ This section deals with I/O and the "f" issues: filehandles, flushing, formats, and footers. =head2 How do I flush/unbuffer an output filehandle? Why must I do this? +X<flush> X<buffer> X<unbuffer> X<autoflush> Perl does not support truly unbuffered output (except insofar as you can C<syswrite(OUT, $char, 1)>), although it @@ -61,11 +62,13 @@ or IO::Socket: $sock->autoflush(); =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? +X<file, editing> Use the Tie::File module, which is included in the standard distribution since Perl 5.8.0. =head2 How do I count the number of lines in a file? +X<file, counting lines> X<lines> X<line> One fairly efficient way is to count newlines in the file. The following program uses a feature of tr///, as documented in L<perlop>. @@ -82,6 +85,7 @@ proper text file, so this may report one fewer line than you expect. This assumes no funny games with newline translations. =head2 How can I use Perl's C<-i> option from within a program? +X<-i> X<in-place> C<-i> sets the value of Perl's C<$^I> variable, which in turn affects the behavior of C<< <> >>; see L<perlrun> for more details. By @@ -107,6 +111,7 @@ leaving a backup of the original data from each file in a new C<.c.orig> file. =head2 How can I copy a file? +X<copy> X<file, copy> (contributed by brian d foy) @@ -123,6 +128,7 @@ open the original file, open the destination file, then print to the destination file as you read the original. =head2 How do I make a temporary file name? +X<file, temporary> If you don't need to know the name of the file, you can use C<open()> with C<undef> in place of the file name. The C<open()> function @@ -175,6 +181,7 @@ temporary files in one process, use a counter: } =head2 How can I manipulate fixed-record-length files? +X<fixed-length> X<file, fixed-length records> The most efficient way is using L<pack()|perlfunc/"pack"> and L<unpack()|perlfunc/"unpack">. This is faster than using @@ -206,6 +213,7 @@ group or loop over them with for. It also avoids polluting the program with global variables and using symbolic references. =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? +X<filehandle, local> X<filehandle, passing> X<filehandle, reference> As of perl5.6, open() autovivifies file and directory handles as references if you pass it an uninitialized scalar variable. @@ -234,6 +242,7 @@ If you want to create many anonymous handles, you should check out the Symbol or IO::Handle modules. =head2 How can I use a filehandle indirectly? +X<filehandle, indirect> An indirect filehandle is using something other than a symbol in a place that a filehandle is expected. Here are ways @@ -329,15 +338,18 @@ It's the syntax of the fundamental operators. Playing the object game doesn't help you at all here. =head2 How can I set up a footer format to be used with write()? +X<footer> There's no builtin way to do this, but L<perlform> has a couple of techniques to make it possible for the intrepid hacker. =head2 How can I write() into a string? +X<write, into a string> See L<perlform/"Accessing Formatting Internals"> for an swrite() function. =head2 How can I output my numbers with commas added? +X<number, commify> (contributed by brian d foy and Benjamin Goldberg) @@ -373,6 +385,7 @@ It is easier to see with comments: )/$1,/xg; =head2 How can I translate tildes (~) in a filename? +X<tilde> X<tilde expansion> Use the <> (glob()) operator, documented in L<perlfunc>. Older versions of Perl require that you have a shell installed that groks @@ -395,6 +408,7 @@ Within Perl, you may use this directly: }ex; =head2 How come when I open a file read-write it wipes it out? +X<clobber> X<read-write> X<clobbering> X<truncate> X<truncating> Because you're using something like this, which truncates the file and I<then> gives you read-write access: @@ -468,6 +482,7 @@ isn't as exclusive as you might wish. See also the new L<perlopentut> if you have it (new for 5.6). =head2 Why do I sometimes get an "Argument list too long" when I use E<lt>*E<gt>? +X<argument list too long> The C<< <> >> operator performs a globbing operation (see above). In Perl versions earlier than v5.6.0, the internal glob() operator forks @@ -481,6 +496,7 @@ yourself with readdir() and patterns, or use a module like File::KGlob, one that doesn't use the shell to do globbing. =head2 Is there a leak/bug in glob()? +X<glob> Due to the current implementation on some operating systems, when you use the glob() function or its angle-bracket alias in a scalar @@ -488,6 +504,7 @@ context, you may cause a memory leak and/or unpredictable behavior. It's best therefore to use glob() only in list context. =head2 How can I open a file with a leading ">" or trailing blanks? +X<filename, special characters> (contributed by Brian McCauley) @@ -504,6 +521,7 @@ charcters in the filename as special. open FILE, ">", ">file"; # filename is ">file" =head2 How can I reliably rename a file? +X<rename> X<mv> X<move> X<file, rename> X<ren> If your operating system supports a proper mv(1) utility or its functional equivalent, this works: @@ -519,6 +537,7 @@ permissions, timestamps, inode info, etc. Newer versions of File::Copy export a move() function. =head2 How can I lock a file? +X<lock> X<file, lock> X<flock> Perl's builtin flock() function (see L<perlfunc> for details) will call flock(2) if that exists, fcntl(2) if it doesn't (on perl version 5.004 and @@ -566,6 +585,7 @@ L<perlopentut/"File Locking"> if you have it (new for 5.6). =back =head2 Why can't I just open(FH, "E<gt>file.lock")? +X<lock, lockfile race condition> A common bit of code B<NOT TO USE> is this: @@ -585,6 +605,7 @@ Various schemes involving link() have been suggested, but these tend to involve busy-wait, which is also subdesirable. =head2 I still don't get locking. I just want to increment the number in the file. How can I do this? +X<counter> X<file, counter> Didn't anyone ever tell you web-page hit counters were useless? They don't count number of hits, they're a waste of time, and they serve @@ -609,6 +630,7 @@ Here's a much better web-page hit counter: If the count doesn't impress your friends, then the code might. :-) =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? +X<append> X<file, append> If you are on a system that correctly implements flock() and you use the example appending code from "perldoc -f flock" everything will be OK @@ -637,6 +659,7 @@ level write()s even if the buffer was empty to start. There may be some systems where this probability is reduced to zero. =head2 How do I randomly update a binary file? +X<file, binary patch> If you're just trying to patch a binary, in many cases something as simple as this works: @@ -660,6 +683,7 @@ Locking and error checking are left as an exercise for the reader. Don't forget them or you'll be quite sorry. =head2 How do I get a file's timestamp in perl? +X<timestamp> X<file, timestamp> If you want to retrieve the time at which the file was last read, written, or had its meta-data (owner, etc) changed, @@ -693,6 +717,7 @@ in theory, independent of the current locale. See L<perllocale> for details. =head2 How do I set a file's timestamp in perl? +X<timestamp> X<file, timestamp> You use the utime() function documented in L<perlfunc/utime>. By way of example, here's a little program that copies the @@ -718,6 +743,7 @@ a finer granularity than two seconds. This is a limitation of the filesystems, not of utime(). =head2 How do I print to more than one file at once? +X<print, to multiple files> To connect one filehandle to several output filehandles, you can use the IO::Tee or Tie::FileHandle::Multiplex modules. @@ -728,6 +754,7 @@ to each filehandle. for $fh (FH1, FH2, FH3) { print $fh "whatever\n" } =head2 How can I read in an entire file all at once? +X<slurp> X<file, slurping> You can use the File::Slurp module to do it in one step. @@ -781,6 +808,7 @@ The third argument tests the byte size of the data on the INPUT filehandle and reads that many bytes into the buffer $var. =head2 How can I read in a file by paragraphs? +X<file, reading by paragraphs> Use the C<$/> variable (see L<perlvar> for details). You can either set it to C<""> to eliminate empty paragraphs (C<"abc\n\n\n\ndef">, @@ -791,6 +819,7 @@ Note that a blank line must have no blanks in it. Thus S<C<"fred\n \nstuff\n\n">> is one paragraph, but C<"fred\n\nstuff\n\n"> is two. =head2 How can I read a single character from a file? From the keyboard? +X<getc> X<file, reading one character at a time> You can use the builtin C<getc()> function for most filehandles, but it won't (easily) work on a terminal device. For STDIN, either use @@ -922,6 +951,7 @@ FIONREAD requires a filehandle connected to a stream, meaning that sockets, pipes, and tty devices work, but I<not> files. =head2 How do I do a C<tail -f> in perl? +X<tail> First try @@ -950,6 +980,7 @@ more. Lather, rinse, repeat. There's also a File::Tail module from CPAN. =head2 How do I dup() a filehandle in Perl? +X<dup> If you check L<perlfunc/open>, you'll see that several of the ways to call open() should do the trick. For example: @@ -970,6 +1001,7 @@ a copied one. Error checking, as always, has been left as an exercise for the reader. =head2 How do I close a file descriptor by number? +X<file, closing file descriptors> This should rarely be necessary, as the Perl close() function is to be used for things that Perl opened itself, even if it was a dup of a @@ -989,6 +1021,7 @@ Or, just use the fdopen(3S) feature of open(): } =head2 Why can't I use "C:\temp\foo" in DOS paths? Why doesn't `C:\temp\foo.exe` work? +X<filename, DOS issues> Whoops! You just put a tab and a formfeed into that filename! Remember that within double quoted strings ("like\this"), the @@ -1005,6 +1038,7 @@ awk, Tcl, Java, or Python, just to mention a few. POSIX paths are more portable, too. =head2 Why doesn't glob("*.*") get all the files? +X<glob> Because even on non-Unix ports, Perl's glob function follows standard Unix globbing semantics. You'll need C<glob("*")> to get all (non-hidden) @@ -1027,6 +1061,7 @@ of the directory, not of the file). If you try to write to the file, the permissions of the file govern whether you're allowed to. =head2 How do I select a random line from a file? +X<file, selecting a random line> Here's an algorithm from the Camel Book: |