为什么有些变量需要初始化而有些变量不需要在同一个脚本中?
我正在试验 Perl,并编写了以下二次方程求解器。
#! perl
use strict;
use Math::Complex;
use v5.22;
say "Quadratic Equation Solver";
print "Enter a: ";
$a = <STDIN>;
print "Enter b: ";
$b = <STDIN>;
print "Enter c: ";
my $c = <STDIN>;
my $dis = ($b ** 2) - (4 * $a * $c);
say "x1 = ".((0 - $b + sqrt($dis)) / (2 * $a));
say "x2 = ".((0 - $b - sqrt($dis)) / (2 * $a));
如果我my在创建变量$cand时省略$dis,我会收到一条错误消息,内容如下:
Global symbol "$c" requires explicit package name (did you forget to declare "my $c"?)
Global symbol "$dis" requires explicit package name (did you forget to declare "my $dis"?)
但是,我没有收到任何错误消息,因为变量$a和$b. 这是为什么?此外,即使我遗漏了use strict. 我认为 Perl 允许你使用未初始化的变量,如果你忽略它的话。
回答
这是因为您碰巧选择了在所有包中始终声明为全局变量的两个变量 ($a和$b) - 因此它们始终可以在不声明的情况下使用。如果你选择了$Aand $B,你会得到和 for 一样的错误$c,$dir如果你离开my了。
进一步阅读$aand $b@
perlmaven.com:不要使用$aand$b排序之外,即使是示例也不行
- @ap It's because you `use v5.22;` - "_if the specified Perl version is greater than or equal to 5.12.0, strictures are enabled lexically as with `use strict`._"