【问题标题】:Perl, variable behavior, name-based discrepancyPerl,变量行为,基于名称的差异
【发布时间】:2013-07-13 21:12:21
【问题描述】:

症状:$c="foo"; 会引发错误,$b="foo"; 不会。

我的脚本实际上是 3 行。以下不会产生错误或警告
use strict;
$b = "foo";
print $b;
但如果更改为以下内容,我会收到“需要显式包名称”错误。
use strict;
$c = "foo";
print $c;,

我了解use strict; 需要在使用前声明变量,将$c = "foo"; 更改为my $c = "foo"; 确实可以防止错误,但仅此一项并不能解释差异。

任何人都可以在这里阐明一下吗?我确定我遗漏了一些明显的东西。我在 Windows 7 x64 中运行 Strawberry Perl v5.16.3。我正在 npp 中编辑并通过c:\strawberry> perl test.pl从命令行执行我的脚本

【问题讨论】:

  • 由于它们对sort 的特殊含义,一般情况下,您不应该在代码中使用$a$b,即使您发现的这种行为差异也会被忽略。
  • 这听起来是个好习惯,谢谢 DVK。

标签: perl variables strict


【解决方案1】:

来自strict 文档:

由于 sort() 的特殊用途,变量 $a 和 $b 是 免除此项检查。

【讨论】:

  • 感谢参考!很有帮助。
【解决方案2】:

$_$a$b 这样的一些全局变量被有效地预先声明。因此,$a$b 变量可以在 sort 块中使用而无需额外声明,其中它们具有两项的值:

use strict;
my @nums = (1, 5, 3, 10, 7);
my @sorted = sort { $a <=> $b } @nums

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 2020-08-13
    • 2023-03-29
    • 2019-04-21
    • 1970-01-01
    相关资源
    最近更新 更多