Article 14455 of comp.infosystems.www:
Xref: feenix.metronet.com comp.infosystems.www:14455
Path: feenix.metronet.com!news.utdallas.edu!wupost!math.ohio-state.edu!cyber2.cyberstore.ca!vanbc.wimsey.com!mdavcr!rdr
From: rdr@mdavcr.mda.ca (Randolph Roesler)
Newsgroups: comp.infosystems.www
Subject: Re: Forms (POST) and PERL
Message-ID: <5515@map.mdavcr.mda.ca>
Date: 29 Apr 94 00:01:38 GMT
References: <2pk7r4INNrcc@srvr1.engin.umich.edu>
Organization: MacDonald Dettwiler, 13800 Commerce Parkway, Richmond, BC, Canada  V6V 2J3
Lines: 80

I use the following perl stub as a bases for writing
post scripts in perl.  No problems with newlines.

#!/usr/local/bin/perl
#
# stub to read stdin cgi post method and produce $values{field}
# for each field in the data steam
#
# 1994, Randy Roesler, MacDonald Detwiler 
#
# Use at your own risk

@cgi_env = ( "SERVER_SOFTWARE","SERVER_NAME","GATEWAY_INTERFACE",
     "SERVER_PROTOCOL","SERVER_PORT","REQUEST_METHOD",
     "PATH_INFO","PATH_TRANSLATED","SCRIPT_NAME","QUERY_STRING",
     "REMOTE_HOST","REMOTE_ADDR","REMOTE_USER","AUTH_TYPE",
     "CONTENT_TYPE","CONTENT_LENGTH","HTTP_ACCEPT" );

@characters = ( 
	"\x00","\x01","\x02","\x03","\x04","\x05","\x06","\x07",
	"\x08","\x09","\x0A","\x0B","\x0C","\x0D","\x0E","\x0F",
	"\x10","\x11","\x12","\x13","\x14","\x15","\x16","\x17",
        "\x18","\x19","\x1A","\x1B","\x1C","\x1D","\x1E","\x1F",
        "\x20","\x21","\x22","\x23","\x24","\x25","\x26","\x27",
        "\x28","\x29","\x2A","\x2B","\x2C","\x2D","\x2E","\x2F",
        "\x30","\x31","\x32","\x33","\x34","\x35","\x36","\x37",
        "\x38","\x39","\x3A","\x3B","\x3C","\x3D","\x3E","\x3F",
        "\x40","\x41","\x42","\x43","\x44","\x45","\x46","\x47",
        "\x48","\x49","\x4A","\x4B","\x4C","\x4D","\x4E","\x4F",
        "\x50","\x51","\x52","\x53","\x54","\x55","\x56","\x57",
        "\x58","\x59","\x5A","\x5B","\x5C","\x5D","\x5E","\x5F",
        "\x60","\x61","\x62","\x63","\x64","\x65","\x66","\x67",
        "\x68","\x69","\x6A","\x6B","\x6C","\x6D","\x6E","\x6F",
        "\x70","\x71","\x72","\x73","\x74","\x75","\x76","\x77",
        "\x78","\x79","\x7A","\x7B","\x7C","\x7D","\x7E","\x7F",
        "\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87",
        "\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F",
        "\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97",
        "\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F",
        "\xA0","\xA1","\xA2","\xA3","\xA4","\xA5","\xA6","\xA7",
        "\xA8","\xA9","\xAA","\xAB","\xAC","\xAD","\xAE","\xAF",
        "\xB0","\xB1","\xB2","\xB3","\xB4","\xB5","\xB6","\xB7",
        "\xB8","\xB9","\xBA","\xBB","\xBC","\xBD","\xBE","\xBF",
        "\xC0","\xC1","\xC2","\xC3","\xC4","\xC5","\xC6","\xC7",
        "\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF",
        "\xD0","\xD1","\xD2","\xD3","\xD4","\xD5","\xD6","\xD7",
        "\xD8","\xD9","\xDA","\xDB","\xDC","\xDD","\xDE","\xDF",
        "\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7",
        "\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF",
        "\xF0","\xF1","\xF2","\xF3","\xF4","\xF5","\xF6","\xF7",
        "\xF8","\xF9","\xFA","\xFB","\xFC","\xFD","\xFE","\xFF",
        );
                                                                  
read( STDIN,$message,$ENV{CONTENT_LENGTH} );

$* = 1; # multi-line matching

@items = split( /&/, $message );

foreach $item ( @items ) {

  local( $name,$value ) = split( /=/, $item );

  while( $value =~ /^([^%]*)%(\d\d)(.*)$/ ) {
     $values{$name} .= $1;
     $values{$name} .= $characters[hex($2)];
     $value = $3;
  }

  $values{$name} .= $value;
}

$* = 0; # single line matching


