Giáo Trình
Ngôn ngữ lập
trình Perl
1
MỤC LỤC
Trang
Chương I: Cú pháp, tập lệnh, các kiểu dữ liệu
1. Các phần tử cơ bản của ngôn ngữ Perl 8
2. Các kiểu dữ liệu cơ sở 9
3. Các câu lệnh điều khiển 15
Chương II: Vào / ra dữ liệu
1. Nhập dữ liệu vào 24
2. Xuất dữ liệu ra 25
Chương III: Mảng, danh sách và hash
1. Danh sách (List) 30
2. Mảng 30
3. Mảng liên kết (Hash) 34
Chương IV: Chương trình con
1.Khái niệm 37
2. Cách gọi hàm 37
3. Trả lại giá trị cho hàm 38
4. Biến cục bộ trong hàm 38
5. Truyền tham số cho hàm 39
6. Hàm đệ qui 40
7. Chỉ định thứ tự sắp xếp 41
8. Một số hàm đặc biệt trong Perl 42
Chương V: Tệp (file)
1. Khái niệm về tệp 44
2. Các thao tác 44
3. Kiểm tra tệp 46
4. Một số hàm xử lí tệp 49
5. Một số hàm cho thư mục(Directory) 51
2
Chương VI: Xâu và xử lý văn bản trong Perl
1. Toán tử đối sánh 53
2. Các kí tự đặc biệt trong khuôn mẫu 53
3. Tuỳ chọn khuôn mẫu đối sánh 57
4. Toán tử thay thế 58
5. Toán tử truyền đạt 59
6. Khuôn mẫu đối sánh mở rộng 59
7. Các Hàm split() và join() 60
Index A - List mã nguồn bài tập tần suất từ 62
Index B - Nhúng Perl vào trong C và cấp bộ nhớ động cho Perl 70
Index C - Vài nét về PHP trên cơ sở Perl 74
Index D - Tài liệu tham khảo 76
CHƯƠNG 1 - VÀI NÉT VỀ NGÔN NGỮ LẬP TRÌNH PERL
1.Lịch sử của Perl
Ngày 18/10/1987 Larry Wall tác giả của ngôn ngữ này lần đầu tiên đưa Perl vào sử dụng tại nhóm
usenet comp.sources . Ngôn ngữ này phát sinh từ C và chịu ảnh hưởng bởi các ngôn ngưx khác như
BASIC, awk, sed và UNIX Shell. Perl là viết tắt của Practical-Extraction and Report- Language. Mục
đích ban đầu là tạo ra các bản báo cáo nhanh chóng và dẽ dàng.
2. Các đặc trưng của Perl
Các ngôn ngữ và công cụ lập trình hiện nay rất nhiều, vì thế rất nên biết rõ điểm mạnh và điểm yếu
riêng của từng ngôn ngữ để có thể tùy chọn với những ứng dụng cụ thể. Ngoài ra một trong những
mục đích củabản báo cáo này là viết về Perl cho cả các đối tượng đã có nền tảng là C hay Shell. Cho
nên cần phải phân tích các đặc trưng của Perl.
2.1 Perl là một trình thông dịch
Chương trình Perl được dịch đọc trọn vẹn và lưu trữ ở hình thức trung gian trước khi chương trình này
được thực hiện. Tuy nhiên tốc độ xử lý sê không bằng các ngôn ngữ biên dịch như C hay C++
2.2 Xử lý text rất mạnh
Do có nhiều toán tử cũng như hàm để hỗ trợ riêng cho xử lý text nên Perl khác biệt với các ngôn ngữ
khác là có tính chất xử lý text rất mạnh, có thể xử lý dễ dàng những tác vụ giống như C hoặc UNIX
shell thường làm trong việc viết một Script nhưng có thể ngắn gọn và đơn giản hơn.
2.3 Perl có cú pháp giống C và Shell và có thể tích hợp với C
3
Perl và C đều là những ngôn ngữ lập trình phổ biến. Mỗi ngôn ngữ có những điểm mạnh và điểm yếu
riêng. C là một ngôn ngữ lập trình vạn năng, có tính thích nghi khả chuyển cao, cho phép can thiệp sâu
vào hệ thống. Hơn nữa tốc độ biên dịch cũng như tốc độ chạy của các ứng dụng viết bằng C khá nhanh
và ổn định. Trong khi Perl mặc dù chạy chậm hơn,nhưng lại rất mạnh ở xử lý văn bản, điều mà ngôn
ngữ C không hỗ trợ nhiều. Hơn nữa 80% người bắt đầu học Perl đã từng làm quen với C hoặc C++.
Cho nên càng dễ học Perl. Perl có thể tận dụng tới các thư viện của C và ngược lại(trong một số điều
kiện nhất định)Perl từ version 5.0 có thể tích hợp khá dễ dàng với các ứng dụng viết bằng C hoặc C++.
Đối với Shell, ngôn ngũ script cơ bản nhất trong UNIX, Perl rất giống ngôn ngữ này cả trong cú pháp
lẫn hàm. Tuy nhiên có 1 vài điểm khác biệt đáng quan tâm. Một trong những điểm khác biệt lớn nhất
giữa cách hoạt động của Perl và Shell là Perl không chỉ là ngôn ngữ phiên dịch. Chương trình Perl
được dịch đọc trọn vẹn và lưu trữ ở hình thức trung gian trước khi chương trình này được thực hiện.
Chương trình Shell được đọc và thi hành mỗi lần 1 lệnh. Điều này mang lại 2 lợi ích cho chương trình
viết bằng Perl so với chương trình viết bằng Shell:
+ Đầu tiên là chương trình Perl chạy nhanh hơn nhiều so với chương trình Shell. Đó là do bộ
biên dịch Perl kiểm tra cú pháp gỡ chú giải trước khi bắt đầu thực hiện mã
+ Thứ hai, bạn không phải lo lắng về chương trình Shell lớn làm ngưng nửa chừng việc thực thi
do lỗi cú pháp, vì tất cả mã được phân tích trước khi bắt đầu làm việc
Perl còn có tính năng cho phép bạn lập trình trên một máy rồi dời nó đến 1 nền khác mà không cần
phải thay đổi nào.
2.4 Perl phát huy sức mạnh tối đa trên nền UNIX
Các nhà quản trị hệ thống và phát triển ứng dụng UNIX thường phải dùng tới một số ngôn ngữu lập
trình khác nhau để hoàn tất các tác vụ cần thực hiện. Ví dụ như để xử lý một file trong UNIX ta phải
viết 1 đoạn Shell script sử dụng sh hoặc awk hay grep, và để biên tập file đó cần dùng đến shed. Để
can thiệp sâu vào hệ thống UNIX, ta lại phải dùng nhiều đến C. Chính vì thế nảy sinh nhu cầu cần sử
dụng một ngôn ngữ vừa dễ viết, dễ phát triển, lại vừa xử lý một cách có hiệu quả nhiều tác vụ.
rong khi đó Perl lại là một trong những ngôn ngữ mạnh nhất trên UNIX. Nó chứa toán tử cung cấp
hầu hết các hàm mà người lập trình muốn thực hiện trong môi trường UNIX. Chính vì thế, bên cạnh C,
Perl là một ngôn ngữ được cộng đồng Phần mềm mã nguồn mở sử dụng rộng rãi trên thế giới.
Những người biết rõ ngôn ngữ lập trình awk sẽ không ngạc nhiên là Perl mượn nhiều đặc sắc của awk.
Perl cũng bao gồm 1 vài đặc tính hay nhất của C, sed, và ngôn ngữ Shell trong UNIX như là bash và
tcsh.
2.5 . Perl có thể chạy trên các môi trường khác nhau
- UNIX PERL chạy trên môi trường Unix.
- PERL FOR WINDOWS NT chạy trên môi trường Windows NT.
-WIN PERL chạy trên môi trường Windows 95/ Windows 98.
2.6 Perl cũng là một ngôn ngữ đa nhiệm
Perl được tối ưu hóa cho xử lý văn bản . Trong những phiên bản hiện thời, Perl cũng bao gồm nhiều
tính năng bổ sung như lập trình socket, tích hợp với C. Từ phiên bản 5.0, có thêm hướng đối tượng.
Mặc dù, ta hay nghe nói Perl là để lập trình cho web, nhưng trên thực tế không phải như vậy. Perl còn
là một ngôn ngữ lập trình hệ thống khá mạnh trong Unix
2.6 Perl là một ngôn ngữ rất thích hợp với CGI và Socket
2.6.1 Các CGI script
4
Perl là một trong những ngôn ngữ thông dụng nhất để tạo ra những ứng dụng CGI(Common Gateway
Interface). Có hàng nghìn ví dụ lập trình CGI động trong Perl. Perl có thể được sử dụng để tạo ra
những trang Web động
Một trong những ứng dụng phổ biến nhất của Perl trên Internet là xử lý mẫu nhập vào, bởi vì hầu hết
đó là văn bản
2.6.2 Lập trình Socket
Perl có khả năng tới đọc/ghi các TCP/IP socket. Chẳng hạn, Perl có thể dùng để viết một chương trình
tự động kiểm tra địa chỉ IP để xác minh tính hợp lệ của 1 trang Web. Điều này đặc biệt hữu ích trong
việc cập nhật các trang Web
2.6.3 Xử lý email
Các chương trình Perl được sử dụng để lọc email dựa vào địa chỉ hoặc nội dung, tự động sắp xếp
danh sách email(mailling lists). Một trong số web mail nổi tiếng nhất là với
hầu hết các trang có dạng *.cgi
2.7 Perl có những tiện ích hỗ trợ việc gỡ lỗi
Trình thông dịch Perl có sẵn một trình gỡ rối, có thể giúp giảm bớt thời gian dùng đến gỡ lỗi những
ứng dụng. Trình gỡ rối được kích hoạt thường xuyên nhờ sử dụng tùy chọn - d khi biên dịch. Ngoài
ra, - w cung cấp một tập hợp đầy đủ những cảnh báo
2.8 Perl là một ngôn ngữ lập trình mã nguồn mở
Perl được phân phối theo phép công cộng GNU
Vì thế ta sẽ được nhiều sự hỗ trợ . Chẳng hạn có thể liên hệ trực tiếp với Larry hoặc nhóm hỗ trợ Perl
trực tuyến toàn thế giới, liên lạc thông qua nhóm tin Usenet comp.lang.perl. hoặc gửi yêu cầu tới perl-
3. Cấu trúc cơ bản của 1 chương trình Perl
Ta hãy nhìn vào một chương trình rất đơn giản nhưng thể hiện được những yếu tố căn bản nhất của
Perl. Đó là chương trình “Hello.pl”:
Dòng đầu tiên là giống như một câu nói rằng đây là chương trình Perl. Nó cũng là lời chú thích cho
Perl. Bởi vì chú thích của Perl giống như chú thích của Shell. Bất kì cái gì nằm giữa một dấu thăng (#)
tới cuối dòng đều là một chú thích. Không có khái niệm về chú thích trên nhiều dòng như C.
Dòng thứ hai là toàn bộ phần thực hiện được của chương trình này. Tại đây chúng ta thấy câu lệnh
print. Từ khoá print bắt đầu chương trình, và nó có một đối, một xâu văn bản kiểu như C. Bên trong
xâu này, tổ hợp kí tự \n biểu thị cho kí tự dòng mới; hệt như trong C. Câu lệnh print được kết thúc bởi
dấu chấm phẩy (;). Giống như C, tất cả các câu lệnh đơn giản đều kết thúc bằng chấm phẩy
*
. Nhưng
chương trình Perl bao gồm tất cả các câu lệnh perl về tệp được lấy tổ hợp chung như một trình lớn cần
thực hiện. Không có khái niệm về trình “chính” main như trong C.(điều này giống như trong Shell)
Khi gọi chương trình này, phần lõi sẽ gọi bộ thông dịch Perl, phân tích câu toàn bộ chương trình (hai
dòng, kể cả dòng chú thích đầu tiên) và rồi thực hiện dạng đã dịch. Thao tác đầu tiên và duy nhất là
thực hiện toán tử print, điều này gửi đối của nó ra lối ra. Sau khi chương trình đã hoàn tất, thì tiến trình
Perl ra, cho lại một mã ra thành công cho lớp vỏ.
*
5
CHƯƠNG 1: CÚ PHÁP, TẬP LỆNH, CÁC KIỂU DỮ LIỆU
Phần 1: Các phần tử cơ bản của ngôn ngữ Perl
1. Tập kí tự
26 chữ cái hoa A, B, C, , Z
26 chữ cái thường a, b, c, , z
10 chữ số 0, 1, , 9
các kí hiệu toán học + - * / =
các dấu ngăn cách . , : ; dấu cách
các kí tự khác _ ? < > [ ] { } ~ ! @ # $ % ^ & * ( )
Các kí hiệu khác có thể dùng tong xâu hoặc trong chú thích
2. Từ khoá
Dưới đây liệt kê một số từ khoá thông dụng của Perl :
if else elsif while next sub print printf do select while
until for foreach unless die sort my binmode
3. Tên (định danh – identifier)
Tên là một khái niệm rất quan trọng, nó dùng để xác định các đại lượng khác nhau trong một
chương trình. Chúng ta có tên hằng, tên biến, tên mảng, tên hàm, tên tệp, tên cấu trúc,
tên nhãn,
Tên trong Perl được đặt theo quy tắc sau : là một dãy các kí tự liền nhau gồm các chữ cái và
số và dấu gạch dưới _, tên không được bắt đầu bằng chứ số hay dấu gạch dưới, không
được chứa các kí tự đặc biệt.
Ví dụ:
Tên đúng : a1 a_2 xau
Tên sai :
1tu sai vì bắt đầu bằng chữ số
m&n sai vì có chứa kí tự &
hai tu sai vì sử dụng dấu cách
6
if sai vì trùng với từ khoá
Tuy nhiên có hai kiểu tên đặc biệt trong Perl gắn liên với hai kiểu dữ liệu là biến vô hướng và
mảng
Tên biến vô hướng được bắt đầu bằng $
Tên mảng được bắt đầu bằng @
Chú ý :Tên trong Perl có độ dài tuỳ ý và có phân biệt chữ hoa với chữ thường. Vì vậy tên
là Pi sẽ khác tên là PI và pI.
4.Cách ghi lời giải thích
Khi lập trình cần có thêm lời giải thích ghi chú để làm cho chương trình dễ đọc, dễ hiểu hơn
mà không gây ảnh hưởng đến sự làm việc của chương trình. Các lời giải thích trong Perl được
bắt đầu bằng kí tự # và tất cả những gì nằm sau # cho đến cuối dòng đều là lời giải thích.Mọi
thứ đằng sau # khi dịch chương trình sẽ bị bỏ qua:
ví dụ:
$a=<STDIN>; #Nhap vao gia tri a
print "So cua nhap va la : $a\n"; # In so vua nhap ra man hinh
5.Câu lệnh và dấu chấm câu
Một chương trình gồm nhiều câu lệnh, mỗi câu lệnh thực hiện một công việc nào đó. Các câu
lệnh phải được ngăn cách nhau bởi dấu ; .
6.Một số chương trình đơn giản viết bằng Perl
Ví dụ 1: In ra màn hình dòng chữ Learning Perl is very good
#!/usr/bin/perl
print “Learning Perl is very good”;
Ví dụ 2:In ra lời chào
#!/usr/bin/perl
print “Ban ten la gi ?”;
$a=<STDIN>;
chomp($a);
print “\nChao ban $a”;
7
Phần II: Các kiểu dữ liệu cơ sở
1. Các kiểu dữ liệu
1.1 Biến và hằng .
Dữ liệu chứa trong máy tính có thể là biến hoặc hằng :
Biến là đại lượng có thể thay đổi được giá trị
Hằng là đại lượng có giá trị không thay đổi
1.1.1 Hằng kí hiệu
Hằng kí hiệu là cách thức biểu diễn dữ liệu trong mã chương gốc của chương trình như cái vào
cho trình biên dịch Perl.
Hằng kí hiệu động :giống như hằng dấu phẩy động trong C.
Ví dụ :
1.25 # một và
1
/
4
7.25e45 # 7,25 x 10
45
(một số dương lớn)
-6.5e24 # -6,5 x 10
24
(một số âm lớn)
-12e-24 # -12 x 10
-24
(một số âm rất nhỏ)
-1.2E-23 # tương tự như số ở trên: -1,2 x 10
-23
Hằng kí hiệu nguyên :
Các hằng kí hiệu nguyên cũng được ghi trực tiếp.
Ví dụ :
12
15
-2004
3485
Không nên đứng đầu bắng chữ số 0 bởi vì trong Perl hỗ trợ cho hằng hệ cơ số tám và hệ cơ số
mười đều được bắt đầu bằng chữ số 0.
Ví dụ :
0377 # 377 hệ tỏm = 255 trong hệ thập phõn
-0xff # õm FF hệ mười = -255 trong hệ thập phõn
1.2. Kiểu số nguyên
Kiểu nguyên trong Perl được lưu trữ trong máy dưới dạng số thực dấu chấm động. Do đó kiểu
nguyên trong Perl có dải giá trị rất lớn, bằng với dải giá trị thực dấu chấm động mà máy có thể
xử lý được.
Các hằng kí hiệu nguyên được viết ra bằng dãy các chữ số 0, 1, 9 và kí tự đầu có thể là dấu +
hoặc dấu – hay không có dấu
Ví dụ :
$x = 987
$y = -123
8
$z = 12345678987766565 một số rất lớn
Cũng như C, Perl cho phép bạn biẻu diễn hằng nguyên dạng hệ 8 hay 16. Hệ 8 có chữ số 0 ở
đầu, còn hằng nguyên hệ 16 bắt đầu bằng 0x hoặc 0X
hệ 10 hệ 8 hệ 16
198 0306 0xC6
1.3. Kiểu số thực
Có dải giá trị khoảng từ E-309 đến E+308. Tuy nhiên máy chỉ có thể xử lý với khoảng 16 hay
17 chữ số có nghĩa, cho nên khi thao tác với số qua lớn có thể chúng ta sẽ không nhận được giá
trị như mong muốn.
Ví dụ :
9.01e+21 + 0.01 - 9.01e+21
Sẽ cho ta giá trị 0 bởi vì trong quá trình cộng 9.01e+21 + 0.01 máy bỏ bớt một số chữ số đi nên
kết quả nhận được là 9.01e+21
Cách biểu diễn hằng thực cũng như trong C dạng bình thường và dạng có phần số mũ.
1.23
4.56e-10
1.4. Kiểu xâu.
Xâu là một dãy các kí tự.Mỗi kí tự đều là một giá trị 8 bit
Có hai loại xâu trong Perl :
1.4.1. Xâu nháy kép
Là một dãy các kí tự bất kì được đặt trong hai dấu nháy kép.
Ví dụ :
“Day la mot xau”
“Day cung_la xau?”
Trong xâu nháy kép có thể có dấu sổ chéo ( \ ) là kí tự để xác định kí tự điều khiển nào đó.
Bảng sau đây sẽ liệt kê một số kí tự điều khiển
Kí tự Giải thích
\a Đổ chuông, BELL
\b Xoá trái
\cn Kí tự Ctrl + n
9
\e Escape
\E Kết thúc \L, \U, \Q
\f Báo hết trang
\l Chuyển kí tự tiếp theo thành chữ thường
\L Tất cả các kí tự tiếp theo chuyên thành chữ thường
\n Chuyển sang dòng mới
\r Về đầu dòng
\t Tab
\u Chuyển kí tự tiếp theo thành chữ hoa
\U Tất cả các kí tự tiếp theo chuyên thành chữ hoa
\007 Kí tự ASCII ở hệ 8 (007 = bíp)
\” Kí tự “
\\ Kí tự \
\v Nhẩy cách đứng
Ví dụ :
Chúng ta muốn có xâu có dấu ngoặc kép bên trong thĩ xâu đầy đủ là
“ dau \” ngoac kep\” ”
“ chu \U hoa ” -> chuyển xâu thành “ chu HOA ”
Ngoài ra bạn cũng có thể sử dụng cách viết sau để biểu diễn một kí tự nào đó trong bảng
mã ASCII :
\xnn với nn là giá trị số viết dưới dang hệ 16 của kí tự trong bảng mã ASCII.
\xnnn với nnn là giá trị số viết dưới dang hệ 8 của kí tự trong bảng mã ASCII.
Ví dụ :
\377 biểu diễn kí tự thứ 7 hay đổ chuông (bell)
\xff biểu diễn kí tự thứ 255 hay EOF
10
1.4.2. Xâu nháy đơn
Perl cũng cho phép bạn sử dụng xâu trong hai dấu nháy đơn.
ví dụ : ‘day la xau nhay don’
Khác với xâu nháy kép, xâu nháy đơn có thể được đặt trên nhiều dòng và các kí tự điều
khiển sẽ không có tác dụng ngoại trừ hai trường hợp dấu ‘ và dấu \
Ví dụ :
Xâu nháy đơn Xâu nháy kép
‘ho ten
nguyen van a’ “ho ten\nnguyen van a”
‘tab \t’ “tab \t”
‘don\’t’ “don’t”
“so cheo : \\’ “so cheo : \”
Một sự khác biệt nữa giữa xâu nháy đơn và xâu nháy kép là các biến nếu được đặt trong
xâu nháy kép thì sẽ cho giá trị của biến, càon xâu nháy đơn thì không.
1.4.3. Một số phép toán dối với xâu
a. Lặp lại xâu
Dùng toán tử x
Ví dụ $mau = “xanh” x 2;
hay $mau x= “xanh”; # đều cho ta $mau = “xanhxanh”
b. Nối xâu.
Dùng toán tử .
Ví dụ $hoten = “Nguyen” . “ An”; # cho ta $hoten = “Nguyen An”
c. Một số hàm cho xâu
index (s1, s2) trong đó s1, s2 là biểu thức xâu kí tự. Hàm này cho ta vị trí đầu tiên của xâu s2 gặp
trong xâu s1
rindex (s1, s2) hàm này tương tự như hàm index, nhưng nơi bắt đầu tìm kiếm là cuối xâu s1.
length(st) hàm này cho ta độ dài của xâu kí tự st.
pos(st) chỉ ra vị trí của khuôn mẫu được đối sánh trong xâu.
substr(st, pos, len) trả lại giá trị là một xâu gồm len kí tựđược tách ra từ xâu st, bắt đầu từ vị trí
pos trong xâu.
lc(st) chuyển đổi tất cả các kí tự trong xâu st ra chữ thường
uc(st) chuyển đổi tất cả các kí tự trong xâu st ra chữ hoa
11
lcfirst(st) chuyển đổi kí tự đầu tiên của xâu st ra chữ thường
ucfirst(st) chuyển đổi kí tự đầu tiên của xâu st ra chữ hoa
quotemeta(st) trả lại giá trị là xâu kí tự được thêm dấu \ vào trước những kí tự không phải là từ
trong xâu st
join(joinstr, list) trả lại giá trị là một xâu được ghép nối bởi các phần tử trong danh sách list và
giữa hai phần tử trong xâu ghép nối là xâu joinstr
@list = ("Day", "la", "vi", "du.");
$str = join (" ", @list); #Lệnh gán này cho $str = “Day la vi du.”
II. Biến, biểu thức và lệnh gán
1. Biến
Biến là đại lượng có thể thay đổi được giá trị
Khái niệm biến trong Perl gắn liền với khái niện biến vô hướng. Một biến vô hướng thì giữ
một giá trị vô hướng riêng : có thể là một dòng dữ liệu, một đoạn văn bản, hay một số. Giá
trị được lưu giữ trong biến vô hướng được gọi là giá trị vô hướng.
Quy tắc đặt tên biến vô hướng : Gồm kí tự $ ở đầu tên, tiếp sau là chữ, chữ số hay dấu _
(phần sau kí tự $ tuân theo quy tắc đặt tên đã giới thiệu trong phần trước)
Ví dụ : $x
$delta
$ki_tu
2. Biểu thức
Biểu thức là một sự kết hợp giữa các phép toán và các toán hạng cùng các dấu ngoặc đơn để
diễn đạt một công thức toán học nào đó.
Toán hạng là một đại lượng nào đó, có thể là hằng, biến hay hàm.
Các phép toán được dùng trong ngôn ngữ Perl
a. Số học + - * / %(lấy phần dư) **(mũ)
Ví dụ 5 % 3 = 2
10.3 % 3.4 = 1 ( số thực sẽ được chuyển thành số nguyên trước khi thực hiện phép toán)
2**3 = 8
Chú ý :
Perl không phép nâng luỹ thừa số âm hay số luỹ thừa lẻ (không ngyên)
Trong lập trình bạn cũng phải cẩn thận tránh tạo ra số quá lớn.
b. So sánh
Có hai loại phép toán so sánh trong Perl:
12
- So sánh số học.
- So sánh xâu.
Bảng 1.1 : Các phép toán so sánh số học
Phép toán
ý nghĩa
< Nhỏ hơn
> Lớn hơn
== Bằng
<= Nhỏ hơn hoặc bằng
>= Lớn hơn hoặc bằng
!= Khác nhau
<=> Cho giá trị -1(<) 0(==) 1(>)
Bảng 1.2 : Các phép toán so sánh xâu
Phép toán
ý nghĩa
lt Nhỏ hơn
gt Lớn hơn
eq Bằng
le Nhỏ hơn hoặc bằng
ge Lớn hơn hoặc bằng
ne Khác nhau
cmp Cho giá trị -1(<) 0(==) 1(>)
c. Các phép toán logic
Cách biểu diễn phép toán logic trong Perl dưới dạng kí hiệu và chữ như sau là như nhau:
13
&& And
|| or
! not
d. Các phép toán bit
& AND bit
| OR bit
^ XOR bit
~ NOT bit
<< dịch trái bit
>> dịch phải bit
Ví dụ
01111100 biểu diễn số 124
01100011 biểu diễn số 99
sau khi thực hiện phép XOR bit |
kết quả 00011111
dịch trái số 99
kết quả 11000110
3. Lệnh gán
Cú pháp:
<biến> = <biểu thức>
biểu thức cũng có thể là biểu thức gán:
$a = $b = ($c =10) * 5
cũng như C , Perl cho phép thu gọn biểu thức gán :
<biến> = <biến> <phép toán> <toán hạng>
14
<biến> <phép toán>= <toán hạng>
$x = $x + 5 có thể viết thành $x += 5
các phép gán thường dùng là += -= *= /= %= **= &= |= ^=
Biểu thức theo điều kiện :
<biểu thức 1> ? <biểu thức 2> : <biểu thức 3>
Gán theo điều kiện
<biến> = <biểu thức 1> ? <biểu thức 2> : <biểu thức 3>
Nếu <biểu thức 1> đúng(=1) thì <biến> sẽ lấy giá trị của <biểu thức 2>, trường hợp ngược lại
<biến> sẽ lấy giá trị của <biểu thức 3>
Biểu thức theo điều kiên trong Perl có thể nằm ở bên trái phép gán
<biểu thức 1> ? <biến 1> : <biến 2> = <biểu thức 2>
Nếu <biểu thức 1> đúng(=1) thì <biến 1> sẽ lấy giá trị của <biểu thức 2>, trường hợp ngược
lại <biến 2> sẽ lấy giá trị của <biểu thức 2>
ví dụ :
$a=2>3 ? 6 : 9 ;
kết quả biến $a = 9 ;
4. Tăng giảm một đơn vị
Cú pháp:
<biến> ++ ++<biến>
<biến> <biến>
Sự khác nhau giữa dạng tiền tố và hậu tố là trong dạng tiền tố giá trị biến sẽ được tăng trước
khi gán, còn dạng hậu tố thì biến được tăng sau khi gán.
15
Trong Perl phép tăng (chỉ có phép tăng) một đơn vị còn được áp dụng cho cả xâu nếu xâu chỉ
gồm các chữ cái và chữ số.
Ví dụ $xau = “abc”;
$xau++; # Cho ta $xau = “abd”
$xau = “abz”;
$xau++; #Cho ta $xau = “aca”
5. Thứ tự ưu tiên các phép toán
Bảng 1.3 Thứ tự ưu tiên các phép toán
Phép toán Chiều tính toán
++,
L → R
-, ~, !
R → L
**
R → L
=~, !~
L → R
*, /, %, x
L → R
+, -, .
L → R
<<, >>
L → R
-e, -r, etc.
<, <=, >, >=, lt, le, gt, ge
L → R
==, !=, <=>, eq, ne, cmp
L → R
&
L → R
|, ^
L → R
16
&&
L → R
||
L → R
L → R
? and :
R → L
=, +=, -=, *=,
R → L
các phép toán khác
,
L → R
not
L → R
and
L → R
or, xor
L → R
Phần III: Các câu lệnh điều khiển
1. Lệnh đơn, lệnh ghép
2. Lệnh rẽ nhánh: if, if…else, if…elsif
3. Lệnh lặp: while, for, foreach…
4. Các toán tử last,next,
5. Lệnh goto
1. Lệnh đơn, lệnh ghép:
Lệnh đơn: một lệnh hoặc lời gọi hàm kết thúc bởi dấu ;
Ví dụ:
$a = 1;
print “Hello, World!\n”;
Lệnh ghép: dãy các lệnh được đặt trong 1 khối bắt đầu bởi { và kết thúc bởi }. Lệnh ghép được
dùng trong cấu trúc lệnh mà cú pháp đòi hỏi như một lệnh độc lập (trong if, for, while,…)
(Tương tự như trong C)
2. Lệnh lựa chọn theo điều kiện if :
17
Mẫu lệnh 1 :
If (<biểu thức điều kiện>)
{
<Lệnh 1>;
}
<Lệnh tiếp>;
Mẫu lệnh 2:
- If (<biểu thức điều kiện>)
{
<Lệnh 1>;
}
else
{
<Lệnh 2>;
}
<Lệnh tiếp>;
Lưu ý:
Dấu ngoặc múc { và } ở đây là cần thiết (cho dù bạn chỉ có một lệnh trong phần if hoặc else),
nếu bạn thiếu thỡ Perl sẽ bỏo lỗi cỳ phỏp.
<Lệnh 1>, <lệnh 2> có thể là lệnh ghép
else đi theo if gần nhất
Điều kiện là biểu thức số; kiểm tra với 0
Ví dụ:
18
Kết quả chạy chươngtrình:
- Nếu chỉ quan tâm đến các trường hợp khi biểu thức xác định là sai, có thể sử dụng lệnh điều
khiển unless để tránh có một câu lệnh if…else.
Cú pháp câu lệnh unless:
unless (<biểu thức điều kiện>)
{
<Lệnh 1>;
}
<Lệnh tiếp>;
unless (<biểu thức điều kiện>)
{
<Lệnh 1>;
}
else
{
<Lệnh 2>;
}
<Lệnh tiếp>;
Ví dụ:
19
Kết quả chạy chươngtrình:
Khi biểu thức điều kiện là sai, lệnh 1 sẽ được thực hiện. Trái lại, khi biểu thức điều kiện là đúng, lệnh
2 sẽ được thực hiện.
- Câu lệnh elsif:
Cú pháp:
if (<biểu thức điều kiện 1>)
{
<Lệnh 1>;
}
elsif (<biểu thức điều kiện 2>)
{
<Lệnh 2>;
}
else
{
<Lệnh 3>;
}
<Lệnh tiếp>;
3. Lệnh while:
- Cú pháp:
while (<biểu thức điều kiện>)
20
{
<Lệnh>;
}
<Lệnh tiếp>;
- Nói chung: <Lệnh> phải làm cho biểu thức điều kiện trở thành 0, hoặc là lệnh ghép có chứa lệnh
dừng vòng lặp (last,… )
Ví dụ:
Kết quả chạy chươngtrình:
4. Lệnh until:
Cú pháp:
until (<biểu thức điều kiện>)
{
<Lệnh>;
}
<Lệnh tiếp>;
Câu lệnh until ngược với câu lệnh while, <lệnh> chỉ được thực hiện khi biểu thức điều kiện là sai.
21
Ví dụ:
Kết quả chạy chương trình:
5. Lệnh do…while, do…until
Cú pháp:
do
{
<Lệnh>;
}
while (<biểu thức điều kiện>)
do
{
<Lệnh>;
}
until (<biểu thức điều kiện>)
- Lưu ý:
<Lệnh> được thực thi ít nhất một lần, bất kể biểu thức điều kiện được xác định như thế nào.
22
ở câu lệnh do…while, <lệnh> được lặp lại khi biểu thức điều kiện là đúng. Trái lại, ở câu lệnh
do…until, <lệnh> được lặp lại khi biểu thức điều kiện là sai.
Ví dụ:
Kết quả chạy chương trình:
6. Lệnh for:
- Cú pháp:
for ([biểu thức 1];[biểu thức điều kiện];[biểu thức 2])
{
<Lệnh>;
}
<Lệnh tiếp>;
Nói chung phải có chế để for kết thúc.
1 khuông có thể có hơn 1 biểu thức
Ví dụ:
23
Kết quả chạy chương trình:
7. Lệnh foreach:
- Cú pháp:
foreach <[biến](biến mảng)>
{
<Lệnh>;
}
<Lệnh tiếp>;
- Lưu ý:
Biến mảng (Array variable): Dãy dữ liệu cùng kiểu, đặt dưới tên chung và lưu ở bộ nhớ trong,
có thể nhiều chiều. Biến mảng được biểu thị bằng ký tự @ đầu tiên.
Giá trị của biến vô hướng được gán trong vòng lặp foreach không có hiệu lực bên ngoài vòng
lặp.
Ví dụ:
Kết quả chạy chương trình:
24
8. Lệnh đơn dòng (single line):
Cú pháp:
<Lệnh> <[if][while][until][unless]> (<biểu thức điều kiện>);
- Các câu lệnh điều kiện đơn dòng được sử dụng khi không cần nhiều câu lệnh bên trong 1 khối lệnh.
Ví dụ:
Kết quả sau khi chạy chương trình:
9. Lệnh next, last và redo:
Dùng trong thân vòng lặp (là lệnh ghép) để dừng lặp, chuyển sang vòng lặp mới hoặc lặp lại
một lần vòng lặp.
9.1 Toán tử last
Toán tử last tương đương câu lệnh Break của C : Dừng lặp, ra khỏi lệnh lặp và thực
hiện <lệnh tiếp> đi sau lệnh lặp hiện tại.
ví dụ :
$a=20;
while(true)
{
print”\n$a";
$a ;
if($a==10)
25