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

Greetings

I'm trying to find a way to read in the reference names
(unknown names) and find values to specific pattern-
matched names. Can anyone help?

In the example below, I want to know what names are used
for referencing that start with "TH" and their values.
(i.e. THATCODE, THISCODE, etc...)

Example:
$rec = { TEXT => $string, SEQUENCE => [ @old_values ], LOOKUP => { %some_table }, THATCODE => \&some_function, THISCODE => sub { $_[0] ** $_[1] }, HANDLE => \*STDOUT, };

regards
Sacco

Replies are listed 'Best First'.
Re: retrieving referenced hash information
by chip (Curate) on Mar 12, 2004 at 17:41 UTC
    @whatyouwant = grep { /^TH/ } keys %$rec;

        -- Chip Salzenberg, Free-Floating Agent of Chaos

Re: retrieving referenced hash information
by DigitalKitty (Parson) on Mar 12, 2004 at 19:30 UTC
    In the example below, I want to know what names are used for referencing that start with "TH" and their values. (i.e. THATCODE, THISCODE, etc...)

    Hi Sacco.

    $rec = { TEXT => $string, SEQUENCE => [ @old_values ], LOOKUP => { %some_table }, THATCODE => \&some_function, THISCODE => sub { $_[0] ** $_[1] }, HANDLE => \*STDOUT, }; my %hash = %$rec; while ( ( $key, $value ) = each %hash ) { print "$key = $value\n" if( $key =~ /^TH/ ); }


    Output:
    C:\>perl p14.pl THISCODE = CODE(0x155ad54) THATCODE = CODE(0x155ac40) C:\>

    The CODE(address) indicates a subroutine. If you wanted to look for keys that did not begin with 'TH', you could use the following program:

    $rec = { TEXT => $string, SEQUENCE => [ @old_values ], LOOKUP => { %some_table }, THATCODE => \&some_function, THISCODE => sub { $_[0] ** $_[1] }, HANDLE => \*STDOUT, }; my %hash = %$rec; while ( ( $key, $value ) = each %hash ) { print "$key = $value\n" if( $key !~ /^TH/ ); }


    Output:
    C:\>perl p14.pl TEXT = SEQUENCE = ARRAY(0x15550f0) LOOKUP = HASH(0x15551b0) HANDLE = GLOB(0x155a5c4) C:\>

    Hope this helps,
    -Katie.