簡體   English   中英

在Perl中生成數據結構

[英]Generate a data structure in Perl

我有Perl“配置文件”包含這樣的數據結構:

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

我稱他們做的很簡單:

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

現在,我想“生成”這樣的配置文件(直接構造數據結構“結構”並將其打印在配置文件中)。 我可以用正常的方式填充哈希(數組或任何東西)的散列,但是如何在配置文件中將其轉儲?

這樣做有干凈簡單的方法嗎? 而不是像以下那樣做臟事:

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

等等

我“猜”Data :: Dumper可以做到這一點..

謝謝!

你要:

$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'
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM