Tải bản đầy đủ (.pdf) (53 trang)

Hướng dẫn lập trình Perl cơ bản docx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.12 MB, 53 trang )

PERL FOR VIETNAMESE COMMUNITY
Perl – The 1
st
Step
Hướng dẫn lập trình Perl cơ bản

[JaPh]
2/5/2009




The book is written by bvKim and [JaPh] with a quick guide and introduction on how to start
programming computer language with Perl in an easy way.
[Hướng dẫn lập trình Perl cho người Việt Nam] – Tác giả: [JaPh]
February 5, 2009



Page 2





[Hướng dẫn lập trình Perl cho người Việt Nam] – Tác giả: [JaPh]
February 5, 2009



Page 3





MỤC LỤC
Chuyên mục
Trang


A. Giới thiệu về Perl và tác giả

1. Perl là gì?

2. Ứng dụng Perl

3. Cần gì để lập trình Perl?

4. Lập trình Perl khó hay dễ?

5. Đôi điều về tác giả

6. Quy ước và kí hiệu trong sách



B. Kiểu dữ liệu

I. Kiểu số

1. Số nguyên


2. Số thực

3. Toán tử kiểu số

II. Kiểu chuỗi

1. Lưu trữ

2. Kí tự đặc biệt

3. Toán tử kiểu chuỗi



C. Biến

1. Scalar

2. List

3. Hash



D. Cấu trúc chương trình Perl



E. Toán tử và độ ưu tiên


1. Tự tăng – giảm

2. Quan hệ

3. So sánh ngang bằng

4. Toán tử vói bit (bitwise)

5. Điều kiện



F. Cấu trúc điều kiện

1. Rẽ nhánh IF

2. Rẽ nhánh UNLESS



[Hướng dẫn lập trình Perl cho người Việt Nam] – Tác giả: [JaPh]
February 5, 2009



Page 4



G. Nhập xuất


1. Chuẩn Input

2. Đối số chương trình

3. Toán tử kim cương <>

4. Các nguồn khác



H. Cấu trúc vòng lặp

1. Cấu trúc WHILE

2. Cấu trúc UNTIL

3. Cấu trúc FOR

4. Cấu trúc FOREACH

5. Nhãn và điều khiển



I. Tương tác với file



J. Hàm








[Hướng dẫn lập trình Perl cho người Việt Nam] – Tác giả: [JaPh]
February 5, 2009



Page 5



Trang này để trống.
[Hướng dẫn lập trình Perl cho người Việt Nam] – Tác giả: [JaPh]
February 5, 2009



Page 6



A. Giới thiệu qua về ngôn ngữ lập trình Perl

1. Perl là gì?
Perl là một ngôn ngữ lập trình nhỏ gọn được tạo nên bởi Larry Wall trong quá trình viết một báo

