Perl PadWalker不显示用“我们的”声明的变量

时间:2013-08-22 15:04:15

标签: eclipse perl epic

在Eclipse和PadWalker中遇到Perl调试器的一些问题。以前只用于简单的单文件脚本。使用“my”声明的变量。它们在调试器“变量”窗口中看起来很好。

现在我正在使用别人更复杂的脚本,我没有看到使用“我们的”声明变量。为了调查,我把它归结为一个非常简单的例子

junk.pl:

use strict;
use warnings;

require 'junk2.pl';

package Junk;
my $simon = "SOMETHING";
print "JUNK  " . $Junk2::james . "\n";
print "JUNK  " . $simon . "\n";

junk2.pl:

package Junk2;
our $james;
$james = "FOO";

1;

单步执行代码,可修复my $simon在调试器窗口中显示正常,但变量our $james则不然。调试器工作正常:程序运行,输出窗口显示正确的输出...它只是变量窗口无法显示$james

下面的屏幕截图显示了问题。正如您所看到的,Junk2包中的变量$james打印正常,但不会出现在变量显示中。

View of IDE debugger with no package variables

一直在寻找解决方案,但找不到任何匹配好的东西......有什么想法吗?

编辑:如果我使用Perl调试器,我发现我可以“看到”包变量: View of cmd line debugger

有没有办法在IDE中以友好的方式获得相同的输出,如padwalker节目?

感谢迄今为止回答过的人:)

3 个答案:

答案 0 :(得分:5)

您可以在变量视图菜单下切换查看本地和全局变量。使用我们声明的变量超出了局部范围,因此在选择全局变量选项时可见。 (我正在运行eclipse 4.2.1)

要访问变量视图菜单,请单击变量窗格右上角的小向下箭头。

答案 1 :(得分:4)

our声明的变量是词法变量,别名为包变量(谢谢@ikegami进行更正):

  

our为当前包中同名的包变量创建一个词法别名,以便在当前词法范围内使用。

brian d foy有一个recent post讨论符号表。

简短的回答是,您可以通过查看包的符号表来访问包变量。

此外,PadWalker还有peek_our方法。 Package::Stash提供了其他有用的帮助。

答案 2 :(得分:2)

在Eclipse调试配置中-X到Perl命令行以显示当前包变量。

编辑:

在这种情况下,您可能需要使用-V命令。 见http://perldoc.perl.org/perldebug.html

编辑:

将Junk2 :: James变量分配给局部变量可能更容易。

my $ james = $ Junk2 :: james;