perl - 有什么方法可以使变量像 $a 和 $b 关于严格?

标签 perl timtowtdi

根据迈克尔卡曼的评论,我决定重写这个问题。请注意,在此编辑之前出现了 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 “知道他们的名字” -- 是你在排序时最好知道这一点,或者使用 List::Util 中的一些函数.

只有当你使用 strict 时,$a$b以全新的方式成为特殊变量。它们是 strict 唯一会通过而不提示它们没有被声明的变量。

: 现在,我喜欢严格,但令我震惊的是,如果 TIMTOWDI(有不止一种方法可以做到)是 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$vskim 可见对于最紧凑的语法。我希望它可以简单地通过
use Hash::Helper qw<skim>;

我问这个问题不是为了知道如何对它施以魔法。我在下面的“答案”应该让你知道我知道的 Perl 足够危险。我在问是否有办法严格接受其他变量,或者什么是最干净的解决方案。答案很可能是否定的。如果是这样的话,它根本就不是很TIMTOWTDI。

最佳答案

其他人提到了如何“使用 vars”和“我们的”——我只是想补充一点,$a 和 $b 是特殊情况,因为它们在内部由排序例程使用。这是来自 strict.pm 文档的注释:

Because of their special use by sort(), the variables $a and $b are 
exempted from this check.

关于perl - 有什么方法可以使变量像 $a 和 $b 关于严格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/151200/

相关文章:

list - 如何获取由 Perl6 中的重复项组成的列表?

bash - 如何拆分文件并并行处理它们,然后将它们拼接回去? unix

perl - 相同行之间的文本提取

perl - 三元产生与 If 不同的结果

perl - Perl 的 -p 命令行开关有什么作用?

perl - 在 Perl 中声明包版本方法的优缺点是什么?

ruby - "In Ruby there' 做同一件事的方式不止一种”——这是什么意思?

perl - 什么是对非 Perl 开发人员的有效 Perl 培训?

perl - 为什么 Perl 是大多数字符串操作任务的最佳选择?