我正在学习 Perl,并且在从命令行运行程序与在调试器中交互式地执行程序之间存在一些不一致。
具体来说,我使用 perl -d -e 1
调用 Perl 调试器,然后逐行运行这段代码
my $a = 1;
print $a;
$b = 2;
print $b;
在输出中我只看到了 $b
的值,而 $a
似乎是未定义的。同时,当我使用 perl myscript.pl
执行相同的语句时,两个值都显示在输出中。为什么会这样?我错过了什么?
最佳答案
调试器是一个与运行时 Perl 完全不同的环境。您输入的每一行都像一个单独的 block ,如果您声明一个词法变量,如my $a
,那么它将在命令后立即被删除。
就好像你写过
{ my $a = 1; }
{ print $a; }
{ $b = 2; }
{ print $b; }
通常您会在程序中的适当位置声明词法变量,这样它们就不会在您需要它们之前消失。但是如果你想使用调试器来玩这个语言那么你只需要使用 package 变量,这些变量永远不会消失,如果你不使用 my
.
命令行“单行”Perl 程序通常做同样的事情,但这是您在编写正确的 Perl 程序时必须忘掉的一课。您将在每个程序的开头使用 use strict
和 use warnings
,strict
要求您选择通过分别使用 my
或 our
在词法或包变量之间。如果您尝试使用之前未声明的变量,则您的程序将无法编译。
此外,永远不要在您的代码中使用$a
或$b
。除了可怕的变量名外,它们还保留供 sort
运算符使用。
希望对您有所帮助。
关于perl - 在 Perl 中声明变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25125758/