Краткий фон:
К сожалению, API Unix не предоставляет запущенной программе полный путь к исполняемому файлу. Фактически, исполняющая ваша программа может предоставить все, что она хочет в поле, которое обычно сообщает вашей программе, что это такое. Как указывают все ответы, существуют различные эвристические методы поиска вероятных кандидатов. Но ничего кроме поиска по всей файловой системе не всегда будет работать, и даже это не даст результата, если исполняемый файл будет перемещен или удален.
Но вам не нужен исполняемый файл Perl, который фактически выполняется, а сценарий, который он выполняет. И Perl должен знать, где находится скрипт, чтобы его найти. Он хранит это в __FILE__
, а $0
из Unix API. Это все еще может быть относительный путь, поэтому возьмите предложение Марка и канонизируйте его с помощью File::Spec->rel2abs( __FILE__ );