Όλοι γνωρίζουμε τις παραπομπές του Web. Αν κάποια σελίδα περιέχει κάτι ενδιαφέρον μπορούμε, είτε να στείλουμε ολόκληρη τη σελίδα σε κάποιον φίλο ή φίλη μας, είτε να του δώσουμε απλώς τη διεύθυνσή της και να του πούμε: «Πήγαινε εκεί και δες μόνος σου». Επειδή κάθε μεταβλητή (scalar, array ή hash) αποθηκεύει τα περιεχόμενά της σε μια συγκεκριμένη διεύθυνση η Perl διαθέτει μια λειτουργία αντίστοιχη των παραπομπών του Web χάρη στην οποία μπορούμε να γνωρίζουμε τη διεύθυνση των μεταβλητών μας και να διαχειριζόμαστε αυτή την πληροφορία αντί για την ίδια τη μεταβλητή.
my $scalar_test = ' Just a test';
Η my δημιουργεί τη μεταβλητή $scalar_test (και έτσι αποκτά τη δική της διεύθυνση), ενώ το $scalar_test = ' Just a test' ορίζει τα περιεχόμενα της μεταβλητής αυτής.
my $scalar_ref = \$scalar_test;
Η μεταβλητή $scalar_ref περιέχει τη διεύθυνση της $scalar_test (όλες οι references είναι scalar μεταβλητές).
my @array_test = ('one','two','three');
my $array_ref = \@array_test;
Ίδιο με το παραπάνω αλλά για arrays.
my %hash_test = ( 'giorgos' => 'brother', 'sophia' => 'sister');
my $hash_ref = \%hash_test;
Ίδιο με το παραπάνω αλλά για hashes.
print "$scalar_ref\n";
print "$array_ref\n";
print "$hash_ref\n";
Μπορούμε να τυπώσουμε τα περιεχόμενα των reference scalars αλλά θα μας δώσουν απλώς τις διευθύνσεις μνήμης των μεταβλητών στο συγκεκριμένο μηχάνημα τη συγκεκριμένη στιγμή (αλλάζουν ανάλογα με τις διαθέσιμες θέσεις μηνήμης):
SCALAR(0x1775648)
ARRAY(0x177569c)
HASH(0x1771da0)
Για να αποκτήσουμε πρόσβαση στο περιεχόμενο μιας reference θα χρησιμοποιήσουμε την ακόλουθη σύνταξη:
my $scalar_content = $$scalar_ref;
my @array_content= @$array_ref;
my %hash_content = %$hash_ref;
Τονίζουμε και πάλι ότι η παραπομπή αναφέρεται απλώς σε μια διεύθυνση μνήμης και όχι στο περιεχόμενο της μεταβλητής. Μπορείτε να φανταστείτε ποιο θα είναι το αποτέλεσμα της εκτύπωσης του ακόλουθου κώδικα;
my $scalar_test = 'Just a test';
my $scalar_ref = \$scalar_test;
$scalar_test = 'Just a test 2';
my $scalar_content = $$scalar_ref;
print "$scalar_content\n";
Φυσικά Just a test 2. Παρά το γεγονός ότι η μεταβλητή άλλαξε, η παραπομπή έμεινε η ίδια και όταν ζητήθηκαν τα περιεχόμενα της παραπομπής, αυτή πήρε την τρέχουσα τιμή της $scalar_test.