📄 perl11.htm
字号:
This is a line from the second and last file.<br>
Here is the last line of the last file.<br>
-- end of current file --<br>
$</blockquote>
下面把eof改为eof(),第二个程序为:<br>
<blockquote>1: #!/usr/local/bin/perl<br>
2:<br>
3: while ($line = <>) {<br>
4: print ($line);<br>
5: if (eof()) {<br>
6: print ("-- end of output --\n");<br>
7: }<br>
8: }</blockquote>
运行结果如下:<br>
<blockquote>$ program file1 file2<br>
This is a line from the first file.<br>
Here is the last line of the first file.<br>
This is a line from the second and last file.<br>
Here is the last line of the last file.<br>
-- end of output --$</blockquote>
这时,只有所有文件都读过了,eof()才返回真,如果只是多个文件中前几个的末尾,返回值为假,因为还有要读取的输入。<br>
<a name=1.1.9>9)间接文件变量</a><br>
对于上述各函数open, close, print, printf, write,
select和eof,都可以用简单变量来代替文件变量,这时,简单变量中所存贮的字符串就被看作文件变量名,下面就是这样一个例子,此例很简单,就不解释了。需要指出的是,函数open,
close, write, select和eof还允许用表达式来替代文件变量,表达式的值必须是字符串,被用作文件变量名。<br>
<blockquote>1: #!/usr/local/bin/perl<br>
2:<br>
3: &open_file("INFILE", "", "file1");<br>
4: &open_file("OUTFILE", ">", "file2");<br>
5: while ($line = &read_from_file("INFILE")) {<br>
6: &print_to_file("OUTFILE", $line);<br>
7: }<br>
8:<br>
9: sub open_file {<br>
10: local ($filevar, $filemode, $filename) = @_;<br>
11:<br>
12: open ($filevar, $filemode . $filename) ||<br>
13: die ("Can't open $filename");<br>
14: }<br>
15: sub read_from_file {<br>
16: local ($filevar) = @_;<br>
17:<br>
18: <$filevar>;<br>
19: }<br>
20: sub print_to_file {<br>
21: local ($filevar, $line) = @_;<br>
22:<br>
23: print $filevar ($line);<br>
24: }</blockquote>
<a name=1.2>2、跳过和重读数据</a><br>
<p>
<table border=1 cellspacing=1>
<tr>
<td>函数名</td>
<td>seek</td>
</tr>
<tr>
<td>调用语法</td>
<td>seek (filevar, distance, relative_to);</td>
</tr>
<tr>
<td>解说</td>
<td>在文件中向前/后移动,有三个参数:<br>
1、filevar,文件变量<br>
2、distance,移动的字节数,正数向前移动,负数往回移动<br>
3、reletive_to,值可为0、1或2。为0时,从文件头开始移动,为1时,相对于当前位置(将要读的下一行)移动,为2时,相对于文件末尾移动。<br>
运行成功返回真(非零值),失败则返回零,常与tell函数合用。</td>
</tr>
</table>
<p></p>
<p>
<table border=1 cellspacing=1>
<tr>
<td>函数名</td>
<td>tell</td>
</tr>
<tr>
<td>调用语法</td>
<td>tell (filevar);</td>
</tr>
<tr>
<td>解说</td>
<td>返回从文件头到当前位置的距离。<br>
注意:<br>
1、seek和tell不能用于指向管道的文件变量。<br>
2、seek和tell中文件变量参数可使用表达式。</td>
</tr>
</table>
<p></p>
<a name=1.3>3、系统读写函数</a><br>
<p>
<table border=1 cellspacing=1>
<tr>
<td>函数名</td>
<td>read</td>
</tr>
<tr>
<td>调用语法</td>
<td>read (filevar, result, length, skipval);</td>
</tr>
<tr>
<td>解说</td>
<td>read函数设计得与UNIX的fread函数等效,可以读取任意长度的字符(字节)存入一个简单变量。其参数有四个:<br>
1、filevar:文件变量<br>
2、result:存贮结果的简单变量(或数组元素)<br>
3、length:读取的字节数<br>
4、skipval:可选项,指定读文件之前跳过的字节数。<br>
返回值为实际读取的字节数,如果已到了文件末尾,则返回零,如果出错,则返回空串。</td>
</tr>
</table>
<p></p>
<p>
<table border=1 cellspacing=1>
<tr>
<td>函数名</td>
<td>sysread</td>
</tr>
<tr>
<td>调用语法</td>
<td>sysread (filevar, result, length, skipval);</td>
</tr>
<tr>
<td>解说</td>
<td>更快的读取数据,与UNIX函数read等效,参数与read相同。</td>
</tr>
</table>
<p></p>
<p>
<table border=1 cellspacing=1>
<tr>
<td>函数名</td>
<td>syswrite</td>
</tr>
<tr>
<td>调用语法</td>
<td>syswrite (filevar, data, length, skipval);</td>
</tr>
<tr>
<td>解说</td>
<td>更快的写入数据,与UNIX函数write等效,参数:<br>
1、filevar:将要写入的文件<br>
2、data:存贮要写入数据的变量<br>
3、length:要写入的字节数<br>
4、skipval写操作之前跳过的字节数。</td>
</tr>
</table>
<p></p>
<a name=1.4>4、用getc读取字符</a><br>
<p>
<table border=1 cellspacing=1>
<tr>
<td>函数名</td>
<td>getc</td>
</tr>
<tr>
<td>调用语法</td>
<td>$char = getc (infile);</td>
</tr>
<tr>
<td>解说</td>
<td>从文件中读取单个字符。</td>
</tr>
</table>
<p></p>
<a name=1.5>5、用binmode读取二进制文件</a><br>
<p>
<table border=1 cellspacing=1>
<tr>
<td>函数名</td>
<td>binmode</td>
</tr>
<tr>
<td>调用语法</td>
<td>binmode (filevar);</td>
</tr>
<tr>
<td>解说</td>
<td>当你的系统(如类DOS系统)对文本文件和二进制文件有所区别时使用。必须在打开文件后、读取文件前使用。</td>
</tr>
</table>
<p></p>
<a name=2></a>二、目录处理函数
<p>
<table border=1 cellspacing=1>
<tr>
<td>函数名</td>
<td><a name=2.1>mkdir</a></td>
</tr>
<tr>
<td>调用语法</td>
<td>mkdir (dirname, permissions);</td>
</tr>
<tr>
<td>解说</td>
<td>创建新目录,参数为:<br>
1、dirname:将要创建的目录名,可以为字符串或表达式<br>
2、permissions:8进制数,指定目录的访问权限,其值和意义见下表,权限的组合方法为将相应的值相加。</td>
</tr>
</table>
<p></p>
<p>
<table border=1 cellspacing=1>
<tr>
<td>值</td>
<td>权限</td>
</tr>
<tr>
<td>4000 </td>
<td>运行时设置用户ID </td>
</tr>
<tr>
<td>2000</td>
<td>运行时设置组ID</td>
</tr>
<tr>
<td>1000</td>
<td>粘贴位</td>
</tr>
<tr>
<td>0400</td>
<td>拥有者读权限</td>
</tr>
<tr>
<td>0200</td>
<td>拥有者写权限</td>
</tr>
<tr>
<td>0100</td>
<td>拥有者执行权限</td>
</tr>
<tr>
<td>0040</td>
<td>组读权限</td>
</tr>
<tr>
<td>0020</td>
<td>组写权限</td>
</tr>
<tr>
<td>0010</td>
<td>组执行权限</td>
</tr>
<tr>
<td>0004</td>
<td>所有人读权限</td>
</tr>
<tr>
<td>0002</td>
<td>所有人写权限</td>
</tr>
<tr>
<td>0001</td>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -