あなたの予想に反して、この式が評価されているでしょうか?

ということで、こういうことをしたかったんだけど:

puts if ((0..12).cover? Time.now.hour then "Hello, World!" else "Good evening, World!" end

これはシンタックスエラーになる。

他の方法で上のようにワンライナーで書ける方法は無いかと考えてみたところ、
&& 演算子と || 演算子を使う方法に思い当たった。
それを使うとこんなふうになる:

puts ((0..12).cover? Time.now.hour && "Hello, World!") || "Good evening, World!"

and と or を逆にすると 一番最初の値が表示されちゃうので注意。

* 最初の例に if の end が抜けてたので修正。