如何在Perl中创建数组和哈希?

时间:2010-10-05 16:35:09

标签: arrays perl hash

这不是一般性问题。我问过这个问题,因为我对创建Perl数组很困惑。

  1. 如何创建或定义数组或哈希?有什么其他方法可以做到这一点?
  2. 如何清除数组或哈希?有什么其他方法可以做到这一点?
  3. 如何使用空元素创建数组或散列?
  4. 使用out值创建哈希的方法有哪些?

5 个答案:

答案 0 :(得分:5)

如果你遇到这样的基础问题,你应该去看看perldoc perlsyn。它涵盖了语言语法,应该告诉你需要什么。

答案 1 :(得分:2)

词法数组和哈希值为空。您可以使用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;

您还可以从数组中popshiftsplice项:

pop   @array while @array;
shift @array while @array;

splice @array, 0, scalar @array;

您还可以通过为其名称的$#array形式指定一个数字来修改数组和数组中的元素数。如果指定负值,则清空该数组:

$#array = -1;

答案 2 :(得分:1)

您可以通过分配列表(包括空列表)来创建数组和哈希值:

 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 = ();

答案 3 :(得分:0)

听起来你可以从阅读tutorials and beginners guides到Perl中受益。有很多例子可以完全满足你的要求。

要记住的一点是哈希和数组几乎相同(概念上),但数组由整数索引,哈希用字符串索引。从语法上来说,你会以不同的方式引用这些指数,但从概念上讲,这就是你如何看待它们。

答案 4 :(得分:0)

创建数组:

my @array = (1, 2, 3, 4);

创建哈希:

my %hash = (
    one   => 1,
    two   => 2,
    three => 2,
    four  => 2,
);

清除数组或哈希:

@array = ();
%hash = ();

创建空数组/哈希:

my @array = ();
my %hash = ();