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
Trang 1Perl – 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
Trang 35 Đôi điều về tác giả
6 Quy ước và kí hiệu trong sách
D Cấu trúc chương trình Perl
E Toán tử và độ ưu tiên
Trang 5Trang này để trống
Trang 6A 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
(http://activestate.com) 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
Trang 7Ngoà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ủ
http://www.strawberryperl.com/
* 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: pete.houston.17187@gmail.com
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ớ
Trang 8Cặp đánh dấu –SCRIPT- và -/SCRIPT- cho biết ở giữa là một đoạn code Perl
Trang 9B 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
Trang 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)
Để 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 “”
Trang 11Về 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
\E
\, dừng khi gặp \E
Trang 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”
Trang 14C 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”
Trang 15Biế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
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
Trang 16a 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);
$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)
Trang 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‟
Trang 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” }
Trang 20D 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ị ở
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”);
Trang 21Như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
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[ ] " "
# 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";
Trang 23E 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)
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
Trang 24Trong $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
Trang 25Ví 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
Trang 26Biểu thức chung cho cặp toán tử ?:
[assignment=] (conditional statement) ? (if true) : (if false)
Toán tử này rất hữu ích trong việc giảm nhẹ quá trình rẽ nhánh