加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 如何列出在给定范围内的所有变量?

发布时间:2020-12-15 21:24:42 所属栏目:大数据 来源:网络整理
导读:我知道我可以列出所有的包和lexcial变量在给定的范围使用 Padwalker 的peek_our和peek_my,但是如何获得所有的全局变量的名称和值,如$“和$ /? #!/usr/bin/perluse strict;use warnings;use PadWalker qw/peek_our peek_my/;use Data::Dumper;our $foo = 1
我知道我可以列出所有的包和lexcial变量在给定的范围使用 Padwalker的peek_our和peek_my,但是如何获得所有的全局变量的名称和值,如$“和$ /?
#!/usr/bin/perl

use strict;
use warnings;

use PadWalker qw/peek_our peek_my/;
use Data::Dumper;

our $foo = 1;
our $bar = 2;

{
    my $foo = 3;
    print Dumper in_scope_variables();
}

print Dumper in_scope_variables();

sub in_scope_variables {
    my %in_scope = %{peek_our(1)};
    my $lexical  = peek_my(1);
    #lexicals hide package variables
    while (my ($var,$ref) = each %$lexical) {
        $in_scope{$var} = $ref;
    }
    ##############################################
    #FIXME: need to add globals to %in_scope here#
    ##############################################
    return %in_scope;
}

解决方法

您可以访问符号表,签出p。 “Programming Perl”的第293页
另外看看“Mastering Perl: http://www252.pair.com/comdog/mastering_perl/
具体: http://www252.pair.com/comdog/mastering_perl/Chapters/08.symbol_tables.html

您正在查找的那些变量将在主命名空间下

Google快速搜索:

{
    no strict 'refs';

    foreach my $entry ( keys %main:: )
    {
        print "$entryn";
    }
}

你也可以做

*sym = $main::{"/"}

同样对于其他值

如果你想找到你可以做的符号的类型(从掌握perl):

foreach my $entry ( keys %main:: )
{
    print "-" x 30,"Name: $entryn";

    print "tscalar is definedn" if defined ${$entry};
    print "tarray  is definedn" if defined @{$entry};
    print "thash   is definedn" if defined %{$entry};
    print "tsub    is definedn" if defined &{$entry};
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读