in reply to Re^4: system ( "source $script" )
in thread system ( "source $script" )

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.