こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

if 文の使い方について

質問します
************************************************
data.log
($no<>$pt2<>$sp2<>$sub2<>$url2<>$img2)
************************************************
@lines = ($line1);
foreach $line(@lines){
my($no,$pt2,$sp2,$sub2,$url2,$img2) = split(/<>/,$line);
$no =~ s/\0/\,/g;
$comment =~ s/\0/\,/g;
$no || last;
************************************************
if ($img2 eq '') { $img2 = $img2; }
elsif ($img2) { $img2 = <img src="./info/data/$img2" alt="" border="0">; }
************************************************
data.logの$img2が空データの場合空で処理し
イメージデータがある場合<img src="./info/data/$img2" alt="" border="0">を記載したいのですが
文法の基礎がないため行き詰まっております。
説明もうまくできていませんが趣旨ご理解いただける方にご教授お願いしたいと存じます。
よろしくお願いいたします。

投稿日時 - 2009-08-26 22:12:40

QNo.5239373

困ってます

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

if ($name2 eq '') { $name2 = ''; } は、
もし、$name2 が空だったら、$name2 を空にする。 ということですよね。
だったら、書かなくて良いってことになりますね。元々 $name2 は空なんだからわざわざ改めて $name2="" にする必要はないでしょ。
そうすると、
if ($img2) { $img2 = <img src="./info/data/$img2" alt="" border="0">; }
だけで良いことになります。
ですが、これでは構文エラーです。変数に代入したり、printする文字列はクォートしなければなりません。この場合は含まれる変数を展開するわけですからダブルクォートで括ることになります。
で、この場合、
$img2 = "<img src="./info/data/$img2" alt="" border="0">";
ということになります。
ところが、タグの属性値を括るのに " が使われてるからエラーになるわけです。
エラーにならないようにするにはいくつもの方法があります。ご自分で調べたり考えたりしてみてください。

投稿日時 - 2009-08-27 21:07:53

お礼

ご回答ありがとうございました
色々な構文の書き方があると思いますが
やっと何とか自分で解決することができました

if ($img2 ne "") { print "<img src=\"./info/data/$img2\" alt=\"\" border=\"0\"><BR>\n"; }
if ($name2 eq "") { print "";}

投稿日時 - 2009-08-27 22:57:13

ANo.1

************************************************
data.log
($no<>$pt2<>$sp2<>$sub2<>$url2<>$img2)
 ↑ data.logファイルは1レコードがこの形式で格納されているってことかな。
************************************************
@lines = ($line1);
 ↑ これは何だろう。$line1の値全部が $lines[0] に代入されるだけだけど。
   次の行から推測すると、data.log全行を @lines に代入ってことかな。
foreach $line(@lines){
my($no,$pt2,$sp2,$sub2,$url2,$img2) = split(/<>/,$line);
$no =~ s/\0/\,/g; ← , はエスケープしなくて良い。
$comment =~ s/\0/\,/g;
 ↑ $comment この変数は何だ。
$no || last;
************************************************
if ($img2 eq '') { $img2 = $img2; }
 ↑ この if文は意味ないじゃん。
elsif ($img2) { $img2 = <img src="./info/data/$img2" alt="" border="0">; }
************************************************
ということで、この質問を勝手に解釈して、かんたんにコードを書くと、
open(FH,"data.log");
while(<FH>){
 chomp;
 my($no,$pt2,$sp2,$sub2,$url2,$img2) = split(/<>/);
 $no =~ s/\0/,/g;
 $comment =~ s/\0/,/g;
 $no || last;
 if ($img2) { $img2 = qq(<img src="./info/data/$img2" alt="" border="0">) }
}
close FH;

投稿日時 - 2009-08-27 00:25:35

補足

************************************************
if ($name2 eq '') { $name2 = ''; }
print "<img src="./info/data/$img2" alt="" border="0"><BR>\n";
************************************************
if ($name2 eq '') { $name2 = '';
}else{
print "<img src="./info/data/$img2" alt="" border="0"><BR>\n";
************************************************

上記の2例でやってみましたがどちらも表示されません
でした。

どなたかおわかりになられましたらよろしくお願い致します

投稿日時 - 2009-08-27 13:33:04

お礼

ご回答ありがとうございました

************************************************
if ($img2 eq '') { $img2 = $img2; }
elsif ($img2) { $img2 = <img src="./info/data/$img2" alt="" border="0">; }
************************************************
 ↑ これは私が書いたイメージです・・・

  下記のような当てはまる文が分かりやすいとありがたいのですが
  書き換えて試してみましたがだめでした。

 if ($img2) { $img2 = qq(<img src="./info/data/$img2" alt="" border="0">) }

data.logの$img2が空データの場合空('')で処理し
イメージデータ($img2)がある場合<img src="./info/data/$img2" alt="" border="0">を記載したいのですが
文法の基礎がないため行き詰まっております。
説明もうまくできていませんが趣旨ご理解いただける方にご教授お願いしたいと存じます。
よろしくお願いいたします。

投稿日時 - 2009-08-27 09:35:32