置換の際、被置換文字列($string)に、ある文字列($buf)を格納した変数で置換するとき、その変数に^などの特殊文字が入っていると
うまく置換されないのですがどのようにすればよいのでしょうか

$string =~ s/$buf//;