Вы говорите, что эти переменные среды должны быть связаны, поэтому
$ENV{ $ENV{a} };
Примечание: не $a
, а a
, например $ENV{USER}
и т. Д. При этом используется хеш %ENV
(см. perlvar ), который имеет текущее окружение, поэтому ключами являются имена переменных окружения.
По-видимому, представляет интерес использование переменной Perl (для имени переменной оболочки † ) в %ENV
, а не строковый литерал, как указано выше. В этом случае нам нужно как-то передать эту переменную оболочки, ее имя или значение программе Perl, чтобы она хранилась в переменной;Я не могу просто использовать его напрямую.
Кстати, одним из способов передачи переменной из оболочки в Perl является именно ее экспорт, что делает ее доступной через %ENV
. Тем не менее, он также может быть передан как обычно, через командную строку. Предполагая использование однострочного Perl (обычно в сценариях оболочки), у нас есть два варианта передачи
в качестве аргумента perl -we'...' "$var"
, в этом случае он доступенв @ARGV
С помощью командного переключателя -s
, perl -s -we'...' -- -shv="$var"
, что задает переменную $shv
в однострочнике со значением$var
. --
отмечает начало аргументов.
См. этот пост для деталей, и, возможно, этот для другого, более сложного,пример.
Примечание Комментарий спрашивает, как передать имя переменной (строка a
), а не ее значение ($a
). Это не кажется мне лучшим дизайном;если по какой-либо причине необходимо передать имя переменной, то имеет смысл сохранить , в переменной (var="a"
) и передать эту переменную, как указано выше.
Но если идея действительно заключается в том, чтобы передать само имя, тогда сделайте это вместо этого, так что либо из
perl -we'...' "a"
perl -we'...' -s -- -shv="a"
Остальное тоже самое, а %ENV
использует переменную, которая получиланазначил входные данные.
Если используется полный Perl-скрипт (не однострочный), тогда используйте Getopt :: Long для удобной обработки фрагментов.
† Комментарий просит передать имя переменной оболочки в переменную Perl - так что a
из OP, а не ее значение $a
. Я немного сомневаюсь в полезности этого, но это, конечно, возможно.
Два способа передачи переменной из оболочки в Perl отличаются тем, что передается.