1 行で複数のハッシュを初期化してクリアするにはどうすればよいですか。
元:
my %hash1 = ();
my %hash2 = ();
my %hash3 = ();
my %hash4 = ();
に
my ( %hash1, %hash2, %hash3, %hash4 ) = ?
1 行で複数のハッシュを初期化してクリアするにはどうすればよいですか。
元:
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
ます。したがって、空のリストを変数のリストに割り当てると、それらはすべて未定義になります。
一連のものを設定するもう 1 つの便利な方法は、x
演算子です。
my ($x,$y,$z) = (100)x3;
これにより、3 つの変数すべてが 100 に設定されます。ただし、ハッシュには、それぞれにリストを割り当てる必要があるため、うまく機能しません。
やるのと同じくらい簡単です
my ( %hash1, %hash2, %hash3, %hash4 );
その時点ではキーや値は含まれません。
同じ手法がスカラーと配列に適用されます。
複数のハッシュに対してundef
、次のことができます
undef %$_ for ( \%hash1, \%hash2 );
次のように初期化できます。
私の %hash1 = %hash2 = %hash3 = %hash4 = ();