sub do_while { use Fcntl qw(:seek); #count lines and rewind while(){$linetotal++} seek FILE0, 0, SEEK_SET or die "Cannot rewind file: $!"; while(){$linetotal++} seek FILE1, 0, SEEK_SET or die "Cannot rewind file: $!"; while(){$linetotal++} seek FILE2, 0, SEEK_SET or die "Cannot rewind file: $!"; print "$linetotal\n"; $progressbar = $main->ProgressBar( -length => 200, # Actually width -width => 20, # Actually height -gap => 0, -value => 0, -colors => [0, 'pink'], )->pack(-pady => 5, -padx => 5); while () { my $line = $_; chomp($line); do_opt0($line); if ( $line ne $token ) { print SFILE "$token"; } $progressbar->value($progressbar->value + (100/$linetotal) ); $main->update; } while () { my $line = $_; chomp($line); do_opt1($line); if ( $line ne $token ) { print SFILE "$token"; } $progressbar->value($progressbar->value + (100/$linetotal) ); $main->update; } while () { my $line = $_; chomp($line); do_opt2($line); if ( $line ne $token ) { print SFILE "$token"; } $progressbar->value($progressbar->value + (100/$linetotal) ); $main->update; } } #### #!/usr/bin/perl use warnings; use strict; use Tk; use Tk::ExecuteCommand; my %commands = ( #buttontext => command sleep => 'sleep 20', dir => 'dir', ls => 'ls -la', ); my $mw = MainWindow->new; foreach my $key (keys %commands){ $mw->Button(-text => $key, -command=>[\&execute, $commands{$key}] )->pack; } $mw->Button(-text => 'Quit', -command=> sub{Tk::exit} )->pack; MainLoop; sub execute { my $command = shift; my $tl = $mw->Toplevel( ); $tl->title($command); $tl->Button(-text => "Close", -command => sub { $tl->withdraw })->pack; my $ec = $tl->ExecuteCommand( -command => $command, -entryWidth => 50, -height => 10, -label => '', -text => 'Execute', )->pack; $ec->bell; $ec->update; }