in reply to Re^2: index of the minimum element of the array
in thread index of the minimum element of the array

Also take a look at List::Util for some basic examples.

use List::Util 'reduce'; sub minindex { reduce { $_[$a] < $_[$b] ? $a : $b } 0 .. $#_ }

Update: Less succinct now when fixed:

use List::Util 'reduce'; sub minindex { my @x=@_; reduce { $x[$a] < $x[$b] ? $a : $b } 0..$#_ }

Replies are listed 'Best First'.
Re^4: index of the minimum element of the array
by ikegami (Patriarch) on Jan 17, 2014 at 18:23 UTC
    You're accessing the callback's @_ when you mean to access minindex's

      I'm passing a block to reduce.

        Impossible. There's no such data type. You are passing a sub reference to reduce.
        reduce BLOCK LIST
        is compiled as
        &reduce(sub BLOCK, LIST)
        Ikegami is right, thats not working!

        Better pass the list as a closed over array (here @x)

        DB<109> @a= map { int rand 100 } 1..10 => (96, 10, 99, 9, 43, 8, 20, 85, 42, 26) DB<110> sub minindex { my @x=@_; reduce { $x[$a] < $x[$b] ? $a : $b } 0 .. $#_ } DB<111> print minindex @a 5

        update

        or even better like ikegami now suggested as ref to avoid overhead

        DB<114> @a= map { int rand 100 } 1..10 => (22, 15, 27, 44, 70, 85, +74, 93, 96, 14) DB<115> sub minindex { my $x=\@_; reduce { $x->[$a] < $x->[$b] ? $a : $b } 0 .. $#_ } DB<116> print minindex @a 9

        Cheers Rolf

        ( addicted to the Perl Programming Language)