Jeff, et al --

...and then Jeff 'japhy' Pinyan said...
% 
% On Aug 17, David T-G said:
% 
% >% >     45   my $body =
% >% >     46     &parseit
...
% >%
% >% First, you can drop the & on the function call.  It's not necessary.
% >
% >Interesting.  I thought it was a good thing for clarification.  Not
% >needed because I'm passing params, maybe?
% 
% Ther 'perlsub' documentation sets the record straight.  Basically, a '&'

Heh.  As always.  I should have looked there before opening my mouth! :-)


% is only needed...
% 
%   1. when calling a user-defined function with the same name as a built-in

OK...


%   2. when taking a reference to a function

Ah.


%   3. to avoid the function's prototype
%   4. when used with goto &function to avoid another stack level

Still too rich for my blood :-)


%   5. in conjunction with no argument list, to pass the current @_

Ahhh...  So that's probably why I would use it before.


% 
...
% >All of that makes sense.  I guess it can only follow for passing to a
% >function, eh?
% 
% Exactly, since the arguments to a function are placed into an ordinary
% array (with a special name).

OK.


% 
% >%   sub parse_it {
% >%     my ($tmpl, $user) = @_;  # hash references are scalars
% 
% >%     my %template = %$tmpl;  # remember, hashes slurp, so we couldn't
% >%     my %userdata = %$user;  # have done (%a, %b) = (%$c, %$d)
% >
% >Right; I can see that.  So I still get a local %template that I could
% >change as I like without trashing the original.  Yay.
% 
% Very important thing you've noted.  Yes, %template is just a COPY of the

Yep.


% hash stored in $tmpl.  However, if any of the values in %$tmpl are
% references themselves, changing them in %template would change them in
% %$tmpl, because a "copy" of a reference is just the reference.

Oooh, good point.  Hadn't even thought of that.  So if $tmpl is a pointer
to a pointer, as an example, then it's the same thing anyway.  Interesting...


% 
%   my $data = {
%     name => [ "Jeffrey", "Pinyan" ],
%     age => 21,
%   };

You're kidding, right?  *sigh*  One of these days I'll remember that the
world is not simply either my age or my daughters'...


% 
%   my %copy = %$data;
%   ++$copy{age};             # in november
%   $copy{name}[0] = "Jeff";  # please, call me Jeff
% 
%   print "@{ $data->{name} } is $data->{age} years old\n";
%   # "Jeff Pinyan is 21 years old"
% 
%   print "@{ $copy{name} } is $copy{age} years old\n";
%   # "Jeff Pinyan is 22 years old"

Pretty sneak of you.  Almost like being in two places at once :-)


% 
% You can see from that example that, since 'age' is not a reference,
% changing it in %copy doesn't affect it in %$data.  However, 'name' points

Yep.


% to an array reference, so $data->{name} and $copy{name} are really the
% same array reference.  (Read more about this in perlref and the like.)

Gotcha.


Thanks a bunch & HAND

:-D
-- 
David T-G                      * There is too much animal courage in 
(play) [EMAIL PROTECTED] * society and not sufficient moral courage.
(work) [EMAIL PROTECTED]  -- Mary Baker Eddy, "Science and Health"
http://justpickone.org/davidtg/      Shpx gur Pbzzhavpngvbaf Qrprapl Npg!

Attachment: pgp00000.pgp
Description: PGP signature

Reply via email to