gpt4 book ai didi

perl - 使用@_和Perl同时读取一个数组和多个标量

转载 作者:行者123 更新时间:2023-12-02 08:33:25 24 4
gpt4 key购买 nike

我正在尝试将一些参数传递给子例程

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

调用

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

我在数组元素中收到错误的未初始化值。我假设它是因为我尝试读取值的方式。这是正确的方法吗?

最佳答案

您的数组赋值占用了所有参数。

例如,在下面,$foo$bar 将始终未定义,而 @array 将包含 4 个元素:

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

这里有两个可能的解决方案:

1) 先放标量,再放数组:

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

# Calling method:
mean($subchannel[0], $subchannel[1], $subchannel[2], $subchannel[3], @datachunk)

2) 或者,您可以通过引用传递数组:

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

# Calling method:
mean(\@datachunk, $subchannel[0], $subchannel[1], $subchannel[2], $subchannel[3])

但是,最严格的解决方案是重新设计您的代码。您想要的只是列表的平均值。因此,直接传递一个列表而不是带有索引值的数组。

sub mean  {
return @_ ? sum(@_) / @_ : die "Mean of 0 numbers is undefined";
}

# Calling method:
mean(@datachunk[@subchannel[0..3]])

关于perl - 使用@_和Perl同时读取一个数组和多个标量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24438877/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com