Perl是壹種腳本語言。 最初的設計者為拉裏·沃爾(Larry Wall),它於1987年12月18日發表。Perl借取了C、sed、awk、shell scripting 以及很多其他程式語言的特性。其中最重要的特性是他內部集成了正則表達式的功能,以及巨大的第三方代碼庫 CPAN。
編程範型: Multi-paradigm
面市時間: 1987年
設計者: Larry Wall
最近釋出日期: 5.8.8 / 2006年1月3日
型態系統: Dynamic
啟發語言: AWK, BASIC, BASIC-PLUS, C語言, C++, Lisp, Pascal, sed, Unix shell
影響語言: Python, PHP, Ruby, ECMAScript
作業系統: 跨平臺
許可證: GNU General Public License, Artistic License
Website: www.Perl.org
Perl原名pearl,但是在這個語言官方發表前,拉裏·沃爾發現已經有個程式語言“pearl”,便將這個程式語言的名字改成Perl。對於Perl 這四個字母,有壹些解釋,包括充滿幽默感的“Pathologically Eclectic Rubbish Lister”。“Practical Extraction and Report Language”曾經出現在很多有關Perl的資料裏,包括官方的主頁。不過事實上這個長名字是後來湊出來的。它的名字第壹個字母大寫(Perl)時就指這個程式語言,無大寫字母(perl)時就指它的直譯器。將Perl寫成“PERL”是不適當的,因為它並非壹個縮寫字。
為了實現這樣的目標,並且又因為 Larry Wall 本人也是壹個語言學家,他設計Perl語言時使用了很多語言學的思維。相比 C、Pascal 這樣的“高級”語言而言,Perl語言直接提供泛型變數、動態數組、Hash表等更加便捷的編程元素。Perl 具有動態語言的強大靈活的特性,並且還從C/C++、Basic、Pascal 等語言中分別借鑒了語法規則,從而提供了許多冗余語法。使得程序員可以忽略計算機內部資料存儲、類型、處理方法、運算規則、甚至內存越界等等的細節,而將思考中心放在所需要的程序邏輯上。就這壹點而言,很多 Perl 程序員認為目前只有 Perl、Python等泛型語言才能稱為“高級”語言,而 C、Pascal 甚至 C++ 這些只能稱為“中高級”語言而已。可以說,在統壹變數類型和掩蓋運算細節方面,Perl 做得比 Python 更為出色。
由於從其他語言大量借鑒了語法,使得從其他編程語言轉到 Perl 語言的程序員可以迅速上手寫程序並完成任務,這使得 Perl語言是壹門容易用的語言。但問題是這樣寫出來的“類xx語言”的 Perl 程序對不熟悉這種語言的程序員卻如同天書,這使得 Perl 語言易寫不易讀。
Perl 是壹種 泛型語言,換句話說,在語言層面上,Perl 和大多數編程語言不同,不把變量分成整數、字符、浮點數等等,而只有壹種能接受各種類型數據的“泛型”變量。Perl的變量以$字符開頭。例如$a=5;$b="Hello";$c=3.2;都是合法的 Perl 語句。
Perl中各種變量的運算也很自由,數和含有數的字符串是等效的,可以把數字字符串參與數學計算,也可以反之,讓數字參與字符串的構成和操作。
除單個變量(Perl 稱為 Scalar)之外,Perl 還有兩種集合類型,分別是數組(Array,用@字符開頭)和關聯數組(Associative array,或者稱為Hash,用%開頭。類似 C++ 的 STL map 和 Python 的 Dictionary)。數組可以內含任意可變數目的變量。而Hash表,則可以在變量之間建立壹壹映射,就像字典壹樣,可以把不同的變量按照他們的邏輯關系組織起來。
因為Perl大量的創造冗余的語法,並且從其他語言中大量的借鑒語法,使得Perl的語法極其豐富和靈活。Perl***有下列幾種判斷語句:
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;雜湊表): 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