Ngôn ngữ lập trình PERL

36 3.3K 35
Ngôn ngữ lập trình PERL

Đ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

Ngôn ngữ lập trình PERL

CHƯƠNG II NGÔN NGỮ LẬP TRÌNH PERL *P* -I Giới thiệu 1.Perl ? Theo ngôn ngữ tác giả, Larry Wall, Perl ngôn ngữ cho việc “Getting your job done” Perl dùng cho việc : Quản trị Hệ thống, CGI Script, biến đổi liệu, phân tích nguồn gốc cách tuần tự, dịch chuyển Perl viết tắt Practical-Extraction and Report- Language ngôn ngữ lập trình Larry Wall sáng tác với mục đích tạo báo cáo cách nhanh chóng dễ dàng Do có nhiều toán tử hàm để hỗ trợ riêng cho xử lý text nên Perl khác biệt với ngôn ngữ khác có tính chất xử lý text mạnh, xử lý dễ dàng tác vụ giống C UNIX shell thường làm việc viết Script ngắn gọn đơn giản Không giống trình biên dịch C hay C++, Perl trình thông dịch Perl chạy môi trường khác : - UNIX PERL chạy môi trường Unix - PERL FOR WINDOWS NT chạy môi trường Windows NT -WIN PERL chạy môi trường Windows 95/ Windows 98) II Ngôn ngữ PERL A Nguyên tắc xử lý văn (Principles of General Text Processsing The Backbone of PERL) Trong phần này, bắt đầu tìm hiểu Perl cụ thể phải ý đến "text", khối cho việc thông tin liên lạc CGI nào, Perl giao tiếp với text tốt Text liệu dạng kí tự, số nguyên, kể kí tự đặc biệt mà sử dụng việc tạo text file, HTML file, script Perl Scalar data: Toán hạng vô hướng gán số chuổi ký tự văn Perl không phân biệt số với chuổi ký tự xử lý chúng Bất kì chọn lọc số ký tự gọi liệu vô hướng (scalar data) Biến scala dùng thao tác với tác vụ Những thao tác sinh giá trị scala khác, giá trị scala lưu biến scala.Ta đọc giá trị scala từ file ghi vào Trong số chuổi xử lý perl có số chi tiết nhỏ ta cần nhận biết, để giúp ta (người lập trình) cách ly với kẻ hacker * Số thực _ số nguyên literals : Perl xử ly ùsố thực số nguyên literal (Literal : cách thức giá trị định rõ việc mã hoá thực chương trình) Đây liệu đượïc cung cấp cho trình biên dịch Perl Perl chấp nhận kiểu số sau : - số nguyên - phân số - số âm - số mũ * Số nguyên : Không bắt đầu số Perl hiểu lầm sang số hệ 16 hệ số bắt đầu số * Chuỗi kí tự: Perl chấp nhận tập hợp 256 kí tự , kí tự đượcï biểu diễn bít ï Nhiều kí tự số chuổị gộp lại làm nên chuổị kí tự Kích thước chuổị : Từ kí tự đến chiều dàị mà bạn mong muốn Nó phản ánh giả thuyết perl "không xác lập giớị hạn" khả khác lúc Khả để xử lí chuổi, không quan tâm đến kí tự, thực làm cho Perl thích nghi với lập trình CGI, Perl xử lí kí tự kí hiệu literal Có loại chuổi literal: nháy đơn nháy kép : - Chuổi nháy đơn : Là chuổi chứa cặp nháy đơn, dấu nháy đơn báo cho Perl biết diểm bắt đầu kết thúc chuổi Nếu muốn đưa dấu nháy đơn vào bên chuổi (không xữ lý _như giới hạn chuổi), ta đặt chuổi phía sau dấu \ Khi đặt dấu \ vào chuổi phải đặt cuối chuổi - Chuổi nháy kép : Khi chuổi bao quanh nháy kép chuổi nháy kép Bên chuổi nháy kép, dấu \ sử dụng để vài kí tự điều khiển số hệ chí hệ 16 để đại diện cho kí tự đặc biệt Một khía cạnh khác chuổi nháy kép chúng biến có khả tự thêm vào, có nghóa lần chuỗi đọc biến bên chuổi có giá trị thay «Những dòng thích perl bắt đầu với kí hiệu # Những tác vụ Tác vụ Chop : Tác vụ chop dùng để loại bỏ kí tự cuối đối số bên cặp dấu ngoặc đơn Khi so sánh biến với nhau, Perl tìm xem chúng hay sai (true hay false), ghi lại kết tiếp tục Perl xử lý dòng trống null string cho giá trị false Trong dòng trống hàng mới, cho giá trị "\n" mang giá trị true Tuy nhiên, không muốn có dòng trống đó, nên ta dùng tác vụ chop để bỏ Giá trị default chop() bỏ kí tự cuối Chúng ta gặp lại tác vụ nhiều script,đặc biệt được dùng với giá trị “\n”  Tác vụ print Một lấy liệu vào script, muốn di chuyển giá trị script xuất kết vị trí mong muốn, truyền cho script khác, file, máy in, địa e-mail, hay hình Chúng ta đụng đến .Tác vụ print làm việc chung với để xuất liệu script.Tác vụ print lấy giá trị vô hướng (và danh sách giá trị mảng ) đặt vào Dữ liệu từ chuyển đến nơi mong muốn : script khác, file, máy in,…  Tác vụ số : Chia lấy phần dư gọi Modulus (kí hiệu %) , chia số chia giá trị nguyên, không chia giá trị thực, sau lấy phần dư làm giá trị Ví dụ : 25.3 % 4.437 trước hết chuyển thành 25 % sau lấy 25:4=6 dư (số dư kết quả)  * Bảng liệt kê tất tác vụ số : OPERATOR + * / ** % < = > ACTION Cộng Trừ Nhân Chia Lũy thừa (Exponentiation) Chia lấy phần dư (Modulus) Nhỏ Nhỏ hay Equal to Lớn Lớn Ví dụ 1+2  1-2  -1 2*2  2/2  2**3  3.2%3.2  21 != Không 5!=1 Khi tác vụ bảng thực thi, Perl so sánh sau trả giá trị (true) sai (false).Tuy nhiên tác vụ chuỗi có khác chút  Tác vụ chuỗi : Những tác vụ chuỗi làm việc giống tác vụ số thay kí tự Tác vụ ghép nối cho kết khác chút : ví dụ : "Hey," "now!"  "Hey,now!" "Hey,now!" "\n"  "Hey,now!\n" "Hey," "" "now!"  "Hey, now!" * Những tác vụ chuỗi khác liệt kê bảng sau : OPERATOR Eq Ne Lt Gt Le Ge X ACTION Ghép nối Equal Not equal Less than Greater than Less than or equal to Greater than or equal to String repetititon Ví duï "bi" "g" => "big" "small" eq "small" "small" ne "tiny" "30" lt "7" "50" gt "300" "ten" le "ten" "eleven" ge "eleven" "more" x => "moremore" Chuù ý: Đối với chuổi Perl lấy giá trị Ascii kí tự số nên 30 nhỏ nhỏ bảng Ascii Perl xử lí dấu ngoặc đơn trước, có độ ưu tiên kết hợp đặc biệt Biến vô hướng(Scalar Variables) Khi chương trình chạy giá trị vô hùng thay đổi biến vô hùng không thay đổi Biến vô hướng chứa giá trị vào thời điểm, giá trị thay đổi chương trình yêu cầu Một biến vô hướng có dạng : $ tên_biến $biến_khác(giữa biến có khoảng trắng) Khoảng trắng kết thúc tên biến Tên biến có phân biệt chữ hoa chữ thường Ví dụ: $JAZZ khác với $jazz khác với $Jazz Những biến làm việc với tác vụ chúng giá trị Ví dụ : $IQ = 130 $Weight = $IQ + 20 $page = $Weight - 17 Ta sử dụng biến vô hướng hai vế tác vụ Ví dụ : $income = $income - $food Perl phát triển thêm dạng ngắn gọn để làm việc này, gọi binary assignment operator (tác vụ gán nhị phân) Ví dụ : $income=$income - $rent , viết lại dạng gán nhị phân : $income -= $rent Hầu hết tác vụ sử dụng dạng gán nhị phân theo cách Ngoài có tác vụ tự động tăng tự động giảm Tác vụ tự động tăng sử dụng kí hiệu ++ Ví dụ : $debt +=1 giống : ++$debt Tác vụ tự động giảm tương tự sử dụng kí hiệu -Chúng ta sử dụng tác vụ tự động tăng tự động giảm để thay đổi biến bước mà * Sự tự đưa thêm vào biến scalar vào bên chuỗi a Sự tự đưa thêm vào liên hệ với chuỗi dấu nháy kép Ví dụ : $uid = "Sam"; $new = "new $uid"; $new có giá trị "new Sam" $x="$new and $data"; $x có giá trị : "new Sam and" biến $data chưa định nghóa Sự tự đưa thêm vào, có nghóa "đặt giá trị literal vào chuỗi", thực lần duyệt hàng Ví dụ : $min="$time"; $clock="$min left to go"; giá trị $clock là: "$time left to go" Không có thay đổi kép * Nếu ta muốn tránh tự thay ta thêm dấu nháy đơn vào vùng chuỗi đặt dấu suyệt ngược (backslash) phía trước kí hiệu $ Ví dụ : $x="Biến dùng cho id người sử dụng là".'$user'; $y=" Biến dùng cho id người sử dụng \$user"; Kết hai biến : " Biến dùng cho id người sử dụng $user" * Với Perl, tên biến tên dài tìm thấy, gặp không í khó khăn việc tìm kiếm biến Ví dụ : $old="name_one"; $new="name_two"; $previous="You are $old user."; $current="You are { $new} user."; Bieán $previous in : "You are $old user." Vì Perl hiểu $olduser biến Nhưng ta thêm dấu { } (curly braces) vào ta có đưọc kết vừa ý hơn, là: biến $current : "You are name_two user." Chúng ta tránh lộn xộn cách đặt biến cặp dấu { } Curly braces, thực số nhiệm vụ Perl, từ việc phân ranh câu ghép đến việc đánh dấu nơi bắt đầu _ kết thúc vòng lặp chương trình Thậm chí chúng bao gồm biểu thức có qui tắc (sẽ trình bày chương sau) Chúng ta đổi từ chữ thường sang chữ hoa ngược lại biến giá trị cách sử dụng tác vụ kèm với dấu suyệt ngược “ \ ” Ví dụ : $user="\LNAME"; đổi giá trị 'NAME' thành 'name' $new="NAME";$user="\L$new"; giá trị $user là: 'name' $biguser="\u\LNAME"; $biguser 'Name' $biguser="\u\L$user"; $biguser 'Name' Với tự thêm vào biến có chuỗi dấu nháy kép sử dụng chức ( Standard Input Trong Perl có biến đặc biệt gọi Standard Input hay .Thật không đơn biến vô hướng filehandle Những filehandle thông dụng khác Perl (standar output), (standar error) Một filehandle giúp cho Perl tạo input output, I/O, nối script chạy hay trình với người sử dụng (Người sử dụng người trình khác) Khi sử dụng vị trí biến vô hướng nguyên hàng văn đọc vào giá trị biến Nguyên hàng có nghóa tất từ ngữ xuất có hàng chuỗi rỗng Giá trị chuỗi có hàng xuất cuối người sử dụng nhấn phím kết thúc click vào nút done sau nhập xong văn Ta dùng tác vụ CHOP để loại bỏ hàng Cụ thể : $name=; #user yêu cầu nhập vào tên họ chop $name; #loại bỏ hàng Chúng ta trộn hai hàng thành : Chop ($name=) Chúng ta dùng để kết hợp với form HTML Dữ liệu gởi qua phương pháp POST từ form, vào .Toàn thảo luận form HTML, mối quan hệ với CGI trình bày phần trước : "Tìm hiểu CGI " * Chú ý filehandle : Khi file mở để đọc tên file gán cho biến filehandle Khi cần đọc hay ghi vào file script Perl tham khảo đến filehandle thân file Perl nhận biết bàn phím, chuột, hay liệu từ CGI file khác, đặt liệu vào Trình thông dịch Perl xử lý file, cho vào filehandle * Giá trị không xác định Nếu giá trị gán cho biến vô hướng không làm ảng hưởng đến Script Perl có cung cấp loại giá trị không xác định, đại diện số số nguyên chuỗi rỗng có chiều dài 0I với chuỗi Cách dùng đặc biệt giá trị không xác định đọc file, đọc tới hàng trống(hay null string) giá trị không xác định trả cho Mảng (Array defined) Mảng danh sách có thứ tự liệu vô hướng Những thành phần mảng thứ tự từ thấp đến cao Mảng giới hạn kích cỡ (size) Những biến khác mảng đặt cặp dấu ngoặt đơn cách dấu phẩy Ví dụ mảng : (1,2,3); ($A,$B,$C); ($A,1,$B,2,$C,3); Những biến không thiết phải số, sửa chữa thay đổi mảng : ($A+1,$B,$C-1); Perl cung cấp tác vụ xây dựng danh sách, thể giai đoạn giá trị Ví dụ : (1 10); => tương đương với (1,2,3,4,5,6,7,8,9,10) (1.2 4.2); => tương đương với (1.2,2.2,3.2,4.2) (1 4,8,10); => tương đương với (1,2,3,4,8,10) ($A $B); => tương đương với vùng giá trị biến $A $B Chú ý : (1.3 4.2); tạo (1.3,2.3,3.3) ngưng 4.3>4.2 Chúng ta dùng tác vụ print với mảng Ví dụ : $total=@user_list ; biến $total lấy chiều dài mảng @user_list print("Bạn người khách thứ ",$total,"\n"); Mỗi có user truy cập vào trang web liệu cộng thêm vào mảng @user_list.Và biến $total chứa tổng số giá trị mảng hay gọi chiều dài mảng a Biến mảng (Array Variables) Biến vô hướng kí hiệu dấu $ biến mảng dùng kí hiệu @.Tên biến giới hạn số kí tự Có thể tồn biến mảng biến vô hướng có tên mà không ảnh hưởng Perl giữ giá trị riêng biệt Một mảng rỗng cho giá trị null danh sách rỗng biểu thức sửa chữa toàn biến mảng phần biến mảng.Điều khác với biến vô hướng,chỉ mang giá trị nên sửa hoàn toàn để nguyên  b Tác vụ mảng (Array operators) Tác vụ mảng giống tác vụ vô hướng.Một giá trị trả giá trị cho tác vụ khác gán cho biến mảng khác.Chỉ có điều khác biệt : tác vụ mảng liên quan tới việc sửa đổi danh sách giá trị tác vụ vô hướng sửa đổi giá trị Những tác vụ mảng quan trọng : tác vụ gán,chỉ số hóa,đẩy vào lấy (push & pop),shift & unshift,đảo ngược,sắp xếp tác vụ chop Những điểm đặc biệt khác mảng sử dụng với phần tử (elements ) truy cập .Một phần tử (element) mảng tên gán cho giá trị danh sách.Những phần tử sử dụng làm việc với mảng liên kết Tác vụ gán : Tác vụ gán giá trị cho biến mảng Cũng giống biến vô hướng, tác vụ gán mảng sử dụng kí hiệu "=" để gán giá trị biến Perl phân biệt tác vụ gán vô hướng với tác vụ gán mảng dựa vào biến gán; ghi nhớ tác vụ gán vô hướng với biến vô hướng tác vụ gán mảng với biến mảng Khi giá trị vô hướng gán vào biến mảng trở thành phần tử (element) biến mảng.Mảng lưu giữ nhiều phần tử Danh sách mảng chứa đựng biến mảng Chúng chuyển đổi thành giá trị literal mảng chứa chúng danh sách xác định, giống ví dụ sau : @olduser = ("Sam","Vu"); @newuser = ("Hien","Truong",@olduser); @alluser = (@newuser,"Jack"); @alluser = ("Mary","Linda",@alluser); seõ cho danh sách mảng @alluser giá trị literal sau : “ Mary,Linda,Hien,Truong,Sam,Vu,Jack ” Ta thấy nơi thêm biến mảng vào danh sách riêng biến mảng đặt giá trị vào trước sau danh sách Một literal mảng đặt vào danh sách mà biểu thức xử lý biến, danh sách với phần tử mảng thêm vào xử lý Những literal mảng hoạt động biến giống sau : ($F,$Y,$I = (1,2,3); => $F laø 1,$Y laø 2,$I laø ($P,$C) = ($C,$P); => tức $P $C có giá trị ($P,@C) = ($F,$Y,$I); => $P = $F danh sách @C ($Y,$I) ($A,@C) = @C; => giá trị danh sách @C chuyển thành $A, tức $A=$Y @C=($I) Nơi mà biến bổ sung vế trái tác vụ gán cho giá trị không xác định (undef), giá trị bổ sung vế phải biến Nếu ta sử dụng biến mảng danh sách mảng literal phải biến cuối Bất kỳ biến mảng khác sử dụng literal gán giá trị không xác định Điều thật quan trọng script giá trị cho phần tử (element) mảng, giá trị không xác định Perl xử lý giá trị False Giá trị không xác định dùng để tìm nơi cuối phần tử với giá trị gán mảng Khi gán biến mảng cho biến vô hướng, giá trị xác định biến vô hướng số thành phần danh sách mảng chiều dài danh sách : @IMHO = (5,4,6,7,2); $IMHO = @IMHO; => biến $IMHO có giá trị 5, chiều dài danh sách biến @IMHO Một tên biến mảng đặt vào vị trí giá trị vô hướng : $IMHO = @PGP; => biến $IMHO lấy chiều dài @PGP : ($SSE) = @VTR; => biến $SSE lấy element @VTR làm giá trị Ta xếp tác vụ gán mảng lồng vào bên tác vụ gán mảng khác để thu kết ví dụ sau : @BBQ = (@ORA = (4,8,6) ); => hai biến @BBQ @ORA có danh saùch (4,8,6) hay : @BBQ = @ORA =(4,8,6); => cho kết tương tự Ngữ cảnh dãy vô hướng(Array and Scalar Context) Như đề cập trước đây, phụ thuộc vào phía xuất dãy and/or vô hướng tác vụ gán Nếu Perl báo trước toán hạng vô hướng tác vụ tính toán với ngữ cảnh vô hướng Ngược lại Perl nhận toán hạng dãy tính toán với ngữ cảnh dãy Ngữ cảnh ảnh hưởng thủ tục ta cách thay đổi giá trị dãy hay vô hướng phải cẩn thận với Một biểu thức truy xuất toán hạng ngữ cảnh vô hướng cách ghép chuổi rổng (null) sau : @Z = (“d”,”a”,”v”,”i”,”s”); print(@Z.” is a magic number\n”); to output % is a magic number LƯU Ý : Ký hiệu “%” dùng để biểu thị cho dòng lệnh thiết bị đầu cuối Perl , hình đầu cuối trông giống hình đầu cuối MS-DOS Ký hiệu “%” đặc trưng tiêu biểu cho chương trình dịch cửa sổ đầu cuối giống DOS user chổ dòng lệnh Perl dùng ký hiệu cho tác vụ suất (modul) Do không nên nhận rắc rối Perl scripting (chương trình bẩy lỗi ) dùng ký hiệu “%” biểu dòng lệnh Perl với  Tác vụ đánh số : Mỗi phần tử dãy gán nhãn hay giá trị (index) bắt đầu bên trái với số không tăng lên đến số nguyên đến cuối danh sách Những số dùng tác vụ truy xuất phần tử tác vụ đánh số để chuyển giá trị vào biến khác Nó có ích phần tử từ dãy cho mục đích chuyển chúng vào kiểu vô hướng sửa phần tử tồn dãy Những khả giúp ích việc cập nhật loại liệu danh sách Trong thí dụ sau  Nếu ta muốn suốt dòng thay đổi làm điều cách tạo vòng lặp đơn giản : While ( $_ = ) { } Lệnh while tạo nên vòng lặp Perl đặt dòng vào biến scalar $_ file chạy hết dòng vòng lặp kết thúc Khi dùng Perl để xuất thông thường hai tác vụ print printf ghi vào Tác vụ print làm nhiều sinh văn để hiển thị ; hoạt động tác vụ list di chuyển chuổi mà không cộng thêm ký tự Tác vụ printf cho ta nhiều lệnh chuổi lệnh print , với printf ta định chuổi điều khiển định dạng với đối số , xác định phần đối số lại in Một thí dụ: Printf “%10 %20” , $wolf , $moon; $wolf in đến field 10 ký tự $moon in đến field 20 ký tự Có bổ sung khác dùng với tác vụ printf định chuổi in số nguyên hệ 10 (decimal integer) , giá trị dấu chấm động (foating-point value), khoảng trống tab Cách dùng biểu thức qui tắc : Để trình bày cách dùng BTQT cách dễ dàng Perl cho ta lệnh đơn giản gọi grep Thu gọn cho in BTQT toàn cục Grep lệnh xuất xứ từ UNIX hữu ích Với grep ta lấy BTQT tìm kiếm file dòng (line by line), thử tương thích với chuổi định BTQT Dùng grep dòng lệnh xem sau : Grep crypt bonus.pl % bonus_change.pl Grep kiểm tra tất dòng mã bonus.pl để xem chứa chuổi “crypt” xuất dòng vào file bonus_change.pl theo đường Để biểu thị chuổi “crypt” BTQT Perl phải bao / (slashes) : / crypt / Và script giống nhö sau: If (/ crypt / ) { Print “$_”; } BTQT crypt kiểm tra dựa vào biến đặc biệt $_ ,($_ biến scalar mặc định) tất thứ lưu lúc lúc khác Có số biến đặc biệt Perl , $_ , có điểm đặc trưng định riêng chúng thiết kế để làm cho Perl dể sử dụng 10 GUESTBOOK : Hãy bắt đầu với thí dụ đơn giản Guestbook dùng Perl Trước tiên bạn cần tạo file Perl gọi guest.pl Lưu ý: Bạn viết perl script số ứng dụng xử lí văn , notepab, write, word Tuỳ bạn mong muốn Sau tạo perl script bạn nhớ lưu script bạn với đuôi mở rộng pl Để giữ cho việc lập trình tốt , dòng script dòng thích tên file Nó thuận tiện ta hay người làm việc với file sau Script sau : #! Usr/bin/perl # guest.pl Print "What is your name ? "; $name - : # get the response # from the user Open (GUESTBOOK, ">> guest.pl "); #open a file with #filehandle GUESTBOOK Print GUESTBOOK "$name": #append #the name to the guestbook file Chop($name) ; #remove the newline Print "Thank you $name! Your name has been added to the UESTBOOK.\n" Close(GUESTBOOK); Script làm ? Đầu tiên in dấu nhắc (prompt) cho user Trong trường hợp lệnh print mặc định cho hình Sau đặt để gọi hàng từ file điều khiển Hàng nhập từ bàn phím hàng , kế mở file tên guest.pl , file gán cho file điều khiển (filehandle) GUESTBOOK file điều khiển dùng tham khảo đến file mở để đọc ghi thường toàn chữ hoa File điều khiển giống tất biến hay dãy Perl số thứ mà ta muốn , miễn từ đảo Ta nên ý đặt >> vào trước tên file có nghóa mở file để thêm vào Những chọn lựa cho việc mở file nằm bảng 3.1 Baûng 3.1 : OPERATOR ACTION > Write >> Append {thêm} +> Read and write Nothing Read Mổi lần mở file có file điều khiển , ta đặt tên guestbook file với lệnh print Lưu ý ta làm điều cách đặt file điều khiển vào trực tiếp sau lệnh print Trong thực tế lệnh print “string “ thông thường phiên (version) ngắn gọn thật : Print “string”; Ta in dòng kế hình , đặt biến $name vào bên chuổi in ta nhập vào , gọi tự thêm vào biến , biến thay chuổi trước in Lệnh chop( ) gọi để loại bỏ ký tự cuối chuổi $name trước in Nó dùng loại bỏ dòng (newline) nối vào chuổi nhập từ bàn phím Nếu ta không làm điều ta kết thúc với dòng đặc biệt in bên phải sau name dấu chấm than dòng , không mong muốn mặt ngữ pháp Ta bỏ newline ta in file ta muốn name nằm dòng riêng Cuối ta đóng file kết thúc chương trình Ta không thật cần thiết phải đóng file Perl tự động đóng nó mở lại chương trình kết thúc để lập trình tốt nên đặt lệnh kết thúc Bây có sở liệu đầy đủ tên người khách (guest) Kế tiếp ? Bước luận lý kiểm tra file để xem ta kiểm sở liệu chưa lấp đầy với khách (customers) lặp Procedure listing 3.1 ta làm Hãy xem vai trò Vòng while tiếp tục điều kiện false Điều kiện trường hợp gán $line cho dòng GUESTBOOK Kết thúc với dòng Listing 3.1 : Checking the file chop($name); # remove the new line print ” Thank you, $name! Your name has been added to the Guestbook.\n”; Close(GUESTBOOK); Print(What is your name?”); $name=; Get the response # from the use Open (GUESTBOOK, “guest pl”); #open a file with filehandle GUESTBOOK While ($line=) { If($line eq $name) { Print”Your name is already in the guestbook!\n”; Close(GUESTBOOK); Exit; } } Close (GUESTBOOK ) ; # Close file Open (GUESTBOOK, “>>guest.pl”); # open same file for append Print GUESTBOOK “$name”: #append # the same to the Guestbook file Chop($name); # $name ! Your name has been added to the Guestbook \n; Close(GUESTBOOK); Chúng ta thực thi procedure ta nhận tên khách (guest) , ta thu nhận từ file từ Điều kiện tiếp tục true không dòng file Chú ý ta mở file guest.pl để đọc, ta lấy dòng Điều kiện if so sánh $line với $name ta dùng tác vụ eq biến chuổi Nếu biến số ta dùng tập hợp tác vụ so sánh khác Bởi Perl không phân biệt biến chuổi biến số , ta phải thận trọng với tác vụ so sánh mà dùng Perl so sánh “5” and “10” khác phụ thuộc vào ta dùng tác vụ chuổi hay số “5” nhỏ “10” ý nghóa số học, ngữ cảnh chuổi lớn “10” Một ghi nhanh tác vụ so sánh : trả –1 nhỏ , trả +1 lớn Lệnh exit thân lệnh if dừng chương trình sau cung cấp tin tức cho user tên người nằm guestbook Chúng ta thực tương tự dòng với lệnh die: If ($line eq $name) { Die “your name is already in the guestbook!\n”; } Baûng liệt kê tác vụ cho hai ngữ cảnh chuổi số : Numeric Operator == != > >= < > guest.pl”); #open file for append print GUESTBOOK “$newline”; # append the field line to # the guestbook file Print “Thank you ,$name! Your name has been added to the Guestbook.\n”; Close(GUESTBOOK); Bây có vài điểm khác Chúng ta yêu cầu ba mẫu liệu riêng biệt gán mẫu vào biến Chú ý loại ký tự newline lúc nhập liệu Việc ta làm format chuổi liệu với ba field tách biệt dấu hai chấm ( : ) với ký tự newline đính cuối kết thúc với liệu sau : John : smith : magenta Nó dễ dàng cho ta thêm vào hay lấy liệu lần sau Tác vụ “.” Trong Perl tác vụ nối để tổ chức chuổi Ta thêm vào dấu hai chấm cuối $name , cộng thêm $lastname vào cuối chuổi kết , thêm vào dấu hai chấm , cộng thêm $color , sau kết thúc thêm vào newline Tương đương với : $newline =john( ‘ : ’ , $name , $lastname , $color); $newline.=”\n”; Hàm join() nối biến chuổi liệt kê bên chuổi , chia feild với vật giới hạn đặt biệt (a: vật giới hạn trường hợp ) tác vụ = Theo sau nối ký tự newline vào cuối biến $newline Nó tương đương với : $newline=$newline.”\n”; Bây có thông tin Chúng ta muốn kiểm tra làm với lệnh split() (listing 3.3) Đối nghịch với lệnh split() Surprise , surprise - Listing 3.3 : The Split Command print “What is your name ? ”; $name = ; #get the response #from the user chop($name); #remove the newline print “What is your last name ?”; $lastname = chop($lastname); print“What is your favorite color ?”; $color = chop($color); $newline = $name.’:’.$lastname.’:’.$color.”\n”; #make line # delimited with colors opent (GUESTBOOK, “>> guest.pl”); while ($line = ) { ($gbname, $gblastname,$gbcolor)=split(‘:’,$line); if ($gbname =~/^$name/ i) { print “You are already in the guestbook, $name!\n”; close(GUESTBOOK); exit; ($gbname, $gblastname, $color)=split(‘:’, $line); } } close(GUESTBOOK); open (GUESTBOOK, “>>guest.pl”); #opent file for appending print GUESTBOOK “$newline”; # append the field line # to the Guestbook file print “Thank you, $name! Your name has been added to the Guestbook \n”; close(GUESTBOOK); Ởû ta gán $gbname , $gblastname , $gbcolor vào ba thành nhận lệnh split() Ta làm cách đặt dấu ngoặc tròn vào tên biến để đóng vai dãy Ta gán tất biến vào dãy cách dể dàng sau : @data=split(‘ : ‘ , $line); Và tham khảo đến ba phần tử dãy sau: $data[0], $data[1], $data[2] Do có số liệu để chạy Chương trình dài listing 3.4 xử lí phần thay đổi : While ($line = ) { ($gbname, $gblastname,$gbcolor)=split(‘:’,$line); if ($gbname =~/^$name/ i) && ($gblastname=~/^$lastnams/i)) { print “You are already in the guestbook, $name!\n”; } close(GUESTBOOK); if ($gbcolor!~/$color/ i) { print “You have a different favorite color !\n”; print “You old favorite color is :$color\n”; print “You new favorite color is :$color\n”; print “Would you like to change it” $input = If ($input=~/^y/ i) { open (GUESTBOOK, “guest.pl”); Undef $/; $body =; Close(GUESTBOOK); $body=~S/$line/newline; Open (GUESTBOOK “>>guest.pl”); Print GUESTBOOK $body; Close (GUESTBOOK); Exit; } Else { Exit; } } Exit; } Điều xảy ? Ta nên ý kiểm tra đặc biệt với lệnh if Kể từ người có first name có khuynh hướng tương tự ta kiểm tra tương thích first last name Ký hiệu && có nghóa biểu thức thứ nhì phải True hợp lệ cho lệnh if True Như lựa chọn ,  có nghóa biểu thức thứ thứ hai phải true ta kiểm tra với color ta việc exit , không ta cảnh báo user hỏi xem họ muốn thay đổi màu họ chọn ta nhận dòng từ bình thường kiểm tra xem bắt đầu chữ y hay Y hàm(the fun) bắt đầu , không exit Chúng ta mở guest.pl để đọc thông thường sau không xác định biến hệ thống $/ biến dùng xác định cuối dòng ta đọc chúng từ file ta lấy file theo dòng (line per line) cách không định rõ Bây đọc nguyên file (gồm newline) vào biến $body Khi có toàn thay dòng có color cũ ($line) với dòng có color (newline) , làm diều cách dùng lại tác vụ =~ , ý có chữ s trước dấu / có nghóa làm hành động thay , biểu thức nằm hai /’s thay biểu thức nằm hai /’s thứ hai tồn Như tất biểu thức quy tắc ta dùng số vật giới hạn mà ta thích Do : $body =~ s #$line#newline#; Sẽ tương đương, thị i để phớt lờ kiểu chữ , theo sau dấu / cuối gắn vào Ngay thay dòng mà ta muốn thay , ta mở lại guestbook để ghi , ghi toàn file với print , exit nhớ định lại $/ trước thêm thao tác file chắn thao tác trước không bị xáo trộn Nhưng trở lại với BTQT hay để đến phần tử riêng biệt nằm script Không giống lệnh grep xem tất dòng file định , script xem dòng $_ Để bao gồm tất file ta cần làm sau : While () { If (/crypt/ ) { Print “$_”; } } Vòng lặp tiếp tục tất dòng kiểm tra Bây kiểm tra tất script cho crypt lỗi đánh máy bỏ sót hay sai tả xuất hai chữ “p” : cryppt Ta cải thiện chuổi tìm kiếm ta : While () { If ( /cryp*t/ ) { Print “$_”; } } Dấu hoa thị ( * ) cho phép tìm kiếm trả crypt với trường hợp dư hai chữ p trở lên làm Ngay ta làm tương thích chuổi mà ta tìm kiếm muốn thay ta dùng tác vụ substitute (thay ) Ta dùng tác vụ muốn thay chuổi với chuổi khác , tác vụ substitute có cấu trúc viết tắc s sau: s / crypt / tomb / ; Tác vụ substitute thay chuổi crypt chuổi thay tomb Bây thấy BTQT mẩu (pattern) Những pattern lớn hay nhỏ ý muốn , có tính chất riêng 11 BTQT mẫu (pattern) Có mẫu khác BTQT làm việc với : ký tự đơn , nhóm , neo Mỗi mẫu có vài đặt tính riêng tạo cho làm việc • Mẫu ký tự đơn : Sự tương thích mẫu ký tự thường dùng ký tự đơn dùng để làm tương thích với ký tự đơn , tức dùng chữ BTQT để làm tương thích với từ khác , BTQT “a” tìm kiếm cho ký tự “a” chuổi Ký tự tương thích mẫu thường dùng thứ hai dấu chấm câu hay đánh dấu chấm “.” Dấu chấm làm tương thích số ký tự đơn với chấp nhận tác vụ newline , /n Hoạt động vùng rộng lớn , lớp ký tự tương thích mẫu xảy tập hợp dấu ngoặc vuông dùng bao BTQT vấn đề : / [crypt]/ Khi lớp ký tự dùng , tương thích xảy số ký tự BTQT với chuổi kiểm tra Nó quan trọng để lưu y ù BTQT thử cách xác thực không giới hạn tầm vực chúng nhạy cảm với kiểu chữ (case-sensitive) Một tham gia khác , ký tự nằm vị trí tương đối xác phải nằm BTQT tương thích xảy Ta định phạm vi với tác vụ cách chèn gạch ngang hai giá trị Ví dụ : / [0-5] / Tương tự : / [0 5] / Nó có ta trì điều / [a – za – Z0 – 9] / Có thể tìm tất chữ bảng chữ gồm chữ thường chữ hoa tốt tìm số Cách ngược lại ta muốn dùng lớp ký tự ví dụ , để trả tương thích không nằm BTQT đặt dấu mũ ( ^ ) sau dấu ngoặc vuông bên trái sau: / [ ^0 - ]/ Biểu thức tương thích với ký tự đơn không nằm phạm vi từ đến Có số lớp ký tự thường dùng Perl liệt kê sau : CONSTRUCT EQUIVALENT CLASS NEGATED CONSTRUCT EQUIVALENT NEGATED CLASS \d (digits) \w (word) \s (space) [0-9] [a-za-Z0-9] [\r\t\n\f] \D (anything but digits) \W (anything but word) \S (anything but space) [^0-9] [^a-za-Z0-9] [^\r\t\n\f] Trước bước vào nội dung Perl , áp dụng khám phá Chúng ta bắt đầu tạo ghi nhanh khác biệt nhỏ Unixperl Perl for windows NT hay Winperl Một khác biệt lớn hầu hết Perl script ta tìm đường dẫn chứa dòng #! user/local/bin/perl Hoặc thứ tương tự , điều không cần thiết với Winperl Dòng UNIX perl để hệ điều hành biết tìm chương trình dịch perl Với windows NT , ta cần liên kết file có đuôi pl cho script ta để thực chức Có thể liên kết đuôi cgi ý kiến hay hầu hết file viết Perl • Mẫu nhóm: Có vài mẫu nhóm : , số nhân , dấu ngoặc đơn , xen kẽ Dùng mẫu nhóm ta cho script ta khả đặt điều kiện cho BTQT tương thích • Mẫu nhóm : Nó quen thuộc với Đó nơi BTQT tương thích với chuổi cách xác / crypt / BTQT xem ký tự : crypt • Mẫu nhóm số nhân : Chúng ta gặp trường hợp với dấu * Dấu * định tương thích “zero hay nhiều hơn” ký tự trước Ký hiệu “ + “ dùng định tương thích trả chứa hay nhiều ký tự trước Để cho biết tương thích “ không hay ” ký tự cho trước , ta dùng dấu chấm hỏi “?.” Mỗi mẩu nhóm chọn để tương thích chuổi lớn chuổi tìm Nếu ta muốn qui định mẫu nhóm ký tự tương thích ta dùng số nhân thông thường có định dạng / a{2,4} / Trong : a BTQT thử để tương thích , và phạm vi chuổi thoả mãn tương thích chuổi , có nghỉa tương thích tìm chuổi “aa”,”aaa” “aaaa” không tìm chuổi “a” hay “aaaaa” Một bổ xung số thứ hai với : / a{3, } / Nó báo cho tương thích tìm kiếm ba hay nhiều chữ a Nếu dấu phẩy với : / a{3} / Nó báo cho tương thích tìm ba chữ a Để tìm kiếm ba hay chữ a dùng số field phạm vi : / a{0,3) / Nếu ta muốn tương thích điều kiện hai ký tự thử : / a.{3}x / Điều làm cho BTQT tìm số chữ a tách ba ký tự non-newline từ chữ x • Mẫu nhóm nằm dấu ngoặc đơn : Ta dùng cặp dấu ngoặc đơn đóng mở để bao phần biểu thức tương thích , cần phải ghi nhớ phần biểu thức giữ dấu ngoặc đơn giữ nhớ (memory) để dùng tương thích biểu thức nhớ dùng số nguyên dấu \ : / moose ( ) kiss \1 /; Biểu thức quy tắc tương thích với số nảy sinh chuổi “moose,” : số ký tự two non-newline theo sau , chuoåi “kiss,” theo sau , hay số ký tự one non-newline theo sau BTQT ghi nhớ ký tự non-newline đơn tương thích với “moose” xem với “kiss” ,ví dụ: Mooseq kiss q tương thích Mooseq kiss w không Đây BTQT khác /moose.kiss./; Nó tương thích số ký tự two non-newline , cho dù chúng giống hay không “1” nằm hai dấu / liên hệ đến nằm ngoặc đơn Nếu có nhiều tập dấu ngoặc đơn ta dùng số hai dấu / ta muốn ghi nhớ trái sang phải ví dụ : / a ( )p( )e\1s/ Ký tự “a” theo sau : #1 ký tự non-newline , “p” , # ký tự new-line , “e,” , #1 ký tự non-newline , “s” Nó tương thích với :Aqpdeqs Những ký tự non-newline khác phải tương thích với định chúng Để cộng thêm khả tương thích nhiều ký tự đơn với phần tham khảo , cộng dấu * vào biểu thức : / a ( * )p\ 1e /; Biểu thức tương thích với “a” theo sau số ký tự non-newline , theo sau “p,” , theo sau dãy ký tự non-newline tương tự sau “e” Một tương thích : Aplanetpplanete Nhưng không tương thích với: Aqqpqqpe Ta dùng mẫu nhóm nhớ thay phần chia chuổi : $_= “a peas p corn e squash”; S / p ( * ) e / b \1 c / ; Taïo giá trị chuổi : A peas b corn c squash “p” “e” thay “p” “c”nhưng không thay đổi • Mẫu nhóm xen kẻ : Định dạng thông thường A p e BTQT yêu cầu để tương thích với xen kẽ định , “a” ,”p” , hay “e” Ta áp dụng xen kẽ cho nhiều ký tự Apegorilla monkey Sẽ có hiệu lực tương đương • Mẫu neo: Để neo mẫu có bốn ký hiệu đặc biệt làm được.Ta muốn neo tìm kiếm BTQT ta không muốn xuất tất trường hợp chuổi Cho ví dụ tìm chuổi “the” ta không muốn nhận “then “ “there” “them” Để làm điều ta dùng từ neo boundry \b : /the \b / Do chuổi kết thúc “the” tương thích Nhưng không cắt chuổi “absinthe” , ta cộng thêm từ neo boundary vào trước BTQT / \b the \b / Vì tương thích trả Nếu kiểm soát khác , ta muốn tương thích với trøng hợp chứa chuổi BTQT , thân chuổi ta dùng neo \B / the \b / Trả tương thích “thee” “these” “absinthe” “there” “then” không trả “the” Neo kế \^ dùng làm tương thích với điểm bắt đầu chuổi nằm chổ nhận biết để tương thích với : / \^the / Nó tương thích với chuỗi bắt đầu “the” Neo cuối \$ , làm việc tương tự đặt cuối chuổi / the \$ / Sẽ tương thích với nảy sinh “the” xuất cuối chuổi • Quyền ưu tiên mẫu : Như với tác vụ , hai mẫu nhóm neo có thứ tự ưu tiên bảng liệt kê theo thứ tự xuống Ta dùng dấu ngoặc đơn để làm sáng sủa BTQT có thứ tự ưu tiên cao , thí dụ sau trình bày khác biệt tương thích gây dùng dấu ngoặc đơn Bảng liệt kê :Pattern Precedence from Highest to Lowest NAME Parentheses REPRESENTATION () Mulipliers + * ? {a,b} Sequence and Anchoring Ape\b\B\^\$ Alternation | Ape* tương thích với ap , ape , apee , apeee , Nhưng ngược lại (ape) Sẽ tương thích với “ “ , ape , apeape , apeapeape , Vaø \^a b tương thích với “a” vị trí bắt đầu dòng hay “b” vị trí dòng Thêm \^(a b) tương thích với “a” hay “b” vị trí bắt đầu dòng ,và Ape s tương thích với “a” “pe” hay “s” ta thêm dấu ngoặc đơn (a pe ) (pe s ) tương thích với ape , as , pepe , pes dấu ngoặc đơn dùng để tìm từ có liên quan sau : (soft hard)wood Một hai trường hợp softwood hay hardwook trả tương thích Một điều dùng cho tác vụ tương thích có lẽ script tìm kiếm câu trả lời chung chi phối đến câu trả lời Ta dùng tác vụ “=~” để làm điều đó,với tác vụ đặt đối tượng BTQT giá trị Ta điền đầy $_ với giá trị cần sau script Sau ta dùng =~ làm thay đổi điều khiển tạm thời tác vụ =~ hoạt động • Những mẫu tin nhỏ tác vụ tương thích khác : Có số cách khác để sửa BTQT Perl dùng ký hiệu “ I ” báo cho BTQT phớt lờ kiểu chữ (case) việc tương thích Trong định dạng sau : / string_characters / i Ta sửa dòng script thí dụ sau từ : If ( =~ /^[Yy]/ ) Đến If ( =~/^y / i ) Vì trường hợp câu trả lời câu trả lời xác định Nếu ta muốn dùng script để tìm đường dẫn file ta cần đưa vào biểu thức dấu suyệt Và theo trật tự làm : dấu / phải đặc trước dấu \ để xuất ký tự chuổi /^\/usr\/bin\/perl / ... muốn Nó phản ánh giả thuyết perl "không xác lập giớị hạn" khả khác lúc Khả để xử lí chuổi, không quan tâm đến kí tự, thực làm cho Perl thích nghi với lập trình CGI, Perl xử lí kí tự kí hiệu literal... mã hoá thực chương trình) Đây liệu đượïc cung cấp cho trình biên dịch Perl Perl chấp nhận kiểu số sau : - số nguyên - phân số - số âm - số mũ * Số nguyên : Không bắt đầu số Perl hiểu lầm sang... tác vụ khác , chương trình trình khác Cú pháp BTQT khác hệ thống tác vụ Nhưng khái niệm vẩn giữ nguyên Cấu trúc điều khiển Perl (CTDK) Rất quan trọng chương trình dịch perl ta muốn làm Script

