Arrays Can';在perl中使用[]进行定义时使用t diff数组

Arrays Can';在perl中使用[]进行定义时使用t diff数组,arrays,perl,Arrays,Perl,当我使用以下代码时,它可以正常工作: #!/usr/bin/perl use strict; use Data::Dumper; use Array::Utils qw(:all); my @a = (1,2,3,4,5,6); my @b = (1,2,3,4,7,8,9,10); my @c = (2,1,4,3,6,5); print "a: ".Dumper(@a)."\n"; print "b: ".Dumper(@b)."\n"; print "c: ".Dumper(@c).

当我使用以下代码时,它可以正常工作:

#!/usr/bin/perl

use strict;
use Data::Dumper;
use Array::Utils qw(:all);

my @a = (1,2,3,4,5,6);
my @b = (1,2,3,4,7,8,9,10);
my @c = (2,1,4,3,6,5);

print "a: ".Dumper(@a)."\n";
print "b: ".Dumper(@b)."\n";
print "c: ".Dumper(@c)."\n";
print "a-b: ".Dumper(array_minus(@a, @b))."\n";
#print "b-a: ".Dumper(array_minus(@b, @a))."\n";
#print "c-b: ".Dumper(array_minus(@c, @b))."\n";
#print "b-c: ".Dumper(array_minus(@b, @c))."\n";
#print "a-c: ".Dumper(array_minus(@a, @c))."\n";
print "c-a: ".Dumper(array_minus(@c, @a))."\n";
print "c in a: ".Dumper(intersect(@c, @a))."\n";
但是,当我对数组代码使用这种类型的声明时,它不起作用:

#!/usr/bin/perl
use strict;
use Data::Dumper;
use Array::Utils qw(:all);

my @a = [1,2,3,4,5,6];
my @b = [1,2,3,4,7,8,9,10];
my @c = [2,1,4,3,6,5];

print "a: ".Dumper(@a)."\n";
print "b: ".Dumper(@b)."\n";
print "c: ".Dumper(@c)."\n";
print "a-b: ".Dumper(array_minus(@a, @b))."\n";
#print "b-a: ".Dumper(array_minus(@b, @a))."\n";
#print "c-b: ".Dumper(array_minus(@c, @b))."\n";
#print "b-c: ".Dumper(array_minus(@b, @c))."\n";
#print "a-c: ".Dumper(array_minus(@a, @c))."\n";
print "c-a: ".Dumper(array_minus(@c, @a))."\n";
print "c in a: ".Dumper(intersect(@c, @a))."\n";

我需要使用[]定义数组,因为在我的原始代码中,当我使用
array::Diff->Diff
时,它返回两个添加和删除的数组,它们使用[]而不是()存储,因为我的
array\u减号
,相交操作失败。

这是因为这些操作做了完全不同的事情

my @a = (1,2,3,4,5,6);

my @a = [1,2,3,4,5,6];
方括号定义匿名列表,返回引用。因此,在第二种情况下,您可以有效地创建多维数据结构

$VAR1 = [
          1,
          2,
          3,
          4,
          5,
          6
        ];
Vs

注意额外的括号。您可以作为
@{$a[0]}
访问此文件,并在代码中获得相同的结果

但方括号的主要用途是指定一个参考:

my $a_ref = [1,2,3,4,5,6];
print Dumper $a_ref;
这基本上就是你正在做的事情——以你的第二个例子为例:

my @a = [1,2,3,4,5,6]; 

print "a has ", scalar @a, " elements\n";
print join ("\n", @a );
这张照片是:

a has 1 elements
ARRAY(0x346dd4)
因为
@a
是一个包含引用的单元素数组,转储程序“跟随”该数组以获取数据结构的其余部分

$VAR1 = [
          1,
          2,
          3,
          4,
          5,
          6
        ];

很可能您正在进行的函数调用没有做到这一点,这就是它不起作用的原因

下面是我得到的输出“a-b:$VAR1=[1,2,3,4,5,6];c-a:$VAR1=[2,1,4,3,6,5];a中的c:“这是错误的是,第7行应该是“my@a=(1,2,3,4,5,6);”。我的错误,对不起,我应该检查一下。