Perl 初心者コーナー Part23

このエントリーをはてなブックマークに追加
952nobodyさん:03/06/07 01:45 ID:???
>>951
require './data/data_1.cgi';
require './data/data_2.cgi';
>>951の質問はこれにて終了しました。
↓次の方どうぞ
953936:03/06/07 02:27 ID:???
何度もすいませんが
ファイルの内容を
while( <FILE> ){print;}でテキストエリアに渡した場合は、Windows改行になるのでしょうか?
954nobodyさん:03/06/07 02:34 ID:???
処理系依存かな
955936:03/06/07 02:36 ID:???
>>954
処理系依存、といいますと、クライアントのOSに影響するということですか?
956nobodyさん:03/06/07 02:50 ID:???
>>955
そのスクリプトが実行されるOS。
どうような違いがあるかは、>>943を参照
957936:03/06/07 02:54 ID:???
>>956
そうですか。。。
Linuxの鯖なのに
if($r_code eq "lf"){$body =~ s/\x0D\x0A$/\x0A/;}
elsif($r_code eq "cr"){$body =~ s/\x0D\x0A$/\x0D/;}
で変換できているので、CR+LFで出力されていることになりますが、、、
UNIXはLFだと思ったんだけど、意外だ・・・・
958nobodyさん:03/06/07 06:18 ID:???
>>953
そのファイルがどの環境で作られたのかによるんじゃない?
Windows環境で書いたファイルであれば、どこに持っていこうがCRLFのまま。
これをUNIX系環境で1行読み込んだ場合、LFの前のCRは「文字列の一部」として
そのまま読み込まれるだけだと思うんだが。

なんか、読み込んだ時点で自動的に変換されるとか、1行書き込むとUNIX環境では
自動的にLF改行になるとか、そんな感じに勘違いしてない?

それと、あなたの実行環境ってローカルで動かしてるサーバーだよね?
間違ってもレンタルサーバーとかプロバイダスペースじゃないよね?
なんか会話が噛みあってないから。
959nobodyさん:03/06/07 11:48 ID:???
置換処理で困っています。

掲示板で(^-^)などの顔文字があればそれを画像にすりかえるために
IMGタグに置換しようとしていますが、あらかじめ配列に顔文字のリストを
入れて置換してもうまくいきません。

顔文字のリストは
@list = (
"(^-^)", "kao1.gif",
"(T-T)", "kao2.gif",
);

という感じで、実際に置換している部分は

for($i = 0; $i < @list + 0; $i+=2){
    $msg =~ s/($list[$i])/<IMG src=\"$list[$i+1]\" 〜略〜 alt=\"$list[$i]\">/g;
}

としています。まったく置換してくれません。
試しに顔文字のリストの顔の部分をOKなどにしてみると置換されました。
特殊な文字だから置換がうまくいかないのでしょうか?
どうすれば解決できるか教えてください、お願いします。
960936:03/06/07 12:00 ID:???
>>958
>なんか、読み込んだ時点で自動的に変換されるとか、1行書き込むとUNIX環境では
>自動的にLF改行になるとか、そんな感じに勘違いしてない?
へ?ぜんぜん思ってませんよ。。。
961936:03/06/07 12:05 ID:???
>>958

