ในขณะที่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 ที่ส่งไปยังperlinterpreter, มันไม่ใช่ตัวแปร shell. อาร์กิวเมนต์ verbatim นั้นถูกส่งผ่านเป็นperlexpression ( -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