正規表現のパターンに変数を使ったとき、その変数の値が正規表現のメタ文字を含んでると正しく動かない。言われてみればその通りなんだけど、気づくのに30分近くかかった…。
quotemetaを使って事前にエスケープすれば解決。

$text = "foo(bar)";

print "no quote\n";
$value = 'foo(bar)' ;
if ( $text =~ /$value/ ) {
        print "OK.\n" ;
}

print "quote\n";
$value = quotemeta( 'foo(bar)' ) ;
if ( $text =~ /$value/ ) {
        print "OK.\n" ;
}