Perl檔案控制代碼詳解

2022-10-05 00:30:30 字數 2349 閱讀 8455

在檔案i/o中,要從乙個檔案讀取資料,應用程式首先要呼叫作業系統函式並傳送檔名,並選乙個到該檔案的路徑來開啟檔案。該函式取回乙個順序號,即perl檔案控制代碼(filehandle),該perl檔案控制代碼對於開啟的檔案是唯一的識別依據。要從檔案中讀取一塊資料,應用程式需要呼叫函式readfile,並將perl檔案控制代碼在記憶體中的位址和要拷貝的位元組數傳送給作業系統。當完成任務後,在通過呼叫系統函式來關閉該檔案。

除了你模仿唯我論者哲學家編寫乙個人工智慧程式,你的程式使用不和外界通訊的方法。在班級例子中的第三和四行,你將看到"grades",這是引用另乙個perl檔案的資料型別,稱為據柄(filehandle)。乙個控制代碼就是你給乙個檔案,裝置,管套(socket)或管道的乙個名字,以便幫助你記住你正處理的名字,並隱藏某些快取等的複雜性。(在內部,控制代碼類似c++語言的流(streams),或basic中的i/o通道)控制代碼使你從不同的地方輸入和輸出給不同的地方都較容易。使perl成為好語言的乙個原因是它能和多個檔案通訊並一次處理他們。對外部物件有好的符號名字是乙個好語言的乙個組成部分[1]。

其他使perl是乙個好語言的是:它是8位的,是可嵌入的,你能通過擴充套件模式在perl中嵌入其他程式。它是簡明的,網路上容易使用。環境上是清楚的,容易對話。你能以許多不同的方法引用它(就象前面看到的)。總之,語言本身不是如此嚴格的結構,以至於你不能使它超出你的問題。又回到tmtowtdi。

你建立乙個控制代碼,並通過open函式把它和乙個檔案聯結。open有兩個引數:控制代碼和你想與它聯結的乙個檔名。perl也給出一些預定義(和預開啟的)控制代碼。stdin是你程式的正常輸入通道,而stdout是你程式的正常輸出的通道。stderr是乙個附加的輸出通道,以便當把輸入轉為輸出時,程式能給出一些說明[2]。

一般地,這些控制代碼和你的終端聯結,所以你能輸入你的程式並能看到,但他們也可以和檔案聯結。perl能給你這些預定義控制代碼,因為你的作業系統已提供這些。在unix下,程序從他的父程序(一般是乙個shell)繼承標準輸入,輸出和錯誤。乙個shell的責任之一是建立這些i/o流,以便子程序不必考慮這些)。

既然你能為各種目的(輸入,輸出,管道)使用open函式建立控制代碼,你就必須能指明你要做什麼。就象在unix命令列一樣,你給檔名簡單地加些字元。

複製** **如下:

open(sesame,"filename");#從已存在的檔案讀

open(sesame,"open(sesame,">filename");#建立乙個檔案並對它寫

open(sesame,">>filenamwww.cppcns.come");#對已有的檔案接著寫

open(sesame,"|output-pipe-command");#建立乙個輸出過濾

open(sesame,"input-pipe-command|");#建立乙個輸入過濾

就象你看到的,你可以任意選名字。一旦開啟控制代碼sesame,它就能被用於訪問檔案或管道,直到它被顯式地關閉(用close(sesame)),或對同一控制代碼的一系列open把這個控制代碼和另一檔案聯結[3]。

開啟乙個已開啟的控制代碼是隱式地關閉第乙個檔案,使它對perl檔案控制代碼不可取,並開啟乙個不同的檔案。你必須小心這是你真正想做的。有時,偶然碰巧,比如,當你open($handle,$file)時,$handle正好包含空串(null)。確認設定$handle為某個單乙個量,否則你將對空控制代碼開啟乙個新的檔案。

一旦你已為輸入開啟乙個控制代碼(或你使用stdin),你就能使用"行讀操作"<>,讀一行。這個也以鑽石操作聞名,因為它的形狀。這個鑽石操作包含你想讀的控制代碼()[4]。使用stdid控制代碼讀使用者提供的答案,如下:

空鑽石操作<>,將從命令列指定的所有檔案讀,如果沒有指定,從stdin讀。(這是許多unix"過濾"程式的標準行為)

複製** **如下:

printstdout"enteranumber:";#請求輸入乙個數

$number=;#輸入乙個jmoxoq數

printstdout"thenumberis$number";#輸出這個數

你明白我們給你的例子嗎?在print語句中stdout做什麼?這就是你使用乙個輸出控制代碼的方法之一。乙個控制代碼可以作為print語句的第乙個引數,如果存在,告訴往哪兒輸出。在例子中,控制代碼是冗餘的,因為輸出已經是stdout。對於輸入的預設是stdin,對於輸出的預設是stdout。(在班級例子的18行,我們為避免使你混淆,我們省略了。)

我們也有一件jmoxoq事使你不明白。如果你試上面的例子,你可以注意到你得到乙個特別的空行。因為讀時沒有自動地從你的輸入行中刪除換行符(newline)(例如,你輸入"9")。對於這些情況,當你想刪除換行符時,perl提供chop和chomp函式。chop將不加區別地刪除(並返回)傳給它的最後乙個字元,而chomp只刪除記錄標識的末尾(一般地是""),並返回這樣刪除的字元數。

本文標題: perl檔案控制代碼詳解

本文位址: /jiaoben/perl/92595.html

perl 檔案控制代碼

控制代碼handle 分為檔案控制代碼和目錄控制代碼,檔案控制代碼實際上包含檔案,程序和套接字的讀寫。檔案控制代碼的操作步驟 open fd,filename lines close fd open 由以下幾個用法 open fd,filename 寫資料進檔案 open fd,filename 追...

perl檔案控制代碼

perl 雜湊操作 檔案控制代碼,標準檔案控制代碼有stdin stdout stderr data ar ar out 建立名字為textfile的檔案控制代碼,表示讀檔案 open textfile,a.txt while close textfile open textfile1,b.txt ...

Perl 檔案控制代碼

檔案訪問 open data,唯讀方式開啟,將檔案指標指向檔案頭。覆蓋形式寫入 追加形式寫入,末尾追加。讀寫方式開啟,先讀後寫 新增資料可使用seek 函式定位到要新增資料的位置,然後再寫入。讀寫,先寫後讀 先覆蓋形式寫入內容,然後再讀 操作結果 檔案中以前的資料被刪除,現在檔案中只保留目前寫入的資...