in reply to Automatic canvas content rescaling

You was very close there:
perl -MTk -we "$m=tkinit;$c=$m->Canvas->pack(-fill=>'both',-expand=>1) +;$m->Button(-command=>sub{print $c->width})->pack;MainLoop;"
But its not easy to recalculate all item's X and Y positions.