http://www.perlmonks.org?node_id=177431


in reply to Re: Re: Re: Re: Some suggestions on coding style - a chance to critique
in thread Some suggestions on coding style - a chance to critique

I'm confused to what the purpose of passing a variable by reference is since you claim that you don't *have" to in order to modify it
A good reason for passing references is so you can pass distinct groups of aggregate data types e.g
sub three_args { my($array, $scalar, $hash) = @_; print "three_args() got - $array, $scalar, $hash\n"; } my $scalar = 'a string'; my @array = qw(foo bar baz); my %hash = (key => 'value'); # with references three_args(\@array, $scalar, \%hash); # without references three_args(@array, $scalar, %hash); __output__ three_args() got - ARRAY(0x81089ac), a string, HASH(0x81089f4) three_args() got - foo, bar, baz
As you can see, if you don't pass an array by reference it flattens out (the same goes for hashes) because it's in list context (the default context when passing arguments to user-defined functions). However I can't think of any particularly compelling reason off the top of my head for passing simple scalars by reference. It's generally a much better idea to return the desired values from the function.
If the subroutine can modify this variable no matter how you pass it, what's the point of distinguishing between the two?
For the clarity and simplicity of code. You're more than welcome to access the variables that were passed to you through @_, but you're doing so at your own risk (and anyone else that has to maintain your code). To draw a similarity between with C++ - @_ is sort of like having all your arguments as references (i.e foo(int& x) where as passing by reference is more like passing pointers.
HTH

_________
broquaint

  • Comment on Re: Re: Re: Re: Re: Some suggestions on coding style - a chance to critique
  • Download Code