えと、つまり
Windows環境で、テキストエリアに入力した文字をcgiに送って
$body =~ s/\x0D\x0A$/\x0A/;
こうしても、LFにならないってことでしょうか?
962nobodyさん:03/06/07 12:36 ID:???
>>959
顔文字が正規表現のメタ文字として解釈されているんでない?
顔文字のメタ文字を\でエスケープするか、もし面倒ならquotemetaであらかじめ
変換しておくとか。(\Q \Eって使えたかな…どなたか助言求む)
できればソースを書きたいんだけど、いま手元に実行環境がないんで勘弁して。
963nobodyさん:03/06/07 12:51 ID:???
>>961
いい加減うぜぇ。2ちゃんは学校じゃねぇ。
質問等はまとめて話せ。少しは自分で調べて話せ。
>こうしても、LFにならないってことでしょうか?
やってみろバカ。プログラムに実験はつきものだ。
964936:03/06/07 13:05 ID:???
>>963
やってみました。
if($file =~ /(.*)\x0D\x0A$/){$code = "CR+LF (Win)";}
elsif($file =~ /(.*)\x0A$/){$code = "LF (UNIX)";}
elsif($file =~ /(.*)\x0D$/){$code = "CR (Mac)";}
こいつで正確に改行コードがえられるのかだけ教えてくれませんか?
965nobodyさん:03/06/07 13:10 ID:???
>>964
それは何も変わらないだろ?チェックしてるだけだ。
もう質問は止めてPerlの超初心者本を読むことをお勧めする。
966nobodyさん:03/06/07 13:12 ID:???
(´-`).。oO(やってみればぁ、、、)
967959:03/06/07 13:45 ID:???
>>962
メタ文字を\でエスケープしたりquotemetaもやってみましたがだめでした。
なんでかなぁ・・・。
968nobodyさん:03/06/07 14:02 ID:mCmiN6Nz
>>965
ぃゃ、チェックできるのかを質問してるのに
チェックしかできないって怒られても……
969965:03/06/07 14:03 ID:???
>>964
すまん。
>改行コードがえられるのかだけ

>改行コードかえられるのかだけ
に見えてた。

末尾の改行に関してはそれでいける。
でも>>966の言うようにやってみれば分かるだろ。
CR+LF,LF,CRなファイルを用意してやってみればいいんだから。
970nobodyさん:03/06/07 14:21 ID:mCmiN6Nz
>>969
if($r_code eq ゙lf゙){$body =~ s/\x0D\x0A/\x0A/g}
elsif($r_code eq ゙cr゙){$body =~ s/\x0D\x0A/\x0D/g}
でLF改行とCR+LF改行での新規作成はできるんですがCRだけうまくいかないんですよね。それにチェックするスクリプトも一行目の改行コードを調べているので不安なんですが、一つのファイルに改行コードが複数あるってことはないんでしょうか?
それと昨日もらったレスでは/sがいらないみたいなこと言ってましたが一行目だけをLFにするとのこりもLFになるんでしょうか?
971_:03/06/07 14:21 ID:???
972970:03/06/07 14:27 ID:mCmiN6Nz
追記
さっきの/sは/gの間違いでした。
で、/gなんですけど、試したところ複数行の文字は/gがないとコードが変わりませんでした。
たぶん/gを省いてくれた人はチェック時のことをいってくれてたんですね。
973名無し募集中。。。:03/06/07 14:53 ID:???
chmod(0666,"$logfile");
和鳥でこれが使えないのでデリったら書き込みができなくなった
なんか方法はありまつか?
974nobodyさん:03/06/07 15:11 ID:???
>>963
お前頼むからスレタイよく読んでから書き込んでくれ。
http://up.2chan.net/d/src/1054780479575.jpg
975nobodyさん:03/06/07 15:40 ID:???
>>970
>if($r_code eq ゙lf゙){$body =~ s/\x0D\x0A/\x0A/g}
>elsif($r_code eq ゙cr゙){$body =~ s/\x0D\x0A/\x0D/g}
>でLF改行とCR+LF改行での新規作成はできるんですがCRだけうまくいかないんですよね。
意味が分かりません。
>チェックするスクリプトも一行目の改行コードを調べているので
意味が分かりません。
>一つのファイルに改行コードが複数あるってことはないんでしょうか?
モノによる。普通は有り得ないが作れないことも無い。
>それと昨日もらったレスでは/s(=>/g)がいらないみたいなこと言ってましたが一行目だけをLFにするとのこりもLFになるんでしょうか?
意味が分かりません。
正規表現の$の意味は?
976nobodyさん:03/06/07 17:37 ID:???
改行コードが何物かをもうちょっと勉強してみればわかると思うよ。
UNIXでCRがどういう意味を持ってるかってこと。
977936:03/06/07 17:37 ID:???
>>975
>>if($r_code eq ゙lf゙){$body =~ s/\x0D\x0A/\x0A/g}
>>elsif($r_code eq ゙cr゙){$body =~ s/\x0D\x0A/\x0D/g}
>>でLF改行とCR+LF改行での新規作成はできるんですがCRだけうまくいかないんですよね。
>意味が分かりません。
フォームに入力した文字を、ラジオボタンに押されたものによって、
上のif文で改行コード変更するスクリプトなんです。
LFとCR+LF形式には変換できたのですが、
CR形式に変換できないんです。

>チェックするスクリプトも一行目の改行コードを調べているので
意味が分かりません。
改行コードをチェックするスクリプトです。

# 改行コードの取得
open(FILE, "$name");
$file = <FILE>;
close(FILE);

if($file =~ /(.*)\x0D\x0A$/ && $bin !=~ /40/){$code = "CR+LF (Win)";}
elsif($file =~ /(.*)\x0A$/ && $bin !=~ /40/){$code = "LF (UNIX)";}
elsif($file =~ /(.*)\x0D$/ && $bin !=~ /40/){$code = "CR (Mac)";}
else{$code = "";}
このように先頭行だけをとって調べています。

>>それと昨日もらったレスでは/s(=>/g)がいらないみたいなこと言ってましたが一行目だけをLFにするとのこりもLFになるんでしょうか?
>意味が分かりません。
>>933で、下で/gがなくなっているので・・・
978936:03/06/07 17:38 ID:???
&& $bin !=~ /40/
これは無視しちゃってください。
ファイル一覧取得するスクリプトの一部分で、
こいつで、ディレクトリ以外の改行コードの取得ってことです。。
すいません。
979936:03/06/07 17:42 ID:???
本当にもうしわけありません。
CR改行の件ですが、ローカルではできたのにレン鯖ではできなかったんです。
で、ただたんにスクリプトを更新していなかっただけでした。すいません。
980nobodyさん:03/06/07 17:59 ID:???
(´-`).。oO(こんなけ引っ掻き回しておいてそういうオチに持ってくるのかぁ、、、勉強になるなぁ。)
981936:03/06/07 18:17 ID:???
>>980
やっぱりできませんでした。
CRの場合、最後の行を改行しないと認識してくれませんねぇ。。。
982nobodyさん:03/06/07 19:13 ID:???
>>967
どうやってできなかったのかな?うちでは両方できたけど。
%list = (
    '(^-^)', 'kao1.gif',
    '(T-T)', 'kao2.gif',
);
$msg =~ s/\Q$_\E/$list{$_}/g for(keys %list);
983967:03/06/07 19:58 ID:???
>>982
あぁ・・・書き忘れてました。\Qと\Eのは書き方はわからなかったのです。
たぶんquotemetaの書き方も間違っていたんだと思いますけど。

