Perl - Panduan Cepat

Perl adalah bahasa pemrograman tujuan umum yang awalnya dikembangkan untuk manipulasi teks dan sekarang digunakan untuk berbagai tugas termasuk administrasi sistem, pengembangan web, pemrograman jaringan, pengembangan GUI, dan banyak lagi.

Apa itu Perl?

  • Perl adalah bahasa pemrograman lintas platform yang stabil.

  • Meskipun Perl tidak secara resmi merupakan akronim tetapi hanya sedikit orang yang menggunakannya Practical Extraction and Report Language.

  • Ini digunakan untuk proyek-proyek penting misi di sektor publik dan swasta.

  • Perl adalah perangkat lunak Sumber Terbuka , berlisensi di bawah Lisensi Artistik , atau Lisensi Publik Umum GNU (GPL) .

  • Perl diciptakan oleh Larry Wall.

  • Perl 1.0 dirilis ke alt.comp.sources usenet pada tahun 1987.

  • Pada saat menulis tutorial ini, versi perl terbaru adalah 5.16.2.

  • Perl terdaftar di Oxford English Dictionary .

PC Magazine mengumumkan Perl sebagai finalis 1998 Technical Excellence Award dalam kategori Development Tool.

Fitur Perl

  • Perl menggunakan fitur terbaik dari bahasa lain, seperti C, awk, sed, sh, dan BASIC, antara lain.

  • Antarmuka integrasi database Perls DBI mendukung database pihak ketiga termasuk Oracle, Sybase, Postgres, MySQL dan lainnya.

  • Perl bekerja dengan HTML, XML, dan bahasa mark-up lainnya.

  • Perl mendukung Unicode.

  • Perl sesuai dengan Y2K.

  • Perl mendukung pemrograman prosedural dan berorientasi objek.

  • Perl berinteraksi dengan library C / C ++ eksternal melalui XS atau SWIG.

  • Perl bisa dikembangkan. Ada lebih dari 20.000 modul pihak ketiga yang tersedia dari Comprehensive Perl Archive Network ( CPAN ).

  • Interpreter Perl dapat disematkan ke sistem lain.

Perl dan Web

  • Perl dulunya adalah bahasa pemrograman web paling populer karena kemampuan manipulasi teksnya dan siklus pengembangan yang cepat.

  • Perl secara luas dikenal sebagai " lakban Internet ".

  • Perl dapat menangani data Web terenkripsi, termasuk transaksi e-commerce.

  • Perl dapat disematkan ke server web untuk mempercepat pemrosesan sebanyak 2000%.

  • Perl mod_perl memungkinkan web server Apache untuk menanamkan juru Perl.

  • Paket DBI Perl membuat integrasi database web menjadi mudah.

Perl diinterpretasikan

Perl adalah bahasa yang diinterpretasikan, yang berarti bahwa kode Anda dapat dijalankan apa adanya, tanpa tahap kompilasi yang membuat program yang tidak dapat dieksekusi portabel.

Kompiler tradisional mengubah program menjadi bahasa mesin. Saat Anda menjalankan program Perl, program tersebut pertama kali dikompilasi menjadi kode byte, yang kemudian diubah (saat program dijalankan) menjadi instruksi mesin. Jadi tidak persis sama dengan shell, atau Tcl, yang manastrictly ditafsirkan tanpa representasi perantara.

Ini juga tidak seperti kebanyakan versi C atau C ++, yang dikompilasi langsung ke dalam format yang bergantung pada mesin. Itu ada di antara keduanya, bersama dengan file Python dan awk dan Emacs .elc.

Sebelum kita mulai menulis program Perl kita, mari kita pahami bagaimana mengatur lingkungan Perl kita. Perl tersedia di berbagai macam platform -

  • Unix (Solaris, Linux, FreeBSD, AIX, HP / UX, SunOS, IRIX dll.)
  • Menangkan 9x / NT / 2000 /
  • WinCE
  • Macintosh (PPC, 68K)
  • Solaris (x86, SPARC)
  • OpenVMS
  • Alpha (7.2 dan lebih baru)
  • Symbian
  • Debian GNU / kFreeBSD
  • MirOS BSD
  • Dan masih banyak lagi...

Ini kemungkinan besar sistem Anda akan memasang perl di dalamnya. Coba saja memberikan perintah berikut di $ prompt -

$perl -v

Jika Anda telah menginstal perl di mesin Anda, maka Anda akan mendapatkan pesan sebagai berikut -

This is perl 5, version 16, subversion 2 (v5.16.2) built for i686-linux

Copyright 1987-2012, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

Jika Anda belum menginstal perl, lanjutkan ke bagian berikutnya.

Mendapatkan Instalasi Perl

Kode sumber terbaru dan terkini, binari, dokumentasi, berita, dll. Tersedia di situs resmi Perl.

Perl Official Website - https://www.perl.org/

Anda dapat mengunduh dokumentasi Perl dari situs berikut.

Perl Documentation Website - https://perldoc.perl.org

Instal Perl

Distribusi Perl tersedia untuk berbagai macam platform. Anda hanya perlu mengunduh kode biner yang berlaku untuk platform Anda dan menginstal Perl.

Jika kode biner untuk platform Anda tidak tersedia, Anda memerlukan compiler C untuk mengompilasi kode sumber secara manual. Mengompilasi kode sumber menawarkan lebih banyak fleksibilitas dalam hal pilihan fitur yang Anda perlukan dalam instalasi Anda.

Berikut ini gambaran umum singkat tentang menginstal Perl pada berbagai platform.

Instalasi Unix dan Linux

Berikut adalah langkah-langkah sederhana untuk menginstal Perl pada mesin Unix / Linux.

  • Buka browser web dan buka https://www.perl.org/get.html.

  • Ikuti tautan untuk mengunduh kode sumber zip yang tersedia untuk Unix / Linux.

  • Unduh perl-5.x.y.tar.gz mengajukan dan mengeluarkan perintah berikut di $ prompt.

$tar -xzf perl-5.x.y.tar.gz
$cd perl-5.x.y $./Configure -de
$make $make test
$make install

NOTE - Di sini $ adalah prompt Unix tempat Anda mengetik perintah Anda, jadi pastikan Anda tidak mengetik $ saat mengetik perintah yang disebutkan di atas.

Ini akan menginstal Perl di lokasi standar / usr / local / bin dan library-nya diinstal di / usr / local / lib / perlXX , di mana XX adalah versi Perl yang Anda gunakan.

Diperlukan beberapa saat untuk mengompilasi kode sumber setelah menerbitkan makeperintah. Setelah instalasi selesai, Anda dapat mengeluarkannyaperl -vperintah di $ prompt untuk memeriksa instalasi perl. Jika semuanya baik-baik saja, maka akan muncul pesan seperti yang telah kami tampilkan di atas.

Instalasi Windows

Berikut adalah langkah-langkah untuk menginstal Perl pada mesin Windows.

  • Ikuti link untuk instalasi Strawberry Perl di Windows http://strawberryperl.com

  • Unduh instalasi versi 32-bit atau 64-bit.

  • Jalankan file yang diunduh dengan mengklik dua kali di Windows Explorer. Ini menampilkan wizard instalasi Perl, yang sangat mudah digunakan. Terima saja pengaturan default, tunggu hingga penginstalan selesai, dan Anda siap untuk memulai!

Instalasi Macintosh

Untuk membuat versi Perl Anda sendiri, Anda memerlukan 'make', yang merupakan bagian dari alat pengembang Apel yang biasanya disertakan dengan DVD penginstalan Mac OS. Anda tidak memerlukan Xcode versi terbaru (yang sekarang dikenakan biaya) untuk menginstal make.

Berikut adalah langkah-langkah sederhana untuk menginstal Perl pada mesin Mac OS X.

  • Buka browser web dan buka https://www.perl.org/get.html.

  • Ikuti tautan untuk mengunduh kode sumber zip yang tersedia untuk Mac OS X.

  • Unduh perl-5.x.y.tar.gz mengajukan dan mengeluarkan perintah berikut di $ prompt.

$tar -xzf perl-5.x.y.tar.gz
$cd perl-5.x.y $./Configure -de
$make $make test
$make install

Ini akan menginstal Perl di lokasi standar / usr / local / bin dan library-nya diinstal di / usr / local / lib / perlXX , di mana XX adalah versi Perl yang Anda gunakan.

Menjalankan Perl

Berikut ini adalah berbagai cara untuk memulai Perl.

Penerjemah Interaktif

Kamu dapat masuk perldan langsung mulai membuat kode di penerjemah interaktif dengan memulainya dari baris perintah. Anda dapat melakukan ini dari Unix, DOS, atau sistem lainnya, yang menyediakan interpreter baris perintah atau jendela shell.

$perl  -e <perl code>           # Unix/Linux

or 

C:>perl -e <perl code>          # Windows/DOS

Berikut adalah daftar semua opsi baris perintah yang tersedia -

Sr.No. Opsi & Deskripsi
1

-d[:debugger]

Menjalankan program di bawah debugger

2

-Idirectory

Menentukan @ INC / # termasuk direktori

3

-T

Mengaktifkan pemeriksaan tainting

4

-t

Mengaktifkan peringatan tainting

5

-U

Memungkinkan operasi yang tidak aman

6

-w

Mengaktifkan banyak peringatan berguna

7

-W

Mengaktifkan semua peringatan

8

-X

Menonaktifkan semua peringatan

9

-e program

Menjalankan skrip Perl yang dikirim sebagai program

10

file

Menjalankan skrip Perl dari file tertentu

Script dari Command-line

Skrip Perl adalah file teks, yang menyimpan kode perl di dalamnya dan dapat dieksekusi pada baris perintah dengan memanggil interpreter pada aplikasi Anda, seperti berikut -

$perl  script.pl          # Unix/Linux

or 

C:>perl script.pl         # Windows/DOS

Lingkungan Pembangunan Terpadu

Anda juga dapat menjalankan Perl dari lingkungan antarmuka pengguna grafis (GUI). Yang Anda butuhkan hanyalah aplikasi GUI di sistem Anda yang mendukung Perl. Anda dapat mengunduh Padre, Perl IDE . Anda juga dapat menggunakan Eclipse Plugin EPIC - Perl Editor dan IDE untuk Eclipse jika Anda terbiasa dengan Eclipse.

Sebelum melanjutkan ke bab berikutnya, pastikan lingkungan Anda sudah diatur dengan benar dan berfungsi dengan baik. Jika Anda tidak dapat mengatur lingkungan dengan benar maka Anda dapat mengambil bantuan dari administrator sistem Anda.

Semua contoh yang diberikan di bab-bab berikutnya telah dijalankan dengan versi v5.16.2 yang tersedia di varian CentOS Linux.

Perl meminjam sintaks dan konsep dari banyak bahasa: awk, sed, C, Bourne Shell, Smalltalk, Lisp dan bahkan bahasa Inggris. Namun, ada beberapa perbedaan yang pasti antara bahasa-bahasa tersebut. Bab ini dirancang untuk mempercepat Anda memahami sintaks yang diharapkan di Perl.

Program Perl terdiri dari urutan deklarasi dan pernyataan, yang dijalankan dari atas ke bawah. Loop, subrutin, dan struktur kontrol lainnya memungkinkan Anda untuk melompat-lompat di dalam kode. Setiap pernyataan sederhana harus diakhiri dengan titik koma (;).

Perl adalah bahasa bentuk bebas: Anda dapat memformat dan memasukkannya sesuka Anda. Spasi putih berfungsi sebagian besar untuk memisahkan token, tidak seperti bahasa seperti Python yang merupakan bagian penting dari sintaks, atau Fortran yang tidak material.

Program Perl Pertama

Pemrograman Mode Interaktif

Anda dapat menggunakan interpreter Perl dengan -eopsi di baris perintah, yang memungkinkan Anda menjalankan pernyataan Perl dari baris perintah. Mari kita coba sesuatu di $ prompt sebagai berikut -

$perl -e 'print "Hello World\n"'

Eksekusi ini akan menghasilkan hasil sebagai berikut -

Hello, world

Pemrograman Mode Skrip

Dengan asumsi Anda sudah berada di $ prompt, mari buka file teks hello.pl menggunakan editor vi atau vim dan letakkan baris berikut di dalam file Anda.

#!/usr/bin/perl

# This will print "Hello, World"
print "Hello, world\n";

Sini /usr/bin/perlsebenarnya adalah biner penerjemah perl. Sebelum Anda menjalankan skrip Anda, pastikan untuk mengubah mode file skrip dan memberikan hak eksekusi, umumnya pengaturan 0755 berfungsi dengan sempurna dan akhirnya Anda menjalankan skrip di atas sebagai berikut -

$chmod 0755 hello.pl $./hello.pl

Eksekusi ini akan menghasilkan hasil sebagai berikut -

Hello, world

Anda dapat menggunakan tanda kurung untuk argumen fungsi atau menghilangkannya sesuai selera pribadi Anda. Mereka hanya diperlukan sesekali untuk mengklarifikasi masalah yang diutamakan. Dua pernyataan berikut menghasilkan hasil yang sama.

print("Hello, world\n");
print "Hello, world\n";

Ekstensi File Perl

Skrip Perl dapat dibuat di dalam program editor teks sederhana biasa. Ada beberapa program yang tersedia untuk setiap jenis platform. Ada banyak program yang dirancang untuk pemrogram yang tersedia untuk diunduh di web.

Sebagai konvensi Perl, file Perl harus disimpan dengan ekstensi file .pl atau .PL agar dapat dikenali sebagai skrip Perl yang berfungsi. Nama file dapat berisi angka, simbol, dan huruf tetapi tidak boleh berisi spasi. Gunakan garis bawah (_) di tempat spasi.

Komentar di Perl

Komentar dalam bahasa pemrograman apa pun adalah teman pengembang. Komentar dapat digunakan untuk membuat program ramah pengguna dan mereka hanya dilewati oleh penerjemah tanpa mempengaruhi fungsionalitas kode. Misalnya, dalam program di atas, baris yang dimulai dengan hash# adalah sebuah komentar.

Cukup ucapkan komentar di Perl mulai dengan simbol hash dan jalankan hingga akhir baris -

# This is a comment in perl

Baris yang dimulai dengan = diinterpretasikan sebagai awal dari bagian dokumentasi tersemat (pod), dan semua baris berikutnya hingga next = cut diabaikan oleh kompilator. Berikut contohnya -

#!/usr/bin/perl

# This is a single line comment
print "Hello, world\n";

=begin comment
This is all part of multiline comment.
You can use as many lines as you like
These comments will be ignored by the 
compiler until the next =cut is encountered.
=cut

Ini akan menghasilkan hasil sebagai berikut -

Hello, world

Whitespaces di Perl

Program Perl tidak peduli dengan spasi. Program berikut berfungsi dengan baik -

#!/usr/bin/perl

print       "Hello, world\n";

Tetapi jika spasi berada di dalam string yang dikutip, maka spasi akan dicetak apa adanya. Misalnya -

#!/usr/bin/perl

# This would print with a line break in the middle
print "Hello
          world\n";

Ini akan menghasilkan hasil sebagai berikut -

Hello
          world

Semua jenis spasi putih seperti spasi, tab, baris baru, dll. Setara untuk interpreter jika digunakan di luar tanda kutip. Sebuah baris yang hanya berisi spasi, kemungkinan dengan sebuah komentar, dikenal sebagai baris kosong, dan Perl mengabaikannya sama sekali.

Kutipan Tunggal dan Ganda di Perl

Anda dapat menggunakan tanda kutip ganda atau tanda kutip tunggal di sekitar string literal sebagai berikut -

#!/usr/bin/perl

print "Hello, world\n";
print 'Hello, world\n';

Ini akan menghasilkan hasil sebagai berikut -

Hello, world
Hello, world\n$

Ada perbedaan penting dalam tanda kutip tunggal dan ganda. Hanya tanda kutip gandainterpolatevariabel dan karakter khusus seperti baris baru \ n, sedangkan tanda kutip tunggal tidak menginterpolasi variabel atau karakter khusus. Periksa contoh di bawah ini di mana kami menggunakan $ a sebagai variabel untuk menyimpan nilai dan kemudian mencetak nilai itu -

#!/usr/bin/perl

$a = 10; print "Value of a = $a\n";
print 'Value of a = $a\n';

Ini akan menghasilkan hasil sebagai berikut -

Value of a = 10
Value of a = $a\n$

Dokumen "Di Sini"

Anda dapat menyimpan atau mencetak teks multiline dengan sangat nyaman. Bahkan Anda dapat menggunakan variabel di dalam dokumen "di sini". Di bawah ini adalah sintaks sederhana, periksa dengan seksama tidak boleh ada spasi antara << dan pengenal.

Pengenal bisa berupa kata-kata biasa atau teks kutipan seperti yang kami gunakan EOF di bawah ini. Jika pengenal dikutip, jenis kutipan yang Anda gunakan menentukan perlakuan teks di dalam dokumen ini, seperti dalam kutipan biasa. Pengenal tanpa tanda kutip berfungsi seperti tanda kutip ganda.

#!/usr/bin/perl

$a = 10;
$var = <<"EOF"; This is the syntax for here document and it will continue until it encounters a EOF in the first line. This is case of double quote so variable value will be interpolated. For example value of a = $a
EOF
print "$var\n"; $var = <<'EOF';
This is case of single quote so variable value will be 
interpolated. For example value of a = $a EOF print "$var\n";

Ini akan menghasilkan hasil sebagai berikut -

This is the syntax for here document and it will continue
until it encounters a EOF in the first line.
This is case of double quote so variable value will be
interpolated. For example value of a = 10

This is case of single quote so variable value will be
interpolated. For example value of a = $a

Karakter Lolos

Perl menggunakan karakter backslash (\) untuk menghindari semua jenis karakter yang mungkin mengganggu kode kita. Mari kita ambil satu contoh di mana kita ingin mencetak tanda kutip ganda dan tanda $ -

#!/usr/bin/perl

$result = "This is \"number\""; print "$result\n";
print "\$result\n";

Ini akan menghasilkan hasil sebagai berikut -

This is "number"
$result

Pengidentifikasi Perl

Pengenal Perl adalah nama yang digunakan untuk mengidentifikasi variabel, fungsi, kelas, modul, atau objek lain. Nama variabel Perl dimulai dengan $, @ atau% diikuti dengan nol atau lebih huruf, garis bawah, dan angka (0 hingga 9).

Perl tidak mengizinkan karakter tanda baca seperti @, $, dan% dalam pengenal. Perl adalah acase sensitivebahasa pemrograman. Jadi$Manpower dan $manpower adalah dua pengenal berbeda di Perl.

Perl adalah bahasa yang diketik secara longgar dan tidak perlu menentukan tipe untuk data Anda saat menggunakan dalam program Anda. Interpreter Perl akan memilih tipe berdasarkan konteks datanya sendiri.

Perl memiliki tiga tipe data dasar: skalar, larik skalar, dan hash skalar, juga dikenal sebagai larik asosiatif. Berikut adalah sedikit detail tentang tipe data tersebut.

Sr.No. Jenis & Deskripsi
1

Scalar

Skalar adalah variabel sederhana. Mereka diawali dengan tanda dolar ($). Skalar bisa berupa angka, string, atau referensi. Referensi sebenarnya adalah alamat variabel, yang akan kita lihat di bab selanjutnya.

2

Arrays

Array adalah daftar skalar yang Anda akses dengan indeks numerik, yang dimulai dengan 0. Array tersebut diawali dengan tanda "at" (@).

3

Hashes

Hash adalah kumpulan pasangan kunci / nilai yang tidak berurutan yang Anda akses menggunakan kunci sebagai langganan. Mereka diawali dengan tanda persen (%).

Literal Numerik

Perl menyimpan semua angka secara internal sebagai integer bertanda tangan atau nilai floating-point presisi ganda. Literal numerik ditentukan dalam salah satu format floating-point atau integer berikut -

Tipe Nilai
Bilangan bulat 1234
Integer negatif -100
Titik apung 2000
Notasi ilmiah 16.12E14
Heksadesimal 0xffff
Oktal 0577

String Literals

