原です。

>> compact.empty? のあたりは Enumerable#any? が使えそうですね。
>使いたい気持ちは山々なんですが、ruby 1.7 feature なので・・・。

find で代用もできますね。

while (line = [f1.gets, f2.gets]).find{|x| x}
  printf("%-35s | %-35s\n", (line[0] || "").chomp, (line[1] || "").chomp)
end

でも、やっぱりいらぬ gets が気になります。