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

Hope I did not offend anyone earlier. I do not know much about perl, I could tell you my story but I do not want to take up your forum.

I am trying access the elements in an array.

When the program starts it load from a file, ciphers.

# load the list with ciphers from the config file if no ciphers were detected.
$self->load_ciphers() unless $self->check_cipher_count(); $self->{game} = undef;

our %S = (%S, game => { "jetfighter4" => {key => "M3pL73", label => "JetFighter + IV: Fortress America"}, "projectigi2r" => {key => "j4F9cY", label => "IGI2: Covert S +trike", port => 26001}, }, ); 1;
When I do this, $self->check_cipher_count(); the count is 2 not 7

I cannot get perl to print anything concerning that array. Always errors, always!

#print Dumper $rx->{game}->1->{label};

#print Dumper $self->{game}->1->{label};

#print Dumper $rx->{game}->[0]->{cipher};

It's like the Perl code does not know that jetfighter4 is JetFighter IV is jetfighter4

Hope someone can help me learn how to access an array in perl!


Replies are listed 'Best First'.
Re: Load file (updated)
by AnomalousMonk (Bishop) on Jul 27, 2019 at 22:57 UTC

    As huck has replied, there is no array, only a hash of hashes (of hashes) (update: although formally a "hash" is an associative array etc., etc.); see Perl Data Structures Cookbook (perldsc). Examples of access:

    c:\@Work\Perl\monks>perl -wMstrict -le "use Data::Dumper; ;; our %S = ( game => { 'jetfighter4' => { key => 'M3pL73', label => 'JetFighter IV: Fortress America', }, 'projectigi2r' => { key => 'j4F9cY', label => 'IGI2: Covert Strike', port => 26001, }, }, ); ;; print Dumper \%S; ;; print Dumper $S{ 'game' }{ 'jetfighter4' }; ;; print $S{ 'game' }{ 'jetfighter4' }{ 'label' }; " $VAR1 = { 'game' => { 'projectigi2r' => { 'label' => 'IGI2: Covert Str +ike', 'port' => 26001, 'key' => 'j4F9cY' }, 'jetfighter4' => { 'label' => 'JetFighter IV: Fo +rtress America', 'key' => 'M3pL73' } } }; $VAR1 = { 'label' => 'JetFighter IV: Fortress America', 'key' => 'M3pL73' }; JetFighter IV: Fortress America

    BTW, the second appearance of  %S in your OPed code
        our %S = (%S, ... );
    definition and initialization statement is puzzling: to what does it refer? There is no other  %S in the posted code, and I would expect a warning message of some kind if there were. (You're using strict and warnings, right? Right?) (But see Update 2 below.)

    Update 1: I have the impression your OP was recently modified. If so, please see How do I change/delete my post? for site etiquette and protocol regarding such changes. Basic rule: Do Not Destroy Context.

    Update 2: Actually, I just tried the code example above with the second  %S present (with warnings and strictures enabled) and to my surprise, it doesn't produce a warning or error message! I guess this has to do with its package-global nature. Still, I don't understand its function in the code. Is it previously defined as a lexical (that would work and might even be useful)? In puzzlement...

    Give a man a fish:  <%-{-{-{-<

      Thank you!

      As I said, I know nothing about Perl, but I am learning!

      That file is a part of the source code from 333Networks

      Again, thank you!

      Thank you for the links!

Re: Load file
by huck (Parson) on Jul 27, 2019 at 22:06 UTC

    Hope someone can help me learn how to access an array in perl!

    What array? all I see is a hash of hashes

Re: Load file
by Anonymous Monk on Jul 08, 2019 at 19:30 UTC
    no crystal ball here, show the actual code?
        Did like you asked. Showed the code.