野村です

なかださん、コメントをありがとうございました。
次のように変更しました。

text = "default string"

while (true)
  print "#{text} > "
  break if not (s = gets)
  if s != "\n"
    text = s.chomp
  end
end

実は、下のプログラムの50行目で、text = "default string", のように
行の最後に ',' がついていると、text の内容は表示されるのに、入力
は空っぽという変な現象がどうしても取れず、最初のサンプルが同じよう
な現象のように見えたので投稿しました。再度見直しをして行末の ',' 
をみつけた次第です。このプログラムではコンマのあるなしによる
動作の変化の再現はできるのですが、似たようなプログラムを作っても
再現できません。しかし、お陰で動作させることができました。
ありがとうございました。

       1 #/***********************************************************
       2 #    sboymoo.rb -- Boyer--Moore法
       3 #***********************************************************/
       4 # 簡略Boyer-Moore法 
       5 
       6 UCHAR_MAX = 255
       7 DEMO = true        # デモンストレーション 
       8 
       9 def position(text, pattern)
      10     $skip = []
      11     len = pattern.length  # 文字列の長さ 
      12     if (len == 0); return -1; end  # エラー: 長さ0 
      13     tail = pattern[len - 1]        # 最後の文字 
      14     if (len == 1)                  # 長さ1なら簡単! 
      15         i = 0; while (text[i] != nil)
      16             if (text[i] == tail); return i; end
      17         i += 1; end
      18     else                         # 長さ2以上なら表を作って… 
      19         for i in 0..UCHAR_MAX; $skip[i] = len; end
      20         for i in 0...len - 1
      21             $skip[pattern[i]] = len - 1 - i
      22         end
      23         i = len - 1           # いよいよ照合 
      24         while ((c = text[i]) != nil) 
      25 if DEMO == true                         # デモンストレーション用 
      26             printf("テ: %s\n", text)
      27             printf("照: %*s\n", i + 1, pattern)
      28 end
      29             if (c == tail) 
      30                 j = len - 1;  k = i
      31                 while (pattern[j -= 1] == text[k -= 1])
      32                     if (j == 0); return k; end  # 見つかった 
      33                 end
      34             end
      35             i += $skip[c]
      36         end
      37     end
      38     return -1;  # 見つからなかった 
      39 end
      40 
      41 def mygets(n)  # n 文字まで s に読み込む 
      42     s = gets
      43     if (s == nil || s == "\n")
      44         return nil
      45     else
      46         return (s.chomp)[0..n]
      47     end
      48 end
      49 
      50 text = "supercalifragilisticexpialidocious", # <-- このコンマです
      51 pattern = ""
      52 
      53 while (true) 
      54     printf("テキスト文字列 (リターン: %s)\n  ? ", text)
      55     if (s = mygets(127)) != nil
      56         text = s
      57     end
      58     printf("照合文字列 (リターン: 終了)\n  ? ")
      59     if (s = mygets(127)) != nil
      60         pattern = s
      61     else
      62         break
      63     end
      64     p = position(text, pattern)
      65     if (p >= 0); printf("位置 = %d\n\n", p)
      66     else;        printf("見つかりません.\n\n")
      67     end
      67     end
      68 end
      69 
      70 exit 0

>なかだです。
>
> ちゃんとEOFでループを抜けるようにしないと、リダイレクトされたと
> きに悲しい目にあいます。

野村朝清 tnomura / mnet.ne.jp