У меня есть хэш, и я пытаюсь вставить его значения в базу данных. Хэш определяется следующим образом:
my %hash = (
1 => 'First Word',
2 => 'Second Word is correct',
0 => 'Third word does not exist',
);
Я не знаю, как вставлять значения в базу данных, используя хэши. Я заметил, что мой вопрос похож на этот вопрос. Но ни один из ответов не кажется правильным. При использовании любого из перечисленных ответов значения в хеше не вставляются, вместо этого вставляется ссылка на хэш, т.е. ARRAY(0x9e63b30)
. Но когда я print Dumper @values
, печатаются значения, а не ссылочные значения.
Любые предложения о том, как вставлять значения, а не их ссылку? И что не так в решениях, перечисленных в ответах на вопрос.
@values определяется так же, как этот вопрос, т.е.
my @values = values %hash;
Изменить: структура БД:
T1:
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
опорных значений вставляются.
РЕДАКТИРОВАТЬ:
_ ВЫВОД _
$VAR1 = 'First Word';
$VAR2 = 'Third word does not exist';
$VAR3 = 'Second Word is correct';
_ КОД _ вот как я вставляю значения в %hash
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++;
}
print Dumper \@values
- person Sinan Ünür   schedule 01.12.2009