CINXE.COM
DBIx::IO::Mask - Help make id values more meaningful to humans - metacpan.org
<!DOCTYPE html> <html lang="en-US"> <head> <title>DBIx::IO::Mask - Help make id values more meaningful to humans - 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 DBIx-IO - MetaCPAN" href="/dist/DBIx-IO/releases.rss" /> <link rel="canonical" href="https://metacpan.org/pod/DBIx::IO::Mask" /> <meta name="description" content="Help make id values more meaningful to humans" /> <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/DBIx::IO::Mask" /> <meta property="og:title" content="DBIx::IO::Mask" /> <meta property="og:description" content="Help make id values more meaningful to humans" /> <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 DBIx-IO was released."> <span class="relatize">12 Jul 2008 03:48:01 UTC</span> </div> </li> <li> Distribution: <a href="/dist/DBIx-IO">DBIx-IO</a> </li> <li> <a data-keyboard-shortcut="g s" href="/dist/DBIx-IO/source/IO/Mask.pm">Source</a> (<a href="/dist/DBIx-IO/source/IO/Mask.pm?raw=1">raw</a>) </li> <li> <a data-keyboard-shortcut="g b" href="/dist/DBIx-IO/source/IO">Browse</a> (<a href="/dist/DBIx-IO/source/IO?raw=1">raw</a>) </li> <li> <a data-keyboard-shortcut="g c" href="/dist/DBIx-IO/changes">Changes</a> </li> <li> <a class="nopopup" href="/dist/DBIx-IO/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=DBIx-IO">Issues</a> (1) </li> <li> <a rel="noopener nofollow" href="http://matrix.cpantesters.org/?dist=DBIx-IO+1.07" title="Matrix">Testers</a> <span title="(pass / fail / na)">(<a rel="noopener nofollow" href="https://www.cpantesters.org/distro/D/DBIx-IO.html?oncpan=1&distmat=1&version=1.07&grade=2" style="color: #090">30</a> / <a rel="noopener nofollow" href="https://www.cpantesters.org/distro/D/DBIx-IO.html?oncpan=1&distmat=1&version=1.07&grade=3" style="color: #900">0</a> / <a rel="noopener nofollow" href="https://www.cpantesters.org/distro/D/DBIx-IO.html?oncpan=1&distmat=1&version=1.07&grade=4">0</a>)</span> </li> <li> <a rel="noopener nofollow" href="http://cpants.cpanauthors.org/release/RSANDBERG/DBIx-IO-1.07">Kwalitee</a> </li> <li> <div class="ttip" data-toggle="tooltip" data-placement="bottom" title="The # people with an indexing permission on DBIx-IO 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/DBIx-IO-1.07/index.html">15.88% Coverage </a> </li> <li> License: unknown </li> <li class="nav-header">Activity</li> <li> <div class="activity-graph"> <img src="/dist/DBIx-IO/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/RS/RSANDBERG/DBIx-IO-1.07.tar.gz"> Download (<span itemprop="fileSize">37.61KB</span>)</a> </li> <li> <a href="https://explorer.metacpan.org/?url=%2Fmodule%2FRSANDBERG%2FDBIx-IO-1.07%2FIO%2FMask.pm"> MetaCPAN Explorer </a> </li> <li> <a href="/dist/DBIx-IO/permissions"> Permissions </a> </li> <li> <a href="/dist/DBIx-IO/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:DBIx-IO"> <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="DBIx-IO"> <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/RSANDBERG/DBIx-IO-1.07/view/IO/Mask.pm" >1.07 (RSANDBERG on 2008-07-12)</option> <option value="/release/RSANDBERG/DBIx-IO-1.06/view/IO/Mask.pm" >1.06 (RSANDBERG on 2008-07-11)</option> </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/RSANDBERG/DBIx-IO-1.07/diff/RSANDBERG/DBIx-IO-1.07/IO/Mask.pm" >1.07 (RSANDBERG on 2008-07-12)</option> <option value="/release/RSANDBERG/DBIx-IO-1.07/diff/RSANDBERG/DBIx-IO-1.06/IO/Mask.pm" >1.06 (RSANDBERG on 2008-07-11)</option> </select> </li> <li> <ul class="dependencies"> <li class="nav-header">Dependencies</li> <li><a href="/pod/DBI" title="DBI" class="ellipsis">DBI</a></li> <li><a href="/pod/POSIX" title="POSIX" class="ellipsis">POSIX</a></li> <li><i class="ttip" title="dynamic_config enabled">and possibly others</i></li> <li> <hr> </li> <li> <a href="/module/DBIx::IO::Mask/requires">Reverse dependencies</a> </li> <li> <a href="http://deps.cpantesters.org/?module=DBIx%3A%3AIO%3A%3AMask">CPAN Testers List</a> </li> <li> <a href="https://cpandeps.grinnz.com/?dist=DBIx-IO">Dependency graph</a> </li> </ul> </li> <li class="nav-header">Permalinks</li> <li> <a href="/release/RSANDBERG/DBIx-IO-1.07/view/IO/Mask.pm">This version</a> </li> <li> <a href="/pod/DBIx::IO::Mask">Latest version</a> </li> <li> </li> <li> </li> </ul> </div> </nav> <div class="content-navigation"> <div class="breadcrumbs"> <span> <a data-keyboard-shortcut="g a" rel="author" href="/author/RSANDBERG" class="author-name">Reed Sandberg</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/RSANDBERG/DBIx-IO-1.07/view/IO/Mask.pm" >1.07 (RSANDBERG on 2008-07-12)</option> <option value="/release/RSANDBERG/DBIx-IO-1.06/view/IO/Mask.pm" >1.06 (RSANDBERG on 2008-07-11)</option> </select> <a data-keyboard-shortcut="g d" class="release-name" href="/dist/DBIx-IO">DBIx-IO-1.07</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="DBIx-IO-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="DBIx-IO-1.07"> <input type="hidden" name="author" value="RSANDBERG"> <input type="hidden" name="distribution" value="DBIx-IO"> <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>DBIx::IO::Mask</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="#METHOD-DETAILS">METHOD DETAILS</a></li> <li><a href="#BUGS">BUGS</a></li> <li><a href="#SEE-ALSO">SEE ALSO</a></li> <li><a href="#AUTHOR">AUTHOR</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>DBIx::IO::Mask - Help make id values more meaningful to humans</p> <h1 id="SYNOPSIS">SYNOPSIS</h1> <pre><code>use DBIx::IO::Mask; $masker = new DBIx::IO::Mask($dbh,$field_name); $masker = new DBIx::IO::Mask($dbh,undef,$table_name,$masked_col_name,$id_col_name,$no_cache); $valid_values = $masker->pick_list(); $masked_value = $masker->mask($id_val); $id = $masker->unmask($masked_value); $ids_to_mask_hash = $masker->ids_to_mask();</code></pre> <h1 id="DESCRIPTION">DESCRIPTION</h1> <p>For applications that interface a human to a database, e.g. CGI, this class makes database numeric ID values more meaningful to humans. It can also present a sorted list of valid values to use in pop-up lists, where only certain values are allowed in the database. It does this in conjunction with DBIx::IO::Search.</p> <p>The general strategy is that any column you want masked or that has a discrete set of values, should have a corresponding table with those set of values. The table name should be the same as the ID column name except with no _ID at the end. The table should have at least 2 columns in it:</p> <pre><code><COLUMN_NAME> - The name of the column you want masked, it stores the ID values, and does not necessarily have to be a numeric datatype. USER_MASK - This column stores values that describe the id values</code></pre> <p>This way a new $masker object can be created by just knowing the name of the column you want masked. Example:</p> <p>To get a sorted list of valid values for a column named STATE, create a table named STATE with 2 columns, STATE and USER_MASK with all states represented therein. Then:</p> <pre><code>$masker = new DBIx::IO::Mask($dbh,'STATE'); $states = $masker->pick_list();</code></pre> <p>This is the easy way, however if you have a table with a set of IDs and descriptions that doesn't conform to the guidelines above (or you just think the whole scenario is dumb), you can specify the table name and desired column names in the constructor.</p> <p>All tables read are cached in class variables for efficiency. This may be significant if you're using persistent objects/classes with such environments as mod_perl.</p> <p>Happy Halloween</p> <h1 id="METHOD-DETAILS"><a id="METHOD"></a>METHOD DETAILS</h1> <dl> <dt id="new-(constructor)"><a id="new"></a><a id="new-constructor"></a><code>new (constructor)</code></dt> <dd> <pre><code>$masker = new DBIx::IO::Mask($dbh,$field_name); $masker = new DBIx::IO::Mask($dbh,undef,$table_name,$masked_col_name,$id_col_name,$no_cache);</code></pre> <p>Create a new $masker object for all your masking pleasures with a db handle, $dbh from DBI (or DBIAccess). The rest of the arguments are optional: $table_name contains all the valid values; it defaults to $field_name minus '_ID', which may or may not be present. $id_col_name is the name of the column that contains the id values in $table_name that are masked; it defaults to $field_name. $masked_col_name is the column in $table_name that has the meaningful values the ids refer to; it defaults to 'USER_MASK'. If $no_cache is true, then the cache will be refreshed (data will be pulled from the db, not the cache).</p> <p>Return 0 if $table_name doesn't exist, or no values to mask were found. Return undef if error.</p> </dd> <dt id="pick_list"><code>pick_list</code></dt> <dd> <pre><code>$valid_values = $masker->pick_list();</code></pre> <p>Return a machine sorted list of masks and ids where each element is a hash with keys:</p> <pre><code>ID => the id value MASK => a meaningful indicator of what ID refers to</code></pre> </dd> <dt id="ids_to_mask"><code>ids_to_mask</code></dt> <dd> <pre><code>$ids_to_mask_hash = $masker->ids_to_mask();</code></pre> <p>Return a hash ref of id => mask_value pairs where each key is an id value and each value is meaningful to a human.</p> </dd> <dt id="mask"><code>mask</code></dt> <dd> <pre><code>$masked_value = $masker->mask($id_val);</code></pre> <p>Return the $masked_value of $id_val.</p> </dd> <dt id="unmask"><code>unmask</code></dt> <dd> <pre><code>$id = $masker->unmask($masked_value);</code></pre> <p>Return the $id of a $masked_value. CAUTION: Use ONLY if the masked value column has a unique constraint on it.</p> </dd> </dl> <h1 id="BUGS">BUGS</h1> <p>No known bugs.</p> <h1 id="SEE-ALSO"><a id="SEE"></a>SEE ALSO</h1> <p><a href="/pod/DBIx::IO::Table">DBIx::IO::Table</a>, <a href="/pod/DBIx::IO::Search">DBIx::IO::Search</a>, <a href="/pod/DBIx::IO">DBIx::IO</a></p> <h1 id="AUTHOR">AUTHOR</h1> <p>Reed Sandberg, <reed_sandberg Ó’ yahoo></p> <h1 id="COPYRIGHT-AND-LICENSE"><a id="COPYRIGHT"></a>COPYRIGHT AND LICENSE</h1> <p>Copyright (C) 2000-2008 Reed Sandberg</p> <p>This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.</p> <p>The full text of the license can be found in the LICENSE file included with this module.</p> <div class="pod-errors"><p>1 POD Error</p><div class="pod-errors-detail"><p>The following errors were encountered while parsing the POD:</p><dl><dt>Around line 282:</dt><dd><p>Non-ASCII character seen before =encoding in 'Ó’'. Assuming CP1252</p></dd></dl></div></div></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 DBIx::IO, 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 DBIx::IO</code></pre> <p><a href="/pod/CPAN">CPAN shell</a></p> <pre><code>perl -MCPAN -e shell install DBIx::IO</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>