2009-09-01 8 views
1

У меня есть следующая структура данных в коде Perl:Представление сложной структуры данных Perl, содержащий ссылки на массивы в Config :: General

my $config = { 
    'View::Mason' => { 
     comp_root  => [ 
      [ 'teamsite' => 'root/teamsite' ], 
      [ 'components' => 'root/components' ], 
     ], 
    }, 
}; 

Я пытаюсь представить эту структуру в файле в Config::General конфигурации.

До сих пор у меня есть:

<View::Mason> 
    <comp_root> 
     teamsite  root/teamsite 
    </comp_root> 
    <comp_root> 
     components  root/components 
    </comp_root> 
</View::Mason> 

Который по крайней мере, делает элемент «comp_root» ссылка на массив, но я не могу получить его, чтобы указать на другую ссылку на массив.

Это можно сделать в Config :: General?

+0

Ммм ... после того, как углубиться в него немного больше, кажется, ответ «вы не можете сделать это с помощью Config :: General» – Hissohathair

ответ

4

Я не верю, что это возможно с помощью Config :: General. Например:

use Config::General qw(SaveConfigString); 

my $config = { 
    'View::Mason' => { 
     comp_root  => [ 
      [ 'teamsite' => 'root/teamsite' ], 
      [ 'components' => 'root/components' ], 
     ], 
    }, 
}; 

print SaveConfigString($config); 

производит

<View::Mason> 
    comp_root ARRAY(0x94ea168) 
    comp_root ARRAY(0x94fbc98) 
</View::Mason> 

Если он не может сохранить его, шансы он не может загрузить его.

Вот что я хотел бы сделать:

  1. Выяснить, что я хочу, чтобы мой конфигурационный файл, чтобы выглядеть.
  2. Найдите модуль, способный загружать конфигурационный файл, подобный этому. (Возможно, внесение некоторых изменений в формат, если это слишком сложно загрузить.)
  3. Если результат этапа 2 не подходит для непосредственного использования остальной частью моей программы, напишите некоторый код, чтобы преобразовать то, что дает читатель конфигурации меня в то, что хочет моя программа.
+0

Я как бы заперся в Config :: General на данный момент, но, похоже, хороший подход для следующего проекта. Мне может потребоваться некоторая пост-обработка, чтобы объединить несколько настроек конфигурации в конечную структуру данных, требуемую модулем. Спасибо. – Hissohathair

1

YAML может быть вариант для вас:

use strict; 
use warnings; 
use Data::Dumper qw(Dumper); 
use YAML::XS qw(Load); 

my $config_text = ' 
View::Mason: 
    comp_root: 
    - 
     - teamsite 
     - root/teamsite 
    - 
     - components 
     - root/components 
'; 

my $config = Load($yaml_text); 
print Dumper($config); 
+2

Хотя YAML может представлять любую произвольную структуру данных Perl, это не обязательно самый удобный формат файла конфигурации. (Хотя я использовал его для файлов конфигурации, которые должны содержать сложные структуры данных.) – cjm

+0

Raw perl более дружелюбен, чем YAML; по крайней мере, пробелы не значимы derobert