package Dictionary; ... sub check { my $self = shift; my $error; foreach (@{$self->{children}}) { $error++, last unless $_->check(@_) } return !$error; } package Entry; ... sub check { my $self = shift; return 1 if $self->{value} > 0; # or whatever return; }