This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Tweak tense, remove double spaces
[perl5.git] / pod / perlfaq8.pod
... / ...
CommitLineData
1=head1 NAME
2
3perlfaq8 - System Interaction
4
5=head1 DESCRIPTION
6
7This section of the Perl FAQ covers questions involving operating
8system interaction. Topics include interprocess communication (IPC),
9control over the user-interface (keyboard, screen and pointing
10devices), and most anything else not related to data manipulation.
11
12Read the FAQs and documentation specific to the port of perl to your
13operating system (eg, L<perlvms>, L<perlplan9>, ...). These should
14contain more detailed information on the vagaries of your perl.
15
16=head2 How do I find out which operating system I'm running under?
17
18The $^O variable ($OSNAME if you use English) contains an indication of
19the name of the operating system (not its release number) that your perl
20binary was built for.
21
22=head2 How come exec() doesn't return?
23X<exec> X<system> X<fork> X<open> X<pipe>
24
25(contributed by brian d foy)
26
27The C<exec> function's job is to turn your process into another
28command and never to return. If that's not what you want to do, don't
29use C<exec>. :)
30
31If you want to run an external command and still keep your Perl process
32going, look at a piped C<open>, C<fork>, or C<system>.
33
34=head2 How do I do fancy stuff with the keyboard/screen/mouse?
35
36How you access/control keyboards, screens, and pointing devices
37("mice") is system-dependent. Try the following modules:
38
39=over 4
40
41=item Keyboard
42
43 Term::Cap Standard perl distribution
44 Term::ReadKey CPAN
45 Term::ReadLine::Gnu CPAN
46 Term::ReadLine::Perl CPAN
47 Term::Screen CPAN
48
49=item Screen
50
51 Term::Cap Standard perl distribution
52 Curses CPAN
53 Term::ANSIColor CPAN
54
55=item Mouse
56
57 Tk CPAN
58
59=back
60
61Some of these specific cases are shown as examples in other answers
62in this section of the perlfaq.
63
64=head2 How do I print something out in color?
65
66In general, you don't, because you don't know whether
67the recipient has a color-aware display device. If you
68know that they have an ANSI terminal that understands
69color, you can use the Term::ANSIColor module from CPAN:
70
71 use Term::ANSIColor;
72 print color("red"), "Stop!\n", color("reset");
73 print color("green"), "Go!\n", color("reset");
74
75Or like this:
76
77 use Term::ANSIColor qw(:constants);
78 print RED, "Stop!\n", RESET;
79 print GREEN, "Go!\n", RESET;
80
81=head2 How do I read just one key without waiting for a return key?
82
83Controlling input buffering is a remarkably system-dependent matter.
84On many systems, you can just use the B<stty> command as shown in
85L<perlfunc/getc>, but as you see, that's already getting you into
86portability snags.
87
88 open(TTY, "+</dev/tty") or die "no tty: $!";
89 system "stty cbreak </dev/tty >/dev/tty 2>&1";
90 $key = getc(TTY); # perhaps this works
91 # OR ELSE
92 sysread(TTY, $key, 1); # probably this does
93 system "stty -cbreak </dev/tty >/dev/tty 2>&1";
94
95The Term::ReadKey module from CPAN offers an easy-to-use interface that
96should be more efficient than shelling out to B<stty> for each key.
97It even includes limited support for Windows.
98
99 use Term::ReadKey;
100 ReadMode('cbreak');
101 $key = ReadKey(0);
102 ReadMode('normal');
103
104However, using the code requires that you have a working C compiler
105and can use it to build and install a CPAN module. Here's a solution
106using the standard POSIX module, which is already on your systems
107(assuming your system supports POSIX).
108
109 use HotKey;
110 $key = readkey();
111
112And here's the HotKey module, which hides the somewhat mystifying calls
113to manipulate the POSIX termios structures.
114
115 # HotKey.pm
116 package HotKey;
117
118 @ISA = qw(Exporter);
119 @EXPORT = qw(cbreak cooked readkey);
120
121 use strict;
122 use POSIX qw(:termios_h);
123 my ($term, $oterm, $echo, $noecho, $fd_stdin);
124
125 $fd_stdin = fileno(STDIN);
126 $term = POSIX::Termios->new();
127 $term->getattr($fd_stdin);
128 $oterm = $term->getlflag();
129
130 $echo = ECHO | ECHOK | ICANON;
131 $noecho = $oterm & ~$echo;
132
133 sub cbreak {
134 $term->setlflag($noecho); # ok, so i don't want echo either
135 $term->setcc(VTIME, 1);
136 $term->setattr($fd_stdin, TCSANOW);
137 }
138
139 sub cooked {
140 $term->setlflag($oterm);
141 $term->setcc(VTIME, 0);
142 $term->setattr($fd_stdin, TCSANOW);
143 }
144
145 sub readkey {
146 my $key = '';
147 cbreak();
148 sysread(STDIN, $key, 1);
149 cooked();
150 return $key;
151 }
152
153 END { cooked() }
154
155 1;
156
157=head2 How do I check whether input is ready on the keyboard?
158
159The easiest way to do this is to read a key in nonblocking mode with the
160Term::ReadKey module from CPAN, passing it an argument of -1 to indicate
161not to block:
162
163 use Term::ReadKey;
164
165 ReadMode('cbreak');
166
167 if (defined ($char = ReadKey(-1)) ) {
168 # input was waiting and it was $char
169 } else {
170 # no input was waiting
171 }
172
173 ReadMode('normal'); # restore normal tty settings
174
175=head2 How do I clear the screen?
176
177(contributed by brian d foy)
178
179To clear the screen, you just have to print the special sequence
180that tells the terminal to clear the screen. Once you have that
181sequence, output it when you want to clear the screen.
182
183You can use the C<Term::ANSIScreen> module to get the special
184sequence. Import the C<cls> function (or the C<:screen> tag):
185
186 use Term::ANSIScreen qw(cls);
187 my $clear_screen = cls();
188
189 print $clear_screen;
190
191The C<Term::Cap> module can also get the special sequence if you want
192to deal with the low-level details of terminal control. The C<Tputs>
193method returns the string for the given capability:
194
195 use Term::Cap;
196
197 $terminal = Term::Cap->Tgetent( { OSPEED => 9600 } );
198 $clear_string = $terminal->Tputs('cl');
199
200 print $clear_screen;
201
202On Windows, you can use the C<Win32::Console> module. After creating
203an object for the output filehandle you want to affect, call the
204C<Cls> method:
205
206 Win32::Console;
207
208 $OUT = Win32::Console->new(STD_OUTPUT_HANDLE);
209 my $clear_string = $OUT->Cls;
210
211 print $clear_screen;
212
213If you have a command-line program that does the job, you can call
214it in backticks to capture whatever it outputs so you can use it
215later:
216
217 $clear_string = `clear`;
218
219 print $clear_string;
220
221=head2 How do I get the screen size?
222
223If you have Term::ReadKey module installed from CPAN,
224you can use it to fetch the width and height in characters
225and in pixels:
226
227 use Term::ReadKey;
228 ($wchar, $hchar, $wpixels, $hpixels) = GetTerminalSize();
229
230This is more portable than the raw C<ioctl>, but not as
231illustrative:
232
233 require 'sys/ioctl.ph';
234 die "no TIOCGWINSZ " unless defined &TIOCGWINSZ;
235 open(TTY, "+</dev/tty") or die "No tty: $!";
236 unless (ioctl(TTY, &TIOCGWINSZ, $winsize='')) {
237 die sprintf "$0: ioctl TIOCGWINSZ (%08x: $!)\n", &TIOCGWINSZ;
238 }
239 ($row, $col, $xpixel, $ypixel) = unpack('S4', $winsize);
240 print "(row,col) = ($row,$col)";
241 print " (xpixel,ypixel) = ($xpixel,$ypixel)" if $xpixel || $ypixel;
242 print "\n";
243
244=head2 How do I ask the user for a password?
245
246(This question has nothing to do with the web. See a different
247FAQ for that.)
248
249There's an example of this in L<perlfunc/crypt>). First, you put the
250terminal into "no echo" mode, then just read the password normally.
251You may do this with an old-style ioctl() function, POSIX terminal
252control (see L<POSIX> or its documentation the Camel Book), or a call
253to the B<stty> program, with varying degrees of portability.
254
255You can also do this for most systems using the Term::ReadKey module
256from CPAN, which is easier to use and in theory more portable.
257
258 use Term::ReadKey;
259
260 ReadMode('noecho');
261 $password = ReadLine(0);
262
263=head2 How do I read and write the serial port?
264
265This depends on which operating system your program is running on. In
266the case of Unix, the serial ports will be accessible through files in
267/dev; on other systems, device names will doubtless differ.
268Several problem areas common to all device interaction are the
269following:
270
271=over 4
272
273=item lockfiles
274
275Your system may use lockfiles to control multiple access. Make sure
276you follow the correct protocol. Unpredictable behavior can result
277from multiple processes reading from one device.
278
279=item open mode
280
281If you expect to use both read and write operations on the device,
282you'll have to open it for update (see L<perlfunc/"open"> for
283details). You may wish to open it without running the risk of
284blocking by using sysopen() and C<O_RDWR|O_NDELAY|O_NOCTTY> from the
285Fcntl module (part of the standard perl distribution). See
286L<perlfunc/"sysopen"> for more on this approach.
287
288=item end of line
289
290Some devices will be expecting a "\r" at the end of each line rather
291than a "\n". In some ports of perl, "\r" and "\n" are different from
292their usual (Unix) ASCII values of "\012" and "\015". You may have to
293give the numeric values you want directly, using octal ("\015"), hex
294("0x0D"), or as a control-character specification ("\cM").
295
296 print DEV "atv1\012"; # wrong, for some devices
297 print DEV "atv1\015"; # right, for some devices
298
299Even though with normal text files a "\n" will do the trick, there is
300still no unified scheme for terminating a line that is portable
301between Unix, DOS/Win, and Macintosh, except to terminate I<ALL> line
302ends with "\015\012", and strip what you don't need from the output.
303This applies especially to socket I/O and autoflushing, discussed
304next.
305
306=item flushing output
307
308If you expect characters to get to your device when you print() them,
309you'll want to autoflush that filehandle. You can use select()
310and the C<$|> variable to control autoflushing (see L<perlvar/$E<verbar>>
311and L<perlfunc/select>, or L<perlfaq5>, "How do I flush/unbuffer an
312output filehandle? Why must I do this?"):
313
314 $oldh = select(DEV);
315 $| = 1;
316 select($oldh);
317
318You'll also see code that does this without a temporary variable, as in
319
320 select((select(DEV), $| = 1)[0]);
321
322Or if you don't mind pulling in a few thousand lines
323of code just because you're afraid of a little $| variable:
324
325 use IO::Handle;
326 DEV->autoflush(1);
327
328As mentioned in the previous item, this still doesn't work when using
329socket I/O between Unix and Macintosh. You'll need to hard code your
330line terminators, in that case.
331
332=item non-blocking input
333
334If you are doing a blocking read() or sysread(), you'll have to
335arrange for an alarm handler to provide a timeout (see
336L<perlfunc/alarm>). If you have a non-blocking open, you'll likely
337have a non-blocking read, which means you may have to use a 4-arg
338select() to determine whether I/O is ready on that device (see
339L<perlfunc/"select">.
340
341=back
342
343While trying to read from his caller-id box, the notorious Jamie Zawinski
344C<< <jwz@netscape.com> >>, after much gnashing of teeth and fighting with sysread,
345sysopen, POSIX's tcgetattr business, and various other functions that
346go bump in the night, finally came up with this:
347
348 sub open_modem {
349 use IPC::Open2;
350 my $stty = `/bin/stty -g`;
351 open2( \*MODEM_IN, \*MODEM_OUT, "cu -l$modem_device -s2400 2>&1");
352 # starting cu hoses /dev/tty's stty settings, even when it has
353 # been opened on a pipe...
354 system("/bin/stty $stty");
355 $_ = <MODEM_IN>;
356 chomp;
357 if ( !m/^Connected/ ) {
358 print STDERR "$0: cu printed `$_' instead of `Connected'\n";
359 }
360 }
361
362=head2 How do I decode encrypted password files?
363
364You spend lots and lots of money on dedicated hardware, but this is
365bound to get you talked about.
366
367Seriously, you can't if they are Unix password files--the Unix
368password system employs one-way encryption. It's more like hashing
369than encryption. The best you can do is check whether something else
370hashes to the same string. You can't turn a hash back into the
371original string. Programs like Crack can forcibly (and intelligently)
372try to guess passwords, but don't (can't) guarantee quick success.
373
374If you're worried about users selecting bad passwords, you should
375proactively check when they try to change their password (by modifying
376passwd(1), for example).
377
378=head2 How do I start a process in the background?
379
380(contributed by brian d foy)
381
382There's not a single way to run code in the background so you don't
383have to wait for it to finish before your program moves on to other
384tasks. Process management depends on your particular operating system,
385and many of the techniques are in L<perlipc>.
386
387Several CPAN modules may be able to help, including IPC::Open2 or
388IPC::Open3, IPC::Run, Parallel::Jobs, Parallel::ForkManager, POE,
389Proc::Background, and Win32::Process. There are many other modules you
390might use, so check those namespaces for other options too.
391
392If you are on a unix-like system, you might be able to get away with a
393system call where you put an C<&> on the end of the command:
394
395 system("cmd &")
396
397You can also try using C<fork>, as described in L<perlfunc> (although
398this is the same thing that many of the modules will do for you).
399
400=over 4
401
402=item STDIN, STDOUT, and STDERR are shared
403
404Both the main process and the backgrounded one (the "child" process)
405share the same STDIN, STDOUT and STDERR filehandles. If both try to
406access them at once, strange things can happen. You may want to close
407or reopen these for the child. You can get around this with
408C<open>ing a pipe (see L<perlfunc/"open">) but on some systems this
409means that the child process cannot outlive the parent.
410
411=item Signals
412
413You'll have to catch the SIGCHLD signal, and possibly SIGPIPE too.
414SIGCHLD is sent when the backgrounded process finishes. SIGPIPE is
415sent when you write to a filehandle whose child process has closed (an
416untrapped SIGPIPE can cause your program to silently die). This is
417not an issue with C<system("cmd&")>.
418
419=item Zombies
420
421You have to be prepared to "reap" the child process when it finishes.
422
423 $SIG{CHLD} = sub { wait };
424
425 $SIG{CHLD} = 'IGNORE';
426
427You can also use a double fork. You immediately wait() for your
428first child, and the init daemon will wait() for your grandchild once
429it exits.
430
431 unless ($pid = fork) {
432 unless (fork) {
433 exec "what you really wanna do";
434 die "exec failed!";
435 }
436 exit 0;
437 }
438 waitpid($pid, 0);
439
440See L<perlipc/"Signals"> for other examples of code to do this.
441Zombies are not an issue with C<system("prog &")>.
442
443=back
444
445=head2 How do I trap control characters/signals?
446
447You don't actually "trap" a control character. Instead, that character
448generates a signal which is sent to your terminal's currently
449foregrounded process group, which you then trap in your process.
450Signals are documented in L<perlipc/"Signals"> and the
451section on "Signals" in the Camel.
452
453You can set the values of the %SIG hash to be the functions you want
454to handle the signal. After perl catches the signal, it looks in %SIG
455for a key with the same name as the signal, then calls the subroutine
456value for that key.
457
458 # as an anonymous subroutine
459
460 $SIG{INT} = sub { syswrite(STDERR, "ouch\n", 5 ) };
461
462 # or a reference to a function
463
464 $SIG{INT} = \&ouch;
465
466 # or the name of the function as a string
467
468 $SIG{INT} = "ouch";
469
470Perl versions before 5.8 had in its C source code signal handlers which
471would catch the signal and possibly run a Perl function that you had set
472in %SIG. This violated the rules of signal handling at that level
473causing perl to dump core. Since version 5.8.0, perl looks at %SIG
474*after* the signal has been caught, rather than while it is being caught.
475Previous versions of this answer were incorrect.
476
477=head2 How do I modify the shadow password file on a Unix system?
478
479If perl was installed correctly and your shadow library was written
480properly, the getpw*() functions described in L<perlfunc> should in
481theory provide (read-only) access to entries in the shadow password
482file. To change the file, make a new shadow password file (the format
483varies from system to system--see L<passwd> for specifics) and use
484pwd_mkdb(8) to install it (see L<pwd_mkdb> for more details).
485
486=head2 How do I set the time and date?
487
488Assuming you're running under sufficient permissions, you should be
489able to set the system-wide date and time by running the date(1)
490program. (There is no way to set the time and date on a per-process
491basis.) This mechanism will work for Unix, MS-DOS, Windows, and NT;
492the VMS equivalent is C<set time>.
493
494However, if all you want to do is change your time zone, you can
495probably get away with setting an environment variable:
496
497 $ENV{TZ} = "MST7MDT"; # unixish
498 $ENV{'SYS$TIMEZONE_DIFFERENTIAL'}="-5" # vms
499 system "trn comp.lang.perl.misc";
500
501=head2 How can I sleep() or alarm() for under a second?
502X<Time::HiRes> X<BSD::Itimer> X<sleep> X<select>
503
504If you want finer granularity than the 1 second that the C<sleep()>
505function provides, the easiest way is to use the C<select()> function as
506documented in L<perlfunc/"select">. Try the C<Time::HiRes> and
507the C<BSD::Itimer> modules (available from CPAN, and starting from
508Perl 5.8 C<Time::HiRes> is part of the standard distribution).
509
510=head2 How can I measure time under a second?
511X<Time::HiRes> X<BSD::Itimer> X<sleep> X<select>
512
513(contributed by brian d foy)
514
515The C<Time::HiRes> module (part of the standard distribution as of
516Perl 5.8) measures time with the C<gettimeofday()> system call, which
517returns the time in microseconds since the epoch. If you can't install
518C<Time::HiRes> for older Perls and you are on a Unixish system, you
519may be able to call C<gettimeofday(2)> directly. See
520L<perlfunc/syscall>.
521
522=head2 How can I do an atexit() or setjmp()/longjmp()? (Exception handling)
523
524Release 5 of Perl added the END block, which can be used to simulate
525atexit(). Each package's END block is called when the program or
526thread ends (see L<perlmod> manpage for more details).
527
528For example, you can use this to make sure your filter program
529managed to finish its output without filling up the disk:
530
531 END {
532 close(STDOUT) || die "stdout close failed: $!";
533 }
534
535The END block isn't called when untrapped signals kill the program,
536though, so if you use END blocks you should also use
537
538 use sigtrap qw(die normal-signals);
539
540Perl's exception-handling mechanism is its eval() operator. You can
541use eval() as setjmp and die() as longjmp. For details of this, see
542the section on signals, especially the time-out handler for a blocking
543flock() in L<perlipc/"Signals"> or the section on "Signals" in
544the Camel Book.
545
546If exception handling is all you're interested in, try the
547exceptions.pl library (part of the standard perl distribution).
548
549If you want the atexit() syntax (and an rmexit() as well), try the
550AtExit module available from CPAN.
551
552=head2 Why doesn't my sockets program work under System V (Solaris)? What does the error message "Protocol not supported" mean?
553
554Some Sys-V based systems, notably Solaris 2.X, redefined some of the
555standard socket constants. Since these were constant across all
556architectures, they were often hardwired into perl code. The proper
557way to deal with this is to "use Socket" to get the correct values.
558
559Note that even though SunOS and Solaris are binary compatible, these
560values are different. Go figure.
561
562=head2 How can I call my system's unique C functions from Perl?
563
564In most cases, you write an external module to do it--see the answer
565to "Where can I learn about linking C with Perl? [h2xs, xsubpp]".
566However, if the function is a system call, and your system supports
567syscall(), you can use the syscall function (documented in
568L<perlfunc>).
569
570Remember to check the modules that came with your distribution, and
571CPAN as well--someone may already have written a module to do it. On
572Windows, try Win32::API. On Macs, try Mac::Carbon. If no module
573has an interface to the C function, you can inline a bit of C in your
574Perl source with Inline::C.
575
576=head2 Where do I get the include files to do ioctl() or syscall()?
577
578Historically, these would be generated by the h2ph tool, part of the
579standard perl distribution. This program converts cpp(1) directives
580in C header files to files containing subroutine definitions, like
581&SYS_getitimer, which you can use as arguments to your functions.
582It doesn't work perfectly, but it usually gets most of the job done.
583Simple files like F<errno.h>, F<syscall.h>, and F<socket.h> were fine,
584but the hard ones like F<ioctl.h> nearly always need to hand-edited.
585Here's how to install the *.ph files:
586
587 1. become super-user
588 2. cd /usr/include
589 3. h2ph *.h */*.h
590
591If your system supports dynamic loading, for reasons of portability and
592sanity you probably ought to use h2xs (also part of the standard perl
593distribution). This tool converts C header files to Perl extensions.
594See L<perlxstut> for how to get started with h2xs.
595
596If your system doesn't support dynamic loading, you still probably
597ought to use h2xs. See L<perlxstut> and L<ExtUtils::MakeMaker> for
598more information (in brief, just use B<make perl> instead of a plain
599B<make> to rebuild perl with a new static extension).
600
601=head2 Why do setuid perl scripts complain about kernel problems?
602
603Some operating systems have bugs in the kernel that make setuid
604scripts inherently insecure. Perl gives you a number of options
605(described in L<perlsec>) to work around such systems.
606
607=head2 How can I open a pipe both to and from a command?
608
609The IPC::Open2 module (part of the standard perl distribution) is an
610easy-to-use approach that internally uses pipe(), fork(), and exec() to do
611the job. Make sure you read the deadlock warnings in its documentation,
612though (see L<IPC::Open2>). See
613L<perlipc/"Bidirectional Communication with Another Process"> and
614L<perlipc/"Bidirectional Communication with Yourself">
615
616You may also use the IPC::Open3 module (part of the standard perl
617distribution), but be warned that it has a different order of
618arguments from IPC::Open2 (see L<IPC::Open3>).
619
620=head2 Why can't I get the output of a command with system()?
621
622You're confusing the purpose of system() and backticks (``). system()
623runs a command and returns exit status information (as a 16 bit value:
624the low 7 bits are the signal the process died from, if any, and
625the high 8 bits are the actual exit value). Backticks (``) run a
626command and return what it sent to STDOUT.
627
628 $exit_status = system("mail-users");
629 $output_string = `ls`;
630
631=head2 How can I capture STDERR from an external command?
632
633There are three basic ways of running external commands:
634
635 system $cmd; # using system()
636 $output = `$cmd`; # using backticks (``)
637 open (PIPE, "cmd |"); # using open()
638
639With system(), both STDOUT and STDERR will go the same place as the
640script's STDOUT and STDERR, unless the system() command redirects them.
641Backticks and open() read B<only> the STDOUT of your command.
642
643You can also use the open3() function from IPC::Open3. Benjamin
644Goldberg provides some sample code:
645
646To capture a program's STDOUT, but discard its STDERR:
647
648 use IPC::Open3;
649 use File::Spec;
650 use Symbol qw(gensym);
651 open(NULL, ">", File::Spec->devnull);
652 my $pid = open3(gensym, \*PH, ">&NULL", "cmd");
653 while( <PH> ) { }
654 waitpid($pid, 0);
655
656To capture a program's STDERR, but discard its STDOUT:
657
658 use IPC::Open3;
659 use File::Spec;
660 use Symbol qw(gensym);
661 open(NULL, ">", File::Spec->devnull);
662 my $pid = open3(gensym, ">&NULL", \*PH, "cmd");
663 while( <PH> ) { }
664 waitpid($pid, 0);
665
666To capture a program's STDERR, and let its STDOUT go to our own STDERR:
667
668 use IPC::Open3;
669 use Symbol qw(gensym);
670 my $pid = open3(gensym, ">&STDERR", \*PH, "cmd");
671 while( <PH> ) { }
672 waitpid($pid, 0);
673
674To read both a command's STDOUT and its STDERR separately, you can
675redirect them to temp files, let the command run, then read the temp
676files:
677
678 use IPC::Open3;
679 use Symbol qw(gensym);
680 use IO::File;
681 local *CATCHOUT = IO::File->new_tmpfile;
682 local *CATCHERR = IO::File->new_tmpfile;
683 my $pid = open3(gensym, ">&CATCHOUT", ">&CATCHERR", "cmd");
684 waitpid($pid, 0);
685 seek $_, 0, 0 for \*CATCHOUT, \*CATCHERR;
686 while( <CATCHOUT> ) {}
687 while( <CATCHERR> ) {}
688
689But there's no real need for *both* to be tempfiles... the following
690should work just as well, without deadlocking:
691
692 use IPC::Open3;
693 use Symbol qw(gensym);
694 use IO::File;
695 local *CATCHERR = IO::File->new_tmpfile;
696 my $pid = open3(gensym, \*CATCHOUT, ">&CATCHERR", "cmd");
697 while( <CATCHOUT> ) {}
698 waitpid($pid, 0);
699 seek CATCHERR, 0, 0;
700 while( <CATCHERR> ) {}
701
702And it'll be faster, too, since we can begin processing the program's
703stdout immediately, rather than waiting for the program to finish.
704
705With any of these, you can change file descriptors before the call:
706
707 open(STDOUT, ">logfile");
708 system("ls");
709
710or you can use Bourne shell file-descriptor redirection:
711
712 $output = `$cmd 2>some_file`;
713 open (PIPE, "cmd 2>some_file |");
714
715You can also use file-descriptor redirection to make STDERR a
716duplicate of STDOUT:
717
718 $output = `$cmd 2>&1`;
719 open (PIPE, "cmd 2>&1 |");
720
721Note that you I<cannot> simply open STDERR to be a dup of STDOUT
722in your Perl program and avoid calling the shell to do the redirection.
723This doesn't work:
724
725 open(STDERR, ">&STDOUT");
726 $alloutput = `cmd args`; # stderr still escapes
727
728This fails because the open() makes STDERR go to where STDOUT was
729going at the time of the open(). The backticks then make STDOUT go to
730a string, but don't change STDERR (which still goes to the old
731STDOUT).
732
733Note that you I<must> use Bourne shell (sh(1)) redirection syntax in
734backticks, not csh(1)! Details on why Perl's system() and backtick
735and pipe opens all use the Bourne shell are in the
736F<versus/csh.whynot> article in the "Far More Than You Ever Wanted To
737Know" collection in http://www.cpan.org/misc/olddoc/FMTEYEWTK.tgz . To
738capture a command's STDERR and STDOUT together:
739
740 $output = `cmd 2>&1`; # either with backticks
741 $pid = open(PH, "cmd 2>&1 |"); # or with an open pipe
742 while (<PH>) { } # plus a read
743
744To capture a command's STDOUT but discard its STDERR:
745
746 $output = `cmd 2>/dev/null`; # either with backticks
747 $pid = open(PH, "cmd 2>/dev/null |"); # or with an open pipe
748 while (<PH>) { } # plus a read
749
750To capture a command's STDERR but discard its STDOUT:
751
752 $output = `cmd 2>&1 1>/dev/null`; # either with backticks
753 $pid = open(PH, "cmd 2>&1 1>/dev/null |"); # or with an open pipe
754 while (<PH>) { } # plus a read
755
756To exchange a command's STDOUT and STDERR in order to capture the STDERR
757but leave its STDOUT to come out our old STDERR:
758
759 $output = `cmd 3>&1 1>&2 2>&3 3>&-`; # either with backticks
760 $pid = open(PH, "cmd 3>&1 1>&2 2>&3 3>&-|");# or with an open pipe
761 while (<PH>) { } # plus a read
762
763To read both a command's STDOUT and its STDERR separately, it's easiest
764to redirect them separately to files, and then read from those files
765when the program is done:
766
767 system("program args 1>program.stdout 2>program.stderr");
768
769Ordering is important in all these examples. That's because the shell
770processes file descriptor redirections in strictly left to right order.
771
772 system("prog args 1>tmpfile 2>&1");
773 system("prog args 2>&1 1>tmpfile");
774
775The first command sends both standard out and standard error to the
776temporary file. The second command sends only the old standard output
777there, and the old standard error shows up on the old standard out.
778
779=head2 Why doesn't open() return an error when a pipe open fails?
780
781If the second argument to a piped open() contains shell
782metacharacters, perl fork()s, then exec()s a shell to decode the
783metacharacters and eventually run the desired program. If the program
784couldn't be run, it's the shell that gets the message, not Perl. All
785your Perl program can find out is whether the shell itself could be
786successfully started. You can still capture the shell's STDERR and
787check it for error messages. See L<"How can I capture STDERR from an
788external command?"> elsewhere in this document, or use the
789IPC::Open3 module.
790
791If there are no shell metacharacters in the argument of open(), Perl
792runs the command directly, without using the shell, and can correctly
793report whether the command started.
794
795=head2 What's wrong with using backticks in a void context?
796
797Strictly speaking, nothing. Stylistically speaking, it's not a good
798way to write maintainable code. Perl has several operators for
799running external commands. Backticks are one; they collect the output
800from the command for use in your program. The C<system> function is
801another; it doesn't do this.
802
803Writing backticks in your program sends a clear message to the readers
804of your code that you wanted to collect the output of the command.
805Why send a clear message that isn't true?
806
807Consider this line:
808
809 `cat /etc/termcap`;
810
811You forgot to check C<$?> to see whether the program even ran
812correctly. Even if you wrote
813
814 print `cat /etc/termcap`;
815
816this code could and probably should be written as
817
818 system("cat /etc/termcap") == 0
819 or die "cat program failed!";
820
821which will echo the cat command's output as it is generated, instead
822of waiting until the program has completed to print it out. It also
823checks the return value.
824
825C<system> also provides direct control over whether shell wildcard
826processing may take place, whereas backticks do not.
827
828=head2 How can I call backticks without shell processing?
829
830This is a bit tricky. You can't simply write the command
831like this:
832
833 @ok = `grep @opts '$search_string' @filenames`;
834
835As of Perl 5.8.0, you can use C<open()> with multiple arguments.
836Just like the list forms of C<system()> and C<exec()>, no shell
837escapes happen.
838
839 open( GREP, "-|", 'grep', @opts, $search_string, @filenames );
840 chomp(@ok = <GREP>);
841 close GREP;
842
843You can also:
844
845 my @ok = ();
846 if (open(GREP, "-|")) {
847 while (<GREP>) {
848 chomp;
849 push(@ok, $_);
850 }
851 close GREP;
852 } else {
853 exec 'grep', @opts, $search_string, @filenames;
854 }
855
856Just as with C<system()>, no shell escapes happen when you C<exec()> a
857list. Further examples of this can be found in L<perlipc/"Safe Pipe
858Opens">.
859
860Note that if you're using Windows, no solution to this vexing issue is
861even possible. Even if Perl were to emulate C<fork()>, you'd still be
862stuck, because Windows does not have an argc/argv-style API.
863
864=head2 Why can't my script read from STDIN after I gave it EOF (^D on Unix, ^Z on MS-DOS)?
865
866This happens only if your perl is compiled to use stdio instead of
867perlio, which is the default. Some (maybe all?) stdio's set error and
868eof flags that you may need to clear. The POSIX module defines
869clearerr() that you can use. That is the technically correct way to
870do it. Here are some less reliable workarounds:
871
872=over 4
873
874=item 1
875
876Try keeping around the seekpointer and go there, like this:
877
878 $where = tell(LOG);
879 seek(LOG, $where, 0);
880
881=item 2
882
883If that doesn't work, try seeking to a different part of the file and
884then back.
885
886=item 3
887
888If that doesn't work, try seeking to a different part of
889the file, reading something, and then seeking back.
890
891=item 4
892
893If that doesn't work, give up on your stdio package and use sysread.
894
895=back
896
897=head2 How can I convert my shell script to perl?
898
899Learn Perl and rewrite it. Seriously, there's no simple converter.
900Things that are awkward to do in the shell are easy to do in Perl, and
901this very awkwardness is what would make a shell->perl converter
902nigh-on impossible to write. By rewriting it, you'll think about what
903you're really trying to do, and hopefully will escape the shell's
904pipeline datastream paradigm, which while convenient for some matters,
905causes many inefficiencies.
906
907=head2 Can I use perl to run a telnet or ftp session?
908
909Try the Net::FTP, TCP::Client, and Net::Telnet modules (available from
910CPAN). http://www.cpan.org/scripts/netstuff/telnet.emul.shar
911will also help for emulating the telnet protocol, but Net::Telnet is
912quite probably easier to use..
913
914If all you want to do is pretend to be telnet but don't need
915the initial telnet handshaking, then the standard dual-process
916approach will suffice:
917
918 use IO::Socket; # new in 5.004
919 $handle = IO::Socket::INET->new('www.perl.com:80')
920 or die "can't connect to port 80 on www.perl.com: $!";
921 $handle->autoflush(1);
922 if (fork()) { # XXX: undef means failure
923 select($handle);
924 print while <STDIN>; # everything from stdin to socket
925 } else {
926 print while <$handle>; # everything from socket to stdout
927 }
928 close $handle;
929 exit;
930
931=head2 How can I write expect in Perl?
932
933Once upon a time, there was a library called chat2.pl (part of the
934standard perl distribution), which never really got finished. If you
935find it somewhere, I<don't use it>. These days, your best bet is to
936look at the Expect module available from CPAN, which also requires two
937other modules from CPAN, IO::Pty and IO::Stty.
938
939=head2 Is there a way to hide perl's command line from programs such as "ps"?
940
941First of all note that if you're doing this for security reasons (to
942avoid people seeing passwords, for example) then you should rewrite
943your program so that critical information is never given as an
944argument. Hiding the arguments won't make your program completely
945secure.
946
947To actually alter the visible command line, you can assign to the
948variable $0 as documented in L<perlvar>. This won't work on all
949operating systems, though. Daemon programs like sendmail place their
950state there, as in:
951
952 $0 = "orcus [accepting connections]";
953
954=head2 I {changed directory, modified my environment} in a perl script. How come the change disappeared when I exited the script? How do I get my changes to be visible?
955
956=over 4
957
958=item Unix
959
960In the strictest sense, it can't be done--the script executes as a
961different process from the shell it was started from. Changes to a
962process are not reflected in its parent--only in any children
963created after the change. There is shell magic that may allow you to
964fake it by eval()ing the script's output in your shell; check out the
965comp.unix.questions FAQ for details.
966
967=back
968
969=head2 How do I close a process's filehandle without waiting for it to complete?
970
971Assuming your system supports such things, just send an appropriate signal
972to the process (see L<perlfunc/"kill">). It's common to first send a TERM
973signal, wait a little bit, and then send a KILL signal to finish it off.
974
975=head2 How do I fork a daemon process?
976
977If by daemon process you mean one that's detached (disassociated from
978its tty), then the following process is reported to work on most
979Unixish systems. Non-Unix users should check their Your_OS::Process
980module for other solutions.
981
982=over 4
983
984=item *
985
986Open /dev/tty and use the TIOCNOTTY ioctl on it. See L<tty>
987for details. Or better yet, you can just use the POSIX::setsid()
988function, so you don't have to worry about process groups.
989
990=item *
991
992Change directory to /
993
994=item *
995
996Reopen STDIN, STDOUT, and STDERR so they're not connected to the old
997tty.
998
999=item *
1000
1001Background yourself like this:
1002
1003 fork && exit;
1004
1005=back
1006
1007The Proc::Daemon module, available from CPAN, provides a function to
1008perform these actions for you.
1009
1010=head2 How do I find out if I'm running interactively or not?
1011
1012Good question. Sometimes C<-t STDIN> and C<-t STDOUT> can give clues,
1013sometimes not.
1014
1015 if (-t STDIN && -t STDOUT) {
1016 print "Now what? ";
1017 }
1018
1019On POSIX systems, you can test whether your own process group matches
1020the current process group of your controlling terminal as follows:
1021
1022 use POSIX qw/getpgrp tcgetpgrp/;
1023
1024 # Some POSIX systems, such as Linux, can be
1025 # without a /dev/tty at boot time.
1026 if (!open(TTY, "/dev/tty")) {
1027 print "no tty\n";
1028 } else {
1029 $tpgrp = tcgetpgrp(fileno(*TTY));
1030 $pgrp = getpgrp();
1031 if ($tpgrp == $pgrp) {
1032 print "foreground\n";
1033 } else {
1034 print "background\n";
1035 }
1036 }
1037
1038=head2 How do I timeout a slow event?
1039
1040Use the alarm() function, probably in conjunction with a signal
1041handler, as documented in L<perlipc/"Signals"> and the section on
1042"Signals" in the Camel. You may instead use the more flexible
1043Sys::AlarmCall module available from CPAN.
1044
1045The alarm() function is not implemented on all versions of Windows.
1046Check the documentation for your specific version of Perl.
1047
1048=head2 How do I set CPU limits?
1049X<BSD::Resource> X<limit> X<CPU>
1050
1051(contributed by Xho)
1052
1053Use the C<BSD::Resource> module from CPAN. As an example:
1054
1055 use BSD::Resource;
1056 setrlimit(RLIMIT_CPU,10,20) or die $!;
1057
1058This sets the soft and hard limits to 10 and 20 seconds, respectively.
1059After 10 seconds of time spent running on the CPU (not "wall" time),
1060the process will be sent a signal (XCPU on some systems) which, if not
1061trapped, will cause the process to terminate. If that signal is
1062trapped, then after 10 more seconds (20 seconds in total) the process
1063will be killed with a non-trappable signal.
1064
1065See the C<BSD::Resource> and your systems documentation for the gory
1066details.
1067
1068=head2 How do I avoid zombies on a Unix system?
1069
1070Use the reaper code from L<perlipc/"Signals"> to call wait() when a
1071SIGCHLD is received, or else use the double-fork technique described
1072in L<perlfaq8/"How do I start a process in the background?">.
1073
1074=head2 How do I use an SQL database?
1075
1076The DBI module provides an abstract interface to most database
1077servers and types, including Oracle, DB2, Sybase, mysql, Postgresql,
1078ODBC, and flat files. The DBI module accesses each database type
1079through a database driver, or DBD. You can see a complete list of
1080available drivers on CPAN: http://www.cpan.org/modules/by-module/DBD/ .
1081You can read more about DBI on http://dbi.perl.org .
1082
1083Other modules provide more specific access: Win32::ODBC, Alzabo, iodbc,
1084and others found on CPAN Search: http://search.cpan.org .
1085
1086=head2 How do I make a system() exit on control-C?
1087
1088You can't. You need to imitate the system() call (see L<perlipc> for
1089sample code) and then have a signal handler for the INT signal that
1090passes the signal on to the subprocess. Or you can check for it:
1091
1092 $rc = system($cmd);
1093 if ($rc & 127) { die "signal death" }
1094
1095=head2 How do I open a file without blocking?
1096
1097If you're lucky enough to be using a system that supports
1098non-blocking reads (most Unixish systems do), you need only to use the
1099O_NDELAY or O_NONBLOCK flag from the Fcntl module in conjunction with
1100sysopen():
1101
1102 use Fcntl;
1103 sysopen(FH, "/foo/somefile", O_WRONLY|O_NDELAY|O_CREAT, 0644)
1104 or die "can't open /foo/somefile: $!":
1105
1106=head2 How do I tell the difference between errors from the shell and perl?
1107
1108(answer contributed by brian d foy)
1109
1110When you run a Perl script, something else is running the script for you,
1111and that something else may output error messages. The script might
1112emit its own warnings and error messages. Most of the time you cannot
1113tell who said what.
1114
1115You probably cannot fix the thing that runs perl, but you can change how
1116perl outputs its warnings by defining a custom warning and die functions.
1117
1118Consider this script, which has an error you may not notice immediately.
1119
1120 #!/usr/locl/bin/perl
1121
1122 print "Hello World\n";
1123
1124I get an error when I run this from my shell (which happens to be
1125bash). That may look like perl forgot it has a print() function,
1126but my shebang line is not the path to perl, so the shell runs the
1127script, and I get the error.
1128
1129 $ ./test
1130 ./test: line 3: print: command not found
1131
1132A quick and dirty fix involves a little bit of code, but this may be all
1133you need to figure out the problem.
1134
1135 #!/usr/bin/perl -w
1136
1137 BEGIN {
1138 $SIG{__WARN__} = sub{ print STDERR "Perl: ", @_; };
1139 $SIG{__DIE__} = sub{ print STDERR "Perl: ", @_; exit 1};
1140 }
1141
1142 $a = 1 + undef;
1143 $x / 0;
1144 __END__
1145
1146The perl message comes out with "Perl" in front. The BEGIN block
1147works at compile time so all of the compilation errors and warnings
1148get the "Perl:" prefix too.
1149
1150 Perl: Useless use of division (/) in void context at ./test line 9.
1151 Perl: Name "main::a" used only once: possible typo at ./test line 8.
1152 Perl: Name "main::x" used only once: possible typo at ./test line 9.
1153 Perl: Use of uninitialized value in addition (+) at ./test line 8.
1154 Perl: Use of uninitialized value in division (/) at ./test line 9.
1155 Perl: Illegal division by zero at ./test line 9.
1156 Perl: Illegal division by zero at -e line 3.
1157
1158If I don't see that "Perl:", it's not from perl.
1159
1160You could also just know all the perl errors, and although there are
1161some people who may know all of them, you probably don't. However, they
1162all should be in the perldiag manpage. If you don't find the error in
1163there, it probably isn't a perl error.
1164
1165Looking up every message is not the easiest way, so let perl to do it
1166for you. Use the diagnostics pragma with turns perl's normal messages
1167into longer discussions on the topic.
1168
1169 use diagnostics;
1170
1171If you don't get a paragraph or two of expanded discussion, it
1172might not be perl's message.
1173
1174=head2 How do I install a module from CPAN?
1175
1176The easiest way is to have a module also named CPAN do it for you.
1177This module comes with perl version 5.004 and later.
1178
1179 $ perl -MCPAN -e shell
1180
1181 cpan shell -- CPAN exploration and modules installation (v1.59_54)
1182 ReadLine support enabled
1183
1184 cpan> install Some::Module
1185
1186To manually install the CPAN module, or any well-behaved CPAN module
1187for that matter, follow these steps:
1188
1189=over 4
1190
1191=item 1
1192
1193Unpack the source into a temporary area.
1194
1195=item 2
1196
1197 perl Makefile.PL
1198
1199=item 3
1200
1201 make
1202
1203=item 4
1204
1205 make test
1206
1207=item 5
1208
1209 make install
1210
1211=back
1212
1213If your version of perl is compiled without dynamic loading, then you
1214just need to replace step 3 (B<make>) with B<make perl> and you will
1215get a new F<perl> binary with your extension linked in.
1216
1217See L<ExtUtils::MakeMaker> for more details on building extensions.
1218See also the next question, "What's the difference between require
1219and use?".
1220
1221=head2 What's the difference between require and use?
1222
1223(contributed by brian d foy)
1224
1225Perl runs C<require> statement at run-time. Once Perl loads, compiles,
1226and runs the file, it doesn't do anything else. The C<use> statement
1227is the same as a C<require> run at compile-time, but Perl also calls the
1228C<import> method for the loaded package. These two are the same:
1229
1230 use MODULE qw(import list);
1231
1232 BEGIN {
1233 require MODULE;
1234 MODULE->import(import list);
1235 }
1236
1237However, you can suppress the C<import> by using an explicit, empty
1238import list. Both of these still happen at compile-time:
1239
1240 use MODULE ();
1241
1242 BEGIN {
1243 require MODULE;
1244 }
1245
1246Since C<use> will also call the C<import> method, the actual value
1247for C<MODULE> must be a bareword. That is, C<use> cannot load files
1248by name, although C<require> can:
1249
1250 require "$ENV{HOME}/lib/Foo.pm"; # no @INC searching!
1251
1252See the entry for C<use> in L<perlfunc> for more details.
1253
1254=head2 How do I keep my own module/library directory?
1255
1256When you build modules, tell Perl where to install the modules.
1257
1258For C<Makefile.PL>-based distributions, use the INSTALL_BASE option
1259when generating Makefiles:
1260
1261 perl Makefile.PL INSTALL_BASE=/mydir/perl
1262
1263You can set this in your CPAN.pm configuration so modules automatically install
1264in your private library directory when you use the CPAN.pm shell:
1265
1266 % cpan
1267 cpan> o conf makepl_arg INSTALL_BASE=/mydir/perl
1268 cpan> o conf commit
1269
1270For C<Build.PL>-based distributions, use the --install_base option:
1271
1272 perl Build.PL --install_base /mydir/perl
1273
1274You can configure CPAN.pm to automatically use this option too:
1275
1276 % cpan
1277 cpan> o conf mbuild_arg --install_base /mydir/perl
1278 cpan> o conf commit
1279
1280INSTALL_BASE tells these tools to put your modules into
1281F</mydir/perl/lib/perl5>. See L<How do I add a directory to my
1282include path (@INC) at runtime?> for details on how to run your newly
1283installed moudles.
1284
1285There is one caveat with INSTALL_BASE, though, since it acts
1286differently than the PREFIX and LIB settings that older versions of
1287ExtUtils::MakeMaker advocated. INSTALL_BASE does not support
1288installing modules for multiple versions of Perl or different
1289architectures under the same directory. You should consider if you
1290really want that , and if you do, use the older PREFIX and LIB
1291settings. See the ExtUtils::Makemaker documentation for more details.
1292
1293=head2 How do I add the directory my program lives in to the module/library search path?
1294
1295(contributed by brian d foy)
1296
1297If you know the directory already, you can add it to C<@INC> as you would
1298for any other directory. You might <use lib> if you know the directory
1299at compile time:
1300
1301 use lib $directory;
1302
1303The trick in this task is to find the directory. Before your script does
1304anything else (such as a C<chdir>), you can get the current working
1305directory with the C<Cwd> module, which comes with Perl:
1306
1307 BEGIN {
1308 use Cwd;
1309 our $directory = cwd;
1310 }
1311
1312 use lib $directory;
1313
1314You can do a similar thing with the value of C<$0>, which holds the
1315script name. That might hold a relative path, but C<rel2abs> can turn
1316it into an absolute path. Once you have the
1317
1318 BEGIN {
1319 use File::Spec::Functions qw(rel2abs);
1320 use File::Basename qw(dirname);
1321
1322 my $path = rel2abs( $0 );
1323 our $directory = dirname( $path );
1324 }
1325
1326 use lib $directory;
1327
1328The C<FindBin> module, which comes with Perl, might work. It finds the
1329directory of the currently running script and puts it in C<$Bin>, which
1330you can then use to construct the right library path:
1331
1332 use FindBin qw($Bin);
1333
1334=head2 How do I add a directory to my include path (@INC) at runtime?
1335
1336Here are the suggested ways of modifying your include path, including
1337environment variables, run-time switches, and in-code statements:
1338
1339=over 4
1340
1341=item the PERLLIB environment variable
1342
1343 $ export PERLLIB=/path/to/my/dir
1344 $ perl program.pl
1345
1346=item the PERL5LIB environment variable
1347
1348 $ export PERL5LIB=/path/to/my/dir
1349 $ perl program.pl
1350
1351=item the perl -Idir command line flag
1352
1353 $ perl -I/path/to/my/dir program.pl
1354
1355=item the use lib pragma:
1356
1357 use lib "$ENV{HOME}/myown_perllib";
1358
1359=back
1360
1361The last is particularly useful because it knows about machine
1362dependent architectures. The lib.pm pragmatic module was first
1363included with the 5.002 release of Perl.
1364
1365=head2 What is socket.ph and where do I get it?
1366
1367It's a Perl 4 style file defining values for system networking
1368constants. Sometimes it is built using h2ph when Perl is installed,
1369but other times it is not. Modern programs C<use Socket;> instead.
1370
1371=head1 REVISION
1372
1373Revision: $Revision$
1374
1375Date: $Date$
1376
1377See L<perlfaq> for source control details and availability.
1378
1379=head1 AUTHOR AND COPYRIGHT
1380
1381Copyright (c) 1997-2009 Tom Christiansen, Nathan Torkington, and
1382other authors as noted. All rights reserved.
1383
1384This documentation is free; you can redistribute it and/or modify it
1385under the same terms as Perl itself.
1386
1387Irrespective of its distribution, all code examples in this file
1388are hereby placed into the public domain. You are permitted and
1389encouraged to use this code in your own programs for fun
1390or for profit as you see fit. A simple comment in the code giving
1391credit would be courteous but is not required.