CINXE.COM
Digest::SHA2 - A variable-length one-way hash function (deprecated in favor of Digest::SHA) - metacpan.org
<!DOCTYPE html> <html lang="en-US"> <head> <title>Digest::SHA2 - A variable-length one-way hash function (deprecated in favor of Digest::SHA) - metacpan.org</title> <link rel="preload" as="fetch" href="/account/login_status" crossorigin="anonymous" /> <link href="/assets/style-XFEQ536G.css" rel="stylesheet" type="text/css"> <script src="/assets/main-WXBSEDQJ.js" type="module"></script> <link rel="alternate" type="application/rss+xml" title="Recent CPAN Uploads of Digest-SHA2 - MetaCPAN" href="/dist/Digest-SHA2/releases.rss" /> <link rel="canonical" href="https://metacpan.org/pod/Digest::SHA2" /> <meta name="description" content="A variable-length one-way hash function (deprecated in favor of Digest::SHA)" /> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=5"> <link rel="shortcut icon" href="/static/icons/favicon.ico"> <link rel="apple-touch-icon" sizes="152x152" href="/static/icons/apple-touch-icon.png"> <link rel="search" href="/static/opensearch.xml" type="application/opensearchdescription+xml" title="MetaCPAN"> <script async src="https://perl-ads.perlhacks.com/perl-ads.js"></script> <script async src="https://www.googletagmanager.com/gtag/js?id=G-E82Q2V8LVD"></script> <meta property="og:site_name" content="MetaCPAN" /> <meta name="twitter:site" content="@metacpan" /> <meta property="og:type" content="article" /> <meta name="twitter:card" content="summary" /> <meta property="og:url" content="https://metacpan.org/pod/Digest::SHA2" /> <meta property="og:title" content="Digest::SHA2" /> <meta property="og:description" content="A variable-length one-way hash function (deprecated in favor of Digest::SHA)" /> <meta property="og:image" content="https://metacpan.org/static/images/dots.png" /> </head> <body> <nav class="navbar navbar-default" role="navigation"> <div class="header-logo-large hidden-xs"> <a href="/" tabindex="0"> <svg class="logo" aria-label="MetaCPAN"> <use class="logo" href="/static/images/metacpan-logo.svg#logo" /> </svg> </a> </div> <div class="header-logo-icon visible-xs"> <a href="/"> <svg class="logo" aria-label="MetaCPAN"> <use class="logo" href="/static/images/metacpan-logo.svg#dots" /> </svg> </a> </div> <ul class="nav navbar-nav menu-items hidden-xs hidden-sm"> <li><a href="/about">About</a></li> <li><a href="/about/sponsors">Sponsor</a></li> <li><a href="https://grep.metacpan.org/">grep::cpan</a></li> <li><a href="/recent">Recent</a></li> <li><a href="/about/faq">FAQ</a></li> <li><a href="/tools">Tools</a></li> <li><a href="https://fastapi.metacpan.org/">API</a></li> </ul> <ul class="nav navbar-nav navbar-right"> <button type="button" class="searchbar-btn visible-xs visible-sm"> <i class="fa fa-search button-fa-icon"></i> </button> <form action="/search" class="searchbar-form visible-md visible-lg search-form form-horizontal"> <input type="hidden" name="size" id="metacpan_search-size" value="20"> <div class="form-group"> <div class="search-group"> <i class="fa fa-search"></i> <input type="text" name="q" placeholder="Search the CPAN" size="41" autocorrect="off" autocapitalize="off" spellcheck="false" id="metacpan_search-input" class="form-control" value=""> </div> </div> </form> <li class="icon-slidepanel visible-xs visible-sm"> <button data-toggle="slidepanel" data-target=".slidepanel"> <span class="button-fa-icon"> <i class="fa fa-bars slidepanel-open"></i> <i class="fa fa-times slidepanel-close"></i> </span> </button> </li> <li class="dropdown login-dropdown show-logged-in"> <button type="button" class="dropdown-toggle" data-toggle="dropdown"> <i class="fa fa-user button-fa-icon logged-in-icon" aria-hidden="true"></i> <i class="fas fa-chevron-down"></i> </button> <ul class="dropdown-menu"> <li><a href="/account/identities">Identities</a></li> <li><a href="/account/profile">Profile</a></li> <li><a href="/account/favorite/list">Favorites</a></li> <li> <a href="#" type="button" class="logout-button"> Logout </a> </li> </ul> </li> <li class="dropdown login-dropdown show-logged-out"> <button type="button" class="dropdown-toggle" data-toggle="dropdown"> <i class="fa fa-user button-fa-icon avatar-placeholder" aria-hidden="true"></i> <i class="fas fa-chevron-down"></i> </button> <ul class="dropdown-menu"> <li> <a href="/login/github"> <i class="fab fa-github fa-fw"></i> GitHub </a> </li> <li> <a href="/login/twitter"> <i class="fab fa-twitter fa-fw"></i> Twitter </a> </li> <li> <a href="/login/google"> <i class="fab fa-google fa-fw"></i> Google </a> </li> </ul> </li> <li class="dropdown login-dropdown hide-logged-in hide-logged-out"> <button> <i class="fa fa-user button-fa-icon" aria-hidden="true"></i> </button> </li> </ul> </nav> <div class="page-content "> <div id="perl-ad-target" class="top-notify-banner perl-ad-target"> </div> <nav class="sidebar"> <div class="slidepanel"> <ul class="nav-list "> <li class="nav-header no-margin-top"> <div class="ttip" data-toggle="tooltip" data-placement="bottom" title="The date that this version of Digest-SHA2 was released."> <span class="relatize">07 Jul 2007 19:53:45 UTC</span> </div> </li> <li> Distribution: <a href="/dist/Digest-SHA2">Digest-SHA2</a> </li> <li> Module version: 1.1.1 </li> <li> <a data-keyboard-shortcut="g s" href="/dist/Digest-SHA2/source/SHA2.pm">Source</a> (<a href="/dist/Digest-SHA2/source/SHA2.pm?raw=1">raw</a>) </li> <li> <a data-keyboard-shortcut="g b" href="/dist/Digest-SHA2/source">Browse</a> (<a href="/dist/Digest-SHA2/source?raw=1">raw</a>) </li> <li> <a data-keyboard-shortcut="g c" href="/dist/Digest-SHA2/changes">Changes</a> </li> <li> <a class="nopopup" href="/dist/Digest-SHA2/contribute">How to Contribute</a> </li> <li> <a rel="noopener nofollow" data-keyboard-shortcut="g i" href="https://rt.cpan.org/Public/Dist/Display.html?Name=Digest-SHA2">Issues</a> (1) </li> <li> <a rel="noopener nofollow" href="http://matrix.cpantesters.org/?dist=Digest-SHA2+1.1.1" title="Matrix">Testers</a> <span title="(pass / fail / na)">(<a rel="noopener nofollow" href="https://www.cpantesters.org/distro/D/Digest-SHA2.html?oncpan=1&distmat=1&version=1.1.1&grade=2" style="color: #090">2915</a> / <a rel="noopener nofollow" href="https://www.cpantesters.org/distro/D/Digest-SHA2.html?oncpan=1&distmat=1&version=1.1.1&grade=3" style="color: #900">149</a> / <a rel="noopener nofollow" href="https://www.cpantesters.org/distro/D/Digest-SHA2.html?oncpan=1&distmat=1&version=1.1.1&grade=4">1</a>)</span> </li> <li> <a rel="noopener nofollow" href="http://cpants.cpanauthors.org/release/AVAR/Digest-SHA2-1.1.1">Kwalitee</a> </li> <li> <div class="ttip" data-toggle="tooltip" data-placement="bottom" title="The # people with an indexing permission on Digest-SHA2 who have released something to CPAN in the last 2 years (i.e. the # people likely able to release critical fixes in a timely manner)"> Bus factor: 0 </div> </li> <li> <a rel="noopener nofollow" href="http://cpancover.com/latest/Digest-SHA2-1.1.1/index.html">77.27% Coverage </a> </li> <li> License: unknown </li> <li class="nav-header">Activity</li> <li> <div class="activity-graph"> <img src="/dist/Digest-SHA2/activity.svg?res=month" /> <div class="comment">24 month</div> </div> </li> <li class="nav-header">Tools</li> <li> <a itemprop="downloadUrl" href="https://cpan.metacpan.org/authors/id/A/AV/AVAR/Digest-SHA2-1.1.1.tar.gz"> Download (<span itemprop="fileSize">58.64KB</span>)</a> </li> <li> <a href="https://explorer.metacpan.org/?url=%2Fmodule%2FAVAR%2FDigest-SHA2-1.1.1%2FSHA2.pm"> MetaCPAN Explorer </a> </li> <li> <a href="/dist/Digest-SHA2/permissions"> Permissions </a> </li> <li> <a href="/dist/Digest-SHA2/releases.rss"> Subscribe to distribution </a> </li> <li> <button class="btn btn-link" data-toggle="modal" data-target="#metacpan_install-instructions-dialog"> Install Instructions </button> </li> <li> <form action="/search"> <input type="hidden" name="q" value="dist:Digest-SHA2"> <input type="search" name="q" placeholder="Search distribution" class="form-control tool-bar-form"> <input type="submit" style="display: none"> </form> </li> <li> <form action="https://grep.metacpan.org/search"> <input type="hidden" name="qd" value="Digest-SHA2"> <input type="hidden" name="source" value="metacpan"> <input type="search" name="q" placeholder="grep distribution" class="form-control tool-bar-form"> <input type="submit" style="display: none"> </form> </li> <li class="version-jump"> <select class="select-navigator form-control tool-bar-form"> <option disabled selected>Jump to version</option> <option disabled value="/release/AVAR/Digest-SHA2-1.1.1/view/SHA2.pm" >1.1.1 (AVAR on 2007-07-07)</option> <optgroup label="BackPAN">' <option value="/release/JCDUQUE/Digest-SHA2-1.1.0/view/SHA2.pm" >1.1.0 (JCDUQUE on 2003-12-15)</option> <option value="/release/JCDUQUE/Digest-SHA2-1.0.0/view/SHA2.pm" >1.0.0 (JCDUQUE on 2003-08-02)</option> </optgroup> </select> </li> <li class="version-diff"> <select class="select-navigator form-control tool-bar-form"> <option disabled selected>Diff with version</option> <option disabled value="/release/AVAR/Digest-SHA2-1.1.1/diff/AVAR/Digest-SHA2-1.1.1/SHA2.pm" >1.1.1 (AVAR on 2007-07-07)</option> <optgroup label="BackPAN">' <option value="/release/AVAR/Digest-SHA2-1.1.1/diff/JCDUQUE/Digest-SHA2-1.1.0/SHA2.pm" >1.1.0 (JCDUQUE on 2003-12-15)</option> <option value="/release/AVAR/Digest-SHA2-1.1.1/diff/JCDUQUE/Digest-SHA2-1.0.0/SHA2.pm" >1.0.0 (JCDUQUE on 2003-08-02)</option> </optgroup> </select> </li> <li> <ul class="dependencies"> <li class="nav-header">Dependencies</li> <li><a href="/pod/Digest::base" title="Digest::base" class="ellipsis">Digest::base</a></li> <li><a href="/pod/MIME::Base64" title="MIME::Base64" class="ellipsis">MIME::Base64</a></li> <li><i class="ttip" title="dynamic_config enabled">and possibly others</i></li> <li> <hr> </li> <li> <a href="/module/Digest::SHA2/requires">Reverse dependencies</a> </li> <li> <a href="http://deps.cpantesters.org/?module=Digest%3A%3ASHA2">CPAN Testers List</a> </li> <li> <a href="https://cpandeps.grinnz.com/?dist=Digest-SHA2">Dependency graph</a> </li> </ul> </li> <li class="nav-header">Permalinks</li> <li> <a href="/release/AVAR/Digest-SHA2-1.1.1/view/SHA2.pm">This version</a> </li> <li> <a href="/pod/Digest::SHA2">Latest version</a> </li> <li> </li> <li> <div> <button class="contributors-show-button btn-link">and 1 contributors</button> <div id="metacpan_contributors" class="slide-out slide-out-hidden"> <div> <ul> <li class="contributor" > Julius C. Duque {jcduque}{at}{lycos}{dot}{com} </li> </ul> </div> </div> </div> </li> </ul> </div> </nav> <div class="content-navigation"> <div class="breadcrumbs"> <span> <a data-keyboard-shortcut="g a" rel="author" href="/author/AVAR" class="author-name">Ævar Arnfjörð Bjarmason</a> </span> <span> / </span> <div class="release dist-release status-latest maturity-released"> <span class="dropdown"><b class="caret"></b></span> <select class="select-navigator "> <option selected value="/release/AVAR/Digest-SHA2-1.1.1/view/SHA2.pm" >1.1.1 (AVAR on 2007-07-07)</option> <optgroup label="BackPAN">' <option value="/release/JCDUQUE/Digest-SHA2-1.1.0/view/SHA2.pm" >1.1.0 (JCDUQUE on 2003-12-15)</option> <option value="/release/JCDUQUE/Digest-SHA2-1.0.0/view/SHA2.pm" >1.0.0 (JCDUQUE on 2003-08-02)</option> </optgroup> </select> <a data-keyboard-shortcut="g d" class="release-name" href="/dist/Digest-SHA2">Digest-SHA2-1.1.1</a> </div> <span class="river-gauge-gauge"> <svg width="24px" height="15px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <g> <title> River stage one • 3 direct dependents • 3 total dependents </title> <rect x="0" y="0" width="4" height="15" fill="#7ea3f2" /> <rect x="5" y="0" width="4" height="15" fill="#e4e2e2" /> <rect x="10" y="0" width="4" height="15" fill="#e4e2e2" /> <rect x="15" y="0" width="4" height="15" fill="#e4e2e2" /> <rect x="20" y="0" width="4" height="15" fill="#e4e2e2" /> </g> </svg> </span> <div id="Digest-SHA2-fav" class="show-logged-in"> <form action="/account/favorite/add" style="display: inline" method="POST"> <input type="hidden" name="remove" value="0"> <input type="hidden" name="release" value="Digest-SHA2-1.1.1"> <input type="hidden" name="author" value="AVAR"> <input type="hidden" name="distribution" value="Digest-SHA2"> <button type="submit" class="favorite"><span></span> ++</button> </form> </div> <div class="show-logged-out"> <button class="fav-not-logged-in favorite"><span></span> ++</button> </div> / <span>Digest::SHA2</span> </div> </div> <main class="content"> <nav class="toc"> <div class="toc-header"><strong>Contents</strong></div> <ul> <li><a href="#NAME">NAME</a></li> <li><a href="#DEPRECATED">DEPRECATED</a></li> <li><a href="#ABSTRACT">ABSTRACT</a></li> <li><a href="#DESCRIPTION">DESCRIPTION</a></li> <li><a href="#SYNOPSIS">SYNOPSIS</a></li> <li><a href="#METHODS">METHODS</a></li> <li><a href="#EXAMPLE-1">EXAMPLE 1</a></li> <li><a href="#EXAMPLE-2">EXAMPLE 2</a></li> <li><a href="#MORE-EXAMPLES">MORE EXAMPLES</a></li> <li><a href="#DIGEST-SPEED">DIGEST SPEED</a></li> <li><a href="#ACKNOWLEDGEMENT">ACKNOWLEDGEMENT</a></li> <li><a href="#COPYRIGHT-AND-LICENSE">COPYRIGHT AND LICENSE</a></li> </ul></nav> <div class="pod anchors"> <h1 id="NAME">NAME</h1> <p>Digest::SHA2 - A variable-length one-way hash function (deprecated in favor of <a href="/pod/Digest::SHA">Digest::SHA</a>)</p> <h1 id="DEPRECATED">DEPRECATED</h1> <p>This module has numerious known bugs, is not compatable with the <a href="/pod/Digest">Digest</a> interface and its functionality is a subset of the functionality of <a href="/pod/Digest::SHA">Digest::SHA</a> (which is in perl core as of 5.9.3).</p> <p>Please use <a href="/pod/Digest::SHA">Digest::SHA</a> instead of this module in new and old code.</p> <h1 id="ABSTRACT">ABSTRACT</h1> <p>Digest::SHA2 - A Perl interface for SHA-256, SHA-384 and SHA-512, collectively known as SHA-2</p> <h1 id="DESCRIPTION">DESCRIPTION</h1> <p>SHA-2 is the collective name of one-way hash functions developed by the NIST. SHA-256, SHA-384, and SHA-512 pertain to hashes whose outputs are 256 bits, 384 bits and 512 bits, respectively.</p> <p>This Perl implementation is meant to be a replacement for the older SHA256 by Rafael R. Sevilla. His module has a bug in the SHA-256 implementation.</p> <p>This new implementation uses the C source of Aaron Gifford.</p> <h1 id="SYNOPSIS">SYNOPSIS</h1> <pre><code>use Digest::SHA2; $sha2obj = new Digest::SHA2 [$hashlength]; $sha2obj->add(LIST); $sha2obj->addfile(*HANDLE); $sha2obj->reset(); $sha_clone = $sha2obj->clone(); $digest = $sha2obj->digest(); $digest = $sha2obj->hexdigest(); $digest = $sha2obj->b64digest(); $digest = $sha2obj->base64digest(); # deprecated $digest = $sha2obj->hashsize(); $digest = $sha2obj->rounds();</code></pre> <h1 id="METHODS">METHODS</h1> <p>SHA-2 supports the following functions:</p> <dl> <dt id="new-[$hashlength]"><a id="new"></a><a id="new-hashlength"></a><b>new [$hashlength]</b></dt> <dd> <p>Creates a SHA-2 object, where <b>$hashlength</b> represents the hash output length; valid values for <b>$hashlength</b> are 256, 384, and 512 only. If <b>$hashlength</b> is omitted, the output defaults to 256 bits.</p> <p>For example, to specify SHA-512, use</p> <pre><code>$sha2obj = new Digest::SHA2 512;</code></pre> <p>To specify SHA-256, use</p> <pre><code>$sha2obj = new Digest::SHA2 256;</code></pre> <p>or just simply</p> <pre><code>$sha2obj = new Digest::SHA2;</code></pre> </dd> <dt id="hashsize()"><a id="hashsize"></a><b>hashsize()</b></dt> <dd> <p>Returns the digest size (in bits) of the hash output used; valid sizes are 256, 384, and 512 only.</p> </dd> <dt id="rounds()"><a id="rounds"></a><b>rounds()</b></dt> <dd> <p>Returns the number of rounds (1, in this case) used to generate the hash output; this is included only so that <b>Digest::SHA2</b> is consistent with other one-way hash functions that have variable number of rounds, like <b>Haval</b> and <b>Tiger</b>.</p> <p>Haval can uses 3, 4, or 5 rounds, with 5 different output lengths: 128, 160, 192, 224, and 256 bits, thereby, having 15 variants. Tiger, on the other hand, outputs 192 bits of digest, using 3 rounds; but for added security, can also use 4 rounds.</p> </dd> <dt id="add(LIST)"><a id="add"></a><a id="add-LIST"></a><b>add(LIST)</b></dt> <dd> <p>Hashes a string or a list of strings</p> <p>For example,</p> <pre><code>$sha2obj->add($string1); $sha2obj->add($string2, $string3, $string4);</code></pre> </dd> <dt id="addfile(*HANDLE)"><a id="addfile"></a><a id="addfile-HANDLE"></a><b>addfile(*HANDLE)</b></dt> <dd> <p>Hashes a file whose file handle is <b>HANDLE</b></p> </dd> <dt id="reset()"><a id="reset"></a><b>reset()</b></dt> <dd> <p>Re-initializes the hash state of the SHA-2 object. Before calculating another digest, <b>reset()</b> refreshes the hash state, and is, therefore, functionally equivalent to the <b>new()</b> method, except that no SHA-2 object is created.</p> </dd> <dt id="digest()"><a id="digest"></a><b>digest()</b></dt> <dd> <p>Generates the hash output as a binary string</p> </dd> <dt id="hexdigest()"><a id="hexdigest"></a><b>hexdigest()</b></dt> <dd> <p>Generates a hexadecimal representation of the hash output</p> </dd> <dt id="base64digest()-(deprecated)"><a id="base64digest"></a><a id="base64digest-deprecated"></a><b>base64digest() (deprecated)</b></dt> <dd> <p>This will be removed in future releases; use <b>b64digest()</b> instead.</p> </dd> <dt id="b64digest()"><a id="b64digest"></a><b>b64digest()</b></dt> <dd> <p>Generates a base64 representation of the hash output</p> </dd> <dt id="clone()"><a id="clone"></a><b>clone()</b></dt> <dd> <p>Returns a copy of the SHA-2 object; useful when you want to preserve an intermediate value of the digest</p> <p>For example,</p> <pre><code>my $clone = $sha2obj->clone(); # clone SHA-2 object my $sig = $sha2obj->clone->hexdigest; print "partial digest: $sig\n";</code></pre> </dd> </dl> <h1 id="EXAMPLE-1"><a id="EXAMPLE"></a>EXAMPLE 1</h1> <pre><code>#!/usr/local/bin/perl use diagnostics; use strict; use warnings; use Digest::SHA2; my $string1 = "This is a string."; my $string2 = "This is another string."; my $string3 = "This is a string.This is another string."; my $sha2obj = new Digest::SHA2 512; print "hash size = ", $sha2obj->hashsize, " bits\n"; $sha2obj->add($string1); my $digest = $sha2obj->hexdigest(); print "Hash string1 only\n"; print "$digest\n\n"; $sha2obj->reset(); $sha2obj->add($string1, $string2); my $digest2 = $sha2obj->hexdigest(); print "Hash string1 and then hash string2\n"; print "$digest2\n\n"; $sha2obj->reset(); $sha2obj->add($string1); $sha2obj->add($string2); my $digest3 = $sha2obj->hexdigest(); print "Hash string1 and then hash string2\n"; print "$digest3\n\n"; $sha2obj->reset(); $sha2obj->add($string3); print "Hash the two concatenated strings\n"; my $digest4 = $sha2obj->hexdigest(); print "$digest4\n";</code></pre> <h1 id="EXAMPLE-2"><a id="EXAMPLE1"></a>EXAMPLE 2</h1> <pre><code>#!/usr/local/bin/perl use diagnostics; use strict; use warnings; use MIME::Base64; use Digest::SHA2; my $file = "strings"; open INFILE, $file or die "$file not found"; my $sha2obj = new Digest::SHA2; # defaults to 256-bit output $sha2obj->addfile(*INFILE); my $hex_output = $sha2obj->hexdigest(); my $base64_output = $sha2obj->b64digest(); close INFILE; print "$file\n"; print "$hex_output\n"; print "$base64_output\n";</code></pre> <h1 id="MORE-EXAMPLES"><a id="MORE"></a>MORE EXAMPLES</h1> <p>See the "examples" and "t" directories for more examples.</p> <h1 id="DIGEST-SPEED"><a id="DIGEST"></a>DIGEST SPEED</h1> <p>Please consult the file, COMPARISON, for comparison of various one-way hash functions with digest lengths of 256, 384, and 512 bits.</p> <h1 id="ACKNOWLEDGEMENT">ACKNOWLEDGEMENT</h1> <p>I used the C source of Aaron Gifford as backend for this Perl implementation.</p> <h1 id="COPYRIGHT-AND-LICENSE"><a id="COPYRIGHT"></a>COPYRIGHT AND LICENSE</h1> <p>Copyright (C) 2003 Julius C. Duque. Please read contact.html that comes with this distribution for details on how to contact the author.</p> <p>This library is free software; you can redistribute it and/or modify it under the same terms as the GNU General Public License.</p></div> <div id="metacpan_install-instructions-dialog" class="modal fade"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> <h4 class="modal-title">Module Install Instructions</h4> </div> <div class="modal-body"> <p>To install Digest::SHA2, copy and paste the appropriate command in to your terminal.</p> <p><a href="/dist/App-cpanminus/view/bin/cpanm">cpanm</a></p> <pre><code>cpanm Digest::SHA2</code></pre> <p><a href="/pod/CPAN">CPAN shell</a></p> <pre><code>perl -MCPAN -e shell install Digest::SHA2</code></pre> <p>For more information on module installation, please visit <a href="https://www.cpan.org/modules/INSTALL.html">the detailed CPAN module installation guide</a>.</p> </div> <div class="modal-footer"> <a href="#" data-dismiss="modal" class="btn">Close</a> </div> </div> </div> </div> </main> <div class="content-pagination"> </div> </div> <footer class="footer"> <div class="footer-container"> <div class="footer-social"> <div class="footer-link footer-logo"> <a href="/"> <img src="/static/images/metacpan-logo.svg" alt="MetaCPAN" /> </a> </div> <a class="footer-social-link" href="https://github.com/metacpan"> <i class="fab fa-github-square"></i> </a> <a class="footer-social-link" href="https://fosstodon.org/@metacpan"> <i class="fab fa-mastodon"></i> </a> </div> <div class="footer-links"> <div class="footer-link"> <a href="/about">About</a> </div> <div class="footer-link"> <a href="/about/sponsors">Sponsor</a> </div> <div class="footer-link"> <a href="https://grep.metacpan.org">grep::cpan</a> </div> <div class="footer-link"> <a href="/recent">Recent</a> </div> <div class="footer-link"> <a href="/about/faq">FAQ</a> </div> <div class="footer-link"> <a href="/tools">Tools</a> </div> <div class="footer-link"> <a href="https://fastapi.metacpan.org/">API</a> </div> <div class="footer-link"> <a href="https://www.perl.org/">Perl.org</a> </div> </div> <div class="footer-sponsors"> <a class="footer-sponsor-link" target="_blank" href="https://www.bytemark.co.uk/" rel="noopener"> <img class="footer-sponsor-bytemark" src="/static/images/sponsors/bytemark_logo.svg" alt="Bytemark logo"> </a> <a class="footer-sponsor-link" target="_blank" href="https://www.liquidweb.com/" rel="noopener"> <img class="footer-sponsor-liquidweb" src="/static/images/sponsors/liquidweb_logo.png" alt="liquidweb logo"> </a> <a class="footer-sponsor-link" target="_blank" href="https://deriv.com/careers/" rel="noopener"> <img class="footer-sponsor-deriv" src="/static/images/sponsors/deriv.svg" alt="Deriv logo"> </a> <a class="footer-sponsor-link" target="_blank" href="https://geocode.xyz" rel="noopener"> <img class="footer-sponsor-geocode" src="/static/images/sponsors/geocodelogo.svg" alt="Geocode logo"> </a> <a class="footer-sponsor-link" target="_blank" href="https://www.fastly.com/" rel="noopener"> <img class="footer-sponsor-fastly" src="/static/images/sponsors/fastly_logo.svg" alt="Fastly logo"> </a> <a class="footer-sponsor-link" target="_blank" href="https://opencagedata.com" rel="noopener"> <img class="footer-sponsor-opencage" src="/static/images/sponsors/open-cage.svg" alt="OpenCage logo"> </a> <!-- Added 2024-07-22 --> <a class="footer-sponsor-link" target="_blank" href="https://www.elastic.co/" rel="noopener"> <img class="footer-sponsor-elastic" src="/static/images/sponsors/elastic.svg" alt="Elastic logo"> </a> <!-- Added 2024-07-22 --> <a class="footer-sponsor-link" target="_blank" href="https://route4me.com/" rel="noopener"> <img class="footer-sponsor-route4me" src="/static/images/sponsors/route4me.png" alt="Route4Me logo"> </a> </div> </div> </footer> <div class="modal fade" tabindex="-1" role="dialog" id="metacpan_keyboard-shortcuts"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">×</button> <h4 class="modal-title">Keyboard Shortcuts</h4> </div> <div class="modal-body row"> <div class="col-md-6"> <table class="table keyboard-shortcuts"> <thead> <tr> <th></th> <th>Global</th> </tr> </thead> <tbody> <tr> <td class="keys"> <kbd>s</kbd> </td> <td>Focus search bar</td> </tr> <tr> <td class="keys"> <kbd>?</kbd> </td> <td>Bring up this help dialog</td> </tr> </tbody> </table> <table class="table keyboard-shortcuts"> <thead> <tr> <th></th> <th>GitHub</th> </tr> </thead> <tbody> <tr> <td class="keys"> <kbd>g</kbd> <kbd>p</kbd> </td> <td>Go to pull requests</td> </tr> <tr> <td class="keys"> <kbd>g</kbd> <kbd>i</kbd> </td> <td>go to github issues (only if github is preferred repository)</td> </tr> </tbody> </table> </div> <div class="col-md-6"> <table class="table keyboard-shortcuts"> <thead> <tr> <th></th> <th>POD</th> </tr> </thead> <tbody> <tr> <td class="keys"> <kbd>g</kbd> <kbd>a</kbd> </td> <td>Go to author</td> </tr> <tr> <td class="keys"> <kbd>g</kbd> <kbd>c</kbd> </td> <td>Go to changes</td> </tr> <tr> <td class="keys"> <kbd>g</kbd> <kbd>i</kbd> </td> <td>Go to issues</td> </tr> <tr> <td class="keys"> <kbd>g</kbd> <kbd>d</kbd> </td> <td>Go to dist</td> </tr> <tr> <td class="keys"> <kbd>g</kbd> <kbd>r</kbd> </td> <td>Go to repository/SCM</td> </tr> <tr> <td class="keys"> <kbd>g</kbd> <kbd>s</kbd> </td> <td>Go to source</td> </tr> <tr> <td class="keys"> <kbd>g</kbd> <kbd>b</kbd> </td> <td>Go to file browse</td> </tr> </tbody> </table> </div> <div class="col-md-12"> <table class="table keyboard-shortcuts"> <thead> <tr> <th></th> <th>Search terms</th> </tr> </thead> <tbody> <tr> <td><em>module:</em> (e.g. <a href="/search?q=module%3APlugin">module:Plugin</a>)</td> </tr> <tr> <td><em>distribution:</em> (e.g. <a href="/search?q=distribution%3ADancer+auth">distribution:Dancer auth</a>)</td> </tr> <tr> <td><em>author:</em> (e.g. <a href="/search?q=author%3ASONGMU+Redis">author:SONGMU Redis</a>)</td> </tr> <tr> <td><em>version:</em> (e.g. <a href="/search?q=version%3A1.00">version:1.00</a>)</td> </tr> </tbody> </table> </div> </div> <div class="modal-footer"></div> </div> </div> </div> </body> </html>