Devel::REPL的re.pl工具中变量无法正常打印但状态保留的异常问题排查
Devel::REPL的re.pl工具中变量无法正常打印但状态保留的异常问题排查
看起来你遇到的是Devel::REPL(也就是re.pl)的默认行为特性,不是工具bug,我来帮你理清楚:
re.pl会自动打印代码的返回值:这个工具的核心逻辑是,你输入一行代码,它执行后会把代码的返回值直接打印出来。而
print函数在成功输出内容时,返回值就是1(失败才会返回0)。所以你每次输入print $a看到的1,其实是print函数本身的返回值,不是$a的真实值。print的真实输出你可能没注意到:实际上
print $a已经把$a的正确值输出到终端了,但因为re.pl紧接着又打印了print的返回值1,你可能把这两个输出搞混,只看到了后面的1。比如当$a已经累加到7时,输入print $a,终端会先输出7,然后re.pl再输出1,但你只留意到了后者。用更适合REPL的方式查看变量:在re.pl里完全没必要用
print看变量值——直接输入变量名回车,工具就会自动打印变量的当前真实值,这才是最顺手的用法。就像你第三个测试里做的那样,输入$a就得到了正确的0,这比用print靠谱多了。
再对照你的测试案例看:比如第二个测试中,你输入$a++得到1,这是自增操作返回的自增前的值,此时$a其实已经变成2了,这时候直接输入$a就能看到2,根本不需要用print $a(避免被返回值1干扰)。
总结一下:你觉得“变量状态保留但print输出异常”,本质是混淆了re.pl自动打印的代码返回值和print函数的实际输出。换用直接输入变量名的方式查看值,就能解决这个困惑啦。
备注:内容来源于stack exchange,提问作者Eduard Florinescu
相关产品推荐
相关产品推荐

