my $grammar = q{ CompText: Command(s) Command: String | Integer Array: 'a:' Count ':{' Command(s) '}' { $return = "a:$item{Count}:{" . join( '', @{$item[-2]}) . "}" } String: 's:' Count ':"' Array '";' { $return = "s:$item{Count}:\"" . join( '', @{$item{Array}}) . "\";" } | 's:' Count ':"' Cdata_String '";' { $return = "s:$item{Count}:\"" . join( '', @{$item[-2]}) . "\";" } Cdata_String: Cdata(s?) Count: /\d+/ Cdata: /./ };