У меня есть хэш, и я пытаюсь вставить его значения в базу данных. Хеш определяется следующим образом:
my %hash = (
1 => 'First Word',
2 => 'Second Word is correct',
0 => 'Third word does not exist',
);
Я не знаю, как вставить значения в базу данных, используя хэши. Я заметил, что мой вопрос похож на этот вопрос. Но ни один из ответов не кажется правильным. При использовании любого из перечисленных ответов значения в хэше не вставляются, вместо этого вставляется ссылка на хэш, т.е. ARRAY(0x9e63b30)
. Но когда я print Dumper @values
, значения печатаются, а не справочные значения.
Любые предложения о том, как вставить значения, а не их ссылку? И что не так в решениях, перечисленных в ответах на вопрос .
@ значения определены так же, как этот вопрос, т. Е.
my @values = values %hash;
Edit:
Структура БД:
Т1:
sid sentence
1 First Word
2 Second Word is correct
0 Third word does not exist
в приведенном выше sid - это keys
хешей, а предложение - values
хешей.
это то, что я опробовал (это один из ответов на вопрос ):
my @keys = keys %hash;
my @values = values %hash;
my $sth = $dbh->prepare("INSERT INTO T1(sid, sentence) VALUES (?,?);");
$sth->execute_array({},\@keys, \@values);
снова, при вставке @values
вводятся опорные значения.
EDIT:
_ ВЫХОД _
$VAR1 = 'First Word';
$VAR2 = 'Third word does not exist';
$VAR3 = 'Second Word is correct';
_ КОД _
Вот как я вставляю значения в% хэш
my $x=0;
foreach my $file(@files){
if ($file =~ /regex/){
push(@{$hash{$x}}, "$1 $2 $3 $4 $5 $6 $7");
}
elsif ($file =~ /regex/){
push(@{$hash{$x}}, "$1 $2 $3 $4 $5 $6");
}
elseif ($file =~ /Hs_(.+)_(.+)_(.+)_(.+)_(.+)_W.+txt/){
push (@{$hash{$x}}, "$1 $2 $3 $4 $5");
}
$x++;
}