Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于perl程序的几个问题_Perl - Fatal编程技术网

关于perl程序的几个问题

关于perl程序的几个问题,perl,Perl,关于以下代码段,我想知道我对几个问题的理解是否正确 1) 在$model->{in1}->{tra1}->{data}}的结构中,“in1”、“tra1”和“data”都表示散列结构不同级别的特定键 2) ${$model->{in1}->{tra1}->{data}}是否表示数组 3) 我的@cus=排序键%cus目标是什么?右边的“cus”和左边的“cus”是一样的吗 my %cus = (); for my $i ( 0 .. $#{$model->{in1}->{tra1}-

关于以下代码段,我想知道我对几个问题的理解是否正确

1) 在
$model->{in1}->{tra1}->{data}}
的结构中,“in1”、“tra1”和“data”都表示散列结构不同级别的特定键

2)
${$model->{in1}->{tra1}->{data}}
是否表示数组

3) 我的
@cus=排序键%cus目标是什么?右边的“cus”和左边的“cus”是一样的吗

my %cus = ();
for my $i ( 0 .. $#{$model->{in1}->{tra1}->{data}})
{
  foreach  my $cu (keys %{$model->{in1}->{tra1}->{data}->[$i]->{concept}}
   {
       $cus{$cu} = 1;
   }
 }
my  @cus = sort keys %cus;
  • 是的,你有三个深度的嵌套散列

  • 是的,
    $#{…}
    部分表示“封闭数组的最大索引”。您还知道,
    ..->{data}
    是一个(对一个)数组的引用,因为下一行的
    ->{data}->[$i]

  • @cus
    %cus
    是两个不同的变量,不相关

  • $model->{in1}->{tra1}->{data}}
    的结构中,“in1”、“tra1”和“data”都表示散列结构不同级别的特定键

    对。如果不是这样,就会出现错误

    $#($model->{in1}->{tra1}->{data}}
    表示数组吗


    不完全是。它是数组中的元素数(因此,是的,散列中的数据应该是数组)

    我的
    @cus=排序键%cus;
    的目标是什么

    它从哈希表
    %cus
    中获取所有键,并按字母顺序将它们排序到一个新数组
    @cus

    右边的“cus”和左边的“cus”是一样的吗

    my %cus = ();
    for my $i ( 0 .. $#{$model->{in1}->{tra1}->{data}})
    {
      foreach  my $cu (keys %{$model->{in1}->{tra1}->{data}->[$i]->{concept}}
       {
           $cus{$cu} = 1;
       }
     }
    my  @cus = sort keys %cus;
    
    否。在Perl
    $cus
    中,
    @cus
    %cus
    是三个不同的变量。前缀表示类型。

    1)

    是的,它们是不同散列的键

    • in1
    中的
    用作
    $model
    引用的哈希的键
  • tra1
    用作
    $model->{in1}
    引用的哈希的键
  • data
    用作
    $model->{in1}->{tra1}
    引用的哈希的键
  • (二)

    • $\a
      返回数组
      @a
      的最后一个索引
    所以

    • ${$ref}
      (简称
      ${$ref
      )返回
      @{$ref}
      (简称
      @$ref
      )所引用数组的最后一个索引
    所以

    • ${$model->{in1}->{tra1}->{data}
      返回
      {$model->{in1}->{tra1}->{data}
      引用的数组的最后一个索引
    (三)

    该语句对哈希
    %cus
    的键进行排序,并将它们放置在数组
    @cus
    中。不,
    %cus
    @cus
    不是同一个变量

    “4”)

    代码可以简化为:

    my %cus;
    my $data = $model->{in1}->{tra1}->{data};
    for my $i (0 .. $#$data) {
       for my $cu (keys %{ $data->[$i]->{concept} }) {
          ++$cus{$cu};
       }
    }
    
    my @cus = sort keys %cus;
    
    甚至:

    my %cus;
    for my $data_item (@{ $model->{in1}->{tra1}->{data} }) {
       for my $cu (keys %{ $data_item->{concept} }) {
          ++$cus{$cu};
       }
    }
    
    my @cus = sort keys %cus;
    

    修复了不匹配的brakets
    $#(…}
    %(…}
    “它是数组中的元素数”不完全是数组中最后一个元素的索引(通常比元素数少一个)。