in reply to Hard reference vs Soft/Symbolic reference

The general reference for all references, including symbolic ones is perlref and a basic intro can be found in perlreftut. You should likely read through both.

Under most circumstances, you should avoid symbolic references since they make debugging more difficult, security can be comprimised and nearly everything you can do with them can be done with ordinary, "hard" references. There are exceptions (e.g. manipulating the symbol table), and those are discussed in the relevant section of perlref. The basic concept behind them is rather than storing the memory address of the variable of interest, as is done with normal references, you store in your variable the name of a variable of interest. This is then dereferenced using the same syntax. So, for example you could do the following:

my $string = 'Hello World!'; my $var_name = 'string'; print ${$var_name};

The scalar dereference looks through the lexical space to see if it can find a scalar variable named 'string', and then when it does, performs the substitution.