私はperlを初めて使用し、特定の列を取得するための配列のハッシュの使用について質問があります。私のコードは次のとおりです。
my %hash = ( name1 => ['A', 'A', 'B', 'A', 'A', 'B'],
name2 => ['A', 'A', 'D', 'A', 'A', 'B'],
name3 => ['A', 'A', 'B', 'A', 'A', 'C'],
);
#the values of %hash are returned as arrays not as string (as I want)
foreach my $name (sort keys %hash ) {
print "$name: ";
print "$hash{$name}[2]\n";
}
for (my $i=0; $i<$length; $i++) {
my $diff = "no";
my $letter = '';
foreach $name (sort keys %hash) {
if (defined $hash{$name}[$i]) {
if ($hash{$name}[$i] =~ /[ABCD]/) {
$letter = $hash{$name}[$i];
}
elsif ($hash{$name}[$i] ne $letter) {
$diff = "yes";
}
}
if ( $diff eq "yes" ) {
foreach $name (sort keys %hash) {
if (defined $hash{$name}[$i]) { $newhash{$name} .= $hash{$name}[$i]; }
}
}
}
}
foreach $name (sort keys %newhash ) {
print "$name: $newhash{$name} \n";
}
このプログラムの出力は、変数列のみを持つ新しいハッシュのようなものにしたいと思います。
my %newhash = ( name1 => 'BB',
name2 => 'DB',
name3 => 'BC',
);
ただし、次のメッセージのみが表示されます。test_hash.plの31行目の文字列neで初期化されていない値$letterを使用しています。
誰かがこれについてアイデアを持っていますか?乾杯
編集:
この質問にご協力いただきありがとうございます。
私は自分の投稿を編集して、frezik、Dan1111、Jeanの提案を確認しました。そうです、今は警告はありませんが、printステートメントからも出力を取得できず、これについての手がかりもありません...
@TLP:わかりました。順序を指定せずに、ランダムな列のセットを生成するだけです。私が本当に望んでいるのは、文字がどのように変化するかです。つまり、同じ配列インデックス(ハッシュに格納されている)に対して文字が同じである場合はそれらを破棄しますが、キー間で文字が異なる場合はそのインデックスを格納します新しいハッシュの列。
乾杯。