<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>LinuxSense &#187; Perl</title>
	<atom:link href="http://www.linuxsense.org/archives/tag/perl/feed" rel="self" type="application/rss+xml" />
	<link>http://www.linuxsense.org</link>
	<description>分享Linux技术的点点滴滴</description>
	<lastBuildDate>Sat, 01 Aug 2009 05:23:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>Use Strict And Warnings （Perl）</title>
		<link>http://www.linuxsense.org/archives/9204.html</link>
		<comments>http://www.linuxsense.org/archives/9204.html#comments</comments>
		<pubDate>Wed, 25 Feb 2009 03:25:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[Strict]]></category>

		<guid isPermaLink="false">http://www.linuxsense.org/?p=9204</guid>
		<description><![CDATA[本文系转载，原文链接地址失效，可以去搜索引擎去搜索标题 取自PerlChina 跳转到:导航,搜索 原 名：Use Strict And Warnings 中 文: 如何使用 strict 和 warnings 作 者：runiq 原 文地址已经无效 发 表：Sep 07, 2001 翻 译：havel.zhang 审 校：qiang 出 处：中国 Perl 协会 FPC &#8211; PerlChina.org 提醒您：请保护作者的著作权,维护作者劳动的结晶。 目录 1 什么场合要用 use strict 2 为什么要用 use strict？ 3 用 use strict 麻烦吗？ 4 不错，那我怎么用 use strict 呢？ 5 得，程序出错了，我该怎么办？ [...]]]></description>
			<content:encoded><![CDATA[<p>本文系转载，原文链接地址失效，可以去搜索引擎去搜索标题</p>
<p><span style="color: #999999;">取自PerlChina<br />
跳转到:导航,搜索<br />
原 名：Use Strict And Warnings<br />
中 文: 如何使用 strict 和 warnings<br />
作 者：runiq<br />
原 文地址已经无效<br />
发 表：Sep 07, 2001<br />
翻 译：havel.zhang<br />
审 校：qiang<br />
出 处：中国 Perl 协会 FPC &#8211; PerlChina.org<br />
提醒您：请保护作者的著作权,维护作者劳动的结晶。</span></p>
<p><strong>目录<br />
<span style="text-decoration: underline;">1 什么场合要用 use strict<br />
2 为什么要用 use strict？<br />
3 用 use strict 麻烦吗？<br />
4 不错，那我怎么用 use strict 呢？<br />
5 得，程序出错了，我该怎么办？<br />
6 这也太麻烦了吧。懒惰不是 Perl 文化中的美德吗？<br />
7 那 warnings 又是什么？</span></strong></p>
<p><strong>什么场合要用 use strict</strong><br />
当你的程序有一定的行数时，尤其是在一页放不下时，或者是你找不到发生错误的原因时。<br />
<span id="more-9204"></span></p>
<p><strong>为什么要用 use strict？</strong><br />
众多的原因之一是帮你寻找因为错误拼写造成的错误。比如错误使用了&#8217;$recieve_date&#8217; 变量，但实际上你在程序中已声明的是 &#8216;$receive_date&#8217; 变量，这个错误就很难发现。同样，use strict 迫使你把变量的范围缩到最小，使你不必担心同名变量在程序的其它部份发生不良作用。（尽管这是 my 的功能，但是如果你使用 use strict 的话，它会强迫你用 my 声明变量，来达到上述目的）。</p>
<p><strong>用 use strict 麻烦吗？</strong><br />
不麻烦，只要在你的脚本的开始加上11个字符而已！(use strict;), 另外在整个程序中用my 声明变量。</p>
<p><strong>不错，那我怎么用 use strict 呢？</strong><br />
在你的脚本的开头 &#8216;#!/usr/local/bin/perl&#8217; 后面加上这句就行。</p>
<p>use strict;</p>
<p><strong>得，程序出错了，我该怎么办？<br />
</strong>常见的错误信息一般如下：</p>
<p>Global symbol &#8220;$xxx&#8221; requires explicit package name at ./tst line 5.这就是需要我们马上去解决的错误。（如果出现类似于 &#8216;Server Error&#8217; 之类的错误，请检查一下你的 web 服务器上的 error logs， 或用CGI::Carp包。 ）</p>
<p>任何时候，当你要声明一个变量时，都要把 &#8216;my&#8217; 放在前面。例如：</p>
<p># 把这段代码:<br />
$string = &#8220;hello world&#8221;;<br />
@array = qw(ABC DEF);<br />
%hash = (A=&gt;1, B=&gt;2);</p>
<p># 改成:<br />
my $string = &#8220;hello world&#8221;;<br />
my @array = qw(ABC DEF);<br />
my %hash = (A=&gt;1, B=&gt;2);</p>
<p># 把这段代码:<br />
# &#8216;$name&#8217; is global here<br />
foreach $name (@names) {<br />
print &#8220;Name: $name\n&#8221;;<br />
}</p>
<p># 改成:<br />
foreach my $name (@names) {<br />
# Now &#8216;$name&#8217; only exists in this block<br />
print &#8220;Name: $name\n&#8221;;<br />
}</p>
<p># 把这段代码:<br />
# 同样, &#8216;$digit&#8217; 在这里是全局变量<br />
foreach $digit (@digits) {<br />
$number = 10== $number + $digit;<br />
}<br />
print &#8220;Number: $number\n&#8221;;</p>
<p># 改成： (外层的变量(&#8216;$number&#8217;)<br />
# 将在外层声明):<br />
my $number = 0;<br />
foreach my $digit (@digits)<br />
# 现在&#8217;$digit&#8217; 仅仅在这个代码块里存在<br />
$number = 10== $number + $digit;<br />
}<br />
print &#8220;Number: $number\n&#8221;;</p>
<p># 把这段代码:<br />
sub my_sub {<br />
($arg1, $arg2) = @_;<br />
print &#8220;Arg1: $arg1 Arg2: $arg2\n&#8221;;<br />
}</p>
<p># 改成:<br />
sub my_sub {<br />
my ($arg1, $arg2) = @_;<br />
print &#8220;Arg1: $arg1 Arg2: $arg2\n&#8221;;<br />
}</p>
<p># 下面的代码好像在用 DBI 嘛？一样要改！:<br />
$sth-&gt;bind_columns(\$field1, \$field2);<br />
while ($sth-&gt;fetch) {<br />
print &#8220;F1: $field1 F2: $field2\n&#8221;;<br />
}</p>
<p># 改成:<br />
$sth-&gt;bind_columns(\my ($field1, $field2));<br />
while ($sth-&gt;fetch) {<br />
print &#8220;F1: $field1 F2: $field2\n&#8221;;<br />
}</p>
<p><strong>这也太麻烦了吧。懒惰不是 Perl 文化中的美德吗？</strong><br />
当然，懒惰是我们的美德。因为你会发现使用 use strict 之后，我们就不必花太多的时间自己去查找 use strict 可以找到的很多简单错误。</p>
<p><strong>那 warnings 又是什么？</strong><br />
哦，对了。在 Perl 5.6 及以后的版本里，我们可以在写 &#8216;use strict;&#8217; 的位置旁写 &#8216;use warnings;&#8217;:</p>
<p>use warnings;在 Perl 5.6 版之前（或者为了不同 Perl 版本间的兼容 ），你可以用命令行参数 &#8216;#!/usr/bin/perl -w&#8217;。还有一种办法是设置<br />
$^W变量（不过，如果<br />
$^W不在BEGIN{}程序块里的话，就没办法截取编译时的错误提示，所以一般我们用 &#8216;-w&#8217;）:<br />
#!/usr/local/bin/perl -w</p>
<p># 或者<br />
$^W = 1;<br />
# 或者<br />
BEGIN { $^W = 1 }如果你确定不用 warnings，你可以限制它的使用范围，如：</p>
<p># 把这段代码:<br />
sub add_two_numbers_which_might_be_undef {<br />
$_[0] + $_[1];<br />
}</p>
<p># 根据Perl 的版本不同改成下面的样子:<br />
# 1<br />
sub add_two_numbers_which_might_be_undef {<br />
# 参见 &#8216;perldoc perllexwarn&#8217;<br />
# 因为最好是只在你希望的地方禁止掉warning<br />
no warnings &#8220;uninitialized&#8221;;<br />
$_[0] + $_[1];<br />
}</p>
<p># 2<br />
sub add_two_numbers_which_might_be_undef {<br />
local $^W;<br />
$_[0] + $_[1];<br />
}</p>
<p>或者，你应像前面例子中声明 &#8216;$number&#8217;一样初始化变量。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxsense.org/archives/9204.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