String adalah urutan karakter. Biasanya berupa nilai alfanumerik yang dipisahkan oleh tanda kutip tunggal (') atau ganda ("). Cara kerjanya seperti tanda kutip shell UNIX di mana Anda dapat menggunakan string yang dikutip tunggal dan string yang dikutip ganda.

Literal string yang dikutip ganda memungkinkan interpolasi variabel, dan string yang dikutip tunggal tidak. Ada karakter tertentu yang diawali dengan garis miring ke belakang, memiliki arti khusus dan digunakan untuk merepresentasikan seperti baris baru (\ n) atau tab (\ t).

Anda dapat menyematkan baris baru atau salah satu dari urutan Escape berikut secara langsung di string yang dikutip ganda Anda -

Urutan pelarian Berarti
\\ Garis miring terbalik
\ ' Kutipan tunggal
\ " Kutipan ganda
\Sebuah Peringatan atau bel
\ b Menghapus
\ f Bentuk pakan
\ n Garis baru
\ r Kereta kembali
\ t Tab horizontal
\ v Tab vertikal
\ 0nn Membuat angka berformat Oktal
\ xnn Membuat bilangan berformat Hexideciamal
\ cX Mengontrol karakter, x dapat berupa karakter apa saja
\ u Memaksakan karakter berikutnya ke huruf besar
\ l Memaksakan karakter berikutnya ke huruf kecil
\ U Memaksa semua karakter berikut menjadi huruf besar
\ L Memaksa semua karakter berikut menjadi huruf kecil
\ Q Garis miring terbalik semua karakter non-alfanumerik berikut
\ E Akhiri \ U, \ L, atau \ Q

Contoh

Mari kita lihat lagi bagaimana string berperilaku dengan kutipan tunggal dan kutipan ganda. Di sini kita akan menggunakan pelarian string yang disebutkan dalam tabel di atas dan akan menggunakan variabel skalar untuk menetapkan nilai string.

#!/usr/bin/perl

# This is case of interpolation.
$str = "Welcome to \ntutorialspoint.com!";
print "$str\n"; # This is case of non-interpolation. $str = 'Welcome to \ntutorialspoint.com!';
print "$str\n"; # Only W will become upper case. $str = "\uwelcome to tutorialspoint.com!";
print "$str\n"; # Whole line will become capital. $str = "\UWelcome to tutorialspoint.com!";
print "$str\n"; # A portion of line will become capital. $str = "Welcome to \Ututorialspoint\E.com!"; 
print "$str\n"; # Backsalash non alpha-numeric including spaces. $str = "\QWelcome to tutorialspoint's family";
print "$str\n";

Ini akan menghasilkan hasil sebagai berikut -

Welcome to
tutorialspoint.com!
Welcome to \ntutorialspoint.com!
Welcome to tutorialspoint.com!
WELCOME TO TUTORIALSPOINT.COM!
Welcome to TUTORIALSPOINT.com!
Welcome\ to\ tutorialspoint\'s\ family

Variabel adalah lokasi memori yang dipesan untuk menyimpan nilai. Ini berarti bahwa ketika Anda membuat variabel, Anda menyediakan beberapa ruang di memori.

Berdasarkan tipe data variabel, interpreter mengalokasikan memori dan memutuskan apa yang dapat disimpan dalam memori yang dicadangkan. Oleh karena itu, dengan menetapkan tipe data yang berbeda ke variabel, Anda dapat menyimpan bilangan bulat, desimal, atau string dalam variabel ini.

Kami telah mempelajari bahwa Perl memiliki tiga tipe data dasar berikut -

  • Scalars
  • Arrays
  • Hashes

Karenanya, kita akan menggunakan tiga tipe variabel di Perl. SEBUAHscalarvariabel akan didahului oleh tanda dolar ($) dan dapat menyimpan angka, string, atau referensi. Sebuaharrayvariabel akan diawali dengan tanda @ dan itu akan menyimpan daftar skalar yang diurutkan. Akhirnya,Hash variabel akan diawali dengan tanda% dan akan digunakan untuk menyimpan kumpulan pasangan kunci / nilai.

Perl memelihara setiap tipe variabel dalam namespace terpisah. Jadi Anda bisa, tanpa takut konflik, menggunakan nama yang sama untuk variabel skalar, array, atau hash. Ini berarti $ foo dan @foo adalah dua variabel yang berbeda.

Membuat Variabel

Variabel Perl tidak harus secara eksplisit dideklarasikan untuk menyimpan ruang memori. Deklarasi terjadi secara otomatis saat Anda menetapkan nilai ke variabel. Tanda sama dengan (=) digunakan untuk menetapkan nilai ke variabel.

Perhatikan bahwa ini wajib untuk mendeklarasikan variabel sebelum kita menggunakannya jika kita menggunakannya use strict pernyataan dalam program kami.

Operan di sebelah kiri operator = adalah nama variabel, dan operan di sebelah kanan operator = adalah nilai yang disimpan dalam variabel. Misalnya -

$age = 25;             # An integer assignment
$name = "John Paul"; # A string $salary = 1445.50;     # A floating point

Di sini 25, "John Paul" dan 1445.50 adalah nilai yang ditetapkan ke variabel $ age , $ name dan $ gaji . Secara singkat kita akan melihat bagaimana kita dapat menetapkan nilai ke array dan hash.

Variabel Skalar

Skalar adalah satu unit data. Data itu mungkin berupa bilangan bulat, floating point, karakter, string, paragraf, atau seluruh halaman web. Hanya mengatakan itu bisa jadi apa saja, tapi hanya satu hal.

Berikut adalah contoh sederhana menggunakan variabel skalar -

#!/usr/bin/perl

$age = 25;             # An integer assignment
$name = "John Paul"; # A string $salary = 1445.50;     # A floating point

print "Age = $age\n"; print "Name = $name\n";
print "Salary = $salary\n";

Ini akan menghasilkan hasil sebagai berikut -

Age = 25
Name = John Paul
Salary = 1445.5

Variabel Array

Array adalah variabel yang menyimpan daftar nilai skalar yang diurutkan. Variabel array diawali dengan tanda "at" (@). Untuk merujuk ke satu elemen array, Anda akan menggunakan tanda dolar ($) dengan nama variabel diikuti dengan indeks elemen dalam tanda kurung siku.

Berikut adalah contoh sederhana menggunakan variabel array -

#!/usr/bin/perl

@ages = (25, 30, 40);             
@names = ("John Paul", "Lisa", "Kumar");

print "\$ages[0] = $ages[0]\n";
print "\$ages[1] = $ages[1]\n";
print "\$ages[2] = $ages[2]\n";
print "\$names[0] = $names[0]\n";
print "\$names[1] = $names[1]\n";
print "\$names[2] = $names[2]\n";

Di sini kami menggunakan tanda escape (\) sebelum tanda $ hanya untuk mencetaknya. Perl lain akan memahaminya sebagai variabel dan akan mencetak nilainya. Saat dijalankan, ini akan menghasilkan hasil sebagai berikut -

$ages[0] = 25
$ages[1] = 30 $ages[2] = 40
$names[0] = John Paul $names[1] = Lisa
$names[2] = Kumar

Variabel Hash

Hash adalah satu set key/valuepasangan. Variabel hash diawali dengan tanda persen (%). Untuk merujuk ke satu elemen hash, Anda akan menggunakan nama variabel hash diikuti dengan "kunci" yang terkait dengan nilai dalam tanda kurung kurawal.

Berikut adalah contoh sederhana menggunakan variabel hash -

#!/usr/bin/perl

%data = ('John Paul', 45, 'Lisa', 30, 'Kumar', 40);

print "\$data{'John Paul'} = $data{'John Paul'}\n"; print "\$data{'Lisa'} = $data{'Lisa'}\n"; print "\$data{'Kumar'} = $data{'Kumar'}\n";

Ini akan menghasilkan hasil sebagai berikut -

$data{'John Paul'} = 45
$data{'Lisa'} = 30 $data{'Kumar'} = 40

Variabel Konteks

Perl memperlakukan variabel yang sama secara berbeda berdasarkan Konteks, yaitu situasi di mana variabel digunakan. Mari kita periksa contoh berikut -

#!/usr/bin/perl

@names = ('John Paul', 'Lisa', 'Kumar');

@copy = @names;
$size = @names; print "Given names are : @copy\n"; print "Number of names are : $size\n";

Ini akan menghasilkan hasil sebagai berikut -

Given names are : John Paul Lisa Kumar
Number of names are : 3

Di sini @names adalah larik, yang telah digunakan dalam dua konteks berbeda. Pertama kita menyalinnya ke larik lain, misalnya daftar, sehingga mengembalikan semua elemen dengan asumsi bahwa konteks adalah konteks daftar. Selanjutnya kami menggunakan larik yang sama dan mencoba menyimpan larik ini dalam skalar, jadi dalam hal ini ia mengembalikan hanya sejumlah elemen dalam larik ini dengan asumsi bahwa konteksnya adalah konteks skalar. Tabel berikut mencantumkan berbagai konteks -

Sr.No. Konteks & Deskripsi
1

Scalar

Penetapan ke variabel skalar mengevaluasi sisi kanan dalam konteks skalar.

2

List

Penetapan ke array atau hash mengevaluasi sisi kanan dalam konteks daftar.

3

Boolean

Konteks Boolean hanyalah tempat di mana ekspresi dievaluasi untuk melihat apakah itu benar atau salah.

4

Void

Konteks ini tidak hanya tidak peduli apa nilai pengembaliannya, bahkan tidak menginginkan nilai pengembalian.

5

Interpolative

Konteks ini hanya terjadi di dalam tanda kutip, atau hal-hal yang berfungsi seperti tanda kutip.

Skalar adalah satu unit data. Data itu mungkin berupa bilangan bulat, floating point, karakter, string, paragraf, atau seluruh halaman web.

Berikut adalah contoh sederhana menggunakan variabel skalar -

#!/usr/bin/perl

$age = 25; # An integer assignment $name = "John Paul";   # A string 
$salary = 1445.50; # A floating point print "Age = $age\n";
print "Name = $name\n"; print "Salary = $salary\n";

Ini akan menghasilkan hasil sebagai berikut -

Age = 25
Name = John Paul
Salary = 1445.5

Skalar Numerik

Skalar paling sering berupa angka atau string. Contoh berikut menunjukkan penggunaan berbagai jenis skalar numerik -

#!/usr/bin/perl

$integer = 200; $negative = -300;
$floating = 200.340; $bigfloat = -1.2E-23;

# 377 octal, same as 255 decimal
$octal = 0377; # FF hex, also 255 decimal $hexa = 0xff;

print "integer = $integer\n"; print "negative = $negative\n";
print "floating = $floating\n"; print "bigfloat = $bigfloat\n";
print "octal = $octal\n"; print "hexa = $hexa\n";

Ini akan menghasilkan hasil sebagai berikut -

integer = 200
negative = -300
floating = 200.34
bigfloat = -1.2e-23
octal = 255
hexa = 255

String Scalars

Contoh berikut menunjukkan penggunaan berbagai jenis skalar string. Perhatikan perbedaan antara string yang dikutip tunggal dan string yang dikutip ganda -

#!/usr/bin/perl

$var = "This is string scalar!"; $quote = 'I m inside single quote - $var'; $double = "This is inside single quote - $var"; $escape = "This example of escape -\tHello, World!";

print "var = $var\n"; print "quote = $quote\n";
print "double = $double\n"; print "escape = $escape\n";

Ini akan menghasilkan hasil sebagai berikut -

var = This is string scalar!
quote = I m inside single quote - $var
double = This is inside single quote - This is string scalar!
escape = This example of escape -       Hello, World

Operasi Skalar

Anda akan melihat detail dari berbagai operator yang tersedia di Perl dalam bab terpisah, tetapi di sini kita akan membuat daftar beberapa operasi numerik dan string.

#!/usr/bin/perl

$str = "hello" . "world";       # Concatenates strings.
$num = 5 + 10; # adds two numbers. $mul = 4 * 5;                   # multiplies two numbers.
$mix = $str . $num; # concatenates string and number. print "str = $str\n";
print "num = $num\n"; print "mix = $mix\n";

Ini akan menghasilkan hasil sebagai berikut -

str = helloworld
num = 15
mul = 20
mix = helloworld15

String Multiline

Jika Anda ingin memperkenalkan string multiline ke dalam program Anda, Anda dapat menggunakan tanda kutip tunggal standar seperti di bawah ini -

#!/usr/bin/perl

$string = 'This is a multiline string'; print "$string\n";

Ini akan menghasilkan hasil sebagai berikut -

This is
a multiline
string

Anda dapat menggunakan sintaks dokumen "di sini" juga untuk menyimpan atau mencetak multilines seperti di bawah ini -

#!/usr/bin/perl

print <<EOF;
This is
a multiline
string
EOF

Ini juga akan menghasilkan hasil yang sama -

This is
a multiline
string

V-String

Literal dalam bentuk v1.20.300.4000 diurai sebagai string yang terdiri dari karakter dengan ordinal yang ditentukan. Bentuk ini dikenal sebagai v-string.

V-string menyediakan alternatif dan cara yang lebih mudah dibaca untuk membuat string, daripada menggunakan bentuk interpolasi "\ x {1} \ x {14} \ x {12c} \ x {fa0}".

Mereka adalah literal apa pun yang dimulai dengan av dan diikuti oleh satu atau beberapa elemen yang dipisahkan titik. Misalnya -

#!/usr/bin/perl

$smile = v9786; $foo    = v102.111.111;
$martin = v77.97.114.116.105.110; print "smile = $smile\n";
print "foo = $foo\n"; print "martin = $martin\n";

Ini juga akan menghasilkan hasil yang sama -

smile = ☺
foo = foo
martin = Martin
Wide character in print at main.pl line 7.

Literal Khusus

Sejauh ini Anda harus memiliki perasaan tentang skalar string dan operasi penggabungan dan interpolasi. Jadi izinkan saya memberi tahu Anda tentang tiga literal khusus __FILE__, __LINE__, dan __PACKAGE__ mewakili nama file saat ini, nomor baris, dan nama paket pada saat itu dalam program Anda.

Mereka hanya dapat digunakan sebagai token terpisah dan tidak akan diinterpolasi menjadi string. Lihat contoh di bawah ini -

#!/usr/bin/perl

print "File name ". __FILE__ . "\n";
print "Line Number " . __LINE__ ."\n";
print "Package " . __PACKAGE__ ."\n";

# they can not be interpolated
print "__FILE__ __LINE__ __PACKAGE__\n";

Ini akan menghasilkan hasil sebagai berikut -

File name hello.pl
Line Number 4
Package main
__FILE__ __LINE__ __PACKAGE__

Array adalah variabel yang menyimpan daftar nilai skalar yang diurutkan. Variabel array diawali dengan tanda "at" (@). Untuk merujuk ke satu elemen array, Anda akan menggunakan tanda dolar ($) dengan nama variabel diikuti dengan indeks elemen dalam tanda kurung siku.

Berikut adalah contoh sederhana menggunakan variabel array -

#!/usr/bin/perl

@ages = (25, 30, 40);             
@names = ("John Paul", "Lisa", "Kumar");

print "\$ages[0] = $ages[0]\n"; print "\$ages[1] = $ages[1]\n"; print "\$ages[2] = $ages[2]\n"; print "\$names[0] = $names[0]\n"; print "\$names[1] = $names[1]\n"; print "\$names[2] = $names[2]\n";

Di sini kita telah menggunakan tanda escape (\) sebelum tanda $ hanya untuk mencetaknya. Perl lain akan memahaminya sebagai variabel dan akan mencetak nilainya. Saat dijalankan, ini akan menghasilkan hasil sebagai berikut -

$ages[0] = 25 $ages[1] = 30
$ages[2] = 40 $names[0] = John Paul
$names[1] = Lisa $names[2] = Kumar

Di Perl, istilah List dan Array sering digunakan seolah-olah keduanya dapat dipertukarkan. Tetapi daftarnya adalah datanya, dan arraynya adalah variabelnya.

Pembuatan Array

Variabel array diawali dengan tanda @ dan diisi menggunakan salah satu tanda kurung atau operator qw. Misalnya -

@array = (1, 2, 'Hello');
@array = qw/This is an array/;

Baris kedua menggunakan operator qw //, yang mengembalikan daftar string, memisahkan string yang dipisahkan dengan spasi. Dalam contoh ini, ini mengarah ke array empat elemen; elemen pertama adalah 'ini' dan terakhir (keempat) adalah 'array'. Ini berarti Anda dapat menggunakan baris yang berbeda sebagai berikut -

@days = qw/Monday
Tuesday
...
Sunday/;

Anda juga dapat mengisi array dengan menetapkan setiap nilai secara individual sebagai berikut -

$array[0] = 'Monday'; ... $array[6] = 'Sunday';

Mengakses Elemen Array

Saat mengakses elemen individu dari larik, Anda harus mengawali variabel dengan tanda dolar ($) dan kemudian menambahkan indeks elemen dalam tanda kurung siku setelah nama variabel. Misalnya -

#!/usr/bin/perl

@days = qw/Mon Tue Wed Thu Fri Sat Sun/;

print "$days[0]\n";
print "$days[1]\n"; print "$days[2]\n";
print "$days[6]\n"; print "$days[-1]\n";
print "$days[-7]\n";

Ini akan menghasilkan hasil sebagai berikut -

Mon
Tue
Wed
Sun
Sun
Mon

Indeks array dimulai dari nol, jadi untuk mengakses elemen pertama Anda perlu memberi 0 sebagai indeks. Anda juga dapat memberikan indeks negatif, dalam hal ini Anda memilih elemen dari akhir, bukan awal, dari larik. Ini berarti sebagai berikut -

print $days[-1]; # outputs Sun
print $days[-7]; # outputs Mon

Array Nomor Urutan

Perl menawarkan jalan pintas untuk angka dan huruf berurutan. Daripada mengetik setiap elemen saat menghitung sampai 100 misalnya, kita dapat melakukan sesuatu seperti berikut -

#!/usr/bin/perl

@var_10 = (1..10);
@var_20 = (10..20);
@var_abc = (a..z);

print "@var_10\n";   # Prints number from 1 to 10
print "@var_20\n";   # Prints number from 10 to 20
print "@var_abc\n";  # Prints number from a to z

Di sini titik ganda (..) dipanggil range operator. Ini akan menghasilkan hasil sebagai berikut -

1 2 3 4 5 6 7 8 9 10
10 11 12 13 14 15 16 17 18 19 20
a b c d e f g h i j k l m n o p q r s t u v w x y z

Ukuran Array

Ukuran array dapat ditentukan menggunakan konteks skalar pada array - nilai yang dikembalikan adalah jumlah elemen dalam array -

@array = (1,2,3);
print "Size: ",scalar @array,"\n";

Nilai yang dikembalikan akan selalu menjadi ukuran fisik array, bukan jumlah elemen yang valid. Anda dapat mendemonstrasikan ini, dan perbedaan antara skalar @array dan $ # array, menggunakan fragmen ini adalah sebagai berikut -

#!/usr/bin/perl

@array = (1,2,3);
$array[50] = 4; $size = @array;
$max_index = $#array;

print "Size:  $size\n"; print "Max Index: $max_index\n";

Ini akan menghasilkan hasil sebagai berikut -

Size: 51
Max Index: 50

Hanya ada empat elemen dalam larik yang berisi informasi, tetapi larik memiliki panjang 51 elemen, dengan indeks tertinggi 50.

Menambah dan Menghapus Elemen di Array

Perl menyediakan sejumlah fungsi yang berguna untuk menambah dan menghapus elemen dalam sebuah array. Anda mungkin memiliki pertanyaan apa itu fungsi? Sejauh ini Anda telah menggunakanprintberfungsi untuk mencetak berbagai nilai. Demikian pula terdapat berbagai fungsi lain atau kadang disebut sub-rutinitas, yang dapat digunakan untuk berbagai fungsi lainnya.

Sr.No. Jenis & Deskripsi
1

push @ARRAY, LIST

Mendorong nilai daftar ke akhir larik.

2

pop @ARRAY

Muncul dan mengembalikan nilai terakhir dari larik.

3

shift @ARRAY

Menggeser nilai pertama dari larik dan mengembalikannya, memperpendek larik sebesar 1 dan memindahkan semuanya ke bawah.

4

unshift @ARRAY, LIST

Menambahkan daftar ke depan larik, dan mengembalikan jumlah elemen di larik baru.

#!/usr/bin/perl

# create a simple array
@coins = ("Quarter","Dime","Nickel");
print "1. \@coins  = @coins\n";

# add one element at the end of the array
push(@coins, "Penny");
print "2. \@coins  = @coins\n";

# add one element at the beginning of the array
unshift(@coins, "Dollar");
print "3. \@coins  = @coins\n";

# remove one element from the last of the array.
pop(@coins);
print "4. \@coins  = @coins\n";

# remove one element from the beginning of the array.
shift(@coins);
print "5. \@coins  = @coins\n";

Ini akan menghasilkan hasil sebagai berikut -

1. @coins = Quarter Dime Nickel
2. @coins = Quarter Dime Nickel Penny
3. @coins = Dollar Quarter Dime Nickel Penny
4. @coins = Dollar Quarter Dime Nickel
5. @coins = Quarter Dime Nickel

Mengiris Elemen Array

Anda juga dapat mengekstrak "irisan" dari larik - yaitu, Anda dapat memilih lebih dari satu item dari larik untuk menghasilkan larik lain.

#!/usr/bin/perl

@days = qw/Mon Tue Wed Thu Fri Sat Sun/;

@weekdays = @days[3,4,5];

print "@weekdays\n";

Ini akan menghasilkan hasil sebagai berikut -

Thu Fri Sat

Spesifikasi irisan harus memiliki daftar indeks yang valid, baik positif maupun negatif, masing-masing dipisahkan dengan koma. Untuk kecepatan, Anda juga bisa menggunakan.. operator jangkauan -

#!/usr/bin/perl

@days = qw/Mon Tue Wed Thu Fri Sat Sun/;

@weekdays = @days[3..5];

print "@weekdays\n";

Ini akan menghasilkan hasil sebagai berikut -

Thu Fri Sat

Mengganti Elemen Array

Sekarang kita akan memperkenalkan satu fungsi lagi yang disebut splice(), yang memiliki sintaks berikut -

splice @ARRAY, OFFSET [ , LENGTH [ , LIST ] ]

Fungsi ini akan menghapus elemen @ARRAY yang ditentukan oleh OFFSET dan LENGTH, dan menggantinya dengan LIST, jika ditentukan. Akhirnya, ini mengembalikan elemen yang dihapus dari larik. Berikut contohnya -

#!/usr/bin/perl

@nums = (1..20);
print "Before - @nums\n";

splice(@nums, 5, 5, 21..25); 
print "After - @nums\n";

Ini akan menghasilkan hasil sebagai berikut -

Before - 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
After - 1 2 3 4 5 21 22 23 24 25 11 12 13 14 15 16 17 18 19 20

Di sini, penggantian sebenarnya dimulai dengan angka ke-6 setelah itu lima elemen kemudian diganti dari 6 menjadi 10 dengan angka 21, 22, 23, 24 dan 25.

Ubah String menjadi Array

Mari kita lihat satu fungsi lagi yang disebut split(), yang memiliki sintaks berikut -

split [ PATTERN [ , EXPR [ , LIMIT ] ] ]

Fungsi ini membagi string menjadi array string, dan mengembalikannya. Jika LIMIT ditentukan, bagi paling banyak menjadi jumlah bidang itu. Jika PATTERN dihilangkan, pisahkan di spasi. Berikut contohnya -

#!/usr/bin/perl

# define Strings
$var_string = "Rain-Drops-On-Roses-And-Whiskers-On-Kittens"; $var_names = "Larry,David,Roger,Ken,Michael,Tom";

# transform above strings into arrays.
@string = split('-', $var_string); @names = split(',', $var_names);

print "$string[3]\n"; # This will print Roses print "$names[4]\n";   # This will print Michael

Ini akan menghasilkan hasil sebagai berikut -

Roses
Michael

Ubah Array menjadi String

Kita bisa menggunakan join()berfungsi untuk menggabungkan kembali elemen array dan membentuk satu string skalar panjang. Fungsi ini memiliki sintaks berikut -

join EXPR, LIST

Fungsi ini menggabungkan string terpisah dari LIST menjadi satu string dengan bidang yang dipisahkan oleh nilai EXPR, dan mengembalikan string tersebut. Berikut contohnya -

#!/usr/bin/perl

# define Strings
$var_string = "Rain-Drops-On-Roses-And-Whiskers-On-Kittens"; $var_names = "Larry,David,Roger,Ken,Michael,Tom";

# transform above strings into arrays.
@string = split('-', $var_string); @names = split(',', $var_names);

$string1 = join( '-', @string ); $string2 = join( ',', @names );

print "$string1\n"; print "$string2\n";

Ini akan menghasilkan hasil sebagai berikut -

Rain-Drops-On-Roses-And-Whiskers-On-Kittens
Larry,David,Roger,Ken,Michael,Tom

Menyortir Array

Itu sort()fungsi mengurutkan setiap elemen array sesuai dengan standar Numerik ASCII. Fungsi ini memiliki sintaks berikut -

sort [ SUBROUTINE ] LIST

Fungsi ini mengurutkan LIST dan mengembalikan nilai array yang diurutkan. Jika SUBROUTINE ditentukan maka logika yang ditentukan di dalam SUBTROUTINE diterapkan saat menyortir elemen.

#!/usr/bin/perl

# define an array
@foods = qw(pizza steak chicken burgers);
print "Before: @foods\n";

# sort this array
@foods = sort(@foods);
print "After: @foods\n";

Ini akan menghasilkan hasil sebagai berikut -

Before: pizza steak chicken burgers
After: burgers chicken pizza steak

Harap dicatat bahwa pengurutan dilakukan berdasarkan nilai Numerik ASCII dari kata-kata tersebut. Jadi opsi terbaik adalah pertama-tama mengubah setiap elemen array menjadi huruf kecil dan kemudian melakukan fungsi sortir.

Menggabungkan Array

Karena array hanyalah urutan nilai yang dipisahkan koma, Anda dapat menggabungkannya seperti yang ditunjukkan di bawah ini -

#!/usr/bin/perl

@numbers = (1,3,(4,5,6));

print "numbers = @numbers\n";

Ini akan menghasilkan hasil sebagai berikut -

numbers = 1 3 4 5 6

Array yang disematkan hanya menjadi bagian dari array utama seperti yang ditunjukkan di bawah ini -

#!/usr/bin/perl

@odd = (1,3,5);
@even = (2, 4, 6);

@numbers = (@odd, @even);

print "numbers = @numbers\n";

Ini akan menghasilkan hasil sebagai berikut -

numbers = 1 3 5 2 4 6

Memilih Elemen dari Daftar

Notasi daftar identik dengan array. Anda dapat mengekstrak elemen dari array dengan menambahkan tanda kurung siku ke daftar dan memberikan satu atau lebih indeks -

#!/usr/bin/perl

$var = (5,4,3,2,1)[4]; print "value of var = $var\n"

Ini akan menghasilkan hasil sebagai berikut -

value of var = 1

Demikian pula, kita dapat mengekstrak irisan, meskipun tanpa persyaratan karakter @ di depan -

#!/usr/bin/perl

@list = (5,4,3,2,1)[1..3];

print "Value of list = @list\n";

Ini akan menghasilkan hasil sebagai berikut -

Value of list = 4 3 2

Hash adalah satu set key/valuepasangan. Variabel hash diawali dengan tanda persen (%). Untuk merujuk ke satu elemen hash, Anda akan menggunakan nama variabel hash yang diawali dengan tanda "$" dan diikuti dengan "kunci" yang terkait dengan nilai dalam tanda kurung kurawal ..

Berikut adalah contoh sederhana menggunakan variabel hash -

#!/usr/bin/perl

%data = ('John Paul', 45, 'Lisa', 30, 'Kumar', 40);

print "\$data{'John Paul'} = $data{'John Paul'}\n"; print "\$data{'Lisa'} = $data{'Lisa'}\n"; print "\$data{'Kumar'} = $data{'Kumar'}\n";

Ini akan menghasilkan hasil sebagai berikut -

$data{'John Paul'} = 45
$data{'Lisa'} = 30 $data{'Kumar'} = 40

Membuat Hash

Hash dibuat dengan salah satu dari dua cara berikut. Dalam metode pertama, Anda menetapkan nilai ke kunci bernama secara satu per satu -

$data{'John Paul'} = 45; $data{'Lisa'} = 30;
$data{'Kumar'} = 40;

Dalam kasus kedua, Anda menggunakan daftar, yang diubah dengan mengambil pasangan individu dari daftar: elemen pertama dari pasangan digunakan sebagai kunci, dan yang kedua, sebagai nilainya. Misalnya -

%data = ('John Paul', 45, 'Lisa', 30, 'Kumar', 40);

Untuk kejelasan, Anda dapat menggunakan => sebagai alias untuk, untuk menunjukkan pasangan kunci / nilai sebagai berikut -

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

Berikut adalah satu varian lagi dari formulir di atas, lihatlah, di sini semua kunci telah didahului oleh tanda hubung (-) dan tidak diperlukan kutipan di sekitarnya -

%data = (-JohnPaul => 45, -Lisa => 30, -Kumar => 40);

Tetapi penting untuk dicatat bahwa ada satu kata, yaitu, tanpa spasi, kunci telah digunakan dalam bentuk pembentukan hash ini dan jika Anda membangun hash dengan cara ini maka kunci akan diakses dengan menggunakan tanda hubung hanya seperti yang ditunjukkan di bawah ini.

$val = %data{-JohnPaul}
$val = %data{-Lisa}

Mengakses Elemen Hash

Saat mengakses elemen individu dari hash, Anda harus mengawali variabel dengan tanda dolar ($) dan kemudian menambahkan kunci elemen dalam tanda kurung kurawal setelah nama variabel. Misalnya -

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

print "$data{'John Paul'}\n"; print "$data{'Lisa'}\n";
print "$data{'Kumar'}\n";

Ini akan menghasilkan hasil sebagai berikut -

45
30
40

Mengekstrak Irisan

Anda dapat mengekstrak irisan hash seperti halnya mengekstrak irisan dari array. Anda perlu menggunakan @ prefix untuk variabel untuk menyimpan nilai yang dikembalikan karena mereka akan menjadi daftar nilai -

#!/uer/bin/perl


%data = (-JohnPaul => 45, -Lisa => 30, -Kumar => 40);

@array = @data{-JohnPaul, -Lisa};

print "Array : @array\n";

Ini akan menghasilkan hasil sebagai berikut -

Array : 45 30

Mengekstrak Kunci dan Nilai

Anda bisa mendapatkan daftar semua kunci dari hash dengan menggunakan keys fungsi, yang memiliki sintaks berikut -

keys %HASH

Fungsi ini mengembalikan array dari semua kunci dari hash bernama. Berikut contohnya -

#!/usr/bin/perl 

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

@names = keys %data;

print "$names[0]\n";
print "$names[1]\n"; print "$names[2]\n";

Ini akan menghasilkan hasil sebagai berikut -

Lisa
John Paul
Kumar

Demikian pula, Anda dapat menggunakan valuesberfungsi untuk mendapatkan daftar semua nilai. Fungsi ini memiliki sintaks berikut -

values %HASH

Fungsi ini mengembalikan array normal yang terdiri dari semua nilai dari hash bernama. Berikut contohnya -

#!/usr/bin/perl 

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

@ages = values %data;

print "$ages[0]\n"; print "$ages[1]\n";
print "$ages[2]\n";

Ini akan menghasilkan hasil sebagai berikut -

30
45
40

Memeriksa Keberadaan

Jika Anda mencoba mengakses pasangan kunci / nilai dari hash yang tidak ada, biasanya Anda akan mendapatkan undefinednilai, dan jika Anda mengaktifkan peringatan, maka Anda akan mendapatkan peringatan yang dihasilkan pada waktu proses. Anda dapat menyiasatinya dengan menggunakanexists fungsi, yang mengembalikan nilai true jika kunci bernama ada, terlepas dari berapa nilainya -

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

if( exists($data{'Lisa'} ) ) {
   print "Lisa is $data{'Lisa'} years old\n";
} else {
   print "I don't know age of Lisa\n";
}

Di sini kami telah memperkenalkan pernyataan IF ... ELSE, yang akan kita pelajari di bab terpisah. Untuk saat ini Anda anggap sajaif( condition ) part akan dieksekusi hanya jika kondisi yang diberikan benar jika sebaliknya elsebagian akan dieksekusi. Jadi ketika kita menjalankan program di atas, itu menghasilkan hasil sebagai berikut karena di sini kondisi yang diberikan ada ($ data {'Lisa'} mengembalikan true -

Lisa is 30 years old

Mendapatkan Ukuran Hash

Anda bisa mendapatkan ukuran - yaitu, jumlah elemen dari hash dengan menggunakan konteks skalar pada kunci atau nilai. Cukup katakan pertama Anda harus mendapatkan array dari kunci atau nilai dan kemudian Anda bisa mendapatkan ukuran array sebagai berikut -

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);

@keys = keys %data;
$size = @keys; print "1 - Hash size: is $size\n";

@values = values %data;
$size = @values; print "2 - Hash size: is $size\n";

Ini akan menghasilkan hasil sebagai berikut -

1 - Hash size: is 3
2 - Hash size: is 3

Tambahkan dan Hapus Elemen di Hash

Menambahkan pasangan kunci / nilai baru dapat dilakukan dengan satu baris kode menggunakan operator penugasan sederhana. Tetapi untuk menghapus elemen dari hash yang perlu Anda gunakandelete berfungsi seperti yang ditunjukkan di bawah ini dalam contoh -

#!/usr/bin/perl

%data = ('John Paul' => 45, 'Lisa' => 30, 'Kumar' => 40);
@keys = keys %data;
$size = @keys; print "1 - Hash size: is $size\n";

# adding an element to the hash;
$data{'Ali'} = 55; @keys = keys %data; $size = @keys;
print "2 - Hash size:  is $size\n"; # delete the same element from the hash; delete $data{'Ali'};
@keys = keys %data;
$size = @keys; print "3 - Hash size: is $size\n";

Ini akan menghasilkan hasil sebagai berikut -

1 - Hash size: is 3
2 - Hash size: is 4
3 - Hash size: is 3

Pernyataan kondisional Perl membantu dalam pengambilan keputusan, yang mengharuskan pemrogram menentukan satu atau lebih kondisi untuk dievaluasi atau diuji oleh program, bersama dengan pernyataan atau pernyataan yang akan dijalankan jika kondisi ditentukan benar, dan secara opsional, lainnya pernyataan yang akan dieksekusi jika kondisi ditentukan sebagai salah.

Berikut ini adalah gambaran umum dari struktur pengambilan keputusan khas yang ditemukan di sebagian besar bahasa pemrograman -

Angka 0, string '0' dan "", daftar kosong (), dan undef semuanya false dalam konteks boolean dan semua nilai lainnya adalah true. Negasi dari nilai sebenarnya sebesar! atau not mengembalikan nilai palsu khusus.

Bahasa pemrograman Perl menyediakan tipe pernyataan kondisional berikut ini.

Sr.No. Pernyataan & Deskripsi
1 jika pernyataan

Sebuah if statement terdiri dari ekspresi boolean yang diikuti oleh satu atau beberapa pernyataan.

2 jika ... pernyataan lain

Sebuah if statement bisa diikuti dengan opsional else statement.

3 jika ... elsif ... pernyataan lain

Sebuah if statement bisa diikuti dengan opsional elsif statement dan kemudian dengan pilihan else statement.

4 kecuali pernyataan

Sebuah unless statement terdiri dari ekspresi boolean yang diikuti oleh satu atau beberapa pernyataan.

5 kecuali ... pernyataan lain

Sebuah unless statement bisa diikuti dengan opsional else statement.

6 kecuali ... elsif..lain pernyataan

Sebuah unless statement bisa diikuti dengan opsional elsif statement dan kemudian dengan pilihan else statement.

7 pernyataan switch

Dengan versi Perl terbaru, Anda dapat menggunakan file switchpernyataan. yang memungkinkan cara sederhana untuk membandingkan nilai variabel terhadap berbagai kondisi.

Itu? : Operator

Mari kita periksa conditional operator ? :yang bisa digunakan untuk menggantikan if...elsepernyataan. Ini memiliki bentuk umum berikut -

Exp1 ? Exp2 : Exp3;

Dimana Exp1, Exp2, dan Exp3 adalah ekspresi. Perhatikan penggunaan dan penempatan titik dua.

Nilai sebuah? ekspresi ditentukan seperti ini: Exp1 dievaluasi. Jika benar, maka Exp2 dievaluasi dan menjadi nilai keseluruhan? ekspresi. Jika Exp1 salah, maka Exp3 dievaluasi dan nilainya menjadi nilai ekspresi. Di bawah ini adalah contoh sederhana yang menggunakan operator ini -

#!/usr/local/bin/perl
 
$name = "Ali"; $age = 10;

$status = ($age > 60 )? "A senior citizen" : "Not a senior citizen";

print "$name is - $status\n";

Ini akan menghasilkan hasil sebagai berikut -

Ali is - Not a senior citizen

Mungkin ada situasi ketika Anda perlu mengeksekusi blok kode beberapa kali. Secara umum, pernyataan dieksekusi secara berurutan: Pernyataan pertama dalam suatu fungsi dijalankan pertama, diikuti oleh yang kedua, dan seterusnya.

Bahasa pemrograman menyediakan berbagai struktur kontrol yang memungkinkan jalur eksekusi yang lebih rumit.

Pernyataan loop memungkinkan kita untuk mengeksekusi pernyataan atau sekelompok pernyataan beberapa kali dan berikut adalah bentuk umum dari pernyataan loop di sebagian besar bahasa pemrograman -

Bahasa pemrograman Perl menyediakan tipe loop berikut untuk menangani persyaratan perulangan.

Sr.No. Jenis & Deskripsi Loop
1 while loop

Mengulangi pernyataan atau sekelompok pernyataan saat kondisi tertentu benar. Ini menguji kondisi sebelum menjalankan badan perulangan.

2 sampai loop

Mengulangi pernyataan atau sekelompok pernyataan sampai kondisi tertentu menjadi benar. Ini menguji kondisi sebelum menjalankan badan perulangan.

3 untuk loop

Menjalankan urutan pernyataan beberapa kali dan menyingkat kode yang mengelola variabel loop.

4 foreach loop

Perulangan foreach mengulangi nilai daftar normal dan menetapkan variabel VAR menjadi setiap elemen daftar secara bergantian.

5 lakukan ... while loop

Seperti pernyataan while, kecuali pernyataan itu menguji kondisi di akhir badan perulangan

6 loop bersarang

Anda dapat menggunakan satu atau lebih loop di dalam while lainnya, for atau do.. while loop.

Pernyataan Kontrol Loop

Pernyataan kontrol loop mengubah eksekusi dari urutan normalnya. Saat eksekusi meninggalkan ruang lingkup, semua objek otomatis yang dibuat dalam lingkup itu dimusnahkan.

Perl mendukung pernyataan kontrol berikut. Klik tautan berikut untuk memeriksa detailnya.

Sr.No. Pernyataan & Deskripsi Kontrol
1 pernyataan selanjutnya

Menyebabkan loop melewatkan sisa tubuhnya dan segera menguji ulang kondisinya sebelum mengulangi.

2 pernyataan terakhir

Menghentikan pernyataan loop dan mentransfer eksekusi ke pernyataan segera setelah loop.

3 lanjutkan pernyataan

BLOK terus, itu selalu dijalankan sebelum kondisional akan dievaluasi lagi.

4 ulangi pernyataan

Perintah redo memulai ulang blok loop tanpa mengevaluasi kondisional lagi. Blok lanjut, jika ada, tidak dijalankan.

5 pernyataan goto

Perl mendukung perintah goto dengan tiga bentuk: goto label, goto expr, dan goto & name.

Loop Tak Terbatas

Pengulangan menjadi pengulangan tanpa batas jika suatu kondisi tidak pernah menjadi salah. Ituforloop secara tradisional digunakan untuk tujuan ini. Karena tidak satupun dari ketiga ekspresi itu membentukfor loop diperlukan, Anda dapat membuat loop tanpa akhir dengan mengosongkan ekspresi kondisional.

#!/usr/local/bin/perl
 
for( ; ; ) {
   printf "This loop will run forever.\n";
}

Anda dapat menghentikan loop tak terbatas di atas dengan menekan tombol Ctrl + C.

Jika ekspresi kondisional tidak ada, maka dianggap benar. Anda mungkin memiliki inisialisasi dan ekspresi inkremen, tetapi sebagai programmer lebih umum menggunakan konstruksi for (;;) untuk menandakan loop tak terbatas.

Apa itu Operator?

Jawaban sederhana dapat diberikan dengan menggunakan ekspresi 4 + 5 sama dengan 9 . Di sini 4 dan 5 disebut operan dan + disebut operator. Bahasa Perl mendukung banyak jenis operator, tetapi berikut ini adalah daftar operator penting dan paling sering digunakan -

  • Operator Aritmatika
  • Operator Kesetaraan
  • Operator Logis
  • Operator Penugasan
  • Operator Bitwise
  • Operator Logis
  • Operator Kutipan
  • Operator Miscellaneous

Mari kita lihat semua operator satu per satu.

Operator Aritmatika Perl

Asumsikan variabel $a holds 10 and variable $b menampung 20, lalu berikut adalah operator aritmatika Perl -

Tunjukkan Contoh

Sr.No. Operator & Deskripsi
1

+ ( Addition )

Menambahkan nilai di kedua sisi operator

Example - $a + $b akan memberi 30

2

- (Subtraction)

Mengurangi operan tangan kanan dari operan tangan kiri

Example - $a - $b akan memberikan -10

3

* (Multiplication)

Mengalikan nilai di kedua sisi operator

Example - $a * $b akan memberi 200

4

/ (Division)

Membagi operan tangan kiri dengan operan tangan kanan

Example - $b / $a akan memberi 2

5

% (Modulus)

Membagi operan tangan kiri dengan operan tangan kanan dan mengembalikan sisanya

Example - $b % $a akan memberi 0

6

** (Exponent)

Melakukan kalkulasi eksponensial (daya) pada operator

Example - $a**$b akan memberikan 10 pangkat 20

Operator Kesetaraan Perl

Ini juga disebut operator relasional. Asumsikan variabel$a holds 10 and variable $b memegang 20 lalu, mari kita periksa operator persamaan numerik berikut -

Tunjukkan Contoh

Sr.No. Operator & Deskripsi
1

== (equal to)

Memeriksa apakah nilai dua operan sama atau tidak, jika ya maka kondisinya menjadi benar.

Example - ($a == $b) tidak benar.

2

!= (not equal to)

Memeriksa apakah nilai dua operan sama atau tidak, jika nilai tidak sama maka kondisi menjadi benar.

Example - ($a != $b) benar.

3

<=>

Memeriksa apakah nilai dari dua operan sama atau tidak, dan mengembalikan -1, 0, atau 1 bergantung pada apakah argumen kiri secara numerik kurang dari, sama dengan, atau lebih besar dari argumen kanan.

Example - ($a <=> $b) mengembalikan -1.

4

> (greater than)

Memeriksa apakah nilai operan kiri lebih besar dari nilai operan kanan, jika ya maka kondisi menjadi benar.

Example - ($a > $b) tidak benar.

5

< (less than)

Memeriksa apakah nilai operan kiri kurang dari nilai operan kanan, jika ya maka kondisinya menjadi benar.

Example - ($a < $b) benar.

6

>= (greater than or equal to)

Memeriksa apakah nilai operan kiri lebih besar dari atau sama dengan nilai operan kanan, jika ya maka kondisi menjadi benar.

Example - ($a >= $b) tidak benar.

7

<= (less than or equal to)

Memeriksa apakah nilai operan kiri kurang dari atau sama dengan nilai operan kanan, jika ya maka kondisi menjadi benar.

Example - ($a <= $b) benar.

Di bawah ini adalah daftar operator ekuitas. Asumsikan variabel$a holds "abc" and variable $b memegang "xyz" lalu, mari kita periksa operator persamaan string berikut -

Tunjukkan Contoh

Sr.No. Operator & Deskripsi
1

lt

Mengembalikan nilai benar jika argumen kiri stringwise kurang dari argumen kanan.

Example - ($a lt $b) benar.

2

gt

Mengembalikan nilai benar jika argumen kiri stringwise lebih besar dari argumen kanan.

Example - ($a gt $b) salah.

3

le

Mengembalikan nilai benar jika argumen kiri stringwise kurang dari atau sama dengan argumen kanan.

Example - ($a le $b) benar.

4

ge

Mengembalikan nilai benar jika argumen kiri stringwise lebih besar dari atau sama dengan argumen kanan.

Example - ($a ge $b) salah.

5

eq

Mengembalikan nilai benar jika argumen kiri stringwise sama dengan argumen kanan.

Example - ($a eq $b) salah.

6

ne

Mengembalikan nilai benar jika argumen kiri stringwise tidak sama dengan argumen kanan.

Example - ($a ne $b) benar.

7

cmp

Mengembalikan -1, 0, atau 1 bergantung pada apakah argumen kiri stringwise kurang dari, sama dengan, atau lebih besar dari argumen kanan.

Example - ($a cmp $b) adalah -1.

Operator Penugasan Perl

Asumsikan variabel $a holds 10 and variable $b menampung 20, lalu di bawah ini adalah operator penugasan yang tersedia di Perl dan penggunaannya -

Tunjukkan Contoh

Sr.No. Operator & Deskripsi
1

=

Operator penugasan sederhana, Menetapkan nilai dari operan sisi kanan ke operan sisi kiri

Example - $c = $a + $b will assigned value of $a + $b into $c

2

+=

Tambahkan AND operator penugasan, Ini menambahkan operan kanan ke operan kiri dan menetapkan hasilnya ke operan kiri

Example - $c += $a setara dengan $c = $c + $ a

3

-=

Kurangi AND operator penugasan, Ini mengurangi operan kanan dari operan kiri dan menetapkan hasilnya ke operan kiri

Example - $ c - = $a is equivalent to $c = $c - $Sebuah

4

*=

Kalikan DAN operator penugasan, Ini mengalikan operan kanan dengan operan kiri dan menetapkan hasilnya ke operan kiri

Example - $c *= $a setara dengan $c = $c * $ a

5

/=

Bagi AND operator penugasan, Ini membagi operan kiri dengan operan kanan dan menetapkan hasilnya ke operan kiri

Example - $ c / = $a is equivalent to $c = $c / $Sebuah

6

%=

Modulus AND operator penugasan, Dibutuhkan modulus menggunakan dua operan dan menetapkan hasilnya ke operan kiri

Example - $c %= $a setara dengan $c = $c% a

7

**=

Operator eksponen DAN penugasan, Melakukan kalkulasi eksponensial (daya) pada operator dan menetapkan nilai ke operan kiri

Example - $c **= $a setara dengan $c = $c ** $ a

Operator Perl Bitwise

Operator bitwise bekerja pada bit dan melakukan operasi bit demi bit. Asumsikan jika $ a = 60; dan $ b = 13; Sekarang dalam format biner akan menjadi sebagai berikut -

$ a = 0011 1100

$ b = 0000 1101

-----------------

$ a & $ b = 0000 1100

$ a | $ b = 0011 1101

$ a ^ $ b = 0011 0001

~ $ a = 1100 0011

Ada operator Bitwise berikut yang didukung oleh bahasa Perl, asumsikan jika $a = 60; and $b = 13

Tunjukkan Contoh

Sr.No. Operator & Deskripsi
1

&

Biner AND Operator menyalin sedikit ke hasil jika ada di kedua operan.

Example - ($a & $b) akan memberikan 12 yaitu 0000 1100

2

|

Biner OR Operator menyalin sedikit jika ada di operan eather.

Example - ($a | $b) akan memberikan 61 yaitu 0011 1101

3

^

Operator Biner XOR menyalin bit jika diatur dalam satu operan tetapi tidak keduanya.

Example - ($a ^ $b) akan memberikan 49 yaitu 0011 0001

4

~

Operator Pelengkap Binary Ones adalah unary dan memiliki efek bit 'membalik'.

Example - (~ $ a) akan memberikan -61 yaitu 1100 0011 dalam bentuk pelengkap 2 karena bilangan biner bertanda.

5

<<

Operator Binary Left Shift. Nilai operan kiri dipindahkan ke kiri dengan jumlah bit yang ditentukan oleh operan kanan.

Example - $ a << 2 akan menghasilkan 240 yaitu 1111 0000

6

>>

Operator Pergeseran Kanan Biner. Nilai operan kiri dipindahkan ke kanan dengan jumlah bit yang ditentukan oleh operan kanan.

Example - $ a >> 2 akan menghasilkan 15 yaitu 0000 1111

Operator Logical Perl

Ada operator logika berikut yang didukung oleh bahasa Perl. Asumsikan variabel $ a bernilai true dan variabel $ b bernilai false maka -

Tunjukkan Contoh

Sr.No. Operator & Deskripsi
1

and

Disebut Logical AND operator. Jika kedua operan benar maka kondisi menjadi benar.

Example - ($ a dan $ b) salah.

2

&&

C-style Logical AND operator copies a bit to the result if it exists in both operands.

Example − ($a && $b) is false.

3

or

Called Logical OR Operator. If any of the two operands are non zero then then condition becomes true.

Example − ($a or $b) is true.

4

||

C-style Logical OR operator copies a bit if it exists in eather operand.

Example − ($a || $b) is true.

5

not

Called Logical NOT Operator. Use to reverses the logical state of its operand. If a condition is true then Logical NOT operator will make false.

Example − not($a and $b) is true.

Quote-like Operators

There are following Quote-like operators supported by Perl language. In the following table, a {} represents any pair of delimiters you choose.

Show Example

Sr.No. Operator & Description
1

q{ }

Encloses a string with-in single quotes

Example − q{abcd} gives 'abcd'

2

qq{ }

Encloses a string with-in double quotes

Example − qq{abcd} gives "abcd"

3

qx{ }

Encloses a string with-in invert quotes

Example − qx{abcd} gives `abcd`

Miscellaneous Operators

There are following miscellaneous operators supported by Perl language. Assume variable a holds 10 and variable b holds 20 then −

Show Example

Sr.No. Operator & Description
1

.

Binary operator dot (.) concatenates two strings.

Example − If $a = "abc", $b = "def" then $a.$b will give "abcdef"

2

x

The repetition operator x returns a string consisting of the left operand repeated the number of times specified by the right operand.

Example − ('-' x 3) will give ---.

3

..

The range operator .. returns a list of values counting (up by ones) from the left value to the right value

Example − (2..5) will give (2, 3, 4, 5)

4

++

Auto Increment operator increases integer value by one

Example − $a++ will give 11

5

--

Auto Decrement operator decreases integer value by one

Example − $a-- will give 9

6

->

The arrow operator is mostly used in dereferencing a method or variable from an object or a class name

Example − $obj->$a is an example to access variable $a from object $obj.

Perl Operators Precedence

The following table lists all operators from highest precedence to lowest.

Show Example

left	terms and list operators (leftward)
left	->
nonassoc	++ --
right	**
right	! ~ \ and unary + and -
left	=~ !~
left	* / % x
left	+ - .
left	<< >>
nonassoc	named unary operators
nonassoc	< > <= >= lt gt le ge
nonassoc	== != <=> eq ne cmp ~~
left	&
left	| ^
left	&&
left	|| //
nonassoc	..  ...
right	?:
right	= += -= *= etc.
left	, =>
nonassoc	list operators (rightward)
right	not
left	and
left	or xor

This chapter will give you the basic understanding on how to process and manipulate dates and times in Perl.

Current Date and Time

Let's start with localtime() function, which returns values for the current date and time if given no arguments. Following is the 9-element list returned by the localtime function while using in list context −

sec,     # seconds of minutes from 0 to 61
min,     # minutes of hour from 0 to 59
hour,    # hours of day from 0 to 24
mday,    # day of month from 1 to 31
mon,     # month of year from 0 to 11
year,    # year since 1900
wday,    # days since sunday
yday,    # days since January 1st
isdst    # hours of daylight savings time

Try the following example to print different elements returned by localtime() function −

#!/usr/local/bin/perl
 
@months = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec );
@days = qw(Sun Mon Tue Wed Thu Fri Sat Sun);

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
print "$mday $months[$mon] $days[$wday]\n";

