Arrays t、 我们可以用 my$copy=[ [$BIG[0][0]], [$BIG[0][1]], ];

Arrays t、 我们可以用 my$copy=[ [$BIG[0][0]], [$BIG[0][1]], ];,arrays,perl,Arrays,Perl,或者我们可以复制所有引用的变量,一直复制下去。这就是所谓的深度复制 使用可存储qw(dclone); 我的$deep_copy=dclone($BIG[0]); 或 使用Cpanel::JSON::xsqw(encode_JSON decode_JSON); 我的$deep_copy=decode_json(encode_json($BIG[0]); 顺便说一下 { 我的@tmparray; 我的@atsign; 我的@EQsign; 按@atsign,'hrdl:raw_uuuu:in:

或者我们可以复制所有引用的变量,一直复制下去。这就是所谓的深度复制

使用可存储qw(dclone);
我的$deep_copy=dclone($BIG[0]);

使用Cpanel::JSON::xsqw(encode_JSON decode_JSON);
我的$deep_copy=decode_json(encode_json($BIG[0]);

顺便说一下

{
我的@tmparray;
我的@atsign;
我的@EQsign;
按@atsign,'hrdl:raw_uuuu:in:uuuuuu:';
按@EQsign,('\.((tex)|(txt))|((tex)|(txt)));
按@tmparray,[@atsign];
按@tmparray,[@EQsign];
推@BIG,[@tmparray];
}
这是浪费。您正在免费复制阵列。(
[@atsign]
或多或少等同于
my@anon=@atsign;\@anon
)修复:

{
我的@tmparray;
我的@atsign;
我的@EQsign;
按@atsign,'hrdl:raw_uuuu:in:uuuuuu:';
按@EQsign,('\.((tex)|(txt))|((tex)|(txt)));
按@tmparray,\@atsign;
按@tmparray,\@EQsign;
推@BIG,\@tmparray;
}
它仍然是不必要的冗长,阻碍了可读性。固定的:

{
my@atsign='hrdl:raw_uuuu:in:uuuuuu:';
my@EQsign=('\.((tex)|(txt))|((tex)|(txt)));
按@BIG,[\@atsign,\@EQsign];
}
你甚至可以使用

push@BIG[
['hrdl:raw\uuuz:in:uuuuuj:'],
['\((tex)|(txt))|((tex)|(txt)))],
];

这就更清楚了。

Re“@后面的字符串将是@atsign子数组中的唯一元素。”,这毫无意义。制作一个总是只有一个元素的数组是没有意义的。Re“我的实际应用程序不会有那样的硬编码数据元素。我将遍历一个文本文件,其中包含数组中各个元素的单独行,并从文本文件中构建数组。”,这仍然不是使用
[@a]的借口
而不是
\@a
。我在回答中说的是。Re“@后面的字符串将是@atsign子数组中的唯一元素”,这没有任何意义。制作一个总是只有一个元素的数组是没有意义的。Re“我的实际应用程序不会有那样的硬编码数据元素。我将遍历一个文本文件,其中包含数组中各个元素的单独行,并从文本文件中构建数组。”,这仍然不是使用
[@a]的借口
而不是
\@a
。我在回答中所说的是站得住脚的。改变答案来解释改变了的问题。改变答案来解释改变了的问题。
#!/usr/bin/perl
use strict; use warnings;
use Data::Dumper qw(Dumper); #https://perlmaven.com/hash-of-arrays
select(STDERR);

my @BIG;

{
    my @tmparray;
    my @atsign;
    my @EQsign;
    push @atsign, 'hrdl:raw_:in:__:';
    push @EQsign, ( '\.(((tex)|(txt))|((TEX)|(TXT)))' );
    push @tmparray, [@atsign];
    push @tmparray, [@EQsign];
    push @BIG, [@tmparray];
}

{
    my @tmparray;
    my @atsign;
    my @EQsign;
    push @atsign, 'hrdl:raw_:EX:__:i';
    push @EQsign, ( 'bad words', 'bad\s*word' );
    push @EQsign, ( 'forbidden', );
    push @tmparray, [@atsign];
    push @tmparray, [@EQsign];
    push @BIG, [@tmparray];
}
print "BIG=\n"; print Dumper \@BIG;
my @extracted_subarray;
@extracted_subarray = pop @BIG;
print "extracted_subarray=\n"; print Dumper \@extracted_subarray;