CPAN

Menginstal modul dari CPAN dengan cpanm, mencari modul di metacpan.org, dan menilai kualitasnya sebelum digunakan.

Daftar isi

Modul inti hanya mencakup sebagian kecil kebutuhan pemrograman, sedangkan komunitas Perl telah mengumpulkan ribuan modul lainnya pada arsip publik bernama CPAN. Topik ini membahas cara menginstal modul dari CPAN menggunakan cpanm, mencari modul yang tepat melalui metacpan.org, dan menilai kualitas sebuah modul sebelum menggunakannya. Setelah membacanya, proses menemukan, menilai, dan memasang modul pihak ketiga dapat dilakukan dengan langkah yang terarah.

Mengenal CPAN#

CPAN (Comprehensive Perl Archive Network) adalah arsip distribusi modul Perl yang menjadi pusat ekosistem bahasa ini sejak tahun 1995. Isinya berupa puluhan ribu distribusi, yaitu paket berisi kode modul, dokumentasi, rangkaian pengujian, dan daftar dependensinya. Seluruh arsip tersedia di cpan.org dan disalin ke banyak server cermin di berbagai negara, sehingga pengunduhan dapat dilakukan dari lokasi terdekat.

Setiap distribusi di CPAN dikelola penulisnya masing-masing dan dirilis dengan nomor versi yang bertambah setiap kali pembaruannya diterbitkan. Modul yang tidak termasuk instalasi inti Perl dipasang dari arsip ini, dan begitu pula versi terbaru dari modul inti apabila tersedia. Arsip ini juga menyediakan klien interaktif bawaan bernama cpan, tetapi topik ini menggunakan cpanm karena pemasangannya lebih ringkas, sebagaimana dibahas pada bagian akhir.

Setiap distribusi diunggah penulisnya ke server PAUSE (Perl Authors Upload Server), lalu diindeks agar dapat dicari dan diunduh. Berkas distribusinya berupa arsip tar.gz yang berisi kode modul, dokumentasinya, dan skrip pemasangan, sehingga pemasangnya dapat membangun serta mengujinya secara seragam tanpa memeriksa isi direktorinya secara manual. Skrip pemasangannya dapat berupa Makefile.PL maupun Build.PL, dan keduanya dipanggil oleh cpanm secara otomatis.

Mencari modul di MetaCPAN#

MetaCPAN di metacpan.org adalah mesin pencari sekaligus antarmuka utama untuk menjelajahi CPAN. Pencarian dengan satu kata kunci menampilkan daftar distribusi yang cocok beserta nama penulisnya, sedangkan setiap halaman distribusi menampilkan dokumentasinya dalam bentuk yang telah dirender, daftar versi beserta tanggal rilisnya, dan tautan ke repositori sumbernya bila ada. Pencarian juga dapat dipersempit pada nama modul, nama penulis, atau bagian tertentu dari dokumentasinya.

Halaman distribusi di MetaCPAN juga memuat dua informasi yang berguna untuk menilai sebuah modul. Grafik dependensi memperlihatkan modul lain yang dibutuhkannya, sedangkan daftar reverse dependencies memperlihatkan berapa banyak distribusi lain yang bergantung padanya. Sebagai contoh, pencarian kata JSON mengembalikan beberapa kandidat seperti JSON::PP dan JSON::XS, dan perbandingan halaman keduanya langsung memperlihatkan perbedaan status rilis serta penggunaannya.

MetaCPAN juga menampilkan jumlah favorit yang diberikan pengguna terdaftar, ditulis sebagai tanda tambah di samping nama distribusinya, bersama statistik unduhannya. Angka-angka ini bukan penilaian resmi, tetapi memberi gambaran seberapa luas modul tersebut digunakan komunitas. Membaca dokumentasi terlebih dahulu sebelum memasang tetap menjadi urutan kerja yang benar karena modul yang salah pilih tetap menyita waktu penginstalan.

Menilai kualitas modul#

Modul di CPAN ditulis oleh siapa saja, sehingga kualitasnya beragam dan perlu dinilai sebelum digunakan. Modul yang terpasang menjadi bagian dari program, dan bug pada modul yang tidak dirawat lagi harus diperbaiki sendiri oleh penggunanya. Penilaian dilakukan dari halaman distribusinya di MetaCPAN dengan lima patokan berikut.

  • Tanggal rilis terbaru menunjukkan apakah modul masih dirawat, dan modul yang terakhir diperbarui bertahun-tahun lalu menuntut kehati-hatian ekstra.
  • Dokumentasi yang lengkap, terutama bagian contoh penggunaannya, menandakan penulis yang teliti.
  • Jumlah dan kedalaman dependensi menentukan seberapa banyak modul lain yang ikut terpasang, dan rantai dependensi yang panjang membebani pemeliharaan.
  • Laporan pengujian lintas versi Perl dan lintas sistem operasi menunjukkan portabilitas kode tersebut.
  • Jumlah reverse dependencies mencerminkan tingkat kepercayaan komunitas, karena distribusi lain jarang bergantung pada modul yang bermasalah.

