переменных среды в Perl спросил
Изменено 3 года, 6 месяцев назад
Просмотрено 32к раз
Кажется, я могу получить доступ к переменным среды в Perl, просто выполнив:
use Env; напечатать ${ПУТЬ};
Это ожидаемое поведение?
Документы Env говорят, что вам нужно сделать $ENV{PATH}
.
- perl
- переменные среды
Env говорит
Perl поддерживает переменные среды в специальном хеше с именем
%ENV
. Когда этот метод доступа неудобен, модуль PerlEnv
позволяет обрабатывать переменные среды как скалярные или массивные переменные.
Итак, да, это законно, и ожидаемое использование переменных равно
, $USER
, $HOME
и т. д.
Однако этот модуль
По умолчанию он связывает все существующие переменные среды (
ключей %ENV
) со скалярами.
, и я предпочитаю использовать хэш %ENV
напрямую, а не его связанные аналоги. (См. исходный код основного модуля Env
на его странице CPAN.)
Да, это ожидаемое поведение из-за взаимодействия двух факторов:
- Вы использовали модуль
Env
с псевдонимом$ENV{PATH}
на$PATH
.
Обратите внимание, что $ENV{PATH}
— это use Env
просто добавляет псевдонимы к содержимому %ENV
, делать %ENV
доступным не требуется:
$ perl -E 'say $ENV{LANG}' en_US.UTF-8
-
${PATH}
— не что иное, как более подробный способ сказать$PATH
. Конструкция${...}
(и ее родственники,@{. ..}
и%{...}
) чаще всего используется для интерполяции внутри строк в двойных кавычках, чтобы заставить Perl распознавать все содержимое{...}
как имя переменной, а не более короткое имя, за которым следует буквальный текст, но синтаксис также можно использовать в других контекстах.
Простая демонстрация этого:
$ perl -E '$foo = "bar"; скажи ${foo}' бар
Используйте $ENV в формате предопределенной переменной в Perl
напечатать $ENV{ПУТЬ};3
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google Зарегистрироваться через Facebook Зарегистрируйтесь, используя адрес электронной почты и парольОпубликовать как гость
Электронная почтаТребуется, но не отображается
Опубликовать как гость
Электронная почтаТребуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.
bash — /usr/bin/env perl работает как команда, но не в сценарии perl
спросил
Изменено 7 лет, 5 месяцев назад
Просмотрено 10 тысяч раз
У меня есть Perl-скрипт, который содержит первую строку следующим образом:
#!/usr/bin/env Perl
Я уже читал, что это выполняется для поиска Perl в среде. Но теперь, когда я выполняю это в командной строке /usr/bin/env perl
, запускается сам perl (который находится по адресу /usr/bin/perl
). Но когда я запускаю скрипт с помощью ./myscript.pl
, он показывает следующую ошибку:
/usr/bin/env: Нет такого файла или каталога
Это происходит из-за того, что он не может найти perl
, потому что эта ошибка также появляется, когда я набираю /usr/bin/env ххххххх
. M 9M представляет символ CR), а у вас его нет.
Ответ на вопрос:
Может кто-нибудь объяснить мне, в чем именно разница, когда я запускаю его в командной строке или в сценарии?
#!/usr/bin/env perl
Это в основном говорит ОС (которая понимает шебанг) найти первый исполняемый файл «perl» в списке $PATH и выполнить эту программу, добавив имя текущего файла после шебанга. Он не вызывает «perl» напрямую, как этот шебанг, который вы найдете в большинстве программ на Perl:
#!/USR/бен/перл
Это связано с тем, что большинство UNIX-подобных систем (особенно Linux) поставляются с perl, установленным в /usr/bin/perl. Некоторые UNIX не имеют Perl по умолчанию, но могут быть легко установлены позже. Просто они могут оказаться в /usr/local/bin/perl. Обычно perl-программисты называют их «системным perl».
Первый возьмет первый perl в вашем $PATH, а второй возьмет тот, который поставляется с вашей системой.
Если вы не укажете полный путь в оболочке, она также использует то, что указано первым в вашем $PATH.
10Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google Зарегистрироваться через Facebook Зарегистрируйтесь, используя адрес электронной почты и парольОпубликовать как гость
Электронная почтаТребуется, но не отображается
Опубликовать как гость
Электронная почтаТребуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.