我正在尝试编写一个程序,它将所有文件从某个顶点递归地读取到一个数组中,然后从一个单独的文件中读取文件名行,尝试打印这些文件名是否存在于较早的数组中。
我的程序翻阅了目录结构中的 43K 文件,随后通过了文件中 400 行中的大约 300 行,然后为我提供了一个壮观的“ * glibc 检测到”perl:损坏的双链表:0x0000000000a30740 * *"
我对此一无所知..这可能是“内存不足”类型的错误吗?我无法想象它不是因为主机有24G内存。
你知道我哪里错了吗?我试图通过一次将子目录中的整个文件列表读取到一个数组中来节省时间和精力,然后使用给定为 ARGV[0] 的文件名中的较短文件列表与之匹配。
这是我的代码:
#!/usr/bin/perl
use warnings;
use strict;
use diagnostics;
use File::Find;
use 5.010001;
## debug subroutine
my $is_debug = $ENV{DEBUG} // 0;
sub debug { print "DEBUG: $_[0]\n" if $is_debug };
## exit unless properly called with ARGV
die "Please provide a valid filename: $!" unless $ARGV[0] && (-e $ARGV[0]);
my @pic_files;
my $pic_directory="/files/multimedia/pictures";
find( sub {
push @pic_files, $File::Find::name
if -f && ! -d ;
}, $pic_directory);
open LIST, '<', $ARGV[0] or die "Could not open $ARGV[0]: $!";
while(<LIST>) {
chomp;
debug "\$_ is ->$_<-";
if ( @pic_files ~~ /.*$_/i ) {
print "found: $_\n";
} else {
print "missing: $_\n";
}
}
close LIST or die "Could not close $ARGV[0]: $!";
这是该文件的示例:
DSC02338.JPG
DSC02339.JPG
DSC02340.JPG
DSC02341.JPG
DSC02342.JPG
DSC02343.JPG
DSC02344.JPG
DSC02345.JPG
DSC02346.JPG
DSC02347.JPG
和强制性错误:
missing: DSC02654.JPG
DEBUG: is ->DSC02655.JPG<-
missing: DSC02655.JPG
DEBUG: is ->DSC02656.JPG<-
missing: DSC02656.JPG
*** glibc detected *** perl: corrupted double-linked list: 0x0000000000a30740 ***
======= Backtrace: =========
/lib/libc.so.6(+0x71bd6)[0x7fb6d15dbbd6]
/lib/libc.so.6(+0x7553f)[0x7fb6d15df53f]
提前致谢!