another perl question

I have a question regarding bulding a hash from a file which has below pattern

I thought I could write something like this but clearly my syntax is way off

$/ = "\n\n";
$" = "\n";

open(FILE, file1) || die;

my %keymaster = ( );

while (<FILE>) {
     my $topinfo =~ m/^(yahoo).+\$1/;
     my $key1 =~ m/^keyinfo.+$/;
     ($keyinfo, $topinfo) = split;
     push(@{$keymaster{$keyinfo}}, $topinfo);
}

I am trying to come up with something like this when I dereference it,

keyinfo 1 yahoo yahoo1 yahoo2
keyinfo 2 yahoo yahoo yahoo
keyinfo 5 yahoo1 yahoo1 yahoo

but I am not sure about my syntax...

thanks for any help~ or pointers

-----------------file1----------------------
yahoo 123123123
somwething
something
keyinfo
something

yahoo1 123123123
something
keyinfo
something

yahoo
something
something
osomething
keyinfo
something

and so on

This doesn't work either

while (<FH>) {
    if (m/yahoosomething/) {
       $keyinfo = $_; 
       print "$keyinfo\n";
    }
    if (m/^(sometpattern) (\d\d\d)\$2/) {
       $somevalue = $_;
       print "$somevalue\n";
    }
    #print "$keyinfo $somevalue\n"; 
}
close FH;

bit closer.. but now it says that %keyinfomaster is not initialized.... grrr

#!/usr/bin/perl -w

use strict;

my $ncb = $/;
my $cbn = $";
$/ = "\n\n";
#$" = "\n";

open(FH, '/script/perl/data/file1') || die "can't open file: $!";

my ($keyinfo,$somevalue);
my %keyinfomaster = ( );

while (<FH>) {
    if (m/^keysomething.+$/) {
       $keyinfo = $_; 
      # print "$keyinfo\n";
    }
    if (m/^something\/2\.0.+$/) {
  #   if (m/^(something\/2\.0).+\$2/) {
       $somevalue = $_;
       print "$somevalue\n";
    }
   print "$keyinfo $somevalue\n"; 
#    ($keyinfo,$somevalue) = split;
    push( @{$keyinfomaster{$keyinfo}}, $somevalue) ;
}

foreach $keyinfo ( sort key %keyinfomaster) {
         print "$keyinfo: @{$keyinfomaster{$keyinfo}}\n";
}

No, you don't need to use references at all.

To assign something to a hash, don't use push(). Simply write

$keyinfomaster{$key} = $value;

Then simply get it by

$keyinfomaster{$key}

Don't use references unless you know the full story.

still samething after changing to hash

 1  \#!/usr/bin/perl -w
 2
 3  use strict;
 4
 5  my $ncb = $/;
 6  my $cbn = $";
 7  $/ = "\\n\\n";
 8  \#$" = "\\n";
 9
10  open\(FH, '/script/perl/data/somevalue'\) || die "can't open file: $!";
11
12  my \($keyinfo,$somevalue\);
13  my %keyinfomaster = \( \);
14
15  while \(&lt;FH&gt;\) \{
16      if \(m/^Call-ID:.\+$/\) \{
17         $keyinfo = $_; 
18        \# print "$keyinfo\\n";
19      \}
20      if \(m/^SIP\\/2\\.0.\+$/\) \{
21    \#   if \(m/^\(SIP\\/2\\.0\).\+\\$2/\) \{
22         $somevalue = $_;
23         print "$somevalue\\n";
24      \}
25  \#   print "$keyinfo $somevalue\\n"; 
26  \#    \($keyinfo,$somevalue\) = split;
27  \#    push\( @\{$keyinfomaster\{$keyinfo\}\}, $somevalue\) ;
28       $keyinfomaster\{$keyinfo\} = $somevalue;
29  \}
30
31  foreach $keyinfo \( sort key %keyinfomaster\) \{
32           print "$keyinfomaster\{$keyinfo\}\\n";
33  \}

[root@wks-86-72 tmp]# ./!$ | head -1
./perl.yahoo | head -1
Use of uninitialized value in hash element at ./perl.yahoo line 28, <FH> chunk 1.
Use of uninitialized value in hash element at ./perl.yahoo line 28, <FH> chunk 2.
Use of uninitialized value in hash element at ./perl.yahoo line 28, <FH> chunk 3.
Use of uninitialized value in hash element at ./perl.yahoo line 28, <FH> chunk 4.
Use of uninitialized value in hash element at ./perl.yahoo line 28, <FH> chunk 5.
Use of uninitialized value in hash element at ./perl.yahoo line 28, <FH> chunk 6.
Use of uninitialized value in hash element at ./perl.yahoo line 28, <FH> chunk 7.
Use of uninitialized value in hash element at ./perl.yahoo line 28, <FH> chunk 8.
Use of uninitialized value in hash element at ./perl.yahoo line 28, <FH> chunk 9.
Use of uninitialized value in hash element at ./perl.yahoo line 28, <FH> chunk 10.
Use of uninitialized value in hash element at ./perl.yahoo line 28, <FH> chunk 11.
Use of uninitialized value in hash element at ./perl.yahoo line 28, <FH> chunk 12.

It's obviously not the same, as the error message is no longer the same!

It's complaining $keyinfo is undefined. So you should check your program why that specific variable is undefined. Only you have the complete program and the data file so we cannot help you find out why that specific variable is undefined.