在使用严格模式前使用警告的原因是什么?

11

我记得在某个地方看到过一些评论,内容是

use warnings;
use strict;

我的记忆是,最好先使用 use warnings 而不是先使用 use strict,你能告诉我这个顺序是否重要,如果重要的话,有什么影响吗?


17
有一次我在桥上看到一个人正准备跳下去,我说:“别这样做!”他说:“我不想活了。”我问他:“你是做什么工作的?”他说:“我是开发软件的。”我说:“我也是!是做桌面端还是网络端的?”他说:“网络端。”我说:“我也是!是做前端还是后端的?”他说:“后端。”我说:“我也是!是用 Perl 还是 Java?”他说:“Perl。”我说:“我也是!是偏向老派还是现代化运动?”他说:“现代化的 Perl。”我说:“我也是!是先写警告还是严格模式?”他说:“先写警告。”我说:“异端!见祖宗!”于是我把他推了下去。 - daxim
从 http://en.wikiquote.org/wiki/Emo_Philips 上摘录的程序相关内容 - daxim
3
如果你没有先放置警告,Perl::Critic可能会抱怨,或者至少曾经这样做过。这可能是你产生这种印象的原因。 - Ashley
1
我认为不使用use strict;应该是一个警告,所以我把use strict;放在第一位 :) - ikegami
3个回答

6

我看不出来在技术上有任何理由要求顺序的重要性。我总是把use strict放在第一位,但这只是因为我一直这样做而已!


我也不确定,但是总有一个令人烦恼的记忆,似乎是某个我信任的人的评论,所以我想一劳永逸地解决这个问题。;-) - Sinan Ünür

3
简单来说:如果你在使用use strict之前使用use warnings,那么即使你错误地使用了use strict,你也不会收到警告。显然嘛!
实际上,我一直是反过来做的。我的强迫症让我按字母顺序排列这两个操作。我从未知道有没有理由选择其中之一。
实际上,在perldoc use中,放置use strictuse warnings之前,并且这也是大多数官方Perl示例中所见到的。
我怀疑这是出于文化原因。在Perl最初的版本中,要使用warnings,您必须使用...
#! /usr/bin/perl -W

在你的程序的第一行中。use strict pragma稍后出现,而只有后来才出现use warnings pragma。因此,一段时间内,程序是这样编写的:
#! /usr/bin/perl -W

use strict;

-W参数不再流行时,你只需在shebang下面添加use warnings

#! /usr/bin/perl

use warnings;
use strict;

我喜欢Stackoverflow的一件事情是你可以学到以前不知道的新东西。我很想知道是否有人有实际的理由,为什么应该选择一种方式而不是另一种。


3

我认为,在Perl 5.8.9及更早版本中,当您在不区分大小写的文件系统上使用use Strict时,strict不会发出警告,因此先使用warnings可能会有所帮助。 我在我的Windows XP系统上构建了5.8.9版本,但它并没有起到作用:

C:\Temp> cat t.pl
use warnings;
use Strict;

C:\Temp> c:\opt\perl-5.8.9\bin\perl.exe t.pl

C:\Temp>

那只是一次瞎猜。我得出的结论是,只要没有干扰语句,顺序就不重要。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接