Perl关于usestrict的⽤法
什么场合要⽤ use strict
当你的程序有⼀定的⾏数时,尤其是在⼀页放不下时,或者是你不到发⽣错误的原因时。
为什么要⽤ use strict?
众多的原因之⼀是帮你寻因为错误拼写造成的错误。⽐如错误使⽤了'$recieve_date' 变量,但实际上你在程序中已声明的是
'$receive_date' 变量,这个错误就很难发现。同样,use strict 迫使你把变量的范围缩到最⼩,使你不必担⼼同名变量在程序的其它部份发⽣不良作⽤。(尽管这是 my 的功能,但是如果你使⽤ use strict 的话,它会强迫你⽤ my 声明变量,来达到上述⽬的)。
⽤ use strict ⿇烦吗?
不⿇烦,只要在你的脚本的开始加上11个字符⽽已!(use strict;), 另外在整个程序中⽤my 声明变量。
不错,那我怎么⽤ use strict 呢?
在你的脚本的开头 '#!/usr/local/bin/perl' 后⾯加上这句就⾏。
use strict;
得,程序出错了,我该怎么办?
常见的错误信息⼀般如下:
Global symbol "$xxx" requires explicit package name at ./tst line 5.
这就是需要我们马上去解决的错误。(如果出现类似于 'Server Error' 之类的错误,请检查⼀下你的服务器上的 error logs,或⽤包。)
任何时候,当你要声明⼀个变量时,都要把 'my' 放在前⾯。例如:
# 把这段代码:
$string = "hello world";
@array = qw(ABC DEF);
%hash = (A=>1, B=>2);
# 改成:
my $string = "hello world";
my @array = qw(ABC DEF);
my %hash = (A=>1, B=>2);
# 把这段代码:
# '$name' is global here
foreach $name (@names) {
print "Name: $name\n";exists的用法
}
# 改成:
foreach my $name (@names) {
# Now '$name' only exists in this block
print "Name: $name\n";
}
# 把这段代码:
# 同样, '$digit' 在这⾥是全局变量
foreach $digit (@digits) {
$number = 10== $number + $digit;
}
print "Number: $number\n";
# 改成: (外层的变量('$number')
# 将在外层声明):
my $number = 0;
foreach my $digit (@digits)
# 现在'$digit' 仅仅在这个代码块⾥存在
$number = 10== $number + $digit;
}
print "Number: $number\n";
# 把这段代码:
sub my_sub {
($arg1, $arg2) = @_;
print "Arg1: $arg1 Arg2: $arg2\n";
}
# 改成:
sub my_sub {
my ($arg1, $arg2) = @_;
print "Arg1: $arg1 Arg2: $arg2\n";
}
# 下⾯的代码好像在⽤ DBI 嘛?⼀样要改!:
$sth->bind_columns(\$field1, \$field2);
while ($sth->fetch) {
print "F1: $field1 F2: $field2\n";
}
# 改成:
$sth->bind_columns(\my ($field1, $field2));
while ($sth->fetch) {
print "F1: $field1 F2: $field2\n";
}
这也太⿇烦了吧。懒惰不是 Perl ⽂化中的美德吗?
当然,懒惰是我们的美德。因为你会发现使⽤ use strict 之后,我们就不必花太多的时间⾃⼰去查 use strict 可以到的很多简单错误。那 warnings ⼜是什么?
哦,对了。在 Perl 5.6 及以后的版本⾥,我们可以在写 'use strict;' 的位置旁写 'use warnings;':
use warnings;
在 Perl 5.6 版之前(或者为了不同 Perl 版本间的兼容),你可以⽤命令⾏参数 '#!/usr/bin/perl -w'。还有⼀种办法是设置
$^W
变量(不过,如果
$^W
不在BEGIN{}程序块⾥的话,就没办法截取编译时的错误提⽰,所以⼀般我们⽤ '-w'):
#!/usr/local/bin/perl -w
# 或者
$^W = 1;
# 或者
BEGIN { $^W = 1 }
如果你确定不⽤ warnings,你可以限制它的使⽤范围,如:
# 把这段代码:
sub add_two_numbers_which_might_be_undef {
$_[0] + $_[1];
}
# 根据Perl 的版本不同改成下⾯的样⼦:
# 1
sub add_two_numbers_which_might_be_undef {
# 参见 'perldoc perllexwarn'
# 因为最好是只在你希望的地⽅禁⽌掉warning
no warnings "uninitialized";
$_[0] + $_[1];
}
# 2
sub add_two_numbers_which_might_be_undef {
local $^W;
$_[0] + $_[1];
}
或者,你应像前⾯例⼦中声明 '$number'⼀样初始化变量。
你还可以参阅的妙⽂
以及(指出的):和
okay,现在你应该没什么借⼝不⽤ use strict 或 use warnings 了吧,它使我们⼤家可以轻松⼀些:)
取⾃""
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论