Readline, the Input Record Separator and Ruby

readline, ruby

Solution

Basically, all `readline`-style methods from `IO` accept separator string as an optional parameter:

>> s = StringIO.new('hello from string')
=> #<StringIO:0x52bf34>
>> s.readline ' '
=> "hello "
>> s.readline ' '
=> "from "
>> s.readline ' '
=> "string"

Problem

In Ruby I'm looking to read data until I reach a delimiter or the end of the file. I found this is possible by redefining `$/` or the `$INPUT_RECORD_SEPARATOR` to my delimiter. However, with all the "features" in the Ruby language it seems hackey to change the value of a global to do this. Also, readline used to consume the delimiter, while not including it in what is returned. Is there any other way to "read until" while consuming the delimiter that doesn't involve getting the values char by char in a loop?

Original source