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.
52 trang |
Chia sẻ: franklove | Lượt xem: 10088 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Hướng dẫn lập trình Perl cơ bản, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
PERL FOR VIETNAMESE COMMUNITY
Perl – The 1st 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 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: 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ớ.
[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