#!perl use warnings; use strict; use Tk; my @mac = ( 32, 42 ); my $mw = MainWindow->new(); my $font = 'Courier 18 bold'; my @mac_entry; for ( 0 .. 5 ) { $mac_entry[$_] = $mw->Entry( -textvariable => \$mac[$_], -width => 2, -font => $font, -validate => 'all', -validatecommand => \&valid, -invalidcommand => [ sub { invalid( $_[0] ) }, $_ ] )->pack( -side => 'left' ); $mac_entry[$_]->bind( '', [ sub { if ( $mac[ $_[1] ] =~ /^[0-9a-f]{2}$/i ) { $mac_entry[ $_[1] + 1 ]->focus if defined $mac_entry[ $_[1] + 1 ]; } }, $_ ] ); } sub valid { $_[0] =~ /^[0-9a-f]{0,2}$/i } sub invalid { my $index = shift; my $widget = $mac_entry[$index]; $widget->bell; my $background = $widget->cget('-background'); $widget->configure( -background => 'red' ); $widget->update; $widget->after( 250, sub { $widget->configure( -background => $background ) } ); } $mac_entry[0]->focus; MainLoop;