sub Return_Middle { my @list = @_; return @list if ( scalar(@list) == 2 or scalar(@list) == 1 ); my @sorted = sort { $a <=> $b || $a cmp $b } @list; my @middle = drill_down(@sorted); return @middle; sub drill_down { my @list = @_; return @list if ( scalar(@list) == 2 ); return @list if ( scalar(@list) == 1 ); splice @list, -1, 1; splice @list, 0, 1; drill_down(@list); } } #### my $SORTED = \&Do_Sort; sub Return_First { return $SORTED->(@_)->[0]; } sub Return_Last { return $SORTED->(@_)->[$#{ $SORTED }]; } sub Return_Middle { return $SORTED->(@_) if @_ < 3; splice @_, -1, 1; splice @_, 0, 1; Return_Middle(@_); } sub Do_Sort { sort { $a <=> $b || $a cmp $b } @_; }