LogIn E-mail
¼³°èÀ̾߱â
Deleting from a Hash , defined , exists
# 113 JMJS    25.7.9 10:40

if (defined $hash{$key}) { }

if (exists $hash{$key}) { }

my %hash = (a => 1, b => 0, c => undef, e=>"");

# key  value  defined  exists
a          1        1       1
b          0        1       1
c      undef        0       1
d      undef        0       0
e      undef        1       1



https://www.oreilly.com/library/view/perl-cookbook/1565922433/ch05s04.html

You want to remove an entry from a hash so that it doesn¡¯t show up with `keys`, `values`, or `each`. If you were using a hash to associate salaries with employees, and an employee resigned, you¡¯d want to remove their entry from the hash.

Use the `delete` function:

```
# remove $KEY and its value from %HASH
delete($HASH{$KEY});
```

Sometimes people mistakenly try to use `undef` to remove an entry from a hash. `undef` `$hash{$key}` and `$hash{$key}` `=` `undef` both make `%hash` have an entry with key `$key` and value `undef`.

The `delete` function is the only way to remove a specific entry from a hash. Once you¡¯ve deleted a key, it no longer shows up in a `keys` list or an `each` iteration, and `exists` will return false for that key.

This demonstrates the difference between `undef` and `delete`:

```
# %food_color as per Introduction
sub print_foods {
    my @foods = keys %food_color;
    my $food;

    print "Keys: @foods\n";
    print "Values: ";

    foreach $food (@foods) {
        my $color = $food_color{$food};

        if (defined $color) {
            print "$color ";
        } else {
            print "(undef) ";
        }
    }
    print "\n";
}

print "Initially:\n";
print_foods();

print "\nWith Banana undef\n";
undef $food_color{"Banana"};
print_foods();

print "\nWith Banana deleted\n";
delete $food_color{"Banana"};
print_foods();

Initially:

Keys: Banana Apple Carrot Lemon

Values: yellow red orange yellow

With Banana undef

Keys: Banana Apple Carrot Lemon

Values: (undef) red orange yellow

With Banana deleted

Keys: Apple Carrot Lemon

Values: red orange yellow ...
```

Get  now with the O¡¯Reilly learning platform.

O¡¯Reilly members experience live online training, plus books, videos, and digital content from nearly 200 publishers.

°Ô½Ã¹°: 115 °Ç, ÇöÀç: 1 / 1 ÂÊ
¹øÈ£ Á¦       ¸ñ ÀÛ¼ºÀÚ µî·ÏÀÏ ¹æ¹®
115  perl format JMJS 24.6.22 265
114  perl -p -i -e s/abc/def/g JMJS 24.3.26 271
113  Deleting from a Hash , defined , exists JMJS 25.7.9 296
112  yaml file Àбâ JMJS 23.11.30 321
111  alzipcon JMJS 22.11.26 382
110  file2date.pl JMJS 24.6.1 501
109  UTF-8, EUC-KR JMJS 19.12.15 466
108  wget.pl LWP Simple get JMJS 19.9.17 488
107  X JMJS 19.9.17 484
106  X JMJS 19.9.17 486
105  X JMJS 19.9.17 474
104  X JMJS 19.9.17 476
103  X JMJS 19.9.17 475
102  X JMJS 19.9.17 475
101  gnome-terminal JMJS 25.7.3 480
100  jsame.pl JMJS 09.5.21 2001
99  jos.pl JMJS 08.11.29 1736
98  jmngr.pl - jmjspro manager JMJS 08.11.29 1771
97  vhdl.pm JMJS 08.11.29 1749
96  jreg.pl JMJS 08.11.29 1725
95  jtree.pm JMJS 08.11.29 1809
94  w2c.pl JMJS 08.11.29 1763
93  jdread.pl JMJS 08.11.29 1541
92  ffile.zip ffilediff.pl JMJS 09.4.24 1595
91  rgb2ycbcr.pl JMJS 10.5.12 1906
90  proview.pl JMJS 08.11.29 1981
89  smi_shift.pl JMJS 10.10.3 1574
88  srt2smi.pl srtshift.pl JMJS 18.7.14 1774
87  Perl CGI Input Test, getenv.cgi JMJS 18.11.21 1471
86  hash JMJS 24.6.22 1720
85  tr a-z A-Z ġȯ , ´ë¼Ò¹®ÀÚ º¯È¯ , ¹®ÀÚ¿­ Á¶°Ç , ... JMJS 24.6.22 1519
84  JARRAY->jfunc JMJS 08.10.2 1480
83  ¼öÄ¡ÇÔ¼ö - ... JMJS 09.5.7 1987
82  ¿ªÇà·Ä3x3 JMJS 09.5.7 2000
81  hex2int.pl JMJS 10.9.12 2732
80  stat - file status º¸±â JMJS 07.12.16 1593
79  Perl Tip JMJS 24.6.22 2755
78  SMI file sync delay JMJS 07.7.18 1691
77  rmword.pl JMJS 07.6.18 1610
76  pack unpack JMJS 24.6.22 1517
75  [Perl]read_dir.pl JMJS 07.2.22 1804
74  [Perl]jtab2char - tab¹®ÀÚ¸¦ ƯÁ¤ char·Î ¹Ù²ãÁÖ±â JMJS 07.2.22 1775
73  Perl ¼ýÀÚ Sorting JMJS 11.5.17 1858
72  [CGI]GET and POST JMJS 06.11.20 3516
71  Perl Grammer JMJS 06.9.4 3091
70  Ç¥ÁØ ¸ðµâ JMJS 06.8.10 1989
69  Getopt::Long example JMJS 06.8.10 2182
68  array of array JMJS 06.4.22 1591
67  [HTML]Å×ÀÌºí ¹è°æ¿¡ ±×¸²³Ö±â JMJS 06.3.8 1684
66  l2w.pm - line to word JMJS 08.12.1 1675
65  make_random_chars JMJS 05.8.10 1510
64  mail º¸³»´Â script JMJS 05.3.23 1481
63  ½ÇÇàÆÄÀÏÀ» ½ÇÇà½Ã۰í Ç¥ÁØ¿¡·¯ Àбâ JMJS 09.2.25 1489
62  ÆË¾÷â(°øÁöâ)¶ç¿ì±â Jinsung 03.12.16 2580
61  print <<ENDLINE JMJS 03.12.5 1583
60  [HTML]Target JMJS 03.5.21 1615
59  [Perl]jutil.pm JMJS 03.5.3 1865
58  [Perl]jdiff.pl JMJS 02.6.6 1772
57  [Perl]cfilter.pm - commant filter JMJS 02.1.31 1803
56  [HTML]ÀÚµ¿À¸·Î ´Ù¸¥ ÆäÀÌÁö À̵¿ JMJS 02.1.19 1628
55  STDIN file open glob -w warning JMJS 24.6.22 1664
54  opendir , readdir , closedir JMJS 24.6.22 1668
53  rand_diff JMJS 01.10.23 1562
52  vcd2v.pl JMJS 15.8.25 1648
51  file upload JMJS 24.6.22 1589
50  umask(070) <- chmod o-rwx Áø¼º 01.3.16 1737
49  head2index Áø¼º 01.3.15 1429
48  grep.pl JMJS 11.1.20 1566
47  chr(13) = \M Áø¼º 01.3.15 1428
46  stty JMJS 01.3.12 1540
45  des.pl JMJS 01.3.8 1507
44  chr_plus.pl JMJS 01.3.8 1516
43  get passwd in unix JMJS 19.8.18 1360
42  unsort JMJS 19.9.10 1603
41  read from website web JMJS 19.5.15 1401
40  vec JMJS 01.3.8 1663
39  chomp $_ @_ say defined use 5.010 state grep any ... JMJS 18.10.27 1582
38  [Perl Tk] µµ½ºÃ¢ ¾øÀÌ, ÆÞ Tk ½ºÅ©¸³Æ® ½ÇÇàÇϱâ; ... JMJS 17.9.30 1546
37  @bs = sort {$a <=> $b} @as; JMJS 17.7.12 1614
36  if ( -e -z -s -f -d -T -B -M ) JMJS 16.3.10 1711
35  mkmm.pl - make freemind JMJS 12.5.22 1653
34  perl -pi.orig -e "s/\bu_(\w+_t)\b/u$1/g" *.c JMJS 11.8.26 1639
33  .xls output csv ÆÄÀÏ¿¡ \n "°¡ ÀÖÀ»¶§ JMJS 11.4.13 1531
32  jdcat.pl juncat.pl JMJS 11.2.24 1692
31  print chr(ord('a')); JMJS 01.3.8 1593
30  require "/user/home/jin1/jin1.pm"; JMJS 00.11.28 1526
29  for(my $i=0; $i < @abc; $i ++) {} JMJS 00.11.15 1615
28  remove blank $abc =~ s/[\s]+//g; Á¤±ÔÇ¥Çö½Ä ... JMJS 25.7.16 1561
27  array and for JMJS 00.11.14 1401
26  È¨ÆäÀÌÁö ÀÚµ¿ À̵¿ JMJS 00.10.28 1459
25  html¿¡¼­ ¾²ÀÌ´Â ±âȣǥ½Ã¹æ¹ý JMJS 00.9.30 1413
24  ¹è¿­ÀÇ ¹üÀ§ ¿¬»êÀÚ JMJS 00.9.20 1718
23  for(1..3) { print "$_";} JMJS 09.4.24 1384
22  package JMJS 24.6.22 1465
21  ÁÙ¿¡¼­ ÇѱÛÀÚ °íÄ¡±â JMJS 00.8.7 1515
20  hotkey function by getc JMJS 00.7.21 1617
19  read, sysread, syswrite JMJS 00.7.21 2429
18  crypt JMJS 00.7.13 1720
17  csv2gan.pl JMJS 11.4.4 1732
16  hexa JMJS 24.6.18 1559
15  file in out.pl JMJS 00.7.5 1746
14  ARGV JMJS 00.7.5 1572
13  jtime.pm - localtime, timelocal JMJS 09.4.9 2097
12  @INC JMJS 00.7.5 1933
11  $#myarray JMJS 00.7.5 1686
10  Hash of Array JMJS 00.7.5 1508
9  package JARRAY JHASH JMJS 00.7.4 1754
8  foreach, while each, dos2unix.pl, next last JMJS 09.4.24 1730
7  base64 enc dec binary JMJS 25.6.30 1533
6  file lock JMJS 00.7.4 1643
5  gettime JMJS 00.7.4 1625
4  [Perl]jcdread.pl JMJS 00.7.4 1708
3  [Perl]jdread.pl JMJS 00.7.4 1605
2  Monti Hall problem JMJS 24.6.27 1594
1  DESTROY JMJS 09.7.20 1536
[1]