class Parser def initialize(pattern) @pattern = pattern end def parse(stream) a = stream.chars b = a.shift if b =~ @pattern return [b, parse(a.join)] end end end parser = ->(str) { parser.call [str[1].flatten.chars.first, str[1].flatten.chars.drop(1)] } p parser.call ["", "Hello, World"]