⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch23.htm

📁 《Perl 5 Unreleased》
💻 HTM
📖 第 1 页 / 共 5 页
字号:
</FONT></B>

</BLOCKQUOTE>

<BLOCKQUOTE>

<TT><FONT FACE="Courier">&nbsp;1 #!/usr/bin/perl<BR>

&nbsp;2 <BR>

&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

use HTML::Base;<BR>

&nbsp;4 <BR>

&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#

Start the HTML, create a &lt;BODY&gt; tag<BR>

&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$body

= new HTML::Base::Body;<BR>

&nbsp;7 <BR>

&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#

Create an &lt;H1&gt;<BR>

&nbsp;9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new

HTML::Base::Header 1;<BR>

10 <BR>

11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#

Add some text to the header<BR>

12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new

HTML::Base::Text &quot;This is a header&quot;;<BR>

13 <BR>

14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#

Add an image to the header<BR>

15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new

HTML::Base::Image ('SRC','notepad.gif');<BR>

16 <BR>

17&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#

Make the body current again<BR>

18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$body-&gt;make_current;

<BR>

19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#

Add a paragraph to the body<BR>

20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new

HTML::Base::Paragraph;<BR>

21 <BR>

22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#

Add some text to the paragraph<BR>

23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new

HTML::Base::Text &quot;This is a paragraph&quot;;<BR>

24 <BR>

25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$outtable

= new HTML::Base::Table ('BORDER', ' ');<BR>

26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$h

= new HTML::Base::TableHeader;<BR>

27&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new

HTML::Base::Text &quot;Header 1&quot;;<BR>

28&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$h-&gt;end_object;

<BR>

29 <BR>

30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$h

= new HTML::Base::TableHeader;<BR>

31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new

HTML::Base::Text &quot;Header 2&quot;;<BR>

32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$h-&gt;end_object;

<BR>

33 <BR>

34&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new

HTML::Base::TableRow ;<BR>

35&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$r

= new HTML::Base::TableData ;<BR>

36&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new

HTML::Base::Text &quot;Row 1 Col 1&quot;;<BR>

37 <BR>

38&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$r

= new HTML::Base::TableData ;<BR>

39&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new

HTML::Base::Text &quot;Row 1 Col 2&quot;;<BR>

40 <BR>

41&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new

HTML::Base::TableRow ;<BR>

42 <BR>

43&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$r

= new HTML::Base::TableData ;<BR>

44&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new

HTML::Base::Text &quot;Row 2 Col 1&quot;;<BR>

45 <BR>

46&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$r

= new HTML::Base::TableData ;<BR>

47&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new

HTML::Base::Text &quot;Row 2 Col 2&quot;;<BR>

48 <BR>

49&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$outtable-&gt;end_object;

<BR>

50 <BR>

51&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#

Output everything<BR>

52&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$body-&gt;realize;</FONT></TT>

</BLOCKQUOTE>

<HR>

<P>

Here is the output for the HTML tables in the output file: 

<BLOCKQUOTE>

<TT><FONT FACE="Courier">&lt;BODY&gt;<BR>

&lt;H1&gt;<BR>

This is a header<BR>

&lt;IMG SRC=&quot;notepad.gif&quot;&gt;&lt;/H1&gt;<BR>

&lt;P&gt;<BR>

This is a paragraph<BR>

&lt;TABLE BORDER=&quot; &quot;&gt;<BR>

&lt;TH&gt;<BR>

Header 1<BR>

&lt;/TH&gt;<BR>

&lt;TH&gt;<BR>

Header 2<BR>

&lt;/TH&gt;<BR>

&lt;TR&gt;<BR>

&lt;TD&gt;<BR>

Row 1 Col 1<BR>

&lt;/TD&gt;<BR>

&lt;TD&gt;<BR>

Row 1 Col 2<BR>

&lt;/TD&gt;<BR>

&lt;TR&gt;<BR>

&lt;TD&gt;<BR>

Row 2 Col 1<BR>

&lt;/TD&gt;<BR>

&lt;TD&gt;<BR>

Row 2 Col 2<BR>

&lt;/TD&gt;<BR>

&lt;/TR&gt;<BR>

&lt;/TR&gt;<BR>

&lt;/TABLE&gt;<BR>

&lt;/P&gt;<BR>

&lt;/BODY&gt;</FONT></TT>

</BLOCKQUOTE>

<P>

Sure, the output does not look pretty as far as HTML pages go.

However, the code generating this HTML output is abstracted from

the HTML implementation below it. If the HTML specification is

upgraded, the package optimized, or the module otherwise enhanced,

then our Perl scripts would not be affected as long as the interface

is kept consistent.

<P>

Let's rewrite the usage of the <TT><FONT FACE="Courier">getstats</FONT></TT>

module with the <TT><FONT FACE="Courier">CGI</FONT></TT> and <TT><FONT FACE="Courier">HTML</FONT></TT>

modules (see Listing 23.8). The placement of the <TT><FONT FACE="Courier">&lt;TR&gt;</FONT></TT>

and <TT><FONT FACE="Courier">&lt;/TR&gt;</FONT></TT> tags is now

correct because the row object is ended correctly. Contrast the

output of this listing with the output from Listing 23.9. You'll

see how the <TT><FONT FACE="Courier">&lt;/TR&gt;</FONT></TT> tags

are matched when objects are ended and how they output one long

list when objects are not ended correctly.

<P>

As a rule, if you create a row, you must end it.

