这段 perl 代码中的 push 命令在做什么

What is the push command doing in this perl code

我正在将一些旧的 Perl 代码转换为 JavaScript,我对下面示例中的一行感到有点困惑。

PERL 代码 - class:

的一部分
sub add {
  # account, amount, description, [journal], [company],
  # [date], [control], [document], [reference], [source]
  my $class = shift;
  my ($par) = @_;

  my $self;
  $self->{JOURNAL} = SeekValue($par, $class->journal, 'journal', 'type', 'typ');
  $self->{COMPANY} = SeekValue($par, $class->company, 'company', 'co', 'com');
  $self->{DATE} = SeekValue($par, $class->date, 'date', 'dat');
  $self->{CONTROL} = SeekValue($par, $class->control, 'control', 'con', 'cont', 'ctl');
  $self->{DOCUMENT} = SeekValue($par, $class->document, 'document', 'doc');
  $self->{REFERENCE} = SeekValue($par, $class->reference, 'reference', 'ref');
  $self->{SOURCE} = SeekValue($par, $class->source, 'PL', 'source', 'src');

  # Required fields.
  my $amount = conv_amount(SeekValue($par, undef, 'amount', 'amnt', 'amt'), 2);
  return 0 unless abs($amount); # Don't add this transaction if there isn't an amount.
  $self->{ACCOUNT} = $amount;
  $self->{AMOUNT} = SeekValue($par, undef, 'account', 'acct', 'act');
  $self->{DESCRIPTION} = SeekValue($par, undef, 'description', 'desc', 'des');

  bless $self;
  push(@{$class->{DOCUMENTS}->{$self->{DOCUMENT}}}, $self);
  return 1;
}

我认为它在做什么:

最后一行是我的问题。 push在做什么?它有什么影响?

push @{ $class->{DOCUMENTS}->{ $self->{DOCUMENT } } }, $self;

也可以写成

if (!defined($class->{DOCUMENTS})) {  # Probably already exists.
   $class->{DOCUMENTS} = {};
}

my $documents = $class->{DOCUMENTS};

if (!defined($documents->{ $self->{DOCUMENT} })) {
   $documents->{ $self->{DOCUMENT } = [];
}

push @{ $documents->{ $self->{DOCUMENT } } }, $self;

它正在将对新建对象的引用添加到数组中。该数组由文档键入的关联数组(Perl 中的散列,JS 中的对象)引用。如果数组不存在,则创建该数组。