Perl Dateioperationen
Perl verwendet einen Variablentyp namens Dateihandle, um mit Dateien zu arbeiten.
Das Lesen oder Schreiben von Daten aus einer Datei erfordert ein Dateihandle.
Ein Dateihandleist einI/OName einer Verbindung.
Perl stellt drei Dateihandles bereit:STDIN,STDOUT,STDERRdie jeweils fürStandardeingabe,、StandardausgabeundStandardfehlerausgabe stehen。
In Perl können Dateien auf folgende Weise geöffnet werden:
open FILEHANDLE, EXPR open FILEHANDLE sysopen FILEHANDLE, FILENAME, MODE, PERMS sysopen FILEHANDLE, FILENAME, MODE
Parameter description:
- FILEHANDLE: Das Dateihandle, das verwendet wird, um eine eindeutige Kennung für eine Datei zu speichern.
- EXPR: Ein Ausdruck, der aus dem Dateinamen und dem Dateizugriffstyp besteht.
- MODE: Dateizugriffstyp.
- PERMS: Berechtigungsbits.
open-Funktion
Im folgenden Code verwenden wir die open-Funktion im Nur-Lese-Modus<, um die Datei file.txt zu öffnen:
open(DATA, "<file.txt");
<kennzeichnet den Nur-Lese-Modus.
DATA im Code ist der Dateihandle, der zum Lesen der Datei verwendet wird. Das folgende Beispiel öffnet die Datei und gibt ihren Inhalt aus:
Beispiel
Der folgende Code öffnet die Datei file.txt im Schreib>modus:
open(DATA, ">file.txt") or die "file.txt 文件无法打开, $!";
>kennzeichnet den Schreibmodus.
Wenn Sie eine Datei im Lese-/Schreibmodus öffnen müssen, können Sie ein +-Zeichen vor dem Zeichen > oder < hinzufügen:
open(DATA, "+<file.txt"); or die "file.txt 文件无法打开, $!";
Dieser Modus löscht nicht die ursprünglichen Inhalte der Datei. Wenn Sie sie löschen möchten, lautet das Format wie folgt:
open DATA, "+>file.txt" or die "file.txt 文件无法打开, $!";
Wenn Sie Daten an eine Datei anhängen möchten, müssen Sie die Datei nur im Anhängemodus öffnen, bevor Sie die Daten anhängen:
open(DATA,">>file.txt") || die "file.txt 文件无法打开, $!";
>>gibt an, dass Daten an das Ende einer vorhandenen Datei angehängt werden. Wenn Sie den Inhalt der angehängten Datei lesen müssen, können Sie ein +-Zeichen hinzufügen:
open(DATA,"+>>file.txt") || die "file.txt 文件无法打开, $!";
Die folgende Tabelle listet die verschiedenen Zugriffsmodi auf:
| Mode | Beschreibung |
|---|---|
| < oder r | Im Nur-Lese-Modus öffnen, wobei der Dateizeiger auf den Anfang der Datei zeigt. |
| > oder w | Im Schreibmodus öffnen, wobei der Dateizeiger auf den Anfang der Datei zeigt und die Dateigröße auf null gesetzt wird. Wenn die Datei nicht existiert, wird versucht, sie zu erstellen. |
| >> oder a | Im Schreibmodus öffnen, wobei der Dateizeiger auf das Ende der Datei zeigt. Wenn die Datei nicht existiert, wird versucht, sie zu erstellen. |
| +< oder r+ | Im Lese-/Schreibmodus öffnen, wobei der Dateizeiger auf den Anfang der Datei zeigt. |
| +> oder w+ | Im Lese-/Schreibmodus öffnen, wobei der Dateizeiger auf den Anfang der Datei zeigt und die Dateigröße auf null gesetzt wird. Wenn die Datei nicht existiert, wird versucht, sie zu erstellen. |
| +>> oder a+ | Im Lese-/Schreibmodus öffnen, wobei der Dateizeiger auf das Ende der Datei zeigt. Wenn die Datei nicht existiert, versuchen, sie zu erstellen. |
Sysopen-Funktion
sysopenDiese Funktion ähnelt der open-Funktion, außer dass sich ihre Parameterformen unterscheiden.
Das folgende Beispiel öffnet eine Datei im Lese-/Schreibmodus (+<filename):
sysopen(DATA, "file.txt", O_RDWR);
Wenn Sie die Datei vor dem Aktualisieren leeren müssen, lautet die Syntax wie folgt:
sysopen(DATA, "file.txt", O_RDWR|O_TRUNC );
Sie können O_CREAT verwenden, um eine neue Datei zu erstellen, O_WRONLY für den Nur-Schreibmodus und O_RDONLY für den Nur-Lesemodus.
Der PERMS-Parameter ist ein oktaler Attributwert, der die Berechtigungen nach dem Erstellen der Datei angibt. Der Standardwert ist0x666。
Die folgende Tabelle listet die möglichen Moduswerte auf:
| Mode | Beschreibung |
|---|---|
| O_RDWR | Im Lese-/Schreibmodus öffnen, wobei der Dateizeiger auf den Anfang der Datei zeigt. |
| O_RDONLY | Im Nur-Lese-Modus öffnen, wobei der Dateizeiger auf den Anfang der Datei zeigt. |
| O_WRONLY | Im Schreibmodus öffnen, wobei der Dateizeiger auf den Anfang der Datei zeigt und die Dateigröße auf null gesetzt wird. Wenn die Datei nicht existiert, wird versucht, sie zu erstellen. |
| O_CREAT | Datei erstellen |
| O_APPEND | Datei anhängen |
| O_TRUNC | Dateigröße auf null kürzen |
| O_EXCL | Wenn die Datei vorhanden ist, wenn O_CREAT verwendet wird, wird eine Fehlermeldung zurückgegeben; damit kann getestet werden, ob die Datei existiert. |
| O_NONBLOCK | Nicht blockierende E/A bewirkt, dass unser Vorgang entweder erfolgreich ist oder sofort einen Fehler zurückgibt, ohne blockiert zu werden. |
Close-Funktion
Nachdem Sie eine Datei verwendet haben, sollten Sie sie schließen, um die mit dem Dateihandle verbundenen Eingabe-/Ausgabepuffer zu leeren. Die Syntax zum Schließen einer Datei lautet wie folgt:
close FILEHANDLE close
FILEHANDLE ist das angegebene Dateihandle; es gibt true zurück, wenn das Schließen erfolgreich ist.
close(DATA) || die "无法关闭文件";
Dateien lesen und schreiben
Es gibt mehrere verschiedene Möglichkeiten, Informationen in Dateien zu schreiben und daraus zu lesen:
<FILEHANDL> Operator
Die Hauptmethode zum Lesen von Informationen aus einem geöffneten Dateihandle ist der <FILEHANDLE>-Operator. Im skalaren Kontext gibt er eine einzelne Zeile aus dem Dateihandle zurück. Zum Beispiel:
Beispiel
Nachdem das obige Programm ausgeführt wurde, werden die folgenden Informationen angezeigt. Nachdem wir die URL eingegeben haben, gibt die print-Anweisung Folgendes aus:

