foreach my $field ( keys %orderObjectFields ) { my $default = $orderObjectFields{$field}; my $closure = sub { my $value = ( scalar @_ > 1 ? $_[0]->{$field} = $_[1] : $_[0]->{$field} ); $value = $default unless defined $value; $value; }; no strict 'refs'; # only affects next statement: *{ __PACKAGE__ . "::$field" } = $closure; }