?? 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 + -