in reply to difference between pointer and referrence in perl

A C pointer points to a memory location. That's pretty much it.
What will happen when you deference that pointer depends upon what other 'C' statements have defined the "thing" that lives at that memory location. The 'C' language would be worthless if it didn't have the abilty to increment a pointer to memory by an unknown number of bytes between different things in memory, based upon a sort of definition of the memory layout. In other words, 'C' "knows" how big an individual "thing" is.

What 'C' doesn't know is: how many of those "things" exist, but Perl does know. A Perl reference points to a "Perl thing" like: a hash table or an array or a scalar or even a Perl reference to one of these things.

Unlike 'C', a Perl "thing" knows how big it is.

The most common error in 'C' is "off by one" array indicies. Perl helps a lot with these iterators. For example: foreach my $x(@some_array). I don't need to know how big @some_array is, I will get an x for every value in @some_array. In 'C', I have to know explictly how "big it is" or have some other way of finding out (like a signal value in that array).