Как получить путь и имя работающего Perl-скрипта (argv [0] в C) - PullRequest
3 голосов
/ 06 июля 2010

В C / C ++ (bash, тоже?) Первый аргумент командной строки, argv [0], представляет собой двоичное имя файла (с префиксом абсолютного или относительного пути, который вызывается пользователем).

В Perl первый аргумент командной строки $ ARGV [0] является первым аргументом командной строки после пути и имени скрипта.

Как скрипт Perl может получить путь и имя, которые использовались для его вызова?

Спасибо!

Ответы [ 2 ]

7 голосов
/ 06 июля 2010

$0 содержит имя файла, содержащего исполняемый скрипт perl.

6 голосов
/ 06 июля 2010

"В C / C ++ (тоже bash?) Первый аргумент командной строки, argv [0], является двоичным именем файла"

, кстати, совершенно неверно,Стандарт ISO не предписывает ничего подобного.

От C99:

Если значение argc больше нуля, строка, на которую указывает argv [0], представляет имя программы;argv [0] [0] должен быть нулевым символом, если имя программы недоступно из среды хоста.

И обратите внимание, что в нем говорится «представляет имя программы», а не «это местоположение»двоичного исполняемого файла ".Это потому, что есть более ранний фрагмент кода, в котором говорится:

... члены массива от argv [0] до argv [argc-1] включительно должны содержать указатели на строки, которым задаются значения, определенные реализациейсреда хоста до запуска программы. "

Для вашей команды argv[0] вполне допустимо, чтобы команда" sleep 60 "была" фантастической утилитой сна pax ", а не" / bin / sleep ".

Короче говоря, среда не должна предоставлять представление программы, и, даже если это так, она не должна быть полезной для поиска двоичного файла.


Но, наскучив вам из-за моего диатриба, Perl предоставляет $0 или $PROGRAM_NAME (в этом отвратительном "английском" режиме) для этой цели. Подробности см. perlvar .

...