Perl menggunakan variabel yang disebut tipe pegangan file untuk memanipulasi file.
Membaca atau menulis data dari suatu file memerlukan pegangan file.
Pegangan file adalah nama koneksi I/O.
Perl menyediakan tiga pegangan file: STDIN, STDOUT, dan STDERR, yang masing-masing mewakili input standar, output standar, dan output kesalahan standar.
Anda dapat membuka file di Perl menggunakan metode berikut:
buka FILEHANDLE, EXProopen FILEHANDLEsysopen FILEHANDLE, FILENAME, MODE, PERMSsysopen FILEHANDLE, FILENAME, MODE
Deskripsi parameter:
FILEHANDLE: Pegangan file, digunakan untuk menyimpan pengidentifikasi file unik.
EXPR: Ekspresi yang terdiri dari nama file dan jenis akses file.
MODE: jenis akses file.
PERMS: bit izin akses (bit izin).
Pada kode berikut, kita menggunakan fungsi open untuk membuka file file.txt dalam mode read-only (<):
buka(DATA, "<file.txt");
< menunjukkan mode hanya baca.
DATA dalam kode adalah pegangan file yang digunakan untuk membaca file. Contoh berikut akan membuka file dan menampilkan konten file:
Kode berikut membuka file file.txt untuk menulis ( > ):
open(DATA, ">file.txt") atau die "file.txt tidak dapat dibuka, $!";
> Menunjukkan metode penulisan.
Jika Anda perlu membuka file untuk membaca dan menulis, Anda dapat menambahkan tanda + sebelum karakter > atau <:
open(DATA, "+<file.txt"); atau mati "file file.txt tidak dapat dibuka, $!";
Cara ini tidak akan menghapus isi asli file. Jika ingin menghapusnya, formatnya adalah sebagai berikut:
buka DATA, "+>file.txt" atau die "file.txt tidak dapat dibuka, $!";
Jika Anda ingin menambahkan data ke file, Anda hanya perlu membuka file dalam mode penambahan sebelum menambahkan data:
open(DATA,">>file.txt") ||. die "file.txt tidak dapat dibuka, $!";
>> artinya menambahkan data di akhir file yang sudah ada. Jika Anda perlu membaca isi file yang akan ditambahkan, Anda dapat menambahkan tanda +:
open(DATA,"+>>file.txt") ||. die "file file.txt tidak dapat dibuka, $!";
Tabel berikut mencantumkan mode akses yang berbeda:
model | menggambarkan |
---|---|
< atau r | Buka dalam mode baca-saja dan arahkan penunjuk file ke header file. |
> atau w | Buka dalam mode penulisan, arahkan penunjuk file ke header file dan potong ukuran file menjadi nol. Jika file tidak ada, coba buat. |
>> atau a | Buka dalam mode penulisan dan arahkan penunjuk file ke akhir file. Jika file tidak ada, coba buat. |
+< atau r+ | Buka dalam mode baca-tulis dan arahkan penunjuk file ke header file. |
+> atau w+ | Buka dalam mode baca-tulis, arahkan penunjuk file ke header file dan potong ukuran file menjadi nol. Jika file tidak ada, coba buat. |
+>> atau + | Buka dalam mode baca-tulis dan arahkan penunjuk file ke akhir file. Jika file tidak ada, coba buat. |
Fungsi sysopen mirip dengan fungsi open, hanya saja bentuk parameternya berbeda.
Contoh berikut membuka file untuk membaca dan menulis (+<nama file):
sysopen(DATA, "file.txt", O_RDWR);
Jika Anda perlu menghapus file sebelum memperbaruinya, cara penulisannya adalah sebagai berikut:
sysopen(DATA, "file.txt", O_RDWR|O_TRUNC );
Anda dapat menggunakan O_CREAT untuk membuat file baru, O_WRONLY adalah mode tulis-saja, O_RDONLY adalah mode baca-saja.
Parameter PERMS adalah nilai atribut oktal , yang menunjukkan izin setelah pembuatan file.
Tabel berikut mencantumkan kemungkinan nilai mode:
model | menggambarkan |
---|---|
O_RDWR | Buka dalam mode baca-tulis dan arahkan penunjuk file ke header file. |
O_RDHANYA | Buka dalam mode baca-saja dan arahkan penunjuk file ke header file. |
O_SALAH | Buka dalam mode penulisan, arahkan penunjuk file ke header file dan potong ukuran file menjadi nol. Jika file tidak ada, coba buat. |
O_CREAT | Buat berkas |
O_APPEND | menambahkan file |
O_TRUNC | Pangkas ukuran file menjadi nol |
O_EXCL | Jika file ada saat menggunakan O_CREAT, pesan kesalahan akan dikembalikan. Ini dapat menguji apakah file tersebut ada. |
O_NONBLOCK | I/O non-pemblokiran memungkinkan operasi kami berhasil atau segera mengembalikan kesalahan tanpa diblokir. |
Setelah file digunakan, file tersebut harus ditutup untuk menyegarkan buffer input dan output yang terkait dengan pegangan file. Sintaks untuk menutup file adalah sebagai berikut:
tutupFILEHANDLEdekat
FILEHANDLE adalah pegangan file yang ditentukan, dan mengembalikan nilai true jika berhasil ditutup.
close(DATA) ||.die "Tidak dapat menutup file";
Ada beberapa cara berbeda untuk membaca dan menulis informasi ke file:
Metode utama membaca informasi dari pegangan file yang terbuka adalah operator <FILEHANDLE>. Dalam konteks skalar, ia mengembalikan satu baris dari pegangan file. Misalnya:
Saat kita menggunakan operator <FILEHANDLE>, ia akan mengembalikan daftar setiap baris dalam pegangan file, misalnya kita dapat mengimpor semua baris ke dalam array.
Implementasikan pembuatan file import.txt dengan isi sebagai berikut:
$kucing impor.txt 123
Baca import.txt dan masukkan setiap baris ke dalam array @lines:
Dengan mengeksekusi program di atas, hasil keluarannya adalah:
123
Fungsi xgetc mengembalikan satu karakter dari FILEHANDLE yang ditentukan, atau STDIN jika tidak ditentukan:
dapatkancFILEHANDLEdapatkan
Jika terjadi kesalahan, atau pegangan file berada di akhir file, undef dikembalikan.
Fungsi baca digunakan untuk membaca informasi dari pegangan file buffer.
Fungsi ini digunakan untuk membaca data biner dari suatu file.
membaca FILEHANDLE, SCALAR, PANJANG, OFFSETread FILEHANDLE, SCALAR, PANJANG
Deskripsi parameter:
FILEHANDLE: Pegangan file, digunakan untuk menyimpan pengidentifikasi file unik.
SCALAR: Menyimpan hasilnya. Jika OFFSET tidak ditentukan, data akan ditempatkan di awal SCALAR. Jika tidak, data ditempatkan setelah byte OFFSET di SCALAR.
PANJANG: Panjang konten yang dibaca.
OFFSET: mengimbangi.
Mengembalikan jumlah byte yang dibaca jika pembacaan berhasil, 0 jika akhir file tercapai, dan undef jika terjadi kesalahan.
Untuk semua fungsi yang membaca informasi dari pegangan file, fungsi penulisan utama di backend adalah print:
cetak DAFTAR FILEHANDLEcetak DAFTARcetak
Hasil eksekusi program dapat dikirim ke perangkat keluaran (STDOUT: output standar) menggunakan file handle dan fungsi print, misalnya:
cetak "Halo Dunia!n";
Dalam contoh berikut, kita akan membuka file file1.txt yang ada, membaca setiap barisnya dan menulisnya ke file file2.txt:
Dalam contoh berikut, kami mengganti nama file yang ada file1.txt menjadi file2.txt, dan direktori yang ditentukan berada di bawah /usr/codercto/test/:
#!/usr/bin/perlrename ("/usr/codercto/test/file1.txt", "/usr/codercto/test/file2.txt" );
Fungsi renames hanya menerima dua parameter dan hanya mengganti nama file yang ada.
Contoh berikut menunjukkan cara menggunakan fungsi unlink untuk menghapus file:
Anda bisa mendapatkan lokasi file menggunakan fungsi tell , dan menentukan lokasi di dalam file dengan menggunakan fungsi seek :
Fungsi tell digunakan untuk mendapatkan lokasi file:
beritahu FILEHANDLE beritahu
Jika FILEHANDLE ditentukan, fungsi ini mengembalikan posisi penunjuk file, dalam byte. Jika tidak ditentukan, mengembalikan pegangan file default yang dipilih.
Fungsi seek() membaca atau menulis file dengan menggerakkan penunjuk baca-tulis file melalui pegangan file, dan membaca dan menulis dalam byte:
cari FILEHANDLE, POSISI, DIMANA
Deskripsi parameter:
FILEHANDLE: Pegangan file, digunakan untuk menyimpan pengidentifikasi file unik.
POSISI: Menunjukkan jumlah byte yang akan dipindahkan oleh pegangan file (penunjuk posisi baca dan tulis).
WHENCE: Menunjukkan posisi awal ketika pegangan file (penunjuk posisi baca-tulis) mulai bergerak. Nilai yang mungkin adalah 0, 1, dan 2 yang menunjukkan awal file, posisi saat ini, dan akhir mengajukan masing-masing.
Contoh berikut membaca 256 byte dari awal file:
mencari DATA, 256, 0;
Operasi file Perl juga dapat menguji terlebih dahulu apakah file tersebut ada, apakah dapat dibaca dan ditulis, dll.
Kita bisa membuat file file1.txt terlebih dahulu, sebagai berikut:
$cat file1.txtwww.codercto.com
Dengan mengeksekusi program di atas, hasil keluarannya adalah:
informasi file1.txt: adalah file teks, 15 byte
Operator pengujian file ditunjukkan pada tabel berikut:
Operator | menggambarkan |
---|---|
-A | Waktu terakhir kali file diakses (satuan: hari) |
-B | Apakah ini file biner? |
-C | Waktu modifikasi node indeks file (inode) (satuan: hari) |
-M | Waktu terakhir kali file diubah (satuan: hari) |
-HAI | File dimiliki oleh UID asli |
-R | File atau direktori dapat dibaca dengan UID/GID asli |
-S | Untuk soket (soket) |
-T | Apakah itu file teks? |
-W | File atau direktori dapat ditulis dengan UID/GID asli |
-X | File atau direktori dapat dieksekusi dengan UID/GID asli |
-B | Untuk file blok khusus (blok khusus) (seperti disk yang dipasang) |
-C | Untuk file berkarakter khusus (karakter khusus) (seperti perangkat I/O) |
-D | untuk direktori |
-e | Nama file atau direktori ada |
-F | untuk file biasa |
-G | File atau direktori memiliki atribut setgid |
-k | File atau direktori memiliki kumpulan bit lengket |
-l | untuk tautan simbolik |
-Hai | File dimiliki oleh UID yang valid |
-P | File tersebut adalah pipa bernama (FIFO) |
-R | File dapat dibaca dengan UID/GID yang valid |
-S | File atau direktori ada dan bukan 0 (mengembalikan jumlah byte) |
-T | Pegangan file adalah TTY (hasil pengembalian fungsi sistem isatty(); pengujian ini tidak dapat digunakan untuk nama file) |
-kamu | File atau direktori memiliki atribut setuid |
-w | File dapat ditulis dengan UID/GID yang valid |
-X | File dapat dieksekusi dengan UID/GID yang valid |
-z | File tersebut ada dan ukurannya 0 (direktori selalu salah), baik itu file kosong. |