2

なんらかの理由で、いくつかの大きな順序付けられたファイルの処理を試みることを余儀なくされたので、次の方法でファイルのハッシュを使用して試みを開始しました。

my %fo=();#File operations hash
foreach my $fn("file1","file2","file3","file4"){
        open($fo{$fn}{"if"},"<","$fn") or die ("Error open input file $fn: $!");#Input file
        $fo{$fn}{"v"} = <$fo{$fn}{"if"}>;#read one record
}

したがって、Dumper(\%fo) を出力すると、次のようになります。

$VAR1 = {
      'file1' => {
                   'v' => undef,
                   'if' => \*{'::$__ANONIO__'}
                 },
      'file2' => {
                   'v' => 'GLOB(0x8f5f098)',
                   'if' => \*{'::$__ANONIO__'}
                 },
      'file3' => {
                   'v' => undef,
                   'if' => \*{'::$__ANONIO__'}
                 },
      'file4' => {
                   'v' => 'GLOB(0x8edf1e0)',
                   'if' => \*{'::$__ANONIO__'}
                 }
    };

私の質問は、「ポ​​インター」がハッシュの場合にファイルを正しく読み取るにはどうすればよいですか? ファイルは正しく開かれており、ファイルは空ではありませんが、Dumper の出力に行が見つからず、GLOB (ハッシュ) からどのように/何を解釈すればよいかわかりません。

ありがとう。

4

1 に答える 1

1

<...>readline(...)との両方のショートカットになることができますglob('...')。前者にしたいのですが、この場合は後者です。

あなたが使うことができます

readline( $fo{$fn}{"if"} )

また

<{$fo{$fn}{"if"}}>          # Add curlies around the expression.

また

use IO::Handle qw( );       # Not needed in 5.14+
$fo{$fn}{"if"}->getline()

あなたの問題を解決するために。

于 2012-05-30T21:07:31.437 に答える