すみません質問させて下さい。
以下のコードのように、プロシージャfooを作っておいて
複数のボタンをpackする作業をまとめたいと考えています。

proc foo {w msg} {
pack [button $w.$msg -text $msg -command {puts $msg}]
}

pack [frame .f]
foo .f "b1"
foo .f "b2"

ところがボタンを押してcommandを実行させると、
以下のエラーが出ます。
Error: can't read "msg": no such variable

ボタンを押したときにローカル変数msgを参照できていないということだと
思いますが、何か良い解決策はありませんか?
よろしくお願いします。