Ruby の修飾子について

Ruby の if, unless, while, until は修飾子として使えますが、

puts i if (i = 1)
#=>NameError: undefined local variable or method `i' for main:Object

はこれ以前の行に i が出てこないかぎり、エラーなのですね。しかし

i = 0
puts i if (i = 1)    #=>1

はエラーでないので使いましょう。if でなくても同じです。こんな無限ループも書けます。

i = 0
puts i while (i += 1)

便利ですね、修飾子。