Perl的檔案操作(1)(適合初學者)

來源:互聯網
上載者:User
 

用 Sysopen()進行更多的控制
--------------------------------------------------------------------------------
為了更好的控制檔案的開啟檔案,可以使用 sysopen() 函數:

use Fcntl;

sysopen(FH, $filename, O_RDWR|O_CREAT, 0666)

or die "Can't open $filename for reading/writing/creating : $!";

函數 sysopen() 帶有四個參數,第一個是同open()函數類似的檔案控制代碼參數,第二個參數是不帶模式資訊的檔案名稱,第三個參數是模式參數,由Fcntl 模組提供的邏輯OR運算組合起來的常數構成,第四個參數(可選),為八進位屬性值(0666表示資料檔案, 0777表示程式)。如果檔案可以被開啟,sysopen() 返回true,如果開啟失敗,則返回false。

不同於open()函數,sysopen()不提供模式說明的簡寫方式,而是把一些常數組合起來,而且,每個模式常數有唯一的含義,只有通過邏輯OR運算才能將它們組合起來,你可以設定多個行為的組合。

O_RDONLYRead-only

O_WRONLY Write-only

O_RDWR Reading and writing

O_APPEND Writes go to the end of the file

O_TRUNC Truncate the file if it existed

O_CREAT Create the file if it didn't exist

O_EXCLError if the file already existed (used with O_CREAT)

當你需要小心行事的時候,就使用sysopen() 函數,例如,如果你打算新增內容到檔案中,如果檔案不存在,不建立新檔案,你可以這樣寫:

sysopen(LOG, "/var/log/myprog.log", O_APPEND, 0666)

or die "Can't open /var/log/myprog.log for appending: $!";

讀入單個記錄
有一個容易的方法讀入filehandles:用 操作符。在標量內容下,它返迴文件中的下一個記錄,或者返回未定義出錯資訊。我們可以使用它來把一行讀入到一個變數中:

$line = ;

die "Unexpected end-of-file" unless defined $line;

在迴圈語句中,我們可以這樣寫:

while (defined ($record = )) { # long-winded

# $record is set to each record in the file, one at a time

}

因為要大量進行這樣的工作,通常再進行一下簡化,

把記錄放到$_ 中,而不是$record中:

while () {

# $_ 每次為檔案中的一個記錄

}

在Perl 5.004_04中,我們可以這樣做:

while ($record = ) {

# $record 每次為檔案中的一個記錄

}

defined() 將自動加上,在Perl 5.004_04以前的版本中,該命令給出一個警示。要瞭解所用的Perl版本,可在命令列下打入:

perl -v

一旦我們讀出了一個記錄,通常打算去掉記錄分隔字元,(預設值為分行符號字元):

chomp($record);

Perl 4.0版本僅有chop()操作,去掉串的最後一個字元, 不管該字元是什麼。chomp() 沒有這麼大的破壞性,如果有行分隔字元存在,它僅去掉行分隔字元。如果你打算去掉行分隔字元,就用chomp() 來代替chop()。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.