CINXE.COM
Shell - run shell commands transparently within perl - Perldoc Browser
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Shell - run shell commands transparently within perl - Perldoc Browser</title> <link rel="search" href="/opensearch.xml" type="application/opensearchdescription+xml" title="Perldoc Browser"> <link rel="canonical" href="https://perldoc.perl.org/Shell"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/stackoverflow-light.min.css" integrity="sha512-cG1IdFxqipi3gqLmksLtuk13C+hBa57a6zpWxMeoY3Q9O6ooFxq50DayCdm0QrDgZjMUn23z/0PMZlgft7Yp5Q==" crossorigin="anonymous" /> <style> body { background: #f4f4f5; color: #020202; } .navbar-dark { background-image: -webkit-linear-gradient(top, #005f85 0, #002e49 100%); background-image: -o-linear-gradient(top, #005f85 0, #002e49 100%); background-image: linear-gradient(to bottom, #005f85 0, #002e49 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff005f85', endColorstr='#ff002e49', GradientType=0); background-repeat: repeat-x; } .navbar-dark .navbar-nav .nav-link, .navbar-dark .navbar-nav .nav-link:focus { color: #fff } .navbar-dark .navbar-nav .nav-link:hover { color: #ffef68 } #wrapperlicious { margin: 0 auto; font: 0.9em 'Helvetica Neue', Helvetica, sans-serif; font-weight: normal; line-height: 1.5em; margin: 0; padding: 0; } #wrapperlicious h1 { font-size: 1.5em } #wrapperlicious h2 { font-size: 1.3em } #wrapperlicious h3 { font-size: 1.1em } #wrapperlicious h4 { font-size: 0.9em } #wrapperlicious h1, #wrapperlicious h2, #wrapperlicious h3, #wrapperlicious h4, #wrapperlicious dt { color: #020202; margin-top: 1em; margin-bottom: 1em; position: relative; font-weight: bold; } #wrapperlicious a { color: inherit; text-decoration: underline } #wrapperlicious #toc { text-decoration: none } #wrapperlicious a:hover { color: #2a2a2a } #wrapperlicious a img { border: 0 } #wrapperlicious :not(pre) > code { color: inherit; background-color: rgba(0, 0, 0, 0.04); border-radius: 3px; font: 0.9em Consolas, Menlo, Monaco, monospace; padding: 0.3em; } #wrapperlicious dd { margin: 0; margin-left: 2em; } #wrapperlicious dt { color: #2a2a2a; font-weight: bold; margin-left: 0.9em; } #wrapperlicious p { margin-bottom: 1em; margin-top: 1em; } #wrapperlicious li > p { margin-bottom: 0; margin-top: 0; } #wrapperlicious pre { border: 1px solid #c1c1c1; border-radius: 3px; font: 100% Consolas, Menlo, Monaco, monospace; margin-bottom: 1em; margin-top: 1em; } #wrapperlicious pre > code { display: block; background-color: #f6f6f6; font: 0.9em Consolas, Menlo, Monaco, monospace; line-height: 1.5em; text-align: left; white-space: pre; padding: 1em; } #wrapperlicious dl, #wrapperlicious ol, #wrapperlicious ul { margin-bottom: 1em; margin-top: 1em; } #wrapperlicious ul { list-style-type: square; } #wrapperlicious ul ul { margin-bottom: 0px; margin-top: 0px; } #footer { font-size: 0.8em; padding-top: 0.5em; text-align: center; } #more { display: inline; font-size: 0.8em; } #perldocdiv { background-color: #fff; border: 1px solid #c1c1c1; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; margin-left: auto; margin-right: auto; padding: 3em; padding-top: 1em; max-width: 960px; } #moduleversion { float: right } #wrapperlicious .leading-notice { font-style: italic; padding-left: 1em; margin-top: 1em; margin-bottom: 1em; } #wrapperlicious .permalink { display: none; left: -0.75em; position: absolute; padding-right: 0.25em; text-decoration: none; } #wrapperlicious h1:hover .permalink, #wrapperlicious h2:hover .permalink, #wrapperlicious h3:hover .permalink, #wrapperlicious h4:hover .permalink, #wrapperlicious dt:hover .permalink { display: block; } </style> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-KVNWBNT5FB"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-KVNWBNT5FB'); gtag('config', 'UA-50555-3'); </script> </head> <body> <nav class="navbar navbar-expand-md navbar-dark bg-dark justify-content-between"> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <a class="navbar-brand" href="/"><img src="/images/perl_camel_30.png" width="30" height="30" class="d-inline-block align-top" alt="Perl Camel Logo"> Perldoc Browser</a> <div class="collapse navbar-collapse" id="navbarNav"> <ul class="navbar-nav mr-auto"> <li class="nav-item dropdown text-nowrap"> <a class="nav-link dropdown-toggle" href="#" id="dropdownlink-stable" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">5.8.8</a> <div class="dropdown-menu" aria-labelledby="dropdownlink-stable"> <a class="dropdown-item" href="/Shell">Latest</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.40.1/Shell">5.40.1</a> <a class="dropdown-item" href="/5.40.0/Shell">5.40.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.38.3/Shell">5.38.3</a> <a class="dropdown-item" href="/5.38.2/Shell">5.38.2</a> <a class="dropdown-item" href="/5.38.1/Shell">5.38.1</a> <a class="dropdown-item" href="/5.38.0/Shell">5.38.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.36.3/Shell">5.36.3</a> <a class="dropdown-item" href="/5.36.2/Shell">5.36.2</a> <a class="dropdown-item" href="/5.36.1/Shell">5.36.1</a> <a class="dropdown-item" href="/5.36.0/Shell">5.36.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.34.3/Shell">5.34.3</a> <a class="dropdown-item" href="/5.34.2/Shell">5.34.2</a> <a class="dropdown-item" href="/5.34.1/Shell">5.34.1</a> <a class="dropdown-item" href="/5.34.0/Shell">5.34.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.32.1/Shell">5.32.1</a> <a class="dropdown-item" href="/5.32.0/Shell">5.32.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.30.3/Shell">5.30.3</a> <a class="dropdown-item" href="/5.30.2/Shell">5.30.2</a> <a class="dropdown-item" href="/5.30.1/Shell">5.30.1</a> <a class="dropdown-item" href="/5.30.0/Shell">5.30.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.28.3/Shell">5.28.3</a> <a class="dropdown-item" href="/5.28.2/Shell">5.28.2</a> <a class="dropdown-item" href="/5.28.1/Shell">5.28.1</a> <a class="dropdown-item" href="/5.28.0/Shell">5.28.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.26.3/Shell">5.26.3</a> <a class="dropdown-item" href="/5.26.2/Shell">5.26.2</a> <a class="dropdown-item" href="/5.26.1/Shell">5.26.1</a> <a class="dropdown-item" href="/5.26.0/Shell">5.26.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.24.4/Shell">5.24.4</a> <a class="dropdown-item" href="/5.24.3/Shell">5.24.3</a> <a class="dropdown-item" href="/5.24.2/Shell">5.24.2</a> <a class="dropdown-item" href="/5.24.1/Shell">5.24.1</a> <a class="dropdown-item" href="/5.24.0/Shell">5.24.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.22.4/Shell">5.22.4</a> <a class="dropdown-item" href="/5.22.3/Shell">5.22.3</a> <a class="dropdown-item" href="/5.22.2/Shell">5.22.2</a> <a class="dropdown-item" href="/5.22.1/Shell">5.22.1</a> <a class="dropdown-item" href="/5.22.0/Shell">5.22.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.20.3/Shell">5.20.3</a> <a class="dropdown-item" href="/5.20.2/Shell">5.20.2</a> <a class="dropdown-item" href="/5.20.1/Shell">5.20.1</a> <a class="dropdown-item" href="/5.20.0/Shell">5.20.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.18.4/Shell">5.18.4</a> <a class="dropdown-item" href="/5.18.3/Shell">5.18.3</a> <a class="dropdown-item" href="/5.18.2/Shell">5.18.2</a> <a class="dropdown-item" href="/5.18.1/Shell">5.18.1</a> <a class="dropdown-item" href="/5.18.0/Shell">5.18.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.16.3/Shell">5.16.3</a> <a class="dropdown-item" href="/5.16.2/Shell">5.16.2</a> <a class="dropdown-item" href="/5.16.1/Shell">5.16.1</a> <a class="dropdown-item" href="/5.16.0/Shell">5.16.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.14.4/Shell">5.14.4</a> <a class="dropdown-item" href="/5.14.3/Shell">5.14.3</a> <a class="dropdown-item" href="/5.14.2/Shell">5.14.2</a> <a class="dropdown-item" href="/5.14.1/Shell">5.14.1</a> <a class="dropdown-item" href="/5.14.0/Shell">5.14.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.12.5/Shell">5.12.5</a> <a class="dropdown-item" href="/5.12.4/Shell">5.12.4</a> <a class="dropdown-item" href="/5.12.3/Shell">5.12.3</a> <a class="dropdown-item" href="/5.12.2/Shell">5.12.2</a> <a class="dropdown-item" href="/5.12.1/Shell">5.12.1</a> <a class="dropdown-item" href="/5.12.0/Shell">5.12.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.10.1/Shell">5.10.1</a> <a class="dropdown-item" href="/5.10.0/Shell">5.10.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.8.9/Shell">5.8.9</a> <a class="dropdown-item active" href="/5.8.8/Shell">5.8.8</a> <a class="dropdown-item" href="/5.8.7/Shell">5.8.7</a> <a class="dropdown-item" href="/5.8.6/Shell">5.8.6</a> <a class="dropdown-item" href="/5.8.5/Shell">5.8.5</a> <a class="dropdown-item" href="/5.8.4/Shell">5.8.4</a> <a class="dropdown-item" href="/5.8.3/Shell">5.8.3</a> <a class="dropdown-item" href="/5.8.2/Shell">5.8.2</a> <a class="dropdown-item" href="/5.8.1/Shell">5.8.1</a> <a class="dropdown-item" href="/5.8.0/Shell">5.8.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.6.2/Shell">5.6.2</a> <a class="dropdown-item" href="/5.6.1/Shell">5.6.1</a> <a class="dropdown-item" href="/5.6.0/Shell">5.6.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.005_04/Shell">5.005_04</a> <a class="dropdown-item" href="/5.005_03/Shell">5.005_03</a> <a class="dropdown-item" href="/5.005_02/Shell">5.005_02</a> <a class="dropdown-item" href="/5.005_01/Shell">5.005_01</a> <a class="dropdown-item" href="/5.005/Shell">5.005</a> </div> </li> <li class="nav-item dropdown text-nowrap"> <a class="nav-link dropdown-toggle" href="#" id="dropdownlink-dev" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dev</a> <div class="dropdown-menu" aria-labelledby="dropdownlink-dev"> <a class="dropdown-item" href="/blead/Shell">blead</a> <a class="dropdown-item" href="/5.41.9/Shell">5.41.9</a> <a class="dropdown-item" href="/5.41.8/Shell">5.41.8</a> <a class="dropdown-item" href="/5.41.7/Shell">5.41.7</a> <a class="dropdown-item" href="/5.41.6/Shell">5.41.6</a> <a class="dropdown-item" href="/5.41.5/Shell">5.41.5</a> <a class="dropdown-item" href="/5.41.4/Shell">5.41.4</a> <a class="dropdown-item" href="/5.41.3/Shell">5.41.3</a> <a class="dropdown-item" href="/5.41.2/Shell">5.41.2</a> <a class="dropdown-item" href="/5.41.1/Shell">5.41.1</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.40.1-RC1/Shell">5.40.1-RC1</a> <a class="dropdown-item" href="/5.40.0-RC2/Shell">5.40.0-RC2</a> <a class="dropdown-item" href="/5.40.0-RC1/Shell">5.40.0-RC1</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.39.10/Shell">5.39.10</a> <a class="dropdown-item" href="/5.39.9/Shell">5.39.9</a> <a class="dropdown-item" href="/5.39.8/Shell">5.39.8</a> <a class="dropdown-item" href="/5.39.7/Shell">5.39.7</a> <a class="dropdown-item" href="/5.39.6/Shell">5.39.6</a> <a class="dropdown-item" href="/5.39.5/Shell">5.39.5</a> <a class="dropdown-item" href="/5.39.4/Shell">5.39.4</a> <a class="dropdown-item" href="/5.39.3/Shell">5.39.3</a> <a class="dropdown-item" href="/5.39.2/Shell">5.39.2</a> <a class="dropdown-item" href="/5.39.1/Shell">5.39.1</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.38.3-RC1/Shell">5.38.3-RC1</a> </div> </li> <li class="nav-item dropdown text-nowrap"> <a class="nav-link dropdown-toggle" href="#" id="dropdownlink-nav" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Documentation</a> <div class="dropdown-menu" aria-labelledby="dropdownlink-nav"> <a class="dropdown-item" href="/5.8.8/perl">Perl</a> <a class="dropdown-item" href="/5.8.8/perlintro">Intro</a> <a class="dropdown-item" href="/5.8.8/perl#Tutorials">Tutorials</a> <a class="dropdown-item" href="/5.8.8/perlfaq">FAQs</a> <a class="dropdown-item" href="/5.8.8/perl#Reference-Manual">Reference</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.8.8/perlop">Operators</a> <a class="dropdown-item" href="/5.8.8/functions">Functions</a> <a class="dropdown-item" href="/5.8.8/variables">Variables</a> <a class="dropdown-item" href="/5.8.8/modules">Modules</a> <a class="dropdown-item" href="/5.8.8/perlutil">Utilities</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.8.8/perldelta">Release Notes</a> <a class="dropdown-item" href="/5.8.8/perlcommunity">Community</a> <a class="dropdown-item" href="/5.8.8/perlhist">History</a> </div> </li> </ul> <ul class="navbar-nav"> <script> function set_expand (expand) { var perldocdiv = document.getElementById('perldocdiv'); var width = window.getComputedStyle(perldocdiv).getPropertyValue('max-width'); var expanded = (width == '' || width == 'none') ? true : false; if (expand === null) { expand = !expanded; } if ((expand && !expanded) || (!expand && expanded)) { perldocdiv.style.setProperty('max-width', expand ? 'none' : '960px'); var button_classlist = document.getElementById('content-expand-button').classList; if (expand) { button_classlist.add('btn-light'); button_classlist.remove('btn-outline-light'); } else { button_classlist.add('btn-outline-light'); button_classlist.remove('btn-light'); } } return expand; } function toggle_expand () { var expand = set_expand(null); document.cookie = 'perldoc_expand=' + (expand ? 1 : 0) + '; path=/; expires=Tue, 19 Jan 2038 03:14:07 UTC'; } function read_expand () { return document.cookie.split(';').some(function (item) { return item.indexOf('perldoc_expand=1') >= 0 }); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', function () { if (read_expand()) { set_expand(true); } }); } else if (read_expand()) { set_expand(true); } </script> <button id="content-expand-button" type="button" class="btn btn-outline-light d-none d-lg-inline-block mr-4" onclick="toggle_expand()">Expand</button> </ul> <form class="form-inline" method="get" action="/5.8.8/search"> <input class="form-control mr-3" type="search" name="q" placeholder="Search" aria-label="Search" value=""> </form> </div> </nav> <div id="wrapperlicious" class="container-fluid"> <div id="perldocdiv"> <div id="links"> <a href="/5.8.8/Shell">Shell</a> <div id="more"> (<a href="/5.8.8/Shell.txt">source</a>, <a href="https://metacpan.org/pod/Shell">CPAN</a>) </div> <div id="moduleversion">version 0.6</div> </div> <div class="leading-notice"> You are viewing the version of this documentation from Perl 5.8.8. <a href="/Shell">View the latest version</a> </div> <h1><a id="toc">CONTENTS</a></h1> <ul> <li> <a class="text-decoration-none" href="#NAME">NAME</a> </li> <li> <a class="text-decoration-none" href="#SYNOPSIS">SYNOPSIS</a> </li> <li> <a class="text-decoration-none" href="#DESCRIPTION">DESCRIPTION</a> <ul> <li> <a class="text-decoration-none" href="#Caveats">Caveats</a> </li> <li> <a class="text-decoration-none" href="#Escaping-Magic-Characters">Escaping Magic Characters</a> </li> <li> <a class="text-decoration-none" href="#Configuration">Configuration</a> </li> </ul> </li> <li> <a class="text-decoration-none" href="#BUGS">BUGS</a> </li> <li> <a class="text-decoration-none" href="#AUTHOR">AUTHOR</a> </li> </ul> <h1 id="NAME"><a class="permalink" href="#NAME">#</a>NAME</h1> <p>Shell - run shell commands transparently within perl</p> <h1 id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">#</a>SYNOPSIS</h1> <pre><code>use Shell qw(cat ps cp); $passwd = cat('</etc/passwd'); @pslines = ps('-ww'), cp("/etc/passwd", "/tmp/passwd"); # object oriented my $sh = Shell->new; print $sh->ls('-l');</code></pre> <h1 id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">#</a>DESCRIPTION</h1> <h2 id="Caveats"><a class="permalink" href="#Caveats">#</a>Caveats</h2> <p>This package is included as a show case, illustrating a few Perl features. It shouldn't be used for production programs. Although it does provide a simple interface for obtaining the standard output of arbitrary commands, there may be better ways of achieving what you need.</p> <p>Running shell commands while obtaining standard output can be done with the <code>qx/STRING/</code> operator, or by calling <code>open</code> with a filename expression that ends with <code>|</code>, giving you the option to process one line at a time. If you don't need to process standard output at all, you might use <code>system</code> (in preference of doing a print with the collected standard output).</p> <p>Since Shell.pm and all of the aforementioned techniques use your system's shell to call some local command, none of them is portable across different systems. Note, however, that there are several built in functions and library packages providing portable implementations of functions operating on files, such as: <code>glob</code>, <code>link</code> and <code>unlink</code>, <code>mkdir</code> and <code>rmdir</code>, <code>rename</code>, <code>File::Compare</code>, <code>File::Copy</code>, <code>File::Find</code> etc.</p> <p>Using Shell.pm while importing <code>foo</code> creates a subroutine <code>foo</code> in the namespace of the importing package. Calling <code>foo</code> with arguments <code>arg1</code>, <code>arg2</code>,... results in a shell command <code>foo arg1 arg2...</code>, where the function name and the arguments are joined with a blank. (See the subsection on Escaping magic characters.) Since the result is essentially a command line to be passed to the shell, your notion of arguments to the Perl function is not necessarily identical to what the shell treats as a command line token, to be passed as an individual argument to the program. Furthermore, note that this implies that <code>foo</code> is callable by file name only, which frequently depends on the setting of the program's environment.</p> <p>Creating a Shell object gives you the opportunity to call any command in the usual OO notation without requiring you to announce it in the <code>use Shell</code> statement. Don't assume any additional semantics being associated with a Shell object: in no way is it similar to a shell process with its environment or current working directory or any other setting.</p> <h2 id="Escaping-Magic-Characters"><a class="permalink" href="#Escaping-Magic-Characters">#</a><a id="Escaping"></a>Escaping Magic Characters</h2> <p>It is, in general, impossible to take care of quoting the shell's magic characters. For some obscure reason, however, Shell.pm quotes apostrophes (<code>'</code>) and backslashes (<code>\</code>) on UNIX, and spaces and quotes (<code>"</code>) on Windows.</p> <h2 id="Configuration"><a class="permalink" href="#Configuration">#</a>Configuration</h2> <p>If you set $Shell::capture_stderr to true, the module will attempt to capture the standard error output of the process as well. This is done by adding <code>2>&1</code> to the command line, so don't try this on a system not supporting this redirection.</p> <p>If you set $Shell::raw to true no quoting whatsoever is done.</p> <h1 id="BUGS"><a class="permalink" href="#BUGS">#</a>BUGS</h1> <p>Quoting should be off by default.</p> <p>It isn't possible to call shell built in commands, but it can be done by using a workaround, e.g. shell( '-c', 'set' ).</p> <p>Capturing standard error does not work on some systems (e.g. VMS).</p> <h1 id="AUTHOR"><a class="permalink" href="#AUTHOR">#</a>AUTHOR</h1> <pre><code>Date: Thu, 22 Sep 94 16:18:16 -0700 Message-Id: <9409222318.AA17072@scalpel.netlabs.com> To: perl5-porters@isu.edu From: Larry Wall <lwall@scalpel.netlabs.com> Subject: a new module I just wrote</code></pre> <p>Here's one that'll whack your mind a little out.</p> <pre><code>#!/usr/bin/perl use Shell; $foo = echo("howdy", "<funny>", "world"); print $foo; $passwd = cat("</etc/passwd"); print $passwd; sub ps; print ps -ww; cp("/etc/passwd", "/etc/passwd.orig");</code></pre> <p>That's maybe too gonzo. It actually exports an AUTOLOAD to the current package (and uncovered a bug in Beta 3, by the way). Maybe the usual usage should be</p> <pre><code>use Shell qw(echo cat ps cp);</code></pre> <p>Larry Wall</p> <p>Changes by Jenda@Krynicky.cz and Dave Cottle <d.cottle@csc.canterbury.ac.nz>.</p> <p>Changes for OO syntax and bug fixes by Casey West <casey@geeknest.com>.</p> <p><code>$Shell::raw</code> and pod rewrite by Wolfgang Laun.</p> </div> <div id="footer"> <p>Perldoc Browser is maintained by Dan Book (<a href="https://metacpan.org/author/DBOOK">DBOOK</a>). Please contact him via the <a href="https://github.com/Grinnz/perldoc-browser/issues">GitHub issue tracker</a> or <a href="mailto:dbook@cpan.org">email</a> regarding any issues with the site itself, search, or rendering of documentation.</p> <p>The Perl documentation is maintained by the Perl 5 Porters in the development of Perl. Please contact them via the <a href="https://github.com/Perl/perl5/issues">Perl issue tracker</a>, the <a href="https://lists.perl.org/list/perl5-porters.html">mailing list</a>, or <a href="https://kiwiirc.com/client/irc.perl.org/p5p">IRC</a> to report any issues with the contents or format of the documentation.</p> </div> </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.slim.min.js" integrity="sha512-/DXTXr6nQodMUiq+IUJYCt2PPOUjrHJ9wFrqpJ3XkgPNOZVfMok7cRw6CSxyCQxXn6ozlESsSh1/sMCTF1rL/g==" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.1/umd/popper.min.js" integrity="sha512-ubuT8Z88WxezgSqf3RLuNi5lmjstiJcyezx34yIU2gAHonIi27Na7atqzUZCOoY4CExaoFumzOsFQ2Ch+I/HCw==" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js" integrity="sha384-B4gt1jrGC7Jh4AgTPSdUtOBvfO8shuf57BaghqFfPlYxofvL8/KUEfYiJOMMV+rV" crossorigin="anonymous"></script> <script src="/js/highlight.pack.js"></script> <script>hljs.highlightAll();</script> </body> </html>