re.pl:变量不能在打印中使用,但似乎保留引用,会发生什么

Edu*_*scu 1 perl read-eval-print-loop

re.pl从 Devel::REPL使用:

eddie@MYPC0:~$ re.pl
$ $a++
0
$ $a++
1
$ $a++
2
$ $a++
3
$ $a++
4
$ $a++
5
$ $a++
6
$ print $a
1
$ $a++
7
Run Code Online (Sandbox Code Playgroud)

print $a打印1我是否初始化变量。看来它不能print $a,并且它打印另一种引用,我也不明白它是否丢失了引用,为什么打印的值1而不是0

另一个测试:

eddie@MYPC0:~$ re.pl
$ $a =1
1
$ print $a
1
$ $a++
1
$ print $a
1
$ $a++
2
$ $a++
3
$ print $a
1
$ $a++
4
$ print $a
1
$ $a++
5
$ $a
6
$ print $a
1
Run Code Online (Sandbox Code Playgroud)

还有另一个

eddie@MYPC0:~$ re.pl
$ my $a=0
0
$ print $a
1
$
$ $a
0
$
Run Code Online (Sandbox Code Playgroud)

hob*_*bbs 5

re.pl 正在向您显示的返回值print。如果能够成功打印某些内容,内置函数print将“返回 true”(即)。1

andrew@goron:~$ re.pl
$ $a = 42;
42
$ print $a;
1
$ print 0;
1
$ print "banana";
1
Run Code Online (Sandbox Code Playgroud)

您看不到print其自身的任何输出的原因是因为 Devel::REPL 缓冲输出直到它获得换行符:

andrew@goron:~$ re.pl
$ print "Hello";
1
$ print ", World!\n";
Hello, World!
1
Run Code Online (Sandbox Code Playgroud)

  • @EduardFlorinescu 一般来说,我会说不要直接在 re.pl 中使用 `print` 。如果您调用一些间接使用 `print` 的代码,没问题,但如果您想查看 repl 中某些内容的值,只需跳过 `print` 即可。同样使用“sprintf”而不是“printf”。 (2认同)
  • @Eduard Florinescu 这并不是“re.pl”所特有的。默认情况下,所有 Perl(以及 C 和 C++ 等)程序都以这种方式运行。 (2认同)
  • @Eduard Florinescu,Python 也是一样的。如果不打印 LF,则会得到相同的结果。但是Python的“print”默认打印LF。正如已经提到的,Perl 的等价物是 `say` 。`say` 与 `print` 相同,只是它也打印 LF。 (2认同)