Re-instate all the warnings checks that don't work on Win32, but with
[p5sagit/p5-mst-13.2.git] / lib / IPC / Cmd.pm
1 package IPC::Cmd;
2
3 use strict;
4
5 BEGIN {
6
7     use constant IS_VMS   => $^O eq 'VMS'                       ? 1 : 0;    
8     use constant IS_WIN32 => $^O eq 'MSWin32'                   ? 1 : 0;
9     use constant IS_WIN98 => (IS_WIN32 and !Win32::IsWinNT())   ? 1 : 0;
10
11     use Exporter    ();
12     use vars        qw[ @ISA $VERSION @EXPORT_OK $VERBOSE $DEBUG
13                         $USE_IPC_RUN $USE_IPC_OPEN3 $WARN
14                     ];
15
16     $VERSION        = '0.40_1';
17     $VERBOSE        = 0;
18     $DEBUG          = 0;
19     $WARN           = 1;
20     $USE_IPC_RUN    = IS_WIN32 && !IS_WIN98;
21     $USE_IPC_OPEN3  = not IS_VMS;
22
23     @ISA            = qw[Exporter];
24     @EXPORT_OK      = qw[can_run run];
25 }
26
27 require Carp;
28 use File::Spec;
29 use Params::Check               qw[check];
30 use Module::Load::Conditional   qw[can_load];
31 use Locale::Maketext::Simple    Style => 'gettext';
32
33 =pod
34
35 =head1 NAME
36
37 IPC::Cmd - finding and running system commands made easy
38
39 =head1 SYNOPSIS
40
41     use IPC::Cmd qw[can_run run];
42
43     my $full_path = can_run('wget') or warn 'wget is not installed!';
44
45     ### commands can be arrayrefs or strings ###
46     my $cmd = "$full_path -b theregister.co.uk";
47     my $cmd = [$full_path, '-b', 'theregister.co.uk'];
48
49     ### in scalar context ###
50     my $buffer;
51     if( scalar run( command => $cmd,
52                     verbose => 0,
53                     buffer  => \$buffer )
54     ) {
55         print "fetched webpage successfully: $buffer\n";
56     }
57
58
59     ### in list context ###
60     my( $success, $error_code, $full_buf, $stdout_buf, $stderr_buf ) =
61             run( command => $cmd, verbose => 0 );
62
63     if( $success ) {
64         print "this is what the command printed:\n";
65         print join "", @$full_buf;
66     }
67
68     ### check for features
69     print "IPC::Open3 available: "  . IPC::Cmd->can_use_ipc_open3;      
70     print "IPC::Run available: "    . IPC::Cmd->can_use_ipc_run;      
71     print "Can capture buffer: "    . IPC::Cmd->can_capture_buffer;     
72
73     ### don't have IPC::Cmd be verbose, ie don't print to stdout or
74     ### stderr when running commands -- default is '0'
75     $IPC::Cmd::VERBOSE = 0;
76
77 =head1 DESCRIPTION
78
79 IPC::Cmd allows you to run commands, interactively if desired,
80 platform independent but have them still work.
81
82 The C<can_run> function can tell you if a certain binary is installed
83 and if so where, whereas the C<run> function can actually execute any
84 of the commands you give it and give you a clear return value, as well
85 as adhere to your verbosity settings.
86
87 =head1 CLASS METHODS 
88
89 =head2 $bool = IPC::Cmd->can_use_ipc_run( [VERBOSE] )
90
91 Utility function that tells you if C<IPC::Run> is available. 
92 If the verbose flag is passed, it will print diagnostic messages
93 if C<IPC::Run> can not be found or loaded.
94
95 =cut
96
97
98 sub can_use_ipc_run     { 
99     my $self    = shift;
100     my $verbose = shift || 0;
101     
102     ### ipc::run doesn't run on win98    
103     return if IS_WIN98;
104
105     ### if we dont have ipc::run, we obviously can't use it.
106     return unless can_load(
107                         modules => { 'IPC::Run' => '0.55' },        
108                         verbose => ($WARN && $verbose),
109                     );
110                     
111     ### otherwise, we're good to go
112     return 1;                    
113 }
114
115 =head2 $bool = IPC::Cmd->can_use_ipc_open3( [VERBOSE] )
116
117 Utility function that tells you if C<IPC::Open3> is available. 
118 If the verbose flag is passed, it will print diagnostic messages
119 if C<IPC::Open3> can not be found or loaded.
120
121 =cut
122
123
124 sub can_use_ipc_open3   { 
125     my $self    = shift;
126     my $verbose = shift || 0;
127
128     ### ipc::open3 is not working on VMS becasue of a lack of fork.
129     ### todo, win32 also does not have fork, so need to do more research.
130     return 0 if IS_VMS;
131
132     ### ipc::open3 works on every platform, but it can't capture buffers
133     ### on win32 :(
134     return unless can_load(
135         modules => { map {$_ => '0.0'} qw|IPC::Open3 IO::Select Symbol| },
136         verbose => ($WARN && $verbose),
137     );
138     
139     return 1;
140 }
141
142 =head2 $bool = IPC::Cmd->can_capture_buffer
143
144 Utility function that tells you if C<IPC::Cmd> is capable of
145 capturing buffers in it's current configuration.
146
147 =cut
148
149 sub can_capture_buffer {
150     my $self    = shift;
151
152     return 1 if $USE_IPC_RUN    && $self->can_use_ipc_run; 
153     return 1 if $USE_IPC_OPEN3  && $self->can_use_ipc_open3 && !IS_WIN32; 
154     return;
155 }
156
157
158 =head1 FUNCTIONS
159
160 =head2 $path = can_run( PROGRAM );
161
162 C<can_run> takes but a single argument: the name of a binary you wish
163 to locate. C<can_run> works much like the unix binary C<which> or the bash
164 command C<type>, which scans through your path, looking for the requested
165 binary .
166
167 Unlike C<which> and C<type>, this function is platform independent and
168 will also work on, for example, Win32.
169
170 It will return the full path to the binary you asked for if it was
171 found, or C<undef> if it was not.
172
173 =cut
174
175 sub can_run {
176     my $command = shift;
177
178     # a lot of VMS executables have a symbol defined
179     # check those first
180     if ( $^O eq 'VMS' ) {
181         require VMS::DCLsym;
182         my $syms = VMS::DCLsym->new;
183         return $command if scalar $syms->getsym( uc $command );
184     }
185
186     require Config;
187     require File::Spec;
188     require ExtUtils::MakeMaker;
189
190     if( File::Spec->file_name_is_absolute($command) ) {
191         return MM->maybe_command($command);
192
193     } else {
194         for my $dir (
195             (split /\Q$Config::Config{path_sep}\E/, $ENV{PATH}),
196             File::Spec->curdir
197         ) {           
198             my $abs = File::Spec->catfile($dir, $command);
199             return $abs if $abs = MM->maybe_command($abs);
200         }
201     }
202 }
203
204 =head2 $ok | ($ok, $err, $full_buf, $stdout_buff, $stderr_buff) = run( command => COMMAND, [verbose => BOOL, buffer => \$SCALAR] );
205
206 C<run> takes 3 arguments:
207
208 =over 4
209
210 =item command
211
212 This is the command to execute. It may be either a string or an array
213 reference.
214 This is a required argument.
215
216 See L<CAVEATS> for remarks on how commands are parsed and their
217 limitations.
218
219 =item verbose
220
221 This controls whether all output of a command should also be printed
222 to STDOUT/STDERR or should only be trapped in buffers (NOTE: buffers
223 require C<IPC::Run> to be installed or your system able to work with
224 C<IPC::Open3>).
225
226 It will default to the global setting of C<$IPC::Cmd::VERBOSE>,
227 which by default is 0.
228
229 =item buffer
230
231 This will hold all the output of a command. It needs to be a reference
232 to a scalar.
233 Note that this will hold both the STDOUT and STDERR messages, and you
234 have no way of telling which is which.
235 If you require this distinction, run the C<run> command in list context
236 and inspect the individual buffers.
237
238 Of course, this requires that the underlying call supports buffers. See
239 the note on buffers right above.
240
241 =back
242
243 C<run> will return a simple C<true> or C<false> when called in scalar
244 context.
245 In list context, you will be returned a list of the following items:
246
247 =over 4
248
249 =item success
250
251 A simple boolean indicating if the command executed without errors or
252 not.
253
254 =item errorcode
255
256 If the first element of the return value (success) was 0, then some
257 error occurred. This second element is the error code the command
258 you requested exited with, if available.
259
260 =item full_buffer
261
262 This is an arrayreference containing all the output the command
263 generated.
264 Note that buffers are only available if you have C<IPC::Run> installed,
265 or if your system is able to work with C<IPC::Open3> -- See below).
266 This element will be C<undef> if this is not the case.
267
268 =item out_buffer
269
270 This is an arrayreference containing all the output sent to STDOUT the
271 command generated.
272 Note that buffers are only available if you have C<IPC::Run> installed,
273 or if your system is able to work with C<IPC::Open3> -- See below).
274 This element will be C<undef> if this is not the case.
275
276 =item error_buffer
277
278 This is an arrayreference containing all the output sent to STDERR the
279 command generated.
280 Note that buffers are only available if you have C<IPC::Run> installed,
281 or if your system is able to work with C<IPC::Open3> -- See below).
282 This element will be C<undef> if this is not the case.
283
284 =back
285
286 See the C<HOW IT WORKS> Section below to see how C<IPC::Cmd> decides
287 what modules or function calls to use when issuing a command.
288
289 =cut
290
291 sub run {
292     my %hash = @_;
293     
294     ### if the user didn't provide a buffer, we'll store it here.
295     my $def_buf = '';
296     
297     my($verbose,$cmd,$buffer);
298     my $tmpl = {
299         verbose => { default  => $VERBOSE,  store => \$verbose },
300         buffer  => { default  => \$def_buf, store => \$buffer },
301         command => { required => 1,         store => \$cmd,
302                      allow    => sub { !ref($_[0]) or ref($_[0]) eq 'ARRAY' } 
303         },
304     };
305
306     unless( check( $tmpl, \%hash, $VERBOSE ) ) {
307         Carp::carp(loc("Could not validate input: %1", Params::Check->last_error));
308         return;
309     };        
310
311     print loc("Running [%1]...\n", (ref $cmd ? "@$cmd" : $cmd)) if $verbose;
312
313     ### did the user pass us a buffer to fill or not? if so, set this
314     ### flag so we know what is expected of us
315     ### XXX this is now being ignored. in the future, we could add diagnostic
316     ### messages based on this logic
317     #my $user_provided_buffer = $buffer == \$def_buf ? 0 : 1;
318     
319     ### buffers that are to be captured
320     my( @buffer, @buff_err, @buff_out );
321
322     ### capture STDOUT
323     my $_out_handler = sub {
324         my $buf = shift;
325         return unless defined $buf;
326         
327         print STDOUT $buf if $verbose;
328         push @buffer,   $buf;
329         push @buff_out, $buf;
330     };
331     
332     ### capture STDERR
333     my $_err_handler = sub {
334         my $buf = shift;
335         return unless defined $buf;
336         
337         print STDERR $buf if $verbose;
338         push @buffer,   $buf;
339         push @buff_err, $buf;
340     };
341     
342
343     ### flag to indicate we have a buffer captured
344     my $have_buffer = __PACKAGE__->can_capture_buffer ? 1 : 0;
345     
346     ### flag indicating if the subcall went ok
347     my $ok;
348     
349     ### IPC::Run is first choice if $USE_IPC_RUN is set.
350     if( $USE_IPC_RUN and __PACKAGE__->can_use_ipc_run( 1 ) ) {
351         ### ipc::run handlers needs the command as a string or an array ref
352
353         __PACKAGE__->_debug( "# Using IPC::Run. Have buffer: $have_buffer" )
354             if $DEBUG;
355             
356         $ok = __PACKAGE__->_ipc_run( $cmd, $_out_handler, $_err_handler );
357
358     ### since IPC::Open3 works on all platforms, and just fails on
359     ### win32 for capturing buffers, do that ideally
360     } elsif ( $USE_IPC_OPEN3 and __PACKAGE__->can_use_ipc_open3( 1 ) ) {
361
362         __PACKAGE__->_debug( "# Using IPC::Open3. Have buffer: $have_buffer" )
363             if $DEBUG;
364
365         ### in case there are pipes in there;
366         ### IPC::Open3 will call exec and exec will do the right thing 
367         $ok = __PACKAGE__->_open3_run( 
368                                 ( ref $cmd ? "@$cmd" : $cmd ),
369                                 $_out_handler, $_err_handler, $verbose 
370                             );
371         
372     ### if we are allowed to run verbose, just dispatch the system command
373     } else {
374         __PACKAGE__->_debug( "# Using system(). Have buffer: $have_buffer" )
375             if $DEBUG;
376         $ok = __PACKAGE__->_system_run( (ref $cmd ? "@$cmd" : $cmd), $verbose );
377     }
378     
379     ### fill the buffer;
380     $$buffer = join '', @buffer if @buffer;
381     
382     ### return a list of flags and buffers (if available) in list
383     ### context, or just a simple 'ok' in scalar
384     return wantarray
385                 ? $have_buffer
386                     ? ($ok, $?, \@buffer, \@buff_out, \@buff_err)
387                     : ($ok, $? )
388                 : $ok
389     
390     
391 }
392
393 sub _open3_run { 
394     my $self            = shift;
395     my $cmd             = shift;
396     my $_out_handler    = shift;
397     my $_err_handler    = shift;
398     my $verbose         = shift || 0;
399
400     ### Following code are adapted from Friar 'abstracts' in the
401     ### Perl Monastery (http://www.perlmonks.org/index.pl?node_id=151886).
402     ### XXX that code didn't work.
403     ### we now use the following code, thanks to theorbtwo
404
405     ### define them beforehand, so we always have defined FH's
406     ### to read from.
407     use Symbol;    
408     my $kidout      = Symbol::gensym();
409     my $kiderror    = Symbol::gensym();
410
411     ### Dup the filehandle so we can pass 'our' STDIN to the
412     ### child process. This stops us from having to pump input
413     ### from ourselves to the childprocess. However, we will need
414     ### to revive the FH afterwards, as IPC::Open3 closes it.
415     ### We'll do the same for STDOUT and STDERR. It works without
416     ### duping them on non-unix derivatives, but not on win32.
417     my @fds_to_dup = ( IS_WIN32 && !$verbose 
418                             ? qw[STDIN STDOUT STDERR] 
419                             : qw[STDIN]
420                         );
421     __PACKAGE__->__dup_fds( @fds_to_dup );
422     
423
424     my $pid = IPC::Open3::open3(
425                     '<&STDIN',
426                     (IS_WIN32 ? '>&STDOUT' : $kidout),
427                     (IS_WIN32 ? '>&STDERR' : $kiderror),
428                     $cmd
429                 );
430
431     ### use OUR stdin, not $kidin. Somehow,
432     ### we never get the input.. so jump through
433     ### some hoops to do it :(
434     my $selector = IO::Select->new(
435                         (IS_WIN32 ? \*STDERR : $kiderror), 
436                         \*STDIN,   
437                         (IS_WIN32 ? \*STDOUT : $kidout)     
438                     );              
439
440     STDOUT->autoflush(1);   STDERR->autoflush(1);   STDIN->autoflush(1);
441     $kidout->autoflush(1)   if UNIVERSAL::can($kidout,   'autoflush');
442     $kiderror->autoflush(1) if UNIVERSAL::can($kiderror, 'autoflush');
443
444     ### add an epxlicit break statement
445     ### code courtesy of theorbtwo from #london.pm
446     my $stdout_done = 0;
447     my $stderr_done = 0;
448     OUTER: while ( my @ready = $selector->can_read ) {
449
450         for my $h ( @ready ) {
451             my $buf;
452             
453             ### $len is the amount of bytes read
454             my $len = sysread( $h, $buf, 4096 );    # try to read 4096 bytes
455             
456             ### see perldoc -f sysread: it returns undef on error,
457             ### so bail out.
458             if( not defined $len ) {
459                 warn(loc("Error reading from process: %1", $!));
460                 last OUTER;
461             }
462             
463             ### check for $len. it may be 0, at which point we're
464             ### done reading, so don't try to process it.
465             ### if we would print anyway, we'd provide bogus information
466             $_out_handler->( "$buf" ) if $len && $h == $kidout;
467             $_err_handler->( "$buf" ) if $len && $h == $kiderror;
468
469             ### Wait till child process is done printing to both
470             ### stdout and stderr.
471             $stdout_done = 1 if $h == $kidout   and $len == 0;
472             $stderr_done = 1 if $h == $kiderror and $len == 0;
473             last OUTER if ($stdout_done && $stderr_done);
474         }
475     }
476
477     waitpid $pid, 0; # wait for it to die
478
479     ### restore STDIN after duping, or STDIN will be closed for
480     ### this current perl process!
481     __PACKAGE__->__reopen_fds( @fds_to_dup );
482     
483     return if $?;   # some error occurred
484     return 1;
485 }
486
487
488 sub _ipc_run {  
489     my $self            = shift;
490     my $cmd             = shift;
491     my $_out_handler    = shift;
492     my $_err_handler    = shift;
493     
494     STDOUT->autoflush(1); STDERR->autoflush(1);
495
496     ### a command like:
497     # [
498     #     '/usr/bin/gzip',
499     #     '-cdf',
500     #     '/Users/kane/sources/p4/other/archive-extract/t/src/x.tgz',
501     #     '|',
502     #     '/usr/bin/tar',
503     #     '-tf -'
504     # ]
505     ### needs to become:
506     # [
507     #     ['/usr/bin/gzip', '-cdf',
508     #       '/Users/kane/sources/p4/other/archive-extract/t/src/x.tgz']
509     #     '|',
510     #     ['/usr/bin/tar', '-tf -']
511     # ]
512
513     
514     my @command; my $special_chars;
515     if( ref $cmd ) {
516         my $aref = [];
517         for my $item (@$cmd) {
518             if( $item =~ /([<>|&])/ ) {
519                 push @command, $aref, $item;
520                 $aref = [];
521                 $special_chars .= $1;
522             } else {
523                 push @$aref, $item;
524             }
525         }
526         push @command, $aref;
527     } else {
528         @command = map { if( /([<>|&])/ ) {
529                             $special_chars .= $1; $_;
530                          } else {
531                             [ split / +/ ]
532                          }
533                     } split( /\s*([<>|&])\s*/, $cmd );
534     }
535  
536     ### if there's a pipe in the command, *STDIN needs to 
537     ### be inserted *BEFORE* the pipe, to work on win32
538     ### this also works on *nix, so we should do it when possible
539     ### this should *also* work on multiple pipes in the command
540     ### if there's no pipe in the command, append STDIN to the back
541     ### of the command instead.
542     ### XXX seems IPC::Run works it out for itself if you just
543     ### dont pass STDIN at all.
544     #     if( $special_chars and $special_chars =~ /\|/ ) {
545     #         ### only add STDIN the first time..
546     #         my $i;
547     #         @command = map { ($_ eq '|' && not $i++) 
548     #                             ? ( \*STDIN, $_ ) 
549     #                             : $_ 
550     #                         } @command; 
551     #     } else {
552     #         push @command, \*STDIN;
553     #     }
554   
555  
556     # \*STDIN is already included in the @command, see a few lines up
557     return IPC::Run::run(   @command, 
558                             fileno(STDOUT).'>',
559                             $_out_handler,
560                             fileno(STDERR).'>',
561                             $_err_handler
562                         );
563 }
564
565 sub _system_run { 
566     my $self    = shift;
567     my $cmd     = shift;
568     my $verbose = shift || 0;
569
570     my @fds_to_dup = $verbose ? () : qw[STDOUT STDERR];
571     __PACKAGE__->__dup_fds( @fds_to_dup );
572     
573     ### system returns 'true' on failure -- the exit code of the cmd
574     system( $cmd );
575     
576     __PACKAGE__->__reopen_fds( @fds_to_dup );
577     
578     return if $?;
579     return 1;
580 }
581
582 {   use File::Spec;
583     use Symbol;
584
585     my %Map = (
586         STDOUT => [qw|>&|, \*STDOUT, Symbol::gensym() ],
587         STDERR => [qw|>&|, \*STDERR, Symbol::gensym() ],
588         STDIN  => [qw|<&|, \*STDIN,  Symbol::gensym() ],
589     );
590
591     ### dups FDs and stores them in a cache
592     sub __dup_fds {
593         my $self    = shift;
594         my @fds     = @_;
595
596         __PACKAGE__->_debug( "# Closing the following fds: @fds" ) if $DEBUG;
597
598         for my $name ( @fds ) {
599             my($redir, $fh, $glob) = @{$Map{$name}} or (
600                 Carp::carp(loc("No such FD: '%1'", $name)), next );
601             
602             ### MUST use the 2-arg version of open for dup'ing for 
603             ### 5.6.x compatibilty. 5.8.x can use 3-arg open
604             ### see perldoc5.6.2 -f open for details            
605             open $glob, $redir . fileno($fh) or (
606                         Carp::carp(loc("Could not dup '$name': %1", $!)),
607                         return
608                     );        
609                 
610             ### we should re-open this filehandle right now, not
611             ### just dup it
612             ### Use 2-arg version of open, as 5.5.x doesn't support
613             ### 3-arg version =/
614             if( $redir eq '>&' ) {
615                 open( $fh, '>' . File::Spec->devnull ) or (
616                     Carp::carp(loc("Could not reopen '$name': %1", $!)),
617                     return
618                 );
619             }
620         }
621         
622         return 1;
623     }
624
625     ### reopens FDs from the cache    
626     sub __reopen_fds {
627         my $self    = shift;
628         my @fds     = @_;
629
630         __PACKAGE__->_debug( "# Reopening the following fds: @fds" ) if $DEBUG;
631
632         for my $name ( @fds ) {
633             my($redir, $fh, $glob) = @{$Map{$name}} or (
634                 Carp::carp(loc("No such FD: '%1'", $name)), next );
635
636             ### MUST use the 2-arg version of open for dup'ing for 
637             ### 5.6.x compatibilty. 5.8.x can use 3-arg open
638             ### see perldoc5.6.2 -f open for details
639             open( $fh, $redir . fileno($glob) ) or (
640                     Carp::carp(loc("Could not restore '$name': %1", $!)),
641                     return
642                 ); 
643            
644             ### close this FD, we're not using it anymore
645             close $glob;                
646         }                
647         return 1;                
648     
649     }
650 }    
651
652 sub _debug {
653     my $self    = shift;
654     my $msg     = shift or return;
655     my $level   = shift || 0;
656     
657     local $Carp::CarpLevel += $level;
658     Carp::carp($msg);
659     
660     return 1;
661 }
662
663
664 1;
665
666
667 __END__
668
669 =head1 HOW IT WORKS
670
671 C<run> will try to execute your command using the following logic:
672
673 =over 4
674
675 =item *
676
677 If you have C<IPC::Run> installed, and the variable C<$IPC::Cmd::USE_IPC_RUN>
678 is set to true (See the C<GLOBAL VARIABLES> Section) use that to execute 
679 the command. You will have the full output available in buffers, interactive commands are sure to work  and you are guaranteed to have your verbosity
680 settings honored cleanly.
681
682 =item *
683
684 Otherwise, if the variable C<$IPC::Cmd::USE_IPC_OPEN3> is set to true 
685 (See the C<GLOBAL VARIABLES> Section), try to execute the command using
686 C<IPC::Open3>. Buffers will be available on all platforms except C<Win32>,
687 interactive commands will still execute cleanly, and also your verbosity
688 settings will be adhered to nicely;
689
690 =item *
691
692 Otherwise, if you have the verbose argument set to true, we fall back
693 to a simple system() call. We cannot capture any buffers, but
694 interactive commands will still work.
695
696 =item *
697
698 Otherwise we will try and temporarily redirect STDERR and STDOUT, do a
699 system() call with your command and then re-open STDERR and STDOUT.
700 This is the method of last resort and will still allow you to execute
701 your commands cleanly. However, no buffers will be available.
702
703 =back
704
705 =head1 Global Variables
706
707 The behaviour of IPC::Cmd can be altered by changing the following
708 global variables:
709
710 =head2 $IPC::Cmd::VERBOSE
711
712 This controls whether IPC::Cmd will print any output from the
713 commands to the screen or not. The default is 0;
714
715 =head2 $IPC::Cmd::USE_IPC_RUN
716
717 This variable controls whether IPC::Cmd will try to use L<IPC::Run>
718 when available and suitable. Defaults to true if you are on C<Win32>.
719
720 =head2 $IPC::Cmd::USE_IPC_OPEN3
721
722 This variable controls whether IPC::Cmd will try to use L<IPC::Open3>
723 when available and suitable. Defaults to true.
724
725 =head2 $IPC::Cmd::WARN
726
727 This variable controls whether run time warnings should be issued, like
728 the failure to load an C<IPC::*> module you explicitly requested.
729
730 Defaults to true. Turn this off at your own risk.
731
732 =head1 Caveats
733
734 =over 4
735
736 =item Whitespace
737
738 When you provide a string as this argument, the string will be
739 split on whitespace to determine the individual elements of your
740 command. Although this will usually just Do What You Mean, it may
741 break if you have files or commands with whitespace in them.
742
743 If you do not wish this to happen, you should provide an array
744 reference, where all parts of your command are already separated out.
745 Note however, if there's extra or spurious whitespace in these parts,
746 the parser or underlying code may not interpret it correctly, and
747 cause an error.
748
749 Example:
750 The following code
751
752     gzip -cdf foo.tar.gz | tar -xf -
753
754 should either be passed as
755
756     "gzip -cdf foo.tar.gz | tar -xf -"
757
758 or as
759
760     ['gzip', '-cdf', 'foo.tar.gz', '|', 'tar', '-xf', '-']
761
762 But take care not to pass it as, for example
763
764     ['gzip -cdf foo.tar.gz', '|', 'tar -xf -']
765
766 Since this will lead to issues as described above.
767
768 =item IO Redirect
769
770 Currently it is too complicated to parse your command for IO
771 Redirections. For capturing STDOUT or STDERR there is a work around
772 however, since you can just inspect your buffers for the contents.
773
774 =back
775
776 =head1 See Also
777
778 C<IPC::Run>, C<IPC::Open3>
779
780 =head1 ACKNOWLEDGEMENTS
781
782 Thanks to James Mastros and Martijn van der Streek for their
783 help in getting IPC::Open3 to behave nicely.
784
785 =head1 BUG REPORTS
786
787 Please report bugs or other issues to E<lt>bug-ipc-cmd@rt.cpan.orgE<gt>.
788
789 =head1 AUTHOR
790
791 This module by Jos Boumans E<lt>kane@cpan.orgE<gt>.
792
793 =head1 COPYRIGHT
794
795 This library is free software; you may redistribute and/or modify it 
796 under the same terms as Perl itself.
797
798 =cut