我正在试用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));
如果在创建变量$c
和$dis
时省略了my
,则会收到一条错误消息,内容为:
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
(,这两个变量在所有包中总是声明为全局变量,所以它们总是可以在不声明的情况下使用。如果您选择了$A
和$B
,那么如果不选择my
,则会得到与$c
和$dir
相同的错误。
关于$a
和$b
的进一步阅读@perlmaven.com
:不要在排序之外使用$a
和$b
,甚至不要用于示例