David Stanford wrote: >> Use exceptions? >> >> begin >> File.delete(lf) >> rescue Errno::ENOENT >> File.delete(@lf) >> end > > Thanks Joel. Forgive me, I'm just learning Ruby/scripting/programming. I > believe I understand your example, but (as far as I can tell) it doesn't > really accomplish my goal, and seems to have the same functionality of > my first (longer) example. > > Please let me know if I've missed something. :) > > In any case, I think I found a (seemingly) obvious solution to my > question: > > @lockfile = some_other_lockfile > > def self.unlock(lockfile) > File.exist?(lockfile) ? File.delete(lockfile) : File.delete(@lockfile) > end With exceptions, you are saying "try to delete lf; if that fails (because the file doesn't exist) then try to delete @lf". Other failures (e.g., lf permissions are wrong, or @lf doesn't exist) are reported normally as exceptions. One advantage to doing it this way is that the delete is an atomic operation. With File.exist?(lockfile) ? File.delete(lockfile) : File.delete(@lockfile) there is the possiblity that #exist? will return true, but in the brief time before #delete is called, some other process deletes the file. Btw, it looks to me like your #unlock implementation above is the same as your first implementation. The ? : construct is really the same as if...else, just more compact. -- vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407