* "to" 还是 "2"?
ascii2ebcdic, bin2hex, deg2rad, ip2long, cal_to_jd (jdto*, *tojd), strtolower, strtotime,
PHP没有词法范围
Perl 有词法范围和动态范围。PHP则没有。
对于为什么词法范围很重要的解释,可以参考 Coping with Scoping.
PHP
Perl超全局(Superglobal) 有 有[1]
全局(global) 有 有
函数局部 有 有
词法域(块局部) 无 有
动态域 无 有
[1]
Perl有一些变量总是在main:: 命名空间中。这些类似于PHP的超全局变量。
[2] 在子过程的块中使用一个词法变量,就可以作为一个函数的局部变量。
PHP的主名空间中函数太多
(使用编译了所有核心分发包中的可用扩展的核心库,我们使用了2003年11月发布的版本)
PHP 主要函数的数量:3079 [1]
Perl主要函数的数量:206 [2]
中值PHP 函数名长度:13
平均PHP 函数名长度:13.67
中值
Perl函数名长度:6
平均
Perl函数名长度:6.22
注意,
Perl的一些函数有简短的等价语法:
readpipe('ls -l') ==> `ls -l`
glob('*.txt') ==> <*.txt>
readline($fh) ==> <$fh>
quotemeta($foo) ==> "Q$foo"
lcfirst($foo) ==> "l$foo" (lc is L)
ucfirst($foo) ==> "u$foo" (uc is U)
[1] 来源:PHP Quick Reference
[2] 来源:
Perldoc
Perlfunc
PHP缺少抽象令 TIMTOWTDI* 走向糟糕的极端
*(There Is More Than One Way To Do It,有不止一种方式来完成它)
为什么PHP有3079个函数但是
Perl却只有206个?在PHP中,常常有好几个十分相似的函数。在
Perl中,你要了解和记住的要少很多。
另外一个重要的因素是模块的使用,尤其是DBI模块——它用来提供
数据库支持,而不是把很多特性塞进内核,占用了空间却很少用到。
(不常用的模块不计算在内(所以这里排除了PHP的PEAR和
Perl的IO::File)). 如果核心没有提供类似的功能,那么这些模块也会算在里面。为了简便起见,内部的工作方式将会忽略。)
*
转义:
o
PHP: (14)
dbx_escape_string, escapeshellarg, escapeshellcmd, pg_escape_bytea,
pg_escape_string, pg_unescape_bytea, addslashes, addcslashes, preg_quote,
quotemeta, mysql_escape_string, mysql_real_escape_string,
mysqli_real_escape_string, sqlite_escape_string
o
Perl: (2) [1]
quotemeta, $dbh->quote
*
排序:
o
PHP: (16)
sort, arsort, asort, krsort, ksort, natsort, natcasesort, rsort, usort,
array_multisort, uasort, uksort, dbx_sort, imap_sort, ldap_sort, yaz_sort
o
Perl: (1)
sort
*
遍历列表:
o
PHP: (10)
array_filter, preg_grep, array_search, array_unique, in_array, array_map,
array_walk, array_count_values, array_change_key_case, array_sum
o
Perl: (2)
map, grep
*
分割:
o
PHP: (8)
split, explode, strtok, spliti, chunk_split, mb_split, preg_split,
str_split
o
Perl: (1)
split
*
匹配:
o
字符串:
+
PHP: (11)
strstr, strchr, stristr, strpos, strrchr, stripos, mb_strpos,
mb_strrpos, strrpos, strripos, substr
+
Perl: (3)
index, rindex, substr
o
正则表达式: