String#indexにKarp-Rabinアルゴリズムを導入しても、それほど速くならないのは、
文字列を直接書いた場合、毎回Stringオブジェクトを生成するからだと思います。

while gets
  print if $_.index 'XYZ'
end

while gets
  print if $_.index /XYZ/
end

文字列を変数に代入しておけばよいのですが、
この際、正規表現の場合のようにonce化する機能を提供できないでしょうか。

%'xyz', %"xyz" のような指定方法でも良いですが、
文字列以外にも使用できるように、onceというキーワードを追加するのは
どうでしょうか? (onceオブジェクトは凍結されます)

once 'XYZ'
once [1,2,3]

他にもっとましな方法があれば、それでも良いですが。
--
小迫@ソフネック   渋谷区恵比寿1-15-1