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

📄 ch15.htm

📁 prrl 5 programs codes in the book
💻 HTM
📖 第 1 页 / 共 4 页
字号:



</TD></TR>

</TABLE>

</CENTER>

<P>

<H2><A NAME="TheStandardModules"><FONT SIZE=5 COLOR=#FF0000>

The Standard Modules</FONT></A></H2>

<P>

Table 15.2 lists the modules that should come with all distributions

of Perl. Some of these modules are not portable across all operating

systems, however. The descriptions for the modules mention the

iNCompatibility if I know about it.<BR>

<P>

<CENTER><B>Table 15.2&nbsp;&nbsp;Perl's Standard Modules</B></CENTER>

<p>

<CENTER>

<TABLE BORDERCOLOR=#000000 BORDER=1 WIDTH=80%>

<TR><TD WIDTH=153><I>Module</I></TD><TD WIDTH=437><I>Description</I>

</TD></TR>

<TR><TD WIDTH=153>Text::Abbrev</TD><TD WIDTH=437>Creates an abbreviation table from a list. The abbreviation table consists of the shortest sequeNCe of characters that can uniquely identify each element of the list.

</TD></TR>

<TR><TD WIDTH=153>AnyDBM_File</TD><TD WIDTH=437>Provides a framework for accessing multiple DBMs. This is a UNIX-based module.

</TD></TR>

<TR><TD WIDTH=153>AutoLoader</TD><TD WIDTH=437>Loads fuNCtions on demand. This enables your scripts to use less memory.

</TD></TR>

<TR><TD WIDTH=153>AutoSplit</TD><TD WIDTH=437>Splits a package or module into its component parts for autoloading.

</TD></TR>

<TR><TD WIDTH=153>BeNChmark</TD><TD WIDTH=437>Tracks the running time of code. This module can be modified to run under Windows but some of its fuNCtionality will be lost.

</TD></TR>

<TR><TD WIDTH=153>Carp</TD><TD WIDTH=437>Provides an alternative to the <TT>warn()</TT> and <TT>die()</TT> fuNCtions that report the line number of the calling routine. See &quot;Example: The <TT>Carp</TT> Module&quot; later in the chapter for more 
information.

</TD></TR>

<TR><TD WIDTH=153>I18N::Collate</TD><TD WIDTH=437>Compares 8-bit scalar data according to the current locale. This helps to give an international viewpoint to your script.

</TD></TR>

<TR><TD WIDTH=153>Config</TD><TD WIDTH=437>Accesses the Perl configuration options.

</TD></TR>

<TR><TD WIDTH=153>Cwd</TD><TD WIDTH=437>Gets the pathname of the current working directory. This module will generate a warning message when used with the -w command line option under the Windows and VAX VMS operating systems. You can safely ignore the 
warning.

</TD></TR>

<TR><TD WIDTH=153>Dynaloader</TD><TD WIDTH=437>Lets you dynamically load C libraries into Perl code.

</TD></TR>

<TR><TD WIDTH=153>English</TD><TD WIDTH=437>Lets you use English terms instead of the normal special variable names.

</TD></TR>

<TR><TD WIDTH=153>Env</TD><TD WIDTH=437>Lets you access the system environment variables using scalars instead of a hash. If you make heavy use of the environment variables, this module might improve the speed of your script.

</TD></TR>

<TR><TD WIDTH=153>Exporter</TD><TD WIDTH=437>Controls namespace manipulations.

</TD></TR>

<TR><TD WIDTH=153>Fcntl</TD><TD WIDTH=437>Loads file control definition used by the <TT>fcntl()</TT> fuNCtion.

</TD></TR>

<TR><TD WIDTH=153>FileHandle</TD><TD WIDTH=437>Provides an object-oriented interface to filehandles.

</TD></TR>

<TR><TD WIDTH=153>File::Basename</TD><TD WIDTH=437>Separates a file name and path from a specification.

</TD></TR>

<TR><TD WIDTH=153>File::CheckTree</TD><TD WIDTH=437>Runs filetest checks on a directory tree.

</TD></TR>

<TR><TD WIDTH=153>File::Find</TD><TD WIDTH=437>Traverse a file tree. This module will not work under the Windows operating systems without modification.

</TD></TR>

