On Fri, 12 Mar 2004, R. Joseph Newton wrote:
>
> Charlotte Hee wrote:
>
> >
> > For a single record I can see how that works but let's say I have
> > 4 or 5 employees and I have the employee information for each one
> > (assumed). Now I want to build a record for each employee in a loop like
> > this:
> >
> > @names = ('Jason','Aria','Samir','Owen');
> >
> > foreach $na ( @names ) {
>
> So all the records differ only in name, and all other parameters stay the same?
>
> > $record = {
> > NAME => $na,
> > EMPNO => $emp_no,
> > TITLE => $title,
> > AGE => $age,
> > SALARY => $salary,
> > PALS => [ $friend_list ],
> > };
> >
> > # store record
> > $byname{ $record->{NAME} } = $record;
> >
> > }
> >
> > Now I want to add something later, after the record for the employee has
> > been created. For example, I want to add the phone for Owen.
> > When I try the following I get "can't use undefined value...".
>
> Since you don't seem to be showing us the code you are actually using, we are
> somewhat at a disadvantage. ONe thing you should not, though. Since the nested
> hashes should be storedonly by reference, you should use the derefereing operator
> -> to get at least the fianl element.
>
> > $byname{ Owen }{ PHONE } = '999-9999';
>
> Should be:
> $byname{ Owen }->{ PHONE } = '999-9999';
> are you using strict? The code above should cause an error, not just an
> uninitialized variable warning. You really should put:
> use strict;
> use warnings;
> at the top of the script, and clean up the errors returned before you try to take
> on multidimensional structure problems. Houses built on sand cannot be expected
> to stand.
>
> Joseph
>
Ah, I see how the syntax works. Assume that %byname is a hash of record
datatypes (this is like the perl cookbook example) and has predefined
values from somewhere. Adding the phone number after %byname has been
populated with data I could add the phone like this:
$num = 1234567; # fake phone number for testing.
foreach $item ( keys %byname ){
$rp = $byname{$item};
$rp->{PHONE} = $num;
++$num;
}
or I could add the phone number this way:
$num = 1234567; # fake phone number for testing.
foreach $item ( keys %byname ){
$byname{$item}->{PHONE} = $num;
++$num;
}
Seeing your responses about the use of the arrow notation somehow made
things click in my head.
thanks, Chee
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>