From: Russell Fulton Date: 2006-01-19T08:21:54+09:00 Subject: problems with rescue clause. Hi Folks, I'm writing a script to check passwords against email accounts, so I have written a method: def tryIMAP (host, usessl, user, pass) proto = usessl ? "IMAPS" : "IMAP" begin imap = Net::IMAP.new(host, usessl ? 993 : 143, usessl) rescue SystemCallError raise "#{proto} failed" rescue SocketError raise "#{proto} failed" end begin imap.login( user, pass) imap.logout 'success' rescue Net::IMAP::NoResponseError 'failure' end end I use the method like this... while proto do begin case proto when 'IMAPS' status = tryIMAP(server, true, user, iD ) proto = nil when 'IMAP' status = tryIMAP(server, false, user, iD ) proto = nil when 'POP' status = tryPOP(server, user, iD ) proto = nil else proto = nil end rescue 'IMAPS failed' proto = 'IMAP' rescue 'IMAP failed' proto = 'POP' rescue 'POP failed' servers[host][0] = 'NO' proto = nil STDERR.print "failed to connect to #{server}\n" end end # while proto print "logged in for #{target}\n" if status == 'success' If I try a server which does not support IMAPS I get: class or module required for rescue clause (TypeError) I'm at a loss to figure out what is wrong. I've googled on the error message but have not found anything useful. BTW I'm new to ruby and I'd welcome criticism of the above code. If there are better ways of doing this I'd love to know. Cheers, Russell -- Posted via http://www.ruby-forum.com/.