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