我正在尝试运行一个使用Tie :: File模块的perl脚本.
它基本上应该做的是读取当前目录中的所有文件,切断第一个文档的最后一行,然后是每个其他文档的第一行和最后一行以及最后一个文档的第一行,然后写下所有内容到一个新文件.
当我试图运行我的脚本时(可能会有一些错误...如果你发现任何人可以纠正它们,我会很高兴)我收到错误消息:
Can't locate object method "TIEARRAY" via package "TIE:File" at script.pl line 28, <$fh> line 7.
Run Code Online (Sandbox Code Playgroud)
我在代码中标记了第28行.
我已经安装了最新版本的Tie :: File并进行了检查
cpan Tie::File
Run Code Online (Sandbox Code Playgroud)
和
cpan Tie::Array
Run Code Online (Sandbox Code Playgroud)
如果一切都已安装,我收到Tie :: Array是最新的(v1.06),Tie :: File是最新的(v1.00)终端,所以必须正确安装.
#!/usr/bin/perl
use Cwd;
use Tie::File;
use Tie::Array;
my $cwd = getcwd();
my $buff = '';
# Get all files in cwd.
#my @files = grep { -f && /\.txt$/ } readdir $cwd;
my @files = grep ( -f ,<*.txt>);
# Cut off footer of first (files[0]) file
print 'Opening' . $files[0] . "\n";
use Tie::File;
tie (@lines, Tie::File, $files[0]) or die "can't update $file: $!";
delete $lines[-1];
# Cut off header and footer of $files [1] to $files[-2]
for ($a = 1, $a < $#files-1, $a++){
print 'Opening' . $file . "\n";
use Tie::FILE;
tie (@lines, TIE::File, $files[$a]) or die "can't update $file: $!"; ####this is line 28
delete $lines[0];
delete $lines[-1];
open (FILE, "<", $files[$a]) or die $!;
while (my $line =<FILE>) {
$buff .= $line;
}
close FILE;
}
print 'Opening' . $files[-1] . "\n";
use Tie::FILE;
tie (@lines, TIE::File, $files[-1]) or die "can't update $file: $!";
delete $lines[0];
open (lastfile, "<", $files[-1]) or die "can't open $files[-1]: $!";
while (my $line =<lastfile>) {
$buff .= $line;
}
close lastfile;
# Write the buffer to a new file.
my $allfilename = $cwd.'/Trace.txt';
print 'Writing all files into new file: ' . $allfilename . "\n";
open $outputfile, ">".$allfilename or die $!;
# Write the buffer into the output file.
print $outputfile $buff;
close $outputfile;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
613 次 |
| 最近记录: |