ป้ายเลื่อน


WelCom To www.Kiss-Hack.blogspot.com สังคม IT สังคม Hacker

หมวดหมู่

วันศุกร์ที่ 7 กุมภาพันธ์ พ.ศ. 2557

การเขียนภาษา Perl เบื้องต้น



 ภาษา Perl คือ

  ภาษา Perl เป็็นภาษาทีี่ใช้้ตัวแปรภาษาแบบ Interpreter ซึ่งก็คือจะทำการรัน
คำสั่งและแปลความหมายทีละบรรทัด ซึ่งแตกต่างจากตัวแปลภาษาแบบ
Complier เช่่น ภาษาซี เป็น็ ต้้น โดยในการรันภาษา Perl ทำได้  2 วิธี คือ

 วิธีที่ 1 : รันจากจาก Interpreter โดยตรง เช่น

#perl myfile.pl

 วิธีที่ 2 : รันผ่านโปรแกรม ShellRun ซึ่งในการรันแบบนี้ ในบรรทัด

อย่างแรกจะต้องบอกที่อยู่ของ Perl Interpreter ก่อน ซึ่งการใส่บรรทัดแรกนี้
มีชื่อเรียกว่า “Shebang” ซึ่ง Shebang จะต้องประกาศในบรรทัดแรก
ของ SourceCode
ก่อน ซึ่งการใส่บรรทัดแรกนี้
มีชื่อเรียกว่า “Shebang” ซึ่ง Shebang จะต้องประกาศในบรรทัดแรก
ของ SourceCode
THE SHEBANG
ส่่วนหัวของไฟล์ใ์ในกรณีเขียนแบบ Shebang จะต้้องเพิิ่มดังนีี้

 #!/usr/bin/perl หรือ #!/usr/bin/env perl

ในการตรวจสอบเวอร์ชั่นของ Perl สามารถใชค้คำาสั่ง

 #perl –v

  นอกจากนี้ ในกรณีที่รัน Perl แบบ Shebang จำเป็นที่จะต้องแจ้ง
ให้ระบบปฏิบัติการสามารถ Execute File ได้ โดยใช้คำสั่ง chmod
โดยที่เปลี่ยนสิทธิ เฉพาะ Owner ให้สามารถ Execute File ได้ก็
เพียงพอ
โครงสร้า้งการเขียน PERL SCRIPT

ทุกประโยค (Statement) ต้้องปิดท้้ายด้้วยเครืื่องหมาย  ;  (semicolon)
ฟังก์ชั่นและตัวแปร เป็นแบบ Case Sensitive
  การเขียนหมายเหตุ (Comments) สามารถใช้เครื่องหมาย “ # ” ที่ต้น

ข้อความ และจะมีผลไปถึงจนจบบรรทัด
ห้ามใช้เครื่องหมาย  //  หรือ  /* … */

   Perl จะไม่แสดงข้อผิดพลาด หรือคำเตือนใดๆ (Warning) จนกว่า
ผู้้ใช้จ้ ะเพิิ่มคำสั่ง use warnings; หรือ –w ที่ออบชั่นของ Shebang

#!/usr/bin/perl -w

การประกาศตัวแปร (VARIABLE DECLARATIONS)

ภาษา Perl ไม่จำเป็็นต้้องประกาศตัวแปร แต่ถ้้าต้้องการให้้ Perl มี
การบังคับให้ต้องมีการประกาศตัวแปรก็สามารถทำได้ โดยใช้
คำสั่ง


   use strict; #ประกาศครั้งเดียว
   my <ชื่อตัวแปร>;

ชนิดของตัวแปร (VARIABLES TYPE)
 ตัวแปรพื้นฐานแบ่งออกเปน็็ 3 ชนิด หลักๆ ไดแ้้ก่

 Scalar
 Array
 Hash

ตัวแปรชนิด SCALARS

 ตัวแปรชนิด Scalars คือ ตัวแปรที่สามารถเก็บค่าได้้เพียงค่าเดียว
