in reply to Dangling Pointer::perl referrence

C programmers have a hard time with some of the aspects of Perl because they look similar to constructions in C but act very differently. In C, you are taught that arrays are blocks of memory and their names are just pointers. The following are equivalent in C:

  a[2]
  *(a+2)
  2[a]

In Perl, arrays are more like objects than memory. When you undef an array, you free up its data but it still remains in the symbol table. This means you can reuse it later. In Perl, the following are equivalent:

  undef @arr;
  @arr = ();

The array doesn't go away with undef, just its data. Like in the following:

#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

# Make Data::Dumper pretty
$Data::Dumper::Sortkeys = 1;
$Data::Dumper::Indent   = 1;

# Set maximum depth for Data::Dumper, zero means unlimited
$Data::Dumper::Maxdepth = 0;

my @arr = ( 1, 2, 3, );
print Dumper \@arr;

undef @arr;
print Dumper \@arr;