Why do you have a random "%groupinfo"? That line should end with a semi-colon and start with a "my" keyword.
my %groupinfo;
Secondly the only place you mention desc is in the body of the while loop, and it's a scalar. Why are you trying to print out a hash named desc later on?
$desc = "foo";
Does not affect anything named
%desc.
Where do you get the variable $line from? You don't declare it. You don't assign anything to it. You just made it up and hoped it worked?
Heres a rewrite that sucks slightly less:
#!/usr/bin/perl
use strict; # or die
my %groupinfo;
open(IN, "groupinfo") or die "Can't open groupinfo: $!";
while( my $line = <IN> )
{
my( $name, $desc ) = split/:/,$line;
$groupinfo{$name} = $desc;
}
print %groupinfo;