# File lib/spruz/subhash.rb, line 12 def subhash(*patterns) patterns.map! { |pat| pat.respond_to?(:match) ? pat : pat.to_s } result = if default_proc self.class.new(&default_proc) else self.class.new(default) end if block_given? each do |k, v| patterns.each { |pat| if pat === k.to_s result[k] = yield(k, v, $~) break end } end else each do |k, v| result[k] = v if patterns.any? { |pat| pat === k.to_s } end end result end