On Fri, 1 Nov 2002 12:53:41 -0500 (EST), Andy Dougherty wrote: >At the moment, the bytecode "fingerprint" is built with Digest::MD5. >Alas, Digest::MD5 wasn't standard with perl versions prior to 5.8.0. >What should happen in those cases? Anybody have any good ideas?
Something like this? (untested, possibly slow): my $fingerprint = join "\n", map { join '_', $_->{NAME}, @{$_->{ARGS}} } @$Parrot::OpLib::core::ops; if (eval {require Digest::MD5}) { $fingerprint = Digest::MD5::md5_hex $fingerprint; } else { $fingerprint = unpack "%32C*", $fingerprint; } From `perldoc -f unpack`: In addition to fields allowed in pack(), you may prefix a field with a %<number> to indicate that you want a <number>- bit checksum of the items instead of the items themselves. Default is a 16-bit checksum. Checksum is calculated by summing numeric values of expanded values (for string fields the sum of ord($char) is taken, for bit fields the sum of zeroes and ones). For example, the following computes the same number as the System V sum program: $checksum = do { local $/; # slurp! unpack("%32C*",<>) % 65535; }; Hope this helps, Bruce Gray