No need to assign a variable to the global, since the global is a variable. This would work better for you, and won't throw up warnings in the logs:
Code:
sub EVENT_SAY {
if($text=~/hail/i && !defined $qglobals{conversation}){
quest::setglobal("conversation", 1, 0, "F");
quest::say("I will remember you, next time you hail me!");
}
elsif($text=~/hail/i && defined $qglobals{conversation}){
quest::say("We have talked before!");
}
}