Perl 檔案 I/O
Perl 旨在有效地進行檔案和 I/O 操作。Perl 的主要優點是檔案解析和處理檔案。Perl 中的檔案處理過程中使用了許多內建函式和運算子。
基本上,使用 Perl 執行的檔案操作是使用 FILEHANDLE
完成的。我們必須在開啟檔案時定義 FILEHANDLE
以進行讀取或寫入。
Perl 開啟檔案
我們可以使用 Perl 中提供的 open()
函式開啟一個檔案。
open(FILEHANDLE, "filename or complete path of the file");
現在我們已經開啟了一個檔案,現在出現了一個問題。是讀還是寫?
Perl 讀取檔案和 Perl 寫入檔案
Perl 具有某些模式,需要用於讀取,寫入或追加檔案。
Read – open(my $fh,"<filename or complete path of the file");
Write – open(my $fh,">filename or complete path of the file");
Append – open(my $fh,">>filename or complete path of the file");
閱讀檔案的幾個例子:
假如我們有一個名為 file.txt
的 Perl 檔案,其中包含很少的文字行。我們需要開啟這個檔案並列印出來。
open(FH,"<file.txt");
while(<FH>) # Looping the file contents using the FH as a filehandle.
{
print "$_";
}
close FH;
或者,
open(FH,"<file.txt");
my @content=<FH>; # specifying the input of the array is FH.
foreach(@content)
{
print "$_";
}
close FH;
這將在螢幕上列印檔案內容。
現在,我們將編寫一個程式來建立和寫入 Perl 檔案的資料。
open(FH,">test.txt");
my $var=<>;
print FH $var;
close FH;
這將建立一個檔案 test.txt
並寫入在執行時提供的輸入。
上面的方法總是嘗試建立一個名為 test.txt
的檔案,並將輸入寫入檔案中。我們將編寫一段程式來追加檔案。
open(FH,">>test.txt");
my $var=<>;
print FH $var;
close FH;
模式 | 說明 |
---|---|
< |
閱讀 |
+< |
讀寫 |
> |
建立,寫入和截斷 |
+> |
讀,寫,建立和截斷 |
>> |
寫,追加和建立 |
+>> |
讀,寫,追加和建立 |
現在我們必須看看如何使用基本示例來讀取、編寫和追加檔案。
我們將看到更多示例和其他函式,這些示例和其他函式有助於更多地瞭解檔案。
Perl Tell
如果指定的話,此方法將返回 FILEHANDLER
的當前位置(以位元組為單位),否則將最後一行視為位置。
open(FH, "test.pl");
while(<FH>)
{
$a=tell FH;
print "$a";
}
Perl Seek
Seek
功能類似於 fseek
系統呼叫。此方法用於通過指定檔案指標的開頭或檔案指標的結尾之後的位元組來將檔案指標定位到特定位置。
seek FH, bytes, WHENCE;
WHENCE
是檔案指標的開始位置。檔案的開頭設定為零。
示例:讓 input.txt
含有一些資料,例如 Hello this is my world.
。
open FH, '+<','input.txt';
seek FH, 5, 0; # This will start reading data after 5 bytes.
$/= undef;
$out = <FH>;
print $out;
close FH;
輸出:
this is my world
Perl Unlink
Unlink
用於刪除檔案。
unlink("filename or complete file path");
處理目錄:
我們還可以處理目錄,這樣我們就可以處理來多個檔案。
讓我們看看如何開啟目錄。我們可以使用 opendir
和 readdir
方法。
opendir(DIR,"C:\\Program Files\\"); #DIR is the directory handler.
while(readdir(DIR)) # loop through the output of readdir to print the directory contents.
{
print "$_\n";
}
closedir(DIR); #used to close the directory handler.
或者,
opendir(DIR,"C:\\Program Files\\");
@content=readdir(DIR);
foreach(@content)
{
print "$_\n";
}
closedir(DIR);
這將列印該目錄中的所有可用檔案。
Perl 檔案測試及其含義
字元 | 含義 |
---|---|
-r |
檢查當前使用者/組是否可以讀取檔案/目錄 |
-w |
檢查當前使用者/組的檔案/目錄是否可寫 |
-x |
檢查檔案/目錄是否可由當前使用者/組執行 |
-o |
檢查檔案/目錄是否歸當前使用者所有 |
-R |
檢查此真實使用者/組的檔案/目錄是否可讀 |
-W |
檢查此真實使用者/組的檔案/目錄是否可寫 |
-X |
檢查檔案/目錄是否可由此真實使用者/組執行 |
-O |
檢查檔案/目錄是否歸該真實使用者所有 |
-e |
檢查檔案/目錄名是否存在 |
-z |
檢查檔案是否存在且大小為零(對於目錄始終為 false) |
-f |
檢查輸入是否是普通檔案 |
-d |
檢查輸入是否是目錄 |
-l |
檢查輸入是否為符號連結 |
-S |
檢查輸入是否是 Socket |
-p |
檢查輸入是否是命名管道(FIFO ) |
-b |
檢查輸入是否是塊特殊檔案(如可安裝磁碟) |
-c |
檢查輸入是否是字元特殊檔案(如 I/O 裝置) |
-u |
檢查檔案或目錄是否為 setuid |
-g |
檢查檔案或目錄是否為 setgid |
-k |
檢查檔案或目錄是否設定了粘滯位 |
-t |
給定的檔案控制代碼是一個 TTY(由 isatty()系統函式,檔名無法通過此測試進行測試) |
-T |
檢查檔案是否是 文字 檔案 |
-B |
檢查檔案是否是 二進位制 檔案 |
-M |
檢查檔案的修改年齡(以天為單位) |
-A |
檢查檔案的訪問時限(以天為單位) |
-C |
檢查檔案的 Inode 修改年齡(以天為單位) |