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(传输结束)字符。