CGI and Perl

MIME attachment

From - Mon Jan 13 01:50:26 1997
 Return-Path: <[email protected]>
 Received: from chris (ts8p1.ro.com [205.216.92.168])
           by sh1.ro.com (8.8.4/8.8.4) with SMTP
   id CAA12517 for <[email protected]>; Mon, 13 Jan 1997 02:50:08 -0600
 Message-ID: <[email protected]>
 Date: Mon, 13 Jan 1997 01:47:47 -0800
 From: Chris Kemp <[email protected]>
 Reply-To: [email protected]
 Organization: Silicon Graphics
 X-Mailer: Mozilla 3.01 (Win95; I)
 MIME-Version: 1.0
 To: [email protected]
 Subject: MIME Test
 Content-Type: multipart/mixed; boundary="------------6B797646304"
 X-UIDL: 48f2146a82b1f706edbd5e7c350b352a
 X-Mozilla-Status: 0001
 This is a multi-part message in MIME format.
 --------------6B797646304
 Content-Type: text/plain; charset=us-ascii
 Content-Transfer-Encoding: 7bit
 Chris,
 I have attached a picture of the Boeing F-22 to this message.
 --------------6B797646304
 Content-Type: image/jpeg; name="F22.jpg"
 Content-Transfer-Encoding: base64
 Content-Disposition: inline; filename="F22.jpg"
 /9j/4AAQSkZJRgABAgEASABIAAD/7QG4UGhvdG9zaG9wIDMuMAA4QklNA+kAAAAAAHgAAwAA
 AEgASAAAAAAC2gIo/+H/4gL5AkYDRwUoA/wAAgAAAEgASAAAAAAC2AIoAAEAAABkAAAAAQAD
 AwMAAAABJw8AAQABAAAAAAAAAAAAAAAAYAgAGQGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 AAAAAAAAAAA4QklNA+0AAAAAABAASAAAAAEAAQBIAAAAAQABOEJJTQPzAAAAAAAIAAAAAAAA
 AAA4QklNJxAAAAAAAAoAAQAAAAAAAAACOEJJTQP1AAAAAABIAC9mZgABAGxmZgAGAAAAAAAB
 AC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAABADUAAAABAC0AAAAGAAAAAAAB
 OEJJTQP4AAAAAABwAAD/////////////////////////////A+gAAAAA////////////////
 /////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////////////
 ////////////////A+gAADhCSU0EBgAAAAAAAgAG/+4ADkFkb2JlAGQAAAAAAf/bAIQAAgIC
 AgICAgICAgMCAgIDBAMCAgMEBQQEBAQEBQYFBQUFBQUGBgcHCAcHBgkJCgoJCQwMDAwMDAwM
 DAwMDAwMDAEDAwMFBAUJBgYJDQoJCg0PDg4ODg8PDAwMDAwPDwwMDAwMDA8MDAwMDAwMDAwM
 DAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgCWAMYAwERAAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAA
 AAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAACAQMDAgQC
 BgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPBUtHhMxZi8CRygvElQzRTkqKy
 Y3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE1OT0ZXWFlaW1xdXl9WZ2
 hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZqbnJ2en5KjpKWmp6
 ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEyobHwFMHR4SNC
 FVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp0+PzhJSk
 tMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+DlJ
 WWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/dAAQAY//aAAwDAQACEQMRAD8A/P8A4q7FXYq7
 <a few hundred K of encoded data removed>
 sS+TZPzi8xpdeS/Jmoana6tf6VYteahqd8v1ixlmto4bi91KSRI45P8AX4tir9CMVdirsVdi
 rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs
 VdirsVdirsVdirsVeRfn5y/5UX+dHH7X+BPMVP8AuGXGLCX0v//Z
 --------------6B797646304--

Notice the MIME content type declarations throughout the message. A practical application of the Mime::Base64 decode_base64 function would be extracting the encoded data to a file. Using this method, you could allow users to submit pictures via e-mail of items that could be integrated into a Web page.

Using MIME::QuotedPrint

Mime::QuotedPrint includes the functions encode_qp and decode_qp that function in the same way as their Base64 counterparts. The syntax is as follows:

$encoded = encode_yp($decoded);
 $decoded = decode_yp($encoded);

MIME is significant to the Web programmer in two main ways. MIME and its different data types define standard types of data that can be transmitted as part of a document. MIME headers are used in every HTTP transaction, thus a familiarity with them is essential in advanced applications where your program must generate headers. MIME encoding schemes allow binary data to be included in text messages that can be transported over older e-mail (not HTTP) gateways.

Simple PleasuresExamples

  • Guest Book
  • Hit Counter
  • Clickable Maps
  • Text File Search
  • E-Mail Notification

This chapter will provide several examples of things that all Webmasters might want to incorporate into their Web sites. It will, hopefully, illustrate the power of Perl and prove why Perl has become the de facto standard when it comes to CGI programming. All of these examples involve server-side CGI programs, and they are ubiquitous real-world programs out on the World Wide Web.

You have already learned the basics of Perl5 and how the WWW libraries are used. It is now time to put what you've learned to practical use. You will see how to implement a guest book, a page hit counter, a clickable image map, a text file searching program, and an automatic e-mail notification script.