use strict; use warnings; use Data::Dumper; package Datum; use Class::Struct; struct (Datum => { id => '$', new_id => '$', }); sub Datum::new_id { my $self = shift(); if (@_) { $self->{new_id} = $_[0] + 1; } return $self->{new_id}; } package Dataset; use Class::Struct; struct (Dataset => { member => '$', }); sub Dataset::dump_new_id { my $self = shift(); print "\n\n new_id is undefined\n\n" unless defined ($self->{new_id}); } package main; my $dataset = Dataset->new; my $datum = Datum->new; $datum->id(3); $datum->new_id(3); $dataset->member($datum); $dataset->dump_new_id; die Dumper($dataset);