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

Sorry, I misunderstood. Does perl have something analogous to the shell's source? I'd like to apply the initialization scripts to the shell which the Perl script is running in.

Replies are listed 'Best First'.
Re^5: system ( "source $script" )
by Anonyrnous Monk (Hermit) on Jan 28, 2011 at 22:16 UTC
    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.

Re^5: system ( "source $script" )
by JavaFan (Canon) on Jan 29, 2011 at 13:25 UTC
    Does perl have something analogous to the shell's source?
    Yes. It's called do. But, just as the shell's source, it only applies to the current process.
    I'd like to apply the initialization scripts to the shell which the Perl script is running in.
    Then you have to do it from within that shell. Trust me, you really, really do not want an environment where any program you can start can rearrange your environment.
Re^5: system ( "source $script" )
by eyepopslikeamosquito (Archbishop) on Jan 30, 2011 at 07:08 UTC

    I'd like to apply the initialization scripts to the shell which the Perl script is running in.
    Note that it's possible to run a perl process from another (non-shell) process without invoking an intermediary shell.

    As for setting an environment variable inside a program or script and have that change affect the parent shell, that's a FAQ, both a Unix FAQ and a Perl one (see perlfaq8). See also: export environment variable from a perl program.