qwe*_*rty 4 perl scope global-variables strict
我正在试验 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));
Run Code Online (Sandbox Code Playgroud)
如果我my
在创建变量$c
and时省略$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"?)
Run Code Online (Sandbox Code Playgroud)
但是,我没有收到任何错误消息,因为变量$a
和$b
. 这是为什么?此外,即使我遗漏了use strict
. 我认为 Perl 允许你使用未初始化的变量,如果你忽略它的话。
这是因为您碰巧选择了在所有包中始终声明为全局变量的两个变量 ($a
和$b
) - 因此它们始终可以在不声明的情况下使用。如果你选择了$A
and $B
,你会得到和 for 一样的错误$c
,$dir
如果你离开my
了。
进一步阅读$a
and $b
@
perlmaven.com
:不要使用$a
and$b
排序之外,即使是示例也不行