1. Trang chủ
  2. » Công Nghệ Thông Tin

Giáo trình: Ngôn ngữ lập trình Perl ppt

96 793 4

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 96
Dung lượng 1,08 MB

Nội dung

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

Trang 1

Giáo Trình Ngôn ngữ lập

trình Perl

Trang 2

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

Trang 3

5 Một số hàm cho thư mục(Directory) 51

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

Trang 4

2.3 Perl có cú pháp giống C và Shell và có thể tích hợp với C

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

Trang 5

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à http://www.hotmail.com 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-users-request@virgina.edu

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ỏ

*

Trang 6

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

Dưới đây liệt kê một số từ khoá thông dụng của Perl :

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

Trang 7

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

Trang 8

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

Trang 9

 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

 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

Trang 10

\e Escape

\E Kết thúc \L, \U, \Q

\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

\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

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)

Trang 11

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 \

 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

 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

Trang 12

 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)

 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

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:

Trang 14

<biến> = <biến> <phép toán> <toán hạng>

Trang 15

<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ị

Trang 16

 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 = “abz”;

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

Trang 17

2 Lệnh rẽ nhánh: if, if…else, if…elsif

3 Lệnh lặp: while, for, foreach…

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 :

Trang 18

 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ụ:

Trang 19

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.

Trang 20

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

Trang 23

 ở 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.

 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ụ:

Trang 24

Kết quả chạy chương trình:

 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:

Trang 25

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)

Trang 26

last;} }

Kết quả khi chạy chương trình là :

9.2 Toán tử next:

 Toán tử next giống toán tử continue trong Pascal

Bỏ qua các lệnh còn lại trong thân vòng lặp để bắt đầu vòng lặp mới của lệnh lặp đó

$a ;

if($a>10)

{

next;}

$ =$a; }

Trang 27

Kết quả khi chạy chương trình :

 Lệnh goto cho phép chương trình nhảy vô điều kiện tới một vị trí trong chương trình thông

qua tên nhãn Trong chương trình nhãn được đặt vào vị trí thích hợp theo sau là dấu hai chấm Dạng lệnh:

Trang 28

- Toán tử <STDIN> sẽ báo cho trình biên dịch Perl biết để đọc một dòng từ thiết bị vào chuẩn, dòng

này được xác định bởi kí tự kết thúc là ký tự chuyển sang dòng mới Vì thế biến $x sẽ bao gồm cả kí

tự chuyển sang dòng mới ( \n ) Để loại bỏ kí tự này đi Perl cung cấp cho ta một hàm chop loại bỏ kí

tự cuối cùng của xâu

chop($x);

- Tóm lại ta có quá trình nhậo dữ liệu vào từ bàn phím dùng toán tử <STDIN>như sau:

Thực chất toán tử <STDIN> ở đây là một file đại diện cho thiết bị vào chuẩn Nhưng file này không

cần mở bởi vì trình biên dịch Perl đã làm sẵn điều này cho ta

- Đọc tất cả các dòng và xử lý trên mỗi dòng:

- Cứ mỗi khi một dòng được đọc vào, <STDIN> lại cho một giá trị đúng , cho nên chu trình tiếp tục

thực hiện Khi <STDIN> không còn dòng nào để đọc nữa thì nó cho lại undef , cho giá trị sai, kết thúc

chu trình

- Trong vòng lặp while, có thể viết gọn chop($_) thành chop; biến $_ là mặc định

Trang 29

1.2 Vào dữ liệu bằng toán tử <>

- Cú pháp $x = <>;

- Toán tử này giống như <STDIN> ở chỗ nó trả về một dòng riêng trong ngữ cảnh vô hướng (undef

nếu tất cả các dòng này đã được đọc), hay tất cả các dòng còn lại nếu được dùng trong ngữ cảnh riêng Tuy nhiên, toán tử này sẽ lấy dữ liệu từ file hay các file được xác định trên dòng lệnh gọi chương trình Chẳng hạn bạn có một chương trình với tên Myprog, khi bạn gọi chương trình với dòng lệnh sau:

Myprog file1 file2

Lúc này toán tử <> sẽ báo cho chương trình đọc từng dòng của file1, rồi từng dòng của file2 Kết quả cuối cùng trả về xâu rỗng báo hiệu kết thúc việc đọc

- Nếu trong chương trình bạn có toán tử <> mà dòng lệnh không có các file thì toán tử <> sẽ đọc dữ

