perl - 更新 : Initialise and Clear multiple hash in one line

标签 perl

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

例如:

my %hash1 = ();
my %hash2 = ();
my %hash3 = ();
my %hash4 = ();

my ( %hash1, %hash2, %hash3, %hash4 ) = ?

最佳答案

看起来(从您的评论中)您确实想要清空其中已经包含内容的哈希。你可以这样做:

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

完整示例:

use strict;
use warnings;

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

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

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

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

for (0..100)
{
    my $x;
    $x++;
    print $x;
}

这将一遍又一遍地打印1;即使您可能期望 $x 保留其值,但它没有。

解释: Perl 允许像 ($foo,$bar) = (1,2) 这样的列表赋值。如果右边的列表更短,任何剩余的元素都会被分配 undef。因此,将空列表分配给变量列表会使它们全部未定义。

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

my ($x,$y,$z) = (100)x3;

这会将所有三个变量都设置为 100。不过,它不适用于哈希,因为每个变量都需要分配一个列表。

关于perl - 更新 : Initialise and Clear multiple hash in one line,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14626908/

相关文章:

perl - 在递归 ssh 命令中引用 bash 和 perl

perl - 如何在 Perl 模块中编写函数引用?

perl - 需要将 Perl 解包转换为 Inline::C AV*

perl - perl 使用什么 Cwd qw();意思是?

perl - perl 上的 coreutils 超时模拟

perl - 如何在磁盘上而不是在 RAM 中保存大哈希值?

perl - 如何模拟 Perl 的内置反引号运算符?

python - 如何使 python 或 perl 脚本可移植到 linux 和 windows?

perl - perl 脚本的无服务器执行?

python - 外壳 : insert a blank/new line two lines above pattern