multi sub clone (Object where { $_->can('clone') } $value) { return $value->clone; } multi sub clone (Scalar $value) { return $value; } multi sub clone (ArrayRef $value) { return map { clone($_) } @$value; } multi sub clone (HashRef $value) { return map { $_ => clone( $value->{$_} ) } keys %$value; }