°Ù¿Æ½âÊÍ
Ŀ¼·Perl¼ò½é·Perl µÄÓï·¨·º¯Êý·PerlµÄÓ¦Ó÷¾ºÕù¶ÔÊÖ·PerlµÄÀúÊ··×¢ÊÍ·²Î¼û·ÍⲿÁ´½Ó PerlÊÇÒ»Öֽű¾ÓïÑÔ¡£ ×î³õµÄÉè¼ÆÕßΪÀÀÎÖ¶û£¨Larry Wall£©£¬ËüÓÚ1987Äê12ÔÂ18ÈÕ·¢±í¡£Perl½èÈ¡ÁËC¡¢sed¡¢awk¡¢shell s cripting ÒÔ¼°ºÜ¶àÆäËû±à³ÌÓïÑÔµÄÌØÐÔ¡£ÆäÖÐ×îÖØÒªµÄÌØÐÔÊÇËûÄÚ²¿¼¯³ÉÁËÕýÔò±í´ïʽµÄ¹¦ÄÜ£¬ÒÔ¼°¾Þ´óµÄµÚÈý·½´úÂë¿â CPAN¡£ Perl¼ò½é PerlÔÃûpearl£¬µ«ÊÇÔÚÕâ¸öÓïÑÔ¹Ù·½·¢±íÇ°£¬ÀÀÎÖ¶û·¢ÏÖÒѾÓиö±à³ÌÓïÑÔ¡°pearl¡±£¬±ã½«Õâ¸ö±à³ÌÓïÑÔµÄÃû×ָijÉPerl¡£¶ÔÓÚPerlÕâËĸö×Öĸ£¬ÓÐһЩ½âÊÍ£¬°üÀ¨³äÂúÓÄĬ¸ÐµÄ¡°Pathologically Eclectic Rubbish Lister¡±¡£¡°Practical Extraction and Report Language¡±Ôø¾³öÏÖÔںܶàÓйØPerlµÄ×ÊÁÏÀ°üÀ¨¹Ù·½µÄÖ÷Ò³¡£²»¹ýÊÂʵÉÏÕâ¸ö³¤Ãû×ÖÊǺóÀ´´Õ³öÀ´µÄ¡£ËüµÄÃû×ÖµÚÒ»¸ö×Öĸ´óд£¨Perl£©Ê±¾ÍÖ¸Õâ¸ö±à³ÌÓïÑÔ£¬ÎÞ´óд×Öĸ£¨perl£©Ê±¾ÍÖ¸ËüµÄÖ±ÒëÆ÷¡£½«Perlд³É¡°PERL¡±ÊDz»Êʵ±µÄ£¬ÒòΪËü²¢·ÇÒ»¸öËõд×Ö¡£ Perl ÓïÑÔµÄÖÐÐÄ˼Ïë Perl ÓïÑÔµÄÖÐÐÄ˼Ïë¿ÉÒÔ¼¯³ÉΪһ¾ä»°¡°TMTOWTDI¡±£º <blockquote class="toccolours" style="float: none; padding: 0.3em 1em;"> There&££39;&££39;s More Than One Way To Do It.£¨²»Ö»Ò»ÖÖ·½·¨À´×öÕâ¼þÊ¡££© </blockquote> Perl µÄ×÷Õß Larry Wall ½¨Òé¿ÉÒÔ°ÑÕâ¸öËõд´ÊÄî³É¡°Tim Toady¡±¡£ ÁíÒ»¸ö Perl ³ÌÐòÔ±³£³£ÏëÆðµÄ Perl Ë×ÓïÊÇ£º <blockquote class="toccolours" style="float: none; padding: 0.3em 1em;"> Easy things should be easy, and hard things should be possible. </blockquote> PerlµÄÂæÍÕͼ°¸ PerlÂæÍÕÊÇÅ·À³ÀñýÌ壨O&££39;&££39;Reilly Media£©Éè¼Æ¸øPerl±à³ÌÓïÑÔµÄͼ±ê¡£ËüÒ²ÊÇÒ»Öֺڿ͵ÄÏóÕ÷£¬³öÏÖÔÚijЩT-shirtºÍÆäËûÒ·þ±êÇ©ÉÏ¡£ Óŵã ΪÁËʵÏÖÕâÑùµÄÄ¿±ê£¬²¢ÇÒÓÖÒòΪ Larry Wall ±¾ÈËÒ²ÊÇÒ»¸öÓïÑÔѧ¼Ò£¬ËûÉè¼ÆPerlÓïÑÔʱʹÓÃÁ˺ܶàÓïÑÔѧµÄ˼ά¡£Ïà±È C¡¢Pascal ÕâÑùµÄ¡°¸ß¼¶¡±ÓïÑÔ¶øÑÔ£¬PerlÓïÑÔÖ±½ÓÌṩ·ºÐͱäÁ¿¡¢¶¯Ì¬Êý×é¡¢Hash±íµÈ¸ü¼Ó±ã½ÝµÄ±à³ÌÔªËØ¡£Perl ¾ßÓж¯Ì¬ÓïÑÔµÄÇ¿´óÁé»îµÄÌØÐÔ£¬²¢ÇÒ»¹´ÓC/C++¡¢Basic¡¢Pascal µÈÓïÑÔÖзֱð½è¼øÁËÓï·¨¹æÔò£¬´Ó¶øÌṩÁËÐí¶àÈßÓàÓï·¨¡£Ê¹µÃ³ÌÐòÔ±¿ÉÒÔºöÂÔ¼ÆËã»úÄÚ²¿×ÊÁÏ´æ´¢¡¢ÀàÐÍ¡¢´¦Àí·½·¨¡¢ÔËËã¹æÔò¡¢ÉõÖÁÄÚ´æÔ½½çµÈµÈµÄϸ½Ú£¬¶ø½«Ë¼¿¼ÖÐÐÄ·ÅÔÚËùÐèÒªµÄ³ÌÐòÂß¼ÉÏ¡£¾ÍÕâÒ»µã¶øÑÔ£¬ºÜ¶à Perl ³ÌÐòÔ±ÈÏΪĿǰֻÓÐ Perl¡¢PythonµÈ·ºÐÍÓïÑÔ²ÅÄܳÆΪ¡°¸ß¼¶¡±ÓïÑÔ£¬¶ø C¡¢Pascal ÉõÖÁ C++ ÕâЩֻÄܳÆΪ¡°Öи߼¶¡±ÓïÑÔ¶øÒÑ¡£¿ÉÒÔ˵£¬ÔÚͳһ±äÁ¿ÀàÐͺÍÑÚ¸ÇÔËËãϸ½Ú·½Ã棬Perl ×öµÃ±È Python ¸üΪ³öÉ«¡£ ÓÉÓÚ´ÓÆäËûÓïÑÔ´óÁ¿½è¼øÁËÓï·¨£¬Ê¹µÃ´ÓÆäËû±à³ÌÓïÑÔתµ½ Perl ÓïÑԵijÌÐòÔ±¿ÉÒÔѸËÙÉÏÊÖд³ÌÐò²¢Íê³ÉÈÎÎñ£¬ÕâʹµÃ PerlÓïÑÔÊÇÒ»ÃÅÈÝÒ×ÓõÄÓïÑÔ¡£µ«ÎÊÌâÊÇÕâÑùд³öÀ´µÄ¡°ÀàxxÓïÑÔ¡±µÄ Perl ³ÌÐò¶Ô²»ÊìϤÕâÖÖÓïÑԵijÌÐòԱȴÈçͬÌìÊ飬ÕâʹµÃ Perl ÓïÑÔÒ×д²»Ò׶Á¡£ ȱµã Ò²ÕýÊÇÒòΪ Perl µÄÁé»îÐԺ͡°¹ý¶È¡±µÄÈßÓàÓï·¨£¬Ò²Òò´Ë»ñµÃÁË write-only µÄ¡°ÃÀÓþ¡±£¬ÒòΪÐí¶à Perl ³ÌÐòµÄ´úÂëÁîÈËÄÑÒÔÔĶÁ£¬ÊµÏÖÏàͬ¹¦ÄܵijÌÐò´úÂ볤¶È¿ÉÒÔÏà²îÊ®±¶°Ù±¶¡£ µ« Perl ͬÑù¿ÉÒÔ½«´úÂëÊéдµÃÏñ Python »ò Ruby µÈÓïÑÔÒ»ÑùÓÅÑÅ¡£ Perl µÄÓï·¨ Perl µÄ Hello World ³Ìʽ ÏÂÃæÊÇÒ»¸öÔÚ±ê×¼Êä³öÉ豸ÉÏÊä³ö Hello World µÄ¼òµ¥³Ìʽ£¬ÕâÖÖ³Ìʽͨ³£×÷Ϊ¿ªÊ¼Ñ§Ï°±à³ÌÓïÑԵĵÚÒ»¸ö·¶Àý£º #!/usr/bin/perl print "Hello, world! "; Õâ¸ö³ÌÐò½«Êä³öÒ»ÐÐ×Ö·û´®£º¡°Hello,world!¡±£¬ÒÔ¼°Ò»¸ö»Ø³µ»»Ðзû¡£ ±äÁ¿ Perl ÊÇÒ»ÖÖ ·ºÐÍÓïÑÔ£¬»»¾ä»°Ëµ£¬ÔÚÓïÑÔ²ãÃæÉÏ£¬Perl ºÍ´ó¶àÊý±à³ÌÓïÑÔ²»Í¬£¬²»°Ñ±äÁ¿·Ö³ÉÕûÊý¡¢×Ö·û¡¢¸¡µãÊýµÈµÈ£¬¶øÖ»ÓÐÒ»ÖÖÄܽÓÊܸ÷ÖÖÀàÐÍÊý¾ÝµÄ¡°·ºÐÍ¡±±äÁ¿¡£PerlµÄ±äÁ¿ÒÔ$×Ö·û¿ªÍ·¡£ÀýÈç<tt>$a=5;</tt><tt>$b="Hello"</tt>;<tt>$c=3.2;</tt>¶¼ÊǺϷ¨µÄ Perl Óï¾ä¡£ PerlÖи÷ÖÖ±äÁ¿µÄÔËËãÒ²ºÜ×ÔÓÉ£¬ÊýºÍº¬ÓÐÊýµÄ×Ö·û´®ÊǵÈЧµÄ£¬¿ÉÒÔ°ÑÊý×Ö×Ö·û´®²ÎÓëÊýѧ¼ÆË㣬Ҳ¿ÉÒÔ·´Ö®£¬ÈÃÊý×Ö²ÎÓë×Ö·û´®µÄ¹¹³ÉºÍ²Ù×÷¡£ ³ýµ¥¸ö±äÁ¿£¨Perl ³ÆΪ Scalar£©Ö®Í⣬Perl »¹ÓÐÁ½ÖÖ¼¯ºÏÀàÐÍ£¬·Ö±ðÊÇÊý×飨Array£¬ÓÃ@×Ö·û¿ªÍ·£©ºÍ¹ØÁªÊý×飨Associative array£¬»òÕß³ÆΪHash£¬ÓÃ%¿ªÍ·¡£ÀàËÆ C++ µÄ STL map ºÍ Python µÄ Dictionary£©¡£Êý×é¿ÉÒÔÄÚº¬ÈÎÒâ¿É±äÊýÄ¿µÄ±äÁ¿¡£¶øHash±í£¬Ôò¿ÉÒÔÔÚ±äÁ¿Ö®¼ä½¨Á¢Ò»Ò»Ó³É䣬¾ÍÏñ×ÖµäÒ»Ñù£¬¿ÉÒ԰Ѳ»Í¬µÄ±äÁ¿°´ÕÕËûÃǵÄÂß¼¹Øϵ×éÖ¯ÆðÀ´¡£ ÅжÏÓï¾ä ÒòΪPerl´óÁ¿µÄ´´ÔìÈßÓàµÄÓï·¨£¬²¢ÇÒ´ÓÆäËûÓïÑÔÖдóÁ¿µÄ½è¼øÓï·¨£¬Ê¹µÃPerlµÄÓï·¨¼«Æä·á¸»ºÍÁé»î¡£Perl¹²ÓÐÏÂÁм¸ÖÖÅжÏÓï¾ä£º <tt>if</tt>Ä£¿é if ($hour > 22) { print "should sleep... "; } <tt>if</tt>Óï¾ä print "hello" if $guest >= 1; <tt>unless</tt>Ä£¿é unless ($credit > 100) { print "You can not graduate! "; } <tt>unless</tt>Óï¾ä print "eat " unless $food == 0; ÓÉÓÚÂß¼Ëã×ÓµÄ×÷Ó㬻¹¿ÉÒÔд³ö²»Óùؼü×Ö<tt>if</tt>»ò<tt>unless</tt>µÄÅжÏÓï¾ä£¬Èç³£ÓõĴò¿ªÎļþÓï¾ä£º open(DATA, "< $filename") or die "Can&££39;&££39;t open $filename: $! "; Ñ»·Óï¾ä PerlÖеÄÑ»·Óï¾äÒ²ÊǷdz£µÄ·á¸»¡£Ö÷ÒªÓУº Perl×Ô¼ºµÄfor»òÕßforeachÑ»·£º @group = 1 .. 10; for (@group) { print "$_ "; } foreach (@group) { print "$_ "; } ´ÓCÓïÑÔ½è¼øÀ´µÄforÑ»·£º for ($i = 0; $i < 10; $i++) { print "$group[$i] "; } whileÑ»·£º $i=0; while ($i < 10) { print "$group[$i] "; $i++; } do...whileÑ»·£º $i = 0; do { print "$group[$i] "; $i++; } while ($i < 10); untilÑ»·£º $i = 0; until ($i == 10) { print "$group[$i] "; $i++; } ´ÓPASCALÓïÑÔ½è¼øÀ´µÄdo...untilÑ»·£º $i = 0; do { print "$group[$i] "; $i++; } until ($i == 10); ÉõÖÁ»¹ÓÐÀûÓö¯Ì¬ÓïÑÔÌØÐÔ£¬ÓÃmap¹Ø¼ü×ÖÒ²¿ÉÒÔ×öÑ»·£º print map { "$_ " } @group; Æäʵ»¹ÓÐÆäËûµÄÑ»··½Ê½¡£×ܶøÑÔÖ®£¬¾ÍÊÇTMTOWTDI¡£ º¯Êý PerlÌṩÁË¿ÉÒÔÖ±½Óµ÷Óõġ¢ÊýÄ¿ÖÚ¶àµÄº¯Êý¡£¿ÉÒÔ¶ÔÒÔ϶ÔÏó½øÐвÙ×÷£º * Êý×é: chomp, join, keys, map, pop, push, reverse, shift, sort, splice, split, unshift, values * Êý¾Ý¿â: dbmclose, dbmopen * Ŀ¼: chdir, closedir, mkdir, opendir, readdir, rewinddir, rmdir, seekdir, telldir * Îļþ: binmode, chdir, chmod, chown, chroot, close, eof, fnctl, fileno, flock, getc, glob, ioctl, link, lstat, open, print, printf, read, readdir, readlink, rename, rmdir, seek, select, stat, symlink, sysopen, sysread, syswrite, tell, truncate, umask, unlink, utime, write * ×é: endgrent, getgrent, getgrgid, getgrname, getpgrp, setgrent, setpgrp * ¹þÏ£±í(Hash;ësœ?±í): delete, each, exists, keys, values * Ö÷»ú: endhostent, gethostbyaddr, gethostbyname, sethostent * ÊäÈë: getc, read, sysread * ´¦ÀíÆ÷¼äͨѶ: msgctl, msgget, msgrcv, msgsnd, pipe, semctl, semget, semop, shmctl, shmget, shmread, shmwrite * Êýѧ: abs, atan2, cos, exp, hex, int, log, oct, rand, sin, sqrt, srand * ÏûÏ¢¶ÓÁÐ: msgctl, msgget, msgrcv, msgsnd * ÆäËû: bless, defined, do, eval, formline, import, ref, scalar, syscall, tie, tied, undef, untie, wantarray * ÍøÂç: endnetent, getnetbyaddr, getnetbyname, getnetent, setnetent * Êä³ö: die, print, printf, syswrite, warn, write * ¿ÚÁî: endpwent, getpwent, getpwname, getpwuid, setpwent * ½ø³Ì: alarm, die, dump, exec, exit, fork, getlogin, getpgrp, getppid, getpriority, kill, setpriority, sleep, system, times, umask, wait, waitpid * ÐÒé: endprotent, getprotobyname, getprotobynumber, getprotoent, getservbyname, getservbyport, getservent, setprotoent * ÕýÔò±í´ïʽ: grep, pos, quotemeta, reset, split, study * ·¶Î§: caller, local, my * ·þÎñ: endservent, getservbyname, getservbyport, getservent, setservent * Ì×½Ú×Ö: accept, bind, connect, gethostbyaddr, gethostbyname, gethostent, getpeername, getservbyname, getservbyport, getservent, getsockname, getsockopt, listen, recv, select, send, setsockopt, shutdown, socket, socketpair * ×Ö·û´®: chop, chr, crypt, hex, index, join, lc, lcfirst, length, oct, Ord, pack, q, qq, quotemeta, qw, qx, reverse, rindex, split, sprintf, substr, uc, ucfirst, unpack, vec * ʱ¼ä: gmtime, localtime, time * UNIX: chmod, chown, chroot, dump, endgrent, endhostent, endnetent, endprotent, endpwent, endservent, fnctl, fork, getgrent, getgrgid, getgrname, gethostent, getlogin, getnetent, getpgrp, getppid, getpriority, getprotobyname, getprotobynumber, getprotoent, getpwent, getpwname, getpwuid, getservbyname, getservbyport, getservent, ioctl, link, lstat, readlink, select, setgrent, sethostent, setnetent, setpgrp, setpriority, setprotoent, setpwent, setservent, sleep, syscall, times, umask, wait, waitpid ÕâÀï¿ÉÒÔ°´×ÖĸÐò²éÕÒPerlº¯ÊýÓ÷¨¡£ PerlµÄÓ¦Óà PerlÖ÷ÒªÓ¦ÓÃÔÚUnixƽ̨ºÍÍøÒ³ÖÐ(PHP,CGI)¡£PerlÓµÓк£Á¿µÄÄ£¿éÖ§³Ö£¬ÔÚ½â¾öÎÊÌâʱ·Ç³£·½±ã¡£CPANÊÇPerlÄ£¿éµÄ¼¯ÖÐÓª¡£ Perl Data Language Perl Data Language£¨¼ò³ÆPDL£©ÊÇPerlµÄÒ»¸öÍâ½ÓÄ£¿é£¬Ò²ÊǶÔPerl¹¦ÄܵÄÒ»¸öÖØÒªÍØÕ¹¡£ËüʹµÃPerlÓïÑÔ¿ÉÒÔÖ±½Ó¶Ô2ÖÁ¶àάµÄ¾ØÕóÖ±½Ó²Ù×÷£¬½øÐпìËٵľØÕóÔËË㣬Íê³É»ù´¡µÄPerlËù²»ÄÜÍê³ÉµÄÔËË㣬´ó´óÍØÕ¹ÁËPerlµÄÊÊÓ÷¶Î§¡£ËùÒÔPDL±¾ÉíÒ²ÊǺܶàÆäËûÄ£¿éµÄ»ù´¡¡£ ¶øÇÒPDLÌṩÁËÓëºÜ¶àÆäËûÈí¼þ°üµÄ½Ó¿Ú£¬ÀýÈçFFTW£¨Ò»¸ö¿ìËÙ¸µÁ¢Ò¶±ä»»µÄÈí¼þ°ü£©£¬ÓÖ»òÕßÊÇMesa£¨LinuxÉϵÄOpenGLÈýάͼÐÎäÖȾ°ü£©£¬ÕâЩ°üÔÀ´ÍùÍù½öÌṩC/C++ÓïÑÔ½Ó¿Ú¡£ÕâÒ»¹¦ÄÜʹPDL³ÉΪÍØÕ¹Perl¹¦ÄܵÄÒ»¸öÖмä²ã¡£ PerlÊ«¾ ºÍCÓïÑÔÒ»Ñù£¬ÔÚPerl½ç£¬ÄÑÒÔ¶Á¶®µÄ³ÌʽÂë´óÈüÊǸöÓÐÃûµÄ»î¶¯¡£½üËÆÄÑÒÔ¶Á¶®µÄ³ÌʽÂ룬µ«·½Ïò²»Í¬£¬Perl PoetryÊÇ¿ÉÒÔ±»perl±àÒëµÄÊ«¡£ÐµÄÊ«¾Í¨³£»áÔÚPerl MonksÍøÕ¾·¢±í¡£ ÁíÒ»¸öPerl hackersµÄÓÐȤ»î¶¯ÊÇдJAPHs¡£ ¾ºÕù¶ÔÊÖ ÒòΪÐí¶àPerl³ÌÐòµÄ´úÂëÄÑÒÔÔĶÁ£¬¼ÓÉÏËüµÄÃæÏò¶ÔÏó¹¦Äܱ»ÊÓΪ²»ÊÇÕæÕýµÄÃæÏò¶ÔÏó£¬ÓÚÊǺܶàÈËÄÃPerlºÍÆäËû¶¯Ì¬ÓïÑÔÀ´±È½Ï¡£ ×î³£¼ûÊDZȽ϶ÔÏóÊÇPython£¬ÓÐÈËдÁËƪÎÄÕ½ÐWhat&££39;&££39;s wrong with Perl£¬Ö¸³öPerlµÄȱµã£¬¹ÄÀø±ðÈËѧPython¡£ÖøÃûºÚ¿Í°£Àï¿Ë¡¤Ë¹µÙ·Ò¡¤À×ÃÉдWhy Python?£¬¸ÃÎÄÖÐÒ»¸öÖØÒªµÄ±È½Ï¶ÔÏó¾ÍÊÇPerl¡£ RubyµÄ×÷Õߣ¨Ëɱ¾Ðк룬Matz£©ÉõÖÁÖ±ÈÏËûÏëRuby×÷ΪPerlµÄºó¼ÌÕß¡£[1] PerlµÄÀúÊ· 1987/10/18·¢±íPerl 1.0 1994Äê·¢±íPerl 5 ʼ¾ßÓÐOOPµÄ×÷·¨ 5.8.0 °æ¿ªÊ¼, Perl ¾ß±¸ÁËUnicode£¨Íò¹úÂ룩֧Ԯ ½« Big5 ±àÂëµÄµµ°¸×ª³É Unicode, ìóÐè¼üÈëÏÂÁÐÖ¸Áî: perl -Mencoding=big5,STDOUT,utf8 -pe1 < file.big5 > file.utf8 Perl Ò²ÄÚ¸½ÁË ``piconv, Ò»Ö§ÍêÈ«ÒÔ Perl д³ÉµÄ×ÖÂëת»»¹¤¾ß³Ìʽ, Ó÷¨ÈçÏÂ: piconv -f big5 -t utf8 < file.big5 > file.utf8 piconv -f utf8 -t big5 < file.utf8 > file.big5 2003Äê·¢±íÁËPerl 6 Perl 6 Perl 6ÕýÔÚ¿ª·¢ÖУ¬Ëü½«»áÓëÏÖÔÚµÄPerl°æ±¾Óкܴó²»Í¬£¬µ«ÏàÐÅ»¹Òª¿ª·¢Ò»¶Î³¤Ê±¼ä¡£ ×¢ÊÍ ^ ¡°ÎÒÈÏΪ Ruby Õâ¸öÃû×Ö×÷Ϊ Perl Ö®ºóµÄÒ»ÃÅÓïÑÔµÄÃû×ÖÕæÊÇÔÙÇ¡µ±²»¹ýÁË¡£¡±--ժ¼×ÔO&££39;&££39;Reilly ·ÃÎÊ Matz¡£ ²Î¼û CPAN Parrot ÍⲿÁ´½Ó Perl.com£¨O&££39;&££39;REILLY£© Perl.org Perl 6 µÄ¿ª·¢ÍøÒ³ CPAN - Comprehensive Perl Archive Network£ºPerl ³ÌʽµÄ¼¯ÖÐµØ CPAN ¼ìË÷ dmoz on Perl Perl Mongers£ºÈ«Çò¸÷µØµÄʹÓÃÕß×éÖ¯ Perl Monks£ºÒ»¸öºÜ»îÔ¾µÄ Perl ÉçÇø ActiveState£ºMicrosoft Windows É쵀 Perl Perl6::Perl5::Differences ÖÐÎÄ Öйú Perl лá Ïã¸Û Perl Íƹã×é Perl@Taiwan Perl ѧϰÊÖÔý Öйú Perl лá»áÔ±ÖÐÐÄ£¨Í¨¹ý±êÇ©ºÍµØÓò¾ÛºÏÈË£© Öйú Perl лáµÄ wiki£¨ÖÐÎÄ·Ò룩