--- /dev/null
+package HTML::Zoom::SubObject;
+
+use strict;
+use warnings FATAL => 'all';
+use Scalar::Util ();
+
+sub new {
+ my ($class, $args) = @_;
+ ($args||={})->{zconfig} ||= do {
+ require HTML::Zoom::ZConfig;
+ HTML::Zoom::ZConfig->new
+ };
+ my $new = { _zconfig => $args->{zconfig} };
+ Scalar::Util::weaken($new->{_zconfig});
+ bless($new, $class)
+}
+
+sub _zconfig { shift->{_zconfig} }
+
+sub with_zconfig {
+ my ($self, $zconfig) = @_;
+ my $new = bless({ %$self, _zconfig => $zconfig }, ref($self));
+ Scalar::Util::weaken($new->{_zconfig});
+ $new
+}
+
+1;