Friday, 21 June 2013

subroutine & Perl basic part 2

setelah mengenal basic2 penulisan pada subroutine, dan variable2 dasar pada subroutine, kita akan membahas bagaimana cara menghitung menggunakan subroutine dan dasar2 regular expression pada subroutine.

capture dengan regular expression
dalam subroutine, kita juga bisa mengambil data khusus untuk dimasukan ke variable. caranya sama seperti mengcapture di macro ke $.lastMatchN, namun nama variable yang digunakan adalah $1 $2 $3 dst.
contoh :



sub belajar {
$a = "nama saya naya";
if ($a =~ /nama saya (\w+)/) {
    $nama = $1;
    }
return $nama;
}

maka $nama akan menyimpan $1 sebagai variablenya yang merupakan hasil caputre berupa "naya"

regular expression
pada subroutine, juga dikenal regular expression seperti pada console, namun sebelumnya untuk mengantisipasi lupa, saya akan melampirkan beberapa metacharacter penting di regular expression dan beberapa tambahan yang ada di subroutine

jenis karakter :
\s   ---> "space" karakter spasi, tab, newline
\S  ---> selain spasi, tab dan newline
\w  ---> "word" karakter huruf dan angka dan _
\W ---> selain karakter huruf dan angka dan _
\d   ---> "decimal" karakter angka
\D  ---> selain karakter angka
\n   ---> "newline" baris baru
.     ---> semua karakter termasuk angka huruf namun newline tidak termasuk


keterangan jumlah karakter :
  ---> mengindikasikan bahwa karakter didepannya berjumlah > 1 misal \w+
?   ---> mengindikasikan bahwa karakter didepannyaberjumlah 0 atau 1 \s?
*   ---> mengindikasikan bahwa karakter didepannyaberjumlah 0 atau > 1 \d*
{m,n}---> menunjukan bahwa karakter didepannya tidak boleh kurang dari m dan tidak boleh lebih dari n, misal a{1,3} maka cocok dengan a, aa, dan aaa

keterangan tambahan :
^   ---> menunjukan bahwa karakter setelahnya berada pada baris paling awal
$   ---> menunjukan bahwa karakter sebelumnya berada pada akhir baris
   ---> berfungsi sebagai kata ganti "atau" misal a|b , maka kata a atau b cocok
[ ]  ---> hanya cocok pada 1 karakter yang ada didalamnya misal [abc] hanya cocok dengan a, b, dan c atau [a-c] hanya cocok dengan a, b, c.
[^ ] ---> hanya cocok dengan karakter selain didalamnya misal [^abc] cocok dengan d, e, f dst, atau [^a-c] cocok dengan karakter selain a, b, c
( )  ---> berguna untuk mengambil kata di dalam kurung menjadi $.lastMatchn
\     ---> berguna untuk mengubah metacharacter menjadi character biasa, contoh tanda ( ) merupakan metacharacter, maka agar dibaca bukan metacharacter kita harus menuliskannya dengan \( \)

operator khusus perl
=~  ---> adalah condition khusus yang menandakan bahwa argumen di sebelah kanannya merupakan regular expression yang sesuai dengan variable di kiri, misal $a =~ /\d/
!~  ---> adalah condition khusus yang menandakan bahwa argumen di sebelah kanannya merupakan regular expression yang tidak sesuai dengan variable di kiri, misal $a !~ /\d/
eq  ---> equal, sama dengan tanda = namun untuk string bukan numeric
ne   ---> not equal, sama dengan tanda != namun untuk string bukan numeric
lt    ---> less than, sama dengan tanda <
gt   ---> greater than, sama dengan tanda >
le   ---> less than or equal. sama dengan tanda >=
ge  ---> greater than or equal. sama dengan tanda <=
cmp ---> comparison, mengembalikan angka -1, 0, dan 1.
<=>  ---> numeric comparison, mengembalikan angka -1, 0, or 1.

calculation
untuk melakukan perhitungan dengan menggunakan subroutine cukup mudah. kita hanya perlu menggunakan scalar variable untuk menyimpan dan menjalankan perintah perhitungan, yang isinya menggunakan operator2 perhitungan yang familier, diantaranya

+     : penjumlahan
-      : pengurangan
\       : pembagian
*      : perkalian
**    : pangkat
sqrt  : akar

adapun tambahan operator yaitu:
++ untuk secara spontan menambahkan 1
-- untuk secara spontan menambahkan 1

contoh :

sub belajar {
$a = 1+1;
$b = $a*2;
$c = $b\$a;
return "$a $b $c"
}
program diatas akan memberikan output berupa "2 4 2"

sedangkan untuk operator ++ dan -- memiliki pengaturannya sendiri. jika tanda ++ atau -- berada di depan string, maka penambahan angka 1 akan dilakukan sebelum perhitungan dalam sebuah perintah selesai. sedangkan jika ditaruh di belakang maka akan dilakukan setelah perintah selesai.
contoh

sub belajar {
$a = 5;
$a++;
return $a;
}

atau

sub belajar {
$a = 5;
++$a;
return $a;
}

kedua program akan memberikan output berupa 6

berbeda dengan bentuk seperti ini :

sub belajar {
$a = 5;
$b = $a++ + 10;
return $a;
}

karena tanda ++ berada di belakang variable $a, maka program akan melakukan perhitungan $a + 10 lebih dahulu sehingga $b = 15, namun saat program me return $a, karena $ sudah ditambah 1 setelah selesai melakukan perhitungan, hasil $a = 6

lain lagi jika :

sub belajar {
$a = 5;
$b = ++$a + 10;
return $a;
}

karena tanda ++ berada di depan $a, maka penambahan $a dilakukan duluan sebelum perhitungan dimulai, sehingga $b = 16, dan saat $a di return, hasilnya adalah $a = 6

No comments:

Post a Comment