document: chunk(s?) /\z/ chunk: open chunk close | word(s) open: "" close: "" word: /\w+/ #### 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+/