I like to modifiy Proc for making definining methods like this easier:

    class Proc
      def inverse
        self.class.new {|*args| !self.call(*args)}
      end
    end

Then of course you could continue down the path Marcel was suggesting:

    class Array
      def select!(&block)
        delete_if &block.inverse
      end
      alias_method :find_all!, :select!
    end

    class Hash
      def select!(&block)
        delete_if &block.inverse
      end
      alias_method :find_all!, :select!
    end

Actually, now this makes me want to think about what other kind of
higher order goodies could be added to Proc =)


-- 
Lou.