So, ich bin ein grosses Stück weitergekommen:
Code:
sub get_it {
# generates datacache from tempdb using dbid or from dataimport. dataimport has higher priority.
# if multiple datasets are selected, only the values that are equal are returned.
my $dbh = shift;
my $tabletemp = shift;
my $id = shift;
my $str="";
my %resulthash;
my %controlhash;
my @names;
my $sql="SELECT * FROM $tabletemp WHERE ID='$id'";
my $sth = $dbh->prepare($sql) or die $dbh->errstr();
$sth->execute or die $dbh->errstr();
while (my $hash_ref = $sth->fetchrow_hashref) {
foreach(keys(%{$hash_ref})){
$str .= "push(\@$_,\$hash_ref->{$_});";
push(@names,$_);
}
eval $str;
}
$sth->finish ();
foreach $names(@names){
$controlhash{$names} = "empty";
foreach @poss(eval "\@$names"){
foreach $var($poss){
$controlhash{$names} = $var;
}
}
$resulthash{$names} = $controlhash{$names};
}
return %resulthash;
}
Das gute Ding kann die Daten auslesen und speichert sie im Hash, der Zurückgegeben wird. Natürlich überschreibt er den controlhash jeweils mit dem letzten Wert aus dem Array @$names. Nun möchte ich diese Werte vor dem überschreiben miteinander vergleichen.
Ich habe mir gedacht, dass das so funktionieren könnte:
Code:
if ($controlhash{$names} eq "empty" || $controlhash{$names} eq $var){
$controlhash{$names} = $var;
}
else {
$controlhash{$names} = "";
}
Hat jemand eine Idee, wieso das nicht geht?
Vielen Dank!
Lesezeichen