document: stuff /\z/ { return $item{stuff} } stuff: chunk(s?) { return [map {@$_} @{$item[1]} ] } # flatten adjacent arrayrefs chunk: open stuff close { return $item{stuff} } | word(s?) # returns arrayref open: "" close: "" word: /\w+/