You explained that it's cleaner and faster to go with your patch, but
I'm not convinced. The patch adds a bit of overhead to all session
constructions, and it seems to perform the moral equivalent of
sub create {
my ($class, %params) = @_;
# Validate and extract the subclass parameters.
# Something like this, but maybe more optimal.
my $param = delete $params{param} || croak "hey, you need a param";
# Create the session.
my $self = bless $class->SUPER::create(@params), $class;
# Plug the values into $self.
$self->[WOOT] = $subclass_params{param};
# Return the object. Not that we care.
return $self;
}