>
>            How can I define default arguments in Perl subroutine? Can
> anybody explain with examples?
>

Sure. But as per usual, there is more than one way to do it. This requires a
Perl 5.10 or newer, for say[0] and the defined-or[1] operator; say can be
replaced with a print and a trailing newline, and any defined-or (//) can be
replaced by a ternary, ala $scalar = defined($scalar) ? $scalar : 'default';

#! /usr/bin/perl
> use strict;
> use warnings;
> use 5.010;
>
> sub marine {
>     no warnings 'uninitialized'; #Only to stop warnings in the upcoming
> join; Not for production code! Usually!
>     my ($first, $second) = @_;
>     say "marine called with arguments [", join('][', @_ ), "]";
>     $first      //= q{I'm the first default argument!};
>     $second //= q{I'm the second default argument!};
>
>     say "[$first]";
>     say "[$second]\n";
> }
>
> marine();
> marine('Hello');
> marine('Hello', undef);
> marine(undef, 'Goodbye');
> marine('Hello', 'Goodbye');
>
> That example shoudln't be too hard to follow; We assign the first two
elements of @_ to $first and $second, check if they are defiend, and if they
aren't, assign the defaults.

>
> sub aquatic {
>     no warnings 'uninitialized';
>     say "aquatic called with arguments [", join('][', @_ ), "]";
>     $_[0] //= q{I'm the first default argument!};
>     $_[1] //= q{I'm the second default argument!};
>
>     say "[$_[0]]";
>     say "[$_[1]]\n";
> }
>
> aquatic();
> aquatic('Hello');
> aquatic('Hello', undef);
> aquatic(undef, 'Goodbye');
> aquatic('Hello', 'Goodbye');
>
> This one manipulates @_ [2] directly, but is pretty much the saem as before


> {
> use signatures;
>
> sub idea ($first, $second) {
>     no warnings 'uninitialized';
>     say "idea called with arguments [", join('][', @_ ), "]";
>     $first      //= q{I'm the first default argument!};
>     $second //= q{I'm the second default argument!};
>
>     say "[$first]";
>     say "[$second]\n";
> }
>
> idea();
> idea('Hello');
> idea('Hello', undef);
> idea(undef, 'Goodbye');
> idea('Hello', 'Goodbye');
>
> }
>
This one is the mandatory CPAN solution; It makes use of the signatures[3]
module, which should be a pain to install on Windows.

Brian.

[0] http://perldoc.perl.org/functions/say.html
[1] http://perldoc.perl.org/perlop.html#C-style-Logical-Defined-Or
[2] http://perldoc.perl.org/perlsub.html
[3] 
http://search.cpan.org/~flora/signatures-0.06/lib/signatures.pm<http://search.cpan.org/%7Eflora/signatures-0.06/lib/signatures.pm>

Reply via email to