I like your idea. It's well suited for the example
situation. But...
It doesn't scale.
If you have a long list of fields to test, maybe an
unknown number of fields, it makes sence to stop
checking in the moment you find a mismatch.
This sub (that I use in a project) is both generic
and scales well. It's not as Perlish beautiful as some
examples, but it's quick. As you will see, it's part of
a module.
########################################################
# Return true if all parameters are either defined or
# undefined. Return false if there is a mix.
########################################################
sub defined_all_or_none {
#my $self=shift; # This is a module, remember?
shift;
@_||(return 1);
if(defined($_[0])) {
for(@_) {
unless(defined) {
return 0;
}
}
}
else {
for(@_) {
if(defined) {
return 0;
}
}
}
1;
}
Update:
Seeing it on the screen made me see clearer. :-)
The statement:
my $self=shift; # This is a module, remember?
should be reduced to:
shift;
since $self is redundant. Sorry about that.
f--k the world!!!!
/dev/world has reached maximal mount count, check forced.
Edit Masem 2001-07-13 - Code Tags |