liệu từ file vào chuẩn Trong trường hợp này, toán tử <> tương đương với <STDIN>.

Trong trường hợp còn có một toán tử <> ở sau nữa thì thì lúc này toán tử <> cũng đọc từ file vào chuẩn

1.3 Vào dữ liệu cho mảng:

Myprog file1 file2

Perl sẽ cho mảng @ARGV tương ứng với danh sách:

("file1", "file2")

Và giống như mọi mảng khác ta có thể truy nhập đến từng phần tử của mảng @ARGV

Ví dụ sau sẽ minh hoạ cho rõ hơn về mảng @ARGV

Cho chạy chương trình với dòng lệnh

hello Anh

Trang 30

Kết quả sẽ in ra

Chao Anh

Perl làm việc với toán tở $ARGV như sau:

- Khi trình biên dịch Perl thấy <> lần đầu, nó sẽ mở file với tên được lưu trong $ARGV[0]

- Sau đó Perl sẽ thực hiện lệnh shift(@ARGV) , lệnh này sẽ bỏ đi phần tử đầu tiên của mảng @ARGV

và dịch tất cả các phần tử của mảng lên một mức( phần tử i sẽ chuyển thành phần tử i-1)

- Tiếp theo toán tử <> đọc tất cả các dòng trong file được mở trong bước đầu

- Khi đọc hết file, quay lại bước đầu và quá trình tiếp tục cho đến hết danh sách các file

2 Xuất dữ liệu ra

- Có hai kiểu xuất dữ liệu ra là: + hiển thị trên màn hình

+ ghi lại ra file

2.1 Dùng lệnh print:

- Cách đơn giản nhất để xuất dữ liệu ra là dùng lệnh print Lệnh này nhận một danh sách các xâu rồi gửi lần lượt từng xâu ra thiết bị ra chuẩn (STDOUT) thường là màn hình

print (“Xin chao”, “ban”);

Có thể bỏ dấu ( ) đi, tuy nhiên trong một số trường hợp ta cần phải có dấu ()

Ví dụ

Cũng như <STDIN>, thực chất toán tử <STDOUT> ở đây là một file đại diện cho thiết bị vào chuẩn

2.2 Dùng printf:

- In dữ liệu định dạng dùng printf

- Lệnh printf trong Perl cũng tương tự như trong C với cú pháp như sau:

printf (<format>, [<argument>]);

<format> : hằng, xâu điều khiển việc đưa ra gồm các kí tự và quy cách ở dạng %

[<argument>] : danh sách các đối số cần đưa ra, 1 đối số có thể là hằng, biểu thức, kí tự, xâu Có bao nhiêu đối số đưa ra thì cần có bấy nhiêu quy cách tương ứng

Bảng sau đây liệt kê mã định dạng cho các kiểu in khác nhau

Trang 31

Ghi vị trí theo quy cách

- Đối với số nguyên hay xâu:

%md, %ms (mlà số nguyên) : cho biết số chỗ tối thiểu mà dữ liệu in ra sẽ chiếm Nêu số in ra có số chữ số ít hơn m, máy sẽ in thêm các kí tự trống vào Nếu số chỗ ta ghi mà không đủ thì máy sẽ tự động

bổ sung cho đủ để in hết số

- Đối với số thực :

%m.nf (m, n nguyên) : m là tổng số chữ số viết ra, n là số chữ số sau dấu phẩy

- Đặc biệt nếu ta thêm dấu - vào trước m (%-md, %-ms, %-m.n ), dữ liệu in ra sẽ được canh lề trái

2.3 Định dạng dữ liệu ra

- Perl có một vài công cụ đặc biệt để bạn dễ dàng tạo ra những bản báo cáo đơn giản Bản báo cáo gồm nhiều trang mà mỗi trang gồm có phần đầu đề, số trang và một vài thông tin khác sẽ giống nhau Bạn có thể đặt số dòng cho mỗi trang, Perl sẽ tự động chuyển sang trang mới

Trang 32

hướng – mỗi giá trị ứng với một nơi giữ trường – mà cung cấp ra giá trị sẽ được gắn vào trong trường Sau đây là một ví dụ về dòng trường với một nơi giữ trường, và dòng giá trị đi theo:

format date =

===========================

|Ngay @<< thang @<< nam @<<<<|

$ngay, $thang, $nam

===========================