Wenn wir den <FILEHANDLE>-Operator verwenden, gibt er eine Liste jeder Zeile im Dateihandle zurück. Zum Beispiel können wir alle Zeilen in ein Array importieren.
Erstellen Sie zuerst die Datei import.txt mit folgendem Inhalt:
$ cat import.txt 1 2 3
Lesen Sie import.txt und legen Sie jede Zeile in das @lines-Array:
Beispiel
Nach dem Ausführen des obigen Programms ist die Ausgabe:
1 2 3
getc-Funktion
Die getc-Funktion gibt ein einzelnes Zeichen vom angegebenen FILEHANDLE zurück oder von STDIN, wenn kein FILEHANDLE angegeben ist:
getc FILEHANDLE getc
Wenn ein Fehler auftritt oder wenn sich das Dateihandle am Ende der Datei befindet, gibt sie undef zurück.
read-Funktion
Die read-Funktion wird verwendet, um Informationen aus einem gepufferten Dateihandle zu lesen.
Diese Funktion wird verwendet, um binäre Daten aus einer Datei zu lesen.
read FILEHANDLE, SCALAR, LENGTH, OFFSET read FILEHANDLE, SCALAR, LENGTH
Parameter description:
- FILEHANDLE: Das Dateihandle, das verwendet wird, um eine eindeutige Kennung für eine Datei zu speichern.
- SCALAR: Speichert das Ergebnis. Wenn OFFSET nicht angegeben ist, werden die Daten am Anfang von SCALAR platziert. Andernfalls werden die Daten nach OFFSET Bytes in SCALAR platziert.
- LENGTH: Die Länge des zu lesenden Inhalts.
- OFFSET: Der Offset.
Bei Erfolg wird die Anzahl der gelesenen Bytes zurückgegeben; am Dateiende wird 0 zurückgegeben; bei einem Fehler wird undef zurückgegeben.
print-Funktion
Für alle Funktionen, die Informationen aus einem Dateihandle lesen, ist die zugrunde liegende Hauptschreibfunktion print:
print FILEHANDLE LIST print LIST print
Mithilfe des Dateihandles und der print-Funktion können die Ergebnisse des Programms an das Ausgabegerät (STDOUT: Standardausgabe) gesendet werden, zum Beispiel:
print "Hello World!\n";
Dateikopie
Im folgenden Beispiel öffnen wir eine vorhandene Datei file1.txt, lesen jede ihrer Zeilen und schreiben sie in file2.txt:
Beispiel
Datei umbenennen
Im folgenden Beispiel benennen wir die vorhandene Datei file1.txt in file2.txt um, im angegebenen Verzeichnis /usr/example/test/:
#!/usr/bin/perl
rename ("/usr/example/test/file1.txt", "/usr/example/test/file2.txt" );
Die Funktionrenamesakzeptiert nur zwei Parameter und benennt nur vorhandene Dateien um.
Dateien löschen
Im folgenden Beispiel zeigen wir, wie man dieunlinkFunktion verwendet, um eine Datei zu löschen:
Beispiel
Dateiposition angeben
Sie können dietellFunktion verwenden, um die Dateiposition zu ermitteln, und dieseekFunktion verwenden, um die Position innerhalb der Datei anzugeben:
tell-Funktion
Die tell-Funktion wird verwendet, um die Dateiposition zu ermitteln:
tell FILEHANDLE tell
Wenn FILEHANDLE angegeben ist, gibt die Funktion die Position des Dateizeigers in Bytes zurück. Wenn nicht angegeben, gibt sie den standardmäßig ausgewählten Dateihandle zurück.
seek-Funktion
Die seek()-Funktion liest oder schreibt Dateien, indem sie den Lese-/Schreibzeiger der Datei über das Dateihandle verschiebt, wobei in Bytes gelesen und geschrieben wird:
seek FILEHANDLE, POSITION, WHENCE
Parameter description:
- FILEHANDLE: Dateihandle, wird verwendet, um eine eindeutige Kennung für eine Datei zu speichern.
- POSITION: Gibt die Anzahl der Bytes an, um die das Dateihandle (Lese-/Schreibpositionszeiger) bewegt werden soll.
- WHENCE: Gibt die Startposition an, wenn das Dateihandle (Lese-/Schreibpositionszeiger) beginnt, sich zu bewegen. Es kann die Werte 0, 1, 2 annehmen; diese stehen jeweils für den Anfang der Datei, die aktuelle Position und das Ende der Datei.
Das folgende Beispiel liest 256 Bytes vom Anfang der Datei:
seek DATA, 256, 0;
Dateiinformationen
Perls Dateioperationen können auch zuerst testen, ob eine Datei existiert, ob sie lesbar oder beschreibbar ist usw.
Wir können zuerst eine Datei file1.txt mit folgendem Inhalt erstellen:
$ cat file1.txt www.example.com
Beispiel
Nach Ausführung des obigen Programms ist die Ausgabe:
file1.txt 信息:是一个文本文件, 15 字节
文件测试运算符如下表所示:
| Operator | Beschreibung |
|---|---|
| -A | 文件上次被访问的时间(以天为单位) |
| -B | 是否为二进制文件 |
| -C | 文件(inode)索引节点修改时间(以天为单位) |
| -M | 文件上次修改的时间(以天为单位) |
| -O | 文件由真实 UID 拥有 |
| -R | 文件或目录可被真实 UID/GID 读取 |
| -S | 是否为套接字 |
| -T | 是否为文本文件 |
| -W | 文件或目录可被真实 UID/GID 写入 |
| -X | 文件或目录可被真实 UID/GID 执行 |
| -b | Ist eine blockorientierte Spezialdatei (z. B. eine eingebundene Festplatte) |
| -c | Ist eine zeichenorientierte Spezialdatei (z. B. ein E/A-Gerät) |
| -d | Ist ein Verzeichnis |
| -e | Datei- oder Verzeichnisname existiert |
| -f | Ist eine reguläre Datei |
| -g | Datei oder Verzeichnis besitzt das setgid-Attribut |
| -k | Bei Datei oder Verzeichnis ist das Sticky-Bit gesetzt |
| -l | Ist ein symbolischer Link |
| -o | Datei gehört der effektiven UID |
| -p | Datei ist eine benannte Pipe (FIFO) |
| -r | Datei kann von der effektiven UID/GID gelesen werden |
| -s | Datei oder Verzeichnis existiert und ist nicht 0 (gibt Byteanzahl zurück) |
| -t | Dateihandle ist ein TTY (gibt Ergebnis der Systemfunktion isatty() zurück; dieser Test kann nicht auf einen Dateinamen angewendet werden) |
| -u | Datei oder Verzeichnis besitzt das setuid-Attribut |
| -w | Datei kann von der effektiven UID/GID geschrieben werden |
| -x | Datei kann durch die effektive UID/GID ausgeführt werden |
| -z | Datei existiert, Größe ist 0 (Verzeichnisse sind immer false), d. h., ob es sich um eine leere Datei handelt |