Skalar

Variabel skalar bertanda $ yang menyimpan angka dan string dalam satu tipe, beserta aturan penamaan dan konversinya.

Daftar isi

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 $Total dan $total adalah dua variabel yang berbeda.
  • Pilih nama yang mendeskripsikan isinya, misalnya $nilai_ujian, karena nama seperti $n tidak menyisakan petunjuk apa pun saat skrip dibaca ulang.

Contoh berikut mendeklarasikan dua skalar dan mencetak keduanya sekaligus:

perl Contoh: deklarasi dua skalar dengan my
use strict;
use warnings;

my $nilai_ujian = 80;
my $nama_siswa  = "Budi";
print "$nama_siswa: $nilai_ujian\n";
text Keluaran
Budi: 80

Interpolasi $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:

perl konversi.pl
#!/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";
text Keluaran
Hasil penjumlahan: 7
Hasil penyambungan: 42 unit terjual

String "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:

bash
# string yang bukan angka utuh dipakai dalam penjumlahan
perl -e 'use strict; use warnings; my $hasil = "3satu" + 4; print "Hasil: $hasil\n"' 2>&1
text Keluaran
Argument "3satu" isn't numeric in addition (+) at -e line 1.
Hasil: 7

Peringatan 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:

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

my $buah = "jeruk";

print "Satu keranjang penuh $buah\n";
print 'Satu keranjang penuh $buah\n';
text Keluaran
Satu keranjang penuh jeruk
Satu keranjang penuh $buah\n

Baris 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#

  1. Variabel digunakan tanpa dideklarasikan terlebih dahulu. Di bawah use strict, nama yang belum dideklarasikan menghentikan program dengan error Global symbol "$nama" requires explicit package name. Deklarasikan setiap variabel dengan my pada penugasan pertamanya.
  2. Kutip tunggal digunakan dengan harapan teksnya terinterpolasi. String 'Halo, $nama' tetap tercetak berisi $nama karena kutip tunggal tidak mengganti nama variabel dengan nilainya. Gunakan kutip ganda, atau sambungkan teks dan variabel dengan operator titik.
  3. Teks masukan langsung dihitung sebagai angka. String yang bukan angka utuh memicu peringatan Argument ... isn't numeric, dan teks yang tidak berawalan angka dikonversi menjadi 0, 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 dengan my di bawah use 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#