필자는 숫자 열만으로 몇 개의 파일을 평균화하는 Perl 스크립트를 신속하게 작성했습니다. 그것은 파일 핸들들의 배열로부터 읽는 것을 포함한다. 다음은 스크립트입니다.배열 요소 인 Perl 파일 핸들에서 어떻게 읽을 수 있습니까?
#!/usr/local/bin/perl
use strict;
use warnings;
use Symbol;
die "Usage: $0 file1 [file2 ...]\n" unless scalar(@ARGV);
my @fhs;
foreach(@ARGV){
my $fh = gensym;
open $fh, $_ or die "Unable to open \"$_\"";
push(@fhs, $fh);
}
while (scalar(@fhs)){
my ($result, $n, $a, $i) = (0,0,0,0);
while ($i <= $#fhs){
if ($a = <$fhs[$i]>){
$result += $a;
$n++;
$i++;
}
else{
$fhs[$i]->close;
splice(@fhs,$i,1);
}
}
if ($n){ print $result/$n . "\n"; }
}
이것은 작동하지 않습니다. 내가 스크립트를 디버깅 할 경우 내가 @fhs를 초기화 후에는 다음과 같습니다
DB<1> x @fhs
0 GLOB(0x10443d80)
-> *Symbol::GEN0
FileHandle({*Symbol::GEN0}) => fileno(6)
1 GLOB(0x10443e60)
-> *Symbol::GEN1
FileHandle({*Symbol::GEN1}) => fileno(7)
를 지금까지 너무 좋아. 그러나 내가 파일에서 읽으려고하는 부분에서 실패
DB<3> x $fhs[$i]
0 GLOB(0x10443d80)
-> *Symbol::GEN0
FileHandle({*Symbol::GEN0}) => fileno(6)
DB<4> x $a
0 'GLOB(0x10443d80)'
$ A는 글로브에서 읽은 문자열이 아닌 무언가로 가득 차 있습니다. 나는 무엇을 잘못 했는가?
나는 당신에게 1000PP를 사용하여 멈추어 줄 것을 권할 것입니다. –