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.
|