in reply to Undefined Button method??

It looks like antirice's reply pinpoints your initial problem: you define 4 frame widgets --  @row[0..3] -- and your arrangement of values for $i is such that you appear to want 5 elements on each of the first three rows. But then you increment $r (row counter) after every third element (not every fifth one), which means $r will increment beyond 3.

As for your update about having a problem because you're assigning values like "*" and "." and "+" etc to $i -- that's a red herring. Those assignments are perfectly fine. Consider:

#!/usr/bin/perl @w = qw/a b + * \ x y = . - z/; print join(" : ", @w),$/; for $i ( @w ) { $h{$i} = " okay\n" } print join "", %h; __OUTPUT__ a : b : + : * : \ : x : y : = : . : - : z + okay a okay - okay z okay * okay x okay = okay \ okay b okay y okay . okay
The "qw" operator even disarms the special meaning of backslash, and passes it through as a literal string.