PERL程序模仿猫实用程序

时间:2014-09-07 04:46:58

标签: perl

在下面提到的程序中,有人可以解释while循环中使用的表达式

use strict;
use warnings;

sub print_file {
    my $file = shift;
    open FILE, $file;
    while ( my $line = <FILE> ) {
        print $line;
    }
}

sub cat {
    while ( my $file = shift ) {
        print_file $file;
    }
}

cat @ARGV;

1 个答案:

答案 0 :(得分:5)

不清楚while循环让你感到困惑。

my $file = shift@_中移除第一个剩余元素(其中包含传递给子cat的参数)并将其分配给$ file。如果这是假的,那么while循环退出(当@_中没有更多元素或者你有一个名为0的文件或脚本的空参数时,它会退出。)

my $line = <FILE>使用readline运算符(有时候<>是readline,有时它是glob,取决于括号中的内容)从给定的文件句柄读取一行并将其分配给$ line。作为一种特殊情况,使用这种形式的while测试会添加一个隐式定义的测试,所以它被视为你说while ( defined( my $line = <FILE> ) ),所以while循环只在undef上终止(表示文件中没有更多的行或者一些其他IO错误),而不是恰好是错误的行(例如文件末尾的0,后面没有换行符。)

请注意,此脚本在模拟cat方面表现不佳;如上所述,如果文件名为0,它将失败,但是对于名称中带有前导或尾随空格的文件或其他几种情况(例如以'&lt;'或'&gt;开头的名称)也会出现问题;')