CINXE.COM

fields - compile-time class fields - metacpan.org

<!DOCTYPE html> <html lang="en-US"> <head> <title>fields - compile-time class fields - 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 base - MetaCPAN" href="/dist/base/releases.rss" /> <link rel="canonical" href="https://metacpan.org/pod/fields" /> <meta name="description" content="compile-time class fields" /> <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/fields" /> <meta property="og:title" content="fields" /> <meta property="og:description" content="compile-time class fields" /> <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 base was released."> <span class="relatize">21 Nov 2015 18:19:20 UTC</span> </div> </li> <li> Distribution: <a href="/dist/base">base</a> </li> <li> Module version: 2.23 </li> <li> <a data-keyboard-shortcut="g s" href="/dist/base/source/lib/fields.pm">Source</a> (<a href="/dist/base/source/lib/fields.pm?raw=1">raw</a>) </li> <li> <a data-keyboard-shortcut="g b" href="/dist/base/source/lib">Browse</a> (<a href="/dist/base/source/lib?raw=1">raw</a>) </li> <li> <a data-keyboard-shortcut="g c" href="/dist/base/changes">Changes</a> </li> <li> <a class="nopopup" href="/dist/base/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=base">Issues</a> (5) </li> <li> <a rel="noopener nofollow" href="http://matrix.cpantesters.org/?dist=base+2.23" title="Matrix">Testers</a> <span title="(pass / fail / na)">(<a rel="noopener nofollow" href="https://www.cpantesters.org/distro/b/base.html?oncpan=1&amp;distmat=1&amp;version=2.23&amp;grade=2" style="color: #090">2805</a> / <a rel="noopener nofollow" href="https://www.cpantesters.org/distro/b/base.html?oncpan=1&amp;distmat=1&amp;version=2.23&amp;grade=3" style="color: #900">5</a> / <a rel="noopener nofollow" href="https://www.cpantesters.org/distro/b/base.html?oncpan=1&amp;distmat=1&amp;version=2.23&amp;grade=4">2</a>)</span> </li> <li> <a rel="noopener nofollow" href="http://cpants.cpanauthors.org/release/RJBS/base-2.23">Kwalitee</a> </li> <li> <div class="ttip" data-toggle="tooltip" data-placement="bottom" title="The # people with an indexing permission on base 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: 5 </div> </li> <li> <a rel="noopener nofollow" href="http://cpancover.com/latest/base-2.23/index.html">27.36% Coverage </a> </li> <li> License: unknown </li> <li class="nav-header">Activity</li> <li> <div class="activity-graph"> <img src="/dist/base/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/R/RJ/RJBS/base-2.23.tar.gz"> Download (<span itemprop="fileSize">14.76KB</span>)</a> </li> <li> <a href="https://explorer.metacpan.org/?url=%2Fmodule%2FRJBS%2Fbase-2.23%2Flib%2Ffields.pm"> MetaCPAN Explorer </a> </li> <li> <a href="/dist/base/permissions"> Permissions </a> </li> <li> <a href="/dist/base/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:base"> <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="base"> <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/RJBS/base-2.23/view/lib/fields.pm" >2.23 (RJBS on 2015-11-21)</option> <option value="/release/RJBS/base-2.22_01/view/lib/fields.pm" >2.22_01 DEV (RJBS on 2015-11-13)</option> <option value="/release/RJBS/base-2.22-TRIAL/view/lib/fields.pm" >2.22-TRIAL DEV (RJBS on 2015-11-10)</option> <option value="/release/RGARCIA/base-2.18/view/lib/fields.pm" >2.18 (RGARCIA on 2012-03-31)</option> <option value="/release/RGARCIA/base-2.15/view/lib/fields.pm" >2.15 (RGARCIA on 2010-09-04)</option> <option value="/release/RGARCIA/base-2.14/view/lib/fields.pm" >2.14 (RGARCIA on 2009-06-28)</option> <option value="/release/RGARCIA/base-2.12/view/lib/fields.pm" >2.12 (RGARCIA on 2007-07-06)</option> <optgroup label="BackPAN">' <option value="/release/MSCHWERN/base-2.11/view/lib/fields.pm" >2.11 (MSCHWERN on 2007-07-02)</option> <option value="/release/MSCHWERN/base-2.03/view/lib/fields.pm" >2.03 (MSCHWERN on 2003-09-15)</option> <option value="/release/MSCHWERN/base-2.02/view/lib/fields.pm" >2.02 (MSCHWERN on 2003-09-04)</option> <option value="/release/MSCHWERN/base-2.01/view/lib/fields.pm" >2.01 (MSCHWERN on 2003-08-28)</option> <option value="/release/MSCHWERN/base-2.0/view/lib/fields.pm" >2.0 (MSCHWERN on 2003-08-28)</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/RJBS/base-2.23/diff/RJBS/base-2.23/lib/fields.pm" >2.23 (RJBS on 2015-11-21)</option> <option value="/release/RJBS/base-2.23/diff/RJBS/base-2.22_01/lib/fields.pm" >2.22_01 DEV (RJBS on 2015-11-13)</option> <option value="/release/RJBS/base-2.23/diff/RJBS/base-2.22-TRIAL/lib/fields.pm" >2.22-TRIAL DEV (RJBS on 2015-11-10)</option> <option value="/release/RJBS/base-2.23/diff/RGARCIA/base-2.18/lib/fields.pm" >2.18 (RGARCIA on 2012-03-31)</option> <option value="/release/RJBS/base-2.23/diff/RGARCIA/base-2.15/lib/fields.pm" >2.15 (RGARCIA on 2010-09-04)</option> <option value="/release/RJBS/base-2.23/diff/RGARCIA/base-2.14/lib/fields.pm" >2.14 (RGARCIA on 2009-06-28)</option> <option value="/release/RJBS/base-2.23/diff/RGARCIA/base-2.12/lib/fields.pm" >2.12 (RGARCIA on 2007-07-06)</option> <optgroup label="BackPAN">' <option value="/release/RJBS/base-2.23/diff/MSCHWERN/base-2.11/lib/fields.pm" >2.11 (MSCHWERN on 2007-07-02)</option> <option value="/release/RJBS/base-2.23/diff/MSCHWERN/base-2.03/lib/fields.pm" >2.03 (MSCHWERN on 2003-09-15)</option> <option value="/release/RJBS/base-2.23/diff/MSCHWERN/base-2.02/lib/fields.pm" >2.02 (MSCHWERN on 2003-09-04)</option> <option value="/release/RJBS/base-2.23/diff/MSCHWERN/base-2.01/lib/fields.pm" >2.01 (MSCHWERN on 2003-08-28)</option> <option value="/release/RJBS/base-2.23/diff/MSCHWERN/base-2.0/lib/fields.pm" >2.0 (MSCHWERN on 2003-08-28)</option> </optgroup> </select> </li> <li> <ul class="dependencies"> <li class="nav-header">Dependencies</li> <li><a href="/pod/Test::More" title="Test::More" class="ellipsis">Test::More</a></li> <li><i class="ttip" title="dynamic_config enabled">and possibly others</i></li> <li> <hr> </li> <li> <a href="/module/fields/requires">Reverse dependencies</a> </li> <li> <a href="http://deps.cpantesters.org/?module=fields">CPAN Testers List</a> </li> <li> <a href="https://cpandeps.grinnz.com/?dist=base">Dependency graph</a> </li> </ul> </li> <li class="nav-header">Permalinks</li> <li> <a href="/release/RJBS/base-2.23/view/lib/fields.pm">This version</a> </li> <li> <a href="/pod/fields">Latest version</a> </li> <li> <div class="plussers"> <div class="nav-header">++ed by:</div> <div> <a class="display-all" href="/author/KES"><img src="https://www.gravatar.com/avatar/e8530f00b43b4f6a056f8ad4ee52ea47?d=identicon&amp;s=20" title="KES" alt="KES"></a> <a class="display-all" href="/author/PINGAN"><img src="https://www.gravatar.com/avatar/a02222e5e0e4fd24d52fc29a08ac6bcb?d=identicon&amp;s=20" title="PINGAN" alt="PINGAN"></a> </div> <!-- Display counts of plussers--> <div> <a href="/dist/base/plussers">2 PAUSE users</a> </div> </div> </li> <li> </li> </ul> </div> </nav> <div class="content-navigation"> <div class="breadcrumbs"> <span> <a data-keyboard-shortcut="g a" rel="author" href="/author/RJBS" class="author-name">Ricardo SIGNES 🙂</a> </span> <span>&nbsp;/&nbsp;</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/RJBS/base-2.23/view/lib/fields.pm" >2.23 (RJBS on 2015-11-21)</option> <option value="/release/RJBS/base-2.22_01/view/lib/fields.pm" >2.22_01 DEV (RJBS on 2015-11-13)</option> <option value="/release/RJBS/base-2.22-TRIAL/view/lib/fields.pm" >2.22-TRIAL DEV (RJBS on 2015-11-10)</option> <option value="/release/RGARCIA/base-2.18/view/lib/fields.pm" >2.18 (RGARCIA on 2012-03-31)</option> <option value="/release/RGARCIA/base-2.15/view/lib/fields.pm" >2.15 (RGARCIA on 2010-09-04)</option> <option value="/release/RGARCIA/base-2.14/view/lib/fields.pm" >2.14 (RGARCIA on 2009-06-28)</option> <option value="/release/RGARCIA/base-2.12/view/lib/fields.pm" >2.12 (RGARCIA on 2007-07-06)</option> <optgroup label="BackPAN">' <option value="/release/MSCHWERN/base-2.11/view/lib/fields.pm" >2.11 (MSCHWERN on 2007-07-02)</option> <option value="/release/MSCHWERN/base-2.03/view/lib/fields.pm" >2.03 (MSCHWERN on 2003-09-15)</option> <option value="/release/MSCHWERN/base-2.02/view/lib/fields.pm" >2.02 (MSCHWERN on 2003-09-04)</option> <option value="/release/MSCHWERN/base-2.01/view/lib/fields.pm" >2.01 (MSCHWERN on 2003-08-28)</option> <option value="/release/MSCHWERN/base-2.0/view/lib/fields.pm" >2.0 (MSCHWERN on 2003-08-28)</option> </optgroup> </select> <a data-keyboard-shortcut="g d" class="release-name" href="/dist/base">base-2.23</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 five &#10; • 1096 direct dependents &#10; • 24803 total dependents </title> <rect x="0" y="0" width="4" height="15" fill="#7ea3f2" /> <rect x="5" y="0" width="4" height="15" fill="#7ea3f2" /> <rect x="10" y="0" width="4" height="15" fill="#7ea3f2" /> <rect x="15" y="0" width="4" height="15" fill="#7ea3f2" /> <rect x="20" y="0" width="4" height="15" fill="#7ea3f2" /> </g> </svg> </span> <div id="base-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="base-2.23"> <input type="hidden" name="author" value="RJBS"> <input type="hidden" name="distribution" value="base"> <button type="submit" class="favorite highlight"><span>2</span> ++</button> </form> </div> <div class="show-logged-out"> <button class="fav-not-logged-in favorite highlight"><span>2</span> ++</button> </div> / <span>fields</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="#SYNOPSIS">SYNOPSIS</a></li> <li><a href="#DESCRIPTION">DESCRIPTION</a></li> <li><a href="#SEE-ALSO">SEE ALSO</a></li> </ul></nav> <div class="pod anchors"> <h1 id="NAME">NAME</h1> <p>fields - compile-time class fields</p> <h1 id="SYNOPSIS">SYNOPSIS</h1> <pre><code>{ package Foo; use fields qw(foo bar _Foo_private); sub new { my Foo $self = shift; unless (ref $self) { $self = fields::new($self); $self-&gt;{_Foo_private} = &quot;this is Foo&#39;s secret&quot;; } $self-&gt;{foo} = 10; $self-&gt;{bar} = 20; return $self; } } my $var = Foo-&gt;new; $var-&gt;{foo} = 42; # this will generate a run-time error $var-&gt;{zap} = 42; # this will generate a compile-time error my Foo $foo = Foo-&gt;new; $foo-&gt;{zap} = 24; # subclassing { package Bar; use base &#39;Foo&#39;; use fields qw(baz _Bar_private); # not shared with Foo sub new { my $class = shift; my $self = fields::new($class); $self-&gt;SUPER::new(); # init base fields $self-&gt;{baz} = 10; # init own fields $self-&gt;{_Bar_private} = &quot;this is Bar&#39;s secret&quot;; return $self; } }</code></pre> <h1 id="DESCRIPTION">DESCRIPTION</h1> <p>The <code>fields</code> pragma enables compile-time and run-time verified class fields.</p> <p>NOTE: The current implementation keeps the declared fields in the %FIELDS hash of the calling package, but this may change in future versions. Do <b>not</b> update the %FIELDS hash directly, because it must be created at compile-time for it to be fully useful, as is done by this pragma.</p> <p>If a typed lexical variable (<code>my Class $var</code>) holding a reference is used to access a hash element and a package with the same name as the type has declared class fields using this pragma, then the hash key is verified at compile time. If the variables are not typed, access is only checked at run time.</p> <p>The related <code>base</code> pragma will combine fields from base classes and any fields declared using the <code>fields</code> pragma. This enables field inheritance to work properly. Inherited fields can be overridden but will generate a warning if warnings are enabled.</p> <p><b>Only valid for Perl 5.8.x and earlier:</b> Field names that start with an underscore character are made private to the class and are not visible to subclasses.</p> <p>Also, <b>in Perl 5.8.x and earlier</b>, this pragma uses pseudo-hashes, the effect being that you can have objects with named fields which are as compact and as fast arrays to access, as long as the objects are accessed through properly typed variables.</p> <p>The following functions are supported:</p> <dl> <dt id="new">new</dt> <dd> <p>fields::new() creates and blesses a hash comprised of the fields declared using the <code>fields</code> pragma into the specified class. It is the recommended way to construct a fields-based object.</p> <p>This makes it possible to write a constructor like this:</p> <pre><code>package Critter::Sounds; use fields qw(cat dog bird); sub new { my $self = shift; $self = fields::new($self) unless ref $self; $self-&gt;{cat} = &#39;meow&#39;; # scalar element @$self{&#39;dog&#39;,&#39;bird&#39;} = (&#39;bark&#39;,&#39;tweet&#39;); # slice return $self; }</code></pre> </dd> <dt id="phash">phash</dt> <dd> <p><b>This function only works in Perl 5.8.x and earlier.</b> Pseudo-hashes were removed from Perl as of 5.10. Consider using restricted hashes or fields::new() instead (which itself uses restricted hashes under 5.10+). See <a href="/pod/Hash::Util">Hash::Util</a>. Using fields::phash() under 5.10 or higher will cause an error.</p> <p>fields::phash() can be used to create and initialize a plain (unblessed) pseudo-hash. This function should always be used instead of creating pseudo-hashes directly.</p> <p>If the first argument is a reference to an array, the pseudo-hash will be created with keys from that array. If a second argument is supplied, it must also be a reference to an array whose elements will be used as the values. If the second array contains less elements than the first, the trailing elements of the pseudo-hash will not be initialized. This makes it particularly useful for creating a pseudo-hash from subroutine arguments:</p> <pre><code>sub dogtag { my $tag = fields::phash([qw(name rank ser_num)], [@_]); }</code></pre> <p>fields::phash() also accepts a list of key-value pairs that will be used to construct the pseudo hash. Examples:</p> <pre><code>my $tag = fields::phash(name =&gt; &quot;Joe&quot;, rank =&gt; &quot;captain&quot;, ser_num =&gt; 42); my $pseudohash = fields::phash(%args);</code></pre> </dd> </dl> <h1 id="SEE-ALSO"><a id="SEE"></a>SEE ALSO</h1> <p><a href="/pod/base">base</a>, <a href="/pod/Hash::Util">Hash::Util</a></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">&times;</button> <h4 class="modal-title">Module Install Instructions</h4> </div> <div class="modal-body"> <p>To install base, 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 base</code></pre> <p><a href="/pod/CPAN">CPAN shell</a></p> <pre><code>perl -MCPAN -e shell install base</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">&times;</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>

Pages: 1 2 3 4 5 6 7 8 9 10