<TR><TD WIDTH=153>Getopt</TD><TD WIDTH=437>Provides basic and extended options processing.

</TD></TR>

<TR><TD WIDTH=153>ExtUtils::MakeMaker</TD><TD WIDTH=437>Creates a Makefile for a Perl extension.

</TD></TR>

<TR><TD WIDTH=153>Ipc::Open2</TD><TD WIDTH=437>Opens a process for both reading and writing.

</TD></TR>

<TR><TD WIDTH=153>Ipc::Open3</TD><TD WIDTH=437>Opens a process for reading, writing, and error handling.

</TD></TR>

<TR><TD WIDTH=153>POSIX</TD><TD WIDTH=437>Provides an interface to IEEE 1003.1 namespace.

</TD></TR>

<TR><TD WIDTH=153>Net::Ping</TD><TD WIDTH=437>Checks to see if a host is available.

</TD></TR>

<TR><TD WIDTH=153>Socket</TD><TD WIDTH=437>Loads socket definitions used by the socket fuNCtions.

</TD></TR>

</TABLE>

</CENTER>

<P>

<H2><A NAME="TTFONTSIZEFACECourierstrictmyFONTTTFONTSIZEandModulesFONT"><FONT SIZE=5 COLOR=#FF0000>

<TT>strict, my() </TT>and

Modules</FONT></FONT></A></H2>

<P>

In order to use the <TT>strict</TT>

pragma with modules, you need to know a bit more about the <TT>my()</TT>

fuNCtion about how it creates lexical variables instead of local

variables. You may be tempted to think that variables declared

with <TT>my()</TT> are local to a

package, especially siNCe you can have more than one package statement

per file. However, <TT>my()</TT> does

the exact opposite; in fact, variables that are declared with

<TT>my()</TT> are never stored inside

the symbol table.

<P>

If you need to declare variables that are local to a package,

fully qualify your variable name in the declaration or initialization

statement, like this:

<BLOCKQUOTE>

<PRE>

use strict;



$main::foo = '';



package Math;

    $Math::PI = 3.1415 &amp;&amp; $Math::PI;

</PRE>

</BLOCKQUOTE>

<P>

This code snippet declares two variables: <TT>$foo</TT>

in the <TT>main</TT> namespace and

<TT>$PI</TT> in the <TT>Math</TT>

namespace. The <TT>&amp;&amp; $Math::PI</TT>

part of the second declaration is used to avoid getting error

messages from the -w command line option. SiNCe the variable is

inside a package, there is no guarantee that it will be used by

the calling script and the -w command line option generates a

warning about any variable that is only used oNCe. By adding the

harmless logical and to the declaration, the warning messages

are avoided.

<H2><A NAME="ModuleExamples"><FONT SIZE=5 COLOR=#FF0000>

Module Examples</FONT></A></H2>

<P>

This section shows you how to use the <TT>Carp</TT>,

<TT>English</TT>, and <TT>Env</TT>

modules. After looking at these examples, you should feel comfortable

about trying the rest.

<H3><A NAME="ExampleTheTTFONTSIZEFACECourierCarpFONTTTFONTSIZEModuleFONT">

Example: The <TT>Carp</TT>

Module</FONT></A></H3>

<P>

This useful little module lets you do a better job of analyzing

runtime errors-like when your script can't open a file or when

an unexpected input value is found. It defines the <TT>carp()</TT>,

<TT>croak()</TT>, and <TT>confess()</TT>

fuNCtions. These are similar to <TT>warn()</TT>

and <TT>die()</TT>. However, instead

of reported in the exact script line where the error occurred,

the fuNCtions in this module will display the line number that

called the fuNCtion that generated the error. Confused? So was

I, until I did some experimenting. The results of that experimenting

can be found in Listing 15.6.

<P>



<IMG SRC="pseudo.gif" tppabs="http://cheminf.nankai.edu.cn/~eb~/Perl%205%20By%20Example/pseudo.gif" BORDER=1 ALIGN=RIGHT><p>

<BLOCKQUOTE>

<I>Load the Carp module.<BR>

Invoke the strict pragma.<BR>

Start the Foo namespace.<BR>

Define the </I><TT><I>foo()</I></TT><I>

fuNCtion.<BR>

Call the </I><TT><I>carp()</I></TT><I>

fuNCtion.<BR>

