> > 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>