サブルーチン内で my を使って変数 $word を局所化したため、6行目で代入された「雨」はサブルーチンを抜けた瞬間消滅してしまいます。したがって、3行目の変数 $word は期待どおりに「晴れ」が実行されることになります。
ちなみに、今回の例文では my の代わりに local を使用しても構いません。(同じ結果になります)
8-4. local と my の違い
ローカル変数を宣言する関数として、local と my の2つがありますが、この2つの関数には次のような特性とそれぞれの相違が存在します。