Does perl have something analogous to the shell's source?
Not for shell code, as shell code needs to be interpreted by a shell (likewise, a shell cannot run Perl code).
As for "the shell which the Perl script is running in", Perl is started from a shell, but it's a separate subprocess, so strictyl speaking, the Perl script is not running "in" a shell. This means the same child-parent restrictions apply, i.e. the Perl script (nor any further child processes started from it) cannot set the environment of its parent shell.
Update: maybe this clarifies it somewhat. When you run something from the command line, for example
$ perl -e 'system "ps Tf ; sleep 1"'
you see child-parent relationships as follows (indenting means "child of")
PID TTY STAT TIME COMMAND 29353 pts/7 S 0:00 bash # th +e initial interactive command shell 29388 pts/7 S+ 0:00 \_ perl -e system "ps Tf ; sleep 1" # yo +ur Perl script 29389 pts/7 S+ 0:00 \_ sh -c ps Tf ; sleep 1 # a +shell started by system() 29390 pts/7 R+ 0:00 \_ ps Tf # a +subprocess run by the shell
All those are separate processes created via fork/exec, and no child is able to manipulate the environment of its respective parent process. But it does inherit the environment of its parent.
In reply to Re^5: system ( "source $script" )
by Anonyrnous Monk
in thread system ( "source $script" )
by ajwood
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |