Mastering Perl for Bioinformatics [Electronic resources] نسخه متنی

اینجــــا یک کتابخانه دیجیتالی است

با بیش از 100000 منبع الکترونیکی رایگان به زبان فارسی ، عربی و انگلیسی

Mastering Perl for Bioinformatics [Electronic resources] - نسخه متنی

| نمايش فراداده ، افزودن یک نقد و بررسی
افزودن به کتابخانه شخصی
ارسال به دوستان
جستجو در متن کتاب
بیشتر
تنظیمات قلم

فونت

اندازه قلم

+ - پیش فرض

حالت نمایش

روز نیمروز شب
جستجو در لغت نامه
بیشتر
لیست موضوعات
توضیحات
افزودن یادداشت جدید










A.18 Subroutines


Subroutines
are
defined by the keyword sub, followed by the
name
of the subroutine, followed by a block enclosed by curly braces
containing the body of the subroutine. The following is a simple
example.

sub a_subroutine {
print "I'm in a subroutine\n";
}

In general, you can call subroutines using the name of the subroutine
followed by a parenthesized list of
arguments:

a_subroutine();

Arguments can be passed into subroutines as a list of scalars. If any
arrays are given as arguments, their elements are interpolated into
the list of scalars. The subroutine receives all scalar values as a
list in the special variable @_. This example
illustrates a subroutine definition and the calling of the subroutine
with some arguments:

sub concatenate_dna {
my($dna1, $dna2) = @_;
my($concatenation);
$concatenation = "$dna1$dna2";
return $concatenation;
}
print concatenate_dna('AAA', 'CGC');

This prints:

AAACGC

The arguments 'AAA' and 'CGC'
are passed into the subroutine as a list of scalars. The first
statement in the subroutine's block:

 my($dna1, $dna2) = @_;

assigns this list, available in the special variable
@_, to the variables $dna1 and
$dna2.

The variables $dna1 and $dna2
are declared as my variables to keep them local to the
subroutine's block. In general, you declare all
variables as my variables; this can be enforced by
adding the statement use strict; near the
beginning of your program. However, it is possible to use
global
variables that are not declared with my, which can
be used anywhere in a program, including within subroutines.

The statement:

 my($concatenation);

declares another variable for use by the subroutine.

After the statement:

$concatenation = "$dna1$dna2";

performs the work of the subroutine, the subroutine defines its value
with the return statement:

 return $concatenation;

The value returned from a call to a subroutine can be used however
you wish; in this example, it is given as the argument to the
print function.

If any arrays are given as arguments, their
elements are interpolated into the @_ list, as in
the following example:

sub example_sub {
my(@arguments) = @_;
print "@arguments\n";
}
my @array = (`two', `three', `four');
example_sub(`one', @array, `five');

This prints:

one two three four five

Note that the following attempt to mix arrays and scalars in the
arguments to a subroutine won't work:

# This won't work!!
sub bad_sub {
my(@array, $scalar) = @_;
print $scalar;
}
my @arr = ('DNA', 'RNA');
my $string = 'Protein';
bad_sub(@arr, $string);

In this example, the subroutine's variable
@array on the left side in the assignment
statement consumes the entire list on the right side in
@_, namely ('DNA',
'RNA', 'Protein'). The
subroutine's variable $scalar
won't be set, so the subroutine
won't print 'Protein' as
intended. To pass separate arrays and hashes to a subroutine, you
need to use
references.
Here's a brief example:

sub good_sub {
my($arrayref, $hashref) = @_;
print "@$arrayref", "\n";
my @keys = keys %$hashref;
print "@keys", "\n";
}
my @arr = ('DNA', 'RNA');
my %nums = ( 'one' => 1, 'two' => 2);
good_sub(\@arr, \%nums);

This prints:

DNA RNA
one two


/ 156