【问题标题】:Perl generating hash of complex recordsPerl 生成复杂记录的哈希
【发布时间】:2018-02-20 19:48:05
【问题描述】:

我似乎无法弄清楚的大问题。 我需要输入这个复杂的哈希(数组?):

my $raterequest =  
{
    Shipment =>
    {
        Shipper =>
        {
            (static data here)
        },
        ShipTo =>
        {
            (static data here too)
        },
        Package =>
        [
            {
                PackagingType =>
                {
                    Code => '02',
                    Description => 'Package'
                },
                PackageWeight =>
                {
                    UnitOfMeasurement =>
                    {
                        Code => 'LBS'
                    },
                    Weight => $boxWt
                },
            },

            {
                PackagingType =>
                {
                    Code => '02',
                    Description => 'Package'
                },
                PackageWeight =>
                {
                    UnitOfMeasurement =>
                    {
                        Code => 'LBS'
                    },
                    Weight => $boxWt
                },
            }
        ],
    }
};

我需要输入的是 Package 数组中的所有内容。

我有一个生成如下输出的 LoH:

my %carton_specs = 
    (
        25 => {
            boxQty  =>  25,
            boxWt   =>  4,
            boxNo   =>  2
        },
        50 => {
            boxQty  =>  50,
            boxWt   =>  8,
            boxNo   =>  17
        },
);

我需要在Package中重复匿名数组的地方

{
    PackagingType =>
    {
        Code => '02',
        Description => 'Package'
    },
    PackageWeight =>
    {
        UnitOfMeasurement =>
        {
            Code => 'LBS'
        },
        Weight => $boxWt
    },
},

乘以从$boxNo 返回的数字。唯一变化的变量是Weight => $boxWt

请原谅我可能命名错误的任何内容。我已经为此奋斗了 2 天,我的头要爆炸了。

【问题讨论】:

  • 您如何知道是否需要重复 $carton_specs{25}{boxNo} 次或 $carton_specs{50}{boxNo} 次?
  • 它需要遍历两个循环。

标签: arrays perl output


【解决方案1】:

在我看来,您正在寻找push 以及来自perlreftut 的信息(可能还有.. range operator)。我希望我正确理解了您的规格:

use warnings;
use strict;
use Data::Dump;

my $raterequest = {
    Shipment => {
        Package => [ ],
    } };

my %carton_specs =  (
    25 => { boxQty => 25, boxWt => 4, boxNo =>  2 },
    50 => { boxQty => 50, boxWt => 8, boxNo => 17 },
);

for my $carton (sort keys %carton_specs) {
    for ( 1 .. $carton_specs{$carton}{boxNo} ) {
        push @{ $raterequest->{Shipment}{Package} }, {
            PackagingType => {
                Code => '02',
                Description => 'Package',
            },
            PackageWeight => {
                UnitOfMeasurement => { Code => 'LBS' },
                Weight => $carton_specs{$carton}{boxWt},
            },
        };
    }
}

dd $raterequest;

输出:

{
  Shipment => {
    Package => [
      {
        PackageWeight => { UnitOfMeasurement => { Code => "LBS" }, Weight => 4 },
        PackagingType => { Code => "02", Description => "Package" },
      },
      {
        PackageWeight => { UnitOfMeasurement => { Code => "LBS" }, Weight => 4 },
        PackagingType => { Code => "02", Description => "Package" },
      },
      {
        PackageWeight => { UnitOfMeasurement => { Code => "LBS" }, Weight => 8 },
        PackagingType => { Code => "02", Description => "Package" },
      },
      # ... omit 16 repetitions of the previous hashref ...
    ],
  },
}

【讨论】:

  • 效果很好!!非常感谢您的快速回复!我刚从我的老板那里得到了一个 20 分钟的讲座,关于我们应该如何聘请某人来做这件事,因为我显然无法弄清楚。让我们忽略 4 天前我对 Perl 一无所知的部分,自学 Perl,并在尝试编写 sub 和实现的同时尽可能多地学习细微差别!再次,谢谢!!!
  • 现在我正在查看最终代码,push 似乎很明显!
猜你喜欢
  • 2011-09-29
  • 2013-01-04
  • 1970-01-01
  • 1970-01-01
  • 2011-04-01
  • 2021-11-26
  • 1970-01-01
  • 2019-04-28
  • 1970-01-01
相关资源
最近更新 更多