>out.txt"); while (<>){ #ope-6ren">
gpt4 book ai didi

perl - 在 Perl 中,如何通过菱形运算符对命令行上指定的所有文件进行两次传递?

转载 作者:行者123 更新时间:2023-12-01 06:44:18 25 4
gpt4 key购买 nike

如果我有一个文本文件并且我想运行两种类型的操作,但每个操作必须分别读取文本的每一行。我知道该怎么做的唯一方法是

open out,(">>out.txt");
while (<>){
#operation one
}
while (<>){
#operation two
}
close out;

但这只会在第一个 while 上运行,其中操作运行良好,但第二个不会完成,因为第二个 while(<>)实际上并没有重新读取文件,而是尝试从第一个 while 离开的地方继续。这是在文件的末尾。那么还有其他方法吗?或者有没有办法告诉第二个从头开始重新开始?

最佳答案

鉴于您在评论中提到:

 perl example.pl text.txt 

答案是 - 不要使用 <>而是打开一个文件句柄。

my ( $filename ) = @ARVG;

open ( my $input, "<", $filename ) or die $!;

while ( <$input> ) {
print;
}

seek ( $input, 0, 0 );

while ( <$input> ) {
#something else
}

或者,您可以 - 假设 test.txt不是特别大 - 只需将整个内容读入数组即可。

my @input_lines = <$input>;
foreach ( @input_lines ) {
#something
}

如果你想在命令行中指定多个文件,你可以将整个文件包裹在 foreach 中。循环:

foreach my $filename ( @ARVG ) { 
## open; while; seek; while etc.
}

关于perl - 在 Perl 中,如何通过菱形运算符对命令行上指定的所有文件进行两次传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30085726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com