IT'S A TRAP!

while(<STDIN>)

Be very careful of this!If somehow,you were to get a false value (e.g.an empty line,or a line with only a zero on it),your file would stop processing.This doesn't normally happen if you're dealing with file reading (unless you've modified $/),but it's possible.

You're more likely to run into this:

  1. while(readdir(DIR)) {

If you have a file name of 0, your program will stop and not continue processing files.

A more appropriate while loop looks like this:

  1. while ( defined( my $line = <STDIN> ) ) {
  2. while ( defined( my $file = readdir(DIR) ) ) {

arrays are not hashes: $a[time()]++;

If you are using arrays with large numbers, Perl will create an array of that size automatically. Thus, if you're trying to make a count of things that happened during a particular second, avoid the temptation of using "time" in perlfunc as an array key.

Perl does not support sparse arrays. The closest thing is a hash.

DateTime::TimeZone (!)

If you're like me, you either installed the DateTime module for a specific need, or you had it installed as part of your OS.

Did you know there's a seperate dependency, called DateTime::TimeZone, that is a dump of time zone data?

If DateTime can't figure out your time zone environment, it uses DateTime::TimeZone, which can be years out of date!

Update your DateTime::TimeZone today!

Time::HiRes might not be

Don't depend on Time::HiRes for millisecond (or smaller) calculations.

Some systems have a clock_getres that can only go to hundredths of a second, even in this day and age - a recent installation of Red Hat Enterprise Linux 4 on an AMD 64 platform provided only that level of granularity.

So, check your target's Time::HiRes before relying on it.


Want to contribute?

Submit a PR to github.com/petdance/perl101