This and other RFCs are available on the web at
Request For New Pragma: Shell
Maintainer: Bryan C. Warnock <email@example.com>
Date: 5 Aug 2000
Mailing List: firstname.lastname@example.org
Perl 6 should add a new pragma called C<shell>.
The shell that Perl uses for shell interpretation is defined at
compile time. Furthermore, it is optimized away when no metacharacters
are found within the command string.
There are times when one may need (or desire) to change the shell used
for interpretation, as well as force shell interpretation, regardless
of optimization, for consitency's sake.
Perl runs on many platforms. Many of these platforms, either by default,
desire, or need, may have multiple command interpreters that Perl may want
to interface with by default. (ie, through the use of backticks or system().)
Perl is not just a glue language, but a SuperGlue language. I ab^H^Huse
Perl to interact with a lot of home-grown command interpreters as either
a driver, a hardware controller, or Expect-type engine. It's a lot more
DWIMmer when I can operate in that environment, vice the standard OS one.
Furthermore, there are times when speed be damned! I need every `` to go
through the command interpreter in order to get back consistent results,
and I don't want to have to mangle the output string in order to force
It is important, however, that this be lexically scoped. One can't really
afford to have some unknown module expect /bin/sh and accidentally send
the command to turn on a robot's "Kill Human" mode.
Laziness, and perhaps a bit of Hubris.
This was an easy hack in Perl 5, except for the scoping issue. Ideally,
there'd be a -force flag to check, and a method to change the location
of the shell, the shell arguments, and perhaps what is defined as a shell
=head2 SUMMARY OF IMPLEMENTATION
See above. I hacked this for Perl 5 in about two minutes, minus the scoping,
which I never could figure out. :-(
Impact on Perl 5. Mutual compatibility between Perl 5 and Perl 6, with the
exception of C<use shell> and the semantics it would add. (Obviously,
other changes to the language notwithstanding.)
What if the interfaced modules returns things that `` and system() don't
Upcoming RFC on module scoping.