• ベストアンサー

指定したファイルがあるかどうかの確認

指定したファイルがフォルダ内にあるかどうかを調べるために以下のようにしました。 #フォルダ内の確認 opendir (FOLDER,"img"); @FOLDERS = readdir (FOLDER); closedir(FOLDER); my ($cnt) = 0; foreach(@FOLDERS) { if ($_ =~ /.+\..+/) { $cnt++; } } #指定したファイルがあるかどうかの確認 for($i=1;$i<3;$i++){ for($n=2;$n<$cnt;$n++){ $F = $FOLDERS[$n]; if('$i.jpg' eq '$F'){ print "<TD CLASS=TD1><IMG SRC='img/$i.jpg' HEIGHT=65 WIDTH=50></TD>\n"; print "<FONT COLOR=RED>★</FONT><BR>\n"; #$i=$i+1; } elsif('$i.jpg' ne '$F'){ print "$i.jpg $F<BR>\n"; }#if } #for $n } #for $i ですがすべて「違う」となってしまいます。 どこがダメなのでしょうか? ※perlです。

質問者が選んだベストアンサー

  • ベストアンサー
noname#25358
noname#25358
回答No.1

 文字列は '' (シングルクォート)ではなく、"" (ダブルクォート)でかこってみてください。  シングルクォートでは変数展開されないため、'$F' は、変数の中身ではなく、「$F という文字列」になってしまいます。

KODAMAR
質問者

お礼

回答ありがとうございます。 無事できました。 基本中の基本でしたね(^^;

その他の回答 (2)

  • HUTABA
  • ベストアンサー率27% (436/1611)
回答No.3

KODAMARさんこんにちは。 >if('$i.jpg' eq '$F'){ >} elsif('$i.jpg' ne '$F'){ この部分間違えていますよ。 >print "$i.jpg $F<BR>\n"; と大きく違う部分があるのがお分かりでしょうか? " と ' です。 if文の中では ' を使用しているのに、print()では " を使用しているから、何がおかしいのか解らなくなっているのでしょう。 >print "$i.jpg $F<BR>\n"; の部分を print '$i.jpg $F<BR>\n'; に変えてみるとよく解ると思います。 ' は、中にかかれたもの全てを文字と解釈します。 $i とか $F と書いても、それは「$i」「$F」という”文字列”があるのだと解釈され、決して「1.jpg」等には展開されません。 間違っている部分の動きを確認した上で、 ' を " に修正してください。

KODAMAR
質問者

お礼

回答ありがとうございます。 無事できました。 基本中の基本でしたね(^^;

KODAMAR
質問者

補足

みなさんにポイントを差し上げたいところなのですが、2人までですので先着順にポイントをつけさせていただきます。 ありがとうございました。

  • wolfwood
  • ベストアンサー率50% (199/398)
回答No.2

Perlの仕様でシングルクォーテーション(')で囲んだ文字列内では変数が評価されません。 つまり、変数の中身が展開されない為、 '$i.jpg'などはそのまま$i.jpgという文字列と認識されます。 ダブルクォーテーション(")で囲めば変数が展開されます。 http://village.infoweb.ne.jp/~fwnw6734/perl/perl1-2.html http://www.hahaha.jp/check/perl_02.htm

KODAMAR
質問者

お礼

回答ありがとうございます。 無事できました。 基本中の基本でしたね(^^;

関連するQ&A