56
56
<li><a href="http://search.cpan.org">CPAN</a></li>
57
<li><a href="http://www.perl.org">Perl.org</a></li>
57
58
<li><a href="http://www.perl.com">Perl.com</a></li>
58
<li><a href="http://www.perl.org">Perl.org</a></li>
59
<li><a href="http://perlbuzz.com">Perl Buzz</a></li>
60
<li><a href="http://www.perlfoundation.org/perl5/index.cgi">Perl 5 Wiki</a></li>
61
<li><a href="http://jobs.perl.org">Perl Jobs</a></li>
59
62
<li><a href="http://www.pm.org">Perl Mongers</a></li>
60
63
<li><a href="http://www.perlmonks.org">Perl Monks</a></li>
61
64
<li><a href="http://planet.perl.org">Planet Perl</a></li>
66
69
<li>Site maintained by<br><a href="http://perl.jonallen.info">Jon Allen</a>
67
70
(<a href="http://perl.jonallen.info">JJ</a>)</li>
68
<li class="spaced">Last updated on<br>23 April 2006</li>
71
<li class="spaced">Last updated on<br>23 December 2007</li>
69
72
<li class="spaced">See the <a href="http://perl.jonallen.info/projects/perldoc">project page</a> for
76
79
<div id="centerContent">
77
80
<div id="contentHeader">
78
81
<div id="contentHeaderLeft"><a href="#" onClick="showLeft()">Show navigation</a></div>
79
<div id="contentHeaderCentre">-- Perl 5.8.8 documentation --</div>
82
<div id="contentHeaderCentre">-- Perl 5.10.0 documentation --</div>
80
83
<div id="contentHeaderRight"><a href="#" onClick="showRight()">Show toolbar</a></div>
82
85
<div id="breadCrumbs"><a href="../index.html">Home</a> > <a href="../index-modules-A.html">Core modules</a> > <a href="../index-modules-N.html">N</a> > Net::netent</div>
84
87
<div id="contentBody"><div class="title_container"><div class="page_title">Net::netent</div></div><ul><li><a href="#NAME">NAME</a><li><a href="#SYNOPSIS">SYNOPSIS</a><li><a href="#DESCRIPTION">DESCRIPTION</a><li><a href="#EXAMPLES">EXAMPLES</a><li><a href="#NOTE">NOTE</a><li><a href="#AUTHOR">AUTHOR</a></ul><a name="NAME"></a><h1>NAME</h1>
85
88
<p>Net::netent - by-name interface to Perl's built-in getnet*() functions</p>
86
89
<a name="SYNOPSIS"></a><h1>SYNOPSIS</h1>
87
<pre class="verbatim"> <a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../Net/netent.html">Net::netent</a> <span class="q">qw(:FIELDS)</span><span class="sc">;</span>
90
<pre class="verbatim"> <a class="l_k" href="../functions/use.html">use</a> <span class="w">Net::netent</span> <span class="q">qw(:FIELDS)</span><span class="sc">;</span>
88
91
<a class="l_k" href="../functions/getnetbyname.html">getnetbyname</a><span class="s">(</span><span class="q">"loopback"</span><span class="s">)</span> or <a class="l_k" href="../functions/die.html">die</a> <span class="q">"bad net"</span><span class="sc">;</span>
89
92
<a class="l_k" href="../functions/printf.html">printf</a> <span class="q">"%s is %08X\n"</span><span class="cm">,</span> <span class="i">$n_name</span><span class="cm">,</span> <span class="i">$n_net</span><span class="sc">;</span></pre>
90
<pre class="verbatim"> <a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../Net/netent.html">Net::netent</a><span class="sc">;</span></pre>
93
<pre class="verbatim"> <a class="l_k" href="../functions/use.html">use</a> <span class="w">Net::netent</span><span class="sc">;</span></pre>
91
94
<pre class="verbatim"> <span class="i">$n</span> = <a class="l_k" href="../functions/getnetbyname.html">getnetbyname</a><span class="s">(</span><span class="q">"loopback"</span><span class="s">)</span> or <a class="l_k" href="../functions/die.html">die</a> <span class="q">"bad net"</span><span class="sc">;</span>
92
95
<span class="s">{</span> <span class="c"># there's gotta be a better way, eh?</span>
93
96
<span class="i">@bytes</span> = <a class="l_k" href="../functions/unpack.html">unpack</a><span class="s">(</span><span class="q">"C4"</span><span class="cm">,</span> <a class="l_k" href="../functions/pack.html">pack</a><span class="s">(</span><span class="q">"N"</span><span class="cm">,</span> <span class="i">$n</span><span class="i">->net</span><span class="s">)</span><span class="s">)</span><span class="sc">;</span>
100
103
"Net::netent" objects. This object has methods that return the similarly
101
104
named structure field name from the C's netent structure from <i>netdb.h</i>;
102
105
namely name, aliases, addrtype, and net. The aliases
103
method returns an array reference, the rest scalars. </p>
106
method returns an array reference, the rest scalars.</p>
104
107
<p>You may also import all the structure fields directly into your namespace
105
108
as regular variables using the :FIELDS import tag. (Note that this still
106
109
overrides your core functions.) Access these fields as variables named
107
with a preceding <code class="inline">n_</code>
110
with a preceding <code class="inline"><span class="w">n_</span></code>
108
111
. Thus, <code class="inline"><span class="i">$net_obj</span><span class="i">->name</span><span class="s">(</span><span class="s">)</span></code>
110
113
$n_name if you import the fields. Array references are available as
118
121
pass the <code class="inline"><a class="l_k" href="../functions/use.html">use</a></code> an empty import list, and then access
119
122
function functions with their full qualified names.
120
123
On the other hand, the built-ins are still available
121
via the <code class="inline">CORE::</code>
124
via the <code class="inline"><span class="w">CORE::</span></code>
122
125
pseudo-package.</p>
123
126
<a name="EXAMPLES"></a><h1>EXAMPLES</h1>
124
127
<p>The getnet() functions do this in the Perl core:</p>
125
128
<pre class="verbatim"> sv_setiv(sv, (I32)nent->n_net);</pre><p>The gethost() functions do this in the Perl core:</p>
126
<pre class="verbatim"> <span class="i">sv_setpvn</span><span class="s">(</span>sv<span class="cm">,</span> hent->h_addr<span class="cm">,</span> len<span class="s">)</span><span class="sc">;</span></pre>
129
<pre class="verbatim"> <span class="i">sv_setpvn</span><span class="s">(</span><span class="w">sv</span><span class="cm">,</span> <span class="w">hent</span><span class="w">->h_addr</span><span class="cm">,</span> <span class="w">len</span><span class="s">)</span><span class="sc">;</span></pre>
127
130
<p>That means that the address comes back in binary for the
128
131
host functions, and as a regular perl integer for the net ones.
129
132
This seems a bug, but here's how to deal with it:</p>
130
<pre class="verbatim"> <a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../strict.html">strict</a><span class="sc">;</span>
131
<a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../Socket.html">Socket</a><span class="sc">;</span>
132
<a class="l_k" href="../functions/use.html">use</a> <a class="l_w" href="../Net/netent.html">Net::netent</a><span class="sc">;</span></pre>
133
<pre class="verbatim"> <a class="l_k" href="../functions/use.html">use</a> <span class="w">strict</span><span class="sc">;</span>
134
<a class="l_k" href="../functions/use.html">use</a> <span class="w">Socket</span><span class="sc">;</span>
135
<a class="l_k" href="../functions/use.html">use</a> <span class="w">Net::netent</span><span class="sc">;</span></pre>
133
136
<pre class="verbatim"> <span class="i">@ARGV</span> = <span class="s">(</span><span class="q">'loopback'</span><span class="s">)</span> unless <span class="i">@ARGV</span><span class="sc">;</span></pre>
134
137
<pre class="verbatim"> <a class="l_k" href="../functions/my.html">my</a><span class="s">(</span><span class="i">$n</span><span class="cm">,</span> <span class="i">$net</span><span class="s">)</span><span class="sc">;</span></pre>
135
138
<pre class="verbatim"> for $net ( @ARGV ) {</pre><pre class="verbatim"> unless <span class="s">(</span><span class="i">$n</span> = <a class="l_k" href="../functions/getnetbyname.html">getnetbyname</a><span class="s">(</span><span class="i">$net</span><span class="s">)</span><span class="s">)</span> <span class="s">{</span>
141
144
<a class="l_k" href="../functions/lc.html">lc</a><span class="s">(</span><span class="i">$n</span><span class="i">->name</span><span class="s">)</span> eq <a class="l_k" href="../functions/lc.html">lc</a><span class="s">(</span><span class="i">$net</span><span class="s">)</span> ? <span class="q">""</span> <span class="co">:</span> <span class="q">"*really* "</span><span class="cm">,</span>
142
145
<span class="i">$n</span><span class="i">->name</span><span class="sc">;</span></pre>
143
146
<pre class="verbatim"> <a class="l_k" href="../functions/print.html">print</a> <span class="q">"\taliases are "</span><span class="cm">,</span> <a class="l_k" href="../functions/join.html">join</a><span class="s">(</span><span class="q">", "</span><span class="cm">,</span> <span class="i">@</span>{<span class="i">$n</span><span class="i">->aliases</span>}<span class="s">)</span><span class="cm">,</span> <span class="q">"\n"</span>
144
if <span class="i">@</span>{<span class="i">$n</span><span class="i">->aliases</span>}<span class="sc">;</span> </pre>
147
if <span class="i">@</span>{<span class="i">$n</span><span class="i">->aliases</span>}<span class="sc">;</span></pre>
145
148
<pre class="verbatim"> <span class="c"># this is stupid; first, why is this not in binary?</span>
146
149
<span class="c"># second, why am i going through these convolutions</span>
147
150
<span class="c"># to make it looks right</span>