当我在编写的代码中发生意外输出时,我试图解决施瓦茨的“学习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!