Perl - Biến đặc biệt
Có một số biến có ý nghĩa được xác định trước và đặc biệt trong Perl. Chúng là những biến sử dụng các ký tự dấu câu sau chỉ báo biến thông thường ($, @ hoặc%), chẳng hạn như $ _ (giải thích bên dưới).
Hầu hết các biến đặc biệt có tên dài như tiếng Anh, ví dụ, biến Lỗi hệ điều hành $! có thể được viết là $ OS_ERROR. Nhưng nếu bạn định sử dụng tiếng Anh như tên, thì bạn sẽ phải đặt một dònguse English;ở đầu tệp chương trình của bạn. Điều này hướng dẫn trình thông dịch lấy ý nghĩa chính xác của biến.
Biến đặc biệt được sử dụng phổ biến nhất là $ _, chứa đầu vào mặc định và chuỗi tìm kiếm mẫu. Ví dụ, trong các dòng sau:
#!/usr/bin/perl
foreach ('hickory','dickory','doc') {
print $_;
print "\n";
}
Khi được thực thi, điều này sẽ tạo ra kết quả sau:
hickory
dickory
doc
Một lần nữa, hãy kiểm tra cùng một ví dụ mà không sử dụng biến $ _ một cách rõ ràng -
#!/usr/bin/perl
foreach ('hickory','dickory','doc') {
print;
print "\n";
}
Khi được thực thi, điều này cũng sẽ tạo ra kết quả sau:
hickory
dickory
doc
Lần đầu tiên thực hiện vòng lặp, "hickory" được in. Lần thứ hai, "dickory" được in, và lần thứ ba, "doc" được in. Đó là bởi vì trong mỗi lần lặp lại của vòng lặp, chuỗi hiện tại được đặt trong $ _ và được sử dụng theo mặc định trong bản in. Đây là những nơi Perl sẽ giả định $ _ ngay cả khi bạn không chỉ định nó -
Các hàm đơn phân khác nhau, bao gồm các hàm như ord và int, cũng như tất cả các bài kiểm tra tệp (-f, -d) ngoại trừ -t, được mặc định là STDIN.
Các chức năng danh sách khác nhau như in và hủy liên kết.
Các phép toán so khớp mẫu m //, s /// và tr /// khi được sử dụng mà không có toán tử = ~.
Biến trình lặp mặc định trong vòng lặp foreach nếu không có biến nào khác được cung cấp.
Biến vòng lặp ngầm định trong hàm grep và hàm ánh xạ.
Vị trí mặc định để đặt bản ghi đầu vào khi kết quả của thao tác nhập dòng được tự nó kiểm tra như là tiêu chí duy nhất của kiểm tra trong khi (tức là). Lưu ý rằng ngoài một thời gian thử nghiệm, điều này sẽ không xảy ra.
Các loại biến đặc biệt
Dựa trên cách sử dụng và bản chất của các biến đặc biệt, chúng ta có thể phân loại chúng theo các loại sau:
- Biến đặc biệt vô hướng toàn cục.
- Biến đặc biệt của mảng toàn cục.
- Biến đặc biệt băm toàn cục.
- Xử lý tập tin đặc biệt toàn cầu.
- Hằng số đặc biệt toàn cầu.
- Biến Đặc biệt Biểu thức Chính quy.
- Filehandle Biến đặc biệt.
Biến đặc biệt vô hướng toàn cục
Đây là danh sách tất cả các biến đặc biệt vô hướng. Chúng tôi đã liệt kê các tên tương ứng như tiếng Anh cùng với các tên tượng trưng.
$ _ | Không gian tìm kiếm mẫu và đầu vào mặc định. |
$ ARG | |
$. | Số dòng đầu vào hiện tại của bộ xử lý tệp cuối cùng đã được đọc. Một đóng rõ ràng trên xử lý tệp sẽ đặt lại số dòng. |
$ NR | |
$ / | Bộ tách bản ghi đầu vào; dòng mới theo mặc định. Nếu được đặt thành chuỗi null, nó sẽ coi các dòng trống là dấu phân cách. |
$ RS | |
$, | Dấu tách trường đầu ra cho toán tử in. |
$ OFS | |
$ \ | Dấu phân tách bản ghi đầu ra cho toán tử in. |
$ ORS | |
$ " | Giống như "$", ngoại trừ việc nó áp dụng cho các giá trị danh sách được nội suy vào một chuỗi được trích dẫn kép (hoặc chuỗi được diễn giải tương tự). Mặc định là một khoảng trắng. |
$ LIST_SEPARATOR | |
$; | Dấu phân tách chỉ số con để mô phỏng mảng nhiều chiều. Mặc định là "\ 034". |
$ SUBSCRIPT_SEPARATOR | |
$ ^ L | Định dạng xuất ra để thực hiện một nguồn cấp dữ liệu định dạng. Mặc định là "\ f". |
$ FORMAT_FORMFEED | |
$: | Tập hợp ký tự hiện tại mà sau đó một chuỗi có thể bị phá vỡ để điền vào các trường tiếp tục (bắt đầu bằng ^) trong một định dạng. Mặc định là "\ n" ". |
$ FORMAT_LINE_BREAK_CHARACTERS | |
$ ^ A | Giá trị hiện tại của bộ tích lũy ghi cho các dòng định dạng. |
$ ACCUMULATOR | |
$ # | Chứa định dạng đầu ra cho các số được in (không dùng nữa). |
$ OFMT | |
$? | Trạng thái được trả về bởi lệnh đóng đường ống cuối cùng, lệnh backtick (``) hoặc toán tử hệ thống. |
$ CHILD_ERROR | |
$! | Nếu được sử dụng trong ngữ cảnh số, sẽ mang lại giá trị hiện tại của biến errno, xác định lỗi cuộc gọi hệ thống cuối cùng. Nếu được sử dụng trong ngữ cảnh chuỗi, sẽ tạo ra chuỗi lỗi hệ thống tương ứng. |
$ OS_ERROR hoặc $ ERRNO | |
$ @ | Thông báo lỗi cú pháp Perl từ lệnh eval cuối cùng. |
$ EVAL_ERROR | |
$$ | Pid của quá trình Perl chạy tập lệnh này. |
$ PROCESS_ID hoặc $ PID | |
$ < | ID người dùng thực (uid) của quá trình này. |
$ REAL_USER_ID hoặc $ UID | |
$> | ID người dùng hiệu quả của quá trình này. |
$ EFFECTIVE_USER_ID hoặc $ EUID | |
$ ( | ID nhóm thực (gid) của quá trình này. |
$ REAL_GROUP_ID hoặc $ GID | |
$) | Gid hiệu quả của quá trình này. |
$ EFFECTIVE_GROUP_ID hoặc $ EGID | |
$ 0 | Chứa tên của tệp chứa tập lệnh Perl đang được thực thi. |
$ PROGRAM_NAME | |
$ [ | Chỉ số của phần tử đầu tiên trong một mảng và của ký tự đầu tiên trong một chuỗi con. Mặc định là 0. |
$] | Trả về phiên bản cộng với mức vá lỗi chia cho 1000. |
$ PERL_VERSION | |
$ ^ D | Giá trị hiện tại của cờ gỡ lỗi. |
$ NỢ | |
$ ^ E | Thông báo lỗi mở rộng trên một số nền tảng. |
$ EXTENDED_OS_ERROR | |
$ ^ F | Bộ mô tả tệp hệ thống tối đa, thường là 2. |
$ SYSTEM_FD_MAX | |
$ ^ H | Chứa các gợi ý trình biên dịch nội bộ được kích hoạt bởi một số mô-đun thực dụng nhất định. |
$ ^ I | Giá trị hiện tại của tiện ích mở rộng tại chỗ-chỉnh sửa. Sử dụng undef để tắt chỉnh sửa tại chỗ. |
$ INPLACE_EDIT | |
$ ^ M | Nội dung của $ M có thể được sử dụng như một nhóm bộ nhớ khẩn cấp trong trường hợp Perl chết do lỗi hết bộ nhớ. Việc sử dụng $ M yêu cầu một biên dịch đặc biệt của Perl. Xem tài liệu CÀI ĐẶT để biết thêm thông tin. |
$ ^ O | Chứa tên của hệ điều hành mà tệp nhị phân Perl hiện tại đã được biên dịch. |
$ OSNAME | |
$ ^ P | Cờ nội bộ mà trình gỡ lỗi xóa để nó không tự gỡ lỗi. |
$ PERLDB | |
$ ^ T | Thời gian mà tập lệnh bắt đầu chạy, tính bằng giây kể từ kỷ nguyên. |
$ BASETIME | |
$ ^ W | Giá trị hiện tại của công tắc cảnh báo, đúng hoặc sai. |
$ CẢNH BÁO | |
$ ^ X | Tên mà bản thân hệ nhị phân Perl được thực thi như. |
$ EXECUTABLE_NAME | |
$ ARGV | Chứa tên của tệp hiện tại khi đọc từ <ARGV>. |
Biến đặc biệt của mảng toàn cục
@ARGV | Mảng chứa các đối số dòng lệnh dành cho tập lệnh. |
@INC | Mảng có chứa danh sách các vị trí để tìm kiếm các tập lệnh Perl được đánh giá bởi các cấu trúc do, request hoặc use. |
@F | Mảng mà các dòng đầu vào được phân tách khi chuyển đổi dòng lệnh -a được đưa ra. |
Biến số đặc biệt băm toàn cục
% INC | Hàm băm chứa các mục nhập cho tên tệp của từng tệp đã được bao gồm thông qua do hoặc request. |
% ENV | Hàm băm chứa môi trường hiện tại của bạn. |
% SIG | Hàm băm được sử dụng để đặt bộ xử lý tín hiệu cho các tín hiệu khác nhau. |
Xử lý tệp đặc biệt toàn cầu
ARGV | Xử lý tệp đặc biệt lặp lại tên tệp dòng lệnh trong @ARGV. Thường được viết dưới dạng xử lý tệp null trong <>. |
STDERR | Xử lý tệp đặc biệt cho lỗi tiêu chuẩn trong bất kỳ gói nào. |
STDIN | Bộ xử lý tệp đặc biệt cho đầu vào tiêu chuẩn trong bất kỳ gói nào. |
GIỚI THIỆU | Xử lý tệp đặc biệt cho đầu ra tiêu chuẩn trong bất kỳ gói nào. |
DỮ LIỆU | Xử lý tệp đặc biệt đề cập đến bất kỳ thứ gì sau mã thông báo __END__ trong tệp chứa tập lệnh. Hoặc, xử lý tệp đặc biệt cho bất kỳ thứ gì sau mã thông báo __DATA__ trong tệp bắt buộc, miễn là bạn đang đọc dữ liệu trong cùng một gói __DATA__ được tìm thấy trong đó. |
_ (gạch dưới) | Xử lý tệp đặc biệt được sử dụng để lưu vào bộ đệm thông tin từ toán tử kiểm tra tệp thống kê, lstat hoặc tệp cuối cùng. |
Hằng số đặc biệt toàn cầu
__KẾT THÚC__ | Cho biết kết thúc hợp lý của chương trình của bạn. Bất kỳ văn bản nào sau đây đều bị bỏ qua, nhưng có thể được đọc qua bộ xử lý tệp DATA. |
__TẬP TIN__ | Đại diện cho tên tệp tại điểm trong chương trình của bạn nơi nó được sử dụng. Không nội suy thành chuỗi. |
__HÀNG__ | Đại diện cho số dòng hiện tại. Không nội suy thành chuỗi. |
__PACKAGE__ | Đại diện cho tên gói hiện tại tại thời điểm biên dịch hoặc không xác định nếu không có gói hiện tại. Không nội suy thành chuỗi. |
Biến đặc biệt của cụm từ thông dụng
$ chữ số | Chứa văn bản được so khớp bởi bộ dấu ngoặc đơn tương ứng trong mẫu cuối cùng được khớp. Ví dụ: $ 1 đối sánh với bất kỳ thứ gì được chứa trong tập hợp dấu ngoặc đơn đầu tiên trong biểu thức chính quy trước đó. |
$ & | Chuỗi được so khớp theo mẫu thành công gần đây nhất. |
$ TRẬN ĐẤU | |
$ ` | Chuỗi đứng trước bất kỳ chuỗi nào đã được khớp với lần khớp mẫu thành công cuối cùng. |
$ TRƯỚC | |
$ ' | Chuỗi theo sau bất kỳ thứ gì được khớp với mẫu thành công cuối cùng. |
$ POSTMATCH | |
$ + | Dấu ngoặc vuông cuối cùng phù hợp với mẫu tìm kiếm cuối cùng. Điều này rất hữu ích nếu bạn không biết tập hợp các mẫu thay thế nào phù hợp. Ví dụ: / Phiên bản: (. *) | Bản sửa đổi: (. *) / && ($ rev = $ +); |
$ LAST_PAREN_MATCH |
Filehandle Biến đặc biệt
$ | | Nếu được đặt thành kháczero, hãy nhấn phím fflush (3) sau mỗi lần ghi hoặc in trên kênh đầu ra hiện được chọn. |
$ OUTPUT_AUTOFLUSH | |
$% | Số trang hiện tại của kênh đầu ra hiện được chọn. |
$ FORMAT_PAGE_NUMBER | |
$ = | Độ dài trang hiện tại (dòng có thể in) của kênh đầu ra hiện được chọn. Mặc định là 60. |
$ FORMAT_LINES_PER_PAGE | |
$ - | Số dòng còn lại trên trang của kênh đầu ra hiện được chọn. |
$ FORMAT_LINES_LEFT | |
$ ~ | Tên của định dạng báo cáo hiện tại cho kênh đầu ra hiện được chọn. Mặc định là tên của bộ xử lý tệp. |
$ FORMAT_NAME | |
$ ^ | Tên của định dạng đầu trang hiện tại cho kênh đầu ra hiện được chọn. Mặc định là tên của bộ xử lý tệp có thêm _TOP. |
$ FORMAT_TOP_NAME |