def self.combine_mode_perm_and_option(mode = nil, perm = Backports::Undefined, options = Backports::Undefined)
mode, options = nil, mode if mode.is_a?(Hash) and perm == Backports::Undefined
perm, options = nil, perm if perm.is_a?(Hash) and options == Backports::Undefined
perm = nil if perm == Backports::Undefined
options = {} if options == Backports::Undefined
if perm && options[:perm]
raise ArgumentError, "perm specified twice"
end
[combine_mode_and_option(mode, options), perm || options[:perm]]
end