当你的程序有一定的行数时,尤其是在一页放不下时,或者是你找不到发生错误的原因时。
众多的原因之一是帮你寻找因为错误拼写造成的错误。比如错误使用了'$recieve_date'变量,但实际上你在程序中已声明的是'$receive_date'变量,这个错误就很难发现。同样,usestrict迫使你把变量的范围缩到最小,使你不必担心同名变量在程序的其它部份发生不良作用。(尽管这是my的功能,但是如果你使用usestrict的话,它会强迫你用my声明变量,来达到上述目的)。用usestrict麻烦吗?不麻烦,只要在你的脚本的开始加上11个字符而已!(usestrict;),另外在整个程序中用my声明变量。不错,那我怎么用usestrict呢?在你的脚本的开头'#!/usr/local/bin/perl'后面加上这句就行。
usestrict;
Globalsymbol"$xxx"requiresexplicitpackagenameat./tstline5.
#把这段代码:$string="helloworld";@array=qw(ABCDEF);hash=(A=>1,B=>2);#改成:my$string="helloworld";my@array=qw(ABCDEF);myhash=(A=>1,B=>2);#把这段代码:#'$name'isglobalhereforeach$name(@names){print"Name:$name\n";}#改成:foreachmy$name(@names){#Now'$name'onlyexistsinthisblockprint"Name:$name\n";}#把这段代码:#同样,'$digit'在这里是全局变量foreach$digit(@digits){$number=10*$number $digit;}print"Number:$number\n";#改成:(外层的变量('$number')#将在外层声明):my$number=0;foreachmy$digit(@digits)#现在'$digit'仅仅在这个代码块里存在$number=10*$number $digit;}print"Number:$number\n";#把这段代码:submy_sub{($arg1,$arg2)=@_;print"Arg1:$arg1Arg2:$arg2\n";}#改成:submy_sub{my($arg1,$arg2)=@_;print"Arg1:$arg1Arg2:$arg2\n";}#下面的代码好像在用DBI嘛?一样要改!:$sth->bind_columns(\$field1,\$field2);while($sth->fetch){print"F1:$field1F2:$field2\n";}#改成:$sth->bind_columns(\my($field1,$field2));while($sth->fetch){print"F1:$field1F2:$field2\n";}
usewarnings;
#!/usr/local/bin/perl-w#或者$^W=1;#或者BEGIN{$^W=1}
#把这段代码:subadd_two_numbers_which_might_be_undef{$_[0] $_[1];}#根据Perl的版本不同改成下面的样子:#1subadd_two_numbers_which_might_be_undef{#参见'perldocperllexwarn'#因为最好是只在你希望的地方禁止掉warningnowarnings"uninitialized";$_[0] $_[1];}#2subadd_two_numbers_which_might_be_undef{local$^W;$_[0] $_[1];}
你还可以参阅"Ovid的":妙文"'usestrict'isnotPerl"。"okay,现在你应该没什么借口不用usestrict或usewarnings了吧,它使我们大家生活可以轻松一些:)