Andrew Gaffney <[EMAIL PROTECTED]> wrote:
:
: I'm trying to write a subroutine that takes two scalars and two
: arrays as parameters. I've read that if you try to do this in a
: function, both arrays will get combined within '@_'.

Andrew,

  - Stop using prototypes. You'll find it easier to write perl
    programs without them.

  - Read perlsub, perlref, and perlreftut.

  - Install perl on your local computer.

      - Experiment.

      - Try calling your subroutines with strictures and warnings
        turned on and see what happens. Your questions are /very/
        basic. I realize this is a beginners list, but you'll
        never get past beginner if you don't experiment.


: Now, how do I get those values in the subroutine?
:
: sub my_subroutine([EMAIL PROTECTED]@) {
:    my ($scalar1, $scalar2, $arrayref1, $arrayref2) = @_;
: }

    That's about it. Though I might suggest a style change.

    - Use a variable names that describe the data, not it's
      structure.

    - Separate words in variables with underscores.

    - Use comments and white space that aids the maintainer.

    - Don't use prototypes.


sub sales_by_quarter {
    my(
        $first_quarter_name,        # scalar
        $second_quarter_name,       # scalar
        $first_quarter_data,        # array reference
        $second_quarter_data,       # array reference
    ) = @_;
    # ...
}


sub sales_comparison_by_quarter {

    # These are references to arrays.
    # Any changes you make *will* affect the original data.
    #  Think of them as read only.
    my(
        $Q1_data,       # array reference
        $Q2_data,       # array reference
    ) = @_;

    # Region names will default if not provided
    my $Q1_region = shift || 'Region 1';
    my $Q2_region = shift || 'Region 2';

    # ...
}


: Another thing, how do you access an array through a reference?
: I know you access a hash through a reference by doing
: '$hashref->{hashkey}' instead of just '$hashref{hashkey}', but
: I've never done it with arrays (never needed to).

    The arrow operator (->) is used to dereference references.
Read perlref and perl reftut.

$second_quarter_data->[ $month ]


: One more thing (I promise). Do I need to do anything special to
: pass arrays as references to the function, like this:
:
: my_subroutine $scalar1, $scalar2, [EMAIL PROTECTED], [EMAIL PROTECTED];
:
: or can I pass them without the '\'? Sorry for all the
: questions in one post, but at least they are all related :)

    Yes, but you have already answered this at the beginning of
your message:

    : I'm trying to write a subroutine that takes two scalars
    : and two arrays as parameters. I've read that if you try
    : to do this in a function, both arrays will get combined
    : within '@_'.

HTH,

Charles K. Clarkson
-- 
Mobile Homes Specialist
254 968-8328


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to