in reply to Re^7: warning: use of uninitialized value
in thread warning: use of uninitialized value

my fault...i have less knowledge of html so not able to write properly..what i want to say is my config file reads like this,
chipId::1925
subversid::0001
now this is creating the above stated problem

  • Comment on Re^8: warning: use of uninitialized value

Replies are listed 'Best First'.
Re^9: warning: use of uninitialized value
by robby_dobby (Hermit) on Jun 26, 2015 at 05:47 UTC
    Well, in that case - you can do something like this:
    #!perl my %data_ids; while(my $line = <DATA>) { chomp $line; my ($key, $value) = split /::/, $line; $data_ids{$key} = $value; print $key, " => ", $value, "\n"; } for my $key (keys %data_ids) { print $key, " ==> ", $data_ids{$key}, "\n"; } # or just print $data_ids{'chipId'}, "\n"; print $data_ids{'subversid'}, "\n"; __DATA__ chipId::1925 subversid::0001

    From your original code sample, I surmise that you need these IDs for generating an m4 macro. Using a hash might be useful for you since you can just look that up when generating the m4 file later on. Bear in mind all points raise in this thread, use close, closedir properly.

    This got longer than expected. Next time around, you could save us all a lot of back and forth by including a small data sample as I showed above with __DATA__. Also, work through perlintro or an introductory perl book(learn.perl.org lists quite a few of them and some freely available online) and ask more questions here when you get stuck.

    Good luck!

      hello robby_dobby... thanks for the help..i am at the initial level so your suggestion are helping a lot
      i have tried your suggestion and changed the code like this

      my $cChipId; my $cSubVersId; my %data_ids; my $readline; if(open (my $CFILE,"config.txt" ) || die "couldnt open file:", $! ) { while ($readline = <$CFILE>) { chomp $readline; my ($key , $value) = (split /::/, $readline); $data_ids($key) = $value; $readline = <$CFILE>; } foreach my $key (keys %data_ids) { $cChipid = $data_ids('chipid'); $cSubVersId = $data_ids('subversid'); } } close($CFILE);

      but its showing some error like
      global symbol "$data_ids" requires explicit package name at newperlfile2.pl line85. syntax error at newperlfile2.pl line 85, near "$data_ids("
      ....please suggest...
        Hello,

        There are 3 problems I can spot right away:

        • You do the if(open(my $CFILE, ...) within the if block. This means that $CFILE is out of scope outside that block and you can't close it. Place the open on its own line like you did for opening dirhandles.
        • Hashes need curlies, not parens. Read my code once again: $data_ids{'chipId'}, not $data_ids('chipid'), which translates to a subroutine call.
        • Why are you doing the $readline = <$CFILE> once again? You'd be skipping between lines. Like this: read line 1, skip line2, read line 3 and so on. You're already doing it in a while loop, you can delete the second $readline = ..

        I'd reiterate once again - work through an introductory perl tutorial like perlintro. You can avoid these kind of mistakes.