เท่านั้นในหนึ่งตัวแปรในภาษา C/C++ มีตัวแปรชนิด Scalars อยู่หลายชนิดได้แก่
 int, float, double, char, bool
ซึ่งตัวแปร Scalars ในภาษา Perl สามารถที่เก็บข้อมูลได้หลายชนิด
เช่น จำนวนเต็ม (Integer), ทศนิยม (Floating-Point) และอื่นๆ เป็น
ต้น

ตัวแปรชนิด SCALARS

ตัวแปรชนิด Scalar จะขึ้นต้้นด้้วยเครื่องหมาย “ $ ” ตัวอักขระถัด
จากเครื่องหมาย $ สามารถเป็นได้ทั้งตัวอักษร a-z, A-Z และ “ _ ”
(UnderScore) ต่อจากตั้นสามารถเป็นได้ทั้งตัวอักษร a-z, A-Z และ
“ _ ” (UnderScore) และตัวเลขซึ่งจะเหมือนกับการประกาศตัว
แปรในภาษาซีเว้นแต่จะมีเครื่องหมาย $ ขึ้นต้น
ชื่อตัวแปรมีความยาวได้ตัั้งแต่่ 1 ถึง 251 ตัวอักษร
เช่น $foo, $a, $zebra1, $F87dr_df3
ตัวอย่างการประกาศตัวแปรที่ผิด

$24da, $hi&bye, $bar$foo

การกำหนด่า่ ตัวแปร

$foo = 3;
$d = 4.43;
$temp = ‘Z’;
$My_String = “Hello, I’m Paul.”

ตัวแปร LISTS

ตัวแปร List มาจากตัวเต็มว่า่ “list literal” ซึ่งเป็็นตัวแปรทีี่มีการจัดเก็บค่า่
แบบเรียงลำดับไว้ ซึ่งถูกคั่นด้วยเครื่องหมาย “ , ”
ตัวแปร List สามารถเก็บตัวเลขหรือข้อ้ มูลอืื่นๆ เช่่น

(43, “Hello World”, 3.1415)

 การกำหนดค่าให้กับตัวแปร Lists สามารถกำหนดค่าได้หลายๆ ค่า พร้อม
กันเช่น

 ($a, $b, $c) = (42, “Foo bar”, $size);
โดยที่ $a 42, $b “Foo bar”, $c $size

ตัวแปร List สามารถกำหนดได้โดยใช้ช่วงข้อมูล (Range)

($a, $b, $c, $d, $e) = (1..4, 10);
($x, $y, $z) = (“a” .. “c”);

การกำหนดค่า่ ให้กัั้บตัวแปร LIST
 ทั้งสองด้้านของเครืื่องหมาย “ = ” ไม่จำเป็นตอ้งมีจำนวนขอ้้มูลทั้งด้้านซ้้าย และขวาที่เท่ากัน เช่น

($a, $b, $c) = (5, 10, 15, 20);
โดยที่ $a 5, $b 10, $c 15. (20 ไม่ถูู่กกำหนด)

($a, $b, $c) = (5, 10);
โดยที่ $a 5, $b 10, $c ไม่กำหนดค่า

($t1, $t2) = ($t2, $t1);
โดยที่ $temp = $t1; $t1 = $t2; $t2 = $temp;

ตัวแปร ARRAYS

 ตัวแปร Arrays ในภาษา Perl จะมีความยืดหยุ่นกว่าในภาษา
C/C++ คือ ไม่ต้องกำหนดขนาด Array หรือชนิดของตัวแปร ภายในตัวแปร Array สามารถ จัดเก็บข้อ มูลได้้หลายชนิด เช่่น

เก็บค่าตัวเลข และตัวอักษร ในตัวแปร Array เดียวกันได้
 ตัวแปร Array จะขึ้นต้นด้วยเครื่องหมาย “@” เช่น
