То, как вы пытаетесь достичь этого, довольно странно, может быть проще объяснить, что вы пытаетесь сделать, чтобы найти менее необычный подход.
Во всяком случае, не зная, что вы вкладываете в $ str1 и $ str2, я думаю, что проблема в том, что eval не совсем делает то, что вы ожидаете. Подумайте, к чему относится строка, и вы увидите проблему:
$str = "abc";
$cond = "$str eq \"abc\"";
$ cond становится:
abc eq "abc"
Что если у вас есть строгие предупреждения и предупреждения (вы должны!) И вы проверяете результат своего eval в $ @ (вы должны!), Вы найдете:
Bareword "abc" not allowed while "strict subs" in use at .....