RE: :Text::FindAndReplaceAll()
Nick Ing-Simmons <[email protected]>
| Newsgroups | gmane.comp.lang.perl.tk |
|---|---|
| Message-ID | <[email protected]> |
Jack D. <[email protected]> writes: >> -----Original Message----- >> From: [email protected] >> [mailto:[email protected]] On >> Behalf Of ????? ???????? >> Sent: December 16, 2005 7:34 AM >> To: [email protected] >> Subject: Tk::Text::FindAndReplaceAll() >> >> I have a Tk::TextUndo widget. It has context menu which also >> holds Replace option. >> I put a single word 'gallo' as a text. Than choose Replace >> (Direction: any, Mode: regexp, Case: any), put '.*' as a >> pattern and whatever as a replacement. Push "ReplaceAll". Works fine. >> Now I put as a text 'gallo' and from the next line 'ballo'. >> Than choose Replace (Direction: any, Mode: regexp, Case: >> any), put '.*' as a pattern and non-empty replacement. Push >> "ReplaceAll". The result - application is hanged (100% CPU >> consumption). Works fine however if replacement is empty. >> >> This wouldn't be the issue if >> $text_undo->FindAndReplaceAll('-regexp', '-case', qr/.*/, >> 'whatever'); didn't behave the same nasty way. The Menu is just sugar for calling that code or something very like it, so I am _glad_ they behave the same. >> >> Is it something I missed or is there a bug in Tk (ActivePerl >> 5.8.7.813)? > >Seems like a bug in the FindNext subroutine of Tk::Text. Basically using (.) >or (.*) doesn't seem to work properly. Someone (Greg London?) re-wrote this bit of TextUndo and I am not sure I know how it is supposed to work. /./ or /.*/ are supposed to map to perl's normal regular expressions. So /./ will NOT match the "\n" at end of the line, and /.*/ is allowed to match nothing. This might surprise the Text code someway. I seem to recall by original had to do some messy adding of \G and adding (effect of) /cg to regexp and then manipulate pos(). Also perl/Tk is calling perl's re C code in a devious manner which may well not be robust as perl's regexp engine changes over time. If I haven't got the "make a copy" flags right then when length of string changes it may re-start from wrong place. >i.e. the program gets stuck in a while loop because the $saved_insert never >matches the $compared_index in the source code. I have cc'd the ptk mailing >list for their thoughts. Will try and decipher what I have imported. > >Jack >_______________________________________________ >Perl-Win32-Users mailing list >[email protected] >To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs >-++**==--++**==--++**==--++**==--++**==--++**==--++**== >This message was posted through the Stanford campus mailing list >server. If you wish to unsubscribe from this mailing list, send the >message body of "unsubscribe ptk" to [email protected] -++**==--++**==--++**==--++**==--++**==--++**==--++**== This message was posted through the Stanford campus mailing list server. If you wish to unsubscribe from this mailing list, send the message body of "unsubscribe ptk" to [email protected]