Hi all, 

I'm a perl beginner, and when I tries to practice delete built-in, I find it's 
not working as I supposed to. 

 44   my %employ_list = ("e10220" => "Du", "e10250" => "Vic"); 
 45   # iterate thru with each
 46   while ( my ($k, $v) = each %employ_list ) {
 47     print " before: key:$k => value:$v \n";
 48     if ($k eq "e10220") { delete $employ_list{$k}; }
 49     $employ_list{$k} = undef;
 50     print "after: key:$k => value:$v \n";
 51   }
 52   my @elist = %employ_list;
 53   print @elist;

OUTPUT: 

before: key:e10250 => value:Vic                                                
after: key:e10250 => value:Vic                                                 
 before: key:e10220 => value:Du                                                
after: key:e10220 => value:Du                                                  
Use of uninitialized value $elist[1] in print at ./e6.pl line 53.              
Use of uninitialized value $elist[3] in print at ./e6.pl line 53.

e10250e10220

the delete built-in doesn't work, the output of print "after" is still the 
original dict. However, when I try to remove the if condition, simply put 
delete $employ_list{"e10220"} there, it works.  

I can't figure out why, also, the line #49 doesn't work either until I print 
the dict outside the while loop, I would expect the print "after" should be 
empty. 
---
Regards !

Alex Chiang 



--- 
Regards !

Alex Chiang 

Reply via email to