Ngày đăng: 03/09/2012, 16:02

Hình ảnh liên quan

* Bảng liệt kê tất cả tác vụ số : - Ngôn ngữ lập trình PERL

Bảng li.

ệt kê tất cả tác vụ số : Xem tại trang 3 của tài liệu.
Khi một trong những tác vụ trên bảng được thực thi, Perl sẽ so sánh và sau đó trả về giá trị đúng (true) hoặc sai (false).Tuy nhiên những tác vụ đối với chuỗi thì  có khác một chút. - Ngôn ngữ lập trình PERL

hi.

một trong những tác vụ trên bảng được thực thi, Perl sẽ so sánh và sau đó trả về giá trị đúng (true) hoặc sai (false).Tuy nhiên những tác vụ đối với chuỗi thì có khác một chút Xem tại trang 4 của tài liệu.
Có thể tìm tất cả những chữ cái của bảng chữ cái gồm chữ thường và chữ hoa cũng tốt như là tìm những số  - Ngôn ngữ lập trình PERL

th.

ể tìm tất cả những chữ cái của bảng chữ cái gồm chữ thường và chữ hoa cũng tốt như là tìm những số Xem tại trang 32 của tài liệu.
Như với tác vụ , cả hai mẫu nhóm và neo có thứ tự ưu tiên như trong bảng liệt kê dưới theo thứ tự trên xuống . - Ngôn ngữ lập trình PERL

h.

ư với tác vụ , cả hai mẫu nhóm và neo có thứ tự ưu tiên như trong bảng liệt kê dưới theo thứ tự trên xuống Xem tại trang 35 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan