Perl menyertakan ratusan modul inti pada instalasi standarnya, sehingga banyak pekerjaan lazim tidak memerlukan penginstalan apa pun. Topik ini membahas tiga modul inti yang paling sering digunakan pada skrip sehari-hari, yaitu File::Basename untuk memilah jalur berkas, Data::Dumper untuk menampilkan struktur data, dan Getopt::Long untuk membaca opsi command line. Setiap modul diperagakan dengan skrip utuh beserta keluaran aslinya. Ketiganya berjalan tanpa penginstalan karena ikut terpasang bersama Perl 5.40.
Memilah jalur berkas dengan File::Basename#
Jalur berkas menggabungkan direktori dan nama berkas dalam satu string, padahal banyak skrip membutuhkan keduanya secara terpisah, misalnya untuk menaruh laporan di direktori yang sama dengan berkas masukannya. Modul File::Basename memilah jalur menjadi komponen-komponennya sesuai konvensi sistem operasi tempat Perl berjalan. Fungsi basename mengembalikan komponen terakhir dari jalur, dirname mengembalikan bagian direktorinya, sedangkan fileparse memisahkan nama berkas, direktori, dan ekstensi sekaligus dalam satu panggilan.
use strict;
use warnings;
use File::Basename;
my $jalur = '/home/budi/laporan/q3.txt';
print 'basename: ', basename($jalur), "\n";
print 'dirname : ', dirname($jalur), "\n";
my ($nama, $direktori, $ekstensi) = fileparse($jalur, qr/\.[^.]+$/);
print 'fileparse nama : ', $nama, "\n";
print 'fileparse direktori: ', $direktori, "\n";
print 'fileparse ekstensi : ', $ekstensi, "\n";basename: q3.txt
dirname : /home/budi/laporan
fileparse nama : q3
fileparse direktori: /home/budi/laporan/
fileparse ekstensi : .txtKeluaran di atas memperlihatkan perbedaan yang perlu diingat, yaitu dirname menghilangkan garis miring di akhir, sedangkan fileparse mengembalikan direktori dengan garis miring penutupnya. Argumen kedua pada fileparse berupa ekspresi reguler yang mendefinisikan bentuk ekstensi, sehingga q3.txt terpilah menjadi nama q3 dan ekstensi .txt. Tanpa argumen tersebut, seluruh q3.txt dianggap sebagai nama berkasnya. Kombinasi ketiga fungsi ini cukup untuk hampir semua kebutuhan pemilahan jalur pada skrip pengolahan berkas.
Dua fungsi pertama tetap memberikan jawaban yang wajar untuk jalur tanpa bagian direktori. Pada jalur laporan.txt, fungsi basename mengembalikan laporan.txt dan dirname mengembalikan titik, yaitu penanda direktori kerja saat ini. Sifat ini membuat skrip tetap bekerja ketika argumennya berupa nama berkas polos, dan penyusunan ulang jalur dari hasil pemilahannya cukup dilakukan dengan penyambungan yang memperhatikan garis miring penutup pada bagian direktori.
Menampilkan struktur data dengan Data::Dumper#
Struktur data bersarang sulit diperiksa dengan print biasa karena hash dan array yang dirujuk oleh referensi tidak diurai secara otomatis. Modul Data::Dumper menyediakan fungsi Dumper yang merender struktur data apa pun, termasuk hash bersarang dan array berisi referensi, sebagai teks berupa kode Perl. Fungsi ini menjadi alat utama untuk mengamati isi variabel ketika program menghasilkan keluaran yang tidak sesuai dugaan.
use strict;
use warnings;
use Data::Dumper;
my %nilai_ujian = (
Citra => { matematika => 92, fisika => 87 },
Budi => { matematika => 78, fisika => 85 },
);
$Data::Dumper::Sortkeys = 1; # kunci dicetak terurut agar keluaran stabil
$Data::Dumper::Indent = 1; # lekukan yang ringkas
print Dumper(\%nilai_ujian);$VAR1 = {
'Budi' => {
'fisika' => 85,
'matematika' => 78
},
'Citra' => {
'fisika' => 87,
'matematika' => 92
}
};Dumper menerima referensi, bukan struktur datanya secara langsung, sehingga hash diteruskan sebagai Dumper(\%nilai_ujian). Label $VAR1 pada keluaran adalah nama acuan bawaan untuk struktur pertama yang dicetak. Variabel paket $Data::Dumper::Sortkeys mengurutkan kunci hash sebelum pencetakan, dan pengaturan ini penting karena hash tidak memiliki urutan tertentu, sehingga tanpa pengurutan urutan cetaknya dapat berbeda antar eksekusi. Keluaran Dumper juga berupa kode Perl yang sah, sehingga struktur yang sama dapat dibangun kembali dari teks tersebut apabila diperlukan.
Beberapa variabel pengatur lainnya sering digunakan bersama Sortkeys. Variabel $Data::Dumper::Terse yang diberi nilai 1 menghilangkan label $VAR1 sehingga keluarannya hanya berisi struktur datanya, sedangkan $Data::Dumper::Maxdepth membatasi kedalaman struktur yang dicetak untuk data yang sangat bersarang. Pengaturan ditulis sebelum pemanggilan Dumper karena nilainya berlaku pada seluruh pencetakan berikutnya.
Membaca opsi command line dengan Getopt::Long#
Skrip command line lazim menerima opsi berformat --nama nilai, dan penguraian @ARGV secara manual rawan keliru ketika formatnya beragam. Modul Getopt::Long menyediakan fungsi GetOptions yang mengurai opsi menurut spesifikasi yang dideklarasikan, misalnya nama=s untuk opsi bertipe string dan angka=i untuk opsi bertipe bilangan bulat. Fungsi ini mengembalikan nilai true apabila seluruh opsi berhasil diurai dan false apabila ada yang tidak sesuai.
use strict;
use warnings;
use Getopt::Long;
# @ARGV diisi skrip sendiri agar contoh dapat dijalankan tanpa argumen nyata
@ARGV = ('--nama', 'Citra', '--angka', 24);
my ($nama, $angka);
GetOptions('nama=s' => \$nama, 'angka=i' => \$angka)
or die "Opsi tidak valid\n";
print "Nama : $nama\n";
print "Angka: $angka\n";Nama : Citra
Angka: 24Pada contoh di atas, @ARGV diisi skrip sendiri agar contohnya berdiri sendiri, sedangkan pada skrip nyata isi @ARGV berasal dari argumen yang diketik pengguna pada command line. Setiap spesifikasi opsi dipasangkan dengan referensi ke variabel tujuan, sehingga nilai yang diurai langsung tersimpan di variabel tersebut. Apabila opsi tidak sesuai spesifikasinya, misalnya --angka diberi nilai bukan bilangan, GetOptions menampilkan pesan peringatan dan mengembalikan nilai false, sehingga percabangan or die setelahnya menghentikan program dengan pesan singkat.
Spesifikasi opsi mendukung bentuk yang lebih lengkap daripada dua contoh di atas. Opsi tanpa tipe di akhir spesifikasinya berlaku sebagai sakelar boolean, misalnya verbose menghasilkan nilai true ketika --verbose diberikan, sedangkan bentuk nama|n=s menyediakan alias pendek sehingga --nama Citra dan -n Citra sama-sama sah. Nilai default ditempatkan pada variabel tujuan sebelum pemanggilan GetOptions, sehingga opsi yang tidak diberikan pengguna tetap bernilai wajar.
Kesalahan umum#
Tiga kekeliruan berikut paling sering muncul ketika ketiga modul di atas baru digunakan.
- Menyalin struktur data ke
Dumpertanpa referensinya. PemanggilanDumper(%nilai_ujian)memperlakukan hash sebagai daftar nilai yang terpisah dan menghasilkan keluaran berantakan. Teruskan referensinya, yaituDumper(\%nilai_ujian). - Mengabaikan nilai kembalian
GetOptions. Program terus berjalan dengan variabel tujuan yang masihundefdan memunculkan peringatanUse of uninitialized value. Akhiri pemanggilan denganor dieatau tangani kegagalannya secara eksplisit. - Menyambung jalur tanpa memperhatikan garis miring.
fileparsemenyertakan garis miring penutup pada bagian direktori, sedangkandirnametidak, sehingga penyambungan yang tidak diuji menghasilkan jalur dengan garis miring ganda atau hilang.
Ketiga kekeliruan tersebut terdeteksi cepat dari pesan yang muncul di layar karena pesannya menunjuk penyebabnya secara langsung. Peringatan Use of uninitialized value selalu menunjuk baris yang menggunakan variabel yang belum bernilai, sedangkan keluaran Dumper yang berantakan beres begitu referensinya dipasang dengan benar. Jalur yang keliru akibat penyambungan garis miring terlihat jelas ketika jalurnya dicetak sebelum digunakan.
Ringkasan#
- File::Basename memilah jalur berkas melalui
basename,dirname, danfileparsesesuai konvensi sistem operasinya. - Data::Dumper merender struktur data apa pun sebagai kode Perl, dan
$Data::Dumper::Sortkeysmenjaga keluarannya tetap terurut serta stabil. - Getopt::Long mengurai opsi command line melalui
GetOptionsbeserta spesifikasi tipe, dan nilai kembaliannya wajib diperiksa.
Referensi#
- File::Basename — Perldoc — Dokumentasi resmi modul pemilah jalur berkas beserta ketiga fungsinya.
- Data::Dumper — Perldoc — Dokumentasi resmi modul perender struktur data beserta variabel pengaturnya.
- Getopt::Long — Perldoc — Dokumentasi resmi pengurai opsi command line beserta spesifikasi opsinya.