0

配列の最初の値が空白である理由を突き止めようとして、非常に多くの方法でコードを基本的な部分に落とし込みました。ディレクトリとファイルの配列があります。名前に特定の文字列 (「conf」など) が含まれるディレクトリまたはファイルである場合、私は興味がありません。それ以外の場合は、画面に書き込み、配列オブジェクトにプッシュします。

次に、配列をループして、各エントリを画面に書き込みます。それが私がやろうとしているすべてです。最初の部分で画面に表示された内容を見ると、期待どおりの情報が表示されています。配列内のエントリを出力すると、出力には常に空の文字列が含まれるか、配列の最初のインデックスに何も含まれません。

これが私のコードです:

sub scrubFiles { # Parse through interesting directories for interestingly named files
    my $wanted = sub {
            if (-d $_) {
                    print "Directory and will not be inserted into the files array: $_\n"
                    return;
            };
            if ($_ =~ /\.(?:yaml|bak|conf|cfg)\z/i) {
                    print "Not desirable and will not be inserted into the files array: $_\n";
                    return;
            };
            print ("Adding $_ to \@filelist\n");
            push @filelist, $File::Find::name;
    };
    find( {wanted => $wanted, no_chdir=>1}, @_ );  # WILL NOT work properly without no_chdir
    return @filelist;
}

&scrubFiles("/tmp/mydirectory/");
for (@filelist) { print "File name: $_|END\n"; }

配列にプッシュすると、次の出力が得られます。「<...>」は、無関係なので削除したばかりの出力です。「追加」セクションには、まさに私が期待するものが含まれています。画面に表示される最初の「Adding」の前には何もありません。「ファイル名」部分に到達すると、次のように、画面に出力された配列の最初のエントリが空白であることを除いて、期待どおりです。

Adding /tmp/mydirectory/ifconfig.txt to @filelist
Adding /tmp/mydirectory/history_comp.txt to @filelist
Adding /tmp/mydirectory/myctl.txt to @filelist
Adding /tmp/mydirectory/ls-l.txt to @filelist
<...>
Adding /tmp/mydirectory/opt/comp/VERSION to @filelist
File name: |END
File name: /tmp/mydirectory/ifconfig.txt|END
File name: /tmp/mydirectory/history_comp.txt|END
File name: /tmp/mydirectory/myctl.txt|END
File name: /tmp/mydirectory/ls-l.txt|END
<...>
File name: /tmp/mydirectory/opt/comp/VERSION|END

「ref()」を使用して、実際に位置 0 にあるものを把握しようとしましたが、配列内の各エントリに対して何も返しません。

この空白のエントリを取得する方法はありますか?

4

1 に答える 1

1

以前のコードには、適切にスコープされた変数がありました。あなたはそれを破った。グローバル変数の使用に戻ると、何が起こっているのかを知るために、プログラムのすべての行を確認する必要があります。それはばかげているでしょう。

与えられたコードに戻って、導入した 2 つのバグを元に戻すことから始めます。サブで宣言@filelistし、サブから返されたリストを実際に使用します。

于 2013-01-11T20:50:12.567 に答える