From: Karsten Meier Date: 2003-09-09T05:19:38+09:00 Subject: Emulate perls local Hello Ruby Fans, I'm working on the ruby section of the pleac project, (http://pleac.sourceforge.net) because I think a good way to learn a new language is trying to explain it to somebody else. There are a few hundred code snippnets from the famous perl cookbook, and one of it is perls local function: You can give a global variable inside a block a new value. This is slightly different from normal local variable, because it really changes the global variable. I think it is sometimes even useful, when you need to change the predefined global variables, but want to automatically restore them after you are done. The phyton documenter said that it is not possible in phyton. But this is ruby, so there should be a solution. I came up with the following: def local(var) eval("save = #{var.id2name}") result = yield eval("#{var.id2name} = save") result end # example usage def print_age puts "Age is #{$age}" end $age = "to small" print_age() local(:$age){ $age = 23 print_age() } print_age() It prints the following: to small 23 to small It works quite well, but I like to know if I can get rid of the eval(). I already have my variable as symbol, so I think it must be possible somehow to restore the variable from the symbol, without use of eval. Do you have an idea for a more elegant solution? Regards Karsten Meier Hamburg * Germany