Sé que puedo enumerar todas las variables paquete y lexcial en un ámbito determinado usando Padwalker
's peek_our
y peek_my
, pero ¿cómo puedo obtener los nombres y valores de todas las variables globales como $"
y $/
?¿Cómo puedo enumerar todas las variables que están en un ámbito determinado?
#!/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;
}
% main :: contiene variables de paquete como "our $ foo", no variables globales como $ /. –
Lo llevo de vuelta, simplemente no los reconocí porque faltan sus sellos. Hmm, cómo averiguar si son matrices, hashes o escalares. –
puede usar la función incorporada 'ref' para obtener el tipo de símbolo. – fido