完成后如何从STDIN重置数据?

时间:2014-06-17 09:49:14

标签: perl stdin

我从一个测试文件(cat file的内容管道中获取数据时有一个程序。我通常使用菱形运算符从STDIN逐行获取数据,直到最后一行。麻烦的是我想为多个子程序重用相同的数据。如何重置STDIN的读取以便可以从第一行再次读取数据?

sub downloadsrt {
    print "Printing list of subtitle files in downloadable form..\n";
    while (<>) {
        chomp($_);
        (my $fname,my $path, my $suffix) = fileparse($_);
        $_=$fname;
        my ($name, $ext) = $fname =~ /(.*)\.(.*)/;  
        #For srt
        my $newfile=$path.$name.".$ext";
        $newfile =~ s/\s/%20/g; 
        $newfile =~ s/\/root/http:\/\/$localip/;
        print $newfile."\n";
    }
}
sub dummysub {
    while (<>) {
        // Something else
    }
}

downloadsrt;
dummysub;

我想使用多个子程序访问STDIN,每个子程序都应该从STDIN的第一行获取数据。

除非我弄错了,否则这不是词法范围。

1 个答案:

答案 0 :(得分:1)

正如@mpapec所建议的那样,您需要将STDIN中的数据存储到数组中:

my @stdin = <>;
mysub_1(\@stdin);
mysub_2(\@stdin);