diparun has asked for the wisdom of the Perl Monks concerning the following question:

In this code output, how do I access the sub-components of column_defs, for eg : how do i extract the data_length of a in column_defs ? output :
create table as1( a float, b integer, c char) $VAR1 = { 'org_table_names' => [ 'as1' ], 'column_names' => [ 'A', 'B', 'C' ], 'command' => 'CREATE', 'table_names' => [ 'AS1' ], 'org_col_names' => [ 'a', 'b', 'c' ], 'column_defs' => { 'a' => { 'data_length' => undef, 'data_type' => 'FLOAT' }, 'b' => { 'data_length' => undef, 'data_type' => 'INTEGER' }, 'c' => { 'data_length' => undef, 'data_type' => 'CHAR' } } };

janitored by ybiC: Balanced <code> tags around codeblock, as per monastery convention

Replies are listed 'Best First'.
Re: Accessing references
by borisz (Canon) on Apr 22, 2004 at 00:07 UTC
    my $data_length = $VAR1->{column_defs}->{a}->{data_length};
Re: Accessing references
by bart (Canon) on Apr 22, 2004 at 01:21 UTC
    Both answers given thus far are equivalent, the arrows between subindexes are optional — but not the arrow between the variable name and the first index! That arrow makes the distinction between a scalar, that is a hash/array ref (which needs the arrow), and a an actual array/hash variable.

    Anyway, please do take a look at the excellent tutorial for references that on modern perls is part of the core distro, as well as online: perlreftut

      But, how do I access them through code.?.. meaning, dynamically..


        If you want to access the hash associated with column_defs, you might do, e.g. keys %{$VAR1->{'column_defs'}};That is, wrap the hash reference in curlies and then treat it exactly as you would a hash variable name. Is that what you're asking?

        Have you been through perldoc perlreftut?

        The PerlMonk tr/// Advocate
Re: Accessing references
by asdfgroup (Beadle) on Apr 22, 2004 at 00:29 UTC
    or a bit shorter $VAR1->{column_def}{a}{data_length}