sub _index_of_largest { my $X = shift; my $L = shift; my $x = $#_; my $l = pop; defined $X and $L > $l and ($x,$l) = ($X,$L); @_ or return $x; unshift @_, $x, $l; goto &_index_of_largest } sub index_of_largest { @_ or die; _index_of_largest(undef,undef,@_); } my $i = index_of_largest( @a );