如何从文件列表中删除第一行,这是我的代码,
打开我的目录:
use strict;
use warnings;
use utf8;
use Encode;
use Encode::Guess;
use Devel::Peek;
my $new_directory = '/home/lenovo/corpus';
my $directory = '/home/lenovo/corpus';
open( my $FhResultat, '>:encoding(UTF-8)', $FichierResulat );
my $dir = '/home/corpus';
opendir (DIR, $directory) or die $!;
my @tab;
while (my $file = readdir(DIR)) {
next if ($file eq "." or $file eq ".." );
#print "$file\n";
my $filename_read = decode('utf8', $file);
#print $FichierResulat "$file\n";
push @tab, "$filename_read";
}
closedir(DIR);
打开我的文件:
foreach my $val(@tab){
utf8::encode($val);
my $filename = $val;
open(my $in, '<:utf8', $filename) or die "Unable to open '$filename' for read: $!";
重命名文件
my $newfile = "$filename.new";
open(my $out, '>:utf8', $newfile) or die "Unable to open '$newfile' for write: $!";
删除第一行
my @ins = <$in>; # read the contents into an array
chomp @ins;
shift @ins; # remove the first element from the array
print $out @ins;
close($in);
close $out;
我的新文件是空的! 重命名$ newfile,$ filename或die&#34;无法重命名&$ 39; $ newfile&#39;到&#39; $ filename&#39;:$!&#34 ;; }
似乎是真的,但结果是一个空文件。
答案 0 :(得分:2)
这种做法的公认模式如下:
use strict;
use warnings;
my $old_file = '/path/to/old/file.txt';
my $new_file = '/path/to/new/file.txt';
open(my $old, '<', $old_file) or die $!;
open(my $new, '>', $new_file) or die $!;
while (<$old>) {
next if $. == 1;
print $new $_;
}
close($old) or die $!;
close($new) or die $!;
rename($old_file, "$old_file.bak") or die $!;
rename($new_file, $old_file) or die $!;
在您的情况下,我们使用$.
(input line number variable)跳过第一行。