Perl - ตัวแปรพิเศษ
มีตัวแปรบางตัวที่มีความหมายพิเศษและกำหนดไว้ล่วงหน้าใน Perl เป็นตัวแปรที่ใช้อักขระเครื่องหมายวรรคตอนหลังตัวบ่งชี้ตัวแปรปกติ ($, @ หรือ%) เช่น $ _ (อธิบายด้านล่าง)
ตัวแปรพิเศษส่วนใหญ่มีภาษาอังกฤษเช่นชื่อยาวเช่นตัวแปรระบบปฏิบัติการ Error $! สามารถเขียนเป็น $ OS_ERROR แต่ถ้าจะใช้ภาษาอังกฤษเหมือนชื่อก็ต้องใส่บรรทัดเดียวuse English;ที่ด้านบนของไฟล์โปรแกรมของคุณ สิ่งนี้จะแนะนำล่ามให้รับความหมายที่แท้จริงของตัวแปร
ตัวแปรพิเศษที่ใช้บ่อยที่สุดคือ $ _ ซึ่งมีอินพุตเริ่มต้นและสตริงการค้นหารูปแบบ ตัวอย่างเช่นในบรรทัดต่อไปนี้ -
#!/usr/bin/perl
foreach ('hickory','dickory','doc') {
print $_;
print "\n";
}
เมื่อดำเนินการสิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -
hickory
dickory
doc
อีกครั้งลองตรวจสอบตัวอย่างเดียวกันโดยไม่ใช้ตัวแปร $ _ อย่างชัดเจน -
#!/usr/bin/perl
foreach ('hickory','dickory','doc') {
print;
print "\n";
}
เมื่อดำเนินการสิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -
hickory
dickory
doc
ในครั้งแรกที่ดำเนินการวนซ้ำจะมีการพิมพ์ "hickory" ครั้งที่สองจะมีการพิมพ์ "dickory" และครั้งที่สามจะพิมพ์ "doc" นั่นเป็นเพราะในการวนซ้ำแต่ละครั้งสตริงปัจจุบันจะอยู่ใน $ _ และถูกใช้โดยค่าเริ่มต้นโดยการพิมพ์ นี่คือสถานที่ที่ Perl จะถือว่า $ _ แม้ว่าคุณจะไม่ได้ระบุก็ตาม -
ฟังก์ชัน unary ต่างๆรวมถึงฟังก์ชันเช่น ord และ int ตลอดจนการทดสอบไฟล์ทั้งหมด (-f, -d) ยกเว้น -t ซึ่งมีค่าเริ่มต้นเป็น STDIN
ฟังก์ชั่นรายการต่างๆเช่นพิมพ์และยกเลิกการเชื่อมโยง
การดำเนินการจับคู่รูปแบบ m //, s /// และ tr /// เมื่อใช้โดยไม่มีตัวดำเนินการ = ~
ตัวแปรตัววนซ้ำเริ่มต้นใน foreach loop หากไม่มีการให้ตัวแปรอื่น
ตัวแปร iterator โดยนัยในฟังก์ชัน grep และ map
ตำแหน่งดีฟอลต์ในการใส่เร็กคอร์ดอินพุตเมื่อผลลัพธ์ของการดำเนินการไลน์อินพุตถูกทดสอบโดยตัวมันเองโดยเป็นเกณฑ์เดียวของการทดสอบ while (กล่าวคือ) โปรดทราบว่านอกเหนือจากการทดสอบในขณะนี้จะไม่เกิดขึ้น
ประเภทตัวแปรพิเศษ
ขึ้นอยู่กับการใช้งานและลักษณะของตัวแปรพิเศษเราสามารถจัดหมวดหมู่ได้ในหมวดหมู่ต่อไปนี้ -
- ตัวแปรพิเศษ Global Scalar
- ตัวแปรพิเศษ Global Array
- ตัวแปรพิเศษ Global Hash
- แฟ้มพิเศษระดับโลก
- ค่าคงที่พิเศษทั่วโลก
- ตัวแปรพิเศษของนิพจน์ทั่วไป
- ตัวแปรพิเศษของ Filehandle
ตัวแปรพิเศษ Global Scalar
นี่คือรายการตัวแปรพิเศษสเกลาร์ทั้งหมด เราได้ระบุชื่อที่เกี่ยวข้องกับภาษาอังกฤษพร้อมกับชื่อสัญลักษณ์
$ _ | อินพุตเริ่มต้นและพื้นที่ค้นหารูปแบบ |
$ ARG | |
$. | หมายเลขบรรทัดอินพุตปัจจุบันของตัวจัดการไฟล์ล่าสุดที่อ่าน การปิดอย่างชัดเจนบนมือจับไฟล์จะรีเซ็ตหมายเลขบรรทัด |
$ NR | |
$ / | ตัวคั่นบันทึกอินพุต ขึ้นบรรทัดใหม่ตามค่าเริ่มต้น หากตั้งค่าเป็นสตริง null จะถือว่าบรรทัดว่างเป็นตัวคั่น |
$ RS | |
$, | ตัวคั่นฟิลด์เอาต์พุตสำหรับตัวดำเนินการพิมพ์ |
$ OFS | |
$ \ | ตัวคั่นเร็กคอร์ดเอาต์พุตสำหรับตัวดำเนินการพิมพ์ |
$ ORS | |
$ " | เช่นเดียวกับ "$" ยกเว้นว่าจะใช้กับค่ารายการที่ถูกแทรกเข้าไปในสตริงที่มีเครื่องหมายอัญประกาศคู่ (หรือสตริงที่ตีความคล้ายกัน) ค่าเริ่มต้นคือช่องว่าง |
$ LIST_SEPARATOR | |
$; | ตัวแยกตัวห้อยสำหรับการจำลองอาร์เรย์หลายมิติ ค่าเริ่มต้นคือ "\ 034" |
$ SUBSCRIPT_SEPARATOR | |
$ ^ L | สิ่งที่รูปแบบที่ส่งออกเพื่อดำเนินการฟีดฟอร์ม ค่าเริ่มต้นคือ "\ f" |
$ FORMAT_FORMFEED | |
$: | ชุดอักขระปัจจุบันหลังจากนั้นสตริงอาจขาดเพื่อเติมช่องความต่อเนื่อง (เริ่มต้นด้วย ^) ในรูปแบบ ค่าเริ่มต้นคือ "\ n" " |
$ FORMAT_LINE_BREAK_CHARACTERS | |
$ ^ ก | ค่าปัจจุบันของตัวสะสมการเขียนสำหรับบรรทัดรูปแบบ |
$ ACCUMULATOR | |
$ # | มีรูปแบบผลลัพธ์สำหรับตัวเลขที่พิมพ์ (เลิกใช้แล้ว) |
$ OFMT | |
$? | สถานะที่ส่งคืนโดยคำสั่งปิดท่อสุดท้ายคำสั่ง backtick (``) หรือตัวดำเนินการระบบ |
$ CHILD_ERROR | |
$! | หากใช้ในบริบทตัวเลขจะให้ค่าปัจจุบันของตัวแปร errno โดยระบุข้อผิดพลาดการเรียกระบบล่าสุด หากใช้ในบริบทสตริงให้ผลสตริงข้อผิดพลาดของระบบที่สอดคล้องกัน |
$ OS_ERROR หรือ $ ERRNO | |
$ @ | ข้อความแสดงข้อผิดพลาดทางไวยากรณ์ Perl จากคำสั่ง eval สุดท้าย |
$ EVAL_ERROR | |
$$ | pid ของกระบวนการ Perl ที่รันสคริปต์นี้ |
$ PROCESS_ID หรือ $ PID | |
$ < | ID ผู้ใช้จริง (uid) ของกระบวนการนี้ |
$ REAL_USER_ID หรือ $ UID | |
$> | ID ผู้ใช้ที่มีประสิทธิภาพของกระบวนการนี้ |
$ EFFECTIVE_USER_ID หรือ $ EUID | |
$ ( | ID กลุ่มจริง (gid) ของกระบวนการนี้ |
$ REAL_GROUP_ID หรือ $ GID | |
$) | gid ที่มีประสิทธิภาพของกระบวนการนี้ |
$ EFFECTIVE_GROUP_ID หรือ $ EGID | |
$ 0 | มีชื่อของไฟล์ที่มีสคริปต์ Perl ที่กำลังดำเนินการ |
$ PROGRAM_NAME | |
$ [ | ดัชนีขององค์ประกอบแรกในอาร์เรย์และของอักขระตัวแรกในสตริงย่อย ค่าเริ่มต้นคือ 0 |
$] | ส่งคืนเวอร์ชันบวกระดับแพตช์หารด้วย 1,000 |
$ PERL_VERSION | |
$ ^ D | ค่าปัจจุบันของแฟล็กการดีบัก |
การแก้ปัญหา $ | |
$ ^ E | ข้อความแสดงข้อผิดพลาดเพิ่มเติมในบางแพลตฟอร์ม |
$ EXTENDED_OS_ERROR | |
$ ^ F | ตัวบอกไฟล์ระบบสูงสุดตามปกติ 2 |
$ SYSTEM_FD_MAX | |
$ ^ H | มีคำแนะนำคอมไพเลอร์ภายในที่เปิดใช้งานโดยโมดูลเชิงปฏิบัติบางอย่าง |
$ ^ ฉัน | ค่าปัจจุบันของส่วนขยายแก้ไขแบบแทนที่ ใช้ undef เพื่อปิดใช้งานการแก้ไขแบบแทนที่ |
$ INPLACE_EDIT | |
$ ^ ม | เนื้อหาของ $ M สามารถใช้เป็นพูลหน่วยความจำฉุกเฉินในกรณีที่ Perl เสียชีวิตโดยมีข้อผิดพลาดหน่วยความจำไม่เพียงพอ การใช้ $ M จำเป็นต้องมีการรวบรวม Perl เป็นพิเศษ ดูเอกสารการติดตั้งสำหรับข้อมูลเพิ่มเติม |
$ ^ O | มีชื่อของระบบปฏิบัติการที่คอมไพล์ไบนารี Perl ปัจจุบัน |
$ OSNAME | |
$ ^ P | แฟล็กภายในที่ดีบักเกอร์ล้างเพื่อไม่ให้ดีบักเอง |
PERLDB $ | |
$ ^ T | เวลาที่สคริปต์เริ่มทำงานเป็นวินาทีนับตั้งแต่ยุค |
$ BASETIME | |
$ ^ ว | ค่าปัจจุบันของสวิตช์คำเตือนไม่ว่าจะเป็นจริงหรือเท็จ |
คำเตือน $ | |
$ ^ X | ชื่อที่ไบนารี Perl เองถูกเรียกใช้เป็น. |
$ EXECUTABLE_NAME | |
$ ARGV | มีชื่อของไฟล์ปัจจุบันเมื่ออ่านจาก <ARGV> |
ตัวแปรพิเศษ Global Array
@ARGV | อาร์เรย์ที่มีอาร์กิวเมนต์บรรทัดคำสั่งสำหรับสคริปต์ |
@INC | อาร์เรย์ที่มีรายชื่อสถานที่ที่จะค้นหาสคริปต์ Perl ที่จะประเมินโดย do, require หรือใช้โครงสร้าง |
@ ฟ | อาร์เรย์ที่แยกบรรทัดอินพุตเมื่อกำหนด -a สวิตช์บรรทัดคำสั่ง |
ตัวแปรพิเศษ Global Hash
% INC | แฮชที่มีรายการสำหรับชื่อไฟล์ของแต่ละไฟล์ที่รวมไว้ผ่าน do หรือ require |
% ENV | แฮชที่มีสภาพแวดล้อมปัจจุบันของคุณ |
% ซิก | แฮชใช้เพื่อตั้งค่าตัวจัดการสัญญาณสำหรับสัญญาณต่างๆ |
แฟ้มพิเศษระดับโลก
ARGV | จัดการไฟล์พิเศษที่วนซ้ำบนชื่อไฟล์บรรทัดคำสั่งใน @ARGV โดยปกติจะเขียนเป็น null filehandle ใน <> |
STDERR | ตัวจัดการไฟล์พิเศษสำหรับข้อผิดพลาดมาตรฐานในแพ็คเกจใด ๆ |
STDIN | ที่จับไฟล์พิเศษสำหรับอินพุตมาตรฐานในแพ็คเกจใด ๆ |
STDOUT | ที่จับไฟล์พิเศษสำหรับเอาต์พุตมาตรฐานในแพ็คเกจใด ๆ |
ข้อมูล | filehandle พิเศษที่อ้างถึงสิ่งที่ตามหลังโทเค็น __END__ ในไฟล์ที่มีสคริปต์ หรือตัวจัดการไฟล์พิเศษสำหรับสิ่งที่ตามหลังโทเค็น __DATA__ ในไฟล์ที่ต้องการตราบใดที่คุณอ่านข้อมูลในแพ็กเกจ __DATA__ เดียวกันพบใน. |
_ (ขีดล่าง) | filehandle พิเศษที่ใช้ในการแคชข้อมูลจากตัวดำเนินการทดสอบ stat, lstat หรือไฟล์ล่าสุด |
ค่าคงที่พิเศษทั่วโลก
__END__ | ระบุจุดสิ้นสุดทางตรรกะของโปรแกรมของคุณ ข้อความต่อไปนี้จะถูกละเว้น แต่สามารถอ่านได้ผ่านทางมือจับไฟล์ DATA |
__ไฟล์__ | แสดงชื่อไฟล์ที่จุดในโปรแกรมของคุณที่ใช้ ไม่ถูกแทรกเข้าไปในสตริง |
__ไลน์__ | แสดงหมายเลขบรรทัดปัจจุบัน ไม่ถูกแทรกเข้าไปในสตริง |
__PACKAGE__ | แสดงชื่อแพ็กเกจปัจจุบันในเวลาคอมไพล์หรือไม่ได้กำหนดหากไม่มีแพ็กเกจปัจจุบัน ไม่ถูกแทรกเข้าไปในสตริง |
ตัวแปรพิเศษของนิพจน์ทั่วไป
$ หลัก | มีข้อความที่จับคู่โดยชุดวงเล็บที่ตรงกันในรูปแบบสุดท้ายที่ตรงกัน ตัวอย่างเช่น $ 1 จะจับคู่สิ่งที่อยู่ในวงเล็บชุดแรกในนิพจน์ทั่วไปก่อนหน้านี้ |
$ & | สตริงที่จับคู่โดยการจับคู่รูปแบบสำเร็จครั้งล่าสุด |
$ MATCH | |
$ ` | สตริงที่นำหน้าสิ่งที่จับคู่โดยการจับคู่รูปแบบสำเร็จครั้งล่าสุด |
$ PREMATCH | |
$ ' | สตริงที่ตามหลังสิ่งที่จับคู่โดยการจับคู่รูปแบบสำเร็จครั้งล่าสุด |
$ POSTMATCH | |
$ + | วงเล็บสุดท้ายที่ตรงกับรูปแบบการค้นหาล่าสุด สิ่งนี้มีประโยชน์หากคุณไม่ทราบว่าชุดรูปแบบทางเลือกใดที่ตรงกัน ตัวอย่างเช่น: / Version: (. *) | Revision: (. *) / && ($ rev = $ +); |
$ LAST_PAREN_MATCH |
ตัวแปรพิเศษของ Filehandle
$ | | หากตั้งค่าเป็นไม่ใช่ศูนย์ให้บังคับ fflush (3) ทุกครั้งที่เขียนหรือพิมพ์บนช่องสัญญาณเอาต์พุตที่เลือก |
$ OUTPUT_AUTOFLUSH | |
$% | หมายเลขหน้าปัจจุบันของช่องสัญญาณเอาต์พุตที่เลือกในปัจจุบัน |
$ FORMAT_PAGE_NUMBER | |
$ = | ความยาวหน้าปัจจุบัน (เส้นที่พิมพ์ได้) ของช่องสัญญาณเอาต์พุตที่เลือกในปัจจุบัน ค่าเริ่มต้นคือ 60 |
$ FORMAT_LINES_PER_PAGE | |
$ - | จำนวนบรรทัดที่เหลือบนหน้าของช่องสัญญาณเอาต์พุตที่เลือกในปัจจุบัน |
$ FORMAT_LINES_LEFT | |
$ ~ | ชื่อของรูปแบบรายงานปัจจุบันสำหรับช่องสัญญาณเอาต์พุตที่เลือกในปัจจุบัน ค่าดีฟอลต์คือชื่อของ filehandle |
$ FORMAT_NAME | |
$ ^ | ชื่อของรูปแบบบนสุดของหน้าปัจจุบันสำหรับช่องสัญญาณเอาต์พุตที่เลือกในปัจจุบัน ค่าเริ่มต้นคือชื่อของ filehandle ที่มี _TOP ต่อท้าย |
$ FORMAT_TOP_NAME |