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

📄 perl10.htm

📁 Perl作为一门重要的工程语言
💻 HTM
📖 第 1 页 / 共 2 页
字号:
              <tr>
                <td>@&lt;&lt;&lt</td>
                <td>左对齐输出</td>
              </tr>
              <tr>
                <td>@&gt;&gt;&gt;</td>
                <td>右对齐输出</td>
              </tr>
              <tr>
                <td>@|||</td>
                <td>中对齐输出</td>
              </tr>
              <tr>
                <td>@##.## &nbsp;</td>
                <td>固定精度数字 &nbsp;</td>
              </tr>
              <tr>
                <td>@*</td>
                <td>多行文本</td>
              </tr>
            </table>
            <p></p>
                &nbsp;&nbsp;&nbsp;&nbsp;每个值域的第一个字符是行填充符,当使用@字符时,不做文本格式化。对文本的格式化稍后来讲。<br>
            &nbsp;&nbsp;&nbsp;&nbsp;在上表中,除了多行值域@*,域宽都等于其指定的包含字符@在内的字符个数,例如:<br>
            &nbsp;&nbsp;&nbsp;&nbsp; @###.##<br>
            &nbsp;&nbsp;&nbsp;&nbsp;表示七个字符宽,小数点前四个,小数点后两个。<br>
            <a name=3.4>4、输出值域字符</a><br>
            &nbsp;&nbsp;&nbsp;&nbsp;在打印格式里,特定字符如@、<和>被看作值域定义,那么如何将它们输出呢?方法如下:<br>
            <blockquote>format SPECIAL =<br>
              This line contains the special character @.<br>
              "@"<br>
              .</blockquote>
            <a name=4>四、输出到其它文件</a><br>
            &nbsp;&nbsp;&nbsp;&nbsp;缺省地,函数write将结果输出到标准输出文件STDOUT,我们也可以使它将结果输出到任意其它的文件中。最简单的方法就是把文件变量作为参数传递给write,如:<br>
            &nbsp;&nbsp;&nbsp;&nbsp; write (MYFILE);<br>
            &nbsp;&nbsp;&nbsp;&nbsp;这样,write就用缺省的名为MYFILE的打印格式输出到文件MYFILE中,但是这样就不能用$~变量来改变所使用的打印格式。系统变量$~只对缺省文件变量起作用,我们可以改变缺省文件变量,改变$~,再调用write,例如:<br>
            &nbsp;&nbsp;&nbsp;&nbsp; select (MYFILE);<br>
            &nbsp;&nbsp;&nbsp;&nbsp; $~ = "MYFORMAT";<br>
            &nbsp;&nbsp;&nbsp;&nbsp; write;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;当select改变缺省文件变量时,它返回当前缺省文件变量的内部表示,这样我们就可以创建子程序,按自己的想法输出,又不影响程序的其它部分,如下:<br>
            <blockquote>sub write_to_stdout {<br>
              &nbsp; local ($savefile, $saveformat);<br>
              &nbsp; $savefile = select(STDOUT);<br>
              &nbsp; $saveformat = $~;<br>
              &nbsp; $~ = "MYFORMAT";<br>
              &nbsp; write;<br>
              &nbsp; $~ = $saveformat;<br>
              &nbsp; select($savefile);<br>
              }</blockquote>
            <a name=5>五、分页</a><br>
            &nbsp;&nbsp;&nbsp;&nbsp;在输出到打印机时,可以在每页顶部输出相应的信息,这样的特殊文本叫页眉。定义页眉实际上就是定义名为filename_TOP的打印格式,例如给标准输出文件定义页眉如下:<br>
            &nbsp;&nbsp;&nbsp;&nbsp; format STDOUT_TOP =<br>
            &nbsp;&nbsp;&nbsp;&nbsp; Consolidated Widgets Inc. 1994 Annual Report<br>
            &nbsp;&nbsp;&nbsp;&nbsp; .<br>
            &nbsp;&nbsp;&nbsp;&nbsp;在页眉的定义中也可以包含值域,页眉中经常使用的一个特殊值是当前页码,存贮在系统变量$%中,如:<br>
            &nbsp;&nbsp;&nbsp;&nbsp; format STDOUT_TOP =<br>
            &nbsp;&nbsp;&nbsp;&nbsp; Page @<<.<br>
            &nbsp;&nbsp;&nbsp;&nbsp; $%<br>
            &nbsp;&nbsp;&nbsp;&nbsp; .<br>
            &nbsp;&nbsp;&nbsp;&nbsp;我们也可以通过改变系统变量$^改变定义页眉的打印格式名,与$~一样,$^只对当前缺省文件起作用,因此可以与select函数结合使用。<br>
            &nbsp;&nbsp;&nbsp;&nbsp;缺省情况下,每页长度为60行,可以通过改变$=来改变页长,如:<br>
            &nbsp;&nbsp;&nbsp;&nbsp; $= = 66; #页长设为66行<br>
            &nbsp;&nbsp;&nbsp;&nbsp;此赋值语句必须出现在第一个write语句前。<br>
            &nbsp;&nbsp;&nbsp;&nbsp;注:一般使用分页机制时不用print函数,因为当用write输出时,Perl解释器跟踪每页的当前行号。如果必须使用print而又不打乱页计数,可以调整系统变量$-。$-的含义是当前行到页末之间的行数,当$-达到零时,就开始新的一页,调整方法如:<br>
            &nbsp;&nbsp;&nbsp;&nbsp; print ("Here is a line of output\n");<br>
            &nbsp;&nbsp;&nbsp;&nbsp; $- -= 1;<br>
            <a name=6>六、格式化长字符串</a><br>
            &nbsp;&nbsp;&nbsp;&nbsp;我们已经学过值域@*可以输出多行文本,但它完全将字符串原样输出,不加以格式化。在Perl中对长字符串(包含换行)进行格式化的值域定义很简单,只需把打头的@字符换成^就行了,这种文本格式化中,Perl解释器在一行中放置尽可能多的单词。每当输出一行文本,被输出的子串就从变量中删除,再次在域值中使用该变量就把剩下的字符串继续按格式输出。当内容已输出完毕,该变量就成了空串,再输出就会输出空行,为避免输出空行,可以在值域格式行首加一个~字符。见下例:<br>
            <blockquote>1 : #!/usr/local/bin/perl<br>
              2 :<br>
              3 : @quotation = &lt;STDIN&gt;;<br>
              4 : $quotation = join("", @quotation);<br>
              5 : $~ = "QUOTATION";<br>
              6 : write;<br>
              7 :<br>
              8 : format QUOTATION =<br>
              9 : Quotation for the day:<br>
              10: -----------------------------<br>
              11: ~&nbsp; ^&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;<br>
              12: $quotation<br>
              13: ~&nbsp; ^&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;<br>
              14: $quotation<br>
              15: ~&nbsp; ^&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;<br>
              16: $quotation<br>
              17: -----------------------------<br>
              18: .</blockquote>
                &nbsp;&nbsp;&nbsp;&nbsp;运行结果如下:<br>
            <blockquote>$ program<br>
              Any sufficiently advanced programming<br>
              language is indistinguishable from magic.<br>
              ^D<br>
              Quotation for the day:<br>
              -----------------------------<br>
              &nbsp; &nbsp;Any sufficiently advanced programming language is<br>
              &nbsp; &nbsp;indistinguishable from magic.<br>
              -----------------------------<br>
              $</blockquote>
                &nbsp;&nbsp;&nbsp;&nbsp;如果把打印格式中行首的~字符去掉,上面的输出结果中就会多一行空行。很明显,当字符串长度不明确时,这种用法很不方便,原因就在于它指明了输出的行数上限,超过这一上限的字符就不会被输出,解决方法很简单,就是在域值格式行首加两个~字符,这样就会持续按格式输出文本直到输出完毕,用此方法把上述程序改写如下:<br>
            <blockquote>1 : #!/usr/local/bin/perl<br>
              2 :<br>
              3 : @quotation = &lt;STDIN&gt;;<br>
              4 : $quotation = join("", @quotation);<br>
              5 : $~ = "QUOTATION";<br>
              6 : write;<br>
              7 :<br>
              8 : format QUOTATION =<br>
              9 : Quotation for the day:<br>
              10: -----------------------------<br>
              11: ~~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<br>
              12: $quotation<br>
              13: -----------------------------<br>
              14: .</blockquote>
                &nbsp;&nbsp;&nbsp;&nbsp;这样运行结果相同。<br>
            <a name=7>七、用printf格式化输出</a><br>
            &nbsp;&nbsp;&nbsp;&nbsp;还有一种容易掌握和使用的格式化输出函数,那就是printf,它与C语言中的printf基本上是相同的。printf有两个参数,一个是字符串,其中含有一个或多个域值形式,另一个是与各域值相对应的变量值按一定格式替换,如:<br>
            &nbsp;&nbsp;&nbsp;&nbsp; printf("The number I want to print is %d.\n", 
            $number);<br>
            &nbsp;&nbsp;&nbsp;&nbsp;各种域值形式如下表:<br>
            <p align=center>
            <table border=1>
              <tr>
                <td>域值 &nbsp;</td>
                <td>含义</td>
              </tr>
              <tr>
                <td>%c</td>
                <td>单个字符</td>
              </tr>
              <tr>
                <td>%d</td>
                <td>十进制整数</td>
              </tr>
              <tr>
                <td>%e</td>
                <td>科学计数法形式的浮点数 &nbsp;</td>
              </tr>
              <tr>
                <td>%f</td>
                <td>普通形式(定点)浮点数</td>
              </tr>
              <tr>
                <td>%g</td>
                <td>紧缩形式浮点数</td>
              </tr>
              <tr>
                <td>%o</td>
                <td>八进制整数</td>
              </tr>
              <tr>
                <td>%s</td>
                <td>字符串</td>
              </tr>
              <tr>
                <td>%u</td>
                <td>无符号整数</td>
              </tr>
              <tr>
                <td>%x</td>
                <td>十六进制整数</td>
              </tr>
            </table>
            <p></p>
                &nbsp;&nbsp;&nbsp;&nbsp;一些使用细节如下:<br>
            <blockquote>1、在格式d、o、u或x中,如果整数值较大或可能较大,可加个l字符,意为长整型,如%ld。<br>
              2、%字符后加正整数表示该域的最小宽度,如果输出结果宽度不足,则向右对齐,前面用空格补足,如果该正整数以数字0打头,则补足字符为0。若%字符后为负整数,则结果向右对齐。<br>
              3、浮点数域值(%c、%f和%g)中可以指定小数点前后的宽度,如%8.3f意为总宽度为8个字符,小数点后(即小数部分)为3个字符,多出的小数部分四舍五入。<br>
              4、在整数、字符或字符串的值域中使用如上的小数形式n.m,整数部分n为总宽度,小数部分m为输出结果的最大宽度,这样就保证了输出结果前至少有n-m个空格。</blockquote>
            <br>
            <p align=center><a href=perl9.htm>上一章</a> <a href=perl11.htm>下一章</a> 
              <a href=index.htm>目录</a></p>
            <p align=center>&nbsp; </p>
            <!-- #EndEditable --></td>
        </tr>
      </table>
    </td></tr></table></body><!-- #EndTemplate --></html>

⌨️ 快捷键说明

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