-- 
Randy Roesler                                MacDonald Dettwiler & Assc.
Ph. 604-278-3411 Fax. 604-278-2936           13800 Commerce Parkway,
email ...!uunet!van-bc!mdavcr!rdr            Richmond BC Canada
 rdr%mda.ca@wimsey.bc.ca or rdr@mda.ca       V6V 2J3


Article 14476 of comp.infosystems.www:
Xref: feenix.metronet.com comp.infosystems.www:14476
Path: feenix.metronet.com!news.utdallas.edu!wupost!math.ohio-state.edu!howland.reston.ans.net!EU.net!sunic!ugle.unit.no!trane.uninett.no!nntp.uio.no!nntp.uio.no!aas
From: aas@nora.nr.no (Gisle Aas)
Newsgroups: comp.infosystems.www
Subject: Re: Forms (POST) and PERL
Date: 29 Apr 1994 09:36:25 GMT
Organization: Norwegian Computing Center, Oslo, Norway
Lines: 50
Message-ID: <AAS.94Apr29113625@nora.nr.no>
References: <2pk7r4INNrcc@srvr1.engin.umich.edu> <5515@map.mdavcr.mda.ca>
Reply-To: Gisle.Aas@nr.no
NNTP-Posting-Host: nora.nr.no
In-reply-to: rdr@mdavcr.mda.ca's message of 29 Apr 94 00:01:38 GMT

In article <5515@map.mdavcr.mda.ca> rdr@mdavcr.mda.ca (Randolph Roesler) writes:
>   @characters = ( 
>	   "\x00","\x01","\x02","\x03","\x04","\x05","\x06","\x07",
>	   "\x08","\x09","\x0A","\x0B","\x0C","\x0D","\x0E","\x0F",
>	   "\x10","\x11","\x12","\x13","\x14","\x15","\x16","\x17",
>	   "\x18","\x19","\x1A","\x1B","\x1C","\x1D","\x1E","\x1F",
>	   "\x20","\x21","\x22","\x23","\x24","\x25","\x26","\x27",
>	   "\x28","\x29","\x2A","\x2B","\x2C","\x2D","\x2E","\x2F",
>	   "\x30","\x31","\x32","\x33","\x34","\x35","\x36","\x37",
>	   "\x38","\x39","\x3A","\x3B","\x3C","\x3D","\x3E","\x3F",
>	   "\x40","\x41","\x42","\x43","\x44","\x45","\x46","\x47",
>	   "\x48","\x49","\x4A","\x4B","\x4C","\x4D","\x4E","\x4F",
>	   "\x50","\x51","\x52","\x53","\x54","\x55","\x56","\x57",
>	   "\x58","\x59","\x5A","\x5B","\x5C","\x5D","\x5E","\x5F",
>	   "\x60","\x61","\x62","\x63","\x64","\x65","\x66","\x67",
>	   "\x68","\x69","\x6A","\x6B","\x6C","\x6D","\x6E","\x6F",
>	   "\x70","\x71","\x72","\x73","\x74","\x75","\x76","\x77",
>	   "\x78","\x79","\x7A","\x7B","\x7C","\x7D","\x7E","\x7F",
>	   "\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87",
>	   "\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F",
>	   "\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97",
>	   "\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F",
>	   "\xA0","\xA1","\xA2","\xA3","\xA4","\xA5","\xA6","\xA7",
>	   "\xA8","\xA9","\xAA","\xAB","\xAC","\xAD","\xAE","\xAF",
>	   "\xB0","\xB1","\xB2","\xB3","\xB4","\xB5","\xB6","\xB7",
>	   "\xB8","\xB9","\xBA","\xBB","\xBC","\xBD","\xBE","\xBF",
>	   "\xC0","\xC1","\xC2","\xC3","\xC4","\xC5","\xC6","\xC7",
>	   "\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF",
>	   "\xD0","\xD1","\xD2","\xD3","\xD4","\xD5","\xD6","\xD7",
>	   "\xD8","\xD9","\xDA","\xDB","\xDC","\xDD","\xDE","\xDF",
>	   "\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7",
>	   "\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF",
>	   "\xF0","\xF1","\xF2","\xF3","\xF4","\xF5","\xF6","\xF7",
>	   "\xF8","\xF9","\xFA","\xFB","\xFC","\xFD","\xFE","\xFF",
>	   );
>
>     while( $value =~ /^([^%]*)%(\d\d)(.*)$/ ) {
>	$values{$name} .= $1;
>	$values{$name} .= $characters[hex($2)];
>	$value = $3;
>     }

It is much shorter to write:

        $value =~ s/%([\da-f][\da-f])/pack("C",hex($1))/gei;

And it even works!

-- 
¤ Gisle Aas - Norsk Regnesentral                     <gisle.aas@nr.no>


