my $flags = 36; # 適当なbit flags 例えば32bitとする
my $bit = 2; # セットしたいbit位置(を1にした値)
my $flag = 1; # セットするflag状態 0 or 1

として、bitのset、resetを行うような処理を、
my $mask = ~$bit;
$flags &= $mask;
$flags |= $bit if $flag;
こう書いているのですが、もうちょっとなんとかなりませんかね。