mm_any.html
来自「perl教程」· HTML 代码 · 共 720 行 · 第 1/3 页
HTML
720 行
<?xml version="1.0" ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<!-- saved from url=(0017)http://localhost/ -->
<script language="JavaScript" src="../../displayToc.js"></script>
<script language="JavaScript" src="../../tocParas.js"></script>
<script language="JavaScript" src="../../tocTab.js"></script>
<link rel="stylesheet" type="text/css" href="../../scineplex.css">
<title>ExtUtils::MM_Any - Platform-agnostic MM methods</title>
<link rel="stylesheet" href="../../Active.css" type="text/css" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rev="made" href="mailto:" />
</head>
<body>
<script>writelinks('__top__',2);</script>
<h1><a>ExtUtils::MM_Any - Platform-agnostic MM methods</a></h1>
<p><a name="__index__"></a></p>
<!-- INDEX BEGIN -->
<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="#methods">METHODS</a></li>
<ul>
<li><a href="#crossplatform_helper_methods">Cross-platform helper methods</a></li>
<ul>
<li><a href="#os_flavor_abstract">os_flavor <em>Abstract</em></a></li>
<li><a href="#os_flavor_is">os_flavor_is</a></li>
<li><a href="#split_command">split_command</a></li>
<li><a href="#echo">echo</a></li>
<li><a href="#wraplist">wraplist</a></li>
<li><a href="#cd_abstract">cd <em>Abstract</em></a></li>
<li><a href="#oneliner_abstract">oneliner <em>Abstract</em></a></li>
<li><a href="#quote_literal_abstract">quote_literal <em>Abstract</em></a></li>
<li><a href="#escape_newlines_abstract">escape_newlines <em>Abstract</em></a></li>
<li><a href="#max_exec_len_abstract">max_exec_len <em>Abstract</em></a></li>
</ul>
<li><a href="#targets">Targets</a></li>
<ul>
<li><a href="#all_target">all_target</a></li>
<li><a href="#blibdirs_target">blibdirs_target</a></li>
<li><a href="#clean__o_">clean (o)</a></li>
<li><a href="#clean_subdirs_target">clean_subdirs_target</a></li>
<li><a href="#dir_target">dir_target</a></li>
<li><a href="#distdir">distdir</a></li>
<li><a href="#dist_test">dist_test</a></li>
<li><a href="#dynamic__o_">dynamic (o)</a></li>
<li><a href="#htmlifypods">htmlifypods</a></li>
<li><a href="#htmlifypods_target">htmlifypods_target</a></li>
<li><a href="#makemakerdflt_target">makemakerdflt_target</a></li>
<li><a href="#manifypods_target">manifypods_target</a></li>
<li><a href="#metafile_target">metafile_target</a></li>
<li><a href="#distmeta_target">distmeta_target</a></li>
<li><a href="#realclean__o_">realclean (o)</a></li>
<li><a href="#realclean_subdirs_target">realclean_subdirs_target</a></li>
<li><a href="#signature_target">signature_target</a></li>
<li><a href="#distsignature_target">distsignature_target</a></li>
<li><a href="#special_targets">special_targets</a></li>
</ul>
<li><a href="#init_methods">Init methods</a></li>
<ul>
<li><a href="#init_inst">init_INST</a></li>
<li><a href="#init_install">init_INSTALL</a></li>
<li><a href="#init_install_from_prefix">init_INSTALL_from_PREFIX</a></li>
<li><a href="#init_from_installbase">init_from_INSTALLBASE</a></li>
<li><a href="#init_version_abstract">init_VERSION <em>Abstract</em></a></li>
<li><a href="#init_others_abstract">init_others <em>Abstract</em></a></li>
<li><a href="#init_dirfilesep_abstract">init_DIRFILESEP <em>Abstract</em></a></li>
<li><a href="#init_linker_abstract">init_linker <em>Abstract</em></a></li>
<li><a href="#init_platform">init_platform</a></li>
</ul>
<li><a href="#tools">Tools</a></li>
<ul>
<li><a href="#manifypods">manifypods</a></li>
<li><a href="#pod2html_macro">POD2HTML_macro</a></li>
<li><a href="#pod2man_macro">POD2MAN_macro</a></li>
<li><a href="#test_via_harness">test_via_harness</a></li>
<li><a href="#test_via_script">test_via_script</a></li>
<li><a href="#tool_autosplit">tool_autosplit</a></li>
</ul>
<li><a href="#file__spec_wrappers">File::Spec wrappers</a></li>
<ul>
<li><a href="#catfile">catfile</a></li>
</ul>
<li><a href="#misc">Misc</a></li>
<ul>
<li><a href="#find_tests">find_tests</a></li>
<li><a href="#extra_clean_files">extra_clean_files</a></li>
<li><a href="#installvars">installvars</a></li>
<li><a href="#libscan">libscan</a></li>
<li><a href="#platform_constants">platform_constants</a></li>
</ul>
</ul>
<li><a href="#author">AUTHOR</a></li>
</ul>
<!-- INDEX END -->
<hr />
<p>
</p>
<h1><a name="name">NAME</a></h1>
<p>ExtUtils::MM_Any - Platform-agnostic MM methods</p>
<p>
</p>
<hr />
<h1><a name="synopsis">SYNOPSIS</a></h1>
<pre>
FOR INTERNAL USE ONLY!</pre>
<pre>
<span class="keyword">package</span> <span class="variable">ExtUtils::MM_SomeOS</span><span class="operator">;</span>
</pre>
<pre>
<span class="comment"># Temporarily, you have to subclass both. Put MM_Any first.</span>
<span class="keyword">require</span> <span class="variable">ExtUtils::MM_Any</span><span class="operator">;</span>
<span class="keyword">require</span> <span class="variable">ExtUtils::MM_Unix</span><span class="operator">;</span>
<span class="variable">@ISA</span> <span class="operator">=</span> <span class="string">qw(ExtUtils::MM_Any ExtUtils::Unix)</span><span class="operator">;</span>
</pre>
<p>
</p>
<hr />
<h1><a name="description">DESCRIPTION</a></h1>
<p><strong>FOR INTERNAL USE ONLY!</strong></p>
<p>ExtUtils::MM_Any is a superclass for the ExtUtils::MM_* set of
modules. It contains methods which are either inherently
cross-platform or are written in a cross-platform manner.</p>
<p>Subclass off of ExtUtils::MM_Any <em>and</em> ExtUtils::MM_Unix. This is a
temporary solution.</p>
<p><strong>THIS MAY BE TEMPORARY!</strong></p>
<p>
</p>
<hr />
<h1><a name="methods">METHODS</a></h1>
<p>Any methods marked <em>Abstract</em> must be implemented by subclasses.</p>
<p>
</p>
<h2><a name="crossplatform_helper_methods">Cross-platform helper methods</a></h2>
<p>These are methods which help writing cross-platform code.</p>
<p>
</p>
<h3><a name="os_flavor_abstract">os_flavor <em>Abstract</em></a></h3>
<pre>
<span class="keyword">my</span> <span class="variable">@os_flavor</span> <span class="operator">=</span> <span class="variable">$mm</span><span class="operator">-></span><span class="variable">os_flavor</span><span class="operator">;</span>
</pre>
<p>@os_flavor is the style of operating system this is, usually
corresponding to the MM_*.pm file we're using.</p>
<p>The first element of @os_flavor is the major family (ie. Unix,
Windows, VMS, OS/2, etc...) and the rest are sub families.</p>
<p>Some examples:</p>
<pre>
Cygwin98 ('Unix', 'Cygwin', 'Cygwin9x')
Windows NT ('Win32', 'WinNT')
Win98 ('Win32', 'Win9x')
Linux ('Unix', 'Linux')
MacOS X ('Unix', 'Darwin', 'MacOS', 'MacOS X')
OS/2 ('OS/2')</pre>
<p>This is used to write code for styles of operating system.
See <code>os_flavor_is()</code> for use.</p>
<p>
</p>
<h3><a name="os_flavor_is">os_flavor_is</a></h3>
<pre>
<span class="keyword">my</span> <span class="variable">$is_this_flavor</span> <span class="operator">=</span> <span class="variable">$mm</span><span class="operator">-></span><span class="variable">os_flavor_is</span><span class="operator">(</span><span class="variable">$this_flavor</span><span class="operator">);</span>
<span class="keyword">my</span> <span class="variable">$is_this_flavor</span> <span class="operator">=</span> <span class="variable">$mm</span><span class="operator">-></span><span class="variable">os_flavor_is</span><span class="operator">(</span><span class="variable">@one_of_these_flavors</span><span class="operator">);</span>
</pre>
<p>Checks to see if the current operating system is one of the given flavors.</p>
<p>This is useful for code like:</p>
<pre>
<span class="keyword">if</span><span class="operator">(</span> <span class="variable">$mm</span><span class="operator">-></span><span class="variable">os_flavor_is</span><span class="operator">(</span><span class="string">'Unix'</span><span class="operator">)</span> <span class="operator">)</span> <span class="operator">{</span>
<span class="variable">$out</span> <span class="operator">=</span> <span class="string">`foo 2>&1`</span><span class="operator">;</span>
<span class="operator">}</span>
<span class="keyword">else</span> <span class="operator">{</span>
<span class="variable">$out</span> <span class="operator">=</span> <span class="string">`foo`</span><span class="operator">;</span>
<span class="operator">}</span>
</pre>
<p>
</p>
<h3><a name="split_command">split_command</a></h3>
<pre>
<span class="keyword">my</span> <span class="variable">@cmds</span> <span class="operator">=</span> <span class="variable">$MM</span><span class="operator">-></span><span class="variable">split_command</span><span class="operator">(</span><span class="variable">$cmd</span><span class="operator">,</span> <span class="variable">@args</span><span class="operator">);</span>
</pre>
<p>Most OS have a maximum command length they can execute at once. Large
modules can easily generate commands well past that limit. Its
necessary to split long commands up into a series of shorter commands.</p>
<p><code>split_command</code> will return a series of @cmds each processing part of
the args. Collectively they will process all the arguments. Each
individual line in @cmds will not be longer than the
$self->max_exec_len being careful to take into account macro expansion.</p>
<p>$cmd should include any switches and repeated initial arguments.</p>
<p>If no @args are given, no @cmds will be returned.</p>
<p>Pairs of arguments will always be preserved in a single command, this
is a heuristic for things like pm_to_blib and pod2man which work on
pairs of arguments. This makes things like this safe:</p>
<pre>
<span class="variable">$self</span><span class="operator">-></span><span class="variable">split_command</span><span class="operator">(</span><span class="variable">$cmd</span><span class="operator">,</span> <span class="variable">%pod2man</span><span class="operator">);</span>
</pre>
<p>
</p>
<h3><a name="echo">echo</a></h3>
<pre>
<span class="keyword">my</span> <span class="variable">@commands</span> <span class="operator">=</span> <span class="variable">$MM</span><span class="operator">-></span><span class="variable">echo</span><span class="operator">(</span><span class="variable">$text</span><span class="operator">);</span>
<span class="keyword">my</span> <span class="variable">@commands</span> <span class="operator">=</span> <span class="variable">$MM</span><span class="operator">-></span><span class="variable">echo</span><span class="operator">(</span><span class="variable">$text</span><span class="operator">,</span> <span class="variable">$file</span><span class="operator">);</span>
<span class="keyword">my</span> <span class="variable">@commands</span> <span class="operator">=</span> <span class="variable">$MM</span><span class="operator">-></span><span class="variable">echo</span><span class="operator">(</span><span class="variable">$text</span><span class="operator">,</span> <span class="variable">$file</span><span class="operator">,</span> <span class="variable">$appending</span><span class="operator">);</span>
</pre>
<p>Generates a set of @commands which print the $text to a $file.</p>
<p>If $file is not given, output goes to STDOUT.</p>
<p>If $appending is true the $file will be appended to rather than
overwritten.</p>
<p>
</p>
<h3><a name="wraplist">wraplist</a></h3>
<pre>
<span class="keyword">my</span> <span class="variable">$args</span> <span class="operator">=</span> <span class="variable">$mm</span><span class="operator">-></span><span class="variable">wraplist</span><span class="operator">(</span><span class="variable">@list</span><span class="operator">);</span>
</pre>
<p>Takes an array of items and turns them into a well-formatted list of
arguments. In most cases this is simply something like:</p>
<pre>
FOO \
BAR \
BAZ</pre>
<p>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?