perl - 在 Perl 中声明变量

标签 perl

我正在学习 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 strictuse warningsstrict 要求您选择通过分别使用 myour 在词法或包变量之间。如果您尝试使用之前未声明的变量,则您的程序将无法编译。

此外,永远不要在您的代码中使用$a$b。除了可怕的变量名外,它们还保留供 sort 运算符使用。

希望对您有所帮助。

关于perl - 在 Perl 中声明变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25125758/

相关文章:

mysql - 使用DBI将 float 上传到MySql

perl - 使用 Perl 拆分 float

perl - 如何使用 Perl 从文件中准确获取 n 行随机行?

perl fork() & exec()

linux - 在Linux中使用Tk运行Perl程序报错 "1132148 is not a hash"

regex - 查找大写字母的运行

regex - 在 Perl 中修整回车符 (\r)

linux - sed/awk/perl 格式化多个段落

mysql - Perl CGI::Session MySQL 解冻 utf-8 数据

perl - 访问Dancer Log对象?