Call the </I><TT><I>croak()</I></TT><I>

fuNCtion.<BR>

Switch to the main namespace.<BR>

Call the </I><TT><I>foo()</I></TT><I>

fuNCtion.</I>

</BLOCKQUOTE>

<HR>

<BLOCKQUOTE>

<B>Listing 15.6&nbsp;&nbsp;15LST06.PL-Using the </B><TT><B><FONT FACE="Courier">carp()</FONT></B></TT><B>

and </B><TT><B><FONT FACE="Courier">croak()</FONT></B></TT><B>

from the </B><TT><B><FONT FACE="Courier">Carp Module<BR>

</FONT></B></TT>

</BLOCKQUOTE>

<BLOCKQUOTE>

<PRE>

use Carp;

use strict;



package Foo;

    sub foo {

        main::carp(&quot;carp called at line &quot; . __LINE__ .

            &quot;,\n    but foo() was called&quot;);



        main::croak(&quot;croak called at line &quot; . __LINE__ .

            &quot;,\n    but foo() was called&quot;);

}



package main;

    foo::foo();

</PRE>

</BLOCKQUOTE>

<HR>

<P>

This program displays:

<BLOCKQUOTE>

<PRE>

carp called at line 9, 

    but foo() was called at e.pl line 18

croak called at line 10, 

    but foo() was called at e.pl line 18

</PRE>

</BLOCKQUOTE>

<P>

This example uses a compiler symbol, __LINE__, to iNCorporate

the current line number in the string passed to both <TT>carp()</TT>

and <TT>croak()</TT>. This technique

enables you to see both the line number where <TT>carp()</TT>

and <TT>croak()</TT> were called <I>and</I>

the line number where <TT>foo()</TT>

was called.

<P>

The <TT>Carp</TT> module also defines

a <TT>confess()</TT> fuNCtion which

is similar to <TT>croak()</TT> except

that a fuNCtion call history will also be displayed. Listing 15.7

shows how this fuNCtion can be used. The fuNCtion declarations

were placed after the <TT>foo()</TT>

fuNCtion call so that the program flow reads from top to bottom

with no jumping around.

<P>

<IMG SRC="pseudo.gif" tppabs="http://cheminf.nankai.edu.cn/~eb~/Perl%205%20By%20Example/pseudo.gif" BORDER=1 ALIGN=RIGHT><p>

<BLOCKQUOTE>

<I>Load the Carp module.<BR>

Invoke the strict pragma.<BR>

Call </I><TT><I>foo()</I></TT><I>.

<BR>

Define </I><TT><I>foo()</I></TT><I>.

<BR>

Call </I><TT><I>bar()</I></TT><I>.

<BR>

Define </I><TT><I>bar()</I></TT><I>.

<BR>

Call </I><TT><I>baz()</I></TT><I>.

<BR>

Define </I><TT><I>baz()</I></TT><I>.

<BR>

Call </I><TT><I>Confess()</I></TT><I>.</I>

</BLOCKQUOTE>

<HR>

<BLOCKQUOTE>

<B>Listing 15.7&nbsp;&nbsp;15LST07.PL-Using </B><TT><B><FONT FACE="Courier">confess()</FONT></B></TT><B>

from the </B><TT><B><FONT FACE="Courier">Carp</FONT></B></TT><B>

Module<BR>

</B>

</BLOCKQUOTE>

<BLOCKQUOTE>

<PRE>

use Carp;

use strict;



foo();



sub foo {

    bar();

}



sub bar {

    baz();

}



sub baz {

    confess(&quot;I give up!&quot;);

}

</PRE>

</BLOCKQUOTE>

<HR>

<P>

This program displays:

<BLOCKQUOTE>

<PRE>

I give up! at e.pl line 16

        main::baz called at e.pl line 12

        main::bar called at e.pl line 8

        main::foo called at e.pl line 5

</PRE>

</BLOCKQUOTE>

<P>

This daisy-chain of fuNCtion calls was done to show you how the

fuNCtion call history looks when displayed. The fuNCtion call

history is also called a <I>stack trace</I>. As each fuNCtion

is called, the address from which it is called gets placed on

a stack. When the <TT>confess()</TT>

fuNCtion is called, the stack is unwound or read. This lets Perl

print the fuNCtion call history.