Tidak ada satu patokan yang menentukan sendirian, tetapi modul dengan rilis terkini, dokumentasi jelas, dan penggunaan luas merupakan pilihan yang aman untuk pekerjaan penting. Pertimbangan tambahan seperti lisensi dan kesesuaian fitur dapat disertakan sesuai kebutuhan proyek. Apabila dua kandidat sama-sama layak, modul yang termasuk instalasi inti Perl merupakan pilihan yang lebih ringan karena tidak menambah dependensi baru.

Memeriksa modul yang sudah terpasang#

Sebelum menginstal, periksa dahulu apakah modul yang dicari sudah tersedia, karena banyak lingkungan kerja sudah dilengkapi sebelumnya. Pemeriksaan dilakukan dengan mencoba memuat modul di dalam eval, sehingga kegagalan pemuatan tidak menghentikan program. Metode VERSION yang dimiliki setiap modul mengembalikan nomor versinya.

perl periksa-modul.pl
use strict;
use warnings;

my @daftar = ('Path::Tiny', 'Try::Tiny', 'JSON::PP');

for my $modul (@daftar) {
    (my $berkas = "$modul.pm") =~ s{::}{/}g;

    if (eval { require $berkas; 1 }) {
        my $versi = $modul->VERSION // 'tidak tercantum';
        print "$modul terpasang, versi $versi\n";
    }
    else {
        print "$modul belum terpasang\n";
    }
}
text Keluaran
Path::Tiny terpasang, versi 0.150
Try::Tiny terpasang, versi 0.32
JSON::PP terpasang, versi 4.16

Keluaran di atas memperlihatkan dua sumber modul yang berbeda. JSON::PP berasal dari instalasi inti Perl, sedangkan Path::Tiny dan Try::Tiny terpasang sebagai modul CPAN pada direktori pustaka lokal lingkungan ini. Pola require di dalam eval juga berguna untuk menulis skrip yang menyesuaikan dirinya dengan modul yang tersedia, misalnya memilih jalur kerja cadangan apabila modul pilihan pertamanya tidak ada.

Pola require di dalam eval mengembalikan nilai true apabila pemuatan berhasil, dan nilai itulah yang diperiksa oleh if. Apabila pemuatan gagal, eval menangkap pesan errornya dan menyimpannya pada variabel $@, sehingga pesan tersebut dapat dicetak untuk diagnosis. Substitusi s{::}{/}g pada kode di atas mengubah tanda :: menjadi pemisah direktori, karena bentuk require yang menerima variabel memperlakukan nilainya sebagai nama berkas, bukan nama package. Nilai yang dikembalikan VERSION berasal dari variabel $VERSION yang dideklarasikan di dalam modul.

Menginstal modul dengan cpanm#

cpanm, yang nama lengkapnya cpanminus, adalah penginstal modul berupa satu skrip mandiri yang mengerjakan seluruh urutan penginstalan. Perintah cpanm Nama::Modul mengunduh distribusinya dari CPAN, memeriksa dependensinya, menjalankan rangkaian pengujian, lalu memasangnya, termasuk memasang seluruh dependensi yang belum ada. Perintah berikut diterapkan pada modul Path::Tiny yang sudah terpasang di lingkungan ini.

bash
# menginstal atau memperbarui satu modul dari CPAN
cpanm Path::Tiny
text Keluaran
!
! Can't write to /usr/local/share/perl/5.40.1 and /usr/local/bin: Installing modules to /home/kal/perl5
! To turn off this warning, you have to do one of the following:
!   - run me as a root or with --sudo option (to install to /usr/local/share/perl/5.40.1 and /usr/local/bin)
!   - Configure local::lib in your existing shell to set PERL_MM_OPT etc.
!   - Install local::lib by running the following commands
!
!         cpanm --local-lib=~/perl5 local::lib && eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib)
!
Path::Tiny is up to date. (0.150)

Baris-baris berawalan tanda seru pada keluaran tersebut bukan error, melainkan pemberitahuan cpanm bahwa direktori pustaka sistem tidak dapat ditulis sehingga modul akan dipasang ke direktori local lib milik pengguna. Baris terakhirnya menunjukkan hasil sebenarnya, yaitu Path::Tiny sudah terpasang dengan versi 0.150 sehingga tidak ada pengunduhan yang dilakukan. Contoh perintah penginstalan berikut disajikan untuk pembaca dan tidak dieksekusi di lingkungan ini.

bash
# tidak-dijalankan
cpanm Try::Tiny
cpanm --local-lib=~/perl5 Try::Tiny

Urutan kerja cpanm sama untuk setiap modul. Distribusi diunduh dari CPAN, dependensinya diperiksa dan dipasang lebih dahulu, rangkaian pengujian dijalankan, dan modul baru terpasang setelah seluruh pengujian lolos. Apabila pengujian gagal, pemasangan dihentikan dan modulnya tidak masuk ke pustaka, sehingga pustaka tidak tercemar modul yang rusak.

Ringkasan#

  • CPAN adalah arsip distribusi modul Perl, dan metacpan.org menjadi mesin pencari beserta pusat dokumentasinya.
  • Kualitas modul dinilai dari tanggal rilis terbarunya, kelengkapan dokumentasi, dependensi, laporan pengujian, dan jumlah reverse dependencies.
  • cpanm mengunduh, menguji, dan memasang sebuah modul beserta seluruh dependensinya dengan satu perintah.
  • Status pemasangan sebuah modul diperiksa dengan require di dalam eval sebelum langkah penginstalan diambil.

Referensi#