Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何遍历嵌套数组?_Perl_Arrays_Loops - Fatal编程技术网

Perl 如何遍历嵌套数组?

Perl 如何遍历嵌套数组?,perl,arrays,loops,Perl,Arrays,Loops,我创建了一个数组,如下所示 while (defined ($line = `<STDIN>`)) { chomp ($line); push @stack,($line); } 如何迭代每行中的每个项目 i、 我想打印 15 6 2 8 我知道这有点像 foreach (@{stack}) (@stack){ print "????? } 这就是我被困的地方。#/usr/bin/perl #!/u

我创建了一个数组,如下所示

while (defined ($line = `<STDIN>`))

        {
        chomp ($line);
        push @stack,($line);
        }
如何迭代每行中的每个项目

i、 我想打印

15
6
2
8
我知道这有点像

foreach (@{stack}) (@stack){

    print "?????
}  
这就是我被困的地方。

#/usr/bin/perl
#!/usr/bin/perl

while ($line = <STDIN>) {
    chomp ($line);
    push @stack, $line;
}

# prints each line
foreach $line (@stack) {
    print "$line\n";
}

# splits each line into items using ' ' as separator
# and prints the items
foreach $line (@stack) {
    @items = split / /, $line;

    foreach $item (@items) {
        print $item . "\n";
    }
}
而($line=){ chomp($line); 按@stack$line; } #打印每行 foreach$行(@stack){ 打印“$line\n”; } #使用“”作为分隔符将每行拆分为项目 #并打印项目 foreach$行(@stack){ @项目=拆分/,$行; foreach$items(@items){ 打印$item。“\n”; } }
我使用“for”表示“C”样式的循环,“foreach”表示对列表进行迭代。

请参阅文档。这是Perl数据结构烹饪书,其中有处理数组数组的示例。但从您正在做的事情来看,您似乎不需要数组

对于每行取两个数字并每行输出一个数字的问题,只需将空白变为换行:

 while( <> ) {
     s/\s+/\n/; # turn all whitespace runs into newlines
     print;     # it's ready to print
     }
作为Perl单行程序,这只是:

 % perl -pe 's/\h+/\n/' file.txt
上面的一行将来自
数据
文件句柄的所有内容都写入一个行列表(因为
发生在列表上下文中)。
grep
chomps每行并在chomping后按长度过滤(以避免在数据文件中获得任何尾随的空行——如果没有空行,则可以避免)。
映射
然后沿空格分割每一行,然后为每一行创建一个匿名数组引用。最后,这样的数组引用存储在
@stack
的每个元素中。您可能需要使用
Data::Dumper
查看
@stack
以了解发生了什么

print join("\n", @$_), "\n" for @stack;
现在,我们查看堆栈中的每个条目,依次取消对每个数组的引用,然后用换行符连接每个数组的元素,以便每行打印一个元素

输出:

C:\Temp> h 15 6 2 8 C:\Temp> h 15 6 2 8
#/usr/bin/perl
严格使用;
使用警告;
在“
不明白您想要打印的内容与您现有的内容有何不同。而且,这些回跳看起来不对劲。回跳也一样。删除它们并使用
while(my$line=)
while(my$line=)
自动转换为
while(defined(my$line=))
最后的“for”也需要是“foreach”吗?foreach肯定更容易理解,从perldoc perlsyn:>foreach关键字实际上是“for”关键字的同义词,因此,您可以使用“foreach”表示可读性,也可以使用“for”表示简洁。
foreach
for
的行为相同。许多人喜欢专门使用
for
。我曾经是foreach的忠实粉丝。现在我已经忘记了它的存在。(或者也许我只是为了它的存在…)怎么办?你的代码正是我所做的,只是做了更多的工作。还没有人在任何代码中显示过一个引用。没有必要人为地将两者区分开来。没有必要,但我也是这么做的。这只是语法上的甜点。我用
表示这两个词。C风格的循环将在Perl6中使用
loop
编写,而
foreach
将被重命名为
for
C:\Temp> h 15 6 2 8
my @stack = map { [ split ] } grep { chomp; length } <DATA>;
print join("\n", @$_), "\n" for @stack;
C:\Temp> h 15 6 2 8
my @stack;

while ( my $line = <DATA> ) {
    last unless $line =~ /\S/;
    my @values = split ' ', $line;
    push @stack, \@values;
}

for my $ref ( @stack ) {
    print join("\n", @$ref), "\n";
}
use List::Util qw( sum );

my @stack;

while ( my $line = <DATA> ) {
    last unless $line =~ /\S/;
    my @values = split ' ', $line;
    push @stack, @values;
}

printf "The sum is %d\n", sum @stack;
#!/usr/bin/perl

use strict;
use warnings;
open IN, "< read.txt" or
    die "Can't read in 'read.txt'!";

my $content = join '', <IN>;

while ($content =~ m`(\d+)`g) {
    print "$1\n";
}