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

📄 perl 语言-perl 中文教程(第五章).htm

📁 perl的中文教程
💻 HTM
📖 第 1 页 / 共 2 页
字号:
      src="Perl 语言-Perl 中文教程(第五章).files/top.gif" width=180><BR><SPAN 
      class=myFont><SPAN class=myFont><FONT face=宋体>翻译:</FONT></SPAN></SPAN> 
      <SPAN class=myFont><SPAN class=myFont>flamephoenix</SPAN></SPAN> <BR>
      <HR width="100%" SIZE=1>

      <DIV align=left></DIV></DIV>
      <P align=center><B>第五章 文件读写 </B><BR></P>
      <P><A 
      href="http://www.sun126.com/perl5/perl5-5.htm#一、打开、关闭文件">一、打开、关闭文件</A><BR><A 
      href="http://www.sun126.com/perl5/perl5-5.htm#二、读文件">二、读文件</A><BR><A 
      href="http://www.sun126.com/perl5/perl5-5.htm#三、写文件">三、写文件</A><BR><A 
      href="http://www.sun126.com/perl5/perl5-5.htm#四、判断文件状态">四、判断文件状态</A><BR><A 
      href="http://www.sun126.com/perl5/perl5-5.htm#五、命令行参数">五、命令行参数</A><BR><A 
      href="http://www.sun126.com/perl5/perl5-5.htm#六、打开管道">六、打开管道</A> 
      <BR><BR><A name=一、打开、关闭文件>一、打开、关闭文件</A> <BR>&nbsp;&nbsp;语法为open (filevar, 
      filename),其中filevar为文件句柄,或者说是程序中用来代表某文件的代号,filename为文件名,其路径可为相对路径,亦可为绝对路径。<BR>&nbsp;&nbsp;&nbsp;&nbsp;open(FILE1,"file1");<BR>&nbsp;&nbsp;&nbsp;&nbsp;open(FILE1, 
      "/u/jqpublic/file1");<BR>&nbsp;&nbsp;打开文件时必须决定访问模式,在PERL中有三种访问模式:读、写和添加。后两种模式的区别在于写模式将原文件覆盖,原有内容丢失,形式为:open(outfile,"&gt;outfile");而添加模式则在原文件的末尾处继续添加内容,形式为:open(appendfile, 
      "&gt;&gt;appendfile")。要注意的是,不能对文件同时进行读和写/添加操作。<BR>&nbsp;&nbsp;open的返回值用来确定打开文件的操作是否成功,当其成功时返回非零值,失败时返回零,因此可以如下判断:<BR>&nbsp;&nbsp;&nbsp;&nbsp;if 
      (open(MYFILE, "myfile")) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;# here's what to do 
      if the file opened 
      successfully<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;当文件打开失败时结束程序:<BR>&nbsp;&nbsp;&nbsp;&nbsp;unless 
      (open (MYFILE, "file1")) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;die ("cannot open 
      input file 
      file1\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;亦可用逻辑或操作符表示如下:<BR>&nbsp;&nbsp;&nbsp;&nbsp;open 
      (MYFILE, "file1") || die ("Could not open file"); 
      <BR>&nbsp;&nbsp;当文件操作完毕后,用close(MYFILE); 关闭文件。<BR><BR><A name=二、读文件>二、读文件 
      </A><BR>&nbsp;&nbsp;语句$line = 
      &lt;MYFILE&gt;;从文件中读取一行数据存储到简单变量$line中并把文件指针向后移动一行。&lt;STDIN&gt;为标准输入文件,通常为键盘输入,不需要打开。<BR><BR>&nbsp;&nbsp;语句@array 
      = &lt;MYFILE&gt;;把文件的全部内容读入数组@array,文件的每一行(含回车符)为@array的一个元素。<BR><BR><A 
      name=三、写文件>三、写文件</A> 
      <BR>&nbsp;&nbsp;形式为:<BR>&nbsp;&nbsp;&nbsp;&nbsp;open(OUTFILE, 
      "&gt;outfile");<BR>&nbsp;&nbsp;&nbsp;&nbsp;print OUTFILE ("Here is an 
      output 
      line.\n");<BR>&nbsp;&nbsp;注:STDOUT、STDERR为标准输出和标准错误文件,通常为屏幕,且不需要打开。<BR><BR><A 
      name=四、判断文件状态>四、判断文件状态</A> <BR>1、文件测试操作符<BR>&nbsp;&nbsp;语法为:-op 
      expr,如:<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (-e "/path/file1") 
      {<BR>&nbsp;&nbsp;&nbsp;&nbsp;print STDERR ("File file1 
      exists.\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR> </P>
      <P align=center>文件测试操作符 </P>
      <DIV align=center>
      <CENTER>
      <TABLE borderColor=forestgreen cellSpacing=0 cellPadding=2 width="70%" 
      border=1>
        <TBODY>
        <TR>
          <TD class=myFont vAlign=top width=192><B>操作符</B></TD>
          <TD class=myFont vAlign=top width=384><B>描述</B></TD></TR>
        <TR>
          <TD class=myFont vAlign=top width=192>-b</TD>
          <TD class=myFont vAlign=top width=384>是否为块设备</TD></TR>
        <TR>
          <TD class=myFont vAlign=top width=192>-c </TD>
          <TD class=myFont vAlign=top width=384>是否为字符设备 </TD></TR>
        <TR>
          <TD class=myFont vAlign=top width=192>-d </TD>
          <TD class=myFont vAlign=top width=384>是否为目录 </TD></TR>
        <TR>
          <TD class=myFont vAlign=top width=192>-e </TD>
          <TD class=myFont vAlign=top width=384>是否存在 </TD></TR>
        <TR>
          <TD class=myFont vAlign=top width=192>-f </TD>
          <TD class=myFont vAlign=top width=384>是否为普通文件 </TD></TR>
        <TR>
          <TD class=myFont vAlign=top width=192>-g </TD>
          <TD class=myFont vAlign=top width=384>是否设置了setgid位 </TD></TR>
        <TR>
          <TD class=myFont vAlign=top width=192>-k </TD>
          <TD class=myFont vAlign=top width=384>是否设置了sticky位 </TD></TR>
        <TR>
          <TD class=myFont vAlign=top width=192>-l </TD>
          <TD class=myFont vAlign=top width=384>是否为符号链接 </TD></TR>
        <TR>
          <TD class=myFont vAlign=top width=192>-o </TD>
          <TD class=myFont vAlign=top width=384>是否拥有该文件 </TD></TR>
        <TR>
          <TD class=myFont vAlign=top width=192>-p </TD>
          <TD class=myFont vAlign=top width=384>是否为管道 </TD></TR>
        <TR>
          <TD class=myFont vAlign=top width=192>-r </TD>
          <TD class=myFont vAlign=top width=384>是否可读 </TD></TR>
        <TR>
          <TD class=myFont vAlign=top width=192>-s </TD>
          <TD class=myFont vAlign=top width=384>是否非空 </TD></TR>
        <TR>
          <TD class=myFont vAlign=top width=192>-t </TD>
          <TD class=myFont vAlign=top width=384>是否表示终端 </TD></TR>
        <TR>
          <TD class=myFont vAlign=top width=192>-u </TD>
          <TD class=myFont vAlign=top width=384>是否设置了setuid位 </TD></TR>
        <TR>
          <TD class=myFont vAlign=top width=192>-w </TD>
          <TD class=myFont vAlign=top width=384>是否可写 </TD></TR>
        <TR>
          <TD class=myFont vAlign=top width=192>-x </TD>
          <TD class=myFont vAlign=top width=384>是否可执行 </TD></TR>
        <TR>
          <TD class=myFont vAlign=top width=192>-z </TD>
          <TD class=myFont vAlign=top width=384>是否为空文件 </TD></TR>
        <TR>
          <TD class=myFont vAlign=top width=192>-A </TD>
          <TD class=myFont vAlign=top width=384>距上次访问多长时间 </TD></TR>
        <TR>
          <TD class=myFont vAlign=top width=192>-B </TD>
          <TD class=myFont vAlign=top width=384>是否为二进制文件 </TD></TR>
        <TR>
          <TD class=myFont vAlign=top width=192>-C </TD>
          <TD class=myFont vAlign=top width=384>距上次访问文件的inode多长时间 </TD></TR>
        <TR>
          <TD class=myFont vAlign=top width=192>-M </TD>
          <TD class=myFont vAlign=top width=384>距上次修改多长时间 </TD></TR>
        <TR>
          <TD class=myFont vAlign=top width=192>-O </TD>
          <TD class=myFont vAlign=top width=384>是否只为“真正的用户”所拥有 </TD></TR>
        <TR>
          <TD class=myFont vAlign=top width=192>-R </TD>
          <TD class=myFont vAlign=top width=384>是否只有“真正的用户”可读 </TD></TR>
        <TR>
          <TD class=myFont vAlign=top width=192>-S </TD>
          <TD class=myFont vAlign=top width=384>是否为socket </TD></TR>
        <TR>
          <TD class=myFont vAlign=top width=192>-T </TD>
          <TD class=myFont vAlign=top width=384>是否为文本文件 </TD></TR>
        <TR>
          <TD class=myFont vAlign=top width=192>-W </TD>
          <TD class=myFont vAlign=top width=384>是否只有"真正的用户"可写 </TD></TR>
        <TR>
          <TD class=myFont vAlign=top width=192>-X </TD>
          <TD class=myFont vAlign=top width=384>是否只有"真正的用户"可执行 </TD></TR>
        <TR>
          <TD class=myFont 
            colSpan=2>注:“真正的用户”指登录时指定的userid,与当前进程用户ID相对,命令suid可以改变有效用户ID。</TD></TR></TBODY></TABLE><BR></CENTER></DIV>
      <P>&nbsp;&nbsp;例:<BR>&nbsp;&nbsp;&nbsp;&nbsp;unless (open(INFILE, 
      "infile")) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;die ("Input file infile cannot be 
      opened.\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;if 
      (-e "outfile") {<BR>&nbsp;&nbsp;&nbsp;&nbsp;die ("Output file outfile 
      already 
      exists.\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;unless 
      (open(OUTFILE, "&gt;outfile")) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;die ("Output 
      file outfile cannot be 
      opened.\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;等价于<BR>&nbsp;&nbsp;&nbsp;&nbsp;open(INFILE, 
      "infile") &amp;&amp; !(-e "outfile") 
      &amp;&amp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;open(OUTFILE, "&gt;outfile") || 
      die("Cannot open files\n");<BR><BR><A name=五、命令行参数>五、命令行参数</A> 
      <BR>&nbsp;&nbsp;象C一样,PERL也有存储命令行参数的数组@ARGV,可以用来分别处理各个命令行参数;与C不同的是,$ARGV[0]是第一个参数,而不是程序名本身。<BR>&nbsp;&nbsp;&nbsp;&nbsp;$var 
      = $ARGV[0]; # 第一个参数<BR>&nbsp;&nbsp;&nbsp;&nbsp;$numargs = @ARGV; # 
      参数的个数<BR>&nbsp;&nbsp;PERL中,&lt;&gt;操作符实际上是对数组@ARGV的隐含的引用,其工作原理为:<BR>1、当PERL解释器第一次看到&lt;&gt;时,打开以$ARGV[0]为文件名的文件;<BR>2、执行动作shift(@ARGV); 
      即把数组@ARGV的元素向前移动一个,其元素数量即减少了一个。<BR>3、&lt;&gt;操作符读取在第一步打开的文件中的所有行。<BR>4、读完后,解释器回到第一步重复。<BR>&nbsp;&nbsp;例:<BR>&nbsp;&nbsp;&nbsp;&nbsp;@ARGV 
      = ("myfile1", "myfile2"); #实际上由命令行参数赋值<BR>&nbsp;&nbsp;&nbsp;&nbsp;while 
      ($line = &lt;&gt;) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;print 
      ($line);<BR>&nbsp;&nbsp;&nbsp;&nbsp;} 
      <BR>&nbsp;&nbsp;将把文件myfile1和myfile2的内容打印出来。<BR><BR><A 
      name=六、打开管道>六、打开管道</A> <BR>&nbsp;&nbsp;用程序的形式也可以象命令行一样打开和使用管道(ex:ls &gt; 
      tempfile)。如语句open (MYPIPE, "| cat &gt;hello"); 打开一个管道,发送到MYPIPE的输出成为命令"cat 
      &gt;hello"的输入。由于cat命令将显示输入文件的内容,故该语句等价于open(MYPIPE, "&gt;hello"); 
      用管道发送邮件如下:<BR>&nbsp;&nbsp;&nbsp;&nbsp;open (MESSAGE, "| mail 
      dave");<BR>&nbsp;&nbsp;&nbsp;&nbsp;print MESSAGE ("Hi, Dave! Your Perl 
      program sent this!\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;close (MESSAGE); 
  </P></TD></TR></TBODY></TABLE>
<DIV align=center></DIV>
<DIV align=center><BR></DIV>
<DIV align=center><SPAN class=myFont><A 
href="http://www.sun126.com/perl5/perl5-4.htm">上页</A> <A 
href="http://www.sun126.com/perl5/perl5-6.htm">下页</A> <A 
href="http://www.sun126.com/perl5/perl5index.htm">回目录</A> <A 
href="http://www.sun126.com/perl5/perl5-5.htm#a"><FONT face="Arial, 宋体">Go 
Top</FONT></A></SPAN><BR><BR></DIV>
<TABLE height=50 cellSpacing=0 cellPadding=0 width="100%" bgColor=#000000 
border=0>
  <TBODY>
  <TR>
    <TD bgColor=#cccc99 height=4>
      <DIV align=center><IMG height=4 src="" width=4></DIV></TD></TR>
  <TR>
    <TD height=50>
      <DIV align=center><FONT class=myfont size=2><SPAN class=myfont><FONT 
      color=#99cc99><A href="http://www.sun126.com/bbs/ccb/index.cgi"><FONT 
      color=#99cc99>中国CCB论坛</FONT></A>  整理 麻辣 
      2003.7.10</FONT></SPAN></FONT><FONT class=myfont color=#99cc99 
      size=2><SPAN class=myfont><FONT 
      color=#99cc66><BR></FONT></SPAN></FONT><SPAN class=myfont><FONT 
      class=myfont><SPAN class=myfont><FONT face="Arial, Helvetica, sans-serif" 
      color=#99cc99>&copy; 2000 
      http://www.sun126.com</FONT></SPAN></FONT></SPAN></DIV></TD></TR></TBODY></TABLE></BODY></HTML>

⌨️ 快捷键说明

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