undef in Hash of Arrays

D

Deepu

Hi All,

I have a file which have transitions like:

STATE1
STATE3
STATEMAIN ####
STATESUSPEND
STATE1
STATE2
STATERESUME
RESET
STATE6
STATE8
STATEMAIN ####
STATE9
STATE10

This indicates a transition from STATE1 to STATE3, then STATE3 to
STATEMAIN and so on. There are also 10 files which will have different
combinations of these states.

Here i need to go through the file and check for STATEMAIN and when i
see STATEMAIN, then i need to put it in an array till i see RESET or
end of file. After that again i need to proceed further to check
whether there is any more STATEMAIN. If present again i need to put it
in a different array till RESET or end of file.

Code:

use strict;
use Data::Dumper;

my @files = qw/FILE1 FILE2/;

my %transitions;
my %hashsuspend

foreach my $filename (@files)
{
my $fh;
open $fh, $filename
or do {
warn "$filename missing";
next;
};

my $run_through = 0;
my $recording_enabled = 0;
while (<$fh>)
{
if (/^RESET\b/)
{
$recording_enabled = 0;
}
elsif (/^STATEMAIN\b/)
{
$run_through++;
$recording_enabled = 1;
$suspendCount =0;
}
elsif ($recording_enabled)
{
push @{$transitions{$filename}[$run_through]}, $_;
if ($_ =~ /^STATESUSPEND/)
{
$suspendCount++;
$hashsuspend{$filename}[$run_through] = $suspendCount;
next;
}
}
}
close $fh or die $!;

}

print Dumper \%transitions;
print Dumper \%hashsuspend;

The output i am getting with this is:

%transitions = (
FILE1 => [
undef,
[
STATESUSPEND
STATERESUME
STATE1
STATE2
],
and so on.

What is the reason for undef at the start of the array in every
file.This undef appears even with hashsuspend. Please help me on this.

Thanks
-- Deep
 
A

Anno Siegel

Deepu said:
Hi All,

I have a file which have transitions like:

STATE1
STATE3
STATEMAIN ####

We've been through this, haven't we, under the subject "Hash of Arrays".
What happened to the useful advice you got in that thread? John W. Krahn
offered a wonderful solution in essentialy 4 lines, among other things.

Anno
 
M

mgarrish

Deepu said:
my $run_through = 0;
while (<$fh>)
{
elsif (/^STATEMAIN\b/)
{
$run_through++;
$recording_enabled = 1;
}
elsif ($recording_enabled)
{
push @{$transitions{$filename}[$run_through]}, $_;


The output i am getting with this is:

%transitions = (
FILE1 => [
undef,
[
What is the reason for undef at the start of the array in every
file.This undef appears even with hashsuspend. Please help me on this.

How about looking at your code above bearing in mind that arrays start
at 0 not 1.

Matt
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads

Hash of Arrays 10
hash of arrays 1
Printing Hash of Array of Arrays 5
nice parallel file reading 14
data to hash 1
I want to Display Excel As HTML In js 2
Help with Hash 2
Data saving in condition of changing reality 0

Members online

Forum statistics

Threads
473,982
Messages
2,570,185
Members
46,736
Latest member
AdolphBig6

Latest Threads

Top