aboutsummaryrefslogtreecommitdiff
path: root/lib/Hash/Merge.pm6
diff options
context:
space:
mode:
authorPatrick Spek <p.spek@tyil.nl>2020-11-15 08:47:32 +0100
committerPatrick Spek <p.spek@tyil.nl>2020-11-15 08:47:32 +0100
commitb27da2a93cc42afcf16ab539dc7aa1a84d12ee8c (patch)
tree53507a0a534140338bdc0520bc5b05b255bf38f8 /lib/Hash/Merge.pm6
parent35e9b52620d540f79baac2c93caa19f4b8258679 (diff)
Rename Perl 6 to Raku
Diffstat (limited to 'lib/Hash/Merge.pm6')
-rw-r--r--lib/Hash/Merge.pm678
1 files changed, 0 insertions, 78 deletions
diff --git a/lib/Hash/Merge.pm6 b/lib/Hash/Merge.pm6
deleted file mode 100644
index 8f41c07..0000000
--- a/lib/Hash/Merge.pm6
+++ /dev/null
@@ -1,78 +0,0 @@
-#! /usr/bin/env false
-
-use v6.d;
-
-unit module Hash::Merge;
-
-#| Merge any number of Hashes together.
-sub merge-hashes (
- #| Any number of Hashes to merge together.
- *@hashes,
-
- --> Hash
-) is export {
- my %result = @hashes.shift;
-
- # Nothing to do if we only got 1 argument
- return %result unless @hashes.elems;
-
- for ^@hashes.elems {
- %result = merge-hash(%result, @hashes.shift);
- }
-
- %result;
-}
-
-#| Merge two hashes together.
-sub merge-hash (
- #| The original Hash to merge the second Hash into.
- %first,
-
- #| The second hash, which will be merged into the first Hash.
- %second,
-
- #| Boolean to set whether Associative objects should be merged on their
- #| own. When set to False, Associative objects in %second will
- #| overwrite those from %first.
- Bool:D :$deep = True,
-
- #| Boolean to set whether Positional objects should be appended. When
- #| set to False, Positional objects in %second will overwrite those
- #| from %first.
- Bool:D :$positional-append = True,
-
- --> Hash
-) is export {
- my %result = %first;
-
- for %second.keys -> $key {
- # If the key doesn't exist yet in %first, it can be inserted without worry.
- if (%first{$key}:!exists) {
- %result{$key} = %second{$key};
- next;
- }
-
- given (%first{$key}) {
- # Associative objects need to be merged deeply.
- when Associative {
- %result{$key} = $deep
- ?? merge-hash(%first{$key}, %second{$key}, :$deep, :$positional-append)
- !! %second{$key}
- }
- # Positional objects can be merged or overwritten depending on $append-array.
- when Positional {
- %result{$key} = $positional-append
- ?? (|%first{$key}, |%second{$key})
- !! %second{$key}
- }
- # Anything else will just overwrite.
- default {
- %result{$key} = %second{$key};
- }
- }
- }
-
- %result;
-}
-
-# vim: ft=perl6 ts=4 sw=4 et