File: README

package info (click to toggle)
libtext-header-perl 1.03%2Bpristine-1
  • links: PTS, VCS
  • area: main
  • in suites: buster, stretch
  • size: 100 kB
  • ctags: 6
  • sloc: perl: 81; makefile: 2
file content (138 lines) | stat: -rw-r--r-- 5,123 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
NAME
    Text::Header - RFC 822/2068 `header' and `unheader' functions

SYNOPSIS
       use Text::Header;     # header and unheader exported

       # Construct headers similar to CGI.pm and HTTP::Headers

       @HEADERS = header(content_type => 'text/html',
                         author => 'Nathan Wiger',
                         last_modified => $date,
                         accept => [qw(text/html text/plain)]);

       # The above produces the array:

       @HEADERS = ("Content-Type: text/html\n",
                   "Author: Nathan Wiger\n",
                   "Last-Modified: Wed Sep 27 13:31:06 PDT 2000\n",
                   "Accept: text/html, text/plain\n");

       # Can also construct SMTP headers to format mail

       @mail_headers = header(from => 'Nathan Wiger <nate@sun.com>',
                              to => 'perl5-porters@perl.org');
   
       print $MAIL @mail_headers, "\nKeep up the great work!\n";

       # The above would print this to the $MAIL handle:

       From: Nathan Wiger <nate@sun.com>
       To: perl5-porters@perl.org

       Keep up the great work!

DESCRIPTION
    This module provides two new functions, `header' and `unheader', which
    provide general-purpose RFC 822 header construction and parsing. They do
    not provide any intelligent defaults of HTTP-specific methods. They are
    simply aimed at providing an easy means to address the mechanics of
    header parsing.

    The output style is designed to mimic `CGI.pm' and `HTTP::Headers', so
    that users familiar with these interfaces will feel at home with these
    functions. As shown above, the `headers' function automatically does the
    following:

       1. uc's the first letter of each tag token and lc's the
          rest, also converting _'s to -'s automatically

       2. Adds a colon separating each tag and its value, and
          exactly one newline after each one

       3. Combines list elements into a comma-delimited
          string 

    Note that a list is always joined into a comma-delimited string. To
    insert multiple separate headers, simply call `header' with multiple
    args:

       push @out, header(accept => 'text/html',
                         accept => 'text/plain');

    This would create multiple "Accept:" lines.

    Note that unlike `CGI.pm', the `header' function provided here does not
    provide any intelligent defaults. If called as:

        @out_headers = header;

    It will return an empty list. This allows `header' to be more general
    pupose, so it can provide SMTP and other headers as well. You can also
    use it as a generic text formatting tool, hence the reason it's under
    the `Text::' hierarchy.

    The `unheader' function works in exactly the opposite direction from
    `header', pulling apart headers and returning a list. `unheader':

       1. lc's the entire tag name, converting -'s to _'s

       2. Separates each tag based on the colon delimiter,
          chomping newlines.

       3. Returns a list of tag/value pairs for easy assignment
          to a hash

    So, assuming the `@HEADERS' array shown up top:

       %myheaders = unheader(@HEADERS);

    The hash `%myheaders' would have the following values:

       %myheaders = (
           content_type => 'text/html',
           author => 'Nathan Wiger',
           last_modified => 'Wed Sep 27 13:31:06 PDT 2000',
           accept => 'text/html, text/plain'
       );

    Note that all keys are converted to lowercase, and their values have
    their newlines stripped. However, note that comma-separated fields are
    not split up on input. This cannot be done reliably because some fields,
    such as the HTTP `Date:' header, can contain commas even though they are
    not lists. Inferring this type of structure would require knowledge of
    content, and these functions are specifically designed to be
    content-independent.

    The `unheader' function will respect line wrapping, as seen in SMTP
    headers. It will simply join the lines and return the value, so that:

       %mail = unheader("To: Nathan Wiger <nate@sun.com>,
                                 perl5-porters@perl.org");

    Would return:

       $mail{to} = "Nathan Wiger <nate@sun.com>, perl5-porters@perl.org"

    Notice that multiple spaces between the comma separator have been
    condensed to a single space. Since the `header' and `unheader' functions
    are direct inverses, this call:

       @out = header unheader @in;

    Will result in `@out' being exactly equivalent to `@in'.

REFERENCES
    This is designed as both a Perl 5 module and also a Perl 6 prototype.
    Please see the Perl 6 proposal at http://dev.perl.org/rfc/333.html

    This module is designed to be fully compliant with the internet
    standards RFC 822 (SMTP Headers) and RFC 2068 (HTTP Headers).

AUTHOR
    Copyright (c) 2000 Nathan Wiger <nate@sun.com>. All Rights Reserved.

    This module is free software; you may copy this under the terms of the
    GNU General Public License, or the Artistic License, copies of which
    should have accompanied your Perl kit.