$hex is already hex, so cannot be used in %X if starting with [A-F]
[p5sagit/p5-mst-13.2.git] / lib / dotsh.pl
index 4982b17..810ebc4 100644 (file)
@@ -1,6 +1,13 @@
 #
 #   @(#)dotsh.pl                                               03/19/94
 #
+# This library is no longer being maintained, and is included for backward
+# compatibility with Perl 4 programs which may require it.
+#
+# In particular, this should not be used as an example of modern Perl
+# programming techniques.
+#
+#
 #   Author: Charles Collins
 #
 #   Description:
@@ -20,9 +27,9 @@
 #         dependent upon. These variables MUST be defined using shell syntax.
 #
 #   Example:
-#      &dotsh ('/tmp/foo', 'arg1');
-#      &dotsh ('/tmp/foo');
-#      &dotsh ('/tmp/foo arg1 ... argN');
+#      &dotsh ('/foo/bar', 'arg1');
+#      &dotsh ('/foo/bar');
+#      &dotsh ('/foo/bar arg1 ... argN');
 #
 sub dotsh {
    local(@sh) = @_;
@@ -47,19 +54,17 @@ sub dotsh {
       }
    }
    if (length($vars) > 0) {
-      system "$shell \"$vars;. $command $args; set > /tmp/_sh_env$$\"";
+      open (_SH_ENV, "$shell \"$vars && . $command $args && set \" |") || die;
    } else {
-      system "$shell \". $command $args; set > /tmp/_sh_env$$\"";
+      open (_SH_ENV, "$shell \". $command $args && set \" |") || die;
    }
 
-   open (_SH_ENV, "/tmp/_sh_env$$") || die "Could not open /tmp/_sh_env$$!\n";
    while (<_SH_ENV>) {
        chop;
        m/^([^=]*)=(.*)/s;
        $ENV{$1} = $2;
    }
    close (_SH_ENV);
-   system "rm -f /tmp/_sh_env$$";
 
    foreach $key (keys(%ENV)) {
        $tmp .= "\$$key = \$ENV{'$key'};" if $key =~ /^[A-Za-z]\w*$/;