<HR>

<BLOCKQUOTE>

<B>Listing 23.8. A rewrite of the </B><TT><B><FONT FACE="Courier">getstats</FONT></B></TT><B>

script using Perl modules.<BR>

</B>

</BLOCKQUOTE>

<BLOCKQUOTE>

<TT><FONT FACE="Courier">&nbsp;1 #!/usr/bin/perl<BR>

&nbsp;2 #<BR>

&nbsp;3 # Return Statistics using Perl Modules.<BR>

&nbsp;4 #<BR>

&nbsp;5 use CGI::Base;<BR>

&nbsp;6 use CGI::Request qw(:DEFAULT :cgi-lib);<BR>

&nbsp;7 <BR>

&nbsp;8 print PrintHeader();<BR>

&nbsp;9 <BR>

10 use HTML::Base;<BR>

11 <BR>

12 # Start the HTML, create a &lt;BODY&gt; tag<BR>

13 $body = new HTML::Base::Body;<BR>

14 <BR>

15 # Create an &lt;H1&gt; header<BR>

16 new HTML::Base::Header 1;<BR>

17 <BR>

18 # Add some text to the header<BR>

19 $date = 'date';<BR>

20 new HTML::Base::Text &quot;The top 10 most recent files hit

as of $date&quot;;<BR>

21 <BR>

22 # Make the body current again<BR>

23 <BR>

24 $body-&gt;make_current;<BR>

25 # Add a paragraph to the body<BR>

26 <BR>

27 new HTML::Base::HorizontalRule;<BR>

28 new HTML::Base::Paragraph;<BR>

29 <BR>

30 $a = '/usr/local/bin/getstats';<BR>

31 <BR>

32 #<BR>

33 # Remove the following lines<BR>

34 #<BR>

35 #print &quot;\n &lt;TABLE BORDER&gt; &quot;;<BR>

36 #print &quot;\n &lt;TD&gt; Hits &lt;/TD&gt; &quot;;<BR>

37 #print &quot;\n &lt;TD&gt; Last &lt;/TD&gt; &quot;;<BR>

38 #print &quot;\n &lt;TD&gt; Filename &lt;/TD&gt; &quot;;<BR>

39 <BR>

40 $outtable = new HTML::Base::Table ('BORDER', '');<BR>

41 <BR>

42 $h = new HTML::Base::TableHeader;<BR>

43 new HTML::Base::Text &quot;Hits&quot;;<BR>

44 $h-&gt;end_object;<BR>

45 <BR>

46 $h = new HTML::Base::TableHeader;<BR>

47 new HTML::Base::Text &quot;Last&quot;;<BR>

48 $h-&gt;end_object;<BR>

49 <BR>

50 $h = new HTML::Base::TableHeader;<BR>

51 new HTML::Base::Text &quot;Filename&quot;;<BR>

52 $h-&gt;end_object;<BR>

53 <BR>

54 $found = 0;<BR>

55 $ctr = 0;<BR>

56 foreach $x (split('\n', $a)) {<BR>

57&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if

($x =~ /\#/) {<BR>

58&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$x

= &quot;&quot;;&nbsp;&nbsp;&nbsp;# just ignore it.<BR>

59&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

<BR>

60&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if

($x =~ /(.*) : (.*) : (.*)/ )&nbsp;&nbsp;{<BR>

61&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$x

=~ s/ //g;<BR>

62&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;($hits,

$recent, $fname) = split(':',$x);<BR>

63&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$ctr++;

<BR>

64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if

($ctr &lt; 10)&nbsp;&nbsp;&nbsp;{<BR>

65&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#

print &quot;\n&lt;TR&gt;&lt;TD&gt;$hits&lt;/TD&gt;\n&lt;TD&gt;$recent&lt;/TD&gt;&lt;TD&gt;$fname&lt;/TD&gt;&quot;;

<BR>

66&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$r

=new HTML::Base::TableRow ;<BR>

67&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$h

= new HTML::Base::TableData ;<BR>

68&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new

HTML::Base::Text &quot; $hits&quot;;<BR>

69&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$h-&gt;end_object;

<BR>

70&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$h

= new HTML::Base::TableData ;<BR>

71&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new

HTML::Base::Text &quot; $recent&quot;;<BR>

72&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$h-&gt;end_object;

<BR>

73&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$h

= new HTML::Base::TableData ;<BR>

74&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new

HTML::Base::Text &quot; $fname&quot;;<BR>

75&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$h-&gt;end_object;

<BR>

76&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$r-&gt;end_object;

<BR>

77&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

<BR>

78&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

<BR>

79 }<BR>

80 $outtable-&gt;end_object;<BR>

81 #<BR>

82 # Okay finish the HTML document.<BR>

83 #<BR>

84 $body-&gt;realize;</FONT></TT>

</BLOCKQUOTE>

<HR>

<P>

Here's the output of the <TT><FONT FACE="Courier">getstats</FONT></TT>

rewrite:

<BLOCKQUOTE>

<TT><FONT FACE="Courier">Content-type: text/html<BR>

<BR>

&lt;BODY&gt;<BR>

&lt;H1&gt;<BR>

The top 10 most recent files hit as of Sun Feb  4 16:55:30 CST

1996<BR>

<BR>

&lt;/H1&gt;<BR>

&lt;HR&gt;<BR>

&lt;P&gt;<BR>

&lt;TABLE BORDER&gt;<BR>

&lt;TH&gt;<BR>

Hits<

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -