perl - 实现一个简单的 tac 程序

标签 perl

我试图解决 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/

相关文章:

linux - 如何在 Perl 脚本中调用函数(在 shell 脚本中定义)

linux - 在 Perl 模块 Proc::ProccessTable 中,为什么 pctcpu 有时会返回 'inf' 、 'nan' 或大于 100 的值?

perl - Perl 条件语句中 ‘if’ 和 ‘unless’ 的用法

Perl,Moose - 子类不继承父类(super class)的方法

string - Perl中带有双冒号的奇数字符串解析

perl - 使用 Perl 获取 WMI 内存值

regex - 如何使用 Perl 正则表达式在 Screen 中搜索模式?

perl - 如何使用 Web::Scraper 获取数据属性的值?

regex - 如何从终端中的文件运行 perl 正则表达式列表

linux - Perl 编写 excel 以在各种工作表中创建包含包含公式的单元格的图表