Я хотел бы иметь подпрограмму как член хэша, который может иметь доступ к другим хеш-членам.Perl, «замыкание» с помощью Hash
Например
sub setup {
%a = (
txt => "hello world",
print_hello => sub {
print ${txt};
})
return %a
}
my %obj = setup();
$obj{print_hello};
В идеале это будет выход "привет мир"
EDIT
К сожалению, я не смог указать одно требование
я должен быть в состоянии сделать
$obj{txt} = "goodbye";
, а затем $ OBJ {print_hello} должен вывести goodbye
Не объявлял бы $ h, а присваивать hashref ему было бы проще? Что-то вроде моего $ h; $ h = {msg => 'hello', express_yourself => sub {print $ h -> {msg}, "\ n"}}; – MkV
И да, это очень похоже на Class :: Closure, все, что ему нужно, это AUTOLOAD, который проверяет $ self {$ AUTOLOAD} - это подрефикс и добавляет его в таблицу символов пакета (предполагая, что setup() является конструктором класс). – MkV
+1 для упоминания объекта. Это определенно работа объекта. – fengshaun