这不是通用的问题。我问过这个问题,因为我对创建Perl数组感到困惑。如何在Perl中创建数组和哈希值?
- 如何创建或定义数组或散列?还有什么其他方法可以做到这一点?
- 如何清除数组或散列?还有什么其他方法可以做到这一点?
- 如何用空元素创建数组或散列?
- 什么是用out值创建散列的方法?
这不是通用的问题。我问过这个问题,因为我对创建Perl数组感到困惑。如何在Perl中创建数组和哈希值?
词汇数组和散列创建空的。您可以创建一个新的词汇数组或哈希与my
:
my @array;
my %hash;
在大多数情况下,你应该只使用词汇数组和哈希,但您可以创建封装阵列或our
哈希:
our @array;
our %hash;
@array
和%hash
在这种情况下可能有也可能没有数据(如果它们是以前创建的,则不会清除它们的内容)。这些变量的名称是词法范围的,但数据包范围的,所以如果你说:
{
our @a = (1 .. 5);
}
{
our @a;
print "@a\n";
}
它仍然会打印"1 2 3 4 5\n"
。
有很多方法可以清除散列或数组。最常见的是指定一个空列表吧:
@array =();
%hash =();
您还可以使用undef
清除散列或数组:
undef @array;
undef %hash;
pop @array while @array;
shift @array while @array;
splice @array, 0, scalar @array;
也可以通过分配一个号码到$#array
修改元件的数目和阵列它的名字的形式。如果您指定一个负值,阵列将被清空:
$#array = -1;
+1:你是一个非常有耐心的人... – 2010-10-05 20:37:56
@ carrot-top多么好的方式来描述我的病情。 – 2010-10-05 22:27:03
如果您在使用此类基础知识时遇到问题,您应该查看perldoc perlsyn
。它涵盖了语言的语法,并且应该告诉你你需要什么。
可以通过分配列表(包括空列表)创建数组和散列:
my @a1; # empty array
my @a2 = 'a';
mh %h1; # empty hash
my %h2 = 'a'; # a => undef
my %h3 = ('a', 'b'); # 'a' => 'b'
my %h4 = (a => 'b'); # 'a' => 'b'
可以清除通过显式指定一个空列表数组或哈希:
@a2 =();
%h3 =();
它听起来像你可以从Perl tutorials and beginners guides中获益。有很多例子可以完全满足你的要求。
要记住的一件事是哈希和数组几乎是相同的(概念上),但数组是通过整数索引的,并且哈希是由字符串索引的。在语法上,你引用这些指数的方式不同,但从概念上讲,这就是你如何看待它们的方法。
我会添加一个其他区别:数组是有序的,哈希是无序的。也就是说,如果你遍历一个给定的数组,你将总是以相同的顺序返回项目,但是哈希不能保证['keys']返回的值的顺序(http:// perldoc .perl.org/functions/keys.html),['values'](http://perldoc.perl.org/functions/values.html)或['each'](http://perldoc.perl。 org/functions/each.html)。 – 2010-10-05 16:51:07
是的,这是一个很好的观点。当然,还有其他许多不同之处,但这两个可能对于试图解决主要差异的人来说很有意义。 – CanSpice 2010-10-05 16:55:42
创建阵列:
my @array = (1, 2, 3, 4);
创建哈希:
my %hash = (
one => 1,
two => 2,
three => 2,
four => 2,
);
清除数组或哈希:
@array =();
%hash =();
创建空数组/散列:
正如您向您建议的无数次,您需要坐下来阅读文档并阅读一些入门书籍。 [“学习Perl”](http://en.wikipedia.org/wiki/Learning_Perl)非常出色,并且对您的益处远不止于要求诸如此类的开放式问题。 – Ether 2010-10-05 16:40:49