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;