nysus has asked for the wisdom of the Perl Monks concerning the following question:

I have a per script in ~/bin/ that I'm calling from another directory. I tried using `getcwd()` to get the current working directory where the script was called from but it is returning undefined. How can I get the directory the script's command is getting issued from?

$PM = "Perl Monk's";
$MCF = "Most Clueless Friar Abbot Bishop Pontiff Deacon Curate Priest Vicar";
$nysus = $PM . ' ' . $MCF;
Click here if you love Perl Monks

  • Comment on Determining directory where script was called from

Replies are listed 'Best First'.
Re: Determining directory where script was called from
by thanos1983 (Parson) on Mar 13, 2019 at 10:20 UTC

    Hello nysus,

    According to the documentation of File::Spec it is compatible with all OS and it will load automatically the relevant module based on the OS.

    If you want to have compatibility with all OS I think this module is a good candidate :).

    Hope this helps, BR.

    Seeking for Perl wisdom...on the process of learning...not there...yet!
Re: Determining directory where script was called from
by nysus (Parson) on Mar 13, 2019 at 02:42 UTC
    NVM. It's in $ENV{PWD};

    $PM = "Perl Monk's";
    $MCF = "Most Clueless Friar Abbot Bishop Pontiff Deacon Curate Priest Vicar";
    $nysus = $PM . ' ' . $MCF;
    Click here if you love Perl Monks

      Hello nysus,

      Glad $ENV{PWD} is working for you, but it doesn’t work for me on Windows:

      15:51 >perl -wE "say $ENV{PWD};" Use of uninitialized value in say at -e line 1. 15:51 >

      On the other hand, Cwd::getcwd() [or Cwd::cwd()] works fine for me, and is a more portable solution.

      I tried using `getcwd()` to get the current working directory where the script was called from but it is returning undefined.

      Was your call to the remote script something like this?

      printf "\n%s\n", `perl remote_dir/remote_script.pl`;

      If so, you’ll get undefined because backticks in list context returns a list (of lines; see perlop#Quote-Like-Operators). In scalar context it works as expected:

      printf "\n%s\n", scalar `perl 1984_SoPW/remote.pl`;

      Hope that helps,

      Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,