Weird. You can simplify the code by removing the global $roomTl (which shortens roomSub), and you can also use a plain scalar to the same effect. I also added
Devel::Peek to include some internal details.
#!/usr/bin/perl
use warnings;
use strict;
use Tk;
use Devel::Peek;
my $val = 0.20;
my $mw = 'MainWindow'->new;
$mw->Button(
-text => "\n Characteristics \n",
-command => \&room,
)->pack(-fill => "x");
$mw->Button(
-text => "\n Calculate \n",
-background => "red",
-command => \&design,
)->pack(-fill => "x");
MainLoop();
sub room {
my $roomTl = $mw->Toplevel;
$roomTl->Entry(
-textvariable => \$val,
)->pack(-fill => 'x');
}
sub design {
my $Uf = 13;
my $Uw = $val * $Uf; # HERE
print Dump($val), "\t Uf = $Uf \t val = ${\$val} \t Uw = $Uw \n";
}
Interestingly, to make the behaviour correct, just change the "# HERE" line to
my $Uw = "$val" * $Uf;