It's always a good practise to check your input parameters inside your subroutine. Even in C/C++ you need to check if a pointer is NULL. This is called defensive programming. A module programmer must always assume that what might go wrong will go wrong. Explicit checking is always necessary to produce robust code.
Perl supports prototype checking (although many people choose not to use it). For example, sub foo($); tells Perl that the subroutine 'foo' only takes a single scalar as parameter. If you pass other data type into the sub, Perl will complain. Combining prototyping and explcit checking, you can make your module more robust.
By the way, ref(@_) is not going to do what you think it will do. You would need to do something along the lines of:
#!/usr/bin/perl -w
use strict;
use Carp;
use Data::Dumper;
sub array_ref
{
my $array_ref = shift;
croak 'Not an array reference' unless ref($array_ref) eq 'ARRAY';
print Dumper($array_ref);
}
my @array = qw/ 1 2 3 4 5 /;
my %hash = qw/ 1 1 2 2 3 3 4 4 5 5 /;
array_ref(\@array);
array_ref(\%hash);
and the output
$VAR1 = [
'1',
'2',
'3',
'4',
'5'
];
Not an array reference at try.pl line 9
main::array_ref('HASH(0x81d4e14)') called at try.pl line 18
Update: crossed out the section on Perl prototype checking
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|