When the above code is executed, it produces the following result −

16 Feb Sat

If you will use localtime() function in scalar context, then it will return date and time from the current time zone set in the system. Try the following example to print current date and time in full format −

#!/usr/local/bin/perl
 
$datestring = localtime();
print "Local date and time $datestring\n";

When the above code is executed, it produces the following result −

Local date and time Sat Feb 16 06:50:45 2013

GMT Time

The function gmtime() works just like localtime() function but the returned values are localized for the standard Greenwich time zone. When called in list context, $isdst, the last value returned by gmtime, is always 0. There is no Daylight Saving Time in GMT.

You should make a note on the fact that localtime() will return the current local time on the machine that runs the script and gmtime() will return the universal Greenwich Mean Time, or GMT (or UTC).

Try the following example to print the current date and time but on GMT scale −

#!/usr/local/bin/perl

$datestring = gmtime(); print "GMT date and time $datestring\n";

When the above code is executed, it produces the following result −

GMT date and time Sat Feb 16 13:50:45 2013

Format Date and Time

You can use localtime() function to get a list of 9-elements and later you can use the printf() function to format date and time based on your requirements as follows −

#!/usr/local/bin/perl
 
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(); printf("Time Format - HH:MM:SS\n"); printf("%02d:%02d:%02d", $hour, $min, $sec);

When the above code is executed, it produces the following result −

Time Format - HH:MM:SS
06:58:52

Epoch time

You can use the time() function to get epoch time, i.e., the numbers of seconds that have elapsed since a given date, in Unix is January 1, 1970.

#!/usr/local/bin/perl
 
$epoc = time(); print "Number of seconds since Jan 1, 1970 - $epoc\n";

When the above code is executed, it produces the following result −

Number of seconds since Jan 1, 1970 - 1361022130

You can convert a given number of seconds into date and time string as follows −

#!/usr/local/bin/perl

$datestring = localtime(); print "Current date and time $datestring\n";

$epoc = time(); $epoc = $epoc - 24 * 60 * 60; # one day before of current date. $datestring = localtime($epoc); print "Yesterday's date and time $datestring\n";

When the above code is executed, it produces the following result −

Current date and time Tue Jun  5 05:54:43 2018
Yesterday's date and time Mon Jun  4 05:54:43 2018

POSIX Function strftime()

You can use the POSIX function strftime() to format date and time with the help of the following table. Please note that the specifiers marked with an asterisk (*) are locale-dependent.

Specifier Replaced by Example
%a Abbreviated weekday name * Thu
%A Full weekday name * Thursday
%b Abbreviated month name * Aug
%B Full month name * August
%c Date and time representation * Thu Aug 23 14:55:02 2001
%C Year divided by 100 and truncated to integer (00-99) 20
%d Day of the month, zero-padded (01-31) 23
%D Short MM/DD/YY date, equivalent to %m/%d/%y 08/23/01
%e Day of the month, space-padded (1-31) 23
%F Short YYYY-MM-DD date, equivalent to %Y-%m-%d 2001-08-23
%g Week-based year, last two digits (00-99) 01
%G Week-based year 2001
%h Abbreviated month name * (same as %b) Aug
%H Hour in 24h format (00-23) 14
%I Hour in 12h format (01-12) 02
%j Day of the year (001-366) 235
%m Month as a decimal number (01-12) 08
%M Minute (00-59) 55
%n New-line character ('\n')
%p AM or PM designation PM
%r 12-hour clock time * 02:55:02 pm
%R 24-hour HH:MM time, equivalent to %H:%M 14:55
%S Second (00-61) 02
%t Horizontal-tab character ('\t')
%T ISO 8601 time format (HH:MM:SS), equivalent to %H:%M:%S 14:55
%u ISO 8601 weekday as number with Monday as 1 (1-7) 4
%U Week number with the first Sunday as the first day of week one (00-53) 33
%V ISO 8601 week number (00-53) 34
%w Weekday as a decimal number with Sunday as 0 (0-6) 4
%W Week number with the first Monday as the first day of week one (00-53) 34
%x Date representation * 08/23/01
%X Time representation * 14:55:02
%y Year, last two digits (00-99) 01
%Y Year 2001
%z

ISO 8601 offset from UTC in timezone (1 minute = 1, 1 hour = 100)

If timezone cannot be termined, no characters

+100
%Z

Timezone name or abbreviation *

If timezone cannot be termined, no characters

CDT
%% A % sign %

Let's check the following example to understand the usage −

#!/usr/local/bin/perl
use POSIX qw(strftime);

$datestring = strftime "%a %b %e %H:%M:%S %Y", localtime; printf("date and time - $datestring\n");

# or for GMT formatted appropriately for your locale:
$datestring = strftime "%a %b %e %H:%M:%S %Y", gmtime; printf("date and time - $datestring\n");

When the above code is executed, it produces the following result −

date and time - Sat Feb 16 07:10:23 2013
date and time - Sat Feb 16 14:10:23 2013

A Perl subroutine or function is a group of statements that together performs a task. You can divide up your code into separate subroutines. How you divide up your code among different subroutines is up to you, but logically the division usually is so each function performs a specific task.

Perl uses the terms subroutine, method and function interchangeably.

Define and Call a Subroutine

The general form of a subroutine definition in Perl programming language is as follows −

sub subroutine_name {
   body of the subroutine
}

The typical way of calling that Perl subroutine is as follows −

subroutine_name( list of arguments );

In versions of Perl before 5.0, the syntax for calling subroutines was slightly different as shown below. This still works in the newest versions of Perl, but it is not recommended since it bypasses the subroutine prototypes.

&subroutine_name( list of arguments );

Let's have a look into the following example, which defines a simple function and then call it. Because Perl compiles your program before executing it, it doesn't matter where you declare your subroutine.

#!/usr/bin/perl

# Function definition
sub Hello {
   print "Hello, World!\n";
}

# Function call
Hello();

When above program is executed, it produces the following result −

Hello, World!

Passing Arguments to a Subroutine

You can pass various arguments to a subroutine like you do in any other programming language and they can be acessed inside the function using the special array @_. Thus the first argument to the function is in $_[0], the second is in $_[1], and so on.

You can pass arrays and hashes as arguments like any scalar but passing more than one array or hash normally causes them to lose their separate identities. So we will use references ( explained in the next chapter ) to pass any array or hash.

Let's try the following example, which takes a list of numbers and then prints their average −

#!/usr/bin/perl

# Function definition
sub Average {
   # get total number of arguments passed.
   $n = scalar(@_); $sum = 0;

   foreach $item (@_) { $sum += $item; } $average = $sum / $n;

   print "Average for the given numbers : $average\n";
}

# Function call
Average(10, 20, 30);

When above program is executed, it produces the following result −

Average for the given numbers : 20

Passing Lists to Subroutines

Because the @_ variable is an array, it can be used to supply lists to a subroutine. However, because of the way in which Perl accepts and parses lists and arrays, it can be difficult to extract the individual elements from @_. If you have to pass a list along with other scalar arguments, then make list as the last argument as shown below −

#!/usr/bin/perl

# Function definition
sub PrintList {
   my @list = @_;
   print "Given list is @list\n";
}
$a = 10;
@b = (1, 2, 3, 4);

# Function call with list parameter
PrintList($a, @b);

When above program is executed, it produces the following result −

Given list is 10 1 2 3 4

Passing Hashes to Subroutines

When you supply a hash to a subroutine or operator that accepts a list, then hash is automatically translated into a list of key/value pairs. For example −

#!/usr/bin/perl

# Function definition
sub PrintHash {
   my (%hash) = @_;

   foreach my $key ( keys %hash ) {
      my $value = $hash{$key}; print "$key : $value\n";
   }
}
%hash = ('name' => 'Tom', 'age' => 19);

# Function call with hash parameter
PrintHash(%hash);

When above program is executed, it produces the following result −

name : Tom
age : 19

Returning Value from a Subroutine

You can return a value from subroutine like you do in any other programming language. If you are not returning a value from a subroutine then whatever calculation is last performed in a subroutine is automatically also the return value.

You can return arrays and hashes from the subroutine like any scalar but returning more than one array or hash normally causes them to lose their separate identities. So we will use references ( explained in the next chapter ) to return any array or hash from a function.

Let's try the following example, which takes a list of numbers and then returns their average −

#!/usr/bin/perl

# Function definition
sub Average {
   # get total number of arguments passed.
   $n = scalar(@_);
   $sum = 0; foreach $item (@_) {
      $sum += $item;
   }
   $average = $sum / $n; return $average;
}

# Function call
$num = Average(10, 20, 30); print "Average for the given numbers : $num\n";

When above program is executed, it produces the following result −

Average for the given numbers : 20

Private Variables in a Subroutine

By default, all variables in Perl are global variables, which means they can be accessed from anywhere in the program. But you can create private variables called lexical variables at any time with the my operator.

The my operator confines a variable to a particular region of code in which it can be used and accessed. Outside that region, this variable cannot be used or accessed. This region is called its scope. A lexical scope is usually a block of code with a set of braces around it, such as those defining the body of the subroutine or those marking the code blocks of if, while, for, foreach, and eval statements.

Following is an example showing you how to define a single or multiple private variables using my operator −

sub somefunc {
   my $variable; # $variable is invisible outside somefunc()
   my ($another, @an_array, %a_hash); # declaring many variables at once
}

Let's check the following example to distinguish between global and private variables −

#!/usr/bin/perl

# Global variable
$string = "Hello, World!";

# Function definition
sub PrintHello {
   # Private variable for PrintHello function
   my $string; $string = "Hello, Perl!";
   print "Inside the function $string\n"; } # Function call PrintHello(); print "Outside the function $string\n";

When above program is executed, it produces the following result −

Inside the function Hello, Perl!
Outside the function Hello, World!

Temporary Values via local()

The local is mostly used when the current value of a variable must be visible to called subroutines. A local just gives temporary values to global (meaning package) variables. This is known as dynamic scoping. Lexical scoping is done with my, which works more like C's auto declarations.

If more than one variable or expression is given to local, they must be placed in parentheses. This operator works by saving the current values of those variables in its argument list on a hidden stack and restoring them upon exiting the block, subroutine, or eval.

Let's check the following example to distinguish between global and local variables −

#!/usr/bin/perl

# Global variable
$string = "Hello, World!"; sub PrintHello { # Private variable for PrintHello function local $string;
   $string = "Hello, Perl!"; PrintMe(); print "Inside the function PrintHello $string\n";
}
sub PrintMe {
   print "Inside the function PrintMe $string\n"; } # Function call PrintHello(); print "Outside the function $string\n";

When above program is executed, it produces the following result −

Inside the function PrintMe Hello, Perl!
Inside the function PrintHello Hello, Perl!
Outside the function Hello, World!

State Variables via state()

There are another type of lexical variables, which are similar to private variables but they maintain their state and they do not get reinitialized upon multiple calls of the subroutines. These variables are defined using the state operator and available starting from Perl 5.9.4.

Let's check the following example to demonstrate the use of state variables −

#!/usr/bin/perl

use feature 'state';

sub PrintCount {
   state $count = 0; # initial value print "Value of counter is $count\n";
   $count++;
}

for (1..5) {
   PrintCount();
}

When above program is executed, it produces the following result −

Value of counter is 0
Value of counter is 1
Value of counter is 2
Value of counter is 3
Value of counter is 4

Prior to Perl 5.10, you would have to write it like this −

#!/usr/bin/perl

{
   my $count = 0; # initial value

   sub PrintCount {
      print "Value of counter is $count\n"; $count++;
   }
}

for (1..5) {
   PrintCount();
}

Subroutine Call Context

The context of a subroutine or statement is defined as the type of return value that is expected. This allows you to use a single function that returns different values based on what the user is expecting to receive. For example, the following localtime() returns a string when it is called in scalar context, but it returns a list when it is called in list context.

my $datestring = localtime( time );

In this example, the value of $timestr is now a string made up of the current date and time, for example, Thu Nov 30 15:21:33 2000. Conversely −

($sec,$min,$hour,$mday,$mon, $year,$wday,$yday,$isdst) = localtime(time);

Now the individual variables contain the corresponding values returned by localtime() subroutine.

A Perl reference is a scalar data type that holds the location of another value which could be scalar, arrays, or hashes. Because of its scalar nature, a reference can be used anywhere, a scalar can be used.

You can construct lists containing references to other lists, which can contain references to hashes, and so on. This is how the nested data structures are built in Perl.

Create References

It is easy to create a reference for any variable, subroutine or value by prefixing it with a backslash as follows −

$scalarref = \$foo; $arrayref  = \@ARGV;
$hashref = \%ENV; $coderef   = \&handler;
$globref   = \*foo;

You cannot create a reference on an I/O handle (filehandle or dirhandle) using the backslash operator but a reference to an anonymous array can be created using the square brackets as follows −

$arrayref = [1, 2, ['a', 'b', 'c']];

Similar way you can create a reference to an anonymous hash using the curly brackets as follows −

$hashref = {
   'Adam'  => 'Eve',
   'Clyde' => 'Bonnie',
};

A reference to an anonymous subroutine can be created by using sub without a subname as follows −

$coderef = sub { print "Boink!\n" };

Dereferencing

Dereferencing returns the value from a reference point to the location. To dereference a reference simply use $, @ or % as prefix of the reference variable depending on whether the reference is pointing to a scalar, array, or hash. Following is the example to explain the concept −

#!/usr/bin/perl

$var = 10;

# Now $r has reference to $var scalar.
$r = \$var;

# Print value available at the location stored in $r. print "Value of $var is : ", $$r, "\n"; @var = (1, 2, 3); # Now $r has reference to @var array.
$r = \@var; # Print values available at the location stored in $r.
print "Value of @var is : ",  @$r, "\n"; %var = ('key1' => 10, 'key2' => 20); # Now $r has reference to %var hash.
$r = \%var; # Print values available at the location stored in $r.
print "Value of %var is : ", %$r, "\n";

When above program is executed, it produces the following result −

Value of 10 is : 10
Value of 1 2 3 is : 123
Value of %var is : key220key110

If you are not sure about a variable type, then its easy to know its type using ref, which returns one of the following strings if its argument is a reference. Otherwise, it returns false −

SCALAR
ARRAY
HASH
CODE
GLOB
REF

Let's try the following example −

#!/usr/bin/perl

$var = 10;
$r = \$var;
print "Reference type in r : ", ref($r), "\n"; @var = (1, 2, 3); $r = \@var;
print "Reference type in r : ", ref($r), "\n"; %var = ('key1' => 10, 'key2' => 20); $r = \%var;
print "Reference type in r : ", ref($r), "\n";

When above program is executed, it produces the following result −

Reference type in r : SCALAR
Reference type in r : ARRAY
Reference type in r : HASH

Circular References

A circular reference occurs when two references contain a reference to each other. You have to be careful while creating references otherwise a circular reference can lead to memory leaks. Following is an example −

#!/usr/bin/perl

 my $foo = 100;
 $foo = \$foo;
 
 print "Value of foo is : ", $$foo, "\n";

Ketika program di atas dijalankan, itu menghasilkan hasil sebagai berikut -

Value of foo is : REF(0x9aae38)

Referensi ke Fungsi

Ini mungkin terjadi jika Anda perlu membuat penangan sinyal sehingga Anda dapat menghasilkan referensi ke suatu fungsi dengan mendahului nama fungsi tersebut dengan \ & dan untuk membedakan referensi tersebut, Anda hanya perlu memberi awalan variabel referensi menggunakan ampersand &. Berikut adalah contohnya -

#!/usr/bin/perl

# Function definition
sub PrintHash {
   my (%hash) = @_;
   
   foreach $item (%hash) {
      print "Item : $item\n"; } } %hash = ('name' => 'Tom', 'age' => 19); # Create a reference to above function. $cref = \&PrintHash;

# Function call using reference.
&$cref(%hash);

Ketika program di atas dijalankan, itu menghasilkan hasil sebagai berikut -

Item : name
Item : Tom
Item : age
Item : 19

Perl menggunakan template penulisan yang disebut 'format' untuk menghasilkan laporan. Untuk menggunakan fitur format Perl, Anda harus menentukan format terlebih dahulu dan kemudian Anda dapat menggunakan format tersebut untuk menulis data yang diformat.

Tentukan Format

Berikut ini adalah sintaks untuk mendefinisikan format Perl -

format FormatName =
fieldline
value_one, value_two, value_three
fieldline
value_one, value_two
.

Sini FormatNamemewakili nama format. ItufieldlineDengan cara tertentu, data harus diformat. Garis nilai mewakili nilai yang akan dimasukkan ke dalam garis bidang. Anda mengakhiri format dengan satu titik.

Lanjut fieldlinebisa berisi teks atau fieldholder. Pemegang lapangan memiliki ruang untuk data yang akan ditempatkan di sana di kemudian hari. Seorang pemegang lapangan memiliki format -

@<<<<

Penampung ini rata kiri, dengan spasi 5. Anda harus menghitung tanda @ dan <untuk mengetahui jumlah spasi di kolom. Pemegang lapangan lainnya termasuk -

@>>>> right-justified
@|||| centered
@####.## numeric field holder
@* multiline field holder

Format contoh adalah -

format EMPLOYEE =
===================================
@<<<<<<<<<<<<<<<<<<<<<< @<< 
$name $age @#####.## $salary
===================================
.

Dalam contoh ini, $ name akan ditulis sebagai rata kiri dalam 22 spasi karakter dan setelah usia tersebut akan ditulis dalam dua spasi.

Menggunakan Format

Untuk memanggil deklarasi format ini, kami akan menggunakan write kata kunci -

write EMPLOYEE;

Masalahnya adalah bahwa nama format biasanya merupakan nama pegangan file yang terbuka, dan pernyataan tulis akan mengirimkan output ke pegangan file ini. Karena kita ingin data dikirim ke STDOUT, kita harus mengasosiasikan EMPLOYEE dengan filehandle STDOUT. Pertama, bagaimanapun, kita harus memastikan bahwa STDOUT adalah pegangan file yang kita pilih, menggunakan fungsi select ().

select(STDOUT);

Kami kemudian akan mengasosiasikan EMPLOYEE dengan STDOUT dengan menyetel nama format baru dengan STDOUT, menggunakan variabel khusus $ ~ atau $ FORMAT_NAME sebagai berikut -

$~ = "EMPLOYEE";

Saat kita sekarang melakukan write (), data akan dikirim ke STDOUT. Ingat: jika Anda akan menulis laporan Anda di pegangan file lain selain STDOUT maka Anda dapat menggunakan fungsi select () untuk memilih pegangan file itu dan logika lainnya akan tetap sama.

Mari kita ambil contoh berikut. Di sini kami memiliki nilai kode keras hanya untuk menunjukkan penggunaan. Dalam penggunaan aktual, Anda akan membaca nilai dari file atau database untuk menghasilkan laporan aktual dan Anda mungkin perlu menulis laporan akhir lagi ke dalam file.

#!/usr/bin/perl

format EMPLOYEE =
===================================
@<<<<<<<<<<<<<<<<<<<<<< @<< 
$name $age
@#####.##
$salary =================================== . select(STDOUT); $~ = EMPLOYEE;

@n = ("Ali", "Raza", "Jaffer");
@a  = (20,30, 40);
@s = (2000.00, 2500.00, 4000.000);

$i = 0; foreach (@n) { $name = $_; $age = $a[$i];
   $salary = $s[$i++];
   write;
}

Saat dijalankan, ini akan menghasilkan hasil sebagai berikut -

===================================
Ali                     20
  2000.00
===================================
===================================
Raza                    30
  2500.00
===================================
===================================
Jaffer                  40
  4000.00
===================================

Tentukan Header Laporan

Semuanya terlihat baik-baik saja. Tetapi Anda akan tertarik untuk menambahkan tajuk ke laporan Anda. Header ini akan dicetak di atas setiap halaman. Sangat mudah untuk melakukan ini. Selain menentukan template, Anda harus menentukan header dan menetapkannya ke variabel $ ^ atau $ FORMAT_TOP_NAME -

#!/usr/bin/perl

format EMPLOYEE =
===================================
@<<<<<<<<<<<<<<<<<<<<<< @<< 
$name $age @#####.## $salary
===================================
.

format EMPLOYEE_TOP =
===================================
Name                    Age
===================================
.

select(STDOUT);
$~ = EMPLOYEE; $^ = EMPLOYEE_TOP;

@n = ("Ali", "Raza", "Jaffer");
@a  = (20,30, 40);
@s = (2000.00, 2500.00, 4000.000);

$i = 0; foreach (@n) { $name = $_; $age = $a[$i];
   $salary = $s[$i++];
   write;
}

Sekarang laporan Anda akan terlihat seperti -

===================================
Name                    Age
===================================
===================================
Ali                     20
  2000.00
===================================
===================================
Raza                    30
  2500.00
===================================
===================================
Jaffer                  40
  4000.00
===================================

Tentukan Pagination

Bagaimana jika laporan Anda mengambil lebih dari satu halaman? Anda memiliki solusi untuk itu, cukup gunakan$% atau $ FORMAT_PAGE_NUMBER vairable beserta header sebagai berikut -

format EMPLOYEE_TOP =
===================================
Name                    Age Page @<
                                 $%
===================================                               
.

Sekarang output Anda akan terlihat seperti berikut -

===================================
Name                    Age Page 1
===================================
===================================
Ali                     20
  2000.00
===================================
===================================
Raza                    30
  2500.00
===================================
===================================
Jaffer                  40
  4000.00
===================================

Jumlah Garis di Halaman

Anda dapat mengatur jumlah baris per halaman menggunakan variabel khusus $= (atau $ FORMAT_LINES_PER_PAGE), Secara default $ = akan menjadi 60.

Tentukan Footer Laporan

Sementara $ ^ atau $FORMAT_TOP_NAME contains the name of the current header format, there is no corresponding mechanism to automatically do the same thing for a footer. If you have a fixed-size footer, you can get footers by checking variable $- atau $ FORMAT_LINES_LEFT sebelum setiap write () dan cetak footer sendiri jika perlu menggunakan format lain yang ditentukan sebagai berikut -

format EMPLOYEE_BOTTOM =
End of Page @<
            $%
.

Untuk satu set lengkap variabel yang terkait dengan pemformatan, silakan merujuk ke bagian Variabel Khusus Perl .

Dasar-dasar penanganan file sederhana: Anda mengaitkan a filehandle dengan entitas eksternal (biasanya file) dan kemudian menggunakan berbagai operator dan fungsi dalam Perl untuk membaca dan memperbarui data yang disimpan dalam aliran data yang terkait dengan filehandle.

Filehandle adalah struktur Perl internal bernama yang mengaitkan file fisik dengan sebuah nama. Semua filehandle mampu membaca / menulis akses, sehingga Anda dapat membaca dan memperbarui file atau perangkat apa pun yang terkait dengan filehandle. Namun, saat Anda mengasosiasikan filehandle, Anda bisa menentukan mode di mana filehandle dibuka.

Tiga pegangan file dasar adalah - STDIN, STDOUT, dan STDERR, yang masing-masing mewakili input standar, output standar dan perangkat kesalahan standar.

Membuka dan Menutup File

Ada dua fungsi berikut dengan berbagai bentuk, yang dapat digunakan untuk membuka file baru atau yang sudah ada di Perl.

open FILEHANDLE, EXPR
open FILEHANDLE

sysopen FILEHANDLE, FILENAME, MODE, PERMS
sysopen FILEHANDLE, FILENAME, MODE

Di sini FILEHANDLE adalah pegangan file yang dikembalikan oleh open function dan EXPR adalah ekspresi yang memiliki nama file dan mode membuka file.

Buka Fungsi

Berikut ini adalah sintaks untuk membuka file.txtdalam mode hanya-baca. Di sini kurang dari tanda <menunjukkan bahwa file harus dibuka dalam mode hanya-baca.

open(DATA, "<file.txt");

Di sini DATA adalah pegangan file, yang akan digunakan untuk membaca file. Berikut adalah contoh, yang akan membuka file dan akan mencetak isinya di atas layar.

#!/usr/bin/perl

open(DATA, "<file.txt") or die "Couldn't open file file.txt, $!"; while(<DATA>) { print "$_";
}

Berikut sintaks untuk membuka file.txt dalam mode penulisan. Di sini tanda kurang dari> menunjukkan bahwa file harus dibuka dalam mode penulisan.

open(DATA, ">file.txt") or die "Couldn't open file file.txt, $!";

Contoh ini sebenarnya memotong (mengosongkan) file sebelum membukanya untuk ditulis, yang mungkin bukan efek yang diinginkan. Jika Anda ingin membuka file untuk membaca dan menulis, Anda dapat memberi tanda plus sebelum karakter> atau <.

Misalnya, untuk membuka file untuk memperbarui tanpa memotongnya -

open(DATA, "+<file.txt"); or die "Couldn't open file file.txt, $!";

Untuk memotong file terlebih dahulu -

open DATA, "+>file.txt" or die "Couldn't open file file.txt, $!";

Anda dapat membuka file dalam mode append. Dalam mode ini, titik penulisan akan ditetapkan ke akhir file.

open(DATA,">>file.txt") || die "Couldn't open file file.txt, $!";

Double >> membuka file untuk ditambahkan, menempatkan penunjuk file di bagian akhir, sehingga Anda dapat segera mulai menambahkan informasi. Namun, Anda tidak dapat membacanya kecuali Anda juga menempatkan tanda plus di depannya -

open(DATA,"+>>file.txt") || die "Couldn't open file file.txt, $!";

Berikut adalah tabel, yang memberikan kemungkinan nilai mode yang berbeda

Sr.No. Entitas & Definisi
1

< or r

Akses Hanya Baca

2

> or w

Membuat, Menulis, dan Memotong

3

>> or a

Menulis, Menambahkan, dan Membuat

4

+< or r+

Membaca dan Menulis

5

+> or w+

Membaca, Menulis, Membuat, dan Memotong

6

+>> or a+

Membaca, Menulis, Menambahkan, dan Membuat

Fungsi Sysopen

Itu sysopen fungsinya mirip dengan fungsi buka utama, hanya saja ia menggunakan sistem open() fungsi, menggunakan parameter yang disediakan sebagai parameter untuk fungsi sistem -

