---
name: "CPAN::Checksums"
section: "3pm"
platform: "linux"
package: "libcpan-checksums-perl"
version: "2.14-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/CPAN::Checksums"
---

# CPAN::Checksums(3pm)

Write a "CHECKSUMS" file for a directory as on CPAN

## NAME

CPAN::Checksums - Write a "CHECKSUMS" file for a directory as on CPAN

## SYNOPSIS

```
  use CPAN::Checksums qw(updatedir);
  my $success = updatedir($directory, $root);
```

## INCOMPATIBILITY ALERT

Since version 1.0 the generation of the attribute `"shortname"` is turned off by default. It was too slow and was not used as far as I know, and above all, it could fail on large directories. The shortname feature can still be turned on by setting the global variable `$TRY_SHORTNAME` to a true value.

## DESCRIPTION

- $success = updatedir($dir\[, $root\])

  `$dir` is a directory. **Updatedir()** writes a `"CHECKSUMS"` file into that directory, unless a previously written `"CHECKSUMS"` file is there that is still valid. Returns 2 if a new `"CHECKSUMS"` file has been written, 1 if a valid `"CHECKSUMS"` file is already there, otherwise dies.

  If `$root` is given, the hash entry with the key `"cpan_path"` is relative to this root directory.

  Note: since version 2.0 updatedir on empty directories behaves just the same. In older versions it silently did nothing.

### Global Variables in package CPAN::Checksums

- $IGNORE\_MATCH

  If the global variable `$IGNORE_MATCH` is set, then all files matching this expression will be completely ignored and will not be included in the CPAN `"CHECKSUMS"` files. Per default this variable is set to

  ```
      qr{(?i-xsm:readme$)}
  ```

- $CAUTION

  Setting the global variable `$CAUTION` causes **updatedir()** to report changes of files in the attributes `"size"`, `"mtime"`, `"md5"`, or `"md5-ungz"` to STDERR.

- $TRY\_SHORTNAME

  By setting the global variable `$TRY_SHORTNAME` to a true value, you can tell **updatedir()** to include an attribute `"shortname"` in the resulting hash that is 8.3-compatible. Please note, that **updatedir()** in this case may be slow and may even fail on large directories, because it will always only try 1000 iterations to find a name that is not yet taken and then give up.

- $SIGNING\_KEY

  Setting the global variable `$SIGNING_KEY` makes the generated `"CHECKSUMS"` file to be clear-signed by the command specified in `$SIGNING_PROGRAM` (defaults to `"gpg --clearsign --default-key "`), passing the signing key as an extra argument.  The resulting `"CHECKSUMS"` file should look like:

  ```
      0&&<<''; # this PGP-signed message is also valid perl
      -----BEGIN PGP SIGNED MESSAGE-----
      Hash: SHA1
      # CHECKSUMS file written on ... by CPAN::Checksums (v...)
      $cksum = {
          ...
      };
      __END__
      -----BEGIN PGP SIGNATURE-----
      ...
      -----END PGP SIGNATURE-----
  ```

  note that the actual data remains intact, but two extra lines are added to make it legal for both OpenPGP and perl syntax.

- $MIN\_MTIME\_CHECKSUMS

  If the global variable `$MIN_MTIME_CHECKSUMS` is set, then updatedir will renew signatures on checksum files that have an older mtime than the given value.

## PREREQUISITES

DirHandle, IO::File, Digest::MD5, Digest::SHA, Compress::Bzip2, Compress::Zlib, File::Spec, Data::Dumper, Data::Compare, File::Temp

## BUGS

If updatedir is interrupted, it may leave a temporary file lying around. These files have the File::Temp template `"CHECKSUMS.XXXX"` and should be harvested by a cronjob.

## AUTHOR

Andreas Koenig, andreas.koenig@anima.de; GnuPG support by Autrijus Tang

## COPYRIGHT & LICENSE

Copyright (c) 2002-2008 Andreas Koenig, Audrey Tang, Steve Peters.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

## SEE ALSO

[**perl**(1)](/perl/1.md).
