The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package TidyView::Frame;

# the whole idea here is to try to centralise the creation of Tk::Frame widgets to one point of the code.
# However, it turns out we usually over-ride at least one of the defaults every time we create a frame,
# so perhaps it was a bad idea.

use strict;
use warnings;

use Tk;

our $frameDefaults = {
		      -relief      => 'ridge',
		      -borderwidth => 5,
		     };

our $packDefaults = {
		     -side   => 'left',
		     -fill   => 'both',
		     -expand => 1,
		    };

sub new {
  my (undef, %args) = @_;

  my ($parent, $frameOptions, $packOptions)  = @args{qw(parent frameOptions packOptions)};

  $frameOptions ||= {};
  $packOptions  ||= {};

  my %frameOptions = (%$frameDefaults, %$frameOptions);

  my %packOptions  = (%$packDefaults,  %$packOptions);

  my $frame = $parent->Frame(%frameOptions);

  $frame->pack(%packOptions);

  return $frame;
}