プロが教えるわが家の防犯対策術!

指定したファイルがフォルダ内にあるかどうかを調べるために以下のようにしました。
#フォルダ内の確認

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です。

A 回答 (3件)

 文字列は '' (シングルクォート)ではなく、"" (ダブルクォート)でかこってみてください。



 シングルクォートでは変数展開されないため、'$F' は、変数の中身ではなく、「$F という文字列」になってしまいます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
無事できました。

基本中の基本でしたね(^^;

お礼日時:2003/03/13 15:41

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」等には展開されません。
間違っている部分の動きを確認した上で、 ' を " に修正してください。

この回答への補足

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

補足日時:2003/03/13 15:42
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
無事できました。

基本中の基本でしたね(^^;

お礼日時:2003/03/13 15:41

Perlの仕様でシングルクォーテーション(')で囲んだ文字列内では変数が評価されません。


つまり、変数の中身が展開されない為、
'$i.jpg'などはそのまま$i.jpgという文字列と認識されます。
ダブルクォーテーション(")で囲めば変数が展開されます。

http://village.infoweb.ne.jp/~fwnw6734/perl/perl …
http://www.hahaha.jp/check/perl_02.htm
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
無事できました。

基本中の基本でしたね(^^;

お礼日時:2003/03/13 15:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!