@array, @foo, @My_Array, @temp34
การกำหนดค่า่ ให้กัั้บตัวแปร ARRAY
 @foo = (1, 2, 3, 4);
 @bar=(“my”,“name”,“is”,“Paul”);
 @temp = (34, ‘z’, “Hi!”, 43.12);
 $let = $temp[1]; # $let is now ‘z’

  ถ้าต้องการนำค่าเข้าและออกค่าเดียวออกจาก ตัวแปร Array ให้
ใช้เครื่องหมาย $ แทน @
  $bar[2] = “was”;
  @bar now   (“my”, “name”, “was”, “Paul”);

LISTS ของตัวแปร ARRAYS
 ตัวแปร Arrays ที่อยู่ด้้านซ้้ายของเครื่องหมายเท่ากับ จะเก็บค่าที่อยู่
ด้านขวาของเครื่องหมายเท่ากับ

($foo, @bar, $baz)=(1, 2, 3, 4, 5, 6);
โดยที่ $foo=1; @bar=(2, 3, 4, 5, 6); $baz=undef;

การเชื่อมต่อตัวแปร Array ด้วยตัวแปร Arrays
@a1 = (1, 2, 3); @a2 = (4, 5, 6);
@a3 = (@a1, @a2);
@a3  (1, 2, 3, 4, 5, 6)

เพิ่มเติมเกี่ยวกับตัวแปร ARRAYS
 การหา Indexing ตัวสุดท้้ายของ Array
@foo = (6, 25, 43, 31);
$#foo   3. Last index of @foo.