Kí hiệu @<< được gọi là nơi giữ trường, nó báo cho chương trình dịch Perl biết phải dành số chỗ là 2 cho giá trị của các biến được đưa ra và văn bản đưa ra được canh lề trái Có bao nhiêu nơi giữ trường trong <dòng_trường> thì cần phải có bấy nhiêu biến được đưa ra trong <dòng_giá trị>

Định nghĩa định dạng có thể được đặt ở bất kì đâu trong chương trình, tuy nhiên sẽ là tốt nhất nếu chúng ta đặt nó ở đầu hoặc cuối chương trình

2.3.2 Hiển thị một định dạng

- Đặt biến hệ thống $~ bằng tên định dạng bạn cần gọi

- Dùng hàm write để xuất dữ liệu

@<<< Văn bản căn lề trái

@>>> Văn bản căn lề phải

@##.## Định dạng số

Trang 33

@* Văn bản nhiều dòng

Nếu một giá trị quá dài thì nó sẽ được chặt tự động

Đối với dạng số @##.## Có nghĩa là dành 2 chỗ cho số đứng trước dấu và hai số ở đằng sau Giá trị của số sẽ tự đọng làm tròn

Để in các kí tự đặc biệt @, <, > ta làm như sau:

Trong phần trước ta chỉ nói đến hàm write xuất dữ liệu ra thiết bị ra chuẩn <STDIN>, tuy nhiên bạn

cũng có thể dùng hàm write để xuất dữ liệu ra một file bất kì

Cách đơn giản nhất là dùng lệnh

write (<tên_file>);

Tuy nhiên dữ liệu xuất ra file sẽ không được định dạng theo cách mà bạn đã định dạng trong chương

trình, bởi vì biến $~ chỉ làm việc với một file ngầm định (file ra chuẩn <STDOUT> ) Để thay đổi file

ngầm định này, làm cho biến $~ có hiệu lực, ta dùng hàm select :

Tức là thay đổi file xuất dữ liệu ra là thiết bị ra chuẩn Và bạn cũng thấy hàm print cũng ghi ra file

đã chọn, cho nên trong lập trình cần phải chú ý tránh gây ra sự xáo trộn dữ liệu ra

Để lưu lại file hiện thời đang xuất dữ liệu ra và chọn file mới ta dùng lệnh

$file_cu = select(<file_moi>);

Sau này muốn xuất dữ liệu ra file cũ, ta gọi lại

select($file_cu);

Trang 34

2.4 Định dạng trang

2.4.1 Định dạng đầu trang

Định dạng đầu trang là một phần văn bản luôn xuất hiện ngay trên đầu của mỗi trang Khi một định dạng đầu trang được định nghĩa, Perl sẽ tự động gọi định dạng đầu trang mỗi khi một trang mới được tạo ra Để định nghĩa định dạng đầu trang ta định nghĩa một định dạng với tên như sau :

<tên_file>_TOP (chữ TOP phải viết hoa)

Trong định dạng đầu trang có biến hệ thống thường hay được dùng là $%, biến này lưu số thứ tự của trang Do đó ta có thể đánh số thứ tự cho từng trang

2.4.2 Thay đổi số dòng của trang.

Mặc định số dòng của trang là 60 Muốn thay đổi số dòng, ta thay đổi giá trị của biến hệ thống $=

$= = 25; # Đặt số dòng cho trang là 25

Chú ý: Trình biên dịch Perl theo dõi số dòng trên trang bằng cách theo dõi lời gọi write Vì thế nếu

bạn sử dụng lệnh print sẽ gây xáo trộn Nếu muốn đảm bảo sự đếm trang đồng bộ với sự đếm dòng thì

ta cần phải thay đổi biến hệ thống $- Biến này cho ta biết số dòng còn lại trên trang Khi biến này nhận giá trị 0, định dạng đầu trang sẽ được tạo, một trang mới được tạo ra

Trang 35

File VANBAN sẽ như sau :

Ta thay @* trong ví dụ trên bằng ^<<<<<<<<<<<<<<<<<

File VANBAN sẽ như sau :

Day la vi du

Nhiều khi ta không biết trước được dữ liệu ra dài từng nào cho nên ta định dạng nhiều dòng để tránh mất dữ liệu Nhưng nếu dữ liệu ra ít thì ta sẽ nhận được những dòng trống Muốn loại trừ những dòng trống này, hãy đặt kí tự ~ ở bất kì dòng dữ liệu ra nào, những dòng này sẽ được in ra nếu dữ liệu in ra không phải là xâu rỗng

Trang 36