できました。教えていただいてありがとうございました。
984nobodyさん:03/06/07 20:10 ID:???
ディレクトリが存在するかどうか確認する方法ってありますか?
何層も下の場合でも使えるの・・
985nobodyさん:03/06/07 21:10 ID:???
986nobodyさん:03/06/07 22:00 ID:???
>>985
ファイルテスト演算子ってディレクトリに使ってもいいんですか?
987nobodyさん:03/06/07 22:01 ID:???
988nobodyさん:03/06/07 22:05 ID:???
IPやホスト名を2chのIDみたくしたいです。
誰か教えてください。
989nobodyさん:03/06/07 22:06 ID:???
つまり、>>987は「聞く前に試してみろ」と言いたいのだな.。
990nobodyさん:03/06/07 22:07 ID:???
>>988
crypt
991nobodyさん:03/06/07 22:08 ID:???
>>988
くりんぷと
992nobodyさん:03/06/07 22:13 ID:???
>>989
違う。
>>985がファイルテスト演算子って言いたいだけだったら
わざわざGoogleへのリンクを貼らないだろう。

>>986>>985のリンク先を一つも見てないからもう一度貼ったまで。
http://www.google.co.jp/search?q=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%83%86%E3%82%B9%E3%83%88%E6%BC%94%E7%AE%97%E5%AD%90&ie=UTF-8&oe=UTF-8&hl=ja&lr=lang_ja
の一番上のリンク見るだけで解決する話なのに。まあ>>986は氏ねってこった。
993nobodyさん:03/06/07 22:13 ID:UHTFNtX1
初心者で申し訳ないのですが、Perlモジュールのアンインストールは
どうやればよいのでしょうか。
調べてもこれといったものが見つからなかったため、教えていただき
たい次第です。
994nobodyさん:03/06/07 22:14 ID:???
>>989
・・・あんまり回答になってなかった。
「聞く前に試してみろ」と言いたいのではなく、「聞き返す前に読め」といいたい。
せっかく答え返ってきてるのに、何のために聞き返すのかサパーリ。まあ>>986は氏ねってこった。
995nobodyさん:03/06/07 22:18 ID:???
次スレは?
996nobodyさん:03/06/07 22:19 ID:???
うむ、>>986は氏ねってことには同意だ。
997nobodyさん:03/06/07 22:20 ID:???
>>993
スレ違い
998nobodyさん:03/06/07 22:21 ID:???
そろそろ新スレ立てたほうが良いのでは?
999nobodyさん:03/06/07 22:22 ID:???
Perlは死滅。次スレは要りません。
1000nobodyさん:03/06/07 22:22 ID:???
C1000タケダ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。