# perldoc > Digest::Perl::MD5

---
type: CommandReference
command: Digest::MD5::Perl
mode: perldoc
section: 3
source: perldoc
---

## Quick Reference

- `use Digest::Perl::MD5 qw(md5_hex); print md5_hex($data)` — functional style, hex digest
- `use Digest::MD5 qw(md5 md5_hex md5_base64)` — import from Digest::MD5 (falls back to this module)
- `$ctx = Digest::MD5->new; $ctx->add($data); $digest = $ctx->hexdigest` — OO style, hex digest
- `$ctx->addfile(*FILE)` — add filehandle content
- `$ctx->clone->hexdigest` — non‑destructive digest
- `eval { require Digest::MD5; import Digest::MD5 'md5_hex' }; if ($@) { require Digest::Perl::MD5; import Digest::Perl::MD5 'md5_hex' }` — fallback to pure Perl when C‑based module is unavailable

## Name

Perl implementation of Ron Rivest's MD5 Algorithm

## Synopsis

perl
# Functional style
use Digest::MD5 qw(md5 md5_hex md5_base64);
$hash = md5 $data;
$hash = md5_hex $data;
$hash = md5_base64 $data;

# OO style
use Digest::MD5;
$ctx = Digest::MD5->new;
$ctx->add($data);
$ctx->addfile(*FILE);
$digest = $ctx->digest;
$digest = $ctx->hexdigest;
$digest = $ctx->b64digest;
## Description

This module is a pure Perl implementation of the MD5 algorithm. It is **slow** (about 100× slower than [Digest::MD5](https://metacpan.org/pod/Digest::MD5)) and is intended only for:

- systems where [Digest::MD5](https://metacpan.org/pod/Digest::MD5) cannot be installed (no C compiler)
- hashing small amounts of data (e.g., passwords)
- educational purposes

It shares the same interface as [Digest::MD5](https://metacpan.org/pod/Digest::MD5), so you can easily swap them:

perl
BEGIN {
  eval {
    require Digest::MD5;
    import Digest::MD5 'md5_hex'
  };
  if ($@) {
    require Digest::Perl::MD5;
    import Digest::Perl::MD5 'md5_hex'
  }
}
If [Digest::MD5](https://metacpan.org/pod/Digest::MD5) is installed, it will be used; otherwise this module acts as the fallback.

**Limitations:**

- Only up to 2^32 bits (512 MB) can be processed on 32‑bit architectures.
- The digest methods are destructive — call `clone` to preserve the state.

## Examples

perl
use Digest::Perl::MD5 'md5_hex';
print 'Digest is ', md5_hex('foobarbaz'), "\n";
# Output: Digest is 6df23dc03f9b54cc38a0fc1483df6e21

# OO equivalent:
use Digest::MD5;
$md5 = Digest::MD5->new;
$md5->add('foo', 'bar');
$md5->add('baz');
$digest = $md5->hexdigest;
print "Digest is $digest\n";

# Non‑destructive digest:
$md5->clone->hexdigest;
## See Also

- [Digest::MD5](https://metacpan.org/pod/Digest::MD5) — much faster C‑based implementation
- RFC 1321 — MD5 Message‑Digest Algorithm
- `tools/md5` — a small BSD‑compatible MD5 tool written in pure Perl (distributed with this module)