CGI-BBS > CGI > Perl > Perlについて./img/ABC.jpgを../img/ABC.jpg に置換したい。


カレッヂ
カレッヂ


質問者 Ensoku  投稿日 12/11(水) 16:28:38
はじめまして。PerlにてCGIを作り出して約2ヶ月の新参者です。

早速ですが
あるCGIが参照する設定ファイルがあり、そこに'./img/ABC.jpg'と書かれています。
このファイルを1つ下層のディレクトリに設置するCGIから取り込み、出力する際に

'./img/ABC.jpg' を '../img/ABC.jpg' に置換したいのですが、うまくいきません。

ex)
$ImgValue = './img/ABC.jpg'; 
$ORG_DIR  = './img';      # イメージD
$NEW_DIR   = '../img';    # イメージD

$ImgValue =~ s/$ORG_DIR/$NEW_DIR/;

とすると、
$ImgValue は
  '....................................................../img/ABC.jpg'
こんな感じになります。
$ImgValueを'../img/ABC.jpg'にするには、どうしたらいいのでしょうか?

よろしく、ご教授ください。

プロバイダ参照:
サーバのOS:UNIXサーバ
パソコンのOS:WinNT系
エディタ:
FTPソフト:
サーバ移転:していない
改造:(未選択)
CGI習熟度:middle

回答者 yam  [削除]  投稿日 12/11(水) 18:09:02
$ImgValue =~ s/$ORG_DIR/$NEW_DIR/;
がループの中に入っていませんか?
「./img」は「../img」に含まれますから、繰り返されただけ「.」が増えます。

今回の件とは直接関係ありませんが、このままでは「.」などは正規表現として認識されていますので、
メタ文字の無効化をしておきましょう。
$ORG_DIR  = quotemeta('./img');      # イメージD
質問者 Ensoku  [削除]  投稿日 12/12(木) 15:27:23
ループ内にいました。(汗;

というか、ループ内での制御が間違ってたらしく、毎回変換する作りになっていました。

ご指摘ありがとうございました。

このページは終了したので返信(回答)は書きこめません

Web裏技