CHƯƠNG III: MẢNG, DANH SÁCH VÀ HASH

1 Danh sách (List):

1.1 Khái niệm danh sách:

- Một danh sách là một dãy các biến vô hướng sắp xếp theo thứ tự được đặt trong cặp ngoặc đơn ( ) Một danh sách có thể có bao nhiêu phần tử cũng được và chứa bất kì giá trị vô hướng nào

Ví dụ:

(“Nguyen A”, 2, 4.5)

danh sách trên gồm có 3 phần tử : xâu Nguyen A và hai số 2, 4.5

(1, $a, $b + $c)

danh sách trên cũng có 3 phần tử : 1, giá trị của $a, giá trị của tổng $b + $c

- Các danh sách cũng có thể chứa các biểu thức dưới dạng một phần nội dung của chúng

Trang 37

Tuy nhiên có một cách đơn giản hơn là phải viết từng số ra Perl cung cấp cho ta toán tử để định

nghĩa danh sách có các phần tử nối tiếp nhau như sau

(“a” ”z”) danh sách gồm các chữ cái thường

($dau $cuoi + 1) danh sách gồm các giá trị nằm trong khoảng từ giá trị của $dau đến giá trị của

$cuoi+1

(1, 3 6, 8) danh sách gồm các phần tử 1, 3, 4, 5, 6, và 8

(1.5 4.1) danh sách gồm 1.5, 2.5, 3.5 (số 4.5 lớn hơn 4.1 nên không được đưa vào danh sách)

(3.4 1.2) danh sách này không có phần tử nào vì 3.4 > 1.2

- Ta cũng có thể dùng khoảng danh sách với xâu

Ví dụ:

(“xxa” ”xxc”) tương đương với danh sách (“xxa”, ”xxb”, ”xxc”)

(“xxy” ”xxb”) tương đương với danh sách (“xxy”, ”xxz”, ”xxa”, “xxb”)

@ngay = (“01” ”31”);

tạo ra một mang @ngay chứa các phần tử là ngày trong tháng : 01, 02, 31

2 Mảng:

2.1 Khái niệm mảng:

- Mảng là một dãy dữ liệu cùng kiểu, được đặt dưới tên chung và lưu ở bộ nhớ trong, biến mảng được

biểu thị bằng kí tự @ đầu tiên, tiếp theo sau là tên theo qui ước.

<tên_mảng> ở đây bắt đầu bằng kí tự $ chứ không phải là @ bởi vì ta truy nhập tới một phần tử riêng

rẽ như là một biến vô hướng

Trang 38

- Mảng trong Perl bắt đầu với chỉ số 0, do đó phần tử đầu tiên của mảng

@mang1 là $mang1[0], và nó có giá trị 1 như trên.

Chú ý:

 Cần phân biệt giữa $mang1 và $mang1[0]

$mang1 : biến vô hướng

$mang1[0] : phần tử đầu tiên của mảng @mang1

 Có thể gán một biến mảng cho một biến mảng khác.Ví dụ

@mang2 = @mang1;

Sau khi gán các phần tử của mảng @mang2 giống hệt các phần tử của mảng @mang1 Tức là

$mang2[0] = $mang1[0], $mang2[1] = $mang1[1],

 Có thể dùng mảng trong danh sách :

@mang2 = (“a”, @mang1, “c”);

Lệnh gán trên có nghĩa là gán danh sách (“a”, 1, 2, 3 , “c”) cho mảng @mang2( mảng @mang1 theo trên gồm có các phần tử 1, 2, 3)

 Perl còn cho phép gán một mảng cho một danh sách các biến

($x, $y, $z) = @mang1;

tương đương với $x = $mang1[0]; $y = $mang1[1]; $z = $mang1[2];

Nếu số các biến nhiều hơn số các phần tử của mảng thì các biến cuối cùng được gán bằng xâu rỗng

Trang 39

Perl cung cấp một cách đơn giản để hoán đổi hai phần tử của mảng Ví dụ muốn hoán đổi hai phần

tử đầu tiên của mảng @mang1 chỉ cần dùng câu lệnh sau:

@mang1[0, 1] = @mang1[1, 0];

Sở dĩ làm được điều này vì Perl đã lưu @mang1[1, 0] vào một vị trí tạm thời trước khi gán, do đó

sự hoán đổi diễn ra thành công

$sopt = @mang1; # $sopt nhận giá trị là 3 là số phần tử của mảng @mang1

Chú ý: Hai câu lệnh sau là không tương đương

