in reply to Tyring to grep array of hashes

Hi dirtdog,

I can't tell from your posts whether you are trying to solve a problem or complete a homework assignment, but if you are free to, I would dump your arrays and use hashes, which are much better suited to this type of task.

For example:

#!/usr/bin/env perl use strict; use warnings; my %teams = ( NFL => { JETS => 1, PATRIOTS => 1, GIANTS => 1 }, MLB => { YANKEES => 1, METS => 1, CARDINALS => 1 }, NBA => { SIXERS => 1, CELTICS => 1, LAKERS => 1 }, ); my %actual_teams; while ( <DATA> ) { chomp; my ( $league, $team ) = split /,/; $actual_teams{ $league }->{ $team } = 1; } foreach my $league ( keys %teams ) { foreach my $team ( keys %{ $teams{ $league } } ) { if ( not $actual_teams{ $league } or not $actual_teams{ $leagu +e }->{ $team } ) { print "MISSING:\tLEAGUE: $league\tTEAM: $team\n" } } } __DATA__ NFL,JETS NFL,PATRIOTS MLB,YANKEES MLB,CARDINALS MLB,METS NBA,SIXERS NBA,CELTICS NBA,LAKERS
Hope this helps!


The way forward always starts with a minimal test.

Replies are listed 'Best First'.
Re^2: Tyring to grep array of hashes
by dirtdog (Monk) on Feb 07, 2017 at 16:49 UTC

    Hi lnickt

    I like the hash idea, but this example doesn't seem to be working. it should result in GIANTS being the only missing team.

      it should result in GIANTS being the only missing team.

      As indeed they are:

      $ ./1181308.pl MISSING: LEAGUE: NFL TEAM: GIANTS $

      Perhaps you have downloaded it incorrectly?

      Make sure to copy and paste the source using the download link (which displays as [d/l] to the right of the post at the bottom), to avoid any browser/html oddities or typos. The code runs as follows for me:

      $ perl 1181302.pl MISSING: LEAGUE: NFL TEAM: GIANTS


      The way forward always starts with a minimal test.

      My apologies ...it is working

      Thanks!