【问题标题】:perl foreach array of arraysperl foreach 数组数组
【发布时间】:2015-01-29 00:43:42
【问题描述】:

我有 7 个数组 (@p1 @p2 @p3 @p4 @p5 @p6 @p7),我想向每个数组推送一个值,但我无法让它工作。下面是我正在尝试做的一个示例。

$something="some value";
@arrays=qw/@p1 @p2 @p3 @p4 @p5 @p6 @p7/;

foearch $line (@arrays) {
     push $line, $something;
     }

【问题讨论】:

  • 请务必始终使用use strict; use warnings;

标签: arrays perl foreach push


【解决方案1】:

qw 运算符获取分隔符之间的所有值并返回这些值的字符串列表。所以在你的例子中:

@arrays=qw/@p1 @p2 @p3 @p4 @p5 @p6 @p7/;

实际上将@arrays 设置为:

('@p1', '@p2', '@p3', '@p4', '@p5', '@p6', '@p7')

这只是一个字符串列表。

您想要做的是将@arrays 设置为您的数组集的引用 列表。您可以通过在变量的印记前加上 \ 来获取引用。

所以,改变

@arrays = qw/@p1 @p2 @p3 @p4 @p5 @p6 @p7/;

@arrays = (\@p1, \@p2, \@p3, \@p4, \@p5, \@p6, \@p7);

通过在循环中取消引用每个单独的数组引用(push 在 perl 中自动为您执行),您可以 push 在每个原始数组中添加您需要的内容。

有关数组引用如何工作的详细信息,请参阅perlreftut

【讨论】:

  • 似乎有必要提及for my $i (0..6) { push @{ $matrix[$i] }, $something; }
  • @arrays = \(@p1, @p2, @p3, @p4, @p5, @p6, @p7);
猜你喜欢
  • 2014-10-18
  • 2013-06-01
  • 1970-01-01
  • 2023-03-27
  • 2015-01-19
  • 2011-05-08
  • 1970-01-01
  • 2016-02-25
  • 1970-01-01
相关资源
最近更新 更多