diff --git a/array.c b/array.c
index 8cfdbeb9c1..0bd08028fc 100644
--- a/array.c
+++ b/array.c
@@ -7000,82 +7000,44 @@ rb_ary_permutation_size(VALUE ary, VALUE args, VALUE eobj)
/*
* call-seq:
- * array.permutation {|element| ... } -> self
- * array.permutation(n) {|element| ... } -> self
- * array.permutation -> new_enumerator
- * array.permutation(n) -> new_enumerator
+ * permutation(n = self.size) {|permutation| ... } -> self
+ * permutation(n = self.size) -> new_enumerator
*
- * When invoked with a block, yield all permutations of elements of +self+; returns +self+.
- * The order of permutations is indeterminate.
+ * Iterates over permutations of the elements of +self+;
+ * the order of permutations is indeterminate.
*
- * When a block and an in-range positive Integer argument +n+ (0 < n <= self.size)
- * are given, calls the block with all +n+-tuple permutations of +self+.
- *
- * Example:
+ * With a block and an in-range positive integer argument +n+ (0 < n <= self.size) given,
+ * calls the block with each +n+-tuple permutations of +self+;
+ * returns +self+:
*
* a = [0, 1, 2]
- * a.permutation(2) {|permutation| p permutation }
+ * perms = []
+ * a.permutation(1) {|perm| perms.push(perm) }
+ * perms # => [[0], [1], [2]]
*
- * Output:
+ * perms = []
+ * a.permutation(2) {|perm| perms.push(perm) }
+ * perms # => [[0, 1], [0, 2], [1, 0], [1, 2], [2, 0], [2, 1]]
*
- * [0, 1]
- * [0, 2]
- * [1, 0]
- * [1, 2]
- * [2, 0]
- * [2, 1]
+ * perms = []
+ * a.permutation(3) {|perm| perms.push(perm) }
+ * perms # => [[0, 1, 2], [0, 2, 1], [1, 0, 2], [1, 2, 0], [2, 0, 1], [2, 1, 0]]
*
- * Another example:
+ * When +n+ is zero, calls the block once with a new empty array:
*
- * a = [0, 1, 2]
- * a.permutation(3) {|permutation| p permutation }
- *
- * Output:
- *
- * [0, 1, 2]
- * [0, 2, 1]
- * [1, 0, 2]
- * [1, 2, 0]
- * [2, 0, 1]
- * [2, 1, 0]
- *
- * When +n+ is zero, calls the block once with a new empty +Array+:
- *
- * a = [0, 1, 2]
- * a.permutation(0) {|permutation| p permutation }
- *
- * Output:
- *
- * []
+ * perms = []
+ * a.permutation(0) {|perm| perms.push(perm) }
+ * perms # => [[]]
*
* When +n+ is out of range (negative or larger than self.size),
* does not call the block:
*
- * a = [0, 1, 2]
* a.permutation(-1) {|permutation| fail 'Cannot happen' }
* a.permutation(4) {|permutation| fail 'Cannot happen' }
*
- * When a block given but no argument,
- * behaves the same as a.permutation(a.size):
- *
- * a = [0, 1, 2]
- * a.permutation {|permutation| p permutation }
- *
- * Output:
- *
- * [0, 1, 2]
- * [0, 2, 1]
- * [1, 0, 2]
- * [1, 2, 0]
- * [2, 0, 1]
- * [2, 1, 0]
- *
- * Returns a new Enumerator if no block given:
- *
- * a = [0, 1, 2]
- * a.permutation # => #
- * a.permutation(2) # => #
+ * With no block given, returns a new Enumerator.
*
+ * Related: {Methods for Iterating}[rdoc-ref:Array@Methods+for+Iterating].
*/
static VALUE