From: David Garamond Date: 2004-05-31T17:31:24+09:00 Subject: elegant way to say "try this thing, one at a time, until condition is met" Example: I need to unmount /usr and /usr2, but currently I can't because there are some opened files from those partitions. I am going to try shutting down daemons or killing some processes (or other things), one at a time, until I can unmount it. def kill(process, signal) ... end # returns false if failed, true if succeeded or already unmounted def unmount(partition) ... end unless unmount("/usr") && unmount("/usr2") system "/etc/init.d/httpd stop" system "/etc/init.d/squid stop" unless unmount("/usr") && unmount("/usr2") kill("rdiff-backup", :TERM) sleep 3 unless unmount("/usr") && unmount("/usr2") kill("rdiff-backup", :KILL) sleep 3 ... ... end end end I don't like this since I repeat unmount(). I can rewrite this as: def cond_met umount("/usr") && unmount("/usr2") end unless cond_met ... unless cond_met ... ... end end But still it's not pretty enough. Any more elegant way? -- dave