<H3><A NAME="ExampleTheTTFONTSIZEFACECourierEnglishFONTTTFONTSIZEModuleFONT">

Example: The <TT>English</TT>

Module</FONT></A></H3>

<P>

The <TT>English</TT> module is designed

to make your scripts more readable. It creates aliases for all

of the special variables that were discussed in <A HREF="ch12.htm" tppabs="http://cheminf.nankai.edu.cn/~eb~/Perl%205%20By%20Example/ch12.htm" >Chapter 12</A>, &quot;Using

Special Variables.&quot; Table 15.3 lists all of the aliases that

are defined. After the table, some examples show you how the aliases

are used.<BR>

<p>

<CENTER>

<TABLE BORDERCOLOR=#000000 BORDER=1 WIDTH=80%>

<TR><TD><B>Note</B></TD></TR>

<TR><TD>

<BLOCKQUOTE>

Some of the same coNCepts embodied by the special variables are used by the UNIX-based awk program. The <TT>English</TT> module also provides aliases that match what the special variables are called in awk.

</BLOCKQUOTE>



</TD></TR>

</TABLE>

</CENTER>

<P>

<p>

<CENTER>

<TABLE BORDERCOLOR=#000000 BORDER=1 WIDTH=80%>

<TR><TD><B>Tip</B></TD></TR>

<TR><TD>

<BLOCKQUOTE>

I think that this module is especially useful because it provides aliases for the regular expression matching special variables and the formatting special variables. You'll use the other special variables often enough so that their use becomes second 
nature. Or else you won't need to use them at all.</BLOCKQUOTE>



</TD></TR>

</TABLE>

</CENTER>

<P>

<P>

<CENTER><B>Table 15.3&nbsp;&nbsp;Aliases Provided by the English

Module</B></CENTER>

<p>

<CENTER>

<TABLE BORDERCOLOR=#000000 BORDER=1 WIDTH=80%>

<TR><TD WIDTH=139><CENTER><I>Special Variable</I></CENTER></TD>

<TD WIDTH=451><I>Alias</I></TD></TR>

<TR><TD COLSPAN=2 WIDTH=590><B>Miscellaneous</B></TD></TR>

<TR><TD WIDTH=139><CENTER><TT>$_</TT></CENTER>

</TD><TD WIDTH=451><TT>$ARG</TT></TD>

</TR>

<TR><TD WIDTH=139><CENTER><TT>@_</TT></CENTER>

</TD><TD WIDTH=451><TT>@ARG</TT></TD>

</TR>

<TR><TD WIDTH=139><CENTER><TT>$&quot;</TT></CENTER>

</TD><TD WIDTH=451><TT>$LIST_SEPARATOR</TT>

</TD></TR>

<TR><TD WIDTH=139><CENTER><TT>$;</TT></CENTER>

</TD><TD WIDTH=451><TT>$SUBSCRIPT_SEPARATOR</TT> or <TT>$SUBSEP</TT>

</TD></TR>

<TR><TD COLSPAN=2 WIDTH=590><B>Regular Expression or Matching</B>

</TD></TR>

<TR><TD WIDTH=139><CENTER><TT>$&amp;</TT></CENTER>

</TD><TD WIDTH=451><TT>$MATCH</TT>

</TD></TR>

<TR><TD WIDTH=139><CENTER><TT>$`</TT></CENTER>

</TD><TD WIDTH=451><TT>$PREMATCH</TT>

</TD></TR>

<TR><TD WIDTH=139><CENTER><TT>$&#180;</TT></CENTER>

</TD><TD WIDTH=451><TT>$POSTMATCH</TT>

</TD></TR>

<TR><TD WIDTH=139><CENTER><TT>$+</TT></CENTER>

</TD><TD WIDTH=451><TT>$LAST_PAREN_MATCH</TT>

</TD></TR>

<TR><TD COLSPAN=2 WIDTH=590><B>Input</B></TD></TR>

<TR><TD WIDTH=139><CENTER><TT>$.</TT></CENTER>

</TD><TD WIDTH=451><TT>$INPUT_LINE_NUMBER</TT> or <TT>$NR</TT>

</TD></TR>

<TR><TD WIDTH=139><CENTER><TT>$/</TT></CENTER>

⌨️ 快捷键说明

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