Linux
Reply Return

หัวข้อ : เชิญเซียน perl-cgi อีกทีครับ

ข้อความว่า
ชื่อ: มิ๊ด
ส่งมาเมื่อวันที่ : 09 กันยายน, 1998 at 11:35:40 [ ด้วย IP : 203.155.132.1 ]
หัวข้อ : เชิญเซียน perl-cgi อีกทีครับ
ด้วยข้อความที่ว่า:
เรื่องการรับค่าจาก form ครับ
$value=~tr/+/ /;
$value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($a))/eg;
คือผมสงสัยว่า tr กับ s ต่างกันยังไงครับ มันก็ใช้search แล้วก็เปลี่ยนสตริงเหมือนกันนี่ครับ
แล้วก็ pack เนี่ยทำไมต้องใส่ "C" กับ $a คืออะไรครับ /eg คืออะไรครับ
ขอโทษที่รบกวนครับ คือ อ่านmanual แล้วไม่เข้าใจครับ ขอบคุณครับ..

ผู้ตอบคนที่ 1
ชื่อ: pruet
ส่งเมื่อวันที่ : 09 กันยายน, 1998 at 15:15:14 [ ด้วย IP 202.233.218.13 ]
หัวข้อ : Re: เชิญเซียน perl-cgi อีกทีครับ
ตอบว่า :
ไม่ใช่ เซียนตอบได้เปล่าครับ :)

tr เป็นการ translate นะครับ ส่วน s จะเป็นการ replace
อย่าง
$a =~ tr/a-z/A-Z/;
เป็นการเปลียนตัวอักษรตัวเล็กให้เป็นตัวใหญ่ใน String a นะครับ
ถ้าใช้ s จะต้องเปลี่ยนทีละตัว หรือว่าที่ละ pattern นะครับ

บางที tr ก็ใช้แทน s ได้ครับ

ส่วน pack นั้น คุณ copy มาผิดละครับ บรรทัดนั้นต้องเป็น
$value =~ s/%([\dA-Fa-f][\dA-Fa-f])/pack ("C", hex ($1))/eg;
นะครับ
$1 เป็นการอ้างอิงถึงผลลพัท์ของวงเล็บก่อนหน้า ในกรณีนี้ ก็คือ
([\dA-Fa-f\...]) นะครับ
ส่วน pack นั้น จะรับค่าเข้ามา แล้วเอามา ต่อหรือว่า pack ตาม pattern ที่กำหนดไว้ ในที่นี้ก็ "C" นะครับ ลองนึกภาพ printf("%s%d%c",s,b,c) ก็ได้ ครับ เหมือนกัน
ส่วน hex($1) ก็คือการแปลง ค่าที่ได้จากวงเล็บก่อนหน้าให้เป็น ฐานสิบนะครับ

function บรรทัดนี้ ใช้ในการแปลงจาก %ff%ef%ef(สมมุติ จำไม่ได้ว่าจริง ๆ เป็นตัวไหน) ให้เป็น :// ซึ่งเป็นส่วนหนึ่งของ URL นะครับ เพราะเวลาส่งผ่าน CGI มันจะแปลงเป็น %.. ให้


ผู้ตอบคนที่ 2
ชื่อ: มิ๊ด
ส่งเมื่อวันที่ : 10 กันยายน, 1998 at 10:22:56 [ ด้วย IP 203.155.134.1 ]
หัวข้อ : Re: เชิญเซียน perl-cgi อีกทีครับ
ตอบว่า :
ถึงไม่ใช่เซียนแต่ก็ทำให้เข้าใจขึ้นเยอะเลยครับ เวบไหนมีสอน perl แบบเข้าใจง่ายๆ แต่ครอบคลุมบ้างครับเนี่ย

ท่านผู้รู้ กรุณาช่วยตอบวิธีแก้ปัญหาให้หน่อยครับ ขอบคุณมากครับ :

ชื่อ :
E-Mail :
หัวข้อ :
ข้อความว่า :