perl5.001 patch.1e
[p5sagit/p5-mst-13.2.git] / lib / Shell.pm
CommitLineData
a0d0e21e 1package Shell;
2
3sub import {
4 my $self = shift;
5 my ($callpack, $callfile, $callline) = caller;
6 my @EXPORT;
7 if (@_) {
8 @EXPORT = @_;
9 }
10 else {
11 @EXPORT = 'AUTOLOAD';
12 }
13 foreach $sym (@EXPORT) {
14 *{"${callpack}::$sym"} = \&{"Shell::$sym"};
15 }
16};
17
18AUTOLOAD {
19 my $cmd = $AUTOLOAD;
20 $cmd =~ s/^.*:://;
21 eval qq {
22 sub $AUTOLOAD {
23 if (\@_ < 2) {
24 `$cmd \@_`;
25 }
26 else {
27 open(SUBPROC, "-|")
28 or exec '$cmd', \@_
29 or die "Can't exec $cmd: \$!\n";
30 if (wantarray) {
31 my \@ret = <SUBPROC>;
32 close SUBPROC; # XXX Oughta use a destructor.
33 \@ret;
34 }
35 else {
36 local(\$/) = undef;
37 my \$ret = <SUBPROC>;
38 close SUBPROC;
39 \$ret;
40 }
41 }
42 }
43 };
44 goto &$AUTOLOAD;
45}
46
471;