On Tuesday 18 July 2006 18:05, Rob Dixon wrote: > Bjørge Solli wrote: > > On Tuesday 18 July 2006 16:45, John W. Krahn wrote: > >>Leonid Grinberg wrote: > >>>sub function > >>>{ > >>> my %operating_systems = &populate_hash(%operating_systems); > >> > >> my %operating_systems = populate_hash(%operating_systems); > > > > Why do you want to remove the ampersand? In /the Llama book/, including > > the ampersand is what they teach you. I find code a lot easier to > > understand at once if the ampersands are included, even though I know > > they don't always need to be.
> In this instance the ampersand makes no difference, but it is unnecessary > and better removed. When it /does/ make a difference, the ampersand does > two potentially dangerous things. First of all it disables parameter type > checking for templated subroutines, which means not just that you can pass > the wrong sort of data, but even if you pass the right sort of data it can > be passed in the wrong way. Secondly, if used without brackets, the > subroutine is called with the current @_ as parameters, leaving it to wreak > untold damage on the calling code's values. OK. > To avoid these pitfalls, it is better to use the plain subroutine name when > you are calling it, but add the ampersand when you're talking about the > subroutine itself rather than its return value, like > > if (defined &populate_hash) { }; > > or > > my $subref = \&populate_hash; Ah! I see. I didn't even know this was possible. Guess I'll have to pick up the alpaca book soon. > I am surprised that the Llama book encourages coding in this way as the > ampersand has been undesirable for a long time. Do you have the latest > edition - the third? I have the fourth. It explains that the ampersand is not needed, but as far as I remember it doesn't say that it /should/ be omitted (but hey, I only read it once). But after the initial explanation of subroutines it really don't use subroutines that much, all the examples are as simple as they can be - without subroutines. So I guess this was beyond the scope of the book. I have Steven Holzers /Perl Black Book/ as well, and there the ampersands are omitted, but I didn't read that book from start till end, it works better as a problem solver. It had a lot more on this topic as well:-) Thanks, then I learned something new this morning as well:-) -- Bjørge Solli - Office:+47 55205847 Mohn-Sverdrupsenteret, Nansensenteret, Høyteknologisenteret T47 Thormöhlensgate 47, 5006 Bergen, Norway - www.nersc.no Google Earth: www.nersc.no/GE - TOPAZ: topaz.nersc.no -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>