我快速記下了一個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)'
$一個充滿了這個字符串,而不是從水珠讀的東西。我做錯了什麼?
我會給你1000個代表停止使用P ... – 2010-01-07 19:24:02