module Enumerable def [](*args) arr = self.to_a r = [] args.each{ |arg| case arg when Proc r.concat arr.find_all &arg when Range r.concat arr[arg] when Numeric r << arr[arg] else raise ArgumentError, "Invalid enumeration" #super if defined? super end } r end end # --- test --- if $0 == __FILE__ p ("a".."z")[2,5,3..4] end