更新:在一行中初始化和清除多个哈希

Sou*_*ode 3 perl

如何在一行中初始化和清除多个哈希.

例如:

my %hash1 = ();
my %hash2 = ();
my %hash3 = ();
my %hash4 = ();
Run Code Online (Sandbox Code Playgroud)

my ( %hash1, %hash2, %hash3, %hash4 ) = ?
Run Code Online (Sandbox Code Playgroud)

Zai*_*aid 5

它就像做一样简单

my ( %hash1, %hash2, %hash3, %hash4 );
Run Code Online (Sandbox Code Playgroud)

并且它们不会包含任何键或值.

相同的技术适用于标量和数组.

对于undef多个哈希,你可以做到

undef %$_ for ( \%hash1, \%hash2 );
Run Code Online (Sandbox Code Playgroud)


小智 5

它(从你的评论中)看起来你真的想要清空已经有东西的哈希.你可以这样做:

(%hash1,%hash2,%hash3) = ();
Run Code Online (Sandbox Code Playgroud)

完整的例子:

use strict;
use warnings;

my %hash1 = ('foo' => 1);
my %hash2 = ('bar' => 1);
my %hash3 = ('baz' => 1);

(%hash1,%hash2,%hash3) = ();

print (%hash1,%hash2,%hash3);
Run Code Online (Sandbox Code Playgroud)

变量声明总是为您提供一个空变量,因此无需将其设置为空.即使在循环中也是如此:

for (0..100)
{
    my $x;
    $x++;
    print $x;
}
Run Code Online (Sandbox Code Playgroud)

这将1一遍又一遍地打印出来; 即使您可能期望$x保留其价值,但事实并非如此.

说明: Perl允许列表赋值($foo,$bar) = (1,2).如果右侧的列表较短,则会分配任何剩余的元素undef.因此,将空列表分配给变量列表会使它们都未定义.

设置一堆东西的另一个有用方法是x运算符:

my ($x,$y,$z) = (100)x3;
Run Code Online (Sandbox Code Playgroud)

这会将所有三个变量设置为100.但是,对于哈希,它不能很好地工作,因为每个变量都需要一个分配给它的列表.