Misalnya, untuk membuka file untuk memperbarui, meniru +<filename format dari terbuka -

sysopen(DATA, "file.txt", O_RDWR);

Atau untuk memotong file sebelum memperbarui -

sysopen(DATA, "file.txt", O_RDWR|O_TRUNC );

Anda dapat menggunakan O_CREAT untuk membuat file baru dan O_WRONLY- untuk membuka file dalam mode hanya tulis dan O_RDONLY - untuk membuka file dalam mode hanya baca.

Itu PERMSargumen menentukan izin file untuk file yang ditentukan, jika itu harus dibuat. Secara default dibutuhkan0x666.

Berikut adalah tabel yang memberikan kemungkinan nilai MODE.

Sr.No. Entitas & Definisi
1

O_RDWR

Baca dan tulis

2

O_RDONLY

Baca Saja

3

O_WRONLY

Tulis Saja

4

O_CREAT

Buat file

5

O_APPEND

Tambahkan file

6

O_TRUNC

Potong file

7

O_EXCL

Berhenti jika file sudah ada

8

O_NONBLOCK

Kegunaan Non-Blocking

Tutup Fungsi

Untuk menutup filehandle, dan karena itu memisahkan filehandle dari file yang sesuai, Anda menggunakan closefungsi. Ini membersihkan buffer penanganan file dan menutup deskriptor file sistem.

close FILEHANDLE
close

Jika tidak ada FILEHANDLE yang ditentukan, maka filehandle yang saat ini dipilih akan ditutup. Ini mengembalikan nilai true hanya jika berhasil membersihkan buffer dan menutup file.

close(DATA) || die "Couldn't close file properly";

Membaca dan Menulis File

Setelah Anda membuka filehandle, Anda harus bisa membaca dan menulis informasi. Ada beberapa cara berbeda untuk membaca dan menulis data ke dalam file.

Operator <FILEHANDL>

Metode utama untuk membaca informasi dari filehandle yang terbuka adalah operator <FILEHANDLE>. Dalam konteks skalar, ini mengembalikan satu baris dari filehandle. Misalnya -

#!/usr/bin/perl

print "What is your name?\n";
$name = <STDIN>;
print "Hello $name\n";

Ketika Anda menggunakan operator <FILEHANDLE> dalam konteks daftar, ini mengembalikan daftar baris dari filehandle yang ditentukan. Misalnya, untuk mengimpor semua baris dari file ke dalam array -

#!/usr/bin/perl

open(DATA,"<import.txt") or die "Can't open data";
@lines = <DATA>;
close(DATA);

Fungsi getc

Fungsi getc mengembalikan satu karakter dari FILEHANDLE yang ditentukan, atau STDIN jika tidak ada yang ditentukan -

getc FILEHANDLE
getc

Jika ada kesalahan, atau filehandle ada di akhir file, maka undef dikembalikan.

baca Fungsi

Fungsi baca membaca blok informasi dari filehandle yang di-buffer: Fungsi ini digunakan untuk membaca data biner dari file.

read FILEHANDLE, SCALAR, LENGTH, OFFSET
read FILEHANDLE, SCALAR, LENGTH

Panjang pembacaan data ditentukan oleh LENGTH, dan data ditempatkan di awal SCALAR jika tidak ada OFFSET yang ditentukan. Jika tidak, data ditempatkan setelah byte OFFSET dalam SCALAR. Fungsi mengembalikan jumlah byte yang dibaca saat berhasil, nol di akhir file, atau undef jika ada kesalahan.

Fungsi cetak

Untuk semua metode berbeda yang digunakan untuk membaca informasi dari filehandles, fungsi utama untuk menulis kembali informasi adalah fungsi cetak.

print FILEHANDLE LIST
print LIST
print

Fungsi cetak mencetak nilai yang dievaluasi dari LIST ke FILEHANDLE, atau ke penanganan file keluaran saat ini (STDOUT secara default). Misalnya -

print "Hello World!\n";

Menyalin File

Berikut adalah contoh, yang membuka file file1.txt yang ada dan membacanya baris demi baris dan menghasilkan file salinan lain file2.txt.

#!/usr/bin/perl

# Open file to read
open(DATA1, "<file1.txt");

# Open new file to write
open(DATA2, ">file2.txt");

# Copy data from one file to another.
while(<DATA1>) {
   print DATA2 $_;
}
close( DATA1 );
close( DATA2 );

Mengganti nama file

Berikut adalah contoh, yang menunjukkan bagaimana kita dapat mengganti nama file file1.txt menjadi file2.txt. Dengan asumsi file tersedia di / usr / test direktori.

#!/usr/bin/perl

rename ("/usr/test/file1.txt", "/usr/test/file2.txt" );

Fungsi ini renames mengambil dua argumen dan itu hanya mengganti nama file yang ada.

Menghapus File yang Ada

Berikut adalah contoh, yang menunjukkan bagaimana menghapus file file1.txt menggunakan unlink fungsi.

#!/usr/bin/perl

unlink ("/usr/test/file1.txt");

Memposisikan di dalam File

Anda bisa menggunakan untuk tell berfungsi untuk mengetahui posisi file saat ini dan seek berfungsi untuk menunjukkan posisi tertentu di dalam file.

beri tahu Fungsi

Persyaratan pertama adalah menemukan posisi Anda di dalam file, yang Anda lakukan menggunakan fungsi kirim -

tell FILEHANDLE
tell

Ini mengembalikan posisi penunjuk file, dalam byte, dalam FILEHANDLE jika ditentukan, atau filehandle yang dipilih default saat ini jika tidak ada yang ditentukan.

mencari Fungsi

Fungsi seek memposisikan penunjuk file ke jumlah byte yang ditentukan dalam file -

seek FILEHANDLE, POSITION, WHENCE

Fungsi ini menggunakan fungsi sistem fseek, dan Anda memiliki kemampuan yang sama untuk memposisikan relatif terhadap tiga titik berbeda: awal, akhir, dan posisi saat ini. Anda melakukan ini dengan menentukan nilai WHENCE.

Nol mengatur pemosisian relatif terhadap awal file. Misalnya, baris menetapkan penunjuk file ke 256 byte dalam file.

seek DATA, 256, 0;

Informasi File

Anda dapat menguji fitur tertentu dengan sangat cepat dalam Perl menggunakan serangkaian operator pengujian yang dikenal secara kolektif sebagai pengujian -X. Misalnya, untuk melakukan tes cepat dari berbagai izin pada file, Anda mungkin menggunakan skrip seperti ini -

#/usr/bin/perl

my $file = "/usr/test/file1.txt"; my (@description, $size);
if (-e $file) { push @description, 'binary' if (-B _); push @description, 'a socket' if (-S _); push @description, 'a text file' if (-T _); push @description, 'a block special file' if (-b _); push @description, 'a character special file' if (-c _); push @description, 'a directory' if (-d _); push @description, 'executable' if (-x _); push @description, (($size = -s _)) ? "$size bytes" : 'empty'; print "$file is ", join(', ',@description),"\n";
}

Berikut adalah daftar fitur, yang dapat Anda periksa untuk file atau direktori -

Sr.No. Operator & Definisi
1

-A

Waktu mulai skrip dikurangi waktu akses terakhir file, dalam hari.

2

-B

Apakah itu file biner?

3

-C

Waktu mulai skrip dikurangi waktu perubahan inode terakhir file, dalam hari.

3

-M

Waktu mulai skrip dikurangi waktu modifikasi file, dalam hari.

4

-O

Apakah file tersebut dimiliki oleh ID pengguna yang sebenarnya?

5

-R

Apakah file dapat dibaca oleh ID pengguna asli atau grup asli?

6

-S

Apakah file tersebut soket?

7

-T

Apakah itu file teks?

8

-W

Apakah file dapat ditulis oleh ID pengguna asli atau grup asli?

9

-X

Apakah file dapat dieksekusi oleh ID pengguna asli atau grup nyata?

10

-b

Apakah ini file khusus blok?

11

-c

Apakah itu file khusus karakter?

12

-d

Apakah file tersebut adalah direktori?

13

-e

Apakah file tersebut ada?

14

-f

Apakah ini file biasa?

15

-g

Apakah file tersebut memiliki setgid bit set?

16

-k

Apakah file memiliki kumpulan bit lengket?

17

-l

Apakah file tersebut merupakan tautan simbolis?

18

-o

Apakah file dimiliki oleh ID pengguna yang efektif?

19

-p

Apakah file tersebut adalah pipa bernama?

20

-r

Apakah file dapat dibaca oleh pengguna atau ID grup yang efektif?

21

-s

Mengembalikan ukuran file, ukuran nol = file kosong.

22

-t

Apakah filehandle dibuka oleh TTY (terminal)?

23

-u

Apakah file memiliki bit setuid?

24

-w

Apakah file dapat ditulis oleh pengguna efektif atau ID grup?

25

-x

Apakah file dapat dieksekusi oleh pengguna atau ID grup yang efektif?

26

-z

Apakah ukuran file nol?

Berikut adalah fungsi standar yang digunakan untuk bermain dengan direktori.

opendir DIRHANDLE, EXPR  # To open a directory
readdir DIRHANDLE        # To read a directory
rewinddir DIRHANDLE      # Positioning pointer to the begining
telldir DIRHANDLE        # Returns current position of the dir
seekdir DIRHANDLE, POS   # Pointing pointer to POS inside dir
closedir DIRHANDLE       # Closing a directory.

Tampilkan semua File

Ada berbagai cara untuk membuat daftar semua file yang tersedia di direktori tertentu. Pertama mari kita gunakan cara sederhana untuk mendapatkan dan membuat daftar semua file menggunakanglob operator -

#!/usr/bin/perl

# Display all the files in /tmp directory.
$dir = "/tmp/*"; my @files = glob( $dir );

foreach (@files ) {
   print $_ . "\n"; } # Display all the C source files in /tmp directory. $dir = "/tmp/*.c";
@files = glob( $dir ); foreach (@files ) { print $_ . "\n";
}

# Display all the hidden files.
$dir = "/tmp/.*"; @files = glob( $dir );
foreach (@files ) {
   print $_ . "\n"; } # Display all the files from /tmp and /home directories. $dir = "/tmp/* /home/*";
@files = glob( $dir ); foreach (@files ) { print $_ . "\n";
}

Berikut adalah contoh lain, yang membuka direktori dan mencantumkan semua file yang tersedia di dalam direktori ini.

#!/usr/bin/perl

opendir (DIR, '.') or die "Couldn't open directory, $!"; while ($file = readdir DIR) {
   print "$file\n";
}
closedir DIR;

Satu lagi contoh untuk mencetak daftar file sumber C yang mungkin Anda gunakan adalah -

#!/usr/bin/perl

opendir(DIR, '.') or die "Couldn't open directory, $!";
foreach (sort grep(/^.*\.c$/,readdir(DIR))) { print "$_\n";
}
closedir DIR;

Buat Direktori baru

Kamu dapat memakai mkdirberfungsi untuk membuat direktori baru. Anda harus memiliki izin yang diperlukan untuk membuat direktori.

#!/usr/bin/perl

$dir = "/tmp/perl"; # This creates perl directory in /tmp directory. mkdir( $dir ) or die "Couldn't create $dir directory, $!";
print "Directory created successfully\n";

Hapus direktori

Kamu dapat memakai rmdirberfungsi untuk menghapus direktori. Anda harus memiliki izin yang diperlukan untuk menghapus direktori. Selain itu, direktori ini harus kosong sebelum Anda mencoba menghapusnya.

#!/usr/bin/perl

$dir = "/tmp/perl"; # This removes perl directory from /tmp directory. rmdir( $dir ) or die "Couldn't remove $dir directory, $!";
print "Directory removed successfully\n";

Ubah Direktori

Kamu dapat memakai chdirberfungsi untuk mengubah direktori dan pergi ke lokasi baru. Anda harus memiliki izin yang diperlukan untuk mengubah direktori dan masuk ke dalam direktori baru.

#!/usr/bin/perl

$dir = "/home"; # This changes perl directory and moves you inside /home directory. chdir( $dir ) or die "Couldn't go inside $dir directory, $!";
print "Your new location is $dir\n";

Eksekusi dan kesalahan selalu berjalan bersamaan. Jika Anda membuka file yang tidak ada. kemudian jika Anda tidak menangani situasi ini dengan baik maka program Anda dianggap berkualitas buruk.

Program berhenti jika terjadi kesalahan. Jadi penanganan kesalahan yang tepat digunakan untuk menangani berbagai jenis kesalahan, yang mungkin terjadi selama eksekusi program dan mengambil tindakan yang tepat alih-alih menghentikan program sepenuhnya.

Anda dapat mengidentifikasi dan menjebak kesalahan dengan berbagai cara. Sangat mudah untuk menjebak kesalahan di Perl dan kemudian menanganinya dengan benar. Berikut adalah beberapa metode yang dapat digunakan.

Pernyataan if

Itu if statementadalah pilihan yang jelas ketika Anda perlu memeriksa nilai pengembalian dari sebuah pernyataan; misalnya -

if(open(DATA, $file)) {
   ...
} else {
   die "Error: Couldn't open the file - $!";
}

Berikut variabel $! mengembalikan pesan kesalahan yang sebenarnya. Sebagai alternatif, kita dapat mengurangi pernyataan menjadi satu baris dalam situasi yang masuk akal untuk dilakukan; misalnya -

open(DATA, $file) || die "Error: Couldn't open the file $!";

Fungsi kecuali

Itu unlessFungsi adalah kebalikan logis dari pernyataan if: dapat sepenuhnya melewati status sukses dan hanya dijalankan jika ekspresi kembali salah. Misalnya -

unless(chdir("/etc")) {
   die "Error: Can't change directory - $!";
}

Itu unlessPernyataan paling baik digunakan ketika Anda ingin memunculkan kesalahan atau alternatif hanya jika ekspresi gagal. Pernyataan itu juga masuk akal bila digunakan dalam pernyataan satu baris -

die "Error: Can't change directory!: $!" unless(chdir("/etc"));

Di sini kita mati hanya jika operasi chdir gagal, dan terbaca dengan baik.

Operator terner

Untuk pengujian yang sangat singkat, Anda dapat menggunakan operator bersyarat ?:

print(exists($hash{value}) ? 'There' : 'Missing',"\n");

Tidak begitu jelas di sini apa yang kami coba capai, tetapi efeknya sama dengan menggunakan file if atau unlesspernyataan. Operator bersyarat paling baik digunakan saat Anda ingin mengembalikan salah satu dari dua nilai dengan cepat dalam ekspresi atau pernyataan.

Fungsi peringatan

Fungsi peringatan hanya memunculkan peringatan, sebuah pesan dicetak ke STDERR, tetapi tidak ada tindakan lebih lanjut yang diambil. Jadi akan lebih berguna jika Anda hanya ingin mencetak peringatan untuk pengguna dan melanjutkan operasi lainnya -

chdir('/etc') or warn "Can't change directory";

Fungsi die

Fungsi die bekerja seperti warn, kecuali itu juga memanggil exit. Dalam skrip normal, fungsi ini memiliki efek untuk segera menghentikan eksekusi. Anda harus menggunakan fungsi ini jika tidak ada gunanya melanjutkan jika ada kesalahan dalam program -

chdir('/etc') or die "Can't change directory";

Kesalahan dalam Modul

Ada dua situasi berbeda yang harus kami tangani -

  • Melaporkan kesalahan dalam modul yang mengutip nama file dan nomor baris modul - ini berguna saat men-debug modul, atau saat Anda secara khusus ingin memunculkan kesalahan terkait modul, bukan terkait skrip.

  • Melaporkan kesalahan dalam modul yang mengutip informasi pemanggil sehingga Anda dapat men-debug baris dalam skrip yang menyebabkan kesalahan. Kesalahan yang muncul dengan cara ini berguna bagi pengguna akhir, karena kesalahan tersebut menyoroti kesalahan dalam kaitannya dengan baris asal skrip pemanggil.

Itu warn dan diefungsi bekerja sedikit berbeda dari yang Anda harapkan saat dipanggil dari dalam modul. Misalnya, modul sederhana -

package T;

require Exporter;
@ISA = qw/Exporter/;
@EXPORT = qw/function/;
use Carp;

sub function {
   warn "Error in module!";
}
1;

Ketika dipanggil dari skrip seperti di bawah ini -

use T;
function();

Ini akan menghasilkan hasil sebagai berikut -

Error in module! at T.pm line 9.

Ini kurang lebih seperti yang Anda harapkan, tetapi belum tentu seperti yang Anda inginkan. Dari perspektif pemrogram modul, informasi ini berguna karena membantu menunjukkan bug di dalam modul itu sendiri. Untuk pengguna akhir, informasi yang diberikan cukup tidak berguna, dan untuk semua kecuali programmer yang tangguh, itu sama sekali tidak berguna.

Solusi untuk masalah tersebut adalah modul Carp, yang menyediakan metode yang disederhanakan untuk melaporkan kesalahan dalam modul yang mengembalikan informasi tentang skrip pemanggil. Modul Carp menyediakan empat fungsi: carp, cluck, croak, dan confess. Fungsi-fungsi ini dibahas di bawah.

Fungsi Ikan Mas

Fungsi ikan mas adalah padanan dasar dari memperingatkan dan mencetak pesan ke STDERR tanpa benar-benar keluar dari skrip dan mencetak nama skrip.

package T;

require Exporter;
@ISA = qw/Exporter/;
@EXPORT = qw/function/;
use Carp;

sub function {
   carp "Error in module!";
}
1;

Ketika dipanggil dari skrip seperti di bawah ini -

use T;
function();

Ini akan menghasilkan hasil sebagai berikut -

Error in module! at test.pl line 4

Fungsi keok

Fungsi cluck adalah semacam ikan mas supercharged, mengikuti prinsip dasar yang sama tetapi juga mencetak jejak tumpukan semua modul yang mengarah ke fungsi yang dipanggil, termasuk informasi pada skrip asli.

package T;

require Exporter;
@ISA = qw/Exporter/;
@EXPORT = qw/function/;
use Carp qw(cluck);

sub function {
   cluck "Error in module!";
}
1;

Ketika dipanggil dari skrip seperti di bawah ini -

use T;
function();

Ini akan menghasilkan hasil sebagai berikut -

Error in module! at T.pm line 9
   T::function() called at test.pl line 4

Fungsi parauak

Itu croak fungsi setara dengan die, kecuali bahwa itu melaporkan penelepon satu level ke atas. Seperti die, fungsi ini juga keluar dari skrip setelah melaporkan kesalahan ke STDERR -

package T;

require Exporter;
@ISA = qw/Exporter/;
@EXPORT = qw/function/;
use Carp;

sub function {
   croak "Error in module!";
}
1;

Ketika dipanggil dari skrip seperti di bawah ini -

use T;
function();

Ini akan menghasilkan hasil sebagai berikut -

Error in module! at test.pl line 4

Seperti halnya ikan mas, aturan dasar yang sama berlaku mengenai penyertaan informasi baris dan file menurut fungsi peringatan dan mati.

Fungsi pengakuan

Itu confess fungsinya seperti cluck; itu memanggil mati dan kemudian mencetak jejak tumpukan sampai ke skrip origination.

package T;

require Exporter;
@ISA = qw/Exporter/;
@EXPORT = qw/function/;
use Carp;

sub function {
   confess "Error in module!";
}
1;

Ketika dipanggil dari skrip seperti di bawah ini -

use T;
function();

Ini akan menghasilkan hasil sebagai berikut -

Error in module! at T.pm line 9
   T::function() called at test.pl line 4

Ada beberapa variabel yang memiliki arti khusus dan telah ditentukan sebelumnya di Perl. Mereka adalah variabel yang menggunakan karakter tanda baca setelah indikator variabel biasa ($, @, atau%), seperti $ _ (dijelaskan di bawah).

Sebagian besar variabel khusus memiliki nama panjang dalam bahasa Inggris, misalnya, variabel Kesalahan Sistem Operasi $! dapat ditulis sebagai $ OS_ERROR. Tetapi jika Anda akan menggunakan bahasa Inggris seperti nama, maka Anda harus meletakkan satu barisuse English;di bagian atas file program Anda. Ini memandu penerjemah untuk mengambil arti yang tepat dari variabel tersebut.

Variabel khusus yang paling umum digunakan adalah $ _, yang berisi input default dan string pencarian pola. Misalnya, di baris berikut -

#!/usr/bin/perl

foreach ('hickory','dickory','doc') {
   print $_;
   print "\n";
}

Saat dijalankan, ini akan menghasilkan hasil sebagai berikut -

hickory
dickory
doc

Sekali lagi, mari kita periksa contoh yang sama tanpa menggunakan variabel $ _ secara eksplisit -

#!/usr/bin/perl

foreach ('hickory','dickory','doc') {
   print;
   print "\n";
}

Saat dijalankan, ini juga akan menghasilkan hasil sebagai berikut -

hickory
dickory
doc

Pertama kali loop dijalankan, "hickory" dicetak. Kedua kalinya, "dickory" dicetak, dan yang ketiga, "doc" dicetak. Itu karena di setiap iterasi loop, string saat ini ditempatkan di$_, and is used by default by print. Here are the places where Perl will assume $_ meskipun Anda tidak menentukannya -

  • Berbagai fungsi unary, termasuk fungsi seperti ord dan int, serta semua pengujian file (-f, -d) kecuali -t, yang defaultnya adalah STDIN.

  • Berbagai fungsi daftar seperti mencetak dan membatalkan tautan.

  • Operasi pencocokan pola m //, s ///, dan tr /// saat digunakan tanpa operator = ~.

  • Variabel iterator default dalam loop foreach jika tidak ada variabel lain yang diberikan.

  • Variabel iterator implisit dalam fungsi grep dan peta.

  • Tempat default untuk meletakkan record input ketika hasil operasi input-baris diuji dengan sendirinya sebagai satu-satunya kriteria pengujian while (yaitu,). Perhatikan bahwa di luar tes sementara, ini tidak akan terjadi.

Jenis Variabel Khusus

Berdasarkan penggunaan dan sifat variabel khusus, kita dapat mengelompokkannya dalam kategori berikut -

  • Variabel Khusus Skalar Global.
  • Variabel Khusus Array Global.
  • Variabel Khusus Hash Global.
  • Penanganan File Khusus Global.
  • Konstanta Khusus Global.
  • Variabel Khusus Ekspresi Reguler.
  • Variabel Khusus Filehandle.

Variabel Khusus Skalar Global

Berikut adalah daftar semua variabel khusus skalar. Kami telah membuat daftar nama Inggris yang sesuai bersama dengan nama simbolis.

$ _ Input default dan ruang pencarian pola.
$ ARG
$. Nomor baris input saat ini dari filehandle terakhir yang dibaca. Penutupan eksplisit pada filehandle menyetel ulang nomor baris.
$ NR
$ / Pemisah catatan masukan; baris baru secara default. Jika disetel ke string nol, itu memperlakukan baris kosong sebagai pembatas.
$ RS
$, Pemisah bidang keluaran untuk operator cetak.
$ OFS
$ \ Pemisah catatan keluaran untuk operator cetak.
$ ORS
$ " Seperti "$", kecuali bahwa ini berlaku untuk nilai daftar yang diinterpolasi menjadi string kutip ganda (atau string yang ditafsirkan serupa). Defaultnya adalah spasi.
$ LIST_SEPARATOR
$; Pemisah subskrip untuk emulasi array multidimensi. Default-nya adalah "\ 034".
$ SUBSCRIPT_SEPARATOR
$ ^ L Apa format output untuk melakukan formfeed. Default-nya adalah "\ f".
$ FORMAT_FORMFEED
$: Kumpulan karakter saat ini setelah string dapat dipecah untuk mengisi bidang lanjutan (dimulai dengan ^) dalam format. Default-nya adalah "\ n" ".
$ FORMAT_LINE_BREAK_CHARACTERS
$ ^ A Nilai akumulator tulis saat ini untuk garis format.
$ AKUMULATOR
$ # Berisi format keluaran untuk nomor yang dicetak (tidak digunakan lagi).
$ SERING
$? Status yang dikembalikan oleh penutupan pipa terakhir, perintah backtick (``), atau operator sistem.
$ CHILD_ERROR
$! Jika digunakan dalam konteks numerik, menghasilkan nilai saat ini dari variabel errno, mengidentifikasi kesalahan panggilan sistem terakhir. Jika digunakan dalam konteks string, menghasilkan string kesalahan sistem yang sesuai.
$OS_ERROR or $ERRNO
$ @ Pesan kesalahan sintaks Perl dari perintah eval terakhir.
$ EVAL_ERROR
$$ Pid dari proses Perl menjalankan skrip ini.
$ PROCESS_ID atau $ PID
$ < ID pengguna (uid) sebenarnya dari proses ini.
$REAL_USER_ID or $UID
$> ID pengguna efektif dari proses ini.
$ EFFECTIVE_USER_ID atau $ EUID
$ ( ID grup (gid) sebenarnya dari proses ini.
$REAL_GROUP_ID or $GID
$) Gid efektif dari proses ini.
$ EFFECTIVE_GROUP_ID atau $ EGID
$ 0 Berisi nama file yang berisi skrip Perl yang sedang dijalankan.
$ PROGRAM_NAME
$ [ Indeks elemen pertama dalam larik dan karakter pertama dalam substring. Default-nya adalah 0.
$] Mengembalikan versi plus tambalan yang dibagi 1000.
$ PERL_VERSION
$ ^ D Nilai saat ini dari flag debugging.
$ DEBUGGING
$ ^ E Pesan kesalahan diperpanjang pada beberapa platform.
$ EXTENDED_OS_ERROR
$ ^ F Deskriptor file sistem maksimum, biasanya 2.
$ SYSTEM_FD_MAX
$ ^ H Berisi petunjuk kompilator internal yang diaktifkan oleh modul pragmatis tertentu.
$ ^ Saya Nilai saat ini dari ekstensi edit di tempat. Gunakan undef untuk menonaktifkan pengeditan di tempat.
$ INPLACE_EDIT
$ ^ M Isi dari $M can be used as an emergency memory pool in case Perl dies with an out-of-memory error. Use of $M membutuhkan kompilasi khusus Perl. Lihat dokumen INSTALL untuk informasi lebih lanjut.
$ ^ O Berisi nama sistem operasi tempat biner Perl saat ini dikompilasi.
$ OSNAME
$ ^ P Bendera internal yang dihapus debugger sehingga tidak men-debug sendiri.
$ PERLDB
$ ^ T Waktu saat skrip mulai berjalan, dalam hitungan detik sejak periode.
$ BASETIME
$ ^ W. Nilai sakelar peringatan saat ini, baik benar atau salah.
$ PERINGATAN
$ ^ X Nama biner Perl itu sendiri dijalankan sebagai.
$ EXECUTABLE_NAME
$ ARGV Berisi nama file saat ini saat membaca dari <ARGV>.

Variabel Khusus Array Global

@AR_JKT Larik yang berisi argumen baris perintah yang ditujukan untuk skrip.
@INC Larik berisi daftar tempat untuk mencari skrip Perl untuk dievaluasi oleh konstruksi do, require, atau use.
@F Larik di mana baris input dipisahkan ketika tombol -a baris perintah diberikan.

Variabel Khusus Hash Global

% INC Hash berisi entri untuk nama file dari setiap file yang telah disertakan melalui lakukan atau memerlukan.
% ENV Hash yang berisi lingkungan Anda saat ini.
% SIG Hash digunakan untuk mengatur penangan sinyal untuk berbagai sinyal.

Penanganan File Khusus Global

ARGV Filehandle khusus yang mengulangi nama file baris perintah di @ARGV. Biasanya ditulis sebagai penanganan file null di <>.
STDERR Filehandle khusus untuk kesalahan standar dalam paket apa pun.
STDIN Filehandle khusus untuk input standar dalam paket apa pun.
STDOUT Filehandle khusus untuk keluaran standar dalam setiap paket.
DATA Filehandle khusus yang mengacu pada apa pun yang mengikuti token __END__ dalam file yang berisi skrip. Atau, penanganan file khusus untuk apa pun yang mengikuti token __DATA__ dalam file yang diperlukan, selama Anda membaca data dalam paket yang sama __DATA__ ditemukan di.
_ (garis bawah) Filehandle khusus yang digunakan untuk menyimpan informasi dari stat terakhir, lstat, atau operator pengujian file.

Konstanta Khusus Global

__AKHIR__ Menunjukkan akhir logis dari program Anda. Teks apa pun berikut ini diabaikan, tetapi dapat dibaca melalui filehandle DATA.
__MENGAJUKAN__ Merepresentasikan nama file pada titik program Anda di mana ia digunakan. Tidak diinterpolasi menjadi string.
__GARIS__ Merupakan nomor baris saat ini. Tidak diinterpolasi menjadi string.
__PAKET__ Merepresentasikan nama paket saat ini pada waktu kompilasi, atau tidak ditentukan jika tidak ada paket saat ini. Tidak diinterpolasi menjadi string.

Variabel Khusus Ekspresi Reguler