$so = @mang1; # Số phần tử của mảng @mang1 gán cho $so.

($so) = @mang1; # Phần tử đầu tiên của mảng @mang1 gán cho $so.

Ở câu lệnh thứ hai ($so) được coi là một danh sách chỉ có duy nhất một phần tử $so.

Trang 40

Hàm này sắp xếp các phần tử của mảng theo thứ tự alphabetical và trả lại giá trị là một danh sách

được sắp xếp Do đó ta có thể dùng phép gán :

@mang1 = (“de”, “bc”, “fg”, “a”);

@mang_sx = sort (@mang1);

Kết quả trả lại là @mang_sx gồm có các phần tử của mảng @mang1, nhưng được sắp xếp Do đó

@mang_sx là danh sách (“a”, “bc”, “de”, “fg”).

Muốn mảng @mang1 được sắp xếp, ta dùng lệnh

@mang1 = sort (@mang1);

Tức là giá trị trả lại sau khi sắp xếp @mang1 được gán chính vào @mang1

Chú ý : hàm sort chỉ sắp xếp được xâu, không sắp xếp được số theo thứ tự tăng dần Do đó đoạn mã

sau sẽ không thực hiện được điều ta mong muốn sắp xếp các số theo thứ tự :

@mang1 = (111, 33, 222);

@mang1 = sort (@mang1);

Bởi vì khi thực hiện hàm sort 111, 33, 222 được hiểu như là những xâu Cho nên kết quả

@mang1 là danh sách (111, 222, 33)

2.7.2 Hàm reverse

Hàm này đảo ngược các phần tử của danh sách hay mảng, và giá trị trả lại là danh sách được đảo ngược

@mang1 = (“de”, “bc”, “fg”, “a”);

@mang2 = reverse (@mang1);

Giá trị được gán cho mảng @mang2 là danh sách

(“a”, “fg”, “bc”, “de”)

Cũng như trên giá trị của mảng @mang1 không thay đổi, muốn có mảng @mang1 sắp xếp ta dùng:

@mang1 = reverse (@mang1);

2.7.3 Hàm chop

Hàm này cắt bỏ kí tự cuối cùng của mọi phần tử trong mảng :

@mang1 = (“abc”, “def”, “ghi”);

chop(@mang1);

Danh sách được lưu trữ trong mảng @mang1 sau khi thực hiện hàm chop là

(“ab”, “de”, “gh”);

2.7.4 Hàm join

Hàm này ghép tất cả các xâu trong danh sách hay mảng trở thành một xâu:

$string = join(“ “, “Day”, “la”, “xau”);

Ngày đăng: 09/07/2014, 21:21

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
7. PERL Quick Reference by Micheál ó Foghlú Sách, tạp chí
Tiêu đề: PERL Quick Reference
11. A Perl Tutoral Modified from: Nano Goughhttp://www.computing.dcu.ie/~ngough/perl/tutorial.ppt Link
5. Extending and Embedding Perl Tim Jenness 6. Perl 5 by Example by David Medinets Khác
8. Learning Perl by Schwartz, R.L. 1993 Khác
9. www.cclabs.missouri.edu/things/instruction/perl Khác

HÌNH ẢNH LIÊN QUAN

Bảng 1.1 : Các phép toán so sánh số học - Giáo trình: Ngôn ngữ lập trình Perl ppt
Bảng 1.1 Các phép toán so sánh số học (Trang 13)
Bảng 1.2 : Các phép toán so sánh xâu - Giáo trình: Ngôn ngữ lập trình Perl ppt
Bảng 1.2 Các phép toán so sánh xâu (Trang 13)
Bảng 1.3 Thứ tự ưu tiên các phép toán - Giáo trình: Ngôn ngữ lập trình Perl ppt
Bảng 1.3 Thứ tự ưu tiên các phép toán (Trang 16)
Bảng định dạng trường dữ liệu - Giáo trình: Ngôn ngữ lập trình Perl ppt
ng định dạng trường dữ liệu (Trang 32)
Bảng sau đây liệt kê một số giá trị permissions cho thư mục - Giáo trình: Ngôn ngữ lập trình Perl ppt
Bảng sau đây liệt kê một số giá trị permissions cho thư mục (Trang 63)
Bảng sau đây liệt kê những tuỳ chọn đó - Giáo trình: Ngôn ngữ lập trình Perl ppt
Bảng sau đây liệt kê những tuỳ chọn đó (Trang 71)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w