In order for your
retry function to report its status back to the window, you'll need to give it a
callback function, or simply pass a reference to the window itself. Assuming
retry is called from, say a button push, then you could pass
$fr1 to it as a parameter, e.g.
retry($ua, $url, $fr1);
...
sub retry { # Retry downloading page in case of failure
my $ua=shift;
my $url=shift;
for (my $i=1; $i<101; $i++) {
sleep 5; # Delay
my $request= $ua->request(GET "$url");
return $request if ($request->is_success);
$fr1->Label(-text=>'Download failed: ' . $request->status_line
+, -background=>'yellow', -foreground=>'red')->pack(-fill=>'y');
.....
NOTE: untested.
You get the idea. Any object you can pass to retry you can mess with in the function itself.
However I would prefer passing retry a code reference which it can call with a status message. That way, it could report its status to anything; a GUI, a Curses interface, etc, depending on what that callback sub does.