From: Koji Arai Date: 1998-11-22T22:12:27+09:00 Subject: [ruby-list:11014] Re: id2name (Re: スコープの範囲) 新井です。 >>> From: gotoken@math.sci.hokudai.ac.jp (GOTO Kentaro) >>> Date: Sat, 21 Nov 1998 07:13:41 +0900 >>> Subject: [ruby-list:10998] id2name (Re: スコープの範囲) > ごとけんです > > ># :symbol が使えればと思ったのですが、:$/ から$/の値 > ># を取り出す方法がわからなかったんです。 > > 例えば > > eval((:$/).id2name) #=> "\n" > ありがとうございます。以下、修正版 うーん、なんかヘタクソな気がする #!/usr/local/bin/ruby module LocalScope def local(*global_vars) save_vars = "" global_vars.each {|id| save_vars << id.id2name << ", "} save_vals = eval("[" + save_vars + "]") yield eval(save_vars + "*dummy = save_vals") end end include LocalScope $/, $; = "1", "2" local(:$/, :$;) { $/, $; = "3", "4" local(:$/, :$;) { $/, $; = "5", "6" p $;, $/ save = 1 } p $;, $/ } p $;, $/ __END__ "6" "5" "4" "3" "2" "1"