in reply to substitute of dotsh.pm

Why not just let shell do the work?

use YAML; %ENV = %{ Load `sh -c ". rcfile; perl -MYAML -e'print Dump \\%ENV'"` } +;

Of course, the above will only work if the RC file that you sourced exported all of the variables that it set. Otherwise, you'd need to parse the output of `env' or something like that.

Forging your own path does not mean that you should avoid asking for directions.

Replies are listed 'Best First'.
•Re: Re: substitute of dotsh.pm
by merlyn (Sage) on May 20, 2004 at 14:30 UTC
      Thanks for your help, Well i did install YAML in my perl and i run the script
      eval 'exec perl $0 ${1+"$@"}' # -*- perl -*- if $running_under_some_shell; use YAML; print "Path is "; print $ENV{PATH}; %ENV = %{ Load qx{.rcfile; perl -MYAML -e 'print Dump \\%ENV'} }; print "Path is now "; print $ENV{PATH};
      where my .rcfile contains
      #!/bin/csh -f source /usr/applis/common/sourcefiles/solaris/unicad_24
      But when i run the perl script , i get the error
      --- !perl/YAML::Error code: YAML_LOAD_USAGE msg: 'usage: YAML::Load($yaml_stream_scalar)' ... at test.pl line 8 Path is /usr/applis/perl/5.005_03/bin: /usr/applis/common/bin:/usr/a +pplis/common/bin: /usr/bin:.:/usr/dt/bin:/usr/openwin/bin: /bin:/usr/ +ucb:/usr/local/bin:/usr/applis/common/bin: .:/home/rishis:/home/rishi +s/bin:/usr/local/bin: .:/home/rishis:/home/rishis/bin:/usr/local/bin: + .:/home/rishis:/home/rishis/bin:/usr/applis/unicad/24/Ukernel
      As i am a newbee to YAML i am unable to figure the problem THanks for your help in advance!!!

      Edited by Chady -- added code tags (and the spaces in the path list so that it wraps)