「代入文の存在をパースした瞬間に変数は作られる」とでも言うべきかね
一応マニュアルの変数のとこには書いてあるんだが、
困ったときに参照されないんでいまいち広まらないな

> 宣言は、例え実行されなくても宣言とみなされます。
>
> v = 1 if false # 代入は行われないが宣言は有効
> p defined?(v) # => "local-variable"
> p v # => nil