$ digit Berisi teks yang cocok dengan kumpulan tanda kurung yang sesuai di pola terakhir yang cocok. Misalnya, $ 1 cocok dengan apa pun yang ada di kumpulan tanda kurung pertama di ekspresi reguler sebelumnya.
$ & String yang cocok dengan kecocokan pola terakhir yang berhasil.
$ MATCH
$ ` String yang mendahului apa pun yang cocok dengan pencocokan pola terakhir yang berhasil.
$ PREMATCH
$ ' String yang mengikuti apa pun yang cocok dengan pencocokan pola terakhir yang berhasil.
$ POSTMATCH
$ + Tanda kurung terakhir cocok dengan pola pencarian terakhir. Ini berguna jika Anda tidak mengetahui kumpulan pola alternatif mana yang cocok. Misalnya: / Versi: (. *) | Revisi: (. *) / && ($rev = $+);
$ LAST_PAREN_MATCH

Variabel Khusus Filehandle

$ | Jika disetel ke bukan nol, paksa fflush (3) setelah setiap penulisan atau cetak pada saluran keluaran yang dipilih saat ini.
$ OUTPUT_AUTOFLUSH
$% Nomor halaman saat ini dari saluran keluaran yang saat ini dipilih.
$ FORMAT_PAGE_NUMBER
$ = Panjang halaman saat ini (garis yang dapat dicetak) dari saluran keluaran yang saat ini dipilih. Default-nya adalah 60.
$ FORMAT_LINES_PER_PAGE
$ - Jumlah baris tersisa di halaman saluran keluaran yang saat ini dipilih.
$ FORMAT_LINES_LEFT
$ ~ Nama format laporan saat ini untuk saluran keluaran yang saat ini dipilih. Default adalah nama filehandle.
$ FORMAT_NAME
$ ^ Nama format bagian atas halaman saat ini untuk saluran keluaran yang saat ini dipilih. Default adalah nama filehandle dengan _TOP ditambahkan.
$ FORMAT_TOP_NAME

Setiap pemrogram, tentu saja, memiliki preferensi sendiri-sendiri terkait pemformatan, tetapi ada beberapa pedoman umum yang akan membuat program Anda lebih mudah dibaca, dipahami, dan dipelihara.

Hal terpenting adalah menjalankan program Anda di bawah -w setiap saat. Anda dapat mematikannya secara eksplisit untuk bagian kode tertentu melalui pragma tanpa peringatan atau variabel $ ^ W jika perlu. Anda juga harus selalu menggunakan aturan ketat atau tahu alasannya mengapa tidak. Penggunaan sigtrap dan bahkan penggunaan pragma diagnostik juga terbukti berguna.

Mengenai estetika tata letak kode, satu-satunya hal yang sangat diperhatikan Larry adalah bahwa kurung tutup keriting dari BLOK multi-baris harus sejajar dengan kata kunci yang memulai konstruksi. Selain itu, dia memiliki preferensi lain yang tidak terlalu kuat -

  • Indentasi 4 kolom.
  • Membuka keriting pada baris yang sama dengan kata kunci, jika memungkinkan, jika tidak berbaris.
  • Spasi sebelum bukaan keriting dari BLOK multi-garis.
  • BLOK satu baris dapat diletakkan pada satu baris, termasuk ikal.
  • Tidak ada spasi sebelum titik koma.
  • Titik koma dihilangkan dalam BLOK satu baris "pendek".
  • Ruang di sekitar sebagian besar operator.
  • Spasi di sekitar subskrip "kompleks" (di dalam tanda kurung).
  • Garis kosong di antara bongkahan yang melakukan hal berbeda.
  • Orang lain yang tidak dipeluk.
  • Tidak ada spasi antara nama fungsi dan kurung buka.
  • Spasi setelah setiap koma.
  • Garis panjang putus setelah operator (kecuali dan dan atau).
  • Spasi setelah tanda kurung terakhir cocok pada baris saat ini.
  • Sejajarkan item yang sesuai secara vertikal.
  • Hilangkan tanda baca yang berlebihan selama kejelasan tidak berpengaruh.

Berikut adalah beberapa masalah gaya yang lebih substantif untuk dipikirkan: Hanya karena Anda DAPAT melakukan sesuatu dengan cara tertentu, tidak berarti Anda HARUS melakukannya dengan cara itu. Perl dirancang untuk memberi Anda beberapa cara untuk melakukan apa saja, jadi pertimbangkan untuk memilih yang paling mudah dibaca. Misalnya -

open(FOO,$foo) || die "Can't open $foo: $!";

Lebih baik dari -

die "Can't open $foo: $!" unless open(FOO,$foo);

Karena cara kedua menyembunyikan poin utama pernyataan dalam pengubah. Di samping itu,

print "Starting analysis\n" if $verbose;

Lebih baik dari -

$verbose && print "Starting analysis\n";

Karena poin utamanya bukanlah apakah pengguna mengetik -v atau tidak.

Jangan melalui putaran yang konyol untuk keluar dari loop di atas atau bawah, saat Perl menyediakan operator terakhir sehingga Anda dapat keluar di tengah. Cukup "kalahkan" sedikit untuk membuatnya lebih terlihat -

LINE:
for (;;) {
   statements;
   last LINE if $foo;
   next LINE if /^#/;
   statements;
}

Mari kita lihat beberapa poin penting lainnya -

  • Jangan takut untuk menggunakan label loop - mereka ada di sana untuk meningkatkan keterbacaan serta memungkinkan pemutusan loop bertingkat. Lihat contoh sebelumnya.

  • Hindari menggunakan grep () (atau map ()) atau `backticks` dalam konteks kosong, yaitu saat Anda membuang nilai kembaliannya. Semua fungsi tersebut memiliki nilai kembalian, jadi gunakanlah. Jika tidak, gunakan loop foreach () atau fungsi system () sebagai gantinya.

  • Untuk portabilitas, saat menggunakan fitur yang mungkin tidak diterapkan di setiap mesin, uji konstruksi di eval untuk melihat apakah gagal. Jika Anda tahu versi atau patchlevel apa dari fitur tertentu yang diimplementasikan, Anda dapat menguji $] ($ PERL_VERSION dalam bahasa Inggris) untuk melihat apakah fitur tersebut akan ada di sana. Modul Config juga memungkinkan Anda menginterogasi nilai-nilai yang ditentukan oleh program Configure ketika Perl diinstal.

  • Pilih pengenal mnemonik. Jika Anda tidak dapat mengingat apa artinya mnemonik, Anda mendapat masalah.

  • Meskipun pengenal pendek seperti $ gotit mungkin tidak masalah, gunakan garis bawah untuk memisahkan kata dalam pengenal yang lebih panjang. Biasanya lebih mudah dibaca$var_names_like_this than $VarNamesLikeThis, terutama untuk non-penutur asli bahasa Inggris. Ini juga merupakan aturan sederhana yang bekerja secara konsisten dengan VAR_NAMES_LIKE_THIS.

  • Nama paket terkadang merupakan pengecualian untuk aturan ini. Perl secara informal mencadangkan nama modul huruf kecil untuk modul "pragma" seperti integer dan strict. Modul lain harus dimulai dengan huruf kapital dan menggunakan huruf besar / kecil, tetapi mungkin tanpa garis bawah karena keterbatasan dalam representasi nama modul dari sistem file primitif sebagai file yang harus sesuai dengan beberapa byte yang jarang.

  • Jika Anda memiliki ekspresi reguler yang sangat berbulu, gunakan pengubah / x dan letakkan beberapa spasi untuk membuatnya terlihat seperti baris noise. Jangan gunakan garis miring sebagai pembatas jika ekspresi reguler Anda memiliki garis miring atau garis miring terbalik.

  • Selalu periksa kode balik dari panggilan sistem. Pesan kesalahan yang baik harus masuk ke STDERR, termasuk program mana yang menyebabkan masalah, apa panggilan sistem yang gagal dan argumennya, dan (SANGAT PENTING) harus berisi pesan kesalahan sistem standar untuk apa yang salah. Berikut contoh sederhana namun cukup -

opendir(D, $dir) or die "can't opendir $dir: $!";
  • Pikirkan tentang kegunaan kembali. Mengapa menyia-nyiakan kekuatan otak dalam satu kesempatan ketika Anda mungkin ingin melakukan hal seperti itu lagi? Pertimbangkan untuk menggeneralisasi kode Anda. Pertimbangkan untuk menulis modul atau kelas objek. Pertimbangkan untuk membuat kode Anda berjalan dengan bersih dengan menggunakan ketat dan menggunakan peringatan (atau -w) yang berlaku. Pertimbangkan untuk memberikan kode Anda. Pertimbangkan untuk mengubah seluruh pandangan dunia Anda. Pertimbangkan ... oh, sudahlah.

  • Bersikaplah konsisten.

  • Bersikap baik.

Ekspresi reguler adalah rangkaian karakter yang menentukan pola atau pola yang Anda lihat. Sintaks ekspresi reguler di Perl sangat mirip dengan yang akan Anda temukan dalam program pendukung ekspresi reguler lainnya, sepertised, grep, dan awk.

Metode dasar untuk menerapkan ekspresi reguler adalah dengan menggunakan operator pengikat pola = ~ dan !~. Operator pertama adalah operator tes dan penugasan.

Ada tiga operator ekspresi reguler dalam Perl.

  • Cocokkan Ekspresi Reguler - m //
  • Ganti Ekspresi Reguler - s ///
  • Menerjemahkan Ekspresi Reguler - tr ///

Garis miring di setiap kasus bertindak sebagai pembatas untuk ekspresi reguler (regex) yang Anda tentukan. Jika Anda merasa nyaman dengan pembatas lainnya, maka Anda dapat menggunakan garis miring sebagai pengganti.

Operator Pertandingan

Operator pencocokan, m //, digunakan untuk mencocokkan string atau pernyataan dengan ekspresi reguler. Misalnya, untuk mencocokkan urutan karakter "foo" dengan skalar $ bar, Anda dapat menggunakan pernyataan seperti ini -

#!/usr/bin/perl

$bar = "This is foo and again foo"; if ($bar =~ /foo/) {
   print "First time is matching\n";
} else {
   print "First time is not matching\n";
}

$bar = "foo"; if ($bar =~ /foo/) {
   print "Second time is matching\n";
} else {
   print "Second time is not matching\n";
}

Ketika program di atas dijalankan, itu menghasilkan hasil sebagai berikut -

First time is matching
Second time is matching

M // sebenarnya bekerja dengan cara yang sama seperti rangkaian operator q //. Anda dapat menggunakan kombinasi karakter yang cocok secara alami untuk bertindak sebagai pembatas ekspresi. Misalnya, m {}, m (), dan m> <semuanya valid. Jadi contoh di atas dapat ditulis ulang sebagai berikut -

#!/usr/bin/perl

$bar = "This is foo and again foo"; if ($bar =~ m[foo]) {
   print "First time is matching\n";
} else {
   print "First time is not matching\n";
}

$bar = "foo"; if ($bar =~ m{foo}) {
   print "Second time is matching\n";
} else {
   print "Second time is not matching\n";
}

Anda dapat menghilangkan m dari m // jika pembatasnya berupa garis miring ke depan, tetapi untuk semua pembatas lainnya Anda harus menggunakan awalan m.

Perhatikan bahwa seluruh ekspresi pencocokan, yaitu ekspresi di sebelah kiri = ~ atau! ~ Dan operator pencocokan, mengembalikan nilai true (dalam konteks skalar) jika ekspresi cocok. Oleh karena itu pernyataan -

$true = ($foo =~ m/foo/);

akan diatur $true to 1 if $foo cocok dengan regex, atau 0 jika kecocokan gagal. Dalam konteks daftar, kecocokan mengembalikan konten ekspresi yang dikelompokkan. Misalnya, saat mengekstrak jam, menit, dan detik dari string waktu, kita dapat menggunakan -

my ($hours, $minutes, $seconds) = ($time =~ m/(\d+):(\d+):(\d+)/);

Pengubah Operator Pertandingan

Operator pertandingan mendukung kumpulan pengubahnya sendiri. Pengubah / g memungkinkan pencocokan global. Pengubah / i akan membuat kecocokan case insensitive. Berikut adalah daftar lengkap modifikator

Sr.No. Pengubah & Deskripsi
1

i

Membuat kasus tidak peka huruf besar / kecil.

2

m

Menentukan bahwa jika string memiliki karakter baris baru atau karakter balik, operator ^ dan $ sekarang akan cocok dengan batas baris baru, bukan batas string.

3

o

Mengevaluasi ekspresi hanya sekali.

4

s

Memungkinkan penggunaan. untuk mencocokkan karakter baris baru.

5

x

Memungkinkan Anda menggunakan spasi putih dalam ekspresi untuk kejelasan.

6

g

Secara global menemukan semua kecocokan.

7

cg

Memungkinkan pencarian untuk melanjutkan bahkan setelah pertandingan global gagal.

Mencocokkan Hanya Sekali

Ada juga versi yang lebih sederhana dari operator pertandingan -? POLA? operator. Ini pada dasarnya identik dengan m // operator kecuali bahwa itu hanya cocok sekali dalam string yang Anda cari di antara setiap panggilan untuk disetel ulang.

Misalnya, Anda dapat menggunakan ini untuk mendapatkan elemen pertama dan terakhir dalam daftar -

#!/usr/bin/perl

@list = qw/food foosball subeo footnote terfoot canic footbrdige/;

foreach (@list) {
   $first = $1 if /(foo.*?)/; $last = $1 if /(foo.*)/; } print "First: $first, Last: $last\n";

Ketika program di atas dijalankan, itu menghasilkan hasil sebagai berikut -

First: foo, Last: footbrdige

Variabel Ekspresi Reguler

Variabel ekspresi reguler termasuk $, yang berisi apa pun yang cocok dengan pengelompokan terakhir; $&, yang berisi seluruh string yang cocok; $`, yang berisi semua sebelum string yang cocok; dan$', yang berisi semuanya setelah string yang cocok. Kode berikut menunjukkan hasilnya -

#!/usr/bin/perl

$string = "The food is in the salad bar";
$string =~ m/foo/; print "Before: $`\n";
print "Matched: $&\n"; print "After: $'\n";

Ketika program di atas dijalankan, itu menghasilkan hasil sebagai berikut -

Before: The
Matched: foo
After: d is in the salad bar

Operator Pergantian

Operator substitusi, s ///, sebenarnya hanyalah perpanjangan dari operator pencocokan yang memungkinkan Anda mengganti teks yang cocok dengan beberapa teks baru. Bentuk dasar operator adalah -

s/PATTERN/REPLACEMENT/;

POLA adalah ekspresi reguler untuk teks yang kita cari. REPLACEMENT adalah spesifikasi untuk teks atau ekspresi reguler yang ingin kita gunakan untuk mengganti teks yang ditemukan. Misalnya, kami dapat mengganti semua kemunculandog dengan cat menggunakan ekspresi reguler berikut -

#/user/bin/perl

$string = "The cat sat on the mat"; $string =~ s/cat/dog/;

print "$string\n";

Ketika program di atas dijalankan, itu menghasilkan hasil sebagai berikut -

The dog sat on the mat

Pengubah Operator Substitusi

Berikut adalah daftar semua pengubah yang digunakan dengan operator substitusi.

Sr.No. Pengubah & Deskripsi
1

i

Membuat kasus tidak peka huruf besar / kecil.

2

m

Menentukan bahwa jika string memiliki karakter baris baru atau karakter balik, operator ^ dan $ sekarang akan cocok dengan batas baris baru, bukan batas string.

3

o

Mengevaluasi ekspresi hanya sekali.

4

s

Memungkinkan penggunaan. untuk mencocokkan karakter baris baru.

5

x

Memungkinkan Anda menggunakan spasi putih dalam ekspresi untuk kejelasan.

6

g

Mengganti semua kemunculan ekspresi yang ditemukan dengan teks pengganti.

7

e

Mengevaluasi penggantian seolah-olah itu adalah pernyataan Perl, dan menggunakan nilai kembaliannya sebagai teks pengganti.

Operator Terjemahan

Terjemahan mirip, tetapi tidak identik, dengan prinsip substitusi, tetapi tidak seperti substitusi, terjemahan (atau transliterasi) tidak menggunakan ekspresi reguler untuk pencariannya pada nilai pengganti. Operator terjemahan adalah -

tr/SEARCHLIST/REPLACEMENTLIST/cds
y/SEARCHLIST/REPLACEMENTLIST/cds

Terjemahan menggantikan semua kemunculan karakter di SEARCHLIST dengan karakter yang sesuai di REPLACEMENTLIST. Misalnya, menggunakan "Kucing duduk di atas matras". string yang telah kami gunakan dalam bab ini -

#/user/bin/perl

$string = 'The cat sat on the mat'; $string =~ tr/a/o/;

print "$string\n";

Ketika program di atas dijalankan, itu menghasilkan hasil sebagai berikut -

The cot sot on the mot.

Rentang Perl standar juga dapat digunakan, memungkinkan Anda untuk menentukan rentang karakter baik berdasarkan huruf atau nilai numerik. Untuk mengubah kasus string, Anda mungkin menggunakan sintaks berikut sebagai penggantiuc fungsi.

$string =~ tr/a-z/A-Z/;

Pengubah Operator Terjemahan

Berikut adalah daftar operator yang terkait dengan terjemahan.

Sr.No. Pengubah & Deskripsi
1

c

Melengkapi SEARCHLIST.

2

d

Penghapusan ditemukan tetapi karakter tidak diganti.

3

s

Squash duplikat karakter yang diganti.

Pengubah / d menghapus karakter yang cocok dengan SEARCHLIST yang tidak memiliki entri terkait di REPLACEMENTLIST. Misalnya -

#!/usr/bin/perl 

$string = 'the cat sat on the mat.'; $string =~ tr/a-z/b/d;

print "$string\n";

Ketika program di atas dijalankan, itu menghasilkan hasil sebagai berikut -

b b   b.

Pengubah terakhir, / s, menghapus urutan karakter duplikat yang diganti, jadi -

#!/usr/bin/perl

$string = 'food';
$string = 'food'; $string =~ tr/a-z/a-z/s;

print "$string\n";

Ketika program di atas dijalankan, itu menghasilkan hasil sebagai berikut -

fod

Ekspresi Reguler yang Lebih Kompleks

Anda tidak hanya harus mencocokkan pada string tetap. Bahkan, Anda dapat mencocokkan apa saja yang Anda impikan dengan menggunakan ekspresi reguler yang lebih kompleks. Berikut lembar contekan singkat -

Tabel berikut mencantumkan sintaks ekspresi reguler yang tersedia di Python.

Sr.No. Pola & Deskripsi
1

^

Cocok di awal baris.

2

$

Pertandingan akhir baris.

3

.

Cocok dengan satu karakter apa pun kecuali baris baru. Menggunakan opsi m memungkinkannya untuk mencocokkan baris baru juga.

4

[...]

Mencocokkan salah satu karakter dalam tanda kurung.

5

[^...]

Cocok dengan satu karakter apa pun yang tidak ada dalam tanda kurung.

6

*

Cocok dengan 0 atau lebih kemunculan ekspresi sebelumnya.

7

+

Cocok dengan 1 atau lebih kemunculan ekspresi sebelumnya.

8

?

Cocok dengan 0 atau 1 kemunculan ekspresi sebelumnya.

9

{ n}

Cocok persis dengan n jumlah kemunculan ekspresi sebelumnya.

10

{ n,}

Cocok dengan n atau lebih kemunculan ekspresi sebelumnya.

11

{ n, m}

Cocok setidaknya n dan paling banyak m kemunculan ekspresi sebelumnya.

12

a| b

Cocok dengan a atau b.

13

\w

Cocok dengan karakter kata.

14

\W

Cocok dengan karakter bukan kata.

15

\s

Cocok dengan spasi. Setara dengan [\ t \ n \ r \ f].

16

\S

Cocok dengan nonwhitespace.

17

\d

Cocok dengan angka. Setara dengan [0-9].

18

\D

Cocok dengan nondigits.

19

\A

Cocok dengan awal string.

20

\Z

Cocok dengan ujung string. Jika ada baris baru, itu cocok sebelum baris baru.

21

\z

Cocok dengan ujung string.

22

\G

Mencocokkan poin di mana pertandingan terakhir selesai.

23

\b

Mencocokkan batas kata saat berada di luar tanda kurung. Cocok dengan spasi mundur (0x08) saat berada di dalam tanda kurung.

24

\B

Cocok dengan batasan bukan kata.

25

\n, \t, etc.

Cocok dengan baris baru, carriage return, tab, dll.

26

\1...\9

Cocok dengan subekspresi yang dikelompokkan ke-n.

27

\10

Cocok dengan subekspresi yang dikelompokkan ke-n jika sudah cocok. Jika tidak mengacu pada representasi oktal dari kode karakter.

28

[aeiou]

Cocok dengan satu karakter dalam set yang diberikan

29

[^aeiou]

Cocok dengan satu karakter di luar set yang diberikan

^ Metacharacter cocok dengan awal string dan $ metasymbol cocok dengan akhir string. Berikut beberapa contoh singkatnya.

# nothing in the string (start and end are adjacent)
/^$/   

# a three digits, each followed by a whitespace
# character (eg "3 4 5 ")
/(\d\s) {3}/  

# matches a string in which every
# odd-numbered letter is a (eg "abacadaf")
/(a.)+/  

# string starts with one or more digits
/^\d+/

# string that ends with one or more digits
/\d+$/

Mari kita lihat contoh lainnya.

#!/usr/bin/perl

$string = "Cats go Catatonic\nWhen given Catnip";
($start) = ($string =~ /\A(.*?) /);
@lines = $string =~ /^(.*?) /gm; print "First word: $start\n","Line starts: @lines\n";

Ketika program di atas dijalankan, itu menghasilkan hasil sebagai berikut -

First word: Cats
Line starts: Cats When

Mencocokkan Batas

Itu \bcocok di setiap batas kata, seperti yang didefinisikan oleh perbedaan antara kelas \ w dan kelas \ W. Karena \ w menyertakan karakter untuk sebuah kata, dan \ W sebaliknya, ini biasanya berarti penghentian sebuah kata. Itu\Bassertion cocok dengan posisi apa pun yang bukan merupakan batas kata. Misalnya -

/\bcat\b/ # Matches 'the cat sat' but not 'cat on the mat'
/\Bcat\B/ # Matches 'verification' but not 'the cat on the mat'
/\bcat\B/ # Matches 'catatonic' but not 'polecat'
/\Bcat\b/ # Matches 'polecat' but not 'catatonic'

Memilih Alternatif

The | karakter seperti standar atau bitwise ATAU dalam Perl. Ini menentukan kecocokan alternatif dalam ekspresi reguler atau grup. Misalnya, untuk mencocokkan "kucing" atau "anjing" dalam sebuah ekspresi, Anda dapat menggunakan ini -

if ($string =~ /cat|dog/)

Anda dapat mengelompokkan masing-masing elemen ekspresi untuk mendukung pencocokan kompleks. Mencari nama dua orang dapat dilakukan dengan dua tes terpisah, seperti ini -

if (($string =~ /Martin Brown/) ||  ($string =~ /Sharon Brown/)) This could be written as follows if ($string =~ /(Martin|Sharon) Brown/)

Pengelompokan Pencocokan

Dari sudut pandang ekspresi reguler, tidak ada perbedaan antara kecuali, mungkin, yang pertama sedikit lebih jelas.

$string =~ /(\S+)\s+(\S+)/; and $string =~ /\S+\s+\S+/;

Namun, manfaat pengelompokan adalah memungkinkan kita mengekstrak urutan dari ekspresi reguler. Pengelompokan dikembalikan sebagai daftar dalam urutan kemunculannya di aslinya. Misalnya, dalam fragmen berikut kami telah menarik jam, menit, dan detik dari sebuah string.

my ($hours, $minutes, $seconds) = ($time =~ m/(\d+):(\d+):(\d+)/);

Selain metode langsung ini, grup yang cocok juga tersedia dalam variabel $ x khusus, di mana x adalah jumlah grup dalam ekspresi reguler. Oleh karena itu, kita dapat menulis ulang contoh sebelumnya sebagai berikut -

#!/usr/bin/perl

$time = "12:05:30";

$time =~ m/(\d+):(\d+):(\d+)/; my ($hours, $minutes, $seconds) = ($1, $2, $3); print "Hours : $hours, Minutes: $minutes, Second: $seconds\n";

Ketika program di atas dijalankan, itu menghasilkan hasil sebagai berikut -

Hours : 12, Minutes: 05, Second: 30

Ketika grup digunakan dalam ekspresi substitusi, sintaks $ x dapat digunakan dalam teks pengganti. Jadi, kita dapat memformat ulang string tanggal menggunakan ini -

#!/usr/bin/perl

$date = '03/26/1999';
$date =~ s#(\d+)/(\d+)/(\d+)#$3/$1/$2#;

print "$date\n";

Ketika program di atas dijalankan, itu menghasilkan hasil sebagai berikut -

1999/03/26

Pernyataan \ G

Pernyataan \ G memungkinkan Anda untuk melanjutkan pencarian dari titik di mana pertandingan terakhir terjadi. Misalnya, dalam kode berikut, kami telah menggunakan \ G sehingga kami dapat mencari ke posisi yang benar dan kemudian mengekstrak beberapa informasi, tanpa harus membuat ekspresi reguler tunggal yang lebih kompleks -

#!/usr/bin/perl

$string = "The time is: 12:31:02 on 4/12/00";

$string =~ /:\s+/g; ($time) = ($string =~ /\G(\d+:\d+:\d+)/); $string =~ /.+\s+/g;
($date) = ($string =~ m{\G(\d+/\d+/\d+)});

print "Time: $time, Date: $date\n";

Ketika program di atas dijalankan, itu menghasilkan hasil sebagai berikut -

Time: 12:31:02, Date: 4/12/00

Pernyataan \ G sebenarnya hanyalah metasimbol yang setara dengan fungsi pos, jadi di antara panggilan ekspresi reguler Anda dapat terus menggunakan pos, dan bahkan mengubah nilai pos (dan karenanya \ G) dengan menggunakan pos sebagai subrutin lvalue.

Contoh Ekspresi Reguler

Karakter Literal

Sr.No. Contoh & Deskripsi
1

Perl

Cocokkan "Perl".

Kelas Karakter

Sr.No. Contoh & Deskripsi
1

[Pp]ython

Cocok dengan "Python" atau "python"

2

rub[ye]

Cocok dengan "ruby" atau "rube"

3

[aeiou]

Cocok dengan salah satu vokal huruf kecil

4

[0-9]

Cocok dengan angka apa pun; sama seperti [0123456789]

5

[a-z]

Cocok dengan semua huruf kecil ASCII

6

[A-Z]

Cocok dengan semua huruf ASCII huruf besar

7

[a-zA-Z0-9]

Cocok dengan salah satu dari yang di atas

8

[^aeiou]

Cocok dengan apa pun selain vokal huruf kecil

9

[^0-9]

Mencocokkan apa pun selain digit

Kelas Karakter Khusus

Sr.No. Contoh & Deskripsi
1

.

Cocok dengan karakter apa pun kecuali baris baru

2

\d

Cocok dengan angka: [0-9]

3

\D

Cocok dengan angka: [^ 0-9]

4

\s

Cocok dengan karakter spasi: [\ t \ r \ n \ f]

5

\S

Cocok dengan bukan spasi: [^ \ t \ r \ n \ f]

6

\w

Cocok dengan satu karakter kata: [A-Za-z0-9_]

7

\W

Cocok dengan karakter bukan kata: [^ A-Za-z0-9_]

Kasus Pengulangan

Sr.No. Contoh & Deskripsi
1

ruby?

Cocok dengan "gosok" atau "ruby": y adalah opsional

2

ruby*

Cocok dengan "gosok" ditambah 0 atau lebih ys

3

ruby+

Cocok "gosok" ditambah 1 atau lebih ys

4

\d{3}

Cocok persis dengan 3 digit

5

\d{3,}

Cocok dengan 3 digit atau lebih

6.

\d{3,5}

Cocok dengan 3, 4, atau 5 digit

Pengulangan Nongreedy

Ini cocok dengan jumlah pengulangan terkecil -

Sr.No. Contoh & Deskripsi
1

<.*>

Pengulangan serakah: cocok dengan "<python> perl>"

2

<.*?>

Nongreedy: mencocokkan "<python>" dengan "<python> perl>"

Pengelompokan dengan Tanda Kurung

Sr.No. Contoh & Deskripsi
1

\D\d+

Tidak ada grup: + berulang \ d

2

(\D\d)+

Dikelompokkan: + mengulangi \ D \ d pasangan

3

([Pp]ython(, )?)+

Cocokkan "Python", "Python, python, python", dll.

Referensi latar

Ini cocok dengan grup yang sebelumnya cocok lagi -

Sr.No. Contoh & Deskripsi
1

([Pp])ython&\1ails

Cocok dengan python & pails atau Python & Pails

2

(['"])[^\1]*\1

String kutip tunggal atau ganda. \ 1 cocok dengan apa pun yang cocok dengan grup pertama. \ 2 cocok dengan apapun yang cocok dengan grup ke-2, dll.

Alternatif

Sr.No. Contoh & Deskripsi
1

python|perl

Cocok dengan "python" atau "perl"

2

rub(y|le))

Cocok dengan "ruby" atau "ruble"

3

Python(!+|\?)

"Python" diikuti oleh satu atau lebih! atau satu?

Jangkar

Ini perlu menentukan posisi pertandingan.

Sr.No. Contoh & Deskripsi
1

^Python

Cocok dengan "Python" di awal string atau baris internal

2

Python$

Cocok dengan "Python" di akhir string atau baris

3

\APython

Cocok dengan "Python" di awal string

4

Python\Z

Cocok dengan "Python" di akhir string

5

\bPython\b

Cocok dengan "Python" di batas kata

6

\brub\B

\ B adalah batas bukan kata: cocokkan "gosok" dalam "rube" dan "ruby" tetapi tidak sendirian

7

Python(?=!)

Cocok dengan "Python", jika diikuti dengan tanda seru

8

Python(?!!)

Cocok dengan "Python", jika tidak diikuti dengan tanda seru

Sintaks Khusus dengan Tanda Kurung

Sr.No. Contoh & Deskripsi
1

R(?#comment)

Cocok dengan "R". Sisanya adalah komentar

2

R(?i)uby

Tidak peka huruf besar / kecil saat mencocokkan "uby"

3

R(?i:uby)

Sama seperti di atas

4

rub(?:y|le))

Kelompokkan hanya tanpa membuat \ 1 referensi latar

Menggunakan Utilitas sendmail

Mengirim Pesan Biasa

Jika Anda bekerja di mesin Linux / Unix maka Anda cukup menggunakan sendmailutilitas di dalam program Perl Anda untuk mengirim email. Berikut adalah contoh skrip yang dapat mengirim email ke ID email tertentu. Pastikan jalur yang diberikan untuk utilitas sendmail sudah benar. Ini mungkin berbeda untuk mesin Linux / Unix Anda.

#!/usr/bin/perl
 
$to = '[email protected]';
$from = '[email protected]'; $subject = 'Test Email';
$message = 'This is test email sent by Perl Script'; open(MAIL, "|/usr/sbin/sendmail -t"); # Email Header print MAIL "To: $to\n";
print MAIL "From: $from\n"; print MAIL "Subject: $subject\n\n";
# Email Body
print MAIL $message;

close(MAIL);
print "Email Sent Successfully\n";

Sebenarnya, skrip di atas adalah skrip email klien, yang akan membuat draf email dan dikirimkan ke server yang berjalan secara lokal di mesin Linux / Unix Anda. Script ini tidak akan bertanggung jawab untuk mengirim email ke tujuan sebenarnya. Jadi, Anda harus memastikan server email dikonfigurasi dengan benar dan berjalan di mesin Anda untuk mengirim email ke ID email yang diberikan.

Mengirim Pesan HTML

Jika Anda ingin mengirim email berformat HTML menggunakan sendmail, maka Anda hanya perlu menambahkan Content-type: text/html\n di bagian header email sebagai berikut -

#!/usr/bin/perl
 
$to = '[email protected]';
$from = '[email protected]'; $subject = 'Test Email';
$message = '<h1>This is test email sent by Perl Script</h1>'; open(MAIL, "|/usr/sbin/sendmail -t"); # Email Header print MAIL "To: $to\n";
print MAIL "From: $from\n"; print MAIL "Subject: $subject\n\n";
print MAIL "Content-type: text/html\n";
# Email Body
print MAIL $message;

close(MAIL);
print "Email Sent Successfully\n";

Menggunakan MIME :: Lite Module

Jika Anda bekerja pada mesin windows, maka Anda tidak akan memiliki akses pada utilitas sendmail. Tetapi Anda memiliki alternatif untuk menulis klien email Anda sendiri menggunakan modul MIME: Lite perl. Anda dapat mengunduh modul ini dari MIME-Lite-3.01.tar.gz dan menginstalnya di komputer Windows atau Linux / Unix Anda. Untuk menginstalnya ikuti langkah-langkah sederhana -

$tar xvfz MIME-Lite-3.01.tar.gz
$cd MIME-Lite-3.01 $perl Makefile.PL
$make $make install

Itu saja dan Anda akan menginstal modul MIME :: Lite di mesin Anda. Sekarang Anda siap untuk mengirim email Anda dengan skrip sederhana yang dijelaskan di bawah ini.

Mengirim Pesan Biasa

Sekarang berikut adalah skrip yang akan menangani pengiriman email ke ID email yang diberikan -

#!/usr/bin/perl
use MIME::Lite;
 
$to = '[email protected]'; $cc = '[email protected]';
$from = '[email protected]'; $subject = 'Test Email';
$message = 'This is test email sent by Perl Script'; $msg = MIME::Lite->new(
                 From     => $from, To => $to,
                 Cc       => $cc, Subject => $subject,
                 Data     => $message ); $msg->send;
print "Email Sent Successfully\n";

Mengirim Pesan HTML

Jika Anda ingin mengirim email berformat HTML menggunakan sendmail, maka Anda hanya perlu menambahkan Content-type: text/html\ndi bagian tajuk email. Berikut ini adalah skrip, yang akan menangani pengiriman email berformat HTML -

#!/usr/bin/perl
use MIME::Lite;
 
$to = '[email protected]'; $cc = '[email protected]';
$from = '[email protected]'; $subject = 'Test Email';
$message = '<h1>This is test email sent by Perl Script</h1>'; $msg = MIME::Lite->new(
                 From     => $from, To => $to,
                 Cc       => $cc, Subject => $subject,
                 Data     => $message ); $msg->attr("content-type" => "text/html");         
$msg->send;
print "Email Sent Successfully\n";

Mengirim Lampiran

Jika Anda ingin mengirim lampiran, maka skrip berikut melayani tujuan -

#!/usr/bin/perl
use MIME::Lite;
 
$to = '[email protected]';
$cc = '[email protected]'; $from = '[email protected]';
$subject = 'Test Email'; $message = 'This is test email sent by Perl Script';

$msg = MIME::Lite->new( From => $from,
                 To       => $to, Cc => $cc,
                 Subject  => $subject, Type => 'multipart/mixed' ); # Add your text message. $msg->attach(Type         => 'text',
             Data         => $message ); # Specify your file as attachement. $msg->attach(Type         => 'image/gif',
             Path         => '/tmp/logo.gif',
             Filename     => 'logo.gif',
             Disposition  => 'attachment'
            );       
$msg->send;
print "Email Sent Successfully\n";

Anda dapat melampirkan file sebanyak yang Anda suka di email Anda menggunakan metode attach ().

Menggunakan Server SMTP

Jika mesin Anda tidak menjalankan server email, maka Anda dapat menggunakan server email lain yang tersedia di lokasi jarak jauh. Tetapi untuk menggunakan server email lain, Anda perlu memiliki id, kata sandi, URL, dll. Setelah Anda memiliki semua informasi yang diperlukan, Anda hanya perlu memberikan informasi itu disend() metode sebagai berikut -

$msg->send('smtp', "smtp.myisp.net", AuthUser=>"id", AuthPass=>"password" );

Anda dapat menghubungi administrator server email Anda untuk mendapatkan informasi yang digunakan di atas dan jika id pengguna dan kata sandi belum tersedia maka administrator Anda dapat membuatnya dalam beberapa menit.

Apa itu Socket?

Socket adalah mekanisme Berkeley UNIX untuk membuat koneksi dupleks virtual antara proses yang berbeda. Ini kemudian porting ke setiap OS yang diketahui memungkinkan komunikasi antar sistem di seluruh lokasi geografis yang berjalan pada software OS yang berbeda. Jika bukan karena soket, sebagian besar komunikasi jaringan antar sistem tidak akan pernah terjadi.

