perl 5.000
[p5sagit/p5-mst-13.2.git] / lib / Shell.pm
1 package Shell;
2
3 sub 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
18 AUTOLOAD {
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
47 1;