in reply to If condition

You need to indent your code. Not indenting correctly makes it hard to see what really happens. This is how it should look:

for my $data_pair (@data_list) { if($data_pair->{'key'} eq 'correct') { my $cor= $data_pair->{'value'}; if($data_pair->{'key'} eq 'date') { my $date = $data_pair->{'value'}; ... } } }

It is now clear that getting to the my $date = $data_pair ... is impossible.

Another issue is that you have a syntax error in your script. I can't see how you'd ever be able to run it:

$sql_content .= " INSERT IGNORE INTO correct SET text='".$cor."', date='".$date."';

Again, formatting the code better and using DBI placeholders or just interpolation would help you see it (interpolation: you can write text='$cor' in stead of text='" . $cor . "'.

So my message is: keeping your code tidy is a great way of avoiding the kind of confusion that caused you to ask here in the first place.