我有一些文本文件,在目录中,我想解析他们的内容并将其写入文件。到目前为止,我使用的代码是:
#!/usr/bin/perl
#The while loop repeats the execution of a block as long as a certain condition is evaluated true
use strict; # Always!
use warnings; # Always!
my $header = 1; # Flag to tell us to print the header
while (<*.txt>) { # read a line from a file
if ($header) {
# This is the first line, print the name of the file
**print "========= $ARGV ========\n";**
# reset the flag to a false value
$header = undef;
}
# Print out what we just read in
print;
}
continue { # This happens before the next iteration of the loop
# Check if we finished the previous file
$header = 1 if eof;
}
当我运行此脚本时,我只获取文件的标题,以及compiled.txt
条目。
我还在cmd中收到以下消息:use of uninitialized $ARGV in concatenation <.> or string at concat.pl line 12
所以我想我做错了什么,$ARGV
根本就没用过。而不是$header
我应该使用其他东西来检索文本。
需要一些帮助!
答案 0 :(得分:1)
据我所知,你想在第一行之前打印带文件名的标题,并将它们全部连接到一个新标题。然后一个单行就足够完成任务。
它使用变量$.
检查第一行并关闭文件句柄以重置其在不同输入文件之间的值:
perl -pe 'printf qq|=== %s ===\n|, $ARGV if $. == 1; close ARGV if eof' *.txt
我的机器中的一个例子产生:
=== file1.txt ===
one
=== file2.txt ===
one
two
答案 1 :(得分:1)
<*.txt>
也不会从文件中读取一行。它运行
glob '*.txt'
即。 while循环遍历文件名,而不是遍历其内容。使用空<>
迭代所有文件。
BTW,而不是$header = undef
,您可以使用undef $header
。