I appreciate everyone's input, It seems like they should all work, and 
do, initially, but for my application each one seems to stop working for 
another reason.... I am checking tons of messages, actually I am 
searching a buffer of messages, about 600 messages, every time a message 
is received, so if it takes to long to search the buffer, the new 
received messages start piling up I guess and don't ever get in the 
buffer to be searched, and so on, it is a vicious cycle I guess.   I 
think each of these ways takes too many resources, compared to 
line[cmd], where line is my line received and cmd is the initial match I 
am looking for.  I suppose line[cmd] is really optimized for quick 
checking.

I tried every way you all listed, and it works for a few messages, then 
it seems to get bogged down and miss messages or something as the buffer 
fills up and gets larger and larger to check each one in the buffer.

Even the one liner, line[/\A#{cmd}(\z|,)/], stops working pretty quick.

Odd problem, because when I throw my regular line[cmd] code in there, it 
works like a charm continuously, except at the corner cases that 
provoked this thread to start with, "the unavoidable partial match".

Hate to ask again, any more less intensive ways to do it?  It will be 
ran up to 600 times every tenth of a second probably.  Keep in mind 
sometimes, it only has to search the buffer for the first 10 or so 
messages before it finds a match, but sometimes it must go all the way 
deep into the buffer 500 or so to get a match, then it starts on the 
next one... etc..

the code, with check and match_prefix methods defined as above posts...



i = 0 
#iterate through buffer looking for message
          while(i < @message_buffer.num_in_buf)
            if found_message == false
              line = @message_buffer.get(i)
              #if check(line,cmd)           #resource hog
              #if line[/\A#{cmd}(\z|,)/]    #resource hog
              #if(line.match_prefix(cmd))   #resource hog
              if line[cmd]
                if ((cmd != "SDRI") and (cmd != "SDRL") and (cmd != 
"CHLL"))
                  write_log("<- #{@message_buffer.get(i)}",1)#DEBUG
                  write_log("="*15 + "Ascii Response Message: #{cmd} 
Received" + "="*10 + "\n")
                  found_message = true
                  break     #message was found, don't search buffer 
anymore
                end
              end # if this line has the cmd
            end
            i += 1   #check next message in buffer
          end # while whole buffer




-- 
Posted via http://www.ruby-forum.com/.