โดยที่ $foo[$#foo]   31;
  การกำหนดปรับขนาดของตัวแปร Array
  $#foo = 5;
 เป็นการสร้าง Undefined values ที่ค่าต่อท้ายตัวแปร @foo
  $#foo = 2;
  เป็นการตัดค่าของตัวแปร @foo ให้เหลือเพียง 3 ค่า คือ 0-2
เพิ่มเติมเกี่ยวกับตัวแปร ARRAYS

ตัวแปร Array สามารถกำหนด Index เป็็นค่าลบได ้ คือ ถ้า้ index 0
คือค่าแรก index -1 คือค่าสุดท้าย และ index -2 คือค่ารองสุดท้าย
เช่น $foo[$#foo] และ $foo[-1] มีความหมายเดียวกัน คือ
Index สุดท้าย

 สามารถดึงข้อมูลบางส่วนของ Array ได้ดังนี้
  @bar = @foo[1..3]; @bar  (25, 43, 31)
  @bar = @foo[0,2]; @bar   (3, 43)
  @bar = @foo[1]; @bar  (25);

การเชื่อมต่่อและแยกข้้อความ JOIN/SPLIT
 การเชื่อมต่่อและแยกขอ้้ ความ เปน็็ คำสัั่งที่มีอยู่่ในภาษา Perl อันได้แ้ ก่่
 คำสั่ง split ใช้แยกข้อความออกเป็นหลายๆ ค่าด้วยเครื่องหมายที่กำหนด

$BigString = “Hello,_I_am_Paul”;
@strings = split ‘_’, $BigString;
โดยที่ @strings  (“Hello,”, “I”, “am”, “Paul”);
คำสั่ง join เป็นคำสั่งที่ใช้เชื่อมข้อความเข้าด้วยกัน
$BigString = join ‘ ’, @strings;
โดยที่ $BigString  “Hello, I am Paul”;

HASH
  (somewhat) Analogous to datatype hashtable.
  More closely resembles STL map
  aka “Associative Array” – ie, array not indexed by
numerical sequence.
  list of keys and values.
 All hash variables start with %
 Use to keep list of corresponding values
 TIP: Any time you feel the need to have two separate
arrays, and do something with elements at
corresponding positions in the arrays (but don’t care
where in array elements actually are), USE A HASH
HASH EXAMPLE
 Want a list of short names for months:
%months = (
“Jan” => “January”,
“Feb” => “February”,
“Mar” => “March”,

);
 reference by *curly* brackets…
 Avoid confusion with array notation
 $month{“Jan”}  “January”;
MORE HASH EXAMPLES
 Hash elements can be dynamically created (in fact,
so can entire hashes)
 $profs{“Perl”} = “Paul Lalli”;
 $profs{“Op Sys”} = “Robert Ingalls”;
 $profs{“CS1”} = “David Spooner”;
 %profs   (“Perl” => “Paul Lalli”,
 “Op Sys” => “Robert Ingalls”,
 “CS1” => “David Spooner”);
 Hashes will “flatten” into normal lists:
 @p_arr = %profs;
 @p_arr 􀃆(“Perl”, “Paul Lalli”, “Op Sys”, “Robert
Ingalls”, “CS1”, “David Spooner”);

ตัวแปรพิเศษทีี่อยูใ่่ นภาษา PERL

 $! – last error received by operating system
 $, – string used to separate items in a printed list
 $” – string to use to separate items in an
interpolated array (this makes sense next week)
 $_ - “default” variable, used by several functions
 %ENV – Environment variables
 @INC – directories Perl looks for include files
 $0 – name of currently running script
 @ARGV – command line arguments

คำสัั่งแสดงผลลัพธ์อ์ อกทางจอภาพ

 the print statement.
 Takes a list of arguments to print out
 Before the list of arguments, optionally specify a
filehandle to which to print
 If omitted, default to STDOUT
 If the list of arguments is omitted, print whatever
value is currently in variable $_

ตัวอย่า่ งการแสดงผลด้้วยคำสัั่ง PRINT

Hello World program:

#!/usr/bin/env perl
print “Hello World\n”;


ตัวอย่่าง

 print “My name is $name\n”;
 print “Hi ”, “what’s ”, “yours?\n”;
 print 5 + 3;
 print ((4 * 4). “\n”);

การแสดงผลด้้วยคำสัั่ง PRINT ในรูปแบบอื่นๆ
สามารถใช้้คำสั่ง Print กับตัวแปร List ซึ่งโดยปกติแล้้ว คำสั่ง Print จะ
แสดงผลลัพธ์ของ Element ของ List เรียงต่อในบรรทัดเดียวกัน เช่น

@nums = (23, 42, 68);
print @nums, “\n”;

ผลลัพธ์ที่ได้ 234268
สามารถเปลี่ยนสัญลักษณ์ที่ใช้คั่นระหว่าง Element ของ List โดยใช้ตัวแปร

$,
$, = “, ”;
print @nums, “\n”;

ผลลัพธ์ที่ได้ 23, 42, 68
การรับค่่าจากคีย์บ์ อร์์ด
ตัวดำเนินการในการรับค่่า คือ “ <> ”
 มีชื่อเรียกว่า “angle operator” หรือ “diamond operator” ใช้สำหรับอ่าน
ไฟล์หรือคีย์บอร์ด ซึ่งค่าปกติ คือ STDIN
ตัวอย่างเช่น

$input = <>;
 อ่า่นค่าจาก STDIN และบันทึกไว้ที่ตัวแปร $input
@input = <>;
 เป็นการอ่านค่าจาก STDIN และบันทึกไว้ที่ตัวแปร @input
คำสัั่ง CHOP และ CHOMP
เมื่อมีการอ่่านขอ้้ มูลแบบบรรทัด จะมี White Space ต่่อท้า้ยบรรทัดคือ “\n”
ซึ่งไม่ต้องการนำมาใช้ในการประมวลผล

คำสั่ง chomp จะทำการกำจัด ตัวอักษรขึ้นบรรทัดใหม่ ที่ต่อท้าย
คำสั่ง chop จะทำการกำจัด ตัวอักษรตัวสุดท้าย ไม่ว่าจะเป็น White Space
หรือตัวอักษร ซึ่งคำสั่ง Chomp จะปลอดภัยว่า Chop
 คำสั่ง chomp สามารถนำมาประยุกต์ใช้งานกับตัวแปร List ได้ โดยคำสั่ง
Chomp จะกระทำากับทุกๆ Elecment ใน List
chomp (@s = (“foo\n”,“bar\n”,“baz\n”));
โดยที่ @s   (“foo”, “bar”, “baz”);