sub get_by_string { my ($this, $field, $property, $value) = @_; die "Invalid field $field" if (!exists $this->{$field}); return grep { $_->{$property} eq $value } @{$this->{$field}}; } sub get_by_number { my ($this, $field, $property, $value) = @_; die "Invalid field $field" if (!exists $this->{$field}); return grep { $_->{$property} == $value } @{$this->{$field}}; }