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 |