Создать структуру данных в Perl - PullRequest
0 голосов
/ 17 января 2019

У меня есть Perl "config файлы", содержащие структуры данных, такие как:

'xyz' => {
    'solaris'  => [
                   "value1",
                   "valueN",
                  ],
    'linux'    => [
                   "valueX",
                   "valueN",
                  ],
},

Я называю их просто:

%config = do '/path/to/file.conf';

Теперь я хотел бы "сгенерировать"Конфигурационные файлы, подобные этому (создайте структуру данных «структура» напрямую и распечатать его в файле конфигурации).я могу заполнить хеш хешей (массивов или чего-либо еще) обычным способом, но как мне впоследствии сбросить его в файл конфигурации?

Есть ли простой и понятный способ сделать это?вместо того, чтобы делать грязные вещи, как:

print $FH "'xyz' => {\n";
print $FH "   'solaris'  => [\n";

и т. д.

я "думаю", что Data :: Dumper может это сделать ..

спасибо!

1 Ответ

0 голосов
/ 17 января 2019

Вы хотите:

$Data::Dumper::Terse = 1;

См. документацию .

$ Data :: Dumper :: Terse или $ OBJ-> Terse ([NEWVAL])

Если установлено, Data :: Dumper будет генерировать одиночные несамостоятельные ссылочные значения в виде атомов / терминов, а не операторов. Это означает, что имена $VAR n будут по возможности избегаться, но имейте в виду, что такие выходные данные не всегда могут быть проанализированы с помощью eval.

Обновление (для ответа на комментарий ниже):

Data :: Dumper добавит правильную пунктуацию, чтобы вы могли вернуть именно то, что вы даете. Если вы дадите ему ссылку на хеш, то получите строку, которая начинается и заканчивается фигурными скобками.

$ perl -MData::Dumper -E'$Data::Dumper::Terse=1; say Dumper { foo => { bar => "baz" }}'
{
  'foo' => {
             'bar' => 'baz'
           }
}

Если вы дадите ему ссылку на массив, вы получите строку, которая начинается и заканчивается квадратными скобками.

$ perl -MData::Dumper -E'$Data::Dumper::Terse=1; say Dumper [ foo => { bar => "baz" }]'
[
  'foo',
  {
    'bar' => 'baz'
  }
]

Если по какой-либо причине вам не нужен ни один из них, предоставьте ему список значений.

$ perl -MData::Dumper -E'$Data::Dumper::Terse=1; say Dumper ( foo => { bar => "baz" })'
'foo'
{
  'bar' => 'baz'
}

Если у вас есть ссылка на хеш, и вы не хотите, чтобы окружающие скобки (честно говоря, кажутся странным требованием), прервите ссылку, прежде чем передавать ее в Dumper(). Это преобразует ссылку на хеш в хеш, и хеш будет «развернут» в список, если он будет передан в функцию.

$ perl -MData::Dumper -E'$Data::Dumper::Terse=1; $ref = { foo => { bar => "baz" }}; say Dumper %$ref'
'foo'
{
  'bar' => 'baz'
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...