Я хочу (ab-) использовать глобальный% ENV для хранения хэша. Это выглядит по-разному для% ENV, чем для обычных хешей. в приведенной ниже программе $ENV{myhash}
по-прежнему содержит 'myhash' => 'HASH(0x7ffad8807380)'
, а %ahash
по-прежнему вокруг. возможно ли преобразовать гексаговый адрес обратно в точку в его местоположении вместо того, чтобы просто содержать строку? Наверное, я мог бы сериализовать и неэтериализовать хэш вместо этого. Каков правильный способ сделать это?perl сохранение хеша в% ENV
#!/usr/bin/perl -w
use common::sense;
use Data::Dumper;
my %QENV = (nohash => 'noh');
my %ahash= (hv1 => 'htext1', hv2 => 'htext2');
$QENV{'myhash'} = \%ahash;
print "works: ". Dumper(\%QENV)."\n\n\n";
$ENV{'myhash'} = \%ahash;
print "fails: ". Dumper(\%ENV)."\n";
no. переменные системной среды не имеют ничего общего с perl. вы не можете хранить perl-структуры данных в них. Вы должны сериализоваться в обычный текст, а затем сохраните этот сериализованный текст в var. –
Какова причина этого желания? – stevieb
- удобный способ передать глобальную переменную вокруг многих разных модулей и т. Д., Например, если я храню хэш http-сессии в% ENV в одном модуле, теперь любой другой perl-модуль или подпрограмма может проверить, существует ли сеанс http. просто выполнение только что определенного ($ ENV {'myhash'} и ... ', делающего разные вещи в зависимости от того, есть у нас это или нет. Я знаю, что трюк 'no strict vars' имеет смысл или нет? , на размышлениях, может быть, и нет. Я думал, что% ENV не наследует обратно к самому процессу. –