Melihat lebih dekat; sistem komputer pada suatu jaringan menerima dan mengirimkan informasi yang diinginkan oleh berbagai aplikasi yang berjalan di dalamnya. Informasi ini dirutekan ke sistem, karena alamat IP unik ditetapkan untuk itu. Pada sistem, informasi ini diberikan ke aplikasi yang relevan, yang mendengarkan pada port yang berbeda. Misalnya browser internet mendengarkan pada port 80 untuk informasi yang diterima dari server web. Kami juga dapat menulis aplikasi kustom kami yang dapat mendengarkan dan mengirim / menerima informasi pada nomor port tertentu.

Untuk saat ini, mari kita simpulkan bahwa soket adalah alamat IP dan port, yang memungkinkan koneksi untuk mengirim dan menerima data melalui jaringan.

Untuk menjelaskan konsep soket yang disebutkan di atas, kita akan mengambil contoh Pemrograman Klien - Server menggunakan Perl. Untuk menyelesaikan arsitektur server klien, kita harus melalui langkah-langkah berikut -

Untuk Membuat Server

  • Buat soket menggunakan socket panggilan.

  • Ikat soket ke alamat port menggunakan bind panggilan.

  • Dengarkan soket di alamat port menggunakan listen panggilan.

  • Terima koneksi klien menggunakan accept panggilan.

Untuk Membuat Klien

  • Buat soket dengan socket panggilan.

  • Hubungkan (soket) ke server menggunakan connect panggilan.

Diagram berikut menunjukkan urutan lengkap panggilan yang digunakan oleh Klien dan Server untuk berkomunikasi satu sama lain -

Panggilan Soket Sisi Server

Panggilan socket ()

Itu socket()panggilan adalah panggilan pertama dalam membuat koneksi jaringan membuat soket. Panggilan ini memiliki sintaks berikut -

socket( SOCKET, DOMAIN, TYPE, PROTOCOL );

Panggilan di atas membuat SOCKET dan tiga argumen lainnya adalah integer yang harus memiliki nilai berikut untuk koneksi TCP / IP.

  • DOMAINharus PF_INET. Kemungkinan 2 di komputer Anda.

  • TYPE harus SOCK_STREAM untuk koneksi TCP / IP.

  • PROTOCOL seharusnya (getprotobyname('tcp'))[2]. Ini adalah protokol khusus seperti TCP yang diucapkan melalui soket.

Jadi panggilan fungsi soket yang dikeluarkan oleh server akan menjadi seperti ini -

use Socket     # This defines PF_INET and SOCK_STREAM

socket(SOCKET,PF_INET,SOCK_STREAM,(getprotobyname('tcp'))[2]);

Panggilan bind ()

Soket yang dibuat oleh panggilan socket () tidak berguna sampai mereka terikat ke nama host dan nomor port. Server menggunakan yang berikut inibind() berfungsi untuk menentukan port di mana mereka akan menerima koneksi dari klien.

bind( SOCKET, ADDRESS );

Di sini SOCKET adalah deskriptor yang dikembalikan oleh panggilan socket () dan ADDRESS adalah alamat soket (untuk TCP / IP) yang mengandung tiga elemen -

  • Keluarga alamat (Untuk TCP / IP, itu adalah AF_INET, mungkin 2 di sistem Anda).

  • Nomor port (misalnya 21).

  • Alamat internet komputer (misalnya 10.12.12.168).

Karena bind () digunakan oleh server, yang tidak perlu mengetahui alamatnya sendiri sehingga daftar argumen terlihat seperti ini -

use Socket        # This defines PF_INET and SOCK_STREAM

$port = 12345; # The unique port used by the sever to listen requests $server_ip_address = "10.12.12.168";
bind( SOCKET, pack_sockaddr_in($port, inet_aton($server_ip_address)))
   or die "Can't bind to port $port! \n";

Itu or die klausa sangat penting karena jika server mati tanpa koneksi yang luar biasa, port tidak akan segera dapat digunakan kembali kecuali Anda menggunakan opsi SO_REUSEADDR menggunakan setsockopt()fungsi. Sinipack_sockaddr_in() fungsi digunakan untuk mengemas Port dan alamat IP ke dalam format biner.

Panggilan dengar ()

Jika ini adalah program server, maka diperlukan panggilan ke listen()pada port tertentu untuk mendengarkan, yaitu menunggu permintaan masuk. Panggilan ini memiliki sintaks berikut -

listen( SOCKET, QUEUESIZE );

Panggilan di atas menggunakan deskriptor SOCKET yang dikembalikan oleh panggilan socket () dan QUEUESIZE adalah jumlah maksimum permintaan koneksi luar biasa yang diizinkan secara bersamaan.

Panggilan accept ()

Jika ini adalah program server, maka diperlukan panggilan ke access()berfungsi untuk menerima koneksi masuk. Panggilan ini memiliki sintaks berikut -

accept( NEW_SOCKET, SOCKET );

Panggilan terima menerima deskriptor SOCKET yang dikembalikan oleh fungsi socket () dan setelah berhasil diselesaikan, deskriptor soket baru NEW_SOCKET dikembalikan untuk semua komunikasi di masa mendatang antara klien dan server. Jika panggilan access () gagal, maka FLASE akan dikembalikan yang didefinisikan dalam modul Socket yang telah kita gunakan pada awalnya.

Umumnya, accept () digunakan dalam loop tak terbatas. Segera setelah satu koneksi tiba, server membuat proses anak untuk menghadapinya atau menyajikannya sendiri dan kemudian kembali untuk mendengarkan lebih banyak koneksi.

while(1) {
   accept( NEW_SOCKET, SOCKT );
   .......
}

Sekarang semua panggilan yang terkait dengan server telah selesai dan mari kita lihat panggilan yang akan dibutuhkan oleh klien.

Panggilan Socket Sisi Klien

Panggilan connect ()

Jika Anda akan menyiapkan program klien, maka pertama Anda akan menggunakan socket() panggilan untuk membuat soket dan kemudian Anda harus menggunakan connect()panggilan untuk terhubung ke server. Anda sudah melihat sintaks panggilan socket () dan itu akan tetap sama dengan panggilan socket () server, tetapi di sini adalah sintaks untukconnect() panggil -

connect( SOCKET, ADDRESS );

Di sini SCOKET adalah deskriptor soket yang dikembalikan oleh panggilan soket () yang dikeluarkan oleh klien dan ALAMAT adalah alamat soket yang mirip dengan panggilan bind , kecuali bahwa ini berisi alamat IP dari server jauh.

$port = 21;    # For example, the ftp port
$server_ip_address = "10.12.12.168"; connect( SOCKET, pack_sockaddr_in($port, inet_aton($server_ip_address))) or die "Can't connect to port $port! \n";

Jika Anda berhasil terhubung ke server, maka Anda dapat mulai mengirim perintah Anda ke server menggunakan deskriptor SOCKET, jika tidak, klien Anda akan keluar dengan memberikan pesan kesalahan.

Klien - Contoh Server

Berikut ini adalah kode Perl untuk mengimplementasikan program klien-server sederhana menggunakan soket Perl. Di sini server mendengarkan permintaan masuk dan begitu koneksi dibuat, itu hanya menjawab Senyum dari server . Klien membaca pesan itu dan mencetak di layar. Mari kita lihat bagaimana ini dilakukan, dengan asumsi kita memiliki server dan klien kita pada mesin yang sama.

Script untuk Membuat Server

#!/usr/bin/perl -w
# Filename : server.pl

use strict;
use Socket;

# use port 7890 as default
my $port = shift || 7890; my $proto = getprotobyname('tcp');
my $server = "localhost"; # Host IP running the server # create a socket, make it reusable socket(SOCKET, PF_INET, SOCK_STREAM, $proto)
   or die "Can't open socket $!\n"; setsockopt(SOCKET, SOL_SOCKET, SO_REUSEADDR, 1) or die "Can't set socket option to SO_REUSEADDR $!\n";

# bind to a port, then listen
bind( SOCKET, pack_sockaddr_in($port, inet_aton($server)))
   or die "Can't bind to port $port! \n"; listen(SOCKET, 5) or die "listen: $!";
print "SERVER started on port $port\n"; # accepting a connection my $client_addr;
while ($client_addr = accept(NEW_SOCKET, SOCKET)) { # send them a message, close connection my $name = gethostbyaddr($client_addr, AF_INET ); print NEW_SOCKET "Smile from the server"; print "Connection recieved from $name\n";
   close NEW_SOCKET;
}

Untuk menjalankan server dalam mode latar belakang, jalankan perintah berikut pada prompt Unix -

$perl sever.pl&

Script untuk Membuat Klien

!/usr/bin/perl -w
# Filename : client.pl

use strict;
use Socket;

# initialize host and port
my $host = shift || 'localhost';
my $port = shift || 7890; my $server = "localhost";  # Host IP running the server

# create the socket, connect to the port
socket(SOCKET,PF_INET,SOCK_STREAM,(getprotobyname('tcp'))[2])
   or die "Can't create a socket $!\n"; connect( SOCKET, pack_sockaddr_in($port, inet_aton($server))) or die "Can't connect to port $port! \n";

my $line; while ($line = <SOCKET>) {
   print "$line\n"; } close SOCKET or die "close: $!";

Sekarang mari kita mulai klien kita pada prompt perintah, yang akan terhubung ke server dan membaca pesan yang dikirim oleh server dan menampilkan hal yang sama di layar sebagai berikut -

$perl client.pl
Smile from the server

NOTE - Jika Anda memberikan alamat IP sebenarnya dalam notasi titik, disarankan untuk memberikan alamat IP dalam format yang sama di klien dan server untuk menghindari kebingungan.

Kami telah mempelajari referensi di Perl dan Perl anonymous arrays and hashes. Konsep Berorientasi Objek di Perl sangat banyak didasarkan pada referensi dan array anonim dan hashes. Mari mulai mempelajari konsep dasar Perl Berorientasi Objek.

Dasar Objek

Ada tiga istilah utama, dijelaskan dari sudut pandang bagaimana Perl menangani objek. Istilah-istilah tersebut adalah objek, kelas, dan metode.

  • Sebuah objectdi dalam Perl hanyalah sebuah referensi ke tipe data yang mengetahui kelasnya. Objek disimpan sebagai referensi dalam variabel skalar. Karena skalar hanya berisi referensi ke objek, skalar yang sama dapat menampung objek yang berbeda di kelas yang berbeda.

  • SEBUAH class dalam Perl adalah paket yang berisi metode terkait yang diperlukan untuk membuat dan memanipulasi objek.

  • SEBUAH methoddalam Perl adalah subrutin, didefinisikan dengan paket. Argumen pertama untuk metode ini adalah referensi objek atau nama paket, bergantung pada apakah metode tersebut memengaruhi objek saat ini atau kelasnya.

Perl menyediakan a bless() function, yang digunakan untuk mengembalikan referensi yang akhirnya menjadi objek.

Mendefinisikan Kelas

Sangat mudah untuk mendefinisikan kelas di Perl. Sebuah kelas terkait dengan Paket Perl dalam bentuk yang paling sederhana. Untuk membuat kelas di Perl, pertama kita membangun sebuah paket.

Paket adalah unit mandiri dari variabel dan subrutin yang ditentukan pengguna, yang dapat digunakan kembali berulang kali.

Paket Perl menyediakan namespace terpisah di dalam program Perl yang menjaga subrutin dan variabel independen dari konflik dengan yang ada di paket lain.

Untuk mendeklarasikan kelas bernama Person di Perl kita lakukan -

package Person;

Cakupan definisi paket meluas ke akhir file, atau sampai kata kunci paket lain ditemukan.

Membuat dan Menggunakan Objek

Untuk membuat sebuah instance dari sebuah kelas (sebuah objek) kita membutuhkan sebuah konstruktor objek. Konstruktor ini adalah metode yang ditentukan dalam paket. Kebanyakan pemrogram memilih untuk menamai metode konstruktor objek ini baru, tetapi di Perl Anda dapat menggunakan nama apa pun.

Anda dapat menggunakan jenis variabel Perl sebagai objek di Perl. Kebanyakan programmer Perl memilih referensi ke array atau hashes.

Mari kita buat konstruktor untuk kelas Person kita menggunakan referensi hash Perl. Saat membuat objek, Anda perlu menyediakan konstruktor, yang merupakan subrutin di dalam paket yang mengembalikan referensi objek. Referensi objek dibuat dengan memberkati referensi ke kelas paket. Misalnya -

package Person;
sub new {
   my $class = shift;
   my $self = { _firstName => shift, _lastName => shift, _ssn => shift, }; # Print all the values just for clarification. print "First Name is $self->{_firstName}\n";
   print "Last Name is $self->{_lastName}\n"; print "SSN is $self->{_ssn}\n";
   bless $self, $class;
   return $self;
}

Sekarang Mari kita lihat cara membuat Object.

$object = new Person( "Mohammad", "Saleem", 23234345);

Anda dapat menggunakan hash sederhana di consturctor Anda jika Anda tidak ingin menetapkan nilai apa pun ke variabel kelas apa pun. Misalnya -

package Person;
sub new {
   my $class = shift; my $self = {};
   bless $self, $class;
   return $self;
}

Mendefinisikan Metode

Bahasa berorientasi objek lainnya memiliki konsep keamanan data untuk mencegah programmer mengubah data objek secara langsung dan mereka menyediakan metode pengakses untuk memodifikasi data objek. Perl tidak memiliki variabel privat tetapi kita masih dapat menggunakan konsep metode helper untuk memanipulasi data objek.

Mari kita tentukan metode pembantu untuk mendapatkan nama depan seseorang -

sub getFirstName {
   return $self->{_firstName};
}

Fungsi pembantu lain untuk mengatur nama depan orang -

sub setFirstName {
   my ( $self, $firstName ) = @_;
   $self->{_firstName} = $firstName if defined($firstName); return $self->{_firstName};
}

Sekarang mari kita lihat contoh lengkapnya: Keep Person package dan helper functions ke dalam file Person.pm.

#!/usr/bin/perl 

package Person;

sub new {
   my $class = shift; my $self = {
      _firstName => shift,
      _lastName  => shift,
      _ssn       => shift,
   };
   # Print all the values just for clarification.
   print "First Name is $self->{_firstName}\n"; print "Last Name is $self->{_lastName}\n";
   print "SSN is $self->{_ssn}\n"; bless $self, $class; return $self;
}
sub setFirstName {
   my ( $self, $firstName ) = @_;
   $self->{_firstName} = $firstName if defined($firstName); return $self->{_firstName};
}

sub getFirstName {
   my( $self ) = @_; return $self->{_firstName};
}
1;

Sekarang mari kita gunakan objek Person di file employee.pl sebagai berikut -

#!/usr/bin/perl

use Person;

$object = new Person( "Mohammad", "Saleem", 23234345); # Get first name which is set using constructor. $firstName = $object->getFirstName(); print "Before Setting First Name is : $firstName\n";

# Now Set first name using helper function.
$object->setFirstName( "Mohd." ); # Now get first name set by helper function. $firstName = $object->getFirstName(); print "Before Setting First Name is : $firstName\n";

Ketika kami menjalankan program di atas, ini menghasilkan hasil sebagai berikut -

First Name is Mohammad
Last Name is Saleem
SSN is 23234345
Before Setting First Name is : Mohammad
Before Setting First Name is : Mohd.

Warisan

Pemrograman berorientasi objek memiliki konsep yang sangat bagus dan berguna yang disebut pewarisan. Pewarisan berarti bahwa properti dan metode kelas induk akan tersedia untuk kelas anak. Jadi, Anda tidak perlu menulis kode yang sama berulang kali, Anda dapat mewarisi kelas induk.

Misalnya, kita dapat memiliki kelas Karyawan, yang diwarisi dari Orang. Ini disebut sebagai hubungan "isa" karena karyawan adalah seseorang. Perl memiliki variabel khusus, @ISA, untuk membantu dalam hal ini. @ISA mengatur pewarisan (metode).

Berikut adalah poin penting yang harus dipertimbangkan saat menggunakan warisan -

  • Perl mencari kelas dari objek yang ditentukan untuk metode atau atribut yang diberikan, yaitu variabel.

  • Perl mencari kelas yang ditentukan dalam array @ISA kelas objek.

  • Jika tidak ada metode yang ditemukan pada langkah 1 atau 2, Perl menggunakan subrutin AUTOLOAD, jika ditemukan di pohon @ISA.

  • Jika metode yang cocok masih tidak dapat ditemukan, Perl mencari metode dalam kelas UNIVERSAL (paket) yang datang sebagai bagian dari pustaka Perl standar.

  • Jika metode ini masih belum ditemukan, Perl menyerah dan memunculkan pengecualian runtime.

Jadi untuk membuat kelas Karyawan baru yang akan mewarisi metode dan atribut dari kelas Person kita, kita cukup membuat kode sebagai berikut: Simpan kode ini ke Employee.pm.

#!/usr/bin/perl

package Employee;
use Person;
use strict;
our @ISA = qw(Person);    # inherits from Person

Sekarang Kelas Karyawan memiliki semua metode dan atribut yang diwarisi dari kelas Person dan Anda dapat menggunakannya sebagai berikut: Gunakan file main.pl untuk mengujinya -

#!/usr/bin/perl

use Employee;

$object = new Employee( "Mohammad", "Saleem", 23234345); # Get first name which is set using constructor. $firstName = $object->getFirstName(); print "Before Setting First Name is : $firstName\n";

# Now Set first name using helper function.
$object->setFirstName( "Mohd." ); # Now get first name set by helper function. $firstName = $object->getFirstName(); print "After Setting First Name is : $firstName\n";

Ketika kami menjalankan program di atas, ini menghasilkan hasil sebagai berikut -

First Name is Mohammad
Last Name is Saleem
SSN is 23234345
Before Setting First Name is : Mohammad
Before Setting First Name is : Mohd.

Metode Mengganti

Kelas anak Karyawan mewarisi semua metode dari Orang kelas induk. Tetapi jika Anda ingin mengganti metode tersebut di kelas anak Anda, maka Anda dapat melakukannya dengan memberikan implementasi Anda sendiri. Anda dapat menambahkan fungsi tambahan di kelas anak atau Anda dapat menambahkan atau mengubah fungsionalitas metode yang ada di kelas induknya. Ini dapat dilakukan sebagai berikut: memodifikasi file Employee.pm.

#!/usr/bin/perl

package Employee;
use Person;
use strict;
our @ISA = qw(Person);    # inherits from Person

# Override constructor
sub new {
   my ($class) = @_; # Call the constructor of the parent class, Person. my $self = $class->SUPER::new( $_[1], $_[2], $_[3] );
   # Add few more attributes
   $self->{_id} = undef; $self->{_title} = undef;
   bless $self, $class;
   return $self; } # Override helper function sub getFirstName { my( $self ) = @_;
   # This is child class function.
   print "This is child class helper function\n";
   return $self->{_firstName}; } # Add more methods sub setLastName{ my ( $self, $lastName ) = @_; $self->{_lastName} = $lastName if defined($lastName);
   return $self->{_lastName}; } sub getLastName { my( $self ) = @_;
   return $self->{_lastName};
}

1;

Sekarang mari kita coba lagi menggunakan objek Employee di file main.pl kita dan menjalankannya.

#!/usr/bin/perl

use Employee;

$object = new Employee( "Mohammad", "Saleem", 23234345);
# Get first name which is set using constructor.
$firstName = $object->getFirstName();

print "Before Setting First Name is : $firstName\n"; # Now Set first name using helper function. $object->setFirstName( "Mohd." );

# Now get first name set by helper function.
$firstName = $object->getFirstName();
print "After Setting First Name is : $firstName\n";

Ketika kami menjalankan program di atas, ini menghasilkan hasil sebagai berikut -

First Name is Mohammad
Last Name is Saleem
SSN is 23234345
This is child class helper function
Before Setting First Name is : Mohammad
This is child class helper function
After Setting First Name is : Mohd.

Pemuatan Otomatis Default

Perl menawarkan fitur yang tidak akan Anda temukan dalam bahasa pemrograman lain: subrutin default. Artinya, jika Anda mendefinisikan fungsi yang dipanggilAUTOLOAD(),maka setiap panggilan ke subrutin yang tidak ditentukan akan memanggil fungsi AUTOLOAD () secara otomatis. Nama dari subrutin yang hilang dapat diakses dalam subrutin ini sebagai $ AUTOLOAD.

Fungsionalitas pemuatan otomatis default sangat berguna untuk penanganan kesalahan. Berikut adalah contoh untuk mengimplementasikan AUTOLOAD, Anda dapat mengimplementasikan fungsi ini dengan cara Anda sendiri.

sub AUTOLOAD {
   my $self = shift; my $type = ref ($self) || croak "$self is not an object";
   my $field = $AUTOLOAD;
   $field =~ s/.*://; unless (exists $self->{$field}) { croak "$field does not exist in object/class $type"; } if (@_) { return $self->($name) = shift; } else { return $self->($name);
   }
}

Penghancur dan Pengumpulan Sampah

Jika Anda telah memprogram menggunakan pemrograman berorientasi objek sebelumnya, maka Anda akan menyadari kebutuhan untuk membuat file destructoruntuk membebaskan memori yang dialokasikan ke objek setelah Anda selesai menggunakannya. Perl melakukan ini secara otomatis untuk Anda segera setelah objek keluar dari ruang lingkup.

Jika Anda ingin menerapkan destruktor Anda, yang harus menangani file penutup atau melakukan beberapa pemrosesan tambahan maka Anda perlu menentukan metode khusus yang disebut DESTROY. Metode ini akan dipanggil pada objek tepat sebelum Perl membebaskan memori yang dialokasikan padanya. Dalam hal lainnya, metode HANCURKAN sama seperti metode lainnya, dan Anda dapat menerapkan logika apa pun yang Anda inginkan di dalam metode ini.

Metode destruktor hanyalah fungsi anggota (subrutin) bernama DESTROY, yang akan dipanggil secara otomatis dalam kasus berikut -

  • Ketika variabel referensi objek keluar dari ruang lingkup.
  • Ketika variabel referensi objek tidak terdefinisi.
  • Saat skrip berakhir
  • Saat penerjemah perl berhenti

Sebagai Contoh, Anda cukup meletakkan metode berikut HANCURKAN di kelas Anda -

package MyClass;
...
sub DESTROY {
   print "MyClass::DESTROY called\n";
}

Contoh Perl Berorientasi Objek

Berikut adalah contoh bagus lainnya, yang akan membantu Anda memahami Konsep Berorientasi Objek dari Perl. Masukkan kode sumber ini ke dalam file perl apa saja dan jalankan.

#!/usr/bin/perl

# Following is the implementation of simple Class.
package MyClass;

sub new {
   print "MyClass::new called\n";
   my $type = shift;            # The package/type name
   my $self = {}; # Reference to empty hash return bless $self, $type; } sub DESTROY { print "MyClass::DESTROY called\n"; } sub MyMethod { print "MyClass::MyMethod called!\n"; } # Following is the implemnetation of Inheritance. package MySubClass; @ISA = qw( MyClass ); sub new { print "MySubClass::new called\n"; my $type = shift;            # The package/type name
   my $self = MyClass->new; # Reference to empty hash return bless $self, $type; } sub DESTROY { print "MySubClass::DESTROY called\n"; } sub MyMethod { my $self = shift;
   $self->SUPER::MyMethod(); print " MySubClass::MyMethod called!\n"; } # Here is the main program using above classes. package main; print "Invoke MyClass method\n"; $myObject = MyClass->new();
$myObject->MyMethod(); print "Invoke MySubClass method\n"; $myObject2 = MySubClass->new();
$myObject2->MyMethod(); print "Create a scoped object\n"; { my $myObject2 = MyClass->new();
}
# Destructor is called automatically here

print "Create and undef an object\n";
$myObject3 = MyClass->new(); undef $myObject3;

print "Fall off the end of the script...\n";
# Remaining destructors are called automatically here

Ketika kami menjalankan program di atas, ini menghasilkan hasil sebagai berikut -

Invoke MyClass method
MyClass::new called
MyClass::MyMethod called!
Invoke MySubClass method
MySubClass::new called
MyClass::new called
MyClass::MyMethod called!
MySubClass::MyMethod called!
Create a scoped object
MyClass::new called
MyClass::DESTROY called
Create and undef an object
MyClass::new called
MyClass::DESTROY called
Fall off the end of the script...
MyClass::DESTROY called
MySubClass::DESTROY called

Bab ini mengajarkan Anda cara mengakses database di dalam skrip Perl Anda. Mulai dari Perl 5 menjadi sangat mudah untuk menulis aplikasi database menggunakanDBImodul. DBI adalah singkatan dariDatabase Independent Interface untuk Perl, yang berarti DBI menyediakan lapisan abstraksi antara kode Perl dan database yang mendasarinya, memungkinkan Anda untuk mengganti implementasi database dengan sangat mudah.

DBI adalah modul akses database untuk bahasa pemrograman Perl. Ini menyediakan satu set metode, variabel, dan konvensi yang menyediakan antarmuka database yang konsisten, terlepas dari database aktual yang digunakan.

Arsitektur Aplikasi DBI

DBI tidak bergantung pada database apa pun yang tersedia di backend. Anda dapat menggunakan DBI apakah Anda bekerja dengan Oracle, MySQL atau Informix, dll. Ini terlihat jelas dari diagram architure berikut.

Di sini DBI bertanggung jawab untuk mengambil semua perintah SQL melalui API, (yaitu, Application Programming Interface) dan mengirimkannya ke driver yang sesuai untuk eksekusi sebenarnya. Dan akhirnya, DBI bertanggung jawab untuk mengambil hasil dari pengemudi dan mengembalikannya ke scritp yang menelepon.

Notasi dan Konvensi

Di sepanjang bab ini, notasi berikut akan digunakan dan Anda disarankan untuk mengikuti ketentuan yang sama.

$dsn Database source name $dbh    Database handle object
$sth Statement handle object $h      Any of the handle types above ($dbh, $sth, or $drh) $rc     General Return Code  (boolean: true=ok, false=error)
$rv General Return Value (typically an integer) @ary List of values returned from the database. $rows   Number of rows processed (if available, else -1)
$fh     A filehandle
undef   NULL values are represented by undefined values in Perl
\%attr  Reference to a hash of attribute values passed to methods

Koneksi Database

Dengan asumsi kita akan bekerja dengan database MySQL. Sebelum menghubungkan ke database, pastikan hal-hal berikut ini. Anda dapat mengambil bantuan tutorial MySQL kami jika Anda tidak tahu tentang cara membuat database dan tabel di database MySQL.

  • Anda telah membuat database dengan nama TESTDB.

  • Anda telah membuat tabel dengan nama TEST_TABLE di TESTDB.

  • Tabel ini memiliki bidang FIRST_NAME, LAST_NAME, AGE, SEX dan INCOME.

  • ID pengguna "testuser" dan kata sandi "test123" disetel untuk mengakses TESTDB.

  • Perl Module DBI diinstal dengan benar di komputer Anda.

  • Anda telah melalui tutorial MySQL untuk memahami Dasar-Dasar MySQL.

Berikut adalah contoh koneksi dengan database MySQL "TESTDB" -

#!/usr/bin/perl

use DBI
use strict;

my $driver = "mysql"; 
my $database = "TESTDB"; my $dsn = "DBI:$driver:database=$database";
my $userid = "testuser"; my $password = "test123";

my $dbh = DBI->connect($dsn, $userid, $password ) or die $DBI::errstr;

Jika koneksi dibuat dengan sumber data, maka Database Handle dikembalikan dan disimpan ke $ dbh untuk digunakan lebih lanjut, jika tidak $ dbh disetel ke nilai undef dan $ DBI :: errstr mengembalikan string kesalahan.

Operasi INSERT

Operasi INSERT diperlukan saat Anda ingin membuat beberapa record ke dalam tabel. Di sini kami menggunakan tabel TEST_TABLE untuk membuat catatan kami. Jadi setelah koneksi database kita dibuat, kita siap untuk membuat record ke TEST_TABLE. Berikut adalah prosedur untuk membuat satu record ke TEST_TABLE. Anda dapat membuat rekaman sebanyak yang Anda suka menggunakan konsep yang sama.

Pembuatan rekaman mengambil langkah-langkah berikut -

  • Mempersiapkan pernyataan SQL dengan pernyataan INSERT. Ini akan dilakukan dengan menggunakanprepare() API.

  • Menjalankan kueri SQL untuk memilih semua hasil dari database. Ini akan dilakukan dengan menggunakanexecute() API.

  • Melepaskan tuas Stattement. Ini akan dilakukan dengan menggunakanfinish() API.

  • Jika semuanya baik-baik saja commit operasi ini jika tidak, Anda bisa rollbackselesaikan transaksi. Commit dan Rollback dijelaskan di bagian selanjutnya.

