ในขณะที่bash
ครอบคลุมมุมมองคำถามของคุณทำให้ฉันคิดว่าคุณได้เจอตัวแปรเหล่านั้นในperl
รหัส
$&
และเป็นตัวแปรที่พิเศษใน$_
perl
และพบได้ในperl
รหัสที่เรียกจากรหัสเชลล์
$_
เป็นตัวแปรเริ่มต้นperl
ฟังก์ชั่นและตัวดำเนินการหลายอย่าง ตัวแปรนั้นเป็นตัวแปรเริ่มต้นที่กำหนดโดยตัวดำเนินการอินพุต
ใน:
perl -pe 'some-code' < some-input
มีการเรียกใช้โค้ดบางรหัสสำหรับทุกบรรทัดของอินพุตโดยที่บรรทัดนั้นถูกเก็บไว้$_
และเนื้อหาของ$_
จะถูกพิมพ์หลังจากรันโค้ดบางตัวแล้ว
s/regex/replacement/
ประกอบการทำงานบน$_
โดยค่าเริ่มต้น ดังนั้นคุณมักจะพบสิ่งต่าง ๆ เช่น:
perl -pe 's/foo/bar/'
ซึ่งสั้นสำหรับ:
perl -pe '$_ =~ s/foo/bar/'
(ด้านบน, $_
เท่าที่เชลล์เกี่ยวข้องเป็นเพียงส่วนหนึ่งของอาร์กิวเมนต์ verbatim ที่ส่งไปยังperl
interpreter, มันไม่ใช่ตัวแปร shell. อาร์กิวเมนต์ verbatim นั้นถูกส่งผ่านเป็นperl
expression ( -e
) ถึงperl
, และสำหรับperl
ว่ามันถูกตีความว่าเป็น ตัวแปร).
$&
เป็นperl
ตัวแปรพิเศษอีกตัวที่ขยายไปยังสิ่งที่จับคู่โดยตัวดำเนินการจับคู่ล่าสุด ( m/.../
, s/.../.../
... )
ตัวอย่างเช่น
$ echo foo | perl -lne '
print "The last character in $_ is $&" if m/.$/'
The last character in foo is o
หรือ:
$ echo foo bar | perl -pe 's/[aeiou]+/<$&>/g'
f<oo> b<a>r