protected function arrayGet($key, $default = null)
    {
        if (isset($this->list[$key])) {
            return $this->list[$key];
        }

        foreach (explode('.', $key) as $segment) {
            if (! is_array($this->list) || ! array_key_exists($segment, $this->list)) {
                return (is_callable($default)) ? $default() : $default;
            }

            $this->list = $this->list[$segment];
        }

        return $this->list;
    }