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

Just a couple of comments on coding style And do make sure you get onto using CGI and watching out for potential security holes (see. opening a pipe to sendmail).
HTH

_________
broquaint

[1] this is indeed sarcasm but unfortunately I cannot take credit for this masterful piece of wit[2] which was introduced to me by a co-worker
[2] that, however, is mine ;-)

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

Replies are listed 'Best First'.
Re: Re: Some suggestions on coding style - a chance to critique
by emilford (Friar) on Jun 26, 2002 at 15:16 UTC
    Thanks for the suggestions. First, I do use strict and -w, it just happened to get cut off when I was cutting and pasting my code.

    Also, if scalar variables are passed by reference, does this mean that they can be modified from within a subroutine? I thought that I would have to pass a reference to the scalar in order to modify them (i.e. - \$variable). Is this not true?

    About passing variables, I could push everything into a seperate data type, but wouldn't that make things a little less clear and require "not necessary" lines of code?

    Thanks for the suggestions.
      I thought that I would have to pass a reference to the scalar in order to modify them (i.e. - \$variable). Is this not true?
      You don't *have* to pass by reference to modify variables as @_ is just a list of aliases (it's magic you see) e.g
      sub foo { $_[0] = "modified in foo()"; print "in foo()\n"; } my $var = "a string"; print "\$var is $var\n"; foo($var); print "\$var is $var\n"; __output__ $var is a string in foo() $var is modified in foo()
      However passing by reference is more explicit, but that then introduces in the issue of 'dirtying' your arguments which is generally agreed to be avoided if possible. I believe the reasoning is that entering a function shouldn't modify the state of your program, although this can usually be ignored with more complex data e.g throwing around hashes is potentially pricey.
      I could push everything into a seperate data type, but wouldn't that make things a little less clear and require "not necessary" lines of code?
      At the worst it will require a line or two of code, but organising your data is far more likely to *reduce* your code. Let's take send_mail() for example. Currently you have 8 arguments, whereas I'd probably reduce that to 2 arguments with all the sendmail-related information in a hash or even a hash of hashes. But then again I think that all this throwing about of data is a symptom of a mis-organised program, to which I think part of the solution would be re-structuring the data as once you have well-defined data structures the program tends to follow.
      HTH

      _________
      broquaint

        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?