WareLogging, IdeaLogging. = hate = * The culture. ** Boolean flags to functions. ** Detailed and highly inaccurate in-source comments about who added what and when. ** Code reuse should not mean ctrl-c, ctrl-v. ** Whitespace. How hard can this be? * God, I miss Perl quoting, regex syntax, and POD. * preg_* * min(), max() * [http://us2.php.net/manual/en/language.types.string.php#language.types.string.parsing String parsing], [http://us.php.net/manual/en/language.types.string.php#language.types.string.conversion String conversion to numbers]. * global * case-insensitive function names * Constants * include * Would it have been so hard to pick either of C++-like or Perl-like comment markers? * rename() is essentially mv. * Comparison operators. ===? Are you fucking kidding me? ** Ok, scratch this. It's not the operators, per se. It's the finicky, brittle, poorly abstracted type system that really drives me to fits of spittle-flecked rage. ** As an addendum, if this hasn't bitten you, either you haven't done much with the language or you just don't know how badly you're being been bitten yet. * I used to miss having switch statements around in Perl. Now I'm fairly convinced they're one of the most ill-advised constructs you can make available to a vigorous amateur. Why I hate PHP, in a nutshell: brennen@hyperion 12:06:16 ~ $ php -r function fuck () { print fuck; } FUCK(); ''^d'' fuck brennen@hyperion 12:06:41 ~ $ = don't so much hate = * At least it has function prototypes. * It's pretty painless, syntax-wise, to build a multidimensional array. * file(), at least when it works. * * They finally got around to adding closures. It's flat-out amazing what this does for the language. = am somewhat bemused by = * if (! function_exists('func')) { function func () { } } * [http://php.net/ob_start ob_start()], ob_get_contents(), ob_end_clean() - output buffering. = whack idioms i have seen = $foo = array('something', 'some other thing'); foreach ($foo as $bar) { switch($bar) { case 'something': # do a whole shit-ton of stuff break; case 'some other thing': # do a shit-ton of other stuff break; } } = perl to php = * chomp(), chop() -> [http://us.php.net/rtrim rtrim] * shift() -> array_shift() = other = * http://www.steike.com/code/php-closures/ * http://pear.php.net/package/MDB2 As annoying as one-package-one-file can occasionally be in the Perl universe, I suddenly find that it is really nice to have a predictable directory structure emerge naturally from the hierarchy of modules/classes.