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

Perl 完成STDIN后,如何从中重置数据?,perl,stdin,Perl,Stdin,我有一个程序,它从测试文件(cat文件)的内容管道中获取数据。我通常使用菱形操作符从STDIN逐行获取数据,直到最后一行。问题是,我想为多个子例程重用相同的数据。如何重置STDIN的读数,以便从第一行再次读取数据 sub downloadsrt { print "Printing list of subtitle files in downloadable form..\n"; while (<>) { chomp($_); (my $

我有一个程序,它从测试文件(
cat文件
)的内容管道中获取数据。我通常使用菱形操作符从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;
sub-downloadsrt{
打印“打印可下载格式的字幕文件列表..\n”;
而(){
咀嚼(美元);
(my$fname、my$path、my$suffix)=文件解析($);
$\=$fname;
我的($name,$ext)=$fname=~/(.*)\(.*)/;
#对于srt
my$newfile=$path.$name.“.$ext”;
$newfile=~s/\s/%20/g;
$newfile=~s/\/root/http:\/\/$localip/;
打印$newfile。“\n”;
}
}
亚杜米苏布{
而(){
//别的
}
}
下载srt;
dummysub;
我想使用多个子例程访问STDIN,每个子例程都应该从STDIN的第一行获取数据


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

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

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

简短回答:你不能。然而,对于从STDIN读取的每一行,您可以将内容存储在数组中,或者并行运行您的逻辑。在将数据分配给数组之前,我如何检查
是否包含任何数据?否则,这里的第一个命令将等待数据。
不是一个数据结构,而是一个I/O运算符,因此它不保存任何数据。考虑到您从
cat
命令获取数据,这应该不是问题,因为您总是获得EOT(传输结束)字符。