Thursday, 15 September 2011

variables - Reading in an array and multiple scalars at one with @_ with Perl -



variables - Reading in an array and multiple scalars at one with @_ with Perl -

i trying pass arguments sub routine

sub mean { (@values, $chan1, $chan2, $chan3, $chan4) = @_; print $chan1, $chan2, $chan3, $chan4; $ave_value = sum($values[$chan1],$values[$chan2],$values[$chan3],$values[$chan4])/@values; }

with phone call of

force (@avg_value , mean(@datachunk,$subchannel[0],$subchannel[1],$subchannel[2],$subchannel[3]));

i getting error uninitialized value in array element. assuming because of way trying read in values. proper approach?

your array assignment eating parameters.

for example, in following, $foo , $bar undefined, , @array contain 4 elements:

my (@array, $foo, $bar) = (1,2,3,4);

here 2 potential solutions:

1) set scalars first, , array:

sub mean { ($chan1, $chan2, $chan3, $chan4, @values) = @_; print $chan1, $chan2, $chan3, $chan4; $ave_value = sum(@values[$chan1, $chan2, $chan3, $chan4])/@values; } # calling method: mean($subchannel[0], $subchannel[1], $subchannel[2], $subchannel[3], @datachunk)

2) alternatively, can pass array reference:

sub mean { ($arrayref, $chan1, $chan2, $chan3, $chan4) = @_; print $chan1, $chan2, $chan3, $chan4; $ave_value = sum(@{$arrayref}[$chan1, $chan2, $chan3, $chan4]) / @$arrayref; } # calling method: mean(\@datachunk, $subchannel[0], $subchannel[1], $subchannel[2], $subchannel[3])

however, tightest solution restyle code. want average of list. therefore, pass list straight instead of array index values.

sub mean { homecoming @_ ? sum(@_) / @_ : die "mean of 0 numbers undefined"; } # calling method: mean(@datachunk[@subchannel[0..3]])

perl variables subroutine

No comments:

Post a Comment