Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';在epic-eclipse中看不到内部变量_Eclipse_Perl_Epic - Fatal编程技术网

Can';在epic-eclipse中看不到内部变量

Can';在epic-eclipse中看不到内部变量,eclipse,perl,epic,Eclipse,Perl,Epic,我已经在eclipse中安装了epic以调试perl。起初,调试时我看不到任何变量。我发现我需要安装PadWalker。这部分解决了问题,因为我可以看到所有变量,但缺少内部变量(如@ARGV)。有什么建议吗? 使用centOS 6、eclipse版本:开普勒服务发行版1构建id:20130919-0819和epic,可以从%main::namespace: use Data::Dumper; my @val; my @names; for my $name (keys %main::){

我已经在eclipse中安装了epic以调试perl。起初,调试时我看不到任何变量。我发现我需要安装PadWalker。这部分解决了问题,因为我可以看到所有变量,但缺少内部变量(如@ARGV)。有什么建议吗?
使用centOS 6、eclipse版本:开普勒服务发行版1构建id:20130919-0819和epic,可以从%main::namespace:

use Data::Dumper;

my @val;
my @names;
for my $name (keys %main::){

    my $glob = $main::{$name};
    if (defined ${$glob}) {
        push @names, '$' . $name;
        push @val, ${$glob};
    }

    if (defined @{$glob}) {
        push @names, '@' . $name;
        push @val, [@{$glob}];
    }

    if (defined %{$glob}) {
        push @names, '%' . $name;
        push @val, {%{$glob}};
    }
}
my $d = Data::Dumper->new(\@val, \@names);
print STDERR $d->Dump
输出如下:

$@ARGV = [
           'aaa',
           'bbb',
           'ccc'
         ];
$@INC = [
          '/usr/lib/perl5/5.10/i686-cygwin',
          '/usr/lib/perl5/5.10',
          '/usr/lib/perl5/site_perl/5.10/i686-cygwin',
          '/usr/lib/perl5/site_perl/5.10',
          '/usr/lib/perl5/vendor_perl/5.10/i686-cygwin',
          '/usr/lib/perl5/vendor_perl/5.10',
          '/usr/lib/perl5/vendor_perl/5.10',
          '/usr/lib/perl5/site_perl/5.8',
          '/usr/lib/perl5/vendor_perl/5.8',
          '.'
        ];
$%INC = {
          'warnings.pm' => '/usr/lib/perl5/5.10/warnings.pm',
          'Carp.pm' => '/usr/lib/perl5/5.10/Carp.pm',
          'XSLoader.pm' => '/usr/lib/perl5/5.10/i686-cygwin/XSLoader.pm',
          'bytes.pm' => '/usr/lib/perl5/5.10/bytes.pm',
          'warnings/register.pm' => '/usr/lib/perl5/5.10/warnings/register.pm',
          'overload.pm' => '/usr/lib/perl5/5.10/overload.pm',
          'strict.pm' => '/usr/lib/perl5/5.10/strict.pm',
          'Exporter.pm' => '/usr/lib/perl5/5.10/Exporter.pm',
          'Data/Dumper.pm' => '/usr/lib/perl5/5.10/i686-cygwin/Data/Dumper.pm'
        };
$%ENV = {
          'USERPROFILE' => 'C:\\Users\\Alex',
          'HOMEDRIVE' => 'C:',
          'PS1' => '\\[\\e]0;\\w\\a\\]\\n\\[\\e[32m\\]\\u@\\h \\[\\e[33m\\]\\w\\[\\e[0m\\]\\n\\$ ',
          'COMMONPROGRAMFILES' => 'C:\\Program Files (x86)\\Common Files',
          'APPDATA' => 'C:\\Users\\Alex\\AppData\\Roaming',
          'PROGRAMFILES' => 'C:\\Program Files (x86)',
          'OS' => 'Windows_NT',
          'CommonProgramFiles(x86)' => 'C:\\Program Files (x86)\\Common Files',
          'LOCALAPPDATA' => 'C:\\Users\\Alex\\AppData\\Local',
          'PWD' => '/home/Alex',
          'USER' => 'Alex',
          'LANG' => 'C.UTF-8',
          'PATHEXT' => '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC',
          'PRINTER' => 'HP Officejet 4620 series (Network)',
          'SHLVL' => '1',
          'NUMBER_OF_PROCESSORS' => '8',
          'HOMEPATH' => '\\Users\\Alex',
          'FP_NO_HOST_CHECK' => 'NO',
          'QMAKESPEC' => 'cygwin-g++',
...

Perl有词法变量(用
my
声明)、包变量(如
$Foo::bar
)和内置超全局变量,这些变量被强制放入
包中(因此它们类似于普通包变量)。除非用我们的声明,否则包变量不能通过PadWalker看到。
@ARGV
数组是一个超全局数组,在除
main
之外的包中不会直接可见。您的问题是未声明的全局变量,还是内置的超全局变量?请注意,例如
$a
$b
是内置的,但不是超全局的。我希望能够看到所有变量(我不在乎它们是内部变量、全局变量还是超全局变量,就像openPerl IDE一样),例如@和$(输入函数时)以及@ARGV等等。。。有解决方案吗?我不知道有什么解决方案,但在有人用答案写下答案之前,您可以使用以下解决方法:捕获对您感兴趣的每个包变量/全局变量的词汇引用,例如:
my$\u ARGV=\@ARGV。是-这是我现在使用的解决方案…:(