This is so that one can specify that a file is encoded with a particular encoding (e.g., UTF-8 or Big5), so that it will be read and properly decoded to Perl's internal string representation. As a result, we now have significant refactoring of the code to support the passing of an options hash to each function. The code that reads in files has now been abstracted into a single function that all the functions rely on. The only really visible result of this change should be that the expected MD5 hash no longer appears in `file_md5sum`'s failure diagnostics. Also, we now require Perl 5.6.2 or higher to get the three-argument form of `open`. Of course, one should not specify encodings before 5.8.0.