我在Perl中的哈希中声明哈希有什么问题?

ILi*_*cos 1 perl hash xml-simple

我正在努力使用Perl中的哈希声明:

my %xmlStructure = {
            hostname    =>  $dbHost,
            username    =>  $dbUsername,
            password    =>  $dbPassword,
            dev_table   =>  $dbTable,
            octopus     =>  {
                                alert_dir       =>  $alert_dir,
                                broadcast_id    =>  $broadcast_id,
                                system_id       =>  $system_id,
                                subkey          =>  $subkey
                            }
 };
Run Code Online (Sandbox Code Playgroud)

我一直在谷歌搜索,但我无法提出解决方案,我所做的每一个修改都会在另一个警告或我不想要的结果中结束.

Perl投诉与以下文字:

Reference found where even-sized list expected at ./configurator.pl line X.
Run Code Online (Sandbox Code Playgroud)

我这样做,因为我想使用该模块:

XML::Simple
Run Code Online (Sandbox Code Playgroud)

为了生成具有以下结构的XML文件:

 <settings>
  <username></username>
  <password></password>
  <database></database>
  <hostname></hostname>

  <dev_table></dev_table>

  <octopus>
      <alert_dir></alert_dir>
      <broadcast_id></broadcast_id>
      <subkey></subkey>
  </octopus>
 </settings>
Run Code Online (Sandbox Code Playgroud)

所以有点像:

my $data = $xmlFile->XMLout(%xmlStructure);
warn Dumper($data);
Run Code Online (Sandbox Code Playgroud)

将显示后一个xml样本结构.

更新:

我忘了提到我也尝试使用括号而不是花括号作为哈希引用,虽然它似乎工作,但XML文件编写不正确:我最终得到以下结构:

<settings>

 <dev_table>5L3IQWmNOw==</dev_table>
 <hostname>gQMgO3/hvMjc</hostname>

 <octopus>
  <alert_dir>l</alert_dir>
  <broadcast_id>l</broadcast_id>
  <subkey>l</subkey>
  <system_id>l</system_id>
 </octopus>

 <password>dZJomteHXg==</password>
 <username>sjfPIQ==</username>

</settings>
Run Code Online (Sandbox Code Playgroud)

这不完全是错的,但我不确定随着XML文件变大,我是否会遇到问题.凭证使用RC4算法加密,但我在base 64编码,以避免任何特殊字符的不当行为.谢谢

dgw*_*dgw 13

{}用于哈希引用.声明哈希使用正常括号():

my %xmlStructure = (
            hostname    =>  $dbHost,
            username    =>  $dbUsername,
            password    =>  $dbPassword,
            dev_table   =>  $dbTable,
            octopus     =>  {
                                alert_dir       =>  $alert_dir,
                                broadcast_id    =>  $broadcast_id,
                                system_id       =>  $system_id,
                                subkey          =>  $subkey
                            }
 );
Run Code Online (Sandbox Code Playgroud)

另请参见perldoc perldsc - Perl Data Structures Cookbook.