5.8以降使えよ

と俺も思うが。

サブルーチンを一個作って解決する方法もある。
引数に$str1とかを取って、1バイトずつスキャンして
[の前に\を挿入するサブルーチン。

正規表現のパターンに変数を突っ込む前にそのサブルーチンで変換する。

$a =~ /&hoge($str1)/; とかできたっけ?

$a =~ s/(...)/&hoge($1)/; はできたような記憶がかすかにあるが。