in reply to Perl Tk Text widget question

After you execute $lsugs=@sugs;, keep in mind that the arrays are 0-indexed, so the last element of the array is not $sugs[$length], but $sugs[$length - 1]. You should rewrite the assignment code as follows:
@opts[1..3] = @sugs[-1..-3];
Also, at the line
$t->tagAdd("replaced","sel.first","sel.last");
the word is already replaced, meaning that the text may not even have the specified length any more.
Furthermore, think of use strict; use warnings; and you'll get a lot of useful information on where your code might be behaving differently from what you expect.
Hope this helped.
CombatSquirrel.
Update: Fixed typo, thanks to ybiC.
Entropy is the tendency of everything going to hell.

Replies are listed 'Best First'.
Re: Re: Perl Tk Text widget question
by perl_seeker (Scribe) on Sep 04, 2003 at 11:52 UTC
    Hi,
    sorry for the much delayed reply.Yes, I overlooked the array indices part.

    But the problem of @sugs not containing a new list of words each time the sub &tged is executed, is not
    really because of @sugs.i.e

    @sugs=&suggestcomb($gotfile);

    Here @sugs will get overwritten completely each time &suggestcomb returns a new list of words.So the problem
    is in &suggestcomb

    You are right about the colour change bit too. I've changed the code now to:
    sub replace1{ my $chosen1=$opt1; $t->insert('sel.first',"$chosen1"); $t->delete('sel.first','sel.last'); $t->tagConfigure("replaced",-foreground=>"black"); my $r1=$t->search(-forwards,"$chosen1",'end'); $t->tagAdd("replaced","$r1","$r1 wordend"); #print"\nThe start pos of the pattern:"; #print "\n$result"; }
    Got a better way to do the above?Because I don't like the idea of having to search the text.Moreover the colour
    still does not change sometimes..?
    Thanx :)