my $sth = $dbh->prepare("INSERT INTO TEST_TABLE
                       (FIRST_NAME, LAST_NAME, SEX, AGE, INCOME )
                         values
                       ('john', 'poul', 'M', 30, 13000)");
$sth->execute() or die $DBI::errstr;
$sth->finish(); $dbh->commit or die $DBI::errstr;

Menggunakan Bind Values

Mungkin ada kasus ketika nilai yang akan dimasukkan tidak diberikan sebelumnya. Jadi, Anda dapat menggunakan variabel bind yang akan mengambil nilai yang diperlukan pada waktu proses. Modul Perl DBI menggunakan tanda tanya sebagai pengganti nilai aktual dan kemudian nilai aktual diteruskan melalui API eksekusi () pada saat dijalankan. Berikut contohnya -

my $first_name = "john";
my $last_name = "poul"; my $sex = "M";
my $income = 13000; my $age = 30;
my $sth = $dbh->prepare("INSERT INTO TEST_TABLE
                        (FIRST_NAME, LAST_NAME, SEX, AGE, INCOME )
                          values
                        (?,?,?,?)");
$sth->execute($first_name,$last_name,$sex, $age, $income) 
          or die $DBI::errstr; $sth->finish();
$dbh->commit or die $DBI::errstr;

BACA Operasi

Operasi BACA pada database apa pun berarti mengambil beberapa informasi berguna dari database, misalnya, satu atau lebih catatan dari satu atau lebih tabel. Jadi, setelah koneksi database kami dibuat, kami siap untuk membuat kueri ke dalam database ini. Berikut adalah prosedur untuk menanyakan semua record yang memiliki AGE lebih dari 20. Ini akan mengambil empat langkah -

  • Mempersiapkan kueri SQL SELECT berdasarkan kondisi yang diperlukan. Ini akan dilakukan dengan menggunakanprepare() API.

  • Menjalankan kueri SQL untuk memilih semua hasil dari database. Ini akan dilakukan dengan menggunakanexecute() API.

  • Mengambil semua hasil satu per satu dan mencetak hasil tersebut. Ini akan dilakukan dengan fetchrow_array() API.

  • Melepaskan tuas Stattement. Ini akan dilakukan dengan menggunakanfinish() API.

my $sth = $dbh->prepare("SELECT FIRST_NAME, LAST_NAME
                        FROM TEST_TABLE 
                        WHERE AGE > 20");
$sth->execute() or die $DBI::errstr;
print "Number of rows found :" + $sth->rows; while (my @row = $sth->fetchrow_array()) {
   my ($first_name, $last_name ) = @row;
   print "First Name = $first_name, Last Name = $last_name\n";
}
$sth->finish();

Menggunakan Bind Values

Mungkin ada kasus ketika kondisi tidak diberikan sebelumnya. Jadi, Anda dapat menggunakan variabel bind, yang akan mengambil nilai yang diperlukan pada waktu proses. Modul Perl DBI menggunakan tanda tanya di tempat nilai aktual dan kemudian nilai aktual diteruskan melalui API eksekusi () pada saat dijalankan. Berikut contohnya -

$age = 20;
my $sth = $dbh->prepare("SELECT FIRST_NAME, LAST_NAME
                        FROM TEST_TABLE
                        WHERE AGE > ?");
$sth->execute( $age ) or die $DBI::errstr; print "Number of rows found :" + $sth->rows;
while (my @row = $sth->fetchrow_array()) { my ($first_name, $last_name ) = @row; print "First Name = $first_name, Last Name = $last_name\n"; } $sth->finish();

UPDATE Operasi

UPDATE Operasi pada database apa pun berarti memperbarui satu atau lebih rekaman yang sudah tersedia di tabel database. Berikut adalah prosedur untuk memperbarui semua record yang memiliki SEX sebagai 'M'. Di sini kami akan meningkatkan USIA semua pria satu tahun. Ini akan membutuhkan tiga langkah -

  • Mempersiapkan kueri SQL berdasarkan kondisi yang diperlukan. Ini akan dilakukan dengan menggunakanprepare() API.

  • Menjalankan kueri SQL untuk memilih semua hasil dari database. Ini akan dilakukan dengan menggunakanexecute() API.

  • Melepaskan tuas Stattement. Ini akan dilakukan dengan menggunakanfinish() API.

  • Jika semuanya baik-baik saja commit operasi ini jika tidak, Anda bisa rollbackselesaikan transaksi. Lihat bagian selanjutnya untuk commit dan rollback API.

my $sth = $dbh->prepare("UPDATE TEST_TABLE
                        SET   AGE = AGE + 1 
                        WHERE SEX = 'M'");
$sth->execute() or die $DBI::errstr;
print "Number of rows updated :" + $sth->rows; $sth->finish();
$dbh->commit or die $DBI::errstr;

Menggunakan Bind Values

Mungkin ada kasus ketika kondisi tidak diberikan sebelumnya. Jadi, Anda dapat menggunakan variabel bind, yang akan mengambil nilai yang diperlukan pada waktu proses. Modul Perl DBI menggunakan tanda tanya sebagai pengganti nilai aktual dan kemudian nilai aktual diteruskan melalui API eksekusi () pada saat dijalankan. Berikut contohnya -

$sex = 'M'; my $sth = $dbh->prepare("UPDATE TEST_TABLE SET AGE = AGE + 1 WHERE SEX = ?"); $sth->execute('$sex') or die $DBI::errstr;
print "Number of rows updated :" + $sth->rows; $sth->finish();
$dbh->commit or die $DBI::errstr;

Dalam beberapa kasus Anda ingin menetapkan nilai, yang tidak diberikan sebelumnya sehingga Anda dapat menggunakan nilai penjilidan sebagai berikut. Dalam contoh ini, pendapatan semua pria akan ditetapkan menjadi 10.000.

$sex = 'M'; $income = 10000;
my $sth = $dbh->prepare("UPDATE TEST_TABLE
                        SET   INCOME = ?
                        WHERE SEX = ?");
$sth->execute( $income, '$sex') or die $DBI::errstr;
print "Number of rows updated :" + $sth->rows; $sth->finish();

HAPUS Operasi

Operasi DELETE diperlukan saat Anda ingin menghapus beberapa rekaman dari database Anda. Berikut adalah prosedur untuk menghapus semua record dari TEST_TABLE dimana AGE sama dengan 30. Operasi ini akan mengambil langkah-langkah berikut.

  • Mempersiapkan kueri SQL berdasarkan kondisi yang diperlukan. Ini akan dilakukan dengan menggunakanprepare() API.

  • Menjalankan kueri SQL untuk menghapus catatan yang diperlukan dari database. Ini akan dilakukan dengan menggunakanexecute() API.

  • Melepaskan tuas Stattement. Ini akan dilakukan dengan menggunakanfinish() API.

  • Jika semuanya baik-baik saja commit operasi ini jika tidak, Anda bisa rollback selesaikan transaksi.

$age = 30; my $sth = $dbh->prepare("DELETE FROM TEST_TABLE WHERE AGE = ?"); $sth->execute( $age ) or die $DBI::errstr;
print "Number of rows deleted :" + $sth->rows; $sth->finish();
$dbh->commit or die $DBI::errstr;

Menggunakan do Statement

Jika Anda melakukan UPDATE, INSERT, atau DELETE, tidak ada data yang keluar dari database, jadi ada jalan pintas untuk melakukan operasi ini. Kamu dapat memakaido pernyataan untuk menjalankan salah satu perintah sebagai berikut.

$dbh->do('DELETE FROM TEST_TABLE WHERE age =30');

domengembalikan nilai benar jika berhasil, dan nilai salah jika gagal. Sebenarnya, jika berhasil mengembalikan jumlah baris yang terpengaruh. Dalam contoh ini akan mengembalikan jumlah baris yang benar-benar dihapus.

Operasi COMMIT

Komit adalah operasi yang memberikan sinyal hijau ke database untuk menyelesaikan perubahan dan setelah operasi ini tidak ada perubahan yang dapat dikembalikan ke posisi aslinya.

Berikut adalah contoh sederhana untuk menelepon commit API.

$dbh->commit or die $dbh->errstr;

Operasi ROLLBACK

Jika Anda tidak puas dengan semua perubahan atau Anda menemukan kesalahan di antara operasi apa pun, Anda dapat mengembalikan perubahan tersebut untuk digunakan rollback API.

Berikut adalah contoh sederhana untuk menelepon rollback API.

$dbh->rollback or die $dbh->errstr;

Mulailah Transaksi

Banyak database mendukung transaksi. Ini berarti Anda dapat membuat sejumlah besar kueri yang akan memodifikasi database, tetapi tidak ada perubahan yang benar-benar dibuat. Kemudian pada akhirnya, Anda mengeluarkan kueri SQL khususCOMMIT, dan semua perubahan dilakukan secara bersamaan. Atau, Anda dapat mengeluarkan kueri ROLLBACK, dalam hal ini semua perubahan dibuang dan database tetap tidak berubah.

Modul Perl DBI disediakan begin_workAPI, yang memungkinkan transaksi (dengan mematikan AutoCommit) hingga panggilan berikutnya untuk melakukan atau memutar balik. Setelah commit atau rollback berikutnya, AutoCommit akan secara otomatis dihidupkan lagi.

$rc  = $dbh->begin_work or die $dbh->errstr;

Opsi AutoCommit

Jika transaksi Anda sederhana, Anda tidak perlu repot mengeluarkan banyak komitmen. Saat Anda membuat panggilan terhubung, Anda dapat menentukanAutoCommitopsi yang akan melakukan operasi komit otomatis setelah setiap kueri berhasil. Ini tampilannya -

my $dbh = DBI->connect($dsn, $userid, $password,
              {AutoCommit => 1}) 
              or die $DBI::errstr;

Di sini AutoCommit dapat mengambil nilai 1 atau 0, di mana 1 berarti AutoCommit aktif dan 0 berarti AutoCommit tidak aktif.

Penanganan Kesalahan Otomatis

Saat Anda melakukan panggilan koneksi, Anda dapat menentukan opsi RaiseErrors yang menangani kesalahan untuk Anda secara otomatis. Ketika terjadi kesalahan, DBI akan membatalkan program Anda alih-alih mengembalikan kode kegagalan. Jika yang Anda inginkan hanyalah membatalkan program karena kesalahan, ini bisa jadi nyaman. Ini tampilannya -

my $dbh = DBI->connect($dsn, $userid, $password, {RaiseError => 1}) or die $DBI::errstr;

Di sini RaiseError dapat mengambil nilai 1 atau 0.

Memutus Database

Untuk memutuskan koneksi database, gunakan disconnect API sebagai berikut -

$rc = $dbh->disconnect  or warn $dbh->errstr;

Sayangnya, perilaku transaksi metode putuskan sambungan tidak dapat ditentukan. Beberapa sistem database (seperti Oracle dan Ingres) akan secara otomatis melakukan perubahan yang luar biasa, tetapi yang lain (seperti Informix) akan membatalkan perubahan yang luar biasa. Aplikasi yang tidak menggunakan AutoCommit harus secara eksplisit memanggil commit atau rollback sebelum memanggil putuskan.

Menggunakan Nilai NULL

Nilai yang tidak ditentukan, atau undef, digunakan untuk menunjukkan nilai NULL. Anda dapat menyisipkan dan memperbarui kolom dengan nilai NULL seperti yang Anda lakukan dengan nilai non-NULL. Contoh ini memasukkan dan memperbarui usia kolom dengan nilai NULL -

$sth = $dbh->prepare(qq { INSERT INTO TEST_TABLE (FIRST_NAME, AGE) VALUES (?, ?) }); $sth->execute("Joe", undef);

Sini qq{} digunakan untuk mengembalikan string yang dikutip ke prepareAPI. Namun, kehati-hatian harus dilakukan saat mencoba menggunakan nilai NULL dalam klausa WHERE. Pertimbangkan -

SELECT FIRST_NAME FROM TEST_TABLE WHERE age = ?

Mengikat undef (NULL) ke placeholder tidak akan memilih baris, yang memiliki usia NULL! Setidaknya untuk mesin database yang sesuai dengan standar SQL. Lihat manual SQL untuk mesin database Anda atau buku SQL apa pun untuk alasannya. Untuk memilih NULL secara eksplisit, Anda harus mengatakan "WHERE age IS NULL".

Masalah umum adalah memiliki fragmen kode yang menangani nilai yang dapat didefinisikan atau undef (non-NULL atau NULL) pada waktu proses. Teknik sederhana adalah menyiapkan pernyataan yang sesuai sesuai kebutuhan, dan mengganti placeholder untuk kasus non-NULL -

$sql_clause = defined $age? "age = ?" : "age IS NULL";
$sth = $dbh->prepare(qq {
         SELECT FIRST_NAME FROM TEST_TABLE WHERE $sql_clause }); $sth->execute(defined $age ? $age : ());

Beberapa Fungsi DBI Lainnya

available_drivers

@ary = DBI->available_drivers;
@ary = DBI->available_drivers($quiet);

Menampilkan daftar semua driver yang tersedia dengan mencari modul DBD :: * melalui direktori di @INC. Secara default, peringatan diberikan jika beberapa driver disembunyikan oleh orang lain dengan nama yang sama di direktori sebelumnya. Meneruskan nilai sebenarnya untuk $ tenang akan menghambat peringatan.

install_drivers

%drivers = DBI->installed_drivers();

Mengembalikan daftar nama driver dan pasangan pegangan driver untuk semua driver yang 'diinstal' (dimuat) ke dalam proses saat ini. Nama driver tidak menyertakan awalan 'DBD ::'.

sumber data

@ary = DBI->data_sources($driver);

Menampilkan daftar sumber data (database) yang tersedia melalui driver bernama. Jika $ driver kosong atau undef, maka nilai variabel lingkungan DBI_DRIVER digunakan.

kutipan

$sql = $dbh->quote($value); $sql = $dbh->quote($value, $data_type);

Kutip literal string untuk digunakan sebagai nilai literal dalam pernyataan SQL, dengan mengosongkan karakter khusus apa pun (seperti tanda kutip) yang ada di dalam string dan menambahkan jenis tanda kutip luar yang diperlukan.

$sql = sprintf "SELECT foo FROM bar WHERE baz = %s",
                $dbh->quote("Don't");

Untuk sebagian besar tipe database, kutipan akan mengembalikan 'Jangan' (termasuk tanda kutip luar). Ini valid untuk metode quote () untuk mengembalikan ekspresi SQL yang mengevaluasi ke string yang diinginkan. Misalnya -

$quoted = $dbh->quote("one\ntwo\0three")

may produce results which will be equivalent to

CONCAT('one', CHAR(12), 'two', CHAR(0), 'three')

Metode Umum untuk Semua Pegangan

berbuat salah

$rv = $h->err; or $rv = $DBI::err or $rv = $h->err

Mengembalikan kode kesalahan mesin database asli dari metode driver terakhir yang dipanggil. Kode biasanya berupa bilangan bulat tetapi Anda tidak boleh berasumsi seperti itu. Ini sama dengan $ DBI :: err atau $ h-> err.

errstr

$str = $h->errstr; or $str = $DBI::errstr or $str = $h->errstr

Menampilkan pesan kesalahan mesin database asli dari metode DBI terakhir yang dipanggil. Ini memiliki masalah masa pakai yang sama dengan metode "err" yang dijelaskan di atas. Ini sama dengan $ DBI :: errstr atau $ h-> errstr.

baris

$rv = $h->rows; or $rv = $DBI::rows

Ini mengembalikan jumlah baris yang dipengaruhi oleh pernyataan SQL sebelumnya dan setara dengan $ DBI :: baris.

jejak

$h->trace($trace_settings);

DBI memiliki kemampuan yang sangat berguna untuk menghasilkan informasi penelusuran runtime dari apa yang dilakukannya, yang dapat menjadi penghemat waktu yang sangat besar saat mencoba melacak masalah aneh dalam program DBI Anda. Anda dapat menggunakan nilai yang berbeda untuk menyetel tingkat jejak. Nilai ini bervariasi dari 0 hingga 4. Nilai 0 berarti menonaktifkan jejak dan 4 berarti menghasilkan jejak lengkap.

Dilarang Pernyataan Interpolasi

Sangat disarankan untuk tidak menggunakan pernyataan interpolasi sebagai berikut -

while ($first_name = <>) { my $sth = $dbh->prepare("SELECT * FROM TEST_TABLE WHERE FIRST_NAME = '$first_name'");
   $sth->execute();
   # and so on ...
}

Jadi jangan gunakan pernyataan interpolasi sebagai gantinya gunakan bind value untuk menyiapkan pernyataan SQL dinamis.

Apakah CGI itu?

  • Common Gateway Interface, atau CGI, adalah seperangkat standar yang menentukan bagaimana informasi dipertukarkan antara server web dan skrip kustom.

  • Spesifikasi CGI saat ini dikelola oleh NCSA dan NCSA mendefinisikan CGI sebagai berikut -

  • Common Gateway Interface, atau CGI, adalah standar untuk program gateway eksternal untuk berinteraksi dengan server informasi seperti server HTTP.

  • Versi saat ini adalah CGI / 1.1 dan CGI / 1.2 sedang dalam proses.

Menjelajah web

Untuk memahami konsep CGI, mari kita lihat apa yang terjadi ketika kita mengklik hyper link yang tersedia di halaman web untuk menelusuri halaman web atau URL tertentu.

  • Browser Anda menghubungi server web menggunakan protokol HTTP dan meminta URL, yaitu nama file halaman web.

  • Server Web akan memeriksa URL dan akan mencari nama file yang diminta. Jika server web menemukan file itu maka itu akan mengirimkan file kembali ke browser tanpa eksekusi lebih lanjut jika tidak mengirimkan pesan kesalahan yang menunjukkan bahwa Anda telah meminta file yang salah.

  • Browser web menerima respons dari server web dan menampilkan konten file yang diterima atau pesan kesalahan jika file tidak ditemukan.

Namun, dimungkinkan untuk mengatur server HTTP sedemikian rupa sehingga setiap kali file dalam direktori tertentu diminta, file tersebut tidak dikirim kembali; alih-alih itu dijalankan sebagai sebuah program, dan apa pun yang dihasilkan program itu sebagai hasilnya, itu dikirim kembali untuk ditampilkan oleh browser Anda. Ini dapat dilakukan dengan menggunakan fungsionalitas khusus yang tersedia di server web dan disebutCommon Gateway Interfaceatau CGI dan program semacam itu yang dijalankan oleh server untuk menghasilkan hasil akhir, disebut skrip CGI. Program CGI ini dapat berupa PERL Script, Shell Script, C atau C ++ program, dll.

Diagram Arsitektur CGI

Dukungan dan Konfigurasi Server Web

Sebelum Anda melanjutkan dengan Pemrograman CGI, pastikan bahwa Server Web Anda mendukung fungsionalitas CGI dan dikonfigurasi untuk menangani program CGI. Semua program CGI yang akan dijalankan oleh server web disimpan dalam direktori yang telah dikonfigurasi sebelumnya. Direktori ini disebut direktori CGI dan secara konvensi dinamakan / cgi-bin. Dengan konvensi file Perl CGI akan memiliki ekstensi sebagai.cgi.

Program CGI Pertama

Berikut ini tautan sederhana yang ditautkan ke skrip CGI yang disebut hello.cgi . File ini telah disimpan di/cgi-bin/direktori dan memiliki konten berikut. Sebelum menjalankan program CGI Anda, pastikan Anda telah mengubah mode file menggunakanchmod 755 hello.cgi Perintah UNIX.

#!/usr/bin/perl

print "Content-type:text/html\r\n\r\n";
print '<html>';
print '<head>';
print '<title>Hello Word - First CGI Program</title>';
print '</head>';
print '<body>';
print '<h2>Hello Word! This is my first CGI program</h2>';
print '</body>';
print '</html>';

1;

Sekarang jika Anda mengklik hello.cgi link lalu request ke web server yang mencari hello.cgi di direktori / cgi-bin, jalankan dan apapun hasil yang didapat, web server mengirimkan hasil tersebut kembali ke web browser, yaitu sebagai berikut -

Hello Word! This is my first CGI program

Script hello.cgi ini adalah script Perl sederhana yang outputnya ditulis pada file STDOUT, yaitu layar. Ada satu fitur penting dan tambahan yang tersedia yaitu baris pertama yang akan dicetakContent-type:text/html\r\n\r\n. Baris ini dikirim kembali ke browser dan menentukan tipe konten yang akan ditampilkan di layar browser. Sekarang Anda harus memahami konsep dasar CGI dan Anda dapat menulis banyak program CGI yang rumit menggunakan Perl. Skrip ini dapat berinteraksi dengan sistem eksternal lainnya juga untuk bertukar informasi seperti database, layanan web, atau antarmuka kompleks lainnya.

Memahami HTTP Header

Baris paling pertama Content-type:text/html\r\n\r\nmerupakan bagian dari HTTP header, yang dikirimkan ke browser agar browser dapat memahami konten yang masuk dari sisi server. Semua header HTTP akan dalam bentuk berikut -

HTTP Field Name: Field Content

Sebagai Contoh -

Content-type:text/html\r\n\r\n

Ada beberapa header HTTP penting lainnya, yang akan sering Anda gunakan dalam Pemrograman CGI.

Sr.No. Header & Deskripsi
1

Content-type: String

String MIME yang menentukan format konten yang dikembalikan. Contohnya adalah Content-type: text / html

2

Expires: Date String

Tanggal ketika informasi menjadi tidak valid. Ini harus digunakan oleh browser untuk memutuskan kapan halaman perlu di-refresh. String tanggal yang valid harus dalam format 01 Jan 1998 12:00:00 GMT.

3

Location: URL String

URL yang harus dikembalikan, bukan URL yang diminta. Anda dapat menggunakan ini diajukan untuk mengarahkan permintaan ke lokasi lain.

4

Last-modified: String

Tanggal modifikasi terakhir file.

5

Content-length: String

Panjang, dalam byte, dari data yang dikembalikan. Browser menggunakan nilai ini untuk melaporkan perkiraan waktu download suatu file.

6

Set-Cookie: String

Atur cookie melewati string

Variabel Lingkungan CGI

Semua program CGI akan memiliki akses ke variabel lingkungan berikut. Variabel ini memainkan peran penting saat menulis program CGI apa pun.

Sr.No. Variabel Nama & Deskripsi
1

CONTENT_TYPE

Jenis data konten. Digunakan saat klien mengirim konten terlampir ke server. Misalnya unggah file, dll.

2

CONTENT_LENGTH

Panjang informasi kueri. Ini hanya tersedia untuk permintaan POST

3

HTTP_COOKIE

Mengembalikan cookie yang ditetapkan dalam bentuk pasangan kunci & nilai.

4

HTTP_USER_AGENT

Bidang header permintaan Agen-Pengguna berisi informasi tentang agen pengguna yang membuat permintaan. Namanya browser web.

5

PATH_INFO

Jalur untuk skrip CGI.

6

QUERY_STRING

Informasi yang dikodekan URL yang dikirim dengan permintaan metode GET.

7

REMOTE_ADDR

Alamat IP dari remote host yang membuat permintaan. Ini dapat berguna untuk pencatatan atau untuk tujuan otentikasi.

8

REMOTE_HOST

Nama host yang sepenuhnya memenuhi syarat yang membuat permintaan. Jika informasi ini tidak tersedia maka REMOTE_ADDR dapat digunakan untuk mendapatkan alamat IR.

9

REQUEST_METHOD

Metode yang digunakan untuk membuat permintaan. Metode yang paling umum adalah GET dan POST.

10

SCRIPT_FILENAME

Jalur lengkap ke skrip CGI.

11

SCRIPT_NAME

Nama skrip CGI.

12

SERVER_NAME

Nama host atau Alamat IP server.

13

SERVER_SOFTWARE

Nama dan versi perangkat lunak yang dijalankan server.

Berikut adalah program CGI kecil untuk mencantumkan semua variabel CGI yang didukung oleh server Web Anda. Klik link ini untuk melihat hasil Get Environment

#!/usr/bin/perl

print "Content-type: text/html\n\n";
print "<font size=+1>Environment</font>\n";
foreach (sort keys %ENV) {
   print "<b>$_</b>: $ENV{$_}<br>\n";
}

1;

Angkat Kotak Dialog "Unduh File"?

Terkadang Anda ingin memberikan opsi di mana pengguna akan mengklik tautan dan itu akan memunculkan kotak dialog "Unduh File" kepada pengguna alih-alih menampilkan konten yang sebenarnya. Ini sangat mudah dan akan diperoleh melalui header HTTP.

Header HTTP ini akan berbeda dari header yang disebutkan di bagian sebelumnya. Misalnya, jika Anda ingin membuat fileFileName file yang dapat diunduh dari tautan yang diberikan maka sintaksnya adalah sebagai berikut -

#!/usr/bin/perl

# HTTP Header
print "Content-Type:application/octet-stream; name = \"FileName\"\r\n";
print "Content-Disposition: attachment; filename = \"FileName\"\r\n\n";

# Actual File Content will go hear.
open( FILE, "<FileName" );
while(read(FILE, $buffer, 100) ) { print("$buffer");
}

GET dan Metode POST

Anda pasti pernah menjumpai banyak situasi ketika Anda perlu meneruskan beberapa informasi dari browser Anda ke server web dan akhirnya ke Program CGI Anda yang menangani permintaan Anda. Browser paling sering menggunakan dua metode untuk meneruskan informasi ini ke server web. Metode ini adalahGET Metode dan POSTMetode. Mari kita periksa satu per satu.

Meneruskan Informasi menggunakan Metode GET

Metode GET mengirimkan informasi pengguna yang dikodekan yang ditambahkan ke URL halaman itu sendiri. Halaman dan informasi yang dikodekan dipisahkan oleh? karakter sebagai berikut -

http://www.test.com/cgi-bin/hello.cgi?key1=value1&key2=value2

Metode GET adalah metode default untuk meneruskan informasi dari browser ke server web dan menghasilkan string panjang yang muncul di kotak Lokasi: browser Anda. Anda tidak boleh menggunakan metode GET jika Anda memiliki kata sandi atau informasi sensitif lainnya untuk diteruskan ke server. Metode GET memiliki batasan ukuran: hanya 1024 karakter yang dapat dikirimkan dalam string permintaan.

Informasi ini diteruskan menggunakan QUERY_STRING header dan akan dapat diakses di Program CGI Anda melalui variabel lingkungan QUERY_STRING yang dapat Anda parse dan digunakan dalam program CGI Anda.

Anda dapat menyampaikan informasi hanya dengan menggabungkan pasangan kunci dan nilai bersama dengan URL apa pun atau Anda dapat menggunakan tag <FORM> HTML untuk menyampaikan informasi menggunakan metode GET.

Contoh URL Sederhana: Dapatkan Metode

Berikut adalah URL sederhana yang akan memberikan dua nilai ke program hello_get.cgi menggunakan metode GET.

http://www.tutorialspoint.com/cgi-bin/hello_get.cgi?first_name=ZARA&last_name=ALI

Dibawah ini hello_get.cgi script untuk menangani input yang diberikan oleh web browser.

#!/usr/bin/perl

local ($buffer, @pairs, $pair, $name, $value, %FORM);
# Read in text
$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/; if ($ENV{'REQUEST_METHOD'} eq "GET") {
   $buffer = $ENV{'QUERY_STRING'};
}
# Split information into name/value pairs
@pairs = split(/&/, $buffer); foreach $pair (@pairs) {
   ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /;
   $value =~ s/%(..)/pack("C", hex($1))/eg;
   $FORM{$name} = $value; } $first_name = $FORM{first_name}; $last_name  = $FORM{last_name}; print "Content-type:text/html\r\n\r\n"; print "<html>"; print "<head>"; print "<title>Hello - Second CGI Program</title>"; print "</head>"; print "<body>"; print "<h2>Hello $first_name $last_name - Second CGI Program</h2>";
print "</body>";
print "</html>";

1;

Contoh FORMULIR Sederhana: Metode GET

Berikut adalah contoh sederhana, yang meneruskan dua nilai menggunakan HTML FORM dan tombol kirim. Kami akan menggunakan skrip CGI hello_get.cgi yang sama untuk menangani input ini.

<FORM action = "/cgi-bin/hello_get.cgi" method = "GET">
First Name: <input type = "text" name = "first_name">  <br>

Last Name: <input type = "text" name = "last_name">
<input type = "submit" value = "Submit">
</FORM>

Berikut adalah keluaran sebenarnya dari pengkodean formulir di atas. Sekarang Anda dapat memasukkan Nama Depan dan Belakang dan kemudian klik tombol kirim untuk melihat hasilnya.

Meneruskan Informasi menggunakan Metode POST

Metode yang lebih dapat diandalkan untuk menyampaikan informasi ke program CGI adalah POSTmetode. Ini mengemas informasi dengan cara yang persis sama seperti metode GET, tetapi alih-alih mengirimkannya sebagai string teks setelah file?di URL, ini mengirimkannya sebagai pesan terpisah sebagai bagian dari header HTTP. Server web menyediakan pesan ini ke skrip CGI dalam bentuk input standar.

Di bawah ini adalah modifikasi hello_post.cgiscript untuk menangani input yang diberikan oleh web browser. Skrip ini akan menangani metode GET serta POST.

#!/usr/bin/perl

local ($buffer, @pairs, $pair, $name, $value, %FORM); # Read in text $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } # Split information into name/value pairs @pairs = split(/&/, $buffer);
foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /; $value =~ s/%(..)/pack("C", hex($1))/eg; $FORM{$name} = $value;
}
$first_name = $FORM{first_name};
$last_name = $FORM{last_name};

print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<head>";
print "<title>Hello - Second CGI Program</title>";
print "</head>";
print "<body>";
print "<h2>Hello $first_name $last_name - Second CGI Program</h2>";
print "</body>";
print "</html>";

1;

Mari kita ambil contoh yang sama seperti di atas, yaitu meneruskan dua nilai menggunakan HTML FORM dan tombol submit. Kami akan menggunakan skrip CGI hello_post.cgi untuk menangani input ini.

<FORM action = "/cgi-bin/hello_post.cgi" method = "POST">
First Name: <input type = "text" name = "first_name">  <br>

Last Name: <input type = "text" name = "last_name">

<input type = "submit" value = "Submit">
</FORM>

Berikut adalah output sebenarnya dari pengkodean formulir di atas, Anda memasukkan Nama Depan dan Belakang dan kemudian klik tombol kirim untuk melihat hasilnya.

Meneruskan Data Kotak Centang ke Program CGI

Kotak centang digunakan ketika lebih dari satu opsi diperlukan untuk dipilih. Berikut adalah contoh kode HTML untuk formulir dengan dua kotak centang.

<form action = "/cgi-bin/checkbox.cgi" method = "POST" target = "_blank">
<input type = "checkbox" name = "maths" value = "on"> Maths
<input type = "checkbox" name = "physics" value = "on"> Physics
<input type = "submit" value = "Select Subject">
</form>

Hasil dari kode ini adalah bentuk berikut -

Dibawah ini checkbox.cgi script untuk menangani input yang diberikan oleh web browser untuk tombol radio.

#!/usr/bin/perl

local ($buffer, @pairs, $pair, $name, $value, %FORM);
# Read in text
$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/; if ($ENV{'REQUEST_METHOD'} eq "POST") {
   read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else {
   $buffer = $ENV{'QUERY_STRING'};
}
# Split information into name/value pairs
@pairs = split(/&/, $buffer); foreach $pair (@pairs) {
   ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /;
   $value =~ s/%(..)/pack("C", hex($1))/eg;
   $FORM{$name} = $value; } if( $FORM{maths} ) {
   $maths_flag ="ON"; } else { $maths_flag ="OFF";
}
if( $FORM{physics} ) { $physics_flag ="ON";
} else {
   $physics_flag ="OFF"; } print "Content-type:text/html\r\n\r\n"; print "<html>"; print "<head>"; print "<title>Checkbox - Third CGI Program</title>"; print "</head>"; print "<body>"; print "<h2> CheckBox Maths is : $maths_flag</h2>";
print "<h2> CheckBox Physics is : $physics_flag</h2>";
print "</body>";
print "</html>";

1;

Meneruskan Data Tombol Radio ke Program CGI

Tombol Radio digunakan ketika hanya satu opsi yang diperlukan untuk dipilih. Berikut adalah contoh kode HTML untuk formulir dengan dua tombol radio -

<form action = "/cgi-bin/radiobutton.cgi" method = "POST" target = "_blank">
<input type = "radio" name = "subject" value = "maths"> Maths
<input type = "radio" name = "subject" value = "physics"> Physics
<input type = "submit" value = "Select Subject">
</form>

Hasil dari kode ini adalah bentuk berikut -

Dibawah ini radiobutton.cgi script untuk menangani masukan yang diberikan oleh browser web untuk tombol radio.

#!/usr/bin/perl

local ($buffer, @pairs, $pair, $name, $value, %FORM); # Read in text $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } # Split information into name/value pairs @pairs = split(/&/, $buffer);
foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /; $value =~ s/%(..)/pack("C", hex($1))/eg; $FORM{$name} = $value;
}
$subject = $FORM{subject};

print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<head>";
print "<title>Radio - Fourth CGI Program</title>";
print "</head>";
print "<body>";
print "<h2> Selected Subject is $subject</h2>";
print "</body>";
print "</html>";

1;

Meneruskan Data Area Teks ke Program CGI

Elemen textarea digunakan saat teks multiline harus diteruskan ke Program CGI. Berikut adalah contoh kode HTML untuk formulir dengan kotak TEXTAREA -

<form action = "/cgi-bin/textarea.cgi" method = "POST" target = "_blank">
<textarea name = "textcontent" cols = 40 rows = 4>
Type your text here...
</textarea>
<input type = "submit" value = "Submit">
</form>

Hasil dari kode ini adalah bentuk berikut -

Di bawah ini adalah textarea.cgi script untuk menangani input yang diberikan oleh web browser.

#!/usr/bin/perl

local ($buffer, @pairs, $pair, $name, $value, %FORM); # Read in text $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } # Split information into name/value pairs @pairs = split(/&/, $buffer);
foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /; $value =~ s/%(..)/pack("C", hex($1))/eg; $FORM{$name} = $value;
}
$text_content = $FORM{textcontent};

print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<head>";
print "<title>Text Area - Fifth CGI Program</title>";
print "</head>";
print "<body>";
print "<h2> Entered Text Content is $text_content</h2>";
print "</body>";
print "</html>";

1;

Meneruskan Data Drop Down Box ke Program CGI

Kotak drop-down digunakan ketika kami memiliki banyak opsi yang tersedia tetapi hanya satu atau dua yang akan dipilih. Berikut adalah contoh kode HTML untuk formulir dengan satu kotak drop-down

<form action = "/cgi-bin/dropdown.cgi" method = "POST" target = "_blank">
<select name = "dropdown">
<option value = "Maths" selected>Maths</option>
<option value = "Physics">Physics</option>
</select>
<input type = "submit" value = "Submit">
</form>

Hasil dari kode ini adalah bentuk berikut -

Di bawah ini adalah dropdown.cgi script untuk menangani input yang diberikan oleh web browser.

#!/usr/bin/perl

local ($buffer, @pairs, $pair, $name, $value, %FORM); # Read in text $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } # Split information into name/value pairs @pairs = split(/&/, $buffer);
foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair);
   $value =~ tr/+/ /; $value =~ s/%(..)/pack("C", hex($1))/eg; $FORM{$name} = $value;
}
$subject = $FORM{dropdown};

print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<head>";
print "<title>Dropdown Box - Sixth CGI Program</title>";
print "</head>";
print "<body>";
print "<h2> Selected Subject is $subject</h2>";
print "</body>";
print "</html>";

1;

Menggunakan Cookies di CGI

Protokol HTTP adalah protokol tanpa negara. Tetapi untuk situs web komersial, diperlukan untuk menjaga informasi sesi di antara halaman yang berbeda. Misalnya satu pendaftaran pengguna berakhir setelah transaksi yang membentang melalui banyak halaman. Tetapi bagaimana cara menjaga informasi sesi pengguna di semua halaman web?

Dalam banyak situasi, menggunakan cookie adalah metode paling efisien untuk mengingat dan melacak preferensi, pembelian, komisi, dan informasi lain yang diperlukan untuk pengalaman pengunjung atau statistik situs yang lebih baik.

Bagaimana itu bekerja

Server Anda mengirimkan beberapa data ke browser pengunjung dalam bentuk cookie. Browser mungkin menerima cookie. Jika ya, itu disimpan sebagai catatan teks biasa di hard drive pengunjung. Sekarang, saat pengunjung tiba di halaman lain di situs Anda, cookie tersedia untuk diambil. Setelah diambil, server Anda tahu / mengingat apa yang disimpan.

Cookie adalah catatan data teks biasa dari 5 bidang dengan panjang variabel -

  • Expires- Tanggal cookie akan kedaluwarsa. Jika ini kosong, cookie akan kedaluwarsa saat pengunjung keluar dari browser.

  • Domain - Nama domain situs Anda.

  • Path- Jalur ke direktori atau halaman web yang menyetel cookie. Ini mungkin kosong jika Anda ingin mengambil cookie dari direktori atau halaman manapun.

  • Secure- Jika bidang ini berisi kata "aman" maka cookie hanya dapat diambil dengan server aman. Jika bidang ini kosong, tidak ada batasan seperti itu.

  • Name = Value - Cookie disetel dan ditinjau ulang dalam bentuk pasangan kunci dan nilai.

Menyiapkan Cookies

Sangat mudah untuk mengirim cookie ke browser. Cookie ini akan dikirim bersama dengan HTTP Header. Dengan asumsi Anda ingin menyetel UserID dan Kata Sandi sebagai cookie. Jadi itu akan dilakukan sebagai berikut -

#!/usr/bin/perl

print "Set-Cookie:UserID = XYZ;\n";
print "Set-Cookie:Password = XYZ123;\n";
print "Set-Cookie:Expires = Tuesday, 31-Dec-2007 23:12:40 GMT";\n";
print "Set-Cookie:Domain = www.tutorialspoint.com;\n";
print "Set-Cookie:Path = /perl;\n";
print "Content-type:text/html\r\n\r\n";
...........Rest of the HTML Content goes here....

Di sini kami menggunakan Set-CookieHeader HTTP untuk menyetel cookie. Ini opsional untuk menyetel atribut cookie seperti Kedaluwarsa, Domain, dan Jalur. Penting untuk dicatat bahwa cookie diatur sebelum mengirim garis ajaib"Content-type:text/html\r\n\r\n.

Mengambil Cookies

Sangat mudah untuk mengambil semua cookie yang disetel. Cookie disimpan dalam variabel lingkungan CGI HTTP_COOKIE dan akan memiliki bentuk berikut.

key1 = value1;key2 = value2;key3 = value3....

Berikut ini contoh cara mengambil cookie.

#!/usr/bin/perl
$rcvd_cookies = $ENV{'HTTP_COOKIE'}; @cookies = split /;/, $rcvd_cookies;
foreach $cookie ( @cookies ) { ($key, $val) = split(/=/, $cookie); # splits on the first =.
   $key =~ s/^\s+//; $val =~ s/^\s+//;
   $key =~ s/\s+$//;
   $val =~ s/\s+$//;
   if( $key eq "UserID" ) { $user_id = $val; } elsif($key eq "Password") {
      $password = $val;
   }
}
print "User ID  = $user_id\n"; print "Password = $password\n";

Ini akan menghasilkan hasil sebagai berikut, asalkan cookie di atas telah disetel sebelum memanggil skrip cookie pengambilan.

User ID = XYZ
Password = XYZ123

Modul dan Perpustakaan CGI

Anda akan menemukan banyak modul built-in melalui internet yang menyediakan fungsi langsung untuk digunakan dalam program CGI Anda. Berikut ini yang penting sekali.

  • Modul CGI

  • Berkeley cgi-lib.pl

Apa Paket?

Itu packagePernyataan mengalihkan konteks penamaan saat ini ke namespace tertentu (tabel simbol). Jadi -

  • Paket adalah kumpulan kode yang berada di namespace-nya sendiri.

  • Namespace adalah kumpulan nama dari nama variabel unik (juga disebut tabel simbol).

  • Namespaces mencegah benturan nama variabel antar paket.

  • Paket memungkinkan konstruksi modul yang, jika digunakan, tidak akan mengganggu variabel dan fungsi di luar namespace modul itu sendiri.

  • Paket tetap berlaku sampai pernyataan paket lain dipanggil, atau sampai akhir dari blok atau file saat ini.

  • Anda dapat secara eksplisit merujuk ke variabel dalam sebuah paket menggunakan :: kualifikasi paket.

Berikut adalah contoh yang memiliki paket main dan Foo dalam sebuah file. Di sini variabel khusus __PACKAGE__ telah digunakan untuk mencetak nama paket.

#!/usr/bin/perl

# This is main package
$i = 1; print "Package name : " , __PACKAGE__ , " $i\n"; 

package Foo;
# This is Foo package
$i = 10; print "Package name : " , __PACKAGE__ , " $i\n"; 

package main;
# This is again main package
$i = 100; print "Package name : " , __PACKAGE__ , " $i\n"; 
print "Package name : " , __PACKAGE__ ,  " $Foo::i\n"; 

1;

Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -

Package name : main 1
Package name : Foo 10
Package name : main 100
Package name : main 10

BEGIN dan END Blocks

Anda dapat menentukan sejumlah blok kode bernama BEGIN dan END, yang masing-masing bertindak sebagai konstruktor dan destruktor.

BEGIN { ... }
END { ... }
BEGIN { ... }
END { ... }
  • Setiap BEGIN blok dijalankan setelah skrip perl dimuat dan dikompilasi tetapi sebelum pernyataan lain dieksekusi.

  • Setiap blok AKHIR dijalankan tepat sebelum interpreter perl keluar.

  • Blok BEGIN dan END sangat berguna saat membuat modul Perl.

Contoh berikut menunjukkan penggunaannya -

#!/usr/bin/perl

package Foo;
print "Begin and Block Demo\n";

BEGIN { 
   print "This is BEGIN Block\n" 
}

END { 
   print "This is END Block\n" 
}

1;

Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -

This is BEGIN Block
Begin and Block Demo
This is END Block

Apa itu Modul Perl?

Modul Perl adalah paket yang dapat digunakan kembali yang didefinisikan dalam file perpustakaan yang namanya sama dengan nama paket dengan ekstensi .pm.

File modul Perl bernama Foo.pm mungkin berisi pernyataan seperti ini.

#!/usr/bin/perl

package Foo;
sub bar { 
   print "Hello $_[0]\n" 
}

sub blat { 
   print "World $_[0]\n" 
}
1;

Beberapa poin penting tentang modul Perl

  • Fungsinya require dan use akan memuat modul.

  • Keduanya menggunakan daftar jalur pencarian di @INC untuk menemukan modul.

  • Kedua fungsi tersebut require dan use panggil eval berfungsi untuk memproses kode.

  • Itu 1; di bagian bawah menyebabkan eval mengevaluasi ke TRUE (dan dengan demikian tidak gagal).

Fungsi Membutuhkan

Sebuah modul dapat dimuat dengan memanggil require berfungsi sebagai berikut -

#!/usr/bin/perl

require Foo;

Foo::bar( "a" );
Foo::blat( "b" );

Anda pasti telah memperhatikan bahwa nama subrutin harus sepenuhnya memenuhi syarat untuk memanggilnya. Alangkah baiknya mengaktifkan subrutinbar dan blat untuk diimpor ke namespace kita sendiri sehingga kita tidak perlu menggunakan kualifikasi Foo ::.

Fungsi Penggunaan

Sebuah modul dapat dimuat dengan memanggil use fungsi.

#!/usr/bin/perl

use Foo;

bar( "a" );
blat( "b" );

Perhatikan bahwa kami tidak harus sepenuhnya memenuhi syarat nama fungsi paket. Ituuse function akan mengekspor daftar simbol dari modul yang diberi beberapa pernyataan tambahan di dalam modul.

require Exporter;
@ISA = qw(Exporter);

Kemudian, berikan daftar simbol (skalar, daftar, hash, subrutin, dll) dengan mengisi variabel daftar bernama @EXPORT: Misalnya -

package Module;

require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(bar blat);

sub bar { print "Hello $_[0]\n" }
sub blat { print "World $_[0]\n" } sub splat { print "Not $_[0]\n" }  # Not exported!

1;

Buat Pohon Modul Perl

Saat Anda siap untuk mengirimkan modul Perl Anda, maka ada cara standar untuk membuat Pohon Modul Perl. Ini dilakukan dengan menggunakanh2xsutilitas. Utilitas ini disertakan dengan Perl. Berikut adalah sintaks untuk menggunakan h2xs -

$h2xs -AX -n  ModuleName

Misalnya, jika modul Anda tersedia di Person.pm file, lalu cukup jalankan perintah berikut -

$h2xs -AX -n Person

Ini akan menghasilkan hasil sebagai berikut -

Writing Person/lib/Person.pm
Writing Person/Makefile.PL
Writing Person/README
Writing Person/t/Person.t
Writing Person/Changes
Writing Person/MANIFEST

Berikut adalah penjelasan dari opsi-opsi ini -

  • -A menghilangkan kode Pemuat Otomatis (paling baik digunakan oleh modul yang menentukan sejumlah besar subrutin yang jarang digunakan).

  • -X menghilangkan elemen XS (eXternal Subrutin, di mana eXternal berarti di luar Perl, yaitu C).

  • -n menentukan nama modul.

Jadi perintah di atas membuat struktur berikut di dalam direktori Person. Hasil sebenarnya ditunjukkan di atas.

  • Changes
  • Makefile.PL
  • MANIFEST (berisi daftar semua file dalam paket)
  • README
  • t / (file uji)
  • lib / (Kode sumber sebenarnya ada di sini

Jadi akhirnya, kamu tarstruktur direktori ini menjadi file Person.tar.gz dan Anda dapat mengirimkannya. Anda harus memperbarui file README dengan instruksi yang benar. Anda juga dapat memberikan beberapa file contoh pengujian di direktori t.

Menginstal Modul Perl

Unduh modul Perl dalam bentuk file tar.gz. Gunakan urutan berikut untuk menginstal Modul PerlPerson.pm yang telah diunduh sebagai Person.tar.gz mengajukan.

tar xvfz Person.tar.gz
cd Person
perl Makefile.PL
make
make install

Interpreter Perl memiliki daftar direktori untuk mencari modul (array global @INC).

Anda dapat menggunakan Perl dengan berbagai cara untuk membuat proses baru sesuai kebutuhan Anda. Tutorial ini akan mencantumkan beberapa metode penting dan paling sering digunakan untuk membuat dan mengelola proses Perl.

  • Anda dapat menggunakan variabel khusus $$ atau $PROCESS_ID untuk mendapatkan ID proses saat ini.

  • Setiap proses yang dibuat menggunakan salah satu metode yang disebutkan, memelihara lingkungan virtualnya sendiri dengan-in %ENV variabel.

  • Itu exit() fungsi selalu keluar hanya proses anak yang menjalankan fungsi ini dan proses utama secara keseluruhan tidak akan keluar kecuali semua proses anak yang berjalan telah keluar.

  • Semua pegangan terbuka adalah dup () - ed dalam proses anak, sehingga menutup setiap pegangan dalam satu proses tidak mempengaruhi proses lainnya.

Operator Backstick

Cara paling sederhana untuk menjalankan perintah Unix adalah dengan menggunakan operator backstick. Anda cukup meletakkan perintah Anda di dalam operator backstick, yang akan menghasilkan eksekusi perintah dan mengembalikan hasilnya yang dapat disimpan sebagai berikut -

#!/usr/bin/perl

@files = `ls -l`;

foreach $file (@files) { print $file;
}

1;

Ketika kode di atas dijalankan, itu mendaftar semua file dan direktori yang tersedia di direktori saat ini -

drwxr-xr-x 3 root root 4096 Sep 14 06:46 9-14
drwxr-xr-x 4 root root 4096 Sep 13 07:54 android
-rw-r--r-- 1 root root  574 Sep 17 15:16 index.htm
drwxr-xr-x 3  544  401 4096 Jul  6 16:49 MIME-Lite-3.01
-rw-r--r-- 1 root root   71 Sep 17 15:16 test.pl
drwx------ 2 root root 4096 Sep 17 15:11 vAtrJdy

Fungsi system ()

Anda juga bisa menggunakan system()berfungsi untuk menjalankan perintah Unix apa pun, yang hasilnya akan menjadi keluaran dari skrip perl. Secara default, ini adalah layar, yaitu STDOUT, tetapi Anda dapat mengarahkannya ke file apa pun dengan menggunakan operator redirection> -

#!/usr/bin/perl

system( "ls -l")

1;

Ketika kode di atas dijalankan, itu mendaftar semua file dan direktori yang tersedia di direktori saat ini -

drwxr-xr-x 3 root root 4096 Sep 14 06:46 9-14
drwxr-xr-x 4 root root 4096 Sep 13 07:54 android
-rw-r--r-- 1 root root  574 Sep 17 15:16 index.htm
drwxr-xr-x 3  544  401 4096 Jul  6 16:49 MIME-Lite-3.01
-rw-r--r-- 1 root root   71 Sep 17 15:16 test.pl
drwx------ 2 root root 4096 Sep 17 15:11 vAtrJdy

Hati-hati ketika perintah Anda berisi variabel lingkungan shell seperti $PATH or $RUMAH. Coba ikuti tiga skenario -

#!/usr/bin/perl

$PATH = "I am Perl Variable"; system('echo $PATH');  # Treats $PATH as shell variable system("echo $PATH");  # Treats $PATH as Perl variable system("echo \$PATH"); # Escaping $ works.

1;

Ketika kode di atas dijalankan, itu menghasilkan hasil berikut tergantung pada apa yang diatur dalam variabel shell $ PATH.

/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin
I am Perl Variable
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin

Fungsi garpu ()

Perl menyediakan a fork()fungsi yang sesuai dengan panggilan sistem Unix dengan nama yang sama. Pada sebagian besar platform mirip Unix di mana pemanggilan sistem fork () tersedia, Perl's fork () hanya memanggilnya. Pada beberapa platform seperti Windows di mana pemanggilan sistem fork () tidak tersedia, Perl dapat dibangun untuk meniru fork () pada level interpreter.

Fungsi fork () digunakan untuk mengkloning proses saat ini. Panggilan ini membuat proses baru yang menjalankan program yang sama pada titik yang sama. Ia mengembalikan pid anak ke proses induk, 0 ke proses anak, atau undef jika garpu tidak berhasil.

Kamu dapat memakai exec() berfungsi dalam proses untuk meluncurkan eksekusi yang diminta, yang akan dijalankan di area proses terpisah dan exec () akan menunggu hingga selesai sebelum keluar dengan status keluar yang sama seperti proses itu.

#!/usr/bin/perl

if(!defined($pid = fork())) { # fork returned undef, so unsuccessful die "Cannot fork a child: $!";
} elsif ($pid == 0) { print "Printed by child process\n"; exec("date") || die "can't exec date: $!";
  
} else {
   # fork returned 0 nor undef
   # so this branch is parent
   print "Printed by parent process\n";
   $ret = waitpid($pid, 0);
   print "Completed process id: $ret\n";

}

1;

Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -

Printed by parent process
Printed by child process
Tue Sep 17 15:41:08 CDT 2013
Completed process id: 17777

Itu wait() dan waitpid()bisa dikirimkan sebagai ID proses semu yang dikembalikan oleh fork (). Panggilan ini akan menunggu dengan benar penghentian proses semu dan mengembalikan statusnya. Jika Anda bercabang tanpa pernah menunggu anak Anda menggunakanwaitpid()fungsi, Anda akan mengumpulkan zombie. Pada sistem Unix, Anda dapat menghindari ini dengan menyetel $ SIG {CHLD} menjadi "IGNORE" sebagai berikut -

#!/usr/bin/perl

local $SIG{CHLD} = "IGNORE"; if(!defined($pid = fork())) {
   # fork returned undef, so unsuccessful
   die "Cannot fork a child: $!"; } elsif ($pid == 0) {
   print "Printed by child process\n";
   exec("date") || die "can't exec date: $!"; } else { # fork returned 0 nor undef # so this branch is parent print "Printed by parent process\n"; $ret = waitpid($pid, 0); print "Completed process id: $ret\n";

}

1;

Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -

Printed by parent process
Printed by child process
Tue Sep 17 15:44:07 CDT 2013
Completed process id: -1

Fungsi kill ()

Perl kill('KILL', (Process List)) function bisa digunakan untuk menghentikan proses semu dengan meneruskan ID yang dikembalikan oleh fork ().

Perhatikan bahwa menggunakan kill ('KILL', (Process List)) pada pseudo-process () biasanya dapat menyebabkan kebocoran memori, karena thread yang mengimplementasikan pseudo-process tidak mendapatkan kesempatan untuk membersihkan resource-nya.

Kamu dapat memakai kill() berfungsi untuk mengirim sinyal lain ke proses target, sebagai contoh berikut ini akan mengirim SIGINT ke ID proses 104 dan 102 -

#!/usr/bin/perl

kill('INT', 104, 102);
 
1;

Anda dapat menyematkan dokumentasi Pod (Plain Old Text) di modul dan skrip Perl Anda. Berikut adalah aturan untuk menggunakan dokumentasi yang disematkan di Kode Perl Anda -

Mulailah dokumentasi Anda dengan baris kosong, a =head1 perintah di awal, dan akhiri dengan a =cut

Perl akan mengabaikan teks Pod yang Anda masukkan ke dalam kode. Berikut ini adalah contoh sederhana menggunakan dokumentasi tertanam di dalam kode Perl Anda -

#!/usr/bin/perl

print "Hello, World\n";

=head1 Hello, World Example
This example demonstrate very basic syntax of Perl.
=cut

print "Hello, Universe\n";

Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -

Hello, World
Hello, Universe

Jika Anda akan meletakkan Pod Anda di akhir file, dan Anda menggunakan tanda potong __END__ atau __DATA__, pastikan untuk meletakkan baris kosong di sana sebelum perintah Pod pertama seperti berikut, jika tidak tanpa baris kosong sebelumnya yang =head1, banyak penerjemah tidak akan mengenali =head1 sebagai memulai blok Pod.

#!/usr/bin/perl

print "Hello, World\n";

while(<DATA>) {
  print $_;
}

__END__

=head1 Hello, World Example
This example demonstrate very basic syntax of Perl.
print "Hello, Universe\n";

Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -

Hello, World

=head1 Hello, World Example
This example demonstrate very basic syntax of Perl.
print "Hello, Universe\n";

Mari kita ambil satu contoh lagi untuk kode yang sama tanpa membaca bagian DATA -

#!/usr/bin/perl

print "Hello, World\n";

__END__

=head1 Hello, World Example
This example demonstrate very basic syntax of Perl.
print "Hello, Universe\n";

Ketika kode di atas dijalankan, itu menghasilkan hasil sebagai berikut -

Hello, World

Apa itu POD?

Pod adalah bahasa markup yang mudah digunakan yang digunakan untuk menulis dokumentasi untuk Perl, program Perl, dan modul Perl. Ada berbagai penerjemah yang tersedia untuk mengonversi Pod ke berbagai format seperti teks biasa, HTML, halaman manual, dan banyak lagi. Markup Pod terdiri dari tiga jenis paragraf dasar -

  • Ordinary Paragraph - Anda dapat menggunakan kode pemformatan dalam paragraf biasa, untuk huruf tebal, miring, gaya kode, hyperlink, dan lainnya.

  • Verbatim Paragraph - Paragraf kata demi kata biasanya digunakan untuk menampilkan blok kode atau teks lain yang tidak memerlukan penguraian atau pemformatan khusus, dan yang tidak boleh digabungkan.

  • Command Paragraph- Paragraf perintah digunakan untuk perlakuan khusus pada seluruh potongan teks, biasanya sebagai judul atau bagian dari daftar. Semua paragraf perintah dimulai dengan =, diikuti dengan pengenal, diikuti oleh teks arbitrer yang dapat digunakan oleh perintah sesuka hati. Perintah yang saat ini dikenal adalah -

=pod
=head1 Heading Text
=head2 Heading Text
=head3 Heading Text
=head4 Heading Text
=over indentlevel
=item stuff
=back
=begin format
=end format
=for format text...
=encoding type
=cut

Contoh POD

Pertimbangkan POD berikut -

=head1 SYNOPSIS
Copyright 2005 [TUTORIALSOPOINT].
=cut

Kamu dapat memakai pod2html utilitas yang tersedia di Linux untuk mengubah POD di atas menjadi HTML, sehingga akan menghasilkan hasil sebagai berikut -

Selanjutnya, perhatikan contoh berikut -

=head2 An Example List

=over 4
=item * This is a bulleted list.
=item * Here's another item.
=back
=begin html
<p>
Here's some embedded HTML.  In this block I can
include images, apply <span style="color: green">
styles</span>, or do anything else I can do with
HTML.  pod parsers that aren't outputting HTML will
completely ignore it.
</p>

=end html

Saat Anda mengonversi POD di atas menjadi HTML menggunakan pod2html, ini akan menghasilkan hasil sebagai berikut -

An Example List
   This is a bulleted list.
   Here's another item.
Here's some embedded HTML. In this block I can include images, apply 
styles, or do anything else I can do with HTML. pod parsers that aren't 
outputting HTML will completely ignore it.

Berikut adalah daftar semua fungsi penting yang didukung oleh Perl standar.

  • abs - fungsi nilai absolut

  • terima - terima soket masuk terhubung

  • alarm - jadwalkan SIGALRM

  • atan2 - arctangen dari Y / X dalam kisaran -PI hingga PI

  • bind - mengikat alamat ke soket

  • binmode - siapkan file biner untuk I / O

  • memberkati - membuat sebuah objek

  • pemanggil - dapatkan konteks panggilan subrutin saat ini

  • chdir - mengubah direktori kerja Anda saat ini

  • chmod - mengubah hak akses pada daftar file

  • chomp - menghapus pemisah record trailing dari string

  • chop - menghapus karakter terakhir dari string

  • chown - mengubah kepemilikan pada daftar file

  • chr - dapatkan karakter yang diwakili oleh nomor ini

  • chroot - buat direktori root baru untuk pencarian jalur

  • tutup - tutup file (atau pipa atau soket) pegangan

  • closedir - tutup pegangan direktori

  • sambungkan - sambungkan ke soket jarak jauh

  • lanjutkan - blok trailing opsional dalam beberapa saat atau ke depan

  • cos - fungsi cosinus

  • crypt - enkripsi gaya sandi satu arah

  • dbmclose - melanggar pengikatan pada file dbm yang diikat

  • dbmopen - membuat pengikatan pada file dbm yang diikat

  • didefinisikan - menguji apakah nilai, variabel, atau fungsi ditentukan atau tidak

  • delete - menghapus nilai dari hash

  • mati - ajukan pengecualian atau bail out

  • lakukan - mengubah BLOK menjadi TERM

  • dump - membuat core dump langsung

  • each - mengambil pasangan kunci / nilai berikutnya dari hash

  • endgrent - dilakukan menggunakan file grup

  • endhostent - dilakukan dengan menggunakan file hosts

  • endnetent - dilakukan menggunakan file jaringan

  • endprotoent - dilakukan dengan menggunakan file protokol

  • endpwent - dilakukan menggunakan file passwd

  • endservent - dilakukan menggunakan file layanan

  • eof - uji filehandle untuk mengetahui akhirnya

  • eval - menangkap pengecualian atau mengkompilasi dan menjalankan kode

  • exec - tinggalkan program ini untuk menjalankan yang lain

  • ada - uji apakah kunci hash ada

  • exit - hentikan program ini

  • exp - angkat I untuk sebuah kekuatan

  • fcntl - panggilan sistem kontrol file

  • fileno - mengembalikan deskriptor file dari filehandle

  • flock - mengunci seluruh file dengan kunci penasehat

  • garpu - buat proses baru seperti ini

  • format - mendeklarasikan format gambar dengan digunakan oleh fungsi write ()

  • formline - fungsi internal yang digunakan untuk format

  • getc - dapatkan karakter berikutnya dari filehandle

  • getgrent - dapatkan rekor grup berikutnya

  • getgrgid - dapatkan catatan grup dengan ID pengguna grup

  • getgrnam - dapatkan catatan grup dengan nama grup

  • gethostbyaddr - dapatkan catatan host dengan alamatnya

  • gethostbyname - dapatkan nama host record yang diberikan

  • gethostent - dapatkan catatan host berikutnya

  • getlogin - kembali yang login di tty ini

  • getnetbyaddr - dapatkan catatan jaringan berdasarkan alamatnya

  • getnetbyname - dapatkan nama jaringan record yang diberikan

  • getnetent - dapatkan catatan jaringan berikutnya

  • getpeername - temukan ujung lain dari koneksi soket

  • getpgrp - dapatkan grup proses

  • getppid - dapatkan ID proses induk

  • getpriority - dapatkan nilai bagus saat ini

  • getprotobyname - dapatkan nama protokol record yang diberikan

  • getprotobynumber - mendapatkan catatan protokol protokol numerik

  • getprotoent - dapatkan rekaman protokol berikutnya

  • getpwent - dapatkan data passwd berikutnya

  • getpwnam - dapatkan catatan passwd dengan nama login pengguna

  • getpwuid - dapatkan catatan passwd dengan ID pengguna

  • getservbyname - dapatkan catatan layanan yang diberikan namanya

  • getservbyport - dapatkan catatan layanan dengan port numerik

  • getservent - dapatkan catatan layanan berikutnya

  • getsockname - ambil sockaddr untuk soket yang diberikan

  • getsockopt - dapatkan opsi soket pada soket tertentu

  • glob - perluas nama file menggunakan wildcard

  • gmtime - ubah waktu UNIX menjadi catatan atau string menggunakan format waktu Greenwich.

  • goto - buat kode spaghetti

  • grep - menemukan elemen dalam daftar uji benar terhadap kriteria yang diberikan

  • hex - mengubah string menjadi angka heksadesimal

  • import - menambal namespace modul menjadi milik Anda

  • index - temukan substring di dalam string

  • int - dapatkan bagian bilangan bulat dari sebuah angka

  • ioctl - panggilan sistem kontrol perangkat yang bergantung pada sistem

  • gabung - menggabungkan daftar menjadi string menggunakan pemisah

  • kunci - mengambil daftar indeks dari hash

  • kill - mengirim sinyal ke proses atau grup proses

  • terakhir - keluar dari blok sebelum waktunya

  • lc - mengembalikan versi huruf kecil dari sebuah string

  • lcfirst - mengembalikan string hanya dengan huruf berikutnya dalam huruf kecil

  • length - mengembalikan jumlah byte dalam sebuah string

  • link - buat hard link di filesytem

  • dengar - daftarkan soket Anda sebagai server

  • local - buat nilai sementara untuk variabel global (cakupan dinamis)

  • localtime - ubah waktu UNIX menjadi record atau string menggunakan waktu lokal

  • lock - dapatkan kunci thread pada variabel, subrutin, atau metode

  • log - mengambil logaritma natural untuk angka

  • lstat - nyatakan tautan simbolis

  • m - mencocokkan string dengan pola ekspresi reguler

  • peta - menerapkan perubahan ke daftar untuk mendapatkan kembali daftar baru dengan perubahan

  • mkdir - buat direktori

  • msgctl - Operasi kontrol pesan SysV IPC

  • msgget - dapatkan antrian pesan SysV IPC

  • msgrcv - menerima pesan SysV IPC dari antrian pesan

  • msgsnd - mengirim pesan SysV IPC ke antrian pesan

  • my - mendeklarasikan dan menetapkan variabel lokal (pelingkupan leksikal)

  • berikutnya - mengulang satu blok sebelum waktunya

  • no - unimport beberapa simbol modul atau semantik pada waktu kompilasi

  • okt - mengubah string menjadi angka oktal

  • open - buka file, pipa, atau deskriptor

  • opendir - buka direktori

  • ord - temukan representasi numerik karakter

  • our - mendeklarasikan dan menetapkan variabel paket (pelingkupan leksikal)

  • paket - mengubah daftar menjadi representasi biner

  • package - mendeklarasikan namespace global terpisah

  • pipa - buka sepasang pegangan file yang terhubung

  • pop - menghapus elemen terakhir dari array dan mengembalikannya

  • pos - mencari atau menyetel offset untuk pencarian m // g terakhir / berikutnya

  • print - menampilkan daftar ke filehandle

  • printf - mengeluarkan daftar yang diformat ke filehandle

  • prototipe - dapatkan prototipe (jika ada) dari subrutin

  • push - menambahkan satu atau lebih elemen ke sebuah array

  • q - mengutip satu string

  • qq - mengutip string dua kali

  • qr - Pola kompilasi

  • quotemeta - mengutip karakter ajaib ekspresi reguler

  • qw - mengutip daftar kata

  • qx - kutipan backquote sebuah string

  • rand - ambil nomor pseudorandom berikutnya

  • read - input buffer dengan panjang tetap dari filehandle

  • readdir - dapatkan direktori dari pegangan direktori

  • readline - mengambil record dari file

  • readlink - menentukan di mana tautan simbolik mengarah

  • readpipe - menjalankan perintah sistem dan mengumpulkan output standar

  • recv - menerima pesan melalui Socket

  • ulangi - mulai pengulangan loop ini lagi

  • ref - cari tahu jenis hal yang direferensikan

  • ganti nama - ubah nama file

  • memerlukan - memuat fungsi eksternal dari perpustakaan saat runtime

  • reset - hapus semua variabel dari nama tertentu

  • return - keluar dari suatu fungsi lebih awal

  • membalikkan - membalik string atau daftar

  • rewinddir - mengatur ulang pegangan direktori

  • rindex - pencarian substring kanan-ke-kiri

  • rmdir - menghapus direktori

  • s - mengganti pola dengan string

  • skalar - memaksa konteks skalar

  • seek - reposisi file pointer untuk akses acak I / O

  • seekdir - penunjuk direktori reposisi

  • pilih - reset output default atau lakukan multiplexing I / O

  • semctl - Operasi kontrol semaphore SysV

  • semget - set semaphore SysV

  • semop - Operasi semaphore SysV

  • kirim - mengirim pesan melalui soket

  • setgrent - persiapkan file grup untuk digunakan

  • sethostent - menyiapkan file host untuk digunakan

  • setnetent - menyiapkan file jaringan untuk digunakan

  • setpgrp - mengatur grup proses dari suatu proses

  • setpriority - mengatur nilai bagus proses

  • setprotoent - menyiapkan file protokol untuk digunakan

  • setpwent - siapkan file passwd untuk digunakan

  • setservent - menyiapkan file layanan untuk digunakan

  • setsockopt - mengatur beberapa opsi soket

  • shift - menghapus elemen pertama dari sebuah array, dan mengembalikannya

  • shmctl - Operasi memori bersama SysV

  • shmget - dapatkan pengenal segmen memori bersama SysV

  • shmread - baca memori bersama SysV

  • shmwrite - tulis memori bersama SysV

  • shutdown - tutup hanya setengah dari koneksi soket

  • sin - mengembalikan sinus sebuah angka

  • sleep - blokir selama beberapa detik

  • soket - buat soket

  • socketpair - buat sepasang soket

  • sort - mengurutkan daftar nilai

  • sambatan - menambah atau menghapus elemen di mana saja dalam larik

  • split - memisahkan string menggunakan pemisah regexp

  • sprintf - cetak diformat menjadi string

  • sqrt - fungsi akar kuadrat

  • srand - seed generator nomor acak

  • stat - dapatkan informasi status file

  • belajar - mengoptimalkan data masukan untuk pencarian berulang

  • sub - menyatakan subrutin, mungkin tanpa nama

  • substr - ambil atau ubah porsi pengadukan

  • symlink - buat tautan simbolis ke file

  • syscall - menjalankan panggilan sistem sewenang-wenang

  • sysopen - buka file, pipa, atau deskriptor

  • sysread - input tanpa buffer dengan panjang tetap dari filehandle

  • sysseek - posisi penunjuk I / O pada pegangan yang digunakan dengan sysread dan syswrite

  • sistem - menjalankan program terpisah

  • syswrite - output tanpa buffer dengan panjang tetap ke filehandle

  • beri tahu - dapatkan seekpointer saat ini di filehandle

  • telldir - dapatkan seekpointer saat ini pada pegangan direktori

  • tie - mengikat variabel ke kelas objek

  • terikat - dapatkan referensi ke objek yang mendasari variabel terikat

  • time - mengembalikan jumlah detik sejak 1970

  • waktu - mengembalikan waktu yang telah berlalu untuk proses diri dan anak

  • tr - mentransliterasi string

  • truncate - mempersingkat file

  • uc - mengembalikan versi huruf besar dari sebuah string

  • ucfirst - mengembalikan string hanya dengan huruf berikutnya dalam huruf besar

  • umask - mengatur mask mode pembuatan file

  • undef - menghapus definisi variabel atau fungsi

  • batalkan tautan - hapus satu tautan ke file

  • unpack - ubah struktur biner menjadi variabel perl normal

  • unshift - tambahkan lebih banyak elemen ke awal daftar

  • melepaskan - memutuskan ikatan yang mengikat ke variabel

  • use - memuat dalam modul pada waktu kompilasi

  • utime - mengatur akses terakhir file dan mengubah waktu

  • nilai - mengembalikan daftar nilai dalam hash

  • vec - menguji atau mengatur bit tertentu dalam sebuah string

  • tunggu - tunggu proses anak mati

  • waitpid - tunggu proses anak tertentu mati

  • wantarray - dapatkan konteks void vs skalar vs daftar panggilan subrutin saat ini

  • memperingatkan - mencetak info debugging

  • tulis - mencetak rekaman gambar

  • -X - tes file (-r, -x, dll)

  • y - mentransliterasi string