P is for Practical PerlMonks

### Re^3: index of the minimum element of the array

by oiskuu (Hermit)
 on Jan 17, 2014 at 18:13 UTC ( #1070994=note: print w/replies, xml ) Need Help??

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 (Pope) 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)

Create A New User
Node Status?
node history
Node Type: note [id://1070994]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (7)
As of 2018-01-17 03:18 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
How did you see in the new year?

Results (196 votes). Check out past polls.

Notices?