1 .\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.3
4 .\" ========================================================================
5 .de Sh \" Subsection heading
13 .de Sp \" Vertical space (when we can't use .PP)
17 .de Vb \" Begin verbatim text
22 .de Ve \" End verbatim text
26 .\" Set up some character translations and predefined strings. \*(-- will
27 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
28 .\" double quote, and \*(R" will give a right double quote. | will give a
29 .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
30 .\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
31 .\" expand to `' in nroff, nothing in troff, for use with C<>.
33 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
37 . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
38 . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
51 .\" If the F register is turned on, we'll generate index entries on stderr for
52 .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
53 .\" entries marked with X<> in POD. Of course, you'll have to process the
54 .\" output yourself in some meaningful fashion.
57 . tm Index:\\$1\t\\n%\t"\\$2"
63 .\" For nroff, turn off justification. Always turn off hyphenation; it makes
64 .\" way too many mistakes in technical documents.
68 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
69 .\" Fear. Run. Save yourself. No user-serviceable parts.
70 . \" fudge factors for nroff and troff
79 . ds #H ((1u-(\\\\n(.fu%2u))*.13m)
85 . \" simple accents for nroff and troff
95 . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
96 . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
97 . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
98 . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
99 . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
100 . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
102 . \" troff and (daisy-wheel) nroff accents
103 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
104 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
105 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
106 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
107 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
108 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
109 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
110 .ds ae a\h'-(\w'a'u*4/10)'e
111 .ds Ae A\h'-(\w'A'u*4/10)'E
112 . \" corrections for vroff
113 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
114 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
115 . \" for low resolution devices (crt and lpr)
116 .if \n(.H>23 .if \n(.V>19 \
129 .\" ========================================================================
131 .IX Title "HTTP::Headers::Util 3"
132 .TH HTTP::Headers::Util 3 "2009-06-13" "perl v5.8.7" "User Contributed Perl Documentation"
134 HTTP::Headers::Util \- Header value parsing utility functions
136 .IX Header "SYNOPSIS"
138 \& use HTTP::Headers::Util qw(split_header_words);
139 \& @values = split_header_words($h\->header("Content\-Type"));
142 .IX Header "DESCRIPTION"
143 This module provides a few functions that helps parsing and
144 construction of valid \s-1HTTP\s0 header values. None of the functions are
147 The following functions are available:
148 .ie n .IP "split_header_words( @header_values )" 4
149 .el .IP "split_header_words( \f(CW@header_values\fR )" 4
150 .IX Item "split_header_words( @header_values )"
151 This function will parse the header values given as argument into a
152 list of anonymous arrays containing key/value pairs. The function
153 knows how to deal with \*(L",\*(R", \*(L";\*(R" and \*(L"=\*(R" as well as quoted values after
154 \&\*(L"=\*(R". A list of space separated tokens are parsed as if they were
155 separated by \*(L";\*(R".
157 If the \f(CW@header_values\fR passed as argument contains multiple values,
158 then they are treated as if they were a single value separated by
161 This means that this function is useful for parsing header fields that
162 follow this syntax (\s-1BNF\s0 as from the \s-1HTTP/1\s0.1 specification, but we relax
163 the requirement for tokens).
167 \& header = (token | parameter) *( [";"] (token | parameter))
171 \& token = 1*<any CHAR except CTLs or separators>
172 \& separators = "(" | ")" | "<" | ">" | "@"
173 \& | "," | ";" | ":" | "\e" | <">
174 \& | "/" | "[" | "]" | "?" | "="
175 \& | "{" | "}" | SP | HT
179 \& quoted\-string = ( <"> *(qdtext | quoted\-pair ) <"> )
180 \& qdtext = <any TEXT except <">>
181 \& quoted\-pair = "\e" CHAR
185 \& parameter = attribute "=" value
187 \& value = token | quoted\-string
190 Each \fIheader\fR is represented by an anonymous array of key/value
191 pairs. The keys will be all be forced to lower case.
192 The value for a simple token (not part of a parameter) is \f(CW\*(C`undef\*(C'\fR.
193 Syntactically incorrect headers will not necessary be parsed as you
196 This is easier to describe with some examples:
199 \& split_header_words('foo="bar"; port="80,81"; DISCARD, BAR=baz');
200 \& split_header_words('text/html; charset="iso\-8859\-1"');
201 \& split_header_words('Basic realm="\e\e"foo\e\e\e\ebar\e\e""');
207 \& [foo=>'bar', port=>'80,81', discard=> undef], [bar=>'baz' ]
208 \& ['text/html' => undef, charset => 'iso\-8859\-1']
209 \& [basic => undef, realm => "\e"foo\e\ebar\e""]
212 If you don't want the function to convert tokens and attribute keys to
213 lower case you can call it as \f(CW\*(C`_split_header_words\*(C'\fR instead (with a
215 .ie n .IP "join_header_words( @arrays )" 4
216 .el .IP "join_header_words( \f(CW@arrays\fR )" 4
217 .IX Item "join_header_words( @arrays )"
218 This will do the opposite of the conversion done by \fIsplit_header_words()\fR.
219 It takes a list of anonymous arrays as arguments (or a list of
220 key/value pairs) and produces a single header value. Attribute values
221 are quoted if needed.
226 \& join_header_words(["text/plain" => undef, charset => "iso\-8859/1"]);
227 \& join_header_words("text/plain" => undef, charset => "iso\-8859/1");
230 will both return the string:
233 \& text/plain; charset="iso\-8859/1"
236 .IX Header "COPYRIGHT"
237 Copyright 1997\-1998, Gisle Aas
239 This library is free software; you can redistribute it and/or
240 modify it under the same terms as Perl itself.