--- Bill Jones <[EMAIL PROTECTED]> wrote:
> References:
>
> I am looking for a basic explaination and example:
>
> $animal = "Dog";
> $sound = \$animal;
> $bark = $$sound;
>
> $bark is now Dog.
>
> ???
> -Sx-
The following explanation is oversimplified, but I think it's easy to follow.
$animal = "Dog";
That assigns the string "Dog" (without the quotes) to the scalar $animal.
$sound = \$animal;
Putting a backslash in front of a variable (if the variable is not being interpolated
in quotes)
will create a reference to that variable. $sound is a reference.
$bark = $$sound;
One way to dereference a variable is to prepend the proper variable symbol ($, @, or
%) to the
variable that contains the reference.
One thing are good for is passing around large data structures. For example:
my %hash = ( large amounts of data here );
my $result = process_data( \%hash );
sub process_data {
my $hash_ref = shift;
foreach my $key ( values %$hash_ref ) {
my $value = $hash_ref->{ $key };
# do stuff
}
}
In the above example, imagine that the hash had 10,000 key/value pairs. By passing it
as a
reference, you are only passing a simple scalar reference, instead of the 10,000
pairs. However,
you have to be careful with this technique. Since you're passing a reference, the
process_data()
subroutine is using the actual data in %hash, as opposed to a copy of the data. Thus,
if you
change that data, you're changing the original hash. This snippet will demonstrate
that:
my $data = [ qw/ 1 2 / ];
process( $data );
print "@$data";
sub process {
my $array_ref = shift;
$_++ foreach @$array_ref;
}
Cheers,
Curtis "Ovid" Poe
=====
Senior Programmer
Onsite! Technology (http://www.onsitetech.com/)
"Ovid" on http://www.perlmonks.org/
__________________________________________________
Do You Yahoo!?
NEW from Yahoo! GeoCities - quick and easy web site hosting, just $8.95/month.
http://geocities.yahoo.com/ps/info1
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]