Variabel skalar adalah wadah satu nilai yang ditandai tanda dolar $. Topik ini membahas deklarasi dan aturan penamaan skalar, sifat satu tipe yang menyimpan angka sekaligus string, konversi otomatis di antara keduanya, serta perbedaan tanda kutip ganda dan kutip tunggal saat teks dibentuk. Setiap perilaku diperagakan dengan skrip utuh atau one-liner yang dijalankan langsung, dan keluarannya ditempel apa adanya.
Deklarasi dan penamaan#
Skalar ditandai sigil $ di depan namanya. Penugasan pertama sebaiknya berupa deklarasi dengan my, karena use strict menolak variabel yang muncul tanpa deklarasi. Tanda sama dengan memberi nilai pada variabel, dan nilai itu boleh berupa angka maupun string tanpa perlu penanda tipe apa pun. Deklarasi dengan my membuat variabelnya hanya terlihat pada blok tempat variabel itu ditulis, sehingga nama yang sama pada blok lain tidak saling menimpa.
Nama skalar mengikuti aturan yang pendek:
- Diawali tanda
$diikuti huruf atau garis bawah, dan tidak boleh diawali angka. - Selebihnya boleh berisi huruf, angka, dan garis bawah.
- Huruf besar dan huruf kecil dibedakan, sehingga
$Totaldan$totaladalah dua variabel yang berbeda. - Pilih nama yang mendeskripsikan isinya, misalnya
$nilai_ujian, karena nama seperti$ntidak menyisakan petunjuk apa pun saat skrip dibaca ulang.
Contoh berikut mendeklarasikan dua skalar dan mencetak keduanya sekaligus:
use strict;
use warnings;
my $nilai_ujian = 80;
my $nama_siswa = "Budi";
print "$nama_siswa: $nilai_ujian\n";Budi: 80Interpolasi $nama_siswa dan $nilai_ujian di dalam string kutip ganda sudah digunakan di sini, sedangkan mekanismenya dijelaskan pada bagian akhir topik. Yang perlu dicatat, satu baris print mampu melekatkan dua skalar ke dalam teks tanpa operator penyambungan, cukup dengan menuliskan nama keduanya di dalam string.
Satu variabel untuk angka dan string#
Perl tidak memisahkan tipe angka dan tipe teks pada variabel. Satu skalar dapat menyimpan 42, lalu diganti menjadi teks empat puluh dua, tanpa deklarasi ulang dan tanpa fungsi konversi. Keputusan tentang cara membaca sebuah nilai ditentukan oleh operator yang menggunakannya, bukan oleh asal nilainya.
Operator penjumlahan + menuntut angka pada kedua operannya, sedangkan operator penyambungan . menuntut teks. Skrip berikut menggunakan keduanya pada nilai yang saling bertukar peran:
#!/usr/bin/env perl
use strict;
use warnings;
# string dipakai dalam konteks angka
my $jumlah = "3" + 4;
print "Hasil penjumlahan: $jumlah\n";
# angka dipakai dalam konteks string
my $laporan = 42 . " unit terjual";
print "Hasil penyambungan: $laporan\n";Hasil penjumlahan: 7
Hasil penyambungan: 42 unit terjualString "3" dikonversi menjadi angka 3 karena berada di samping operator +, sehingga penjumlahannya menghasilkan 7. Sebaliknya, angka 42 diubah menjadi teks "42" karena berada di samping operator titik, sehingga penyambungannya menghasilkan 42 unit terjual. Tidak ada fungsi konversi yang dipanggil dan tidak ada peringatan yang muncul, karena kedua konversi itu utuh dan tidak kehilangan informasi.
Konversi memicu peringatan ketika teksnya bukan angka utuh. Perintah berikut menjumlahkan string "3satu" dengan 4:
# string yang bukan angka utuh dipakai dalam penjumlahan
perl -e 'use strict; use warnings; my $hasil = "3satu" + 4; print "Hasil: $hasil\n"' 2>&1Argument "3satu" isn't numeric in addition (+) at -e line 1.
Hasil: 7Peringatan Argument "3satu" isn't numeric menyatakan bahwa teks tersebut tidak utuh sebagai angka. Perl tetap melanjutkan program dan menggunakan bagian angka yang tertulis di awal teksnya, sehingga hasilnya tetap 7. String yang tidak berawalan angka sama sekali dikonversi menjadi 0 dengan peringatan yang sama, dan kecenderungan melanjutkan inilah yang membuat peringatan tidak boleh diabaikan.
Interpolasi kutip ganda dan kutip tunggal#
String ditulis di antara tanda kutip ganda atau kutip tunggal, dan keduanya tidak setara. Kutip ganda menginterpolasi nama variabel yang ditulis di dalamnya, artinya nama itu diganti dengan nilai skalarnya. Kutip ganda juga mengenali notasi pelarian (escape) seperti \n untuk baris baru. Kutip tunggal menuliskan seluruh isinya apa adanya, tanpa interpolasi dan tanpa pelarian.
Skrip berikut mencetak kalimat yang sama dua kali dengan jenis kutip yang berbeda:
#!/usr/bin/env perl
use strict;
use warnings;
my $buah = "jeruk";
print "Satu keranjang penuh $buah\n";
print 'Satu keranjang penuh $buah\n';Satu keranjang penuh jeruk
Satu keranjang penuh $buah\nBaris pertama keluaran menunjukkan $buah diganti menjadi jeruk, dan \n berubah menjadi baris baru sehingga keluaran berakhir dengan rapi. Baris kedua menunjukkan isi kutip tunggal yang tersalin mentah, lengkap dengan tanda dolar dan dua karakter \n yang tak tersentuh. Kedua baris ini berasal dari kalimat sumber yang identik, sehingga perbedaannya sepenuhnya disebabkan oleh jenis kutipnya.
Pilih kutip tunggal ketika isinya memang teks yang tidak berubah, misalnya jalur berkas atau pola yang memuat tanda dolar. Pilih kutip ganda ketika nilai variabel perlu dilekatkan ke dalam teks. Penyambungan dengan operator titik selalu tersedia sebagai alternatif, misalnya 'Satu keranjang penuh ' . $buah, dan hasilnya identik dengan interpolasi.
Kesalahan umum#
- Variabel digunakan tanpa dideklarasikan terlebih dahulu. Di bawah
use strict, nama yang belum dideklarasikan menghentikan program dengan errorGlobal symbol "$nama" requires explicit package name. Deklarasikan setiap variabel denganmypada penugasan pertamanya. - Kutip tunggal digunakan dengan harapan teksnya terinterpolasi. String
'Halo, $nama'tetap tercetak berisi$namakarena kutip tunggal tidak mengganti nama variabel dengan nilainya. Gunakan kutip ganda, atau sambungkan teks dan variabel dengan operator titik. - Teks masukan langsung dihitung sebagai angka. String yang bukan angka utuh memicu peringatan
Argument ... isn't numeric, dan teks yang tidak berawalan angka dikonversi menjadi0, sehingga hitungan rusak tanpa menghentikan program. Periksa isi teksnya terlebih dahulu sebelum teks itu masuk ke operasi angka.
Ringkasan#
- Skalar ditandai
$, menyimpan satu nilai berupa angka atau string tanpa deklarasi tipe, dan dideklarasikan denganmydi bawahuse strict. - Konversi angka dan string dilakukan otomatis menurut operator, sedangkan teks yang bukan angka utuh memicu peringatan
Argument ... isn't numeric. - Kutip ganda menginterpolasi variabel serta mengenali
\n, sedangkan kutip tunggal menulis seluruh karakter apa adanya. - Nama skalar peka huruf besar-kecil, diawali huruf atau garis bawah setelah tanda
$, dan sebaiknya mendeskripsikan isinya.
Referensi#
- perldata — Perl documentation — Definisi skalar, aturan penamaan variabel, dan konversi angka-string.
- perlop — Perl documentation — Operator penjumlahan dan penyambungan serta semantik tanda kutip ganda dan kutip tunggal.