根据迈克尔卡曼的评论,我决定改写这个问题.请注意,在此编辑之前会出现11条评论,并且相信迈克尔观察到我没有以明确我要求的方式编写问题.
$a
和$b
通过导入模块有关于严格?
首先是一些设置.以下作品:
#!/bin/perl use strict; print "\$a=$a\n"; print "\$b=$b\n";
如果我再添加一行:
print "\$c=$c\n";
我在编译时遇到错误,这意味着我的任何令人眼花缭乱的打印代码都无法运行.
如果我评论use strict;
它运行正常.在狭窄之外,$a
并且$b
主要特别在于sort
将两个值与这些名称进行比较.
my @reverse_order = sort { $b <=> $a } @unsorted;
因此,主要的功能差异有关$a
,并$b
此路不通虽然Perl的"知道他们的名字" -是你最好知道这一点,当你排序,或者使用一些功能列表::的Util.
只有当你使用严格,这$a
和$b
在一个全新的方式成为特殊变量.它们是唯一的严格意义上的变量,而不会抱怨它们没有被声明.
:现在,我喜欢严格,但令我感到震惊的是,如果TIMTOWTDI(有多种方法可以做到这一点)是Perl中的规则#1,那么这不是非常TIMTOWDI.它说,$a
和$b
是特殊的,仅此而已.如果你想使用变量,你不必声明$a
并且$b
是你的家伙.如果你想通过添加三个变量$c
,突然之间还有另一种方法可以做到.
没关系在操纵哈希$k
并且$v
可能更有意义:
my %starts_upper_1_to_25 = skim { $k =~ m/^\p{IsUpper}/ && ( 1 <= $v && $v <= 25 ) } %my_hash ;`
现在,我使用,我喜欢严格.但我只想要$k
并且$v
能够看到skim
最紧凑的语法.而且我希望它能够被简单地看到
use Hash::Helper qw;
我不是要问这个问题,而是要知道如何使它变黑.下面我的"回答",应该让你知道我知道Perl是危险的.我问是否有办法严格接受其他变量,或者什么是最干净的解决方案.答案很可能是否定的.如果是这种情况,它似乎不是非常TIMTOWTDI.
其他人提到了如何"使用变量"和"我们的" - 我只是想补充说$ a和$ b是特殊情况,因为它们在排序例程内部使用.这是strict.pm文档中的注释:
Because of their special use by sort(), the variables $a and $b are exempted from this check.