2

ある範囲の数値をループし、グロブパターンを構築し、グロブに基づいてディレクトリにファイルが存在するかどうかをテストするスクリプトを作成しています。

画像はナスカーの車番号画像であり、次のパターンに従います。

1_EARNHARDTGANASSI_256.TGA
2_PENSKERACING_256.TGA

これが私が使用しているスクリプトの抜粋です:

foreach $currCarNum (0..101) {  
    if (glob("//headshot01/CARS/${currCarNum}_*_256.TGA")) {    
        print("Car image $currCarNum exists\n");
    } else {
        print("Car image $currCarNum doesn't exist\n");
    }   
}

私が抱えている問題は、ディレクトリに存在し、ファイルのグロブパターンと一致するはずの画像が一致しないことです。

たとえば、次の名前のファイルは存在しないものとして返されます。

2_PENSKERACING_256.TGA

一方、以下は既存のものとして返されます。

1_EARNHARDTGANASSI_256.TGA

DOSまたはCygwinで同じファイルグロブパターンを使用すると、両方のファイルが正しくリストされます。

ファイルグロブパターンはPerlで異なって解釈されますか?足りないものはありますか?

4

2 に答える 2

2

結果をスカラー形式ではなくリスト形式で返す必要があります。あなたのifステートメントのためにこれを試してください、私がそれをテストしたとき、それは私のために働きました。

if (my @arr = glob("//headshot01/CARS/${currCarNum}_*_256.TGA")) {
于 2011-02-23T16:48:08.430 に答える
1

perldocからperlop

(file)globは、新しいリストを開始するときにのみ、その(埋め込み)引数を評価します。最初からやり直す前に、すべての値を読み取る必要があります。リストのコンテキストでは、とにかくすべてを自動的に取得するため、これは重要ではありません。ただし、スカラーコンテキストでは、演算子は呼び出されるたびに次の値を返すか、リストがなくなるとundefを返します。

于 2011-02-24T08:50:49.607 に答える