cáo. Từ một tools để ứng dụng làm báo cáo, ông đã phát triển nó lên một tầm cao mới và từ đó ngôn
ngứ lập trình Perl ra đời.
Nhiều người tự hỏi Perl có nghĩa là gì? Ban đầu Perl là những chữ cái đầu của “Practical Extraction
and Report Language” (ngôn ngữ thi hành xử lý và báo cáo thông tin); nhưng về sau Perl còn được gọi là
“Pathologically Eclectic Rubbish Lister” (cái này xin phép miễn dịch vì không dịch nổi). Nhà sang tạo ra
Perl, Larry Wall đều chấp nhận 2 ý kiến này vì nó đều thể hiện phong cách mà ngôn ngữ Perl sở hữu.
2. Ứng dụng Perl?
Từ những thập nên 90, Perl là tiền thân của thế hệ web dưới dạng tin tức báo cáo nổi. Về sau trở
thành ngôn ngữ dựng kịch bản có thể truyền tải thông tin qua mạng (Internet), hay còn được biết với CGI
(Common Graphics Interface).
Perl khi được tạo ra được sử dụng với các ứng dụng phân tích dữ liệu và báo cáo rất nhiều và
hiện nay vẫn dang được cộng đồng Perl thế giới hỗ trợ phát triển và ứng dụng khả năng này của Perl
trong nhiều lĩnh vực, ví dụ như phân tích và thông kê dữ liệu (data mining), sinh học phân tích
(bioinformetics)…
Perl được ứng dụng đầu tiên trên hệ thống Unix, sau này áp dụng vào hệ thống Linux. Perl là
ngôn ngữ được tạo nên từ ngôn ngữ lập trình C. Tuy nhiên, vì tính thuận tiện và gọn nhẹ nên Perl và C lại
còn có thể tương tác lẫn nhau trong quá trính trao đổi và tích hợp code. Vì thế, Perl còn được phát triển
mạnh trong lĩnh vực ứng dụng vào hệ thống Linux/Unix, chạy nhanh, nhỏ gọn và code rất đơn giản.
Ngôn ngữ lập trình Perl còn được ứng dụng rất nhiều vào các lĩnh vực khác và các bạn sẽ có thể
tìm hiểu về Perl rõ hơn qua Internet (Google.com).
3. Cần gì để lập trình Perl?
Nếu bạn sử dụng Linux hoặc hệ thống Unix/Linux thì theo mặc định perl luôn được cài đặt tích
hợp với hệ điều hành. Nếu không bạn có thể cập nhật perl bằng cách thêm package perl trong các ứng
dụng quản lý phần mềm của Linux/Unix hoặc download perl từ trang chủ và cài đặt theo hướng dẫn.
Nếu bạn sử dụng Windows, bạn có thể download Perl từ nhà phân phối Perl ActiveState
() nhưng có hạn chế rất lớn vì bạn chỉ có thể tải về và sử dụng các gói thư viện từ
ActiveState mà thôi. Do đó sẽ rất bất tiện nếu như bạn muốn cài đặt một gói thư viện Perl từ CPAN hay từ
nơi khác vào hệ thống. Điểm lợi của ActivePerl là nhà phân phối cung cấp sẵn tiện ích để quản lý các gói
thư viện sử dụng một cách tiện nghi, có thể cài đặt, chỉnh sửa hay gỡ bỏ thông qua tiện ích PPM (Perl
Package Manager của ActiveState.

[Hướng dẫn lập trình Perl cho người Việt Nam] – Tác giả: [JaPh]
February 5, 2009



Page 7



Ngoài bản phân phối thương mại ActivePerl, còn có StrawberryPerl là một gói mã nguồn mở và
miễn phí cung cấp các tiện ích đầy đủ cho các bạn muốn lập trình Perl trên Windows với các gói thư viện
phổ thông hay được sử dụng nhất hiện nay. Vì được phát triển bởi cộng đồng nên StrawberryPerl rất tiện
lợi trong việc tải và cài đặt các gói thư viện Perl từ CPAN thông qua CPAN Shell hay bạn có thể tự cài đặt
riêng một cách thuận lợi bằng cách sử dụng các tiện ích cung cấp sẵn từ gói StrawberryPerl. Điểm bất lợi
duy nhất mà mình thấy ở StrawberryPerl là tại thời điểm này, chưa có tiện ích hỗ trợ gỡ bỏ các gói thư
viện Perl; vì thế bạn bạn xóa bằng tay. Tuy nhiên, việc này cũng không thành vấn đề vì để gỡ bỏ một gói
thư viện Perl, đơn thuần bạn chỉ cần xóa thư viện đó trong thư mục lib của Perl và tài liệu tham khảo
trong thư mục doc là được. Bạn có thể tải và cài đặt StrawberryPerl tại trang chủ

* Ghi chú: sau khi cài đặt perl, các perl script thường có extension là .pl (với web thì là .cgi).
Để chạy các perl script, các bạn sử dụng command shell để dịch chương trình:
$ perl script.pl
4. Có khó để lập trình perl?
Cũng như mọi môn khoa học, bạn cần phải tự rèn luyện kĩ năng và tư duy trong lập trình. Đặc
biệt, phải luôn dành thời gian thường xuyên để tập luyện hay ôn lại kĩ năng lập trình. Không có việc gì
khó, cho dù bạn là người đã quen với lập trình hay là người hoàn toàn mới với ngôn ngữ máy tính, chỉ cần
bạn thực sự dồn công sức vào là mọi việc tất sẽ được và thành công.
5. Về tác giả cuốn sách này
Vốn là những người yêu thích lập trình Perl, bvKim và [JaPh] với mong muốn mang về đất nước
Việt nam, nền công nghệ thông tin với ngôn ngữ lập trình còn được gọi là được biết không nhiều ở Việt

Nam.
Vì mục đích phục vụ cộng đồng và mở rộng nền công nghệ thông tin Việt nam, chúng tôi hi vọng
cuốn sách nhỏ này sẽ đóng góp một phần nào đó và đem đến cho người đọc niềm hứng thú với một
ngôn ngữ lập trình khá mới mẻ này mặc dù với thế giới thì không có gì là mới cho lắm.
Cuốn sách hiện còn trong quá trình được hoàn thiện nên sẽ có rất nhiều sai sót nên rất mong các
bạn đóng góp để giúp chúng tôi hoàn thiện cuốn sách này một cách cẩn thận và đẩy đủ.
Bạn đọc có thể liên hệ với tác giả qua email:
6. Quy ước trong sách
Màu đỏ nâu (Dark Red): là câu lệnh thực thi chương trình Perl.
Màu đỏ (Red): là định nghĩa hay cách sử dụng một hàm hay một cấu trúc lệnh.
Màu xanh lá cây (Dark Green): là chú ý hay điều quan trọng cần ghi nhớ.
[Hướng dẫn lập trình Perl cho người Việt Nam] – Tác giả: [JaPh]
February 5, 2009



Page 8



Cặp đánh dấu –SCRIPT- và -/SCRIPT- cho biết ở giữa là một đoạn code Perl.





[Hướng dẫn lập trình Perl cho người Việt Nam] – Tác giả: [JaPh]
February 5, 2009




Page 9



B. Kiểu dữ liệu (Data Type)

I. Dữ liệu kiểu số: (Number)
Có 2 kiểu số được sử dụng trong Perl: số nguyên (integer) và số thực (floating-point).
1. Kiểu số nguyên
Những số được biểu diễn như sau mang tính chất số nguyên trong Perl:
0
1982
-9999
23487682304
034234
Tuy nhiên, trong Perl có một kiểu viết số nguyên hơi đặc biệt một chút; đó là với số lớn, có nhiều
chữ số, bạn có thể sử dụng dấu gạch chân (underscore) _ để nối các chữ số với nhau và Perl
vẫn có thể hiểu đó là kiểu số nguyên. Ví dụ số dưới đây:
1_333
-23_1
2_034_22_234_96
Những số trên đều là số nguyên hợp lệ theo nguyên tắc. Đây là điểm khác so với nhiều ngôn ngữ
lập trình khác.
(*) Trong Perl, có 4 hệ đếm cơ số cơ bản: hệ nhị phân (binary-2),hệ bát phân (octal-8), hệ thập
phân (decimal-10) và hệ thập lục (hexadecimal-16). Quy tắc để biểu diễn số nguyên trong perl dưới các
hệ đếm này như sau:
+ nhị phân: thêm 0b ở trước con số. Ví dụ: 0b101, 0b1111, 0B00110101…
+ bát phân: thêm số 0 ở trước con số. Ví dụ: 037, 01111, 09876….
+ thập phân: những kiểu viết bình thường khác 3 hệ đếm kia. Ví dụ: 1234, 590283….

+ thập lục phân: thêm 0x ở đầu. Ví dụ: 0xFF, 0x34AABCE0….
Ghi chú: việc nhận dạng chuẩn các hệ đếm này còn phụ thuộc vào cách bạn xử lý kiểu dữ liệu trong
chương trình. Vì thế bạn chưa cần quan tâm lắm về vấn đề đó ở đây.
2. Kiểu số thực (floating-point)
Là những con số có dấu chấm dộng trong cách thể hiện. Ví dụ những con số dưới đây là số thực
được dùng trong Perl:
0.00
-3.0085
7.25E3
[Hướng dẫn lập trình Perl cho người Việt Nam] – Tác giả: [JaPh]
February 5, 2009



Page 10



-1.8e19
-2009.12e-21
Ghi chú: kí tự e với ý nghĩa cơ số mũ của 10.

3. Các toán tử với dữ liệu kiểu số

Perl cung cấp 6 toán tử cơ bản để tính toán với dữ liệu kiểu số.

a. Toán tử cộng (addition operation)
3 + 2
1.01 + 7.2
-2.3e-38 + 1.04

b. Toán tử trừ (subtraction operation)
1.01 - 43
1.02 – 4e11

c. Toán tử nhân (multiply operation)
45 * 2.1
99.1 * 0.1e22

d. Toán tử chia (division operation)
5.3 / 2
1 / 9e-17

e. Toán tử thương dư (modulus operation)
5 % 8
6.3 % 1.02e3

f. Toán tử nhân bội (exponential operation)
2 ** 3 (=8)
1 ** 100 (=1)
II. Dữ liệu kiểu chuỗi (Strings)
1. Lưu trữ
Trong perl, kiểu chuỗi hợp lệ gồm các kí tự chuẩn trong bảng mã ASCII 32 (kí tự, kí tự, kí tự
đặc biệt, kí tự điều khiển, kí số…)
Để lưu trữ dữ liệu kiểu chuỗi Perl giữ giá trị của chúng bằng 2 cách.
+ Dữ liệu lưu trong cặp dấu phẩy đơn „‟
+ Dữ liệu lưu trong cặp dấu phẩy kép “”
[Hướng dẫn lập trình Perl cho người Việt Nam] – Tác giả: [JaPh]
February 5, 2009




Page 11



Về cơ bản thì giống nhau, chỉ có một điểm khác biệt ở đây là đôi khi trong chuỗi viết, tiếng
anh cũng có kiểu viết có dấu phẩy. Ví dụ như: don‟t, let‟s, there‟s…
Vì thế giả sử có một câu tiếng anh thế này:
Let‟s program in perl because it‟s so easy.
Nếu lưu trong cặp dấu ngoặc đơn: sẽ được:

„Let‟s program in perl because it‟s so easy.‟
Rõ ràng là có vấn đề vì chuỗi bị kết thúc ngay sau chữ t đầu tiên do chuỗi quy ước trong cặp
dầu phẩy đơn. Ở đây có 2 cách xử lý:
+ có thể sử dụng dấu backslash \ để quy định dấu „ chưa phải là dấu kết thúc quy ước
chuỗi. Nên câu sẽ trở thành:
„Let\‟s program in perl because it\‟s so easy.‟
+ có thể sử dụng cặp dấu phẩy kép thay thế:
“Let‟s program in perl because it‟s so easy.”
Bởi vì chuỗi nhận dạng qua cặp dấu phẩy kép cho nên dấu phẩy đơn sử dụng hoàn toàn hợp
lệ. Tuy nhiên trong trường hợp mà trong chuỗi cũng xảy ra dấu phẩy kép không như mong
muốn thì ta lại sử dụng dấu backslash để làm chuẩn chuỗi.

2. Kí tự đặc biệt
Trong perl có một số các kí tự được gọi là đặc biết khi được truy xuất trong chuỗi qua kí tự
backslash \
Đây là danh sách các kí tự đó:

Kí hiệu
Ý nghĩa

\n
newline
\r
Return
\t
Tab
\f
Formfeed
\b
backspace
\a
Ring a bell
\003
Hiển thị char qua octal
\0x7f
Hiển thị char qua hex
\cA
Cặp điều khiển (Ctrl + A)
\\
Dấu backslash
\e
Escape
\”
Dấu phẩy kép
\l
Kí tự tiếp theo sẽ là kí tự in thường
\L
Tất cả kí tự đằng sau in thường, dừng khi gặp
\E
\u

Kí tự tiếp theo sẽ là kí tự in hoa
\U
Tất cả kí tự đằng sau in hoa, dừng khi găp \E
\Q
Thêm dấu \ cho tất cả các kí tự tiếp theo dấu
\, dừng khi gặp \E
[Hướng dẫn lập trình Perl cho người Việt Nam] – Tác giả: [JaPh]
February 5, 2009



Page 12



\E
Xử lý kết thúc \L, \U và \Q

3. Toán tử với chuối

a. Nối chuỗi (concatenation)
Dùng dấu chấm giữa 2 chuỗi (giống PHP)
Ví dụ: “bvKim” . “-“.”[JaPh]” sẽ tạo chuỗi mới là: “bvKim-[JaPh]”
“programming “.‟perl‟.‟\n‟ sẽ tạo chuỗi mới: “programming perl\n”

b. Lặp chuỗi (repetition)
Sử dụng kí tự x để lặp chuỗi sô lần cho trước.
Ví dụ:
“bvKim” x 2 sẽ thành “bvKimbvKim”
“1982” x 3 sẽ thành “198219821982”

2009 x 2 sẽ thành “20092009” chứ không phải là 4018 nhé :D
















[Hướng dẫn lập trình Perl cho người Việt Nam] – Tác giả: [JaPh]
February 5, 2009



Page 13






[Hướng dẫn lập trình Perl cho người Việt Nam] – Tác giả: [JaPh]

February 5, 2009



Page 14



C. Biến lưu trữ (variable)

Trong perl, có 3 kiểu biến số để lưu trữ dữ liệu. Đó là: scalar, list và hash
1. Scalar:
Scalar là biến chỉ lưu trữ đúng 1 giá trị; giá trị lưu trữ có thể là bất cứ kiểu dữ liệu nào, số nguyên,
số thực hay chuỗi đều hợp lệ.

Scalar được nhận dạng với kí tự $ ở đầu và chuỗi tên của scalar. Ví dụ: $bvkim, $perl…


Quy tắc đặt tên cho biến trong Perl khá thoải mái, tên của biến kiểu scalar có thể chứa chữ cái,
chữ số và dấu gạch chân. Chú ý: bắt buộc tên biến scalar phải bắt đầu với chữ cái, và phân biệt
chữ hoa, chữ thường.
Các ví dụ sau là hợp lệ:
$kimmy, $kim01, $kimmy_007bv, $KiMmY0_1a2A, $KIM123, $kim123…

Các ví dụ sau là không hợp lệ:
$_123abc, $1982kim, $#$@_very_crazy123_scalar

 Gán giá trị cho scalar: sử dụng dấu = (right-to-left)
Ví dụ: $kimmy = 1982, $bvkim = „handsome‟; $kim82 = “yo! Kool 82x”;
Với toán tử:

$range = $max – $min + 1; $age = 1990 - $min
$name = “bv” . “kim”, $job = $teacher . “ perl”;
$res = 5 * ($a - $b * $ c)…

 Các kiểu gán rút gọn (binary assignment)
$res = $res + 1 thành $res += 1
$res2 = $res2 – 1 thành $res2 -= 1
$res3 = $res3 * 3 thành $res3 *= 3
$res4 = $res4 / 4 thành $res4 /= 4
$res5 = $res5 . “string” thành $res .= “string”

2. List
List là một kiểu danh sách hay tương đương với mảng trong việc lưu trữ nhiều giá trị scalar chỉ
trong một biến kiểu list.
Khác với nhiều ngôn ngữ khác, Perl coi list là một kiểu biến và được tích hợp sẵn tính chất của
kiểu cấu trúc dữ liệu stack LIFO trong biến kiểu list. Tức là sẽ có các operation để truy xuất và sử
dụng các phần tử của list một cách gọn nhất.
[Hướng dẫn lập trình Perl cho người Việt Nam] – Tác giả: [JaPh]
February 5, 2009



Page 15



Biến kiểu list được nhận dạng bằng dấu @ ở trước cùng với quy cách đặt tên tương đương với
biến kiểu scalar.

Một số ví dụ về list cùng các kiểu khởi tạo khai báo giá trị trong list:


- Các giá trị khởi tạo phân cách bằng space
@author = qw(kimmy pete);
- Các giá trị khởi tạo bằng cách cổ điển nhất
@c0d3r_123 = („kimmy‟, “pete”, 1982);
- Các giá trị khởi tạo lồng ghép nhau
@list01 = @list02
@nested_List = qw(@author nobody)
@nested_List_ex = (@c0d3r_123, („perl‟, 1980), 1, „codebreak‟);
- Khởi tạo chứa giá trị scalar
$scalar_var = 1888
@list_new = qw(123 2 33 $scalar_var)
- Khởi tạo có range
@list1 = (1, 2 , 3)
@list2 = (1 3)
@list1 và @list2 tương đương nhau
@list3 = (0, 4 7, 100, 200 203)
Tương đương với @list4 = (0, 4, 5, 6, 7, 100, 200, 201, 202, 203)

- Thêm một chú ý nữa với cách sử dụng qw để khởi tạo giá trị cho list là bạn có thể sử dụng
bất cứ cặp dấu nào cũng được ví dụ:
@name = qw(kimmy pete)
@name = qw{kimmy pete}
@name = qw[kimmy pete]
@name = qw! Kimmy pete !
@name = qw# kimmy pete #

 Các phương thức tương tác với list
[Hướng dẫn lập trình Perl cho người Việt Nam] – Tác giả: [JaPh]
February 5, 2009




Page 16




a. Trích xuất phần tử trong list:
@names = qw# kimmy pete somebody #
$names[index] sẽ là phần tử thứ index nằm trong list
Vậy thì $names[0] sẽ có giá trị là “kimmy”
$name[1] sẽ có giá trị là “pete”

- Một điểm hay trong Perl đó là có thể trích xuất ngược, tức là tồn tại vị trí -1, -2…
tức là sẽ đếm thứ tự từ phần tử cuối về phần tử đầu.
Như vậy thì, $names[-1] sẽ có giá trị là “somebody”
$names[-2] sẽ có giá trị là “pete”
$names[0] luôn là giá trị đầu tiên “kimmy”
b. Các phương thức sử dụng trên list
* push LIST, ELEMENT
Hàm push sẽ thêm vào LIST một phần tử ELEMENT theo kiểu STACK tức là LIFO (Last In
First Out), nghĩa là phần tử này thứ tự đứng trên đỉnh của stack.
Ví dụ: @list = (1 10)
push (@list, 11) sẽ tăng kích thước của @list lên 1 và thêm vào 1 phần tử là 11 ở đỉnh
stack.
Bạn có thể push vào nguyên cả một list cũng được, không cứ gì phải là một element.
@list_1 = (1 10); @list_2 = qw(100.111)
push(@list_2, @list_1);


* pop LIST
Hàm pop sẽ trả về phần tử trên đỉnh của stack LIST và giảm kích thước của list đi 1 phần
tử.
Ví dụ: @list = (1 10)
$res = pop(@list); => $res có giá trị là 10

* shift LIST
Hàm shift tương tự như pop nhưng thực hiện và đáy của stack, tức là đẩy phần tử phía
bên trái của LIST ra lần lượt
Ví dụ: @list = (1 10)
$res = shift(@list); => $res có giá trị 1
$res2 = shift(@list) => $res2 có giá trị là 2, vì 1 đã bị đẩy ra ở trên.

* unshift LIST, ELEMENT
Hàm unshift tương tự như push nhưng lại thực hiện từ đáy, tức là phần tử nào vào trước
thì sẽ càng bị dồn lên đỉnh của stack (tương đương với QUEUE – FIFO – First In First Out)
Ví dụ: @list = (5);
unshift(@list, 11); => @list có giá trị lần lượt là (11 5)
[Hướng dẫn lập trình Perl cho người Việt Nam] – Tác giả: [JaPh]
February 5, 2009



Page 17




* sort LIST
Hàm sort sẽ sắp xếp các phần tử trong LIST theo thứ tự quy ước trong sort. Theo mặc

định sẽ sắp xếp theo thứ tự bảng chữ cái (ascending).
Ví dụ: @list = qw(h f q)
Sort(@list); => @list sẽ có thứ tự là qw(f h q)
Hàm sort sẽ được sử dụng linh động hơn với kiểu sắp xếp có quy tắc, nhưng mình không
đề cập ở đây để tránh phức tạp hóa.

* reverse LIST
Hàm reverse sẽ xoay ngược thứ tự các phần tử trong LIST.
Ví dụ: @list = (1 4)
Reverse(@list); => sẽ cho kết quả là (4 1)
3. Hash
Hash được biết là một kiểu cấu trúc dữ liệu liên kết bởi một khóa trỏ tới giá trị riêng của nó. Các
khóa này thường được nhận biết dưới dạng các chuỗi riêng biệt (string). Để cho đơn giản cùng
xem thử ví dụ về một cuốn sách. Trong một cuốn sách nó có mang nhiều đặc điểm ví dụ như là
tên sách, tác giả, năm xuất bản, nhà xuất bản, lần tái bản, mã số sách…Ví dụ cuốn sách Tam Quốc
Chí có khóa “tên” là “Tam Quốc Chí”, “tác giả” là “La Quán Trung”, “nhà xuất bản” là “Kim
Đồng”…Cứ mỗi khóa ta lại có một giá trị mang đặc tính mà nó lưu trữ.
Các hash trong Perl được nhận dạng với kí tự % ở đầu. Cách đặt tên hash giống với quy tắc đặt
tên với scalar.
Ví dụ: %book, %host, %SERVER_A…

- Cách khởi tạo giá trị cho hash
o Tạo theo kiểu list
%book = { „book‟ , „Tam Quoc Chi‟, „author‟, „La Quan Trung‟ };
Theo phong cách khởi tạo của list thì cứ một giá trị key sẽ kế tiếp một giá trị của nó.
Tức là khóa „book‟ có giá trị „Tam Quoc Chi‟ và „Tam Quoc Chi‟ không phải là khóa.

o Tạo kiểu hash đặc trưng
%book = { „book‟ => „Tam Quoc Chi‟, „author‟ => „La Quan Trung‟ }
Nhìn theo kiểu khởi tạo này rất dễ dàng có thể thấy và phân biệt key và value rõ ràng.


Để đơn giản hóa việc khởi tạo key, tránh gõ cái cặp dấu „‟ hay “” , bạn có thế sử dụng
dấu –
%book = { -book => “Tam Quoc Chi”, -author => “La Quan Trung” }
- Cách gán và sử dụng giá trị trong hash
o Mỗi giá trị trong hash thực chất là một scalar nên phải sử dụng kí tự $ ,
$book{„author‟} = $book{“author”} = $book{-author} = $book{author} = „La Quan
Trung‟.
[Hướng dẫn lập trình Perl cho người Việt Nam] – Tác giả: [JaPh]
February 5, 2009



Page 18




- Các hàm sử dụng tương tác với hash
o sort HASH
sắp xếp hash theo quy tắc (mặc đinh là theo bảng chữ cái)
Ví dụ sắp xếp hash theo key: sort keys %hash

o Thêm một phần tử mới vào hash
Chỉ cần gán giá trị như bình thường với key mới.
$book{-nxb} = “Kim Dong”

o delete $hash{key}
Xóa một khóa và giá trị của nó trong hash
delete $book{-author}


o reverse %hash
Hàm này tác dụng đặc biệt, xoay ngược giá trị key và value.
Ví dụ: %hash_x = reverse %hash
Thì %hash_x = { “Tam Quoc Chi” => “book”, “La Quan Trung” => “author” }

o keys %hash
Trả về một list các keys của hash

o values %hash
Trả về list các values của hash










[Hướng dẫn lập trình Perl cho người Việt Nam] – Tác giả: [JaPh]
February 5, 2009



Page 19







[Hướng dẫn lập trình Perl cho người Việt Nam] – Tác giả: [JaPh]
February 5, 2009



Page 20



D. Cấu trúc một chương trình Perl

Kiến thức biết như trên đã nhiều rồi, bây giờ phải đi vào code thử một tí cho nó sảng khoái đầu óc chân
tay.
Như muôn ngàn các ngôn ngữ lập trình khác chúng ta bắt đầu bằng bài cổ điển “ Hello World “
-SCRIPT-
#! /usr/sbin/perl -w
# Chương trình in ra dòng chữ "Hello World"
print "Hello World!\n";
-/SCRIPT-

Theo như những gì được miêu tả ở trên bạn có thể thấy được cách comment trong source perl.
Dòng 1: đây là dòng đặc biệt, thường được dùng để đặt chỉ thị khai báo cách thức kiểu đóng gói, truyền
vào bộ dịch source của perl. Nếu bạn lập trình CGI thì dòng này đặc biệt cần thiết và phải thiết lập chính
xác đường dẫn và vị trí của perl để CGI script hoạt động chính xác; nếu không sẽ sinh ra lỗi thường thấy ở
CGI script (500: Internal Server Error). Nếu không lập trình CGI thì bạn không cần quan trọng về chỉ thị ở
đây.
/usr/sbin/perl: đây là đường dẫn của perl trong máy của mình, sử dụng trên môi trường Linux; máy của

các bạn thiết lập có thể khác (có thể là Windows)
-w : đối số vào trình dịch cho biết dịch source ở chế độ warning, tức là nếu source có những đoạn nào
code cần chú ý thì trình dịch sẽ thông báo để mình chú ý. Có nhiều đối số trong perl, các bạn có thể tự
tìm hiểu thêm :D.
Dòng 2: dòng 1 thực chất là comment, tức là với dấu # ở trước, tất cả những gì trên dòng và đằng sau
dấu # đều được trình dịch bỏ qua. Tương tự, Perl cung cấp kiểu comment theo C-style, comment 1 dòng
dùng //.
Dòng 3: hàm printf() được dùng để in một chuỗi ra màn hình. Như bạn có thể thấy “Hello World” là một
chuỗi. Kí tự đặc biệt \n cho phép xác định sẽ chuyển đến dòng mới ngay sau khi in ra chuỗi.
Về cách sử dụng hàm và tham số trong Perl, khá thoải mái, có hàm bạn phải sử dụng cặp dấu () để đặt
tham số vào trong, có hàm thì không cần thiết cho lắm. Ví dụ như hàm printf() ở trên, lẽ ra là phải đặt
chuỗi trong cặp dấu (). Tức là:
printf(“Hello World \n”);
[Hướng dẫn lập trình Perl cho người Việt Nam] – Tác giả: [JaPh]
February 5, 2009



Page 21



Nhưng hàm này được thiết kế rất thoải mái và có nhiều hàm khác trong perl cũng thoải mái thế này đấy.
Ví dụ một số hàm các bạn đã biết như: sort, reverse…

Cùng nhau khám phá source nữa để hiểu rõ hơn về cách sử dụng các kiểu biến
-SCRIPT-
#! /usr/sbin/perl –w
use strict;
# tạo một hash mới

my %author = (
Name => "Kimmy",
Gender => "Male",
Age => 28);
# lấy giá trị Name
my $author_name = $author{Name};
print "Author Name : " . $author_name . "\n";
# lấy giá trị Age
my $author_age = $author{Age};
print "Author Age: " . $author_age . "\n";
# lấy danh sách các keys trong hash
my @list_keys = keys %author;
print "Cac keys trong %author: " . $list_keys[0] . " " .
$list_keys[1] . " " . $list_keys[2] . "\n";
# xóa đi khóa Age và giá trị tương ứng
delete($author{Age});
# tạo một hash mới với dữ liệu lấy hash ban đầu
my %author_new = %author;
# lấy danh sách các values trong hash mới
my @list_vals = values %author_new;
print "Cac Values moi: " . $list_vals[0]. " " . $list_vals[1]. "\n";

-/SCRIPT-

Có lẽ mình không cần giải thích gì nhiều về đoạn code trên vì comment của mình đã giải thích hết rồi ^^.
Các bạn cần nắm vững kiến thức cơ bản để có thể áp dụng vào thực tế.
Từ bây giờ, sẽ đi vào các kiến thức chính của perl như khối lệnh điều kiện, vòng lặp, cấu trúc dữ liệu,…




[Hướng dẫn lập trình Perl cho người Việt Nam] – Tác giả: [JaPh]
February 5, 2009



Page 22

























[Hướng dẫn lập trình Perl cho người Việt Nam] – Tác giả: [JaPh]
February 5, 2009



Page 23



E. Các toán tử và độ ưu tiên toán tử

Độ ưu tiên toán tử và kết hợp trong Perl được thể hiện qua bảng sau:
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

Cùng nhau tìm hiểu một số toán tử hay sử dụng.
1. Tự tăng – Tự giảm (auto-increment – auto-decrement)
Là 2 toán tử được kế thừa từ C, ++, Hai toán tử này có 2 cách sử dụng và giá trị của nó phụ thuộc cách
sử dụng của lập trình viên.
Ví dụ:
-SCRIPT-
#! /usr/bin/perl –w
use strict;
my $i, $j;
$i = $j = 100;
# Sử dụng tiền tố
$a = 1 + ++$i; # $a = 102
[Hướng dẫn lập trình Perl cho người Việt Nam] – Tác giả: [JaPh]
February 5, 2009



Page 24



printf $a . "\n";
# Sử dụng hậu tố

$b = 1 + $j++; # $b = 101
printf $b . "\n";
-/SCRIPT-
Trong $a, giá trị của $i được đánh giá như sau:
+ Tăng giá trị của $i lên 1 đơn vị ( $i += 1); lúc này giá trị của $i = 101
+ Sau đó lấy giá trị mới của $i tính vào biểu thức; tức là, $a = 1 + 101 = 102
Trong $b, giá trị lại được tính như sau:
+ Lấy giá trị của $j tính vào biểu thức, $j = 101; tức là $b = 1 + 100 = 101
+ Sau đó tăng giá trị của $j lên một đơn vị ($j += 1); lúc này giá trị của $j == 101
Qua đó, bạn có thể thấy sự khác biệt trong đánh giá toán tử và ứng dụng.
Tương tự với ++, mang cùng một tính chất.
2. Toán tử quan hệ (Relational)
Chia làm hai nhóm:
a. Nhóm quan hệ logic số:
Bao gồm: <, <= , >, >=
< : số bên trái nhỏ hơn số bên phải
<= : số bên trái nhỏ hơn hoặc bằng số bên phải
> : số bên trái lớn hơn số bên phải
>= : số bên trái lớn hơn hoặc bằng số bên phải.
b. Nhóm quan hệ logic chuỗi:
Bao gồm: lt , gt, le, ge
lt : chuỗi bên trái đánh giá nhỏ hơn chuỗi bên phải
gt : chuỗi bên trái đánh giá lớn hơn chuỗi bên phải
le : chuỗi bên trái đánh giá nhỏ hơn hoặc bằng chuỗi bên phải
ge : chuỗi bên trái đánh giá lớn hơn hoặc bằng chuỗi bên phải
Chú ý: trong cách so sánh đánh giá chuỗi, lần lượt các chữ cái của 2 chuỗi sẽ được so sánh theo thứ tự
trong bảng mã ASCII.
[Hướng dẫn lập trình Perl cho người Việt Nam] – Tác giả: [JaPh]
February 5, 2009




Page 25



Ví dụ: “car” và “apple”
Chắc chắn kết quả của : “car” gt “apple” sẽ là “true” (giá trị đúng) bởi vì
Chữ cái „c‟ > „a‟ trong theo giá trị số tương ứng trong bảng mã ASCII
3. Toán tử so sánh ngang bằng (Equality)
Bao gồm các toán tử: ==, !=, ===, <=>, eq, ne, cmp,
==: số bên trái bằng số bên phải
!=: số bên trái khác số bên phải
<=>: trả về 3 giá trị -1, 0, 1 phụ thuộc vào số bên trái nhỏ hơn, bằng, hoặc lớn hơn số bên phải
eq : chuỗi bên trái bằng chuỗi bên phải (tương đương)
ne : chuỗi bên trái khác chuỗi bên phải
cmp: trả về 3 giá trị -1, 0, 1 phụ thuộc vào chuỗi bên trái nhỏ hơn, bằng hoặc lớn hơn chuỗi bên phải
(tương đối)
: toán tử đặc biệt, không đề cập ở đây.
4. Toán tử trên bit (bitwise)
Bao gồm các toán tử: AND, OR, XOR, <<, >>
AND (&): trả về các bit AND. Ví dụ: 11 & 10 = 10
OR (|): trả về các bit OR: ví dụ: 11 & 10 = 11
XOR (^): trả về các bit XOR: Ví dụ: 11 & 10 = 01
<<: dịch sang trái n bit. Ví dụ: 1010 << 1 = 0100 (dịch sang trái 1 bit)
>>: dịch sang phải n bit. Ví dụ: 1010 >> 2 = 0010 (dịch phải 2 bit)
5. Toán tử logic điều kiện (logical condition)
Bao gồm các kiểu toán tử ở trên và: &&, ||, cặp toán tử ? :
?: : cặp toán tử điều kiện này đánh giá tiêu chuẩn theo điều kiện cho trước, giống trong C.
Ví dụ: $a = ( 1 > 2 ) ? “ok” : “not ok”

ở đây $a sẽ có giá trị là “not ok”. Biểu thức sẽ kiểm tra giá trị của (1 > 2) là true hay false sau đó sẽ gán giá
trị cho $a phụ thuộc vào kết quả cho trước.

×