Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

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

by emilford (Friar)
on Jun 26, 2002 at 16:06 UTC ( [id://177419]=note: print w/replies, xml ) Need Help??


in reply to 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. Maybe my mind is stuck in C/C++ mode where you have to pass a parameter by reference (I believe) in order to modify it. I thought the purpose of not passing by reference is so that a subroutine will only be able to use the variable and not modify it. If the subroutine can modify this variable no matter how you pass it, what's the point of distinguishing between the two? See where I'm going with this?
  • Comment on Re: Re: Re: Re: Some suggestions on coding style - a chance to critique

Replies are listed 'Best First'.
Re: Re: Re: Re: Re: Some suggestions on coding style - a chance to critique
by broquaint (Abbot) on Jun 26, 2002 at 16:36 UTC
    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

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://177419]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others browsing the Monastery: (6)
As of 2024-04-19 11:54 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found