¡¡

PERL CGI¼ò½é¼°Ö¸Áîʾ·¶


Õª×Ô²ÌÆæÓñ¡¢Á¬Õñºº¡¢ÕÅÖ¾Ç¿Öø¡¶CGI±à³ÌÖ¸ÄÏ¡·µÚÁùÕÂ
Ϊ×ðÖØ×÷Õß°æÈ¨,Ö»×÷²¿·Ö½ÚÑ¡,ÒÔ×÷ÍÆ½éÖ®ÓÃ,
ÍÆ¼öÄú¹ºÂòÔ­ÊéÔĶÁ!


6.1 PerlÓïÑÔ¼ò½é

¡¡¡¡Perl(Practical Extraction and Report Language)½Ð×öÎÄ×Ö·ÖÎö±¨¸æÓïÑÔ¡£ÊÇÓÉÀÍÀû¡¤»ª¶û(Larry Wall)Ëù½¨Á¢³öÀ´µÄÓïÑÔ¡£ËûÉè¼ÆPerlʱµÄÕÜѧÊÇÒÔʵÓÃΪµÚÒ»ÓÅÏÈ,Ò²¾ÍÊÇÓïÑÔÈÝÒ×ʹÓÃ,ÓÐЧÂÊ,¶øÇÒÍêÕû¡£PerlÓïÑÔÖаüº¬ÁËC¡¢C++¡¢shell script¡¢sed¡¢awkÕ⼸¸öÓïÑÔµÄÓï·¨,ËüԭʼµÄÄ¿µÄ¾ÍÊÇÓÃÀ´È¡´úUNIXÔ­À´sed/awkÓëscriptµÄ×éºÏ,ÓÃÀ´»ãÕûÐÅÏ¢,²úÉú±¨±íµÄÒ»¸ö¹¤¾ß³ÌÐòÓïÑÔ¡£ÇÒËæ×Ű汾µÄ¸Ä½ø,¹¦ÄÜÔ½À´Ô½Ç¿,ÏÖÔڵŦÄÜÒѾ­³¬ºõÔ­ÏÈÉè¼ÆÊ±µÄÏëÏó,¼¸ºõÈκÎʶ¼¿ÉÒÔ×öµ½,Ò²±ä³Éÿһ²¿¹¤×÷Õ¾±Ø±¸µÄ±ê×¼¹¤¾ßÁË¡£ÒòΪËü¶Ô×Ö·û´®ÓëÊý¾ÝÆÊÎö·½ÃæÓкÜÇ¿µÄ´¦ÀíÄÜÁ¦,ÓÈÆäÊÇÀûÓùØÁªÐÔÊý×éÀ´×÷CGIÓ¦ÓóÌÐòÆÊÎöÊäÈëÊý¾Ý´®,¿ÉÒÔ˵ÊÇÒ»¸ö¹¦ÄÜÇ¿´óµÄÓïÑÔ!
¡¡¡¡PerlÕâ¸ö½âÊÍʽµÄÓïÑÔ¶Ô¹úÄÚµÄʹÓÃÕßÀ´Ëµ¿ÉÄܶ¼ºÜİÉú,ÉõÖÁ¿ÉÄÜÌý¶¼Ã»Ìý¹ý,Ϊʲ֮ҪÓÃPerlÀ´Ð´CGIÓ¦ÓóÌÐòÄØ£¿ÒòΪPerlÓкÜÇ¿µÄ×Ö·û´®´¦ÀíÄÜÁ¦,ÔÚ¹úÍâºÜ¶à´¦ÀíÊý¾Ý¿âµÄÈí¼þ¿ÉÒÔÓÃPerlÀ´¹µÍ¨¡£ÔÚPerl5.0°æ±¾Öл¹Ôö¼ÓÃæÏò¶ÔÏóµÄÓ÷¨¡¢Ôö¼Ó¶Ô×Ö·û´®µÄ´¦ÀíÄÜÁ¦¡¢¿ÉÒÔ°ÑÕû¸öÎļþµ±³ÉÒ»¸ö×Ö·û´®À´´¦Àí¡¢²»ÊÜÈκÎÊý¾ÝµÄ´óСÏÞÖÆ¶øÖ»ÊÜ´æ´¢Æ÷µÄ´óС¡¢Äܹ»´¦ÀíDBMÊý¾Ý¿â¸ñʽµÄÊý¾ÝÒ²Äܹ»´¦Àí¶þ½øÖƵÄÊý¾ÝµÈµÈ,¸üÖØÒªµÄÊÇPerl»¹¿ÉÒÔÔÚUnix¡¢WindowsNT¡¢Windows95¡¢Dos¡¢Linux¡¢FreeBSD¡¢OS2¡¢MacitoshµÈ²Ù×÷ϵͳÖÐʹÓá£Ä¿Ç°»¹¿ÉÒÔÓÃPerlÀ´ºÍһЩÊý¾Ý¿âÈí¼þ¹µÍ¨,ÔÚ¹úÍâһЩ¹¦ÄÜÇ¿´óµÄCGIÓ¦ÓóÌÐò¼¸ºõ¶¼ÊÇÓÃPerlÓïÑÔÀ´µ±Ö÷½Ç!¶ÁÕß¿´µ½ÕâÀïÒ»¶¨»á¾õµÃ¹¦ÄÜÕâÑùÇ¿´óµÄÓïÑÔPerlÒ»¶¨ºÜÄÑѧ!ÕâÄú¾Í´ó´íÌØ´íÀ²,PerlÊǺÜÈÝÒ×ÉÏÊÖµÄ,ËüµÄÓï·¨ºÍCÓïÑԺܽӽü,¶ÔÓÚÔ­±¾ÊìϤCÓïÑÔµÄÈËÀ´Ëµ,PerlÊǺÜÈÝÒ×ÉÏÊÖµÄ,Ö»ÒªÓÐÒ»µãCÓïÑԵĻù´¡,ÔÙ¼ÓÉϼ¸¸öСʱµÄѧϰʱ¼ä¾Í¿ÉÒÔºÜÇáÒ×µØÓÃPerlÓïÑÔдһ¸ö¼òµ¥µÄCGIÓ¦ÓóÌÐò,ÖÁÓÚÄÇЩûÓÐCÓïÑÔ»ù´¡µÄÈË,Ö»Òª¶à»¨Ò»µãʱ¼äÀ´Ñ§Ï°,Ò²ÊÇ¿ÉÒÔºÜ¿ìµØÊ¹ÓÃPerlÓïÑÔÀ´Ð´CGIÓ¦ÓóÌÐò!ÄÇʱºò,Äú¾Í»á·¢¾õÔ­À´PerlÊÇÄÇôµÄƽÒ×½üÈË,¶øÐ´³öÀ´µÄCGIÓ¦ÓóÌÐòÒ²ÊÇÄÇôµØ¼ò½àÓÐÁ¦,±ÊÕßÏàÐÅPerlÓïÑÔÔÚCGI³ÌÐòÉè¼ÆµÄÎę̀ÉÏÒ»¶¨ÊǰçÑÝ×Å×î¼ÑÄС´Å®)Ö÷½ÇµÄ½ÇÉ«¡£
¡¡¡¡ÔÚ±¾ÕÂÖÐÏȽéÉÜPerlÓïÑÔµÄÓï·¨,¶øÔÚÏÂÒ»ÕÂÖлá½éÉÜÈçºÎÔÚUnix²Ù×÷ϵͳÏÂʹÓÃPerlÀ´Ð´CGIÓ¦ÓóÌÐò,×îºó»áÔÚµÚ8ÕÂÖнéÉÜÈçºÎÔÚWindows95¡¢WindowsNTÕâЩ32λ²Ù×÷ϵͳÖÐʹÓÃPeriÀ´Ð´CGIÓ¦ÓóÌÐò¡£ÇóÖªÐÄÇеÄÄú,ÊDz»ÊÇÆÈ²»¼±´ýµØÏëÖªµÀPerlµÄ¹¦ÄÜÊǶàôµÄÇ¿´óÄØ?


6.2 ÈçºÎʹÓÃPerlÀ´Ð´³ÌÐò

¡¡¡¡Èç¹ûÔÚϵͳÖÐÒѰ²×°ÁËPerlµÄ»°,ÎÒÃÇ¿ÉÒÔÓá°which perl¡±,»òÊÇ¡°which perl5"Õâ¸öÖ¸ÁîÀ´µÃÖªPerlÊÇλÓÚϵͳµÄÄÄÒ»¸öĿ¼Ï¡£
¡¡¡¡%which perl
¡¡¡¡/usr/bin/perl
»òÊÇ
¡¡¡¡%which perl5
¡¡¡¡/usr/locaiAin/per15
¡¡¡¡Ö®ºó¾Í¿ÉÒÔÀûÓÃPerlÀ´Ð´³ÌÐòÂëÁË¡£Èç¹ûÏëÖªµÀPerl°æ±¾µÄ»°,¿ÉÒÔÓá°perl-v¡±»ò¡°perl5-v¡±,Õâ¸öÖ¸ÁîÀ´µÃÖªPerlµÄ°æ±¾¡£Ä¿Ç°PerlµÄ×îа汾ÊÇ5.x°æ,¶øÒÔÏÂËù½éÉܵÄÓï·¨Ö¸Áî¶¼¿ÉÒÔÔÚPerl4ºÍPerl5°æ±¾ÖÐÖ´ÐС£Èç¹û²»ÐÒÔÚ¹¤×÷Õ¾ÉÏÕÒ²»µ½Õâ¸öÈí¼þµÄ»°,¿ÉÒÔÏòϵͳ¹ÜÀíÔ±ÒªÇó°²×°Õâ¸ö·Ç³£ÊµÓõÄÈí¼þ¡£
¡¡¡¡½ÓÏÂÀ´¿ÉÒÔÔÚ¹¤×÷վʹÓÃϵͳµÄÎÄÊé±à¼­Æ÷(ÀýÈç:vi¡¢Joe¡¢picoµÈµÈ)À´±à¼­³ÌÐòÂë,ÔÚ³ÌÐòÂëµÄµÚÒ»ÐÐÒ»¶¨Òª¼ÓÉÏ#!/path/per1³ÌÐòÆðÍ·Ðû¸æ¡£ÀýÈç,Óá°which perl"Õâ¸öÖ¸ÁîÀ´µÃÖª/usr/bin/perlÕâ¸ö·¾¶ÎļþÃû,ËùÒÔÔÚд³ÌÐòÂëµÄʱºò,Ò»¶¨ÒªÔÚ³ÌÐòÂëµÄµÚÒ»ÐÐдÉÏ#/usr/bin/perlÕâÒ»ÐгÌÐòÆðÍ·Ðû¸æ,ÕâÑùϵͳ²ÅÖªµÀÒªµ½ÄÄÒ»¸ö·¾¶ÏÂÓÃÄÄÒ»¸öÖ´ÐÐÎļþÀ´Ö´ÐÐÕâ¸öдºÃµÄ³ÌÐòÂë,½ÓÏÂÀ´¾Í¿ÉÒÔÔÚÕâ¸öÎļþÖÐд³ÌÐòÂëÁË¡£ÕâÊÇPerlÓïÑÔ(½âÊÍʽ)ºÍCÓïÑÔ(±àÒëʽ)ÔÚ³ÌÐòд×÷ÖÐ×î´óµÄ²»Í¬µã¡£ÔÚCÓïÑÔÖÐÊǰÑԭʼ³ÌÐòÂë±àÒë¶ø³ÉÒ»¸öÖ´ÐÐÎļþ¾Í¿ÉÒÔÔÚϵͳÖÐÖ´ÐÐ,¶øPerlÓïÑÔ¾ÍÒªÔÚԭʼ³ÌÐòÂëµÄµÚÒ»ÐÐʹÓÃ#!ÔÙ¼ÓÉÏPerlµÄ¾ø¶Ô·¾¶ºÍÎļþÃû³Æ,ÒÔ±ã¸æËßϵͳҪʹÓÃPerlÕâ¸ö½âÊÍÆ÷À´½âÊÍÕâЩԭʼ³ÌÐòÂë¡£
¡¡¡¡ÔÚдÍê³ÌÐòÂëÖ®ºó,Ò»¶¨Òª°ÑÎļþÊôÐԸijɿÉÖ´ÐÐ,ÀýÈç¿ÉÒÔ°ÑÎļþÊôÐÔ¸ü¸Ä³Éÿ¸öÈ˶¼¿ÉÒÔÖ´ÐÐ(chmod 711 filename)¡£²»¹ý,Ò»°ãÎÒÃÇÔÚдCGIÓ¦ÓóÌÐòµÄʱºò,ΪÁ˱ÜÃâÆäËû´íÎóµÄ·¢Éú,×îºÃ°ÑCGIÓ¦ÓóÌÐòµÄÎļþÊôÐÔ¸ü¸Ä³Éÿ¸öÈ˶¼¿ÉÒÔÓжÁÈ¡¡¢Ö´ÐеÄȨÀû(chmod 755 filename)¡£
¡¡¡¡¶ø#Õâ¸ö·ûºÅÔÚPerlÓïÑÔ³ÌÐòÂëÖÐÊÇ´ú±í×¢½âµÄÒâ˼,Perl²»»áÈ¥´¦ÀíÕâÒ»ÐеÄÐðÊö,ËùÒÔÔÚÒÔϵķ¶ÀýÖÐ,Èç¹û³öÏÖÕâ¸ö·ûºÅµÄ»°,ÊÇ´ú±í±ÊÕß¶ÔÓÚ³ÌÐòÂëµÄ˵Ã÷,ÔÚ´ËÏÈÏò¶ÁÕß˵Ã÷һϡ£


6.3 PerlÓï·¨½éÉÜ

¡¡¡¡ÎªÁËÈôó¼Ò¶ÔPerlÓïÑÔÓиüÉî¿ÌµØÁ˽â,ÔÚ½éÉÜCGIÓ¦ÓóÌÐò֮ǰ,ÏÈÀ´½éÉÜPerlµÄ»ù±¾Óï·¨,±ÊÕßÏÈÔÚ±¾ÕÂÖмòµ¥¶óÒªµØÌæ´ó¼Ò½éÉÜPer1ÓïÑÔÔÚCGI³ÌÐòÉè¼ÆÖÐ×î³£ÓõÄÓï·¨º¯Êý,Ï£Íû´ó¼ÒÔÚ¿´ÍêÕâÒ»Õ½ÚÖ®ºó,Äܹ»Á˽âPerlÓïÑÔÊÇÕâôÈÝÒ×ÉÏÊÖ¡£Ö»Òª°ÑÕâЩ»ù±¾Óï·¨ÊìϤ֮ºó,¾Í¿ÉÒÔµÃÐÄÓ¦ÊÖµØÓÃPerlÀ´Ð´CGIÓ¦ÓóÌÐò¡£

6.3.1 PerlÓïÑԵıäÁ¿

¡¡¡¡PerlµÄ±äÁ¿»ù±¾ÉÏÓÐÈýÖÖ¼´´¿Á¿±äÁ¿(ScaiarVariable)¡¢Êý×é(Array)¡¢¹ØÁªÊý×é(Associative array),¶øÒÔÏÂÊÇÕâЩ±äÁ¿µÄʹÓ÷½·¨:

¡¡¡¡Ò»¡¢´¿Á¿±äÁ¿(Scalar Variables)µÄÓ÷¨
¡¡¡¡ÔÚPerlÓïÑÔÖбäÁ¿µÄʹÓò»ÏñÔÚCÓïÑÔÖл¹ÒªÊÂÏÈÐû¸æ,ÔÚʹÓô¿Á¿±äÁ¿µÄʱºòÒªÏȼÓÉÏ$Õâ¸ö·ûºÅ,ҪעÒâµÄÊÇÈç¹ûÖ¸¶¨µÄ´¿Á¿±äÁ¿ÊÇÒ»¸ö×Ö·û´®µÄ»°,¾ÍÒª¼ÓÉÏ""Õâ¸öË«ÒýºÅ·ûºÅÁË¡£Èç¹ûÊÇÒ»¸öÊýÖµµÄ»°,¾Í²»ÓüÓÉÏ""Õâ¸ö·ûºÅÁË¡£ÒÔÏÂÊÇһЩ·¶Àý£º

$Strl=www"£» #½«wwwÕâ¸ö×Ö·û´®Ö¸¶¨¸ø$StrlÕâ¸ö´¿Á¿±äÁ¿;
$str2="cgi"; #½«cgiÕâ¸ö×Ö·û´®Ö¸¶¨¸ø$str2Õâ¸ö´¿Á¿±äÁ¿;
$str3=$strl.$str2; #.¾ÍÊǰÑÁ½¸ö×Ö·û´®Á¬ÆðÀ´,ËùÒÔ $str3="wwwc20";
$int=5; #½«5Õâ¸öÊý×ÖÖ¸¶¨¸ø$intÕâ¸ö´¿Á¿±äÁ¿;
$int=3+2; #´Ëʱ$int=5;
$int=3*2; #´Ëʱ$int=6;
$int=l0;$int++; #´Ëʱ$int=10+l=11;
$int=l0,$int+=5; #´Ëʱ$int=10+5=15;

¡¡¡¡¶þ¡¢Êý×é(Arrays)µÄÓ÷¨
¡¡¡¡ÔÚʹÓÃÊý×éµÄʱºòÒªÏȼÓÉÏ@Õâ¸ö·ûºÅ,ÒÔÏÂÊÇһЩ·¶Àý:
@namel=("tom","mary"); #½«"tom","mary"ÕâÁ½¸ö×Ö·û´®Ö¸¶¨¸øÊý×é @name1
@name2=@name1; #´ËʱµÄ@name2=("tom","mary")
@pame3=("john",@name1); #´ËʱµÄ (name3=("john","tom","mary")
($one,@name4)=@name3; #´ËʱµÄ$one="john",¶ø @name4=("tom"'"mary")
@namel=0; #´Ëʱ@name1Ϊһ¸ö¿ÕÊý×é
@int=(1,3,5,7,9);
$x=@int; #½«Ò»¸öÊý×éÖ¸¶¨¸øÒ»´¿Á¿±äÁ¿,¾Í»á·µ»ØÊý×éÔª
#ËØµÄ¸öÊý,ËùÒÔ´ËʱµÄ$x=5
$x=$#int; #$#Õâ¸ö±äÁ¿»á·µ»ØÊý×é×îºóÒ»¸öÔªËØµÄindex
#ËùÒÔ´Ëʱ$x=4
($x)=@int; #$xµÈÓÚÊý×é@intµÄµÚÒ»¸öÔªËØµÄÖµ,
#ËùÒÔ´Ëʱ$x=1
$b=$int[0]; #$bµÈÓÚÊý×é@intµÄµÚÒ»¸öÔªËØ,ËùÒÔ$b=1
$C=@int[0]; #$cÒ²ÊÇ»áµÈÓÚÊý×é@intµÄµÚÒ»¸öÔªËØ,ËùÒÔ
#$c=1,Òò´ËÒªºô½ÐÊý×éÖеÄÖµÓÐÒÔÉÏÁ½ÖÖ·½·¨
$int[0]=2; #½«2Õâ¸öÊýÖµÖ¸¶¨¸øÊý×é@intµÄµÚÒ»¸öÔªËØ
#´Ëʱ@int=(2,3,5,7,9);
$int[0,1]=[1,3]; #½«1Ö¸¶¨¸øÊý×é@intµÄµÚÒ»¸öÔªËØ,ÇÒ½«3Ö¸
#¶¨¸øÊý×é@intµÄµÚ¶þ¸öÔªËØµÄ,ËùÒÔ
#´Ëʱ@int=(1,3,5,7,9);
@int[0,1]=@int[1,0]; #½«Êý×é@intµÄǰÁ½¸öÔªËØ½»»»
#´Ëʱ@int=(3,1,5,7,9)
($int[0],$int[1]) #Ò²Êǽ«Êý×é@intµÄǰÁ½¸öÔªËØ½»»»
=($int[l],$int[0]); #´Ëʱ@int=(1,3,5,7,9);
@data=@int[0,l]; #´Ëʱ@date=(1,3);
$int[5]=11; #½«11Õâ¸öÊýÖµÖ¸¶¨¸øÊý×é@intÖеÚÁù¸öÔªËØ
#´Ëʱ@int=(1,3,5,7,9,11)

¡¡¡¡Èý¡¢¹ØÁªÊý×é(Associative arrays)µÄÓ÷¨
¡¡¡¡¹ØÁªÊý×éÒ²ÊÇÊý×éµÄÒ»ÖÖ,ÊÇÓɲ»Í¬µÄ´¿Á¿±äÁ¿Ëù×é³É¡£²»¹ýºÍÊý×鲻ͬµÄµØ·½ÊÇÔÚ¹ØÁªÊý×éÖеÄÔªËØÊÇÓɳɶԵÄkey-valueËù×é³ÉµÄ,Ò²¾ÍÊÇÿһ¸ökey¶¼ÓÐÒ»¸öÏà¶ÔÓ¦µÄÖµ(value),ÕâÊÇÔÚPerlÓïÑÔÖÐÌØÓеÄÓï·¨,ËùÒÔ³õѧÕß¶ÔÓÚ¹ØÁªÊý×é¿ÉÄÜ»á±È½ÏİÉúÒ»µã,±ÊÕß»áÔÚÕâÀï×÷±È½ÏÏêϸµÄ˵Ã÷¡£Èç¹ûÄܹ»½«¹ØÁªÊý×éµÄÓï·¨Ó¦ÓÃÔÚCGI³ÌÐòÉè¼ÆÖÐ,¾Í»á·¢ÏÖ¹ØÁªÊý×éÊÇÒ»¸öºÜºÃÓõÄÓï·¨¡£
¡¡¡¡ÔÚʹÓùØÁªÊý×éµÄʱºòÒªÏȼÓÉÏ%Õâ¸ö·ûºÅ,¶ø¹ØÁªÊý×éµÄ¸ñʽÈçÏÂ:
¡¡¡¡%ARRAY=(keyl,value1,key2,value2,key3,value3...);
¡¡¡¡Ã¿Ò»¸ökey¶¼ÓÐÒ»¸öÏà¶ÔÓ¦µÄÖµ(value)¡£
¡¡¡¡l.ÔÚ¹ØÁªÊý×éÖÐÔö¼Ó¡¢¸ü¸ÄÒ»¶ÔÊý¾Ý:
¡¡¡¡$ARRAY{key}=value;
¡¡¡¡ÔÚ¹ØÁªÊý×éARRAYÖмÓÉÏÒ»¶Ôkey-value,ÒªÏÈÔÚ¹ØÁªÊý×éÃû³ÆÇ°¼ÓÉÏ$Õâ¸ö·ûºÅ,¶øÇÒkeyµÄÃû³ÆÒªÔÚ{}·ûºÅÖ®¼ä,×îºóÔÙÖ¸¶¨keyËù¶ÔÓ¦µÄvalueÖµ¡£Èç¹ûÔÚÕâ¸ö¹ØÁªÊý×éÖÐÒѾ­ÓÐÕâ¸ökeyÁË,¾Í»á¸ü¸ÄÕâ¸ökeyËù¶ÔÓ¦µÄvalue¡£
¡¡¡¡2.È¡³ö¹ØÁªÊý×éÖÐkeyËù¶ÔÓ¦µÄvalue:
¡¡¡¡$get=$ARRAY{key};
¡¡¡¡È¡³öÔÚ¹ØÁªÊý×éARRAYÖÐkeyËùÏà¶ÔÓ¦µÄvalue,ÒªÏÈÔÚ¹ØÁªÊý×éÃû³ÆÇ°¼ÓÉÏ$Õâ¸ö ·ûºÅ,¶øÇÒkeyµÄÃû³ÆÒªÔÚ{}·ûºÅÖ®¼ä,¾Í»á½«keyËù¶ÔÓ¦µÄvalueÈ¡³öÀ´²¢Ö¸¶¨¸ø$getÕâ¸ö±äÁ¿¡£
¡¡¡¡3.ɾ³ýÒ»¶ÔÔÚ¹ØÁªÊý×éÖеÄÊý¾Ý:
¡¡¡¡delete $ARRAY{key};
¡¡¡¡ deleteÊÇPerlËùÌṩµÄº¯Êý,×÷ÓÃÊÇɾ³ý¹ØÁªÊý×éÖеÄÒ»¸ökeyÒÔ¼°Õâ¸ökeyËù¶ÔÓ¦µÄvalue¡£Ê¹Ó÷½·¨ÊÇÔÚdeleteº¯ÊýÖ®ºó,ÔÙÖ¸¶¨¹ØÁªÊý×éÖÐҪɾ³ýkeyµÄÃû³Æ¡£ÒÔÏÂÊÇÓйعØÁªÊý×éÓ÷¨µÄһЩ·¶Àý:
%NAMES=¡´I'"one",2'"two");
$one=$NAMES{1}; #´Ëʱ$oneµÈÓÚ"one"
$two=$NAMES{2}; #´Ëʱ$twoµÈÓÚ"two"
$NAMES{3}="third"; #Ôö¼ÓÒ»¶Ôkey-valueµ½¹ØÁªÊý×éNAMESÖÐ
#´Ëʱ%NAMES=(1'"one",2'"two",3'"third");
$NAMES{3}="three"; #ÒòΪÔÚ¹ØÁªÊý×éÖÐÒѾ­ÓÐ3Õâ¸ökeyÁË,ËùÒÔ¾Í
#»á°ÑkeyΪ3Ëù¶ÔÓ¦µÄvalue¸ü¸Ä³É"three"
#´Ëʱ%NAMES=(1'"oneÑö,2'"two",3'"three");
delete$NAMES{3}; #½«¹ØÁªÊý×éÖÐkeyֵΪ3µÄÒ»¶Ôkey-valueɾ³ýµô,
#´Ëʱ%NAMES=(1'"one",2'"two"),
@X=%NAMES; #½«¹ØÁªÊý×éNAMESÖ¸ÅɸøÊý×éX
#´Ëʱ@X=(1'"one",2'"two");
%Y=@x; #½«Êý×éXÖ¸Åɸø¹ØÁªÊý×éY
#´Ëʱ%Y=(1'"one","two");
%NAMES=(); #´Ëʱ%NAMESΪһ¸ö¿ÕµÄ¹ØÁªÊý×é

6.3.2 PerlÔÚCGI³ÌÐòÉè¼ÆÖг£Óõĺ¯Êý

Ö¸Áî:#
˵Ã÷:×¢½â·ûºÅRemarkÐû¸æ
·¶Àý:#±¾³ÌÐòÊÇÒ»¸öʾ·¶×¢½â˵Ã÷

Ö¸Áî:print
Óï·¨Ò»:print Filehandle LIST
˵Ã÷:Õâ¸öFilehandle¿É°ÑËü¿´×÷ÔÚI(Input)/O(Output)¼äµÄÒ»¸öÇÅÁº,¿ÉÒÔÀûÓÃFilehandleÀ´×ö³öÊý¾Ý¶ÁÈëд³öµÄ¶¯×÷¡£stdinÊÇ´ú±í´ÓÄıßÊäÈëÊý¾Ý,ÀýÈç´ÓµçÄԵļüÅÌÊäÈë,stdoutÊÇ´ú±í´ÓÄıßÊä³öÊý¾Ý;ÀýÈç´ÓµçÄÔµÄÆÁÄ»Êä³ö;stderrÊÇ´ú±í´ÓÄıßÊä³ö´íÎóµÄÊý¾Ý,ÀýÈç´ÓµçÄÔµÄÆÁÄ»Êä³ö¡£¶øÔÚPerlÓïÑÔÖÐÓÐÈý¸ö±ê×¼µÄFilehandle:
¡¡¡¡(Ò»)STDIN(±ê×¼ÊäÈë):ÊÇ´ú±ístdinµÄFilehandle
¡¡¡¡(¶þ)STDOUT(±ê×¼Êä³ö):ÊÇ´ú±ístdoutµÄFilehandle
¡¡¡¡(Èý)STDERR(±ê×¼´íÎóÊä³ö):ÊÇ´ú±ístderrµÄFilehandle
¡¡¡¡Èç¹ûҪʹÓÃÆäËûFilehandleµÄʱºò,¾ÍÒªÓÃopenÕâ¸öº¯ÊýÀ´´ò¿ªÒ»¸öFilehandle,ÎÒÃÇ¿ÉÒÔÓÃprintÕâ¸öº¯Êý°ÑLISTµÄÊý¾ÝÊä³ö¸øFilehandle¡£ÔÚΪ´ó¼Ò½éÉÜprintÕâ¸ö º¯Êý֮ǰ,ÏÈÈÃÎÒÃÇÀ´¿´¿´printº¯ÊýÖÐÌØÊâ´òÓ¡·ûºÅ×Ö·û:

·ûºÅ ÄÚ¶¨º¬Òâ
\n »»ÐÐNew Line
\r ¹â±ê»»ÐÐReturn
\t Tab¼ü
\f »»Ò³Form feed
\b ÍË»ØÒ»¼üBackspace
\v ´¹Ö±Tab¼ü
\a ÏìÁåBell
\007 Ê®½øÖÆASCIIÂë
\xff Ê®Áù½øÖÆÂë
\c[ ¿ØÖÆ×Ö·û
·¶Àý:
¡¡¡¡print STDOUT"i love perl\n";
¡¡¡¡½«¡°i love perl"ÔÙ¼ÓÉÏ»»ÐÐÏÔʾÓÚÆÁÄ»ÉÏ¡£
Óï·¨¶þ:Print LIST
˵Ã÷:Èç¹ûÊ¡ÂÔFilehandleµÄ»°,¾Í»á°ÑFilehandleÄÚ¶¨ÎªSTDOUT¡£Ò²¾ÍÊǻὫLISTµÄÊý¾ÝÄÚÈÝÏÔʾÓÚÆÁÄ»ÉÏ¡£
·¶Àý:
¡¡¡¡$Str1ng="perl";
¡¡¡¡print"i love $string\n";
¡¡¡¡»á½«¡°i love perl¡±ÔÙ¼ÓÉÏ»»ÐÐÏÔʾÔÚÆÁÄ»ÉÏ,¶øÈç¹ûÒªÈÃË«ÒýºÅÄڵıäÁ¿Ê§Ð§µÄ»°,¿ÉÒÔÔÚ±äÁ¿Ç°Ãæ¼ÓÉÏ\Õâ¸ö·ûºÅ¡£ÀýÈçÈç¹ûÊÇprint¡°i love \$string¡±;µÄ»°,¾Í»áÏÔʾ³ö¡°i love $string¡±Õâ¸ö×Ö·û´®¡£
Óï·¨Èý£ºprint
˵Ã÷:ͬʱʡÂÔFilehandleºÍLISTµÄ»°,¾Í»áÒÔSTDOUTΪFilehandle,²¢»áÊä³ö$_Õâ ¸öÄÚ¶¨Êä³ö±äÁ¿µÄÊý¾ÝÄÚÈÝ¡£Èç¹û$_±äÁ¿ÊÇÒ»¸ö¿Õ×Ö·û´®µÄ»°,¾Í»áÏÔʾ³öÒ»¸ö¿Õ×Ö·û´®¡£
·¶Àý:
¡¡¡¡$_="i love perl\n";
¡¡¡¡print;
¡¡¡¡¾Í»á½«"i love perl"ÔÙ¼ÓÉÏ»»ÐÐÏÔʾÔÚÆÁÄ»ÉÏ
Ö¸Áî:printf
Óï·¨Ò»:printf Filehandle LIST

˵Ã÷:ÔÚperlÓïÑÔÖÐÒ²ÌṩCÓïÑÔÖÐprintfµÄÓï·¨,Ó÷¨ºÍCÓïÑÔÖеÄÓ÷¨Ò»Ä£Ò»Ñù¡£Èç¹û°ÑFilehandleÊ¡ÂԵϰ,Ò²Ò»Ñù»á°ÑSTD0UTµ±³ÉÊÇÄÚ¶¨µÄFilehandle¡£ÔÚΪ´ó¼Ò½éÉÜprintfº¯Êý֮ǰ,ÏÈÈÃÎÒÃÇÀ´¿´¿´printfº¯ÊýÖб任·ûºÅµÄ×Ö·û£º
·ûºÅ ÄÚ¶¨º¬Òâ
%c ×Ö·û
%s ×Ö·û´®
%d ÕûÊý
%f ¸¡ÕûÊý
%h Ê®Áù½øÖÆÂë
%o °Ë½øÖÆÂë
·¶Àý:
¡¡¡¡printf¡´"chmod%d%s£Ün","7l1","cgi");
¡¡¡¡»á½«¡°chmod 7ll cgi¡±ÔÙ¼ÓÉÏ»»ÐÐÏÔʾÓÚÆÁÄ»ÉÏ¡£
Ö¸Áî:chop
Óï·¨£ºchop($string)
˵Ã÷£º°Ñ×îºóÒ»¸ö×Ö·ûɾ³ýµô,³£³£ÓÃÕâ¸öº¯Êý°Ñ»»ÐеÄ×Ö·û(\n)ɾ³ýµô¡£
·¶Àý£º
¡¡¡¡$string="hello!\n";
¡¡¡¡chop($string); #´Ëʱ$string="hello!";
¡¡¡¡¶øÕâÁ½ÐÐÒ²¿ÉÒÔд³Échop($string="hello!£Ün");
Ö¸Áî:split
Óï·¨:split(/pattern/,$string,limit)
¡¡¡¡ÆäÖÐ/patternÊÇÎÄ×Ö´¦ÀíµÄģʽ,ÔÚÏÂһС½ÚÖлáÓÐÏêϸµÄÓï·¨½éÉÜ¡£¶ølimitÊÇ´ú±íÒª·Ö¸îµÄ¸öÊý,¿ÉÒÔÊ¡ÂÔ¡£
˵Ã÷:ÓÃÒ»¸öÖ¸¶¨µÄÎÄ×Ö´¦ÀíģʽÀ´·Ö¸î$string×Ö·û´®¡£
·¶Àý:
$string="i;am;cute";
@list=split(/:/,$string); #´Ëʱ@list=¡´"i","am","cute");
($a,$b,$c)=split(/:/,$string); #´Ëʱ$a="i",$b="am",$c="cute";
@list=split(/:/,$string,2); #´Ëʱ@list=("i","love");
¡¡¡¡ÔÚ´«ËÍCGIÓ¦ÓóÌÐòÊý¾ÝµÄʱºò»áÏȽ«Êý¾Ý±àÂë,ÆäÖлὫFORMÖÐÿ¸öÊý¾Ý×ֶεÄÊý¾ÝÄÚÈÝÓÃ&Õâ¸ö·ûºÅ¸ô¿ª,ËùÒÔÔÚ½âÂëµÄʱºò¾ÍÒªÒÔ&Õâ¸ö·ûºÅΪ·Ö¸îµÄ×Ö·û,½«Ã¿¸öÊý¾Ý×ֶηָî³ö¡£ÀýÈç:
$string="who=A&email=B";
@list=split(/&/,$string), #´Ëʱ@list=¡´"who=A","email=B");
¡¡¡¡¶øÊý¾Ý×ֶεÄÃû³ÆºÍÕâ¸öÊý¾Ý×ֶεÄÖµÊÇÓÃ=Õâ¸ö·ûºÅÀ´¸ô¿ª,Èç¹ûÏëÈ¡µÃÊý¾Ý×ֶεÄÃû³ÆºÍËù¶ÔÓ¦µÄÖµµÄ»°,¾ÍÓÃÒª=Õâ¸ö·ûºÅÀ´·Ö¸îÊý¾Ý×Ö¶Î,ÀýÈç:
$list="who=A";
(0$name,$value)=sp1it(/=/,$list); #´Ëʱ$name="who";$value="A";

Ö¸Áî:keys
Óï·¨:keys(%ARRAY)
˵Ã÷:È¡³ö¹ØÁªÊý×é%ARRAYÖÐÈ«²¿µÄkey¡£
·¶Àý:
%NAMES=(1,"one",2,"two");
@list=keys(%NAMES), #´Ëʱ@list=(l,2);

Ö¸Áî:values
Óï·¨:values(%ARRAY)
˵Ã÷:È¡³ö¹ØÁªÊý×é%ARRAYÖÐÈ«²¿µÄvalue¡£
·¶Àý:
%NAMES=(1,"one",2,"two");
@list=values(%NAMES); #´Ëʱ@list=("one","two");

Ö¸Áî:reverse
Óï·¨:reverse(@array)
˵Ã÷:½«Êý×é@arrayÖеÄÔªËØÓɺóµ½Ç°ÖØÐÂÅÅÁС£
·¶Àý:
@list=("A","B","C","D");
@1ist=reverse(@list); #´Ëʱ@list=("D","C","B","A")

Ö¸Áî:sort
Óï·¨:sort(@array)
˵Ã÷:½«Êý×é@arrayÖеÄÔªËØÓÉСµ½´óÅÅÐò,Èç¹ûÒªÓÉ´óµ½Ð¡ÅÅÐòµÄ»°,¾ÍÒªÔÙ¼ÓÉÏreverseÕâ¸öº¯Êý¡£
·¶Àý:
@array=("b","c","a");
@array=sort(@array); #´Ëʱ@array=("a",b","c");
@array=(reverse sort@array); #´Ëʱ@array=("c","b","a");
Õâ¸öÓï·¨Ò²¿ÉÒÔд³É@array=(reverse sort(@array));
@number=(l0,3.20);
@number=sort(@number); #´Ëʱ@number=(l0,20,3);
ÓÉÉϸö·¶Àý¿ÉÒÔÖªµÀÈç¹ûÒªsortº¯ÊýÀ´ÅÅ ÐòÊýÖµµÄʱºò,¾Í»á³ö²î´í,Òò´ËÒªÓÃÏÂÃæÕâ¸ö·½·¨²ÅÄÜÕýÈ·µØÊ¹ÓÃsortº¯ÊýÀ´ÅÅÐò¡£
@number=(sort{$a<=>$b}@number); #´Ëʱ@number=(3,10,20);

Ö¸Áî:length
Óï·¨:length($string)
˵Ã÷:Çó³öÒ»×Ö·û´®$stringµÄbytesÖµ¡£
·¶Àý:
$string="Perl";
@size=length($string); #´Ëʱ$size=4;

Ö¸Áî:substr
Óï·¨:substr($string,offset,length)
¡¡¡¡ÆäÖÐoffset´ú±íÆðʼ×Ö·ûµÄλÖÃ,length´ú±íÒýÓõÄ×Ö·û´®³¤¶È,ÈçÊ¡ÂÔlengthµÄ»°´ú±í´ÓÆðʼֵµ½×Ö·û´®µÄ×îºóÒ»¸ö×Ö·û³¤¶È¡£¶øoffsetÈç¹ûÊǸºÖµµÄ»°,¾Í»á´Ó×Ö·û´®Óұ߿ªÊ¼È¡³öÖ¸¶¨µÄ×Ö·û´®¡£
˵Ã÷:ÔÚÒ»×Ö·û´®$stringÖÐÈ¡³öÏëÒªµÄ×Ö·û´®¡£
·¶Àý:
$x=substr("testing",2,2); #´Ëʱ$x="st";
$x=substr("testing",2); #´Ëʱ$x="sting";
$x=substr("testing",-2,2); #´Ëʱ$x="in";

Ö¸Áî:index
Óï·¨:index($string,$substring,position)
¡¡¡¡ÆäÖÐ$substringÊÇָҪѰÕÒµÄ×Ö·û,position´ú±íÒª´ÓÄÄÒ»¸öλÖÿªÊ¼ÕÒÆð,ÈçÊ¡ÂÔpositionµÄ»°¾Í´ÓÍ·¿ªÊ¼ÕÒÆð¡£
˵Ã÷:·µ»ØËùÒªÕÒѰµÄ×Ö·ûÔÚÒ»×Ö·û´®$stringÖеÄλÖÃ,Èç¹ûÔÚ×Ö·û´®ÖÐÕÒ²»µ½×Ö·ûµÄ»°,Ôò»á·µ»Ø-lÕâ¸öÖµ¡£
·¶Àý:
$x=index("testing","t"); #´Ëʱ$x=0;
$x=index("testing","t",2); #´Ëʱ$x=3;
$x=index("testing","perl"); #´Ëʱ$x=-l;

Ö¸Áî:push
Óï·¨:push(@array,$string)
˵Ã÷:ÔÚÊý×é@arrayµÄ×îºóÒ»¸öÔªËØºó¸½¼ÓеÄÔªËØstringµ½Êý×é@arrayÖС£
·¶Àý:
@array=("one"£¬"two")£»
push£¨@array,"three"); #´Ëʱ@array=¡´"one","two","three");

Ö¸Áî:pop
Óï·¨:pop(@array)
˵Ã÷:½«Êý×é@arrayµÄ×îºóÒ»¸öÔªËØÉ¾³ý,²¢½«É¾³ýµÄÔªËØ·µ»Ø¡£
·¶Àý:
@array=¡´"one"'"two");
$rm=pop¡´@array); #´Ëʱ@array=("one");¶ø$rm="two";

Ö¸Áî:unshift
Óï·¨:unshift(@array,$string)
˵Ã÷:ÔÚÊý×é@arrayµÄµÚÒ»¸öÔªËØÇ°¸½¼ÓеÄÔªËØ$stringµ½Êý×é@arrayÖС£
·¶Àý:
@array=("one","two");
unshift(@array'"three"); #´Ëʱ@array=("three","one","two");

Ö¸Áî:shift
Óï·¨:shift(@array)
˵Ã÷:½«Êý×é@arrayµÄµÚÒ»¸öÔªËØÉ¾³ý,²¢½«É¾³ýµÄÔªËØ·µ»Ø¡£
·¶Àý:
@array=("one","two");
$rm=shift(@array); #´Ëʱ@array=("two"),¶ø$rm="one";

Ö¸Áî:join
Óï·¨:join($string,@array)
˵Ã÷:ÔÚÒ»Êý×é@arrayµÄÔªËØÖ®¼ä¼ÓÉÏÒ»Ö¸¶¨µÄ×Ö·û$string,²¢½«½á¹û·µ»Ø¡£
·¶Àý:
@array=("one","two","three");
$total=join(":",@array); #´Ëʱ$total="one:two:three";

Ö¸Áî:grep
Óï·¨:grep(/pattern/,@array)
˵Ã÷:½«·ûºÏÎÄ×Ö´¦Àíģʽ(regular expression)µÄÊý×éÔªËØÕÒ³öÀ´¡£
·¶Àý:
@array=("one","on","in");
$count=grep(/on/,@array); #´Ëʱ$count=2;(´ú±íÓжþ¸öÔªËØ·ûºÏ)
@result=grep(/on/,@array); #´Ëʱ@result=("one","on");

Ö¸Áî:hex
Óï·¨:hex($string)
˵Ã÷:½«Ê®Áù½øÖƵÄÊýֵת³ÉÊ®½øÖÆ¡£
·¶Àý:
$decimal=hex("ff"); #´Ëʱ$decimal=255;

Ö¸Áî:rand
Óï·¨:rand($interger)
˵Ã÷:³£ºÍº¯Êýsrand´îÅäÀ´È¡µÃÒ»Ëæ»úÊý,Èç¹ûûÓÐÊÂÏÈÐû¸æstandº¯ÊýµÄ»°,ÔòÈ¡³öµÄÊýÖµÊÇÒ»¸ö¹Ì¶¨Öµ¡£Õâ¸öÓï·¨»á·µ»ØÒ»¸ö½éÓÚ0ºÍ$intergerÖ®¼äµÄÊýÖµ,Èç¹û$intergerÊ¡ÂԵϰ,Ôò»á·µ»ØÒ»¸ö½éÓÚ0ºÍ1µÄÊýÖµ¡£
·¶Àý:
srand; #ÒªÏÈÐû¸æsrandº¯Êý,²ÅÄܲúÉúËæ»úÊýµÄЧ¹û
$int=rand(10); #$intµÄÖµ»á´óÓÚ0¶øÇÒСÓÚ10
Èç¹ûÏ£Íû²úÉúµÄÂÒÊýÊÇÕûÊýµÄ»°,¾ÍÒªÔÙ ¼ÓÉÏintÕâ¸öº¯Êý
$int=int(rand(10)); #$intµÄÖµÊÇÒ»¸öÕûÊý,ÇÒÖµÔÚ0ºÍ9Ö®¼ä

Ö¸Áî:localtime
Óï·¨:localtime(time)
˵Ã÷:¿É·µ»Ø¾Å¸öÓйØÊ±¼äµÄÔªËØ,ÔÚдCGIÓ¦ÓóÌÐòµÄʱºò³£»áÓõ½ÏµÍ³µÄʱ¼ä,ËùÒÔÔÚ´Ë»áÏêϸ½éÉÜÕâ¸öº¯ÊýµÄÓ÷¨¡£
·¶Àý:
¡¡¡¡($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
ÆäÖÐ:
$sec ´ú±íÃëÊý[0,59] $min ´ú±í·ÖÊý[0,59]
$hour ´ú±íСʱÊý[0,23] $mday ´ú±íÊÇÔÚÕâ¸öÔµĵڼ¸Ìì[1,31]
$mon ´ú±íÔÂÊý[0,11],Òª½«$mon¼ÓlÖ®ºó,²ÅÄÜ ·ûºÏʵ¼ÊÇé¿ö
$year ´Ól990ÄêËãÆðµÄÄêÊý
$wday ´ÓÐÇÆÚÁùËãÆð,´ú±íÊÇÔÚÕâÖÜÖеĵڼ¸Ìì [0,6]
$yday ´ÓÒ»ÔÂÒ»ÈÕËãÆð,´ú±íÊÇÔÚÕâÄêÖеĵڼ¸ Ìì[0,365]
$isdst Ö»ÊÇÒ»¸öflag
ÖªµÀÕâЩ±äÁ¿Ö®ºó,¾Í¿ÉÒÔÔÚCGIÓ¦ÓóÌÐòÖÐÄÃÀ´Ó¦ÓÃÁË¡£´ËÍâ,Ò²¿ÉÒÔÓÃÏÂÃæÕâÒ»ÐÐÖ¸ÁîÔÚUnixϵͳÏÂÈ¡µÃϵͳµÄʱ¼ä¡£ÎªÁ˱ÜÃâ´íÎó·¢Éú,×îºÃÓþø¶Ô·¾¶µÄ·½·¨À´È¡µÃϵͳʱ¼ä,Èç¹û¾ø¶Ô·¾¶²»Çå³þµÄ»°¿ÉÒÔÓá°which date¡±,Õâ¸öÖ¸ÁîÀ´µÃÖª¡£×îºóÒªÌáÐѶÁÕßµÄÊÇÒªÓÃ`Õâ¸ö·ûºÅ²ÅÄÜÖ´ÐÐUnixϵͳµÄÍⲿ³ÌÐò,Èç¹ûÊÇÓá®(µ¥ÒýºÅ)Õâ¸ö×Ö·ûºÅµÄ»°,¾Í²»ÄÜÕýÈ·Ö´ÐÐϵͳµÄ³ÌÐòÁË¡£

¡¡¡¡$date=`/usr/bin/date`;
¡¡¡¡¶øÔÚperl5°æ±¾ÖÐ,Ò²¿ÉÒÔÓÃÏÂÃæÕâÒ»ÐÐÖ¸ÁîÀ´È¡µÃϵͳʱ¼ä¡£
¡¡¡¡$date=localtime(time);
Ö¸Áî:die
Óï·¨:die LIST
˵Ã÷:»á°ÑLIST×Ö·û´®ÏÔʾ³öÀ´,²¢Í˳ö³ÌÐò¡£³£³£ºÍ$!Õâ¸ö´ú±í´íÎóÐÅÏ¢µÄ±äÁ¿Ò»ÆðʹÓá£
·¶Àý:
¡¡¡¡Open(FILE'"$filename")||die"Cannotopenfile$!\n";
¡¡¡¡Èç¹û´ò¿ªÎļþʧ°ÜµÄ»°,¾Í»áÏÔʾ³ö´íÎóµÄÐÅÏ¢,Ö®ºóÔÙÍ˳ö³ÌÐò¡£
Ö¸Áî:open
Óï·¨:open(Filehandle'"$fiiename")
¡¡¡¡ÆäÖÐ$filenameÊÇÒ»¸öÖ¸¶¨´ò¿ªµÄÎļþÃû¡£
˵Ã÷:ÕâÊÇÒ»¸öºÜ³£Óõĺ¯Êý,¿ÉÓÃÓÚÎļþµÄ´ò¿ª(Read0niy)¡£ÔÚCGI³ÌÐòÉè¼ÆÖг£³£»á´ò¿ªÒ»¸öÎļþÀ´¶ÁÈ¡Êý¾Ý,ËùÒÔ±ÊÕß»áÏê¼Ó˵Ã÷ÕâÒ»¸öº¯ÊýµÄÏà¹ØÓ÷¨¡£Õâ¸öFilehandle¿É°ÑËü¿´×÷ÔÚI(Inpnt)/O(Output)¼äµÄÒ»¸öÇÅÁº,¿ÉÒÔÀûÓÃFilehandleÀ´×÷³öÊý¾Ý¶ÁÈëд³öµÄ¶¯×÷¡£¿ªÊ¼¿ÉÓÃopenÕâ¸öº¯ÊýÀ´´ò¿ªÒ»¸öÖ¸¶¨µÄÎļþ,½ÓÏÂÀ´¿ÉÒÔʹÓÃ<Filehandle>À´¶ÁÈ¡Ëù´ò¿ªÎļþµÄÊý¾ÝÄÚÈÝ,×îºóÒ»¶¨ÒªÓÃcloseÕâ¸öº¯ÊýÀ´¹Ø±ÕÕâ¸ö֮ǰ´ò¿ªµÄFilehandle¡£Òª×¢ÒâµÄÊÇÔÚCGI³ÌÐòд×÷ÖÐ,µ±ÓÃopenÕâ¸öº¯ÊýÀ´´ò¿ªÎļþµÄʱºò,Ò»¶¨ÒªÔÚ´ò¿ªµÄÎļþǰ¼ÓÉÏÎļþËùÔڵľø¶Ô·¾¶Ãû³Æ¡£
·¶Àý:
¡¡¡¡$filename=Vpath/cgi.txt";
¡¡¡¡open(FILE'"$filename")||die"Can not open $filename£Ün";
¡¡¡¡#½«Êý¾ÝÖ¸Åɸø´¿Á¿±äÁ¿$line(Ò»ÐÐÒ»ÐеØ)
¡¡¡¡while($line=<FILE>){
¡¡¡¡¡¡print"$line";
¡¡¡¡}
¡¡¡¡close(FILE);
¡¡¡¡¾Í»á°Ñcgi.txtÕâ¸öÎļþµÄÄÚÈÝÏÔʾ³öÀ´¡£
Óï·¨¶þ:open(Filehandle,"<$filename")
˵Ã÷:Õâ¸öÓï·¨Ò²¿ÉÒÔ´ò¿ªÒ»¸ö´æÔÚµÄÎļþ(Read Only)¡£
·¶Àý:
¡¡¡¡$filename="/path/cgi.txt";
¡¡¡¡open(FILE,"<$filename")||die"Can not open $filename\n";
¡¡¡¡#½«<FILE>È«²¿µÄÊý¾ÝÄÚÈݶ¼Ö¸ÅɸøÊý×é@array
¡¡¡¡@array=<FILE>;
¡¡¡¡close(FILE);
¡¡¡¡print"@array";
¡¡¡¡Ò²»á°Ñcgi.txtÕâ¸öÎļþµÄÄÚÈÝÏÔʾ³öÀ´¡£
Óï·¨Èý:open(Filehandle,">$filemme)
˵Ã÷:½¨Á¢Ò»¸öеÄÎļþ(Write Only),Èç¹ûÒѾ­´æÔÚÕâ¸öÎļþÁË,¾Í»á°Ñ¾ÉÎļþÃû¸²¸Ç¹ýÈ¥¡£²¢¿ÉÓÃprint FilehandleµÄ·½Ê½½«Êý¾Ýдµ½Ëù´ò¿ªµÄÎļþÖС£
·¶Àý:
¡¡¡¡$filename="/path/cgi.txt";
¡¡¡¡open(FILE,">$filename")||die"Can not open $filename\n";
¡¡¡¡print FILE"this is a new line1\n";¡¡¡¡#\nÊÇ»»ÐÐ×Ö·û
¡¡¡¡print FILE"this is a new line2\n";
¡¡¡¡close(FILE);
¡¡¡¡»á°ÑÊý¾Ý´æÔÚÒ»¸öÐÂÎļþÖС£
Óï·¨ËÄ:Open(Filehandle,">>$filename")
˵Ã÷:Êý¾ÝÓø½¼ÓµÄ·½Ê½Ð´ÈëÒ»Îļþ(Write Only),Èç¹ûÖ¸¶¨µÄÎļþÃû²»´æÔڵϰ,¾Í»á½¨Á¢Ò»¸öеÄÎļþ¡£
·¶Àý:
¡¡¡¡$filename="/path/cgi.txt";
¡¡¡¡open(FILE,">>$filename")||die"Can not open $filename\n";
¡¡¡¡print FILE"this is a newline1\n";
¡¡¡¡print FILE"this is a newline2\n";
¡¡¡¡close(FILE);
¡¡¡¡»á°ÑÊý¾Ý¸½¼Ó(append)µ½Ò»¸öÎļþ(cgi.txt)ÖС£
Óï·¨Îå:Open(Filehandle,"|Unix Command")
˵Ã÷:¾Í»á°ÑÔÚFiiehandleµÄÊý¾ÝÊä³ö¸øUnixµÄÖ¸ÁîÀ´×÷´¦Àí¡£
·¶Àý:
¡¡¡¡$mailprog="/usr/ucb/mail";¡¡#UnixϵͳÉϵļÄÐųÌÐò(Òª¼Ó¾ø¶Ô·¾¶Å¶!)
¡¡¡¡$who="jcjung@tem.nctu.edu.tw";
¡¡¡¡open(FILE,"|$mailprog$who")||die"CannotFail!\n";
¡¡¡¡print FILE"Ïë²»ÏëÎÒѽ?\n";
¡¡¡¡print FILE"Òª¿ìÒ»µã»ØÐÅŶ!\n";
¡¡¡¡close(FILE);
¡¡¡¡¾Í»áͨ¹ýUnixϵͳmailµÄ³ÌÐò,½«FILEÕâ¸öFilehandleµÄÊý¾ÝÄÚÈݼĸø$whoÕâ¸ö±äÁ¿ËùÖ¸¶¨µÄÊÕÐÅÈË¡£ÎÒÃÇ¿ÉÒÔÀûÓÃopenÕâ¸öº¯ÊýÀ´Éè¼ÆÒ»¸öÀ´ÐÅÅúÆÀÖ¸½ÌµÄCGlÓ¦ÓóÌÐò,ÔÚ±¾ÊéÖеÄÏÂÒ»ÕÂÖлáÓÐÏêϸµÄ½éÉÜ¡£
Ö¸Áî:close
Ó÷¨:close(Filehandle)
˵Ã÷:ÓÃopenÕâ¸öº¯ÊýÀ´´ò¿ªÒ»¸öfilehandleÖ®ºó,Ò»¶¨ÒªÓÃcloseÕâ¸öº¯Êý°ÑËù´ò¿ªµÄFilehandle¹Ø±Õ¡£
·¶Àý:
¡¡¡¡open(Fiiehandle,"$filename");
¡¡¡¡close(Filehandle);
Ö¸Áî:pack
Óï·¨:pack("Ö¸¶¨µÄ¸ñʽ",LIST)
˵Ã÷:packÕâ¸öº¯Êý»á½«Ò»¸öLIST±ä³ÉËùÖ¸¶¨µÄ¶þ½øÖÆÊý¾Ý¸ñʽ¡£ÔÚCGI³ÌÐò·Ö¸î½âÂë¹ý³ÌÖÐ,»áÓõ½packÕâ¸öº¯Êý,ËùÒÔ±ÊÕßÔڴ˼òµ¥½éÉÜÕâ¸öº¯ÊýµÄÓ÷¨¡£
·¶Àý:
¡¡¡¡$string=pack("C",65);¡¡¡¡#´Ëʱ$string="A";
¡¡¡¡½«65Õâ¸öASCIIÂëת»»³ÉÒ»¸öunsigned×Ö·û,ÆäÖÐC¾ÍÊÇÖ¸¶¨Òª×ª»»³Éunsigned×Ö·ûµÄÒâ˼¡£
Ö¸Áî:read
Óï·¨:read(Filehandle,$string,length)
¡¡¡¡ÆäÖÐlengthÊÇ´ú±í¶ÁÈë×Ö·û´®µÄ³¤¶È(bytes)¡£ ˵Ã÷:ÓÃreadÕâ¸öº¯Êý°ÑFilehand1eÖеÄÊý¾ÝÒÀÖ¸¶¨µÄ×Ö·û´®³¤¶È¶ÁÈëÖ®ºóÖ¸Åɸø$stringÕâ¸ö±äÁ¿¡£ÔÚCGI³ÌÐò·Ö¸î½âÂë¹ý³ÌÖÐ,Èç¹ûFORMµÄ´«ËÍ·½Ê½ÊÇÉ趨ΪPOSTµÄ»°,¾Í»á½«´«Ë͵ÄÊý¾ÝÉ趨Ϊ±ê×¼ÊäÈë,ËùÒԻὫÊý¾ÝÄÚÈÝÖ¸¶¨¸øSTDINÕâ¸ö±ê×¼ÊäÈëµÄFilehandle,¶øCGI»·¾³±äÁ¿$ENV{'CONTENT_LENGTH'}¾ÍÊÇ´ú±íʹÓÃÕßËͳöÊý¾ÝÄÚÈݵij¤¶È,Òò´ËÎÒÃÇÒªÓÃreadÕâ¸öº¯ÊýÀ´È¡µÃʹÓÃÕßËͳöµÄÊý¾ÝÄÚÈÝ¡£
·¶Àý:
¡¡¡¡read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
¡¡¡¡¾Í»á½«STDINÕâ¸ö±ê×¼ÊäÈëFilehandleÖеÄÊý¾ÝÒÀÖ¸¶¨µÄ×Ö·û´®³¤¶È¶ÁÈë,ÔÙÖ¸Åɸø$bufferÕâ¸ö±äÁ¿¡£
Ö¸Áî:exit
Óï·¨:exit
˵Ã÷:Í˳öÖ´ÐеijÌÐò¡£
·¶Àý:
¡¡¡¡print"i love perl";
¡¡¡¡exit;
¡¡¡¡ÏÔʾ³ö¡°i love perl"Ö®ºó,¾ÍÂíÉÏÍ˳öÕâ¸ö³ÌÐò¡£

6.3.3 PerlÓïÑÔµÄÔËËã·ûºÅ×Ö·û

¡¡¡¡ÒÔÏÂÊÇÔÚPerlÓïÑÔÖг£ÓõÄÔËËã×Ö·û,´ó²¿·ÖºÍCÓïÑÔÖеÄÔËËã×Ö·ûºÜÀàËÆ,ѧ¹ýCÓïÑÔµÄÈËÓ¦¸Ã»á¶ÔÕâЩÔËËã×Ö·ûÊ®·ÖÊìϤ²Å¶Ô¡£

¡¡¡¡Ò»¡¢¸³Öµ(Assignment)ÔËËã·û
·ûºÅ ·¶Àý ˵Ã÷
= $x=$y; ½«$yµÄÖµÖ¸Åɸø$x
+= $x+=$y; $x=$x+$y;½«$x¼Ó$yÖ®ºóÔÙÖ¸Åɸø$x
-= $x-=$y; $x=$x-$y;½«$x¼õ$yÖ®ºóÔÙÖ¸Åɸø$x
*= $x*=$y; $x=$x*$y;½«$x³Ë$yÖ®ºóÔÙÖ¸Åɸø$x
/= $x/=$y; $x=$x/$y;Çó³ö$x³ýÒÔ$yÖ®ºóµÄÉÌÊý,ÔÙÖ¸Åɸø$x
**= $x**=$y; $x=$x**$y;½«$x³ËÉÏ$y´Î·½Ö®ºóÔÙÖ¸Åɸø$x
%= $x%=$y $x=$x%$y;Çó³ö$x³ýÒÔ$yµÄÓàÊýÖ®ºó,ÔÙÖ¸Åɸø$x
.= $str1.=$str2; $str1=$str1.$str2;
½«$str1Õâ¸ö×Ö·û´®ÔÙ¼ÓÉÏ$str2Õâ¸ö×Ö·û´®Ö®ºó,ÔÙÖ¸Åɸø$str1Õâ¸ö×Ö·û´®
x= $str x=$y $str=$str x $y
ÖØ¸´$str×Ö·û´®$y´Î²¢°Ñ½á¹ûÖ¸Åɸø$strÕâ¸ö×Ö·û´®


¡¡¡¡¶þ¡¢ËãÊõ(Arithmetic)ÔËËã·û
·ûºÅ ·¶Àý ˵Ã÷
+ $z=$x+$y ½«$xºÍ$yÏà¼ÓÖ®ºó,ÔÙ½«½á¹ûÖ¸Åɸø$z
- $z=$x-$y ½«$x¼õµô$yÖ®ºó,ÔÙ½«½á¹ûÖ¸Åɸø$z
* $z=$x*$y ½«$xºÍ$yÏà³ËÖ®ºó,ÔÙ½«½á¹ûÖ¸Åɸø$z
/ $z=$x/$y ½«$x³ýÒÔ$yÖ®ºó,ÔÙ½«ÉÌÊýÖ¸Åɸø$z
% $z=$x%$y ½«$x³ýÒÔ$yÖ®ºó,ÔÙ½«ÓàÊýÖ¸Åɸø$z
** $z=$x**$y ½«$x³ËÒÔ$y´Î·½Ö®ºó,ÔÙ½«½á¹ûÖ¸Åɸø$z
++ $x++;++$x Èçͬ$x=$x+1,½«$x¼ÓÒ»ÒÔºóÔÙ½«½á¹ûÖ¸Åɸø$x
-- $x--;--$x Èçͬ$x=$x-1,½«$x¼õÒ»ÒÔºóÔÙ½«½á¹ûÖ¸Åɸø$x
. $z=$x.$y ½«$x×Ö·û´®ºÍ$y×Ö·û´®Á¬½ÓÖ®ºó,ÔÙ½«½á¹ûÖ¸Åɸø$z


¡¡¡¡Èý¡¢ÊýÖµ(Numeric Values)¹ØÏµÔËËã·û
·ûºÅ ·¶Àý ˵Ã÷
> $x>$y Èç¹û$x´óÓÚ$y,·µ»Ø1µÄÖµ,·ñÔò·µ»Ø0
>= $x>=$y Èç¹û$x´óÓÚµÈÓÚ$y,·µ»Ø1µÄÖµ,·ñÔò·µ»Ø0
< $x<$y Èç¹û$xСÓÚ$y,·µ»ØlµÄÖµ,·ñÔò·µ»Ø0
<= $x<=$y Èç¹û$xСÓÚµÈÓÚ$y,·µ»Ø1µÄÖµ,·ñÔò·µ»Ø0
== $x==$y Èç¹û$xµÈÓÚ$y,·µ»ØlµÄÖµ,·ñÔò·µ»Ø0
!= $x!=$y Èç¹û$x²»µÈÓÚ$y,·µ»Ø1µÄÖµ,·ñÔò·µ»Ø0
<=> $x<=>$y Èç¹û$x´óÓÚ$y,·µ»Ø1µÄÖµ;Èç¹û$xµÈÓÚ$y,·µ»Ø0;Èç¹û$xСÓÚ$y,Ôò·µ»Ø-1µÄÖµ


¡¡¡¡ËÄ¡¢×Ö·û´®(StringValues)¹ØÏµÔËËã·û
·ûºÅ ·¶Àý ˵Ã÷
gt $str1 gt $str2 Èç¹û$str1´óÓÚ$str2,·µ»Ø1µÄÖµ,·ñÔò·µ»Ø0
ge $str1 ge $str2 Èç¹û$str1´óÓÚµÈÓÚ$str2,·µ»Ø1µÄÖµ,·ñÔò·µ»Ø0
lt $str1 lt $str2 Èç¹û$str1СÓÚ$str2,·µ»Ø1µÄÖµ,·ñÔò·µ»Ø0
le $strl le $str2 Èç¹û$strlСÓÚµÈÓÚ$str2,·µ»Ø1µÄÖµ,·ñÔò·µ»Ø0
eq $strl eq $str2 Èç¹û$strlµÈÓÚ$str2,·µ»Ø1µÄÖµ,·ñÔò·µ»Ø0
ne $str1 ne $str2 Èç¹û$strl²»µÈÓÚ$str2,·µ»Ø1µÄÖµ,·ñÔò·µ»Ø0
cmp $str1 cmp $str2 Èç¹û$str1´óÓÚ$str2,·µ»Ø1µÄÖµ;Èç¹û$str1µÈÓÚ$str2,·µ»Ø0;Èç¹û$str1СÓÚ$str2,Ôò·µ»Ø-1µÄÖµ


¡¡¡¡Îå¡¢Âß¼­(Logical)ÔËËã·û
¡¡¡¡1.$x && $y(And)
$x $y ½á¹û
Õæ(True) Õæ(True) Õæ(True)
Õæ(True) ¼Ù(False) ¼Ù(False)
¼Ù(False) Õæ(True) ¼Ù(False)
¼Ù(False) ¼Ù(False) ¼Ù(False)

¡¡¡¡2.$x||$y(Or)
$x $y ½á¹û
Õæ(True) Õæ(True) Õæ(True)
Õæ(True) ¼Ù(False) Õæ(True)
¼Ù(False) Õæ(True) Õæ(True)
¼Ù(False) ¼Ù(False) ¼Ù(False)

¡¡¡¡3.!$x(Not)
$x ½á¹û
Õæ(True) ¼Ù(False)
¼Ù(False) Õæ(True)


¡¡¡¡Áù¡¢ÆäËû³£ÓõÄÔËËã·û
Ö¸Áî:..Çø¿éÔËËã·û(Range Operator)
˵Ã÷:Õâ¸öÔËËã·ûÊÇPerlÓïÑÔÖÐÌØÓеÄÔËËã·û,ÊÇÒ»¸öºÜʵÓõÄÔËËã·û¡£
·¶Àý:
¡¡¡¡@digits=(1..9)£»¡¡¡¡¡¡¡¡#´Ëʱ@digits=(l,2,3,4,5,6,7,8,9)£»
¡¡¡¡@digits=('10'..'05')£»¡¡#´Ëʱ@digits=(01,02,03,04,05);
¡¡¡¡@char=('A'..'E')£»¡¡¡¡¡¡#´Ëʱ@char=('A','B','C','D','E');
¡¡¡¡@total=(l..3,'A'..'B')£»#´Ëʱ@total=(1,2,3,'A','B');
Ö¸Áî:ÅбðÔËËãʽ?ÔËËãʽ1:ÔËËãʽ2¡¡Ìõ¼þÔËËã·û(Conditional Operator)
˵Ã÷:Õâ¸öÓï·¨µÄÒâÒåºÍCÓïÑÔÒ»Ñù,Èç¹ûÅбðÔËËãʽµÄÖµÊÇÕæ(True)µÄ»°,Ôò×öÔËËã1µÄ ÔËËã,Èç¹ûÅбðÔËËãʽÊǼÙ(False)µÄ»°,Ôò×öÔËËãʽ2µÄÔËËã¡£
·¶Àý:
¡¡¡¡$price=($age>60)?100:200;
¡¡¡¡Èç¹û$age´óÓÚ60µÄ»°,Ôò$priceµÈÓÚ100;·ñÔò$priceµÈÓÚ200.

¡¡¡¡Æß¡¢³£ÓõÄÎļþÊý¾Ý(File test)ÔËËã·û
·¶Àý ˵Ã÷
-r $file Èç¹û$fileÊǿɶÁÈ¡µÄ»°,·µ»Ø1µÄÖµ
-w $file Èç¹û$fileÊÇ¿ÉдÈëµÄ»°,·µ»Ø1µÄÖµ
-x $file Èç¹û$fileÊÇ¿ÉÖ´Ðеϰ,·µ»Ø1µÄÖµ
-e $file Èç¹û$file´æÔڵϰ,·µ»Ø1µÄÖµ
-o $file Èç¹û$fileÊDZ»Ö´ÐÐÕßËùÓµÓеϰ,·µ»Ø1µÄÖµ
-s $file ·µ»Ø$fileµÄÎļþ´óС(bytes)
-f $file Èç¹û$fileÊÇÕý³£ÎļþµÄ»°,·µ»Ø1µÄ Öµ
-T $file Èç¹û$fileÊÇÎı¾ÎļþµÄ»°,·µ»Ø1µÄÖµ
-B $file Èç¹û$fileÊÇBillryÎļþµÄ»°,·µ»Ø1µÄÖµ
-M $file ·µ»Ø$fileÎļþ×îºóÒ»´Î¸ü¸Äʱ¼äµ½ÏÖÔÚµÄÈÕÆÚÊý

6.3.4 PerlÓïÑÔµÄÁ÷³Ì¿ØÖÆ
¡¡¡¡ÒÔÏÂÊÇÔÚPerlÓïÑÔÖг£ÓõijÌÐòÁ÷³Ì¿ØÖÆ,´ó²¿·ÖºÍCÓïÑԵijÌÐòÁ÷³Ì¿ØÖƺÜÀàËÆ,ѧ ¹ýCÓïÑÔµÄÈË,Ó¦¸Ã»áºÜÊìϤ¡£

¡¡¡¡Ò»¡¢Ñ¡ÔñÐÔÁ÷³Ì¿ØÖÆ
Ö¸Áî:if¼ÙÈç
Óï·¨Ò»:if(ÅбðÔËËãʽ){
¡¡¡¡¡¡¡¡¡¡¡¡³ÌÐòÐðÊöÇø¿é;
¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡ÉϸöÓï·¨ÔÚPerlÖÐÒ²¿ÉÒÔд³É:
¡¡¡¡¡¡³ÌÐòÐðÊöÇø¿éif(ÅбðÔËËãʽ)£»
·¶Àý:
¡¡¡¡print"ÇëÊäÈëÄúµÄ·ÖÊý?\n"£»
¡¡¡¡$score=<STDIN>;¡¡#<STDIN>´ú±í±ê×¼ÊäÈë,»áÈÃʹÓÃÕßÊäÈëÒ»×Ö·û´®
¡¡¡¡chop($score);¡¡¡¡#½«$score×îºóÒ»¸ö»»ÐÐ×Ö·û\nɾ³ýµô
¡¡¡¡if($score>=60){
¡¡¡¡¡¡¡¡print"ÄúµÄ·ÖÊý¼°¸ñÁË!\n";
¡¡¡¡Ò²¿ÉÒÔд³É:
¡¡¡¡print"ÄúµÄ·ÖÊý¼°¸ñÁË!\n"if($score>=60);
Óï·¨¶þ:if(ÅбðÔËËãʽһ){
¡¡¡¡¡¡¡¡¡¡³ÌÐòÐðÊöÇø¿éÒ»;
¡¡¡¡¡¡¡¡}else{
¡¡¡¡¡¡¡¡¡¡³ÌÐòÐðÊöÇø¿é¶þ;
¡¡¡¡¡¡¡¡}
·¶Àý:
¡¡¡¡print"ÇëÊäÈëÄúµÄ·ÖÊý?\n";
¡¡¡¡$score=<STDIN>;
¡¡¡¡chop($score);
¡¡¡¡if($score>=60){
¡¡¡¡¡¡¡¡print"ÄúµÄ·ÖÊý¼°¸ñÁË!\n"
¡¡¡¡}else{
¡¡¡¡¡¡¡¡print"ÄúµÄ·ÖÊý²»¼°¸ñ!£Ün";
¡¡¡¡}
Óï·¨Èý:if(ÅбðÔËËãʽһ){
¡¡¡¡¡¡¡¡¡¡¡¡³ÌÐòÐðÊöÇø¿éÒ»;
¡¡¡¡¡¡¡¡}elsif(ÅбðÔËËãʽ¶þ){
¡¡¡¡¡¡¡¡¡¡¡¡³ÌÐòÐðÊöÇø¿é¶þ;
¡¡¡¡¡¡¡¡}else{
¡¡¡¡¡¡¡¡¡¡¡¡³ÌÐòÐðÊöÇø¿éÈý;
¡¡¡¡}
·¶Àý:
¡¡¡¡print"ÇëÊäÈëÄúµÄ·ÖÊý?\n";
¡¡¡¡$score=<STDIN>;
¡¡¡¡chop($score);
¡¡¡¡if($score>60){
¡¡¡¡¡¡¡¡print"ÄúµÄ·ÖÊý´óÓÚ60·Ö!\n";
¡¡¡¡}elsif($score$x¬){
¡¡¡¡¡¡¡¡print"ÄúµÄ·ÖÊýСÓÚ60·Ö!\n";
¡¡¡¡}else{
¡¡¡¡¡¡¡¡print"ÄúµÄ·ÖÊý¸ÕºÃÊÇ60·Ö!\n";
¡¡¡¡}
Ö¸Áî:unless¼ÙÈç·Ç
Óï·¨Ò»:unless(ÅбðÔËËãʽ){
¡¡¡¡¡¡¡¡¡¡¡¡¡¡³ÌÐòÐðÊöÇø¿é;
¡¡¡¡¡¡¡¡}
¡¡¡¡¡¡ÉϸöÓï·¨ÔÚPer1ÖÐÒ²¿ÉÒÔд³É:
¡¡¡¡¡¡³ÌÐòÐðÊöÇø¿éunless(ÅбðÔËËãʽ);

·¶Àý:
¡¡¡¡print"ÇëÊäÈëÄúµÄ·ÖÊý?\n";
¡¡¡¡$score=<STDIN>;#<STDIN>´ú±í±ê×¼ÊäÈë,»áÈÃʹÓÃÕßÊäÈëÒ»×Ö·û´®
¡¡¡¡chop($score);#½«$score×îºóÒ»¸ö»»ÐÐ×Ö·û£Ünɾ³ýµô
¡¡¡¡unless($score<60){
¡¡¡¡¡¡¡¡print"ÄúµÄ·ÖÊý¼°¸ñÁË!£Ün";
¡¡¡¡}
¡¡¡¡Ò²¿ÉÒÔд³É:
¡¡¡¡print"ÄúµÄ·ÖÊý¼°¸ñÁË!\n"unless($score$x¬);
Óï·¨¶þ:unless(ÅбðÔËËãʽһ){
¡¡¡¡¡¡¡¡¡¡¡¡³ÌÐòÐðÊöÇø¿éÒ»;
¡¡¡¡¡¡¡¡}else{
¡¡¡¡¡¡¡¡¡¡¡¡³ÌÐòÐðÊöÇø¿é¶þ;
¡¡¡¡¡¡¡¡}
·¶Àý:
¡¡¡¡print"ÇëÊäÈëÄúµÄ·ÖÊý?\n";
¡¡¡¡$score=<STDIN>;
¡¡¡¡chop($score)
¡¡¡¡unless($score$x¬){
¡¡¡¡¡¡¡¡print"ÄúµÄ·ÖÊý¼°¸ñÁË!\n";
¡¡¡¡}else{
¡¡¡¡¡¡¡¡print"ÄúµÄ·ÖÊý²»¼°¸ñ!\n";
¡¡¡¡}


¡¡¡¡¶þ¡¢Ñ­»·Á÷³Ì¿ØÖÆ
Ö¸Áî:whileµ±..
Óï·¨:while(ÅбðÔËËãʽ){
¡¡¡¡¡¡¡¡¡¡³ÌÐòÐðÊöÇø¿é;
¡¡¡¡¡¡}
¡¡¡¡ÉϸöÓï·¨ÔÚPerlÖÐÒ²¿ÉÒÔд³É:
¡¡¡¡³ÌÐòÐðÊöÇø¿éwhile(ÅбðÔËËãʽ);
·¶ÀýÒ»:
¡¡¡¡while($i<=10){
¡¡¡¡¡¡¡¡$sum+=$i;
¡¡¡¡¡¡¡¡$i++;
¡¡¡¡}
¡¡¡¡print"$sum\n";¡¡¡¡#´Ëʱ$sum=55;
·¶Àý¶þ:
¡¡¡¡$filename="/path/cgi.txt";
¡¡¡¡open(FILE,"$filename")||die"Can not open $filename\n";
¡¡¡¡#¿ÉÒÔ°Ñ<FILE>ÊÓΪÔÚ´ò¿ªÎļþÖÐijһÐеÄÊý¾Ý
¡¡¡¡while($line=<FILE>){
¡¡¡¡¡¡¡¡print"$line";
¡¡¡¡}
¡¡¡¡close(FILE);
¡¡¡¡¾Í»á°Ñcgi.txtÕâ¸öÎļþµÄÄÚÈÝÏÔʾ³öÀ´¡£¶øÕâ¸ö·¶Àý¿ÉÒÔ°ÑËü¸Äд³É:
¡¡¡¡$filename="/path/cgi.txt";
¡¡¡¡open(FILE'"$filename")||die"Can not open $filename\n";
¡¡¡¡print"$line"while($line=<FILE>);
¡¡¡¡close(FILE);
¡¡¡¡ÔÚÕâ¸ö·¶ÀýÖÐÊǰÑ$filemmeÎļþÄÚµÄÊý¾ÝÒ»ÐÐÒ»ÐÐÖ¸Åɸø$lineÕâ¸ö´¿Á¿±äÁ¿,ÔÙ °Ñ$lineÏÔʾ³öÀ´¡£Èç¹ûûÓн«<FILE>Ö¸ÅɸøÒ»¸ö´¿Á¿±äÁ¿µÄ»°,Ôò»áÓÐÒ»ÄÚ¶¨µÄ ÊäÈë±äÁ¿$_±»<FILE>ËùÖ¸ÅÉ¡£ÒòΪ$_ÊÇÒ»¸öÄÚ¶¨µÄ±äÁ¿,ËùÒÔÈç¹ûʹÓÃprintº¯Êý µÄʱºòûÓмÓÉÏÒªÊä³öÊý¾ÝµÄ»°,¾Í»á°Ñ$_µÄÊý¾Ýprint³öÀ´¡£ËùÒÔÕâ¸ö·¶ÀýÒ²¿É ÒÔ¸Äд³É:
¡¡¡¡$filename="/path/cgi.txt";
¡¡¡¡open(FILE,"$filename")||die"Can not open $filename\n";
¡¡¡¡while(){
¡¡¡¡¡¡¡¡Print;
¡¡¡¡}
¡¡¡¡close(FILE);
Ö¸Áî:do while µ±..
Óï·¨:do{
¡¡¡¡¡¡¡¡³ÌÐòÐðÊöÇø¿é,
¡¡¡¡¡¡}while(ÅбðÔËËãʽ);
¡¡¡¡ÔÚwhileºÍdo whileÑ­»·ÖÐ×î´óµÄ²»Í¬ÊÇÔÚdo whileÑ­»·ÖÐ,³ÌÐòÐðÊöÇø¿éÖÁÉÙ»á ±»Ö´ÐÐÒ»´Î¡£
·¶Àý:
¡¡¡¡do{
¡¡¡¡¡¡¡¡$sum+=$i;
¡¡¡¡¡¡¡¡$i++;
¡¡¡¡}while($i<=10);
¡¡¡¡print"$sum\n";¡¡¡¡¡¡¡¡#´Ëʱ$sum=55,
Ö¸Áî:untilÖ±µ½...²Å
Óï·¨:until(ÅбðÔËËãʽ){
¡¡¡¡¡¡¡¡¡¡³ÌÐòÐðÊöÇø¿é;
¡¡¡¡}
¡¡¡¡ÉϸöÓï·¨ÔÚPerlÖÐÒ²¿ÉÒÔд³É:
¡¡¡¡³ÌÐòÐðÊöÇø¿é until (ÅбðÔËËãʽ);
·¶Àý:
¡¡¡¡until($i>10){
¡¡¡¡¡¡¡¡$sum+=$i;
¡¡¡¡¡¡¡¡$i++;
¡¡¡¡}
. ¡¡¡¡print"$sum\n";#´Ëʱ$sum=55;
Ö¸Áî:do until Ö±µ½...²Å
Óï·¨:do{
¡¡¡¡¡¡¡¡³ÌÐòÐðÊöÇø¿é;
¡¡¡¡¡¡}until(ÅбðÔËËãʽ);
·¶Àý:
¡¡¡¡do{
¡¡¡¡¡¡¡¡$sum+=$i;
¡¡¡¡¡¡¡¡$i++;
¡¡¡¡}until($i>l0);
; ¡¡¡¡print"$sum£Ün";#´Ëʱ$sum=55;
Ö¸Áî:forÑ­»·³ÂÊö
Óï·¨Ò»:for(³õʼ»¯ÔËËãʽ,ÅбðÔËËãʽ;Ñ­»·¹ý³ÌÔËËãʽ){
¡¡¡¡¡¡¡¡¡¡¡¡³ÌÐòÐðÊöÇø¿é;
¡¡¡¡¡¡¡¡¡¡}
·¶ÀýÒ»:
¡¡¡¡$sum=0;
¡¡¡¡for($i=l;$i<$i++){
¡¡¡¡¡¡¡¡$sum+=$i;
¡¡¡¡print"$sum\n";¡¡¡¡¡¡¡¡#´Ëʱ$sum=55;
·¶Àý¶þ:
¡¡¡¡@array=(3,6,9);
¡¡¡¡$number=@array£º¡¡¡¡¡¡#°ÑÊý×é@arrayµÄÔªËØ¸öÊýÖ¸Åɸø$number
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡#´Ëʱ$number=3;
¡¡¡¡for($i=0;$i<ber;$i++){
¡¡¡¡¡¡¡¡$sum+=$array[$i]£º#°ÑÊý×é@arrayÔªËØµÄֵȫ²¿¼ÓÆðÀ´
¡¡¡¡}
Óï·¨¶þ:for$variab1e(@array){
¡¡¡¡¡¡¡¡³ÌÐòÐðÊöÇø¿é;
¡¡¡¡¡¡¡¡}
¡¡¡¡ÔÚPerlÓïÑÔÖеÄforÑ­»·³ÂÊö»¹¿ÉÒÔʹÓÃÕâ¸öÓï·¨,ºÍÑ­»·³ÂÊöforeachµÄÓ÷¨Ò» Ñù¡£Èç¹û°Ñ$variable±äÁ¿Ê¡ÂԵϰ,¾Í»á½«Êý×é@array µÄÔªËØÒ»¸öÒ»¸öÖ¸¶¨¸ø $_Õâ¸ö±äÁ¿,ÕâÊDZȽϾ«¼òµÄд·¨¡£
·¶Àý£º
¡¡¡¡@array=(3,6,9);
¡¡¡¡for$int(@array){
¡¡¡¡¡¡¡¡$sum+=$int;
¡¡¡¡}
¡¡¡¡print"$sum\n";#´Ëʱ$sum=18;
¡¡¡¡Ò²¿ÉÒÔд³É:
¡¡¡¡@array=(3,6,9);
¡¡¡¡for(@array){
¡¡¡¡¡¡¡¡$sum+=$_;
¡¡¡¡}
¡¡¡¡print"$sum\n";#´Ëʱ$sum=18;
Ö¸Áî:foreach Ñ­»·³ÂÊö
Óï·¨:foreach $variable(@array)(
¡¡¡¡¡¡³ÌʽÐðÊöÇø¿é;
¡¡¡¡¡¡}
¡¡¡¡Èç¹û°Ñ$variable±äÁ¿Ê¡ÂԵϰ,¾Í»á½«Êý×é@arrayµÄÔªËØÒ»Ò»Ö¸¶¨¸ø$_Õâ¸öÄÚ¶¨ µÄÊä³ö±äÁ¿¡£
·¶ÀýÒ»:
¡¡¡¡@array=(3,6,9);
¡¡¡¡foreach $int(@array){
¡¡¡¡¡¡¡¡$sum+=$int;
¡¡¡¡Print"$sum\n";#´Ëʱ$sum=l8;
¡¡¡¡Ò²¿ÉÒÔд³É:
¡¡¡¡@array=(3,6,9);
¡¡¡¡foreach(@array){
¡¡¡¡¡¡¡¡$sum+=$_;
¡¡¡¡}
¡¡¡¡print"$sum\n";#´Ëʱ$sum=18;
·¶Àý¶þ:
¡¡¡¡%F0RM=("name"'"NCTU","value","TEM");
¡¡¡¡foreach $pair(sort keys%FORM){ ¡¡¡¡¡¡¡¡print"$pair is $FORM{$pair}\n";
¡¡¡¡}
¡¡¡¡Õâ¸ö·¶ÀýÔÚCGI³ÌÐòд×÷Öг£³£»áÓõ½¡£ÏÈÓÃkeysÕâ¸öº¯ÊýÀ´Çó³ö¹ØÁªÊý×éÖÐÈ«²¿ µÄkey,ÔÙÓÃsortÕâ¸öº¯Êý°ÑÈ«²¿µÄkeyÓÉСµ½´óÅÅÐò,×îºóÔٰѹØÁªÊý×éÖеÄkeyºÍ Ëù¶ÔÓ¦µÄÖµ(value)Ò»Ò»ÏÔʾ³ö¡£¶øÒÔÉÏÕâ¸ö³ÌÐòÒ²¿Éд³É:
¡¡¡¡%FORM=("name"'"NCTU","vaiue","TEM");
¡¡¡¡@array=(sortkeys%F0RM);
¡¡¡¡foreach $pair(@array){
¡¡¡¡¡¡¡¡print"$pairis$F0RM{$pair}\n";
¡¡¡¡}
Ö¸Áî:last Í˳öÑ­»·³ÂÊö
Óï·¨:last
·¶Àý:
¡¡¡¡for($i=1;$i<=l0;$i++){
¡¡¡¡¡¡¡¡last if ($i==5);¡¡#Èç¹û$iµÈÓÚ5µÄ»°¾ÍÍ˳öforÑ­»·
¡¡¡¡¡¡¡¡print"$i\n";
¡¡¡¡}
¡¡¡¡»á°Ñlµ½4Ö®¼äµÄÊýÖµÏÔʾ³öÀ´¡£
Ö¸Áî:nextµ½Ñ­»·µÄÏÂÒ»¸ö³ÂÊö
Óï·¨:next
·¶Àý:
¡¡¡¡for($i=l;$i<=10;$i++){
¡¡¡¡¡¡¡¡#Èç¹ûÊÇ2µÄ±¶ÊýµÄ»°,¾Íµ½Ñ­»·µÄÏÂÒ»¸ö³ÂÊö
¡¡¡¡¡¡¡¡next if (($i%2)==0)
¡¡¡¡¡¡¡¡print"$iÊÇÒ»¸öÆæÊý!£Ün";
¡¡¡¡}
¡¡¡¡»á°Ñ1µ½10Ö®¼äµÄÆæÊýÏÔʾ³öÀ´¡£


6.3.5 PerlÓïÑÔµÄÎÄ×Ö´¦Àíģʽ(Regular Expression)
¡¡¡¡Èç¹ûÔÚUnixÖÐÔø¾­Ê¹Óùýsde¡¢awk¡¢grepÕâЩָÁîµÄ»°,ÏàÐŶÔÓÚPerlÓïÑÔÖеÄÎÄ×Ö´¦Àíģʽ(Regular Expression) Ó¦¸Ã²»»á¸Ðµ½Ä°Éú²Å¶Ô¡£ÔÚPerlÓïÑÔÖÐÒòΪÓÐÕâ¸ö¹¦ÄÜ,ËùÒÔ¶ÔÓÚ×Ö·û´®µÄ´¦ÀíÄÜÁ¦ÊǷdz£Ç¿ÓÐÁ¦µÄ¡£Regular Expression¿ÉÊÓΪÓÃÀ´´¦Àí×Ö·û´®µÄÒ»ÖÖģʽ(pattern),ÆäʹÓõĸñʽΪ/pattern/¡£ÔÚPerlÓïÑԵijÌÐòÉè¼ÆÖÐ,¾­³£¿ÉÒÔ¿´µÃµ½ÀàËÆÓï·¨µÄÓ¦ÓÃ,ÔÚCGI³ÌÐòÉè¼ÆÖÐÒ²²»ÀýÍâ¡£Ö»ÒªÄܹ»ÉÆÓÃÎÄ×Ö´¦ÀíģʽµÄ»°,Òª´¦ÀíÈκÎÄѵÄ×Ö ·û´®½Ô¿ÉÓ­Èжø½â,ÔÚ±¾ÕÂÖбÊÕß»áÓÃÉîÈëdz³öµÄ·½Ê½À´½éÉÜRegufar ExpressionµÄÓ÷¨¡£

¡¡¡¡Ò»¡¢ÎÄ×Ö´¦Àí(RegularExpression)µÄ³£ÓÃÓï·¨
¡¡¡¡ÒÔÏÂÊÇÎÄ×Ö´¦ÀíģʽÖÐ,/pattern/³£Óõ½µÄÓï·¨:
/pattern/ ˵Ã÷
¡¡ ³ýÁË»»ÐÐ×Ö·û/nÍâ,ÕÒѰֻÓÐÒ»¸ö×Ö·ûµÄ×Ö·û´®
x? ÕÒѰ0¸ö»òÊÇ1¸öx×Ö·û
x* ÕÒѰ0¸ö»òÊÇ0¸öÒÔÉϵÄx×Ö·û
.* ÕÒѰ0¸ö»òÊÇ0¸öÒÔÉϵÄÈκÎ×Ö·û
x+ ÕÒѰ1¸ö»òÊÇ1¸öÒÔÉϵÄx×Ö·û
.+ ÕÒѰ1¸ö»òÊÇ1¸öÒÔÉϵÄÈκÎ×Ö·û
{m} ÕÒѰ¸ÕºÃÊÇm¸÷¸öÊýÖ¸¶¨µÄ×Ö·û
{m,n} ÕÒѰÔÚm¸ö¸öÊýÒÔÉÏ¡¢n¸ö¸öÊýÒÔÏÂÖ¸¶¨µÄ×Ö·û
{m,} ÕÒѰm¸ö¸öÊýÒÔÉÏÖ¸¶¨µÄ×Ö·û
[] ÕÒѰ·ûºÏ[]ÄÚµÄ×Ö·û
[^] ÕÒѰ²»·ûºÏ[]ÄÚµÄ×Ö·û
[0-9] ÕÒѰ·ûºÏ0µ½9µÄÈκÎÒ»¸ö×Ö·û
[a-z] ÕÒѰ·ûºÏaµ½zµÄÈκÎÒ»¸ö×Ö·û
[^0-9] ÕÒѰ²»·ûºÏ0µ½9µÄÈκÎÒ»¸ö×Ö·û
[^a-z] ÕÒѰ²»·ûºÏaµ½zµÄÈκÎÒ»¸ö×Ö·û
^ ÕÒѰ×Ö·û´®¿ªÍ·µÄ×Ö·û
$ ÕÒѰ×Ö·û´®½áβµÄ×Ö·û
\d ÕÒѰһ¸ödigit(Êý×Ö)µÄ×Ö·û,ºÍ[0-9]Óï·¨Ò»Ñù
\d+ ÕÒѰһ¸ödigit(Êý×Ö)ÒÔÉϵÄ×Ö·û´®,ºÍ[0-9]+Óï·¨Ò»Ñù
\D ÕÒѰһ¸önon-digit(·ÇÊý×Ö)µÄ×Ö·û,ºÍ[^0-9]Óï·¨Ò»Ñù
\D+ ÕÒѰһ¸önon-digit(·ÇÊý×Ö)ÒÔÉϵÄ×Ö·û´®,ºÍ[^0-9]+Óï·¨Ò»Ñù
\w ÕÒѰһ¸öÓ¢ÎÄ×Öĸ»òÊÇÊýÖµµÄ×Ö·û,ºÍ[a-zA-Z0-9]Óï·¨Ò»Ñù
\w+ ÕÒѰһ¸öÒÔÉÏÓ¢ÎÄ×Öĸ»òÊÇÊýÖµµÄ×Ö·û´®,ºÍ[a-zA-Z0-9]+Óï·¨Ò»Ñù
\W ÕÒѰһ¸ö·ÇÓ¢ÎÄ×Öĸ»òÊÇÊýÖµµÄ×Ö·û,ºÍ[^a-zA-Z0-9]Óï·¨Ò»Ñù
\W+ ÕÒѰһ¸öÒÔÉÏ·ÇÓ¢ÎÄ×Öĸ»òÊÇÊýÖµµÄ×Ö·û´®,ºÍ[^a-zA-Z0-9]+Óï·¨Ò»Ñù
\s ÕÒѰһ¸ö¿Õ°×µÄ×Ö·û,ºÍ[\n\t\r\f]Ò»Ñù
\s+ ÕÒѰһ¸öÒÔÉϿհ׵Ä×Ö·û,ºÍ[\n\t\r\f]+Ò»Ñù
\S ÕÒѰһ¸ö·Ç¿Õ°×µÄ×Ö·û,ºÍ[^\n\t\r\f]Ò»Ñù
\S+ ÕÒѰһ¸öÒÔÉϷǿհ׵Ä×Ö·û,ºÍ[^\n\t\r\f]+Ò»Ñù
\b ÕÒѰһ¸ö²»ÒÔÓ¢ÎÄ×Öĸ¡¢ÊýֵΪ±ß½çµÄ×Ö·û´®
\B ÕÒѰһ¸öÒÔÓ¢ÎÄ×Öĸ¡¢ÊýֵΪ±ß½çµÄ×Ö·û´®
a|b|c ÕÒµ½·ûºÏa×Ö·û»òÊÇb×Ö·û»òÊÇc×Ö·ûµÄ×Ö·û´®
abc ÕÒµ½Ò»¸öº¬ÓÐabcµÄ×Ö·û´®
(pattern) ()Õâ¸ö·ûºÅ»á¼ÇÒäËùÕÒѰµ½µÄ×Ö·û´®,ÊÇÒ»¸öºÜʵÓõÄÓï·¨
µÚÒ»¸ö()ÄÚËùÕÒµ½µÄ×Ö·û´®±ä³É$1Õâ¸ö±äÁ¿»òÊÇ\1±äÁ¿
µÚ¶þ¸ö()ÄÚËùÕÒµ½µÄ×Ö·û´®±ä³É$2Õâ¸ö±äÁ¿»òÊÇ\2±äÁ¿
ÒÔ´ËÀàÍÆ,±ÊÕß»áÔÚÏÂÒ»¸öС½ÚÖÐÏêϸ½éÉÜËüµÄÓ÷¨
/pattern/i iÕâ¸ö²ÎÊýÊÇ´ú±íºöÂÔÓ¢ÎÄ´óСлµÄÒâ˼,Ò²¾ÍÊÇÔÚÕÒѰ×Ö·û´®µÄʱºò,²»»áÈ¥¿¼ÂÇÓ¢ÎĵĴóСд
\ Èç¹ûÒªÔÚpatternģʽÖÐÕÒѰһ¸öÓÐÌØÊâÒâÒåµÄ×Ö·û,ÒªÔÚÕâ¸ö×Ö·ûǰ¼ÓÉÏ\Õâ¸ö·ûºÅ,ÕâÑù²Å»áÈÃÕâ¸öÌØÊâ×Ö·ûʧЧ

¡¡¡¡¶þ¡¢ÎÄ×Ö´¦Àíģʽ(RegularExpression)µÄ¼òµ¥·¶Àý
¡¡¡¡¿´ÁËÉÏһС½ÚÎÄ×Ö´¦Àíģʽ¡´RegularExpression)Ö®ºó,³õѧÕß¶ÔÓÚÕâ¸öÓï·¨µÄÓ¦ÓÿÉÄÜ »¹²»ÊǺÜÇå³þ,ËùÒÔ±ÊÕß»áÔÚÕâһС½ÚÖÐ,¾Ù³öһЩÔÚÎÄ×Ö´¦ÀíģʽÖг£Óõķ¶Àý¸ø´ó¼ÒÇÆÇÆ£º
·¶¡¡Àý ˵¡¡¡¡Ã÷
/perl/ ÕÒµ½º¬ÓÐperlµÄ×Ö·û´®
/^perl/ ÕÒµ½¿ªÍ·ÊÇperlµÄ×Ö·û´®
/perl$/ ÕÒµ½½áβÊÇperlµÄ×Ö·û´®
/c|g|i/ ÕÒµ½º¬ÓÐc»òg»òiµÄ×Ö·û´®
/cg{2,4}i/ ÕÒµ½cºóÃæ¸ú×Å2¸öµ½4¸ög,ÔÙ¸ú×ÅiµÄ×Ö·û´®
/cg{2}i/ ÕÒµ½cºóÃæ¸ú×Å2¸ög,ÔÙ¸ú×ÅiµÄ×Ö·û´®
/cg*i/ ÕÒµ½cºóÃæ¸ú×Å0¸ö»ò¶à¸ög,ÔÙ¸ú×ÅiµÄ×Ö·û´®,Èçͬ/cg{0,}i/
/cg+i/ ÕÒµ½cºóÃæ¸ú×ÅÒ»¸öÒÔÉϵÄg,ÔÙ¸ú×ÅiµÄ×Ö·û´®,Èçͬ/cg{1,}i/
/cg?i/ ÕÒµ½cºóÃæ¸ú×Å0¸ö»òÊÇÒ»¸ög,ÔÙ¸ú×ÅiµÄ×Ö·û´®,Èçͬ/cg{0,1}i/
/c.i/ ÕÒµ½cºóÃæ¸ú×ÅÒ»¸öÈÎÒâ×Ö·û,ÔÙ¸ú×ÅiµÄ×Ö·û´®
/c..i/ ÕÒµ½cºóÃæ¸ú×Ŷþ¸öÈÎÒâ×Ö·û,ÔÙ¸ú×ÅiµÄ×Ö·û´®
/[cgi]/ ÕÒµ½·ûºÏÓÐÕâÈý¸ö×Ö·ûÈÎÒâÒ»¸öµÄ×Ö·û´®
/[^cgi]/ ÕÒµ½Ã»ÓÐÓÐÕâÈý¸ö×Ö·ûÈÎÒâÒ»¸öµÄ×Ö·û´®
/\d/ ÕÒѰ·ûºÏÊýÖµµÄ×Ö·û´®
¿ÉÒÔʹÓÃ/\d+/À´±íʾһ¸ö»òÊǸö¶à¸öÊýÖµµÄ×Ö·û´®
/\D/ ÕÒѰ·ûºÏ²»ÊÇÊýÖµµÄ×Ö·û´®
¿ÉÒÔʹÓÃ/\D+/À´±íʾһ¸ö»òÊǸö¶à¸ö·ÇÊýÖµµÄ×Ö·û´®
/\w/ ÕÒѰ·ûºÏÓ¢ÎÄ×Öĸ¡¢ÊýÖµµÄ×Ö·û´®
¿ÉÒÔʹÓÃ/\w+/À´±íʾһ¸ö»òÊǸö¶à¸öÓ¢ÎÄ×Öĸ¡¢ÊýÖµµÄ×Ö·û´®
/\W/ ÕÒѰ·ûºÏ·ÇÓ¢ÎÄ×Öĸ¡¢ÊýÖµµÄ×Ö·û´®
¿ÉÒÔʹÓÃ/\W+/À´±íʾһ¸ö»òÊǸö¶à¸ö·ÇÓ¢ÎÄ×Öĸ¡¢ÊýÖµµÄ×Ö·û´®
/\s/ ÕÒѰ·ûºÏ¿Õ°×µÄ×Ö·û´®
¿ÉÒÔʹÓÃ/\s+/À´±íʾһ¸ö»òÊǸü¶à¸ö¿Õ°××Ö·ûµÄ×Ö·û´®
/\S/ ÕÒѰ·ûºÏ²»Êǿհ××Ö·ûµÄ×Ö·û´®
¿ÉÒÔʹÓÃ/\S+/À´±íʾһ¸ö»òÊǸü¶à²»Êǿհ׵Ä×Ö·ûµÄ×Ö·û´®
/\*/ ÕÒѰ·ûºÏ*Õâ¸ö·ûºÅµÄ×Ö·û´®,ÒòΪ*ÔÚÎÄ×Ö´¦ÀíģʽÖÐÓÐËüµÄÌØÊâÒâ˼,ËùÒÔÒªÔÚÕâ¸öÌØÊâ·ûºÅǰ¼ÓÉÏ\Õâ¸ö·ûºÅ,ÕâÑù²Å»áÈÃÕâ¸öÌØÊâ×Ö·ûʧЧ
/abc/i ÕÒѰ·ûºÏabcµÄ×Ö·û´®¶øÇÒ²»¿¼ÂÇÕâЩ·ûºÏ×Ö·û´®µÄ´óСд

¡¡¡¡Èý¡¢ÎÄ×Ö´¦Àíģʽ(Regular Expression)Ïà¹ØµÄÔËËã·û¼°º¯Êý
¡¡¡¡ÔÚperl³ÌÐòд×÷Öг£»áÓõ½=~ºÍ!~ÕâÁ½¸öÔËËã·û¼°sºÍtrÕâ¶þ¸öº¯ÊýÀ´ºÍÎÄ×Ö´¦Àí ģʽ/pattern/´îÅä¶ø³ÉÒ»¸öÔËËãʽ,Èç¹ûÄܹ»»îÓÃÕâЩָÁîµÄ»°,¾Í¿ÉÒÔºÜÇáÒ×µØÀ´´¦ ÀíһЩ×Ö·û´®£¬µ±È»ÔÚCGI³ÌÐòÉè¼ÆÖÐÒ²¾Í¸üÄܵÃÐÄÓ¦ÊÖÁË¡£ÏÖÔÚ¾ÍÈÃ×÷ÕßÀ´½éÉÜÕâЩ ÔËËã·û¼°º¯ÊýµÄÓ÷¨£º
Ö¸Áî: /pattern/ÎÄ×ÖÔËËã
˵Ã÷:Èç¹ûÔÚÎÄ×ÖÔËËãÖÐûÓÐʹÓÃ=~»òÊÇ!~ÔËËã·ûÖ¸¶¨Ò»¸ö×Ö·û´®À´×öÔËËãµÄ»°, ¾Í»á ʹÓÃÄÚ¶¨µÄÊä³ö±äÁ¿$_À´×ö/pattern/ÎÄ×ÖÔËËã¡£
·¶ÀýÒ»:
¡¡¡¡$string="chmod7llcgi";
¡¡¡¡$string=~/(\w+)\s+(\d+)/;
¡¡¡¡µÚÒ»¸ö(\w+)ÊÇ´ú±íÕÒѰÊý¸ö×Öĸ£¬²¢½«ËùÕÒµ½µÄ×Ö·û´®Ö¸Åɸø$lÕâ¸ö±äÁ¿,¶ø\s+´ú±í ÕÒѰ¶à¸ö¿Õ°×µÄ×Ö·û´®,×îºó(\d+)´ú±íÕÒѰÊý¸öÊýÖµ,²¢½«ËùÕÒµ½µÄ×Ö·û´®Ö¸Åɸø$2Õâ ¸ö±äÁ¿¡£ËùÒÔ$l="chmod",$2=71l,µ«ÊÇ$string»¹ÊǵÈÓÚÔ­À´µÄ×Ö·û´®,ûÓиı䡣
·¶Àý¶þ:
¡¡¡¡$_="chmod71lcgi";
¡¡¡¡/(\w+)\s+(\d+)/;
¡¡¡¡ÒòΪÊǰÑ×Ö·û´®Ö¸¶¨¸ø$_Õâ¸ö±äÁ¿,ËùÒÔ¿ÉÒÔ²»ÓÃ=~Õâ¸öÔËËã·û¾Í»áµÃµ½$l="chmod", $2=711;¶øÇÒ$_»¹ÊǵÈÓÚÔ­À´µÄ×Ö·û´®,ûÓиı䡣
·¶ÀýÈý:
¡¡¡¡$string="chmod71lcgi";
¡¡¡¡@list=split(/\s+/,$string);
¡¡¡¡ÒÔÒ»¸ö»òÊǶà¸ö¿Õ°××Ö·ûÀ´·Ö¸î$stringÕâ¸ö×Ö·û´®,ÕâÊÇÒ»¸öºÜ³£ÓõÄÓï·¨¡£´Ëʱ
¡¡¡¡@list=("chmod","7ll","cgi");
Ö¸Áî: =~ÏàÅäÔËËã·û
˵Ã÷:ÕâÊÇPerlÓïÑÔÖÐÌØÓеÄÓï·¨,ͨ³£»áºÍÎÄ×Ö´¦ÀíģʽÀ´×÷ÔËËã¡£
·¶Àý:
¡¡¡¡print"ÇëÊäÈëÒ»¸ö×Ö·û´®!\n";
¡¡¡¡$string=<STDIN>;¡¡#<STDIN>´ú±í±ê×¼ÊäÈë,»áÈÃʹÓÃÕßÊäÈëÒ»×Ö·û´®
¡¡¡¡chop($string);¡¡¡¡#½«$string×îºóÒ»¸ö»»ÐеÄ×Ö·û\nɾ³ýµô
¡¡¡¡if($string=~/cgi/){
¡¡¡¡¡¡¡¡print"ÊäÈëµÄ×Ö·û´®ÖÐÓÐcgiÕâ¸ö×Ö·û´®!\n";
¡¡¡¡}
¡¡¡¡Èç¹ûÊäÈëµÄ×Ö·û´®Öк¬ÓÐcgiÕâ¸ö×Ö·û´®µÄ»°,¾Í»áÏÔʾ³öÕâ¸öÐÅÏ¢¡£
Ö¸Áî:!~²»ÏàÅäÔËËã·û
˵Ã÷:ÕâÒ²ÊÇPerlÓïÑÔÖÐÌØÓеÄÓï·¨,ͨ³£»áºÍÎÄ×Ö´¦ÀíģʽÀ´×÷ÔËËã¡£
·¶Àý:
¡¡¡¡print"ÇëÊäÈëÒ»¸ö×Ö·û´®!\n";
¡¡¡¡$string=<STDIN>;¡¡#<STDIN>´ú±í±ê×¼ÊäÈë,»áÈÃʹÓÃÕßÊäÈëÒ»×Ö·û´®
¡¡¡¡chop($string);¡¡¡¡#½«$stdng×îºóÒ»¸ö»»ÐеÄ×Ö·û\nɾ³ýµô
¡¡¡¡if($string!~/cgi/){
¡¡¡¡¡¡¡¡print"ÊäÈëµÄ×Ö·û´®ÖÐûÓÐcgiÕâ¸ö×Ö·û´®!\n";
¡¡¡¡}
¡¡¡¡Èç¹ûÊäÈëµÄ×Ö·û´®ÖÐûÓк¬ÓÐcgiÕâ¸ö×Ö·û´®µÄ»°,¾Í»áÏÔʾ³öÕâ¸öÐÅÏ¢¡£
Ö¸Áî:trת»»º¯Êý
Óï·¨:tr/SEARCHLIST/REPLACELIST/
¡¡¡¡ÆäÖÐSEARCHLISTÊÇҪת»»µÄ×Ö·û,REPLACELISTÊÇת»»³ÉºÎÖÖ×Ö·û¡£
˵Ã÷:tr(translate)¾ÍÊÇת»»µÄÒâ˼,»á°Ñ·ûºÏת»»µÄ×Ö·ûת»»³ÉҪת»»µÄ×Ö·û¡£
·¶ÀýÒ»:
¡¡¡¡$string="test1ng";
¡¡¡¡$string=~tr/et/ET/;#´Ëʱ$string="TEsTing";
¡¡¡¡$string=~tr/a-z/A-Z/;#´Ëʱ$string="TESTING";
·¶Àý¶þ:
¡¡¡¡$string="CGI+Perl";
¡¡¡¡$string=~tr/+//;#´Ëʱ$string="CGI Perl";
¡¡¡¡ÔÚ´«ËÍCGIÊý¾ÝµÄʱºò»áÏȽ«Êý¾Ý±àÂë,ÆäÖлὫ¿Õ°×µÄ×Ö·ûת³É+Õâ¸ö×Ö·û,ËùÒÔ ÔÚ½âÂëµÄʱºòÒª°Ñ+Õâ¸ö×Ö·û»¹Ô­³É¿Õ°×µÄ×Ö·û¡£
Ö¸Áî:sÈ¡´úº¯Êý
Óï·¨:s/PATTERN/REPLACE/eg
¡¡¡¡ÆäÖÐPATTERNÊÇÎÄ×Ö´¦Àí(Regular Expression)µÄģʽ,REPLACEÊÇ´ú±íÈ¡´ú³ÉºÎÖÖÎÄ×Ö Ä£Ê½¡£¶øgÊÇÕâ¸öº¯Êý×î³£ÓõIJÎÊý,´ú±íÒª°ÑËùÓзûºÏÎÄ×ÖģʽµÄ×Ö·û´® È«²¿È¡´ú,Èç¹ûÊ¡ÂÔÕâ¸ö²ÎÊýµÄ»°,Ôòֻȡ´úÒ»¸ö·ûºÏÎÄ×ÖģʽµÄ×Ö·û´®;¶ø¼ÓÉÏeÕâ ¸ö²ÎÊýÊÇ´ú±íÒª½«REPLACEµÄ²¿·Öµ±³ÉÒ»¸öÔËËãʽ,Èç¹ûûÓÐÕâ¸öÐèÒªµÄ»°,¾Í²»ÓÃ¼Ó ÉÏÕâ¸ö²ÎÊýÁË¡£
˵Ã÷:½«·ûºÏÎÄ×Ö´¦ÀíģʽµÄ×Ö·û´®È¡´ú³ÉΪҪȡ´úµÄ×Ö·û´®¡£
·¶ÀýÒ»:
¡¡¡¡$string="i;love;perl";
¡¡¡¡$string=~s/:/*/£º¡¡¡¡¡¡#´Ëʱ$string="i*love:perl";
¡¡¡¡$string=~s/:/*/g;¡¡¡¡¡¡#´Ëʱ$string="i*love*perl";
¡¡¡¡$stiing=~s/*/+/g;¡¡¡¡¡¡#´Ëʱ$string="i+love+perl";
¡¡¡¡$string=~s/+//g£º¡¡¡¡¡¡#´Ëʱ$string="i love perl";
¡¡¡¡ÉÏÒ»ÐÐÒ²¿Éд³É$string=~tr/+//;Ч¹û¶¼»áÒ»ÑùŶ!
¡¡¡¡$string=~s/per1/cgi/;¡¡#´Ëʱ$string="i love cgi";
·¶Àý¶þ:
¡¡¡¡$string="i love per";
¡¡¡¡$string=~s/(love)/<$1>/;
¡¡¡¡µÚÒ»¸ö()ÄÚËùÕÒµ½µÄ×Ö·û´®±ä³É$1,ÔÚÕâ¸ö·¶ÀýÖÐ,»á°Ñ±äÁ¿loveÕâ¸ö×Ö·û´®±ä³É <love>,´Ëʱ$string="i<love>perl";

¡¡¡¡$string="i love per1";
¡¡¡¡$string=~s/(i)(perl)/<$1><$2>/;
¡¡¡¡ÔÚÕâ¸ö·¶ÀýÖÐ,»á°Ñi±ä³É<i>,perl±ä³É<perl>´Ëʱ$string="<perl>love<i>";

¡¡¡¡$striag="i love per1";
¡¡¡¡$string=~s/(\w+)/<$1>/g;
¡¡¡¡(\w+)´ú±íÕÒѰ·ûºÏÒ»¸ö»òÊǶà¸öÓ¢ÎÄ×Ö·û»òÊÇÊýÖµµÄ×Ö·û´®,Ö®ºóÔÙ½«ÕÒµ½µÄ×Ö ·û´®Éè³É$l¡£ÒòΪ¼ÓÉÏgÕâ¸ö²ÎÊý,ËùÒÔ»áÕÒµ½×Ö·û´®ÖеÄÕâÈý¸öÓ¢Îĵ¥×Ö, È»ºó ÔÙ°ÑÕâÈý¸öµ¥×Ö·Ö±ð¼ÓÉÏ<>Õâ¸ö·ûºÅ,´Ëʱ$string="<i><love><perl>";
·¶ÀýÈý:
¡¡¡¡$string="ww22cgi44";
¡¡¡¡$string=~s/(\d+)/$1*2/e;
¡¡¡¡(\d+)´ú±íÒªÕÒѰ$stringÖÐÒ»¸ö»òÊǶà¸öÊýÖµµÄ×Ö·û´®,ÔÙ½«ÕÒµ½µÄ×Ö·û´®Éè³É $1¡£¼ÓÉϲÎÊýeÊÇ´ú±íÒª°Ñ$l*2µ±×÷ÊÇÒ»¸öÔËËãʽ,ËùÒÔ$string="www44cgi44";
¡¡¡¡$string="www22cgi44";
¡¡¡¡$string=~s/(\d+)/$1*2/eg;
¡¡¡¡¼ÓÉϲÎÊýe,ËùÒÔ»á°Ñ$1*2µ±×÷ÊÇÒ»¸öÔËËãʽÀ´¿´, ¼ÓÉϲÎÊýg¾Í»á°ÑÈ«²¿·ûºÏÊý ÖµµÄ×Ö·û´®¾­¹ýÔËËãʽÔËËãÖ®ºóÔÙ°ÑËüÈ¡´ú,ËùÒÔ$string="www44cgi88";
·¶ÀýËÄ:
¡¡¡¡¼ÙÉèÔ­±¾µÄ×Ö·û´®ÊÇ$value="Èý°Ë!",¾­CGIÊý¾Ý±àÂëÖ®ºó,Õâ¸ö×Ö·û´®¾Í»á±ä³É $value="%A4T%A4K%21"¡£ÒÔÏÂÊÇÒ»¸ö½âÂëµÄʾ·¶³ÌÐò:
¡¡¡¡$value="%A4T%A4K%2l"£»
¡¡¡¡$value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($l))/eg;
¡¡¡¡ÔÚ´«ËÍCGIÊý¾ÝµÄʱºò»á°ÑÊý¾Ý±àÂë,ÆäÖÐ»á½«ÌØÊâ×Ö·û»òÊÇÖÐÎÄ×Ö·û±àÂë³ÉÒÔ% ¿ªÍ·µÄÁ¬ÐøÁ½¸öÊ®Áù½øÖÆÊýµÄ×Ö·û´®,ËùÒÔÒªÓÃsÕâ¸öº¯ÊýÀ´ÕÒѰÕâ¸öÒÔ%¿ªÍ·µÄ ×Ö·û´®¡£ÎªÁËÒª°ÑÕÒµ½µÄ×Ö·û´®ÔÙ×ö½âÂëµÄ´¦Àí, ËùÒÔÒªÔÚ%Õâ¸ö·ûºÅÖ®ºó¼ÓÉÏ ()Õâ¸ö·ûºÅ, ±íʾ»á°ÑÕÒµ½µÄ×Ö·û´®¼ÇÒäÆðÀ´²¢Ö¸¶¨¸ø$1Õâ¸ö±äÁ¿,¶øÇÒÒªÔÚ() ÖмÓÉÏ´ú±íÊÇÁ¬ÐøÁ½¸öÊ®Áù½øÖÆÊýÖµµÄÎÄ×Ö´¦Àíģʽ(Regular Expression),Ò² ¾ÍÊÇ[a-fA-F0-9][a-fA-F0-9]¡£ÔÙÓÃhexÕâ¸öº¯Êý($1ÊÇ´ú±í·ûºÏµÄ×Ö·û´®)°ÑÊ® Áù½øÖÆÊýֵת³ÉÊ®½øÖƵÄÂë,Ö®ºóÔÙÓÃpackÕâ¸öº¯Êý(ÒÔCΪ²ÎÊý,ÊÇ´ú±í unsigned char valueµÄÒâ˼)°ÑÕâ¸öÊ®½øÖÆÂ뻹ԭ³ÉÔ­À´µÄ×Ö·û´®¡£×îºó¾Í»á °ÑÕâ¸ö×Ö·û´®½âÂë³É$value="Èý°Ë!"¡£ÖµµÃÒ»ÌáµÄÊÇÒ²¿ÉÒÔ°ÑÕâ¸ö½âÂëµÄ³ÌÐò д³É:

¡¡¡¡$value=~s/%(..)/pack("C",hex($l))/eg;

¡¡¡¡ÔÚ´ËÌṩ¸ø¶ÁÕ߲ο¼¡£


6.4 Perl for Win32 ¼ò½é

¡¡¡¡PerlÔ­±¾Ö»ÄÜÔÚUnixϵͳÖÐʹÓÃ,ÕýÒòΪ¹¦ÄÜÇ¿´ó,ËùÒÔÕ⼸Äê¾ÍÓÐÈ˰ÑËüÒÆÖ²µ½¸÷ÖÖ ²Ù×÷ϵͳÉÏ¡£µ½Ä¿Ç°ÎªÖ¹,ÒѾ­¿ÉÒÔÔÚUnix¡¢Linux¡¢FreeBSD¡¢Windows95¡¢WindowsNT¡¢ dos¡¢0S2¡¢MacitoshµÈ²Ù×÷ϵͳÖÐʹÓÃPerlÓïÑÔÁË¡£Ê¹ÓÃÕß¿ÉÒÔÔÚWindows32λµÄϵͳ Èç:Windows95¡¢WindowsNTµÈ²Ù×÷ϵͳÖÐʹÓÃPerlÓïÑÔÀ´Ð´CGIÓ¦ÓóÌÐò¡£
¡¡¡¡ÔÚWindows95¡¢WindowsNTÕâЩ32λµÄϵͳÏÂʹÓÃPerlÀ´Ð´CGIÓ¦ÓóÌÐò֮ǰ,ÒªÏȰ²×° Ò»¸ö½ÐPerl for Win32µÄÈí¼þ¡£Õâ¸öÈí¼þÔ­±¾×îÏÈÊÇÔÚWindows NTϵͳÏÂʹÓõÄ,ËùÒÔ Ò²ÓÐÈ˽«Õâ¸öÈí¼þ³ÆÖ®ÎªNT Perl¡£Ëæ×Ű汾µÄ¸ÄÁ¼ÒÔ¼°Windows95²Ù×÷ϵͳµÄ³öÏÖ,ÏÖ ÔÚÒ²¿ÉÒÔÔÚWindows95²Ù×÷ϵͳÖÐʹÓÃPerlÓïÑÔÁË,ÔÚ±¾ÊéµÚ8ÕÂÖн«½éÉÜÈçºÎÔÚWindows95¡¢ Windows NTϵͳÖа²×°PerlÖ÷³ÌÐò,²¢»áÔÚµÚ8ÕÂÖнéÉÜÕâЩϵͳµÄCGI³ÌÐòд×÷ʵÀý¡£