我试图解决 Schwartz 的“学习 Perl”中的一个练习,这时我在编写的代码中偶然发现了意外的输出。我想知道我做错了什么。
Qn:实现一个类似于 unix 实用程序的简单 tac。
我的解决方案:
#!/usr/bin/perl
use strict;
use warnings;
my @array;
while (<>) {
push @array, $_;
}
foreach ($#array..0) {
print $array[$_];
}
实现方法:$ ./tac list
其中列表包含:
$ cat list
An apple
Blue boys
Coy cows
Dreary ducks!
没有输出。
$ ./tac list
$
最佳答案
您的问题是 foreach
循环计数器。你不能就这样倒退。
你可以这样做:
while (@array) {
print pop @array;
}
或者只是:
print pop @array while (@array);
while (@array)
将在标量上下文中计算 @array
,这意味着将测试数组的大小。当大小达到零时,循环将终止。
由于这是 Perl,当然有一百万种方法可以做到这一点。另一个是:
print for reverse @array
...或者您可以使用 unshift
向后读取数组:
#!/usr/bin/perl
use strict;
use warnings;
my @array;
while (<>) {
unshift @array, $_;
}
print for @array;
...或者你甚至可以这样做:
#!/usr/bin/perl
use strict;
use warnings;
print reverse <>;
享受学习 Perl 的乐趣!
关于perl - 实现一个简单的 tac 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23847389/