From: matz@... (Yukihiro Matsumoto) Date: 1997-12-08T11:08:38+09:00 Subject: [ruby-list:5569] Re: [Summary 02/02] Re: ruby for perl users まつもと ゆきひろです In message "[ruby-list:5560] Re: [Summary 02/02] Re: ruby for perl users" on 97/12/07, Noritsugu Nakamura writes: |begin | f = open(filename) | while line = f.gets | print line | end |ensure | f.close |end | |こうすると、ファイルがない場合、 |./hoge.rb:87: undefined method `close' for nil (NameError) |と言われてしまうのですが、こういうものでしょうか? このbegin..ensure..endはopenされたファイルのcloseしわすれを 防ぐ,という目的ですから,もとの通り f = open(filename) begin while line = f.gets print line end ensure f.close end が正しいと思います.ちなみに1.1bからは open(filename) do |f| while line = f.gets print line end end で代用できます. が,openにともなう例外処理(rescue)を行う場合には begin f = open(filename) while line = f.gets print line end rescue ... # 適当なエラー処理 ensure f.close if f end というやりかたになるでしょう,多分. まつもと ゆきひろ /:|)