Skrip pertama

Menulis dan menjalankan skrip Perl pertama dengan shebang, use strict, use warnings, dan print sebagai fondasi disiplin modern.

Daftar isi

Topik ini membahas pembuatan dan eksekusi skrip Perl pertama, mulai dari baris shebang, dua pragma disiplin modern, hingga pernyataan print. Setiap baris pada skrip diperkenalkan beserta perannya, kemudian skrip dijalankan melalui command line dengan dua cara yang berbeda. Setelah seluruh contoh diikuti, struktur minimal sebuah program Perl yang benar dapat ditulis ulang dari nol tanpa contoh rujukan.

Skrip Perl adalah berkas teks biasa, dan kebiasaan umum memberinya akhiran .pl. Tidak ada tahap kompilasi terpisah, karena interpreter bernama perl membaca berkas tersebut dan mengeksekusinya langsung. Pragma (pragma), yaitu direktif yang mengubah perilaku interpreter untuk seluruh berkas, ditulis pada baris-baris awal dan menjadi bagian dari disiplin modern. Buat berkas bernama halo.pl pada direktori kerja, kemudian isi dengan struktur berikut.

Setiap baris skrip memiliki peran yang tetap dan tidak boleh dilewati:

  1. Baris #!/usr/bin/env perl disebut shebang, yaitu penanda interpreter yang dibaca sistem operasi ketika berkas dieksekusi secara langsung.
  2. use strict; menyalakan mode ketat yang mewajibkan setiap variabel dideklarasikan terlebih dahulu dengan my.
  3. use warnings; meminta interpreter menampilkan peringatan atas operasi yang meragukan tanpa menghentikan program.
  4. print mengirim argumennya ke keluaran standar, dan setiap pernyataan ditutup dengan titik koma.

Notasi \n di dalam string kutip ganda berarti satu karakter baris baru, sehingga teks yang dicetak sesudahnya jatuh ke baris tersendiri. Tulis berkasnya dengan isi persis sebagai berikut.

perl halo.pl
#!/usr/bin/env perl
use strict;
use warnings;

print "Halo, dunia dari Perl!\n";
print "Ini skrip pertama yang dijalankan lewat command line.\n";
text Keluaran
Halo, dunia dari Perl!
Ini skrip pertama yang dijalankan lewat command line.

Menjalankan skrip#

Interpreter perl dipanggil dengan menyertakan nama berkas skrip setelah perintahnya. Jalankan perintah berikut dari direktori tempat halo.pl berada, satu perintah pada satu baris:

bash
# menjalankan skrip melalui interpreter perl
perl halo.pl 2>&1
text Keluaran
Halo, dunia dari Perl!
Ini skrip pertama yang dijalankan lewat command line.

Pada cara pertama, program yang dijalankan adalah perl, sedangkan halo.pl berperan sebagai argumen yang berisi nama berkasnya. Interpreter membaca berkas tersebut, menerjemahkan seluruh isinya di dalam memori, kemudian mengeksekusinya. Baris shebang diperlakukan sebagai komentar biasa karena tanda pagar memang berarti komentar bagi Perl, sehingga cara ini tetap berhasil meskipun shebang ditulis salah atau hilang.

Cara kedua memanfaatkan baris shebang. Berkasnya diberi izin eksekusi dengan chmod, kemudian dijalankan langsung seperti program biasa:

bash
# memberi izin eksekusi pada berkas skrip
chmod +x halo.pl
# menjalankan skrip secara langsung lewat baris shebang
./halo.pl
text Keluaran
Halo, dunia dari Perl!
Ini skrip pertama yang dijalankan lewat command line.

Perintah chmod +x menambahkan izin eksekusi pada berkas, dan proses ini dilakukan satu kali untuk setiap berkas yang baru dibuat. Apabila izin itu belum ada, perintah ./halo.pl ditolak dengan pesan error Permission denied. Awalan ./ menyatakan direktori kerja saat ini karena direktori kerja umumnya tidak termasuk dalam daftar direktori yang ditelusuri saat pencarian program.

Kedua cara menghasilkan keluaran yang sama, tetapi mekanismenya berbeda. Perintah perl halo.pl menyertakan nama interpreter secara eksplisit, sehingga baris shebang tidak ikut diproses. Perintah ./halo.pl menyerahkan berkasnya kepada sistem operasi, yang membaca baris shebang lalu memanggil perl melalui program env. Karena itu skrip yang dieksekusi langsung wajib memuat baris shebang, sedangkan kebiasaan modern menuliskannya pada setiap skrip tanpa kecuali. Program env mencari perl pada daftar direktori PATH, sehingga skrip yang sama tetap berjalan pada sistem yang meletakkan interpreter di direktori berbeda.

Disiplin dari use strict dan use warnings#

Dua baris use di awal skrip bukan formalitas kosong. use strict mengubah deklarasi yang terlewat menjadi error kompilasi, sehingga program tidak berjalan sebelum variabelnya dideklarasikan dengan my. use warnings menyalakan peringatan atas operasi yang meragukan, misalnya penggunaan nilai yang belum terisi. Keduanya membebankan biaya yang tidak terasa dan menghemat waktu penelusuran yang besar.

Perbedaannya diamati dengan salah ketik yang disengaja. Perintah berikut menyimpan teks pada $nama tetapi mencetak $namaa, tanpa salah satu pragma pun aktif:

bash
# salah ketik nama variabel tanpa disiplin apa pun
perl -e 'my $nama = "Ali"; print "Halo, $namaa\n"' 2>&1
text Keluaran
Halo, 

Program selesai tanpa satu pun pesan, padahal sapaan yang tercetak kehilangan namanya. Perl memperlakukan $namaa sebagai variabel lain yang memang belum terisi, dan tata bahasanya sah. Kesalahan seperti ini baru ketahuan dari keluaran yang janggal, dan letaknya sulit ditemukan pada program yang panjang.

Baris berikut mengaktifkan use warnings pada kode yang sama persis:

bash
# salah ketik yang sama setelah use warnings dinyalakan
perl -e 'use warnings; my $nama = "Ali"; print "Halo, $namaa\n"' 2>&1
text Keluaran
Name "main::namaa" used only once: possible typo at -e line 1.
Use of uninitialized value $namaa in concatenation (.) or string at -e line 1.
Halo, 

Peringatan pertama menyatakan nama $namaa hanya digunakan satu kali, pola yang lazim menandai salah ketik. Peringatan kedua menyatakan nilainya belum diinisialisasi ketika teks disambung. Program tetap berjalan sampai selesai, sehingga peringatan menuntut dibaca, bukan sekadar dinyalakan.

Tingkat berikutnya adalah use strict, yang mengubah kesalahan tersebut menjadi error:

bash
# salah ketik yang sama setelah use strict dinyalakan
perl -e 'use strict; use warnings; my $nama = "Ali"; print "Halo, $namaa\n"' 2>&1
text Keluaran
Global symbol "$namaa" requires explicit package name (did you forget to declare "my $namaa"?) at -e line 1.
Execution of -e aborted due to compilation errors.

Kali ini program bahkan tidak mulai dijalankan. Interpreter menolak seluruh berkas karena ada nama yang tidak terdeklarasi, dan letaknya dilaporkan lengkap dengan nomor barisnya. Kesalahan ketik terdeteksi sebelum program sempat menghasilkan keluaran yang keliru. Inilah alasan kedua pragma ditulis pada setiap skrip Perl modern tanpa kecuali.

Kesalahan umum#

  1. Skrip dijalankan dengan ./halo.pl sebelum izin eksekusinya diberikan. Sistem menolak perintahnya dengan pesan error Permission denied, dan pesan ini muncul bukan karena isi skripnya keliru. Berikan izin eksekusi dengan chmod +x halo.pl, atau jalankan skripnya melalui interpreter dengan perintah perl halo.pl.
  2. Contoh Perl lama disalin tanpa kedua pragma. Program yang sama berjalan, tetapi salah ketik variabel dan operasi yang meragukan lolos tanpa satu pun pesan, sehingga keluaran yang janggal baru disadari kemudian. Pastikan use strict; dan use warnings; berada di awal berkas sebelum contoh lama digunakan.
  3. Titik koma lupa ditulis di akhir pernyataan. Interpreter menghentikan program dengan error syntax error lengkap dengan nomor barisnya, dan letak yang dilaporkan kadang berada satu baris setelah titik koma yang hilang. Periksa baris yang dilaporkan beserta baris tepat sebelumnya.

Ringkasan#

  • Skrip Perl adalah berkas teks berakhiran .pl yang dijalankan dengan perintah perl nama-berkas.pl, atau dieksekusi langsung melalui shebang setelah izin eksekusinya diberikan.
  • Baris #!/usr/bin/env perl menunjuk interpreter yang digunakan sistem operasi ketika berkas dijalankan secara langsung.
  • use strict mewajibkan deklarasi my dan mengubah salah ketik variabel menjadi error kompilasi, sedangkan use warnings menampilkan peringatan atas operasi yang meragukan.
  • print mengirim argumennya ke keluaran standar, dan setiap pernyataan ditutup dengan titik koma.

Referensi#