grep() won't do anything bad to @_, but I am personally against doing two operations in a row like you did that are complements.
That being said, I'd rewrite the @_-filtering line as:
my %args;
push @{ $args{ref($_) eq 'HASH' ? 'opt' : 'ext'} }, $_
for @_;
Or, I might even do a moving-splice() trick:
sub import {
my $self = shift;
my ($i,$j,@options);
for (@_) {
if (++$j, ref($_) eq 'HASH') {
push @options, splice(@_, $j + --$i, 1);
$_ = $_[$j+$i], redo if $j + $i < @_;
}
}
# handle @options
# @_ now only holds elements which aren't hash refs
$self->SUPER::import(@_);
}
</code>
japhy --
Perl and Regex Hacker |