Perlコーディング初心者質問スレ Part 49
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
2006/05/31(水) 04:32:28ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0938927
2006/06/25(日) 23:33:09ID:???ブラウザではHTMLとして解釈されていると言うことを忘れているのではないか。
HTMLソースを見るか、
while ( <@new_line> ){ print $_,"<br>\n" }
while ( <@new_line> ){ print FH $_,"\n" }
とすれば同じように表示されると思う。
0939911
2006/06/25(日) 23:35:41ID:???いえ、HTMLソースと書き込まれたファイルを比べて差異が出てるのです。
不思議ですよね?
さきほどから何度も>>935のソースをそのまま貼り付けて実行していますが、
何度やってもファイルの書込みの方だけ
index,127.0.0.1,20060625212623,Mozilla/4.0
(compatible;
MSIE
6.0;
Windows
NT
5.1;
SV1;
.NET
CLR
1.1.4322)
こうなってしまうのです。
0940nobodyさん
2006/06/25(日) 23:41:23ID:???0941927
2006/06/25(日) 23:53:03ID:???ああスマソ、>>934にソース見てもと書いてあったか。
漏れのところじゃファイルに書き出された物と同様に、ブラウザの方のHTMLソースにも改行が入ってるよ。
多分、Perl上の問題じゃなくて間に入ってるウェブサーバかエディタか…ともかく環境の問題だと思う。
# それにしてもperl5.8.1って随分とまた古いものを…
>>940
else ifじゃ無いのはぶら下がりが禁止されてるから。
Cなんかのelse ifは
if (expression)
statement;
else
if (expression)
statement;
と言うのをくっつけて書いてるだけだからな。しかし、elseifにしなかった訳はわからん…
言語によってelifだったりelsifだったりelseifだったり覚えるの大変('A`)
0942911
2006/06/26(月) 00:08:33ID:???周辺環境によるのですか。
エディタはterapadで、apache1.3.31です。
どうやらスッキリ解決という感じにはなりそうもないですね。
ちなみに<>は空白にも反応してしまうという話ですが。
それではよくある
open FH,"hoge.txt";
my @array = <FH>;
close;
や
open FH,"hoge.txt";
while (<FH>){ print $_,"\n" }
close;
の精度はイマイチということでしょうか。
色々なサイトに前者の方法でファイルを読み込んで行ごとに配列に入れられる
という説明があったと思いますが。
実際は半角空白?か何かがあると行ごとにはいかないということですよね。
0943nobodyさん
2006/06/26(月) 00:10:42ID:???配列を <> に入れるとそうなるって話でしょう。
見た事無いよ <@array> なんて使い方は。
0945nobodyさん
NGNG0946911
2006/06/26(月) 00:23:18ID:???index,127.0.0.1,20060625235612,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
index,128.0.0.1,20060625235046,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
上記がaccess.logの中身です。
open FH,"access.log";
open DH,"+>test.log";
flock DH,2;
while (<FH>){ print DH $_;}
close DH;
close FH;
上記をやったらaccess.logの中身は
index,127.0.0.1,20060625235612,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
index,128.0.0.1,20060625235046,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
でした。
0948911
2006/06/26(月) 00:27:26ID:???続き
open FH,"access.log";
my @line = <FH>;
open DH,"+>test.log";
flock DH,2;
while (<@line>){ print DH $_;}
close DH;
close FH;
今度上記をやったらtest.logの中身は
index,127.0.0.1,20060625235612,Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1;.NETCLR1.1.4322)index,128.0.0.1,20060625235046,Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1;.NETCLR1.1.4322)
でした。
open FH,"access.log";
my @line = <FH>;
open DH,"+>test.log";
flock DH,2;
while (<@line>){ print DH $_,"\n";}
close DH;
close FH;
最後に上記をやったらtest.logの中身は
0949nobodyさん
2006/06/26(月) 00:28:23ID:???どういう勉強の仕方したらこう書くようになるんだろう…。
ネットだけでやってきたのかなぁ。
0950911
2006/06/26(月) 00:28:34ID:???(compatible;
MSIE
6.0;
Windows
NT
5.1;
SV1;
.NET
CLR
1.1.4322)
index,128.0.0.1,20060625235046,Mozilla/4.0
(compatible;
MSIE
6.0;
Windows
NT
5.1;
SV1;
.NET
CLR
1.1.4322)
でした。
0951nobodyさん
2006/06/26(月) 00:29:19ID:???普通そこはfor(foreach)じゃないの?
0952nobodyさん
2006/06/26(月) 00:31:01ID:???0953nobodyさん
2006/06/26(月) 00:31:50ID:???0954911
2006/06/26(月) 00:32:25ID:???で、まとめですが。
わかったこと
@array = <FH>とやると格納されるときに行末の改行コードがなくなってる。
<@array>の時点では既に改行はない。
<@array>の中には改行は既にないが、配列の要素を一つづつ出すわけではない。
つまり<@array>なんて使うなということだと思いますが、もしかしたら
$`の区切り文字設定と同じものを見つけると<@array>これが反応する?
少し眠くなってきました。勉強になりました。
0955911
2006/06/26(月) 00:34:20ID:???いえ、どうすればキチント動くかという話ではなくて、何であれであの動きをしたのかということが
気になったので。
ちなみに<@array>の方法はここで数年前にここで教わりました^^;
0956nobodyさん
2006/06/26(月) 00:34:42ID:???んなこたない
0957nobodyさん
2006/06/26(月) 00:37:15ID:???>@array = <FH>とやると格納されるときに行末の改行コードがなくなってる。
間違い。
>>948 での君のコードが間違ってる。
出力する時にまた同じく
> while (<@line>){ print DH $_;}
やってるから、この時点で空白文字(改行)がカットされてるだけ。
0958911
2006/06/26(月) 00:37:44ID:???>>948を見てください。>>954は実際に動作させて得た結果のまとめのつもりです。
>>948をやると改行が全てなくなってtest.logに書かれてるということは
どこかで消されてるはずなのです。
で、それを配列に入れたときだろうと推測しました。
0959nobodyさん
NGNG0960911
2006/06/26(月) 00:40:05ID:???なるほど。そこで消えてたのですか。
一応>>943を受けての一連の実験だったので、あのコードは間違いではないのですが。
しかしみなさん<@array>って本当にありえないんですね。
数年前に教えてもらってからずっと正しいやりかただと思って使ってました。
0961nobodyさん
2006/06/26(月) 00:43:26ID:???0962nobodyさん
2006/06/26(月) 00:44:29ID:???0963nobodyさん
2006/06/26(月) 00:44:52ID:???> 数年前に教えてもらって
((( ;゜д゜)))ガクガクブルブル
911が納得したところで次スレ建てトライしてくる。
0964nobodyさん
2006/06/26(月) 00:51:24ID:???保障されてないと思うんだけど。
少なくともperldocにもラクダ本にも明記されてないね。
0965nobodyさん
2006/06/26(月) 00:52:50ID:???どの板のスレかとその時のキーワード分かるならログから探してくるよ。
0966nobodyさん
2006/06/26(月) 00:58:50ID:???$self->{next}->lead($self);
# テンプレ多いっす(;´Д`A
__END__
次スレ
http://pc8.2ch.net/test/read.cgi/php/1151250398/
0967nobodyさん
NGNG0968nobodyさん
2006/06/26(月) 10:37:50ID:???package >>966;
use AutoLoader qw/AUTOLOAD/;
. . .
0970nobodyさん
2006/06/26(月) 15:17:06ID:kXeMxgQF↑をHTMLに埋め込んでHTMLからhoge.cgiの呼び出しをしたいのですが、
hoge.cgi側でどこのページから呼ばれたのかを
<img src="hoge.cgi?p=index">
のようにGET形式を使わずに知ることはできますか?HTML側には
<img src="hoge.cgi">
とだけ記述で。
今初めてchatを作ってるんですが、管理者モードと一般モードとわけて機能や表示内容を変えたいのです。
それでサイト管理cgiが既に用意してあるのですが、その管理CGIから呼ばれたら管理者モード
ってことでできたらいいなと思ってるのです。
管理CGIの方はセキュリティ一応ある程度になってますので、管理CGIを開けた人間なら
いちいちそれ以上のパスなどやらないで、チャットも管理モードで動作してほしいんです。
何か方法はありますか?%ENVを見てもどうやら使えそうなのがなさそうですが。
0971nobodyさん
NGNG0972nobodyさん
2006/06/26(月) 15:29:23ID:???JavaScriptのdocument.locationを使ってimgタグを生成してdocument.writeする方法はどう?
0973nobodyさん
2006/06/26(月) 15:31:25ID:???ウソつき放題だからそんなものをあてにするのは感心しないな。
0974970
2006/06/26(月) 15:33:20ID:kXeMxgQFてっきりリファラは前のページになってしまうのかと。
ちゃんとできるのですね。
すみませんです。
今テストしてみたら確かにできてました。
ちなみにリファラの偽装って簡単ですか?難しいけど出来る人はできるのですか?
管理CGIのページには.htaccessで認証をつけてあるのですが、リファラの信頼度が
その.htaccessの認証以上であれば別にかまいませんが、どうなのでしょうか。
0975nobodyさん
NGNG0976970
2006/06/26(月) 15:38:54ID:kXeMxgQF一応リファラに入ってました。
例外もあるかもしれませんが。
>>973
自己申告でしたか。
それじゃあダメぽですね。
悩んでみます。
0977nobodyさん
2006/06/26(月) 15:47:16ID:???と言いたいところだが気をつけないとCSRF脆弱になるからな…
0978970
2006/06/26(月) 15:55:42ID:kXeMxgQF<iframe src="chat.cgi">ブラウザが未対応です。</iframe>
以外を追加したくないんですよね。
基本全てをchat.cgiがやる。そして一般者には管理モードがあることを悟られないようにしたい。
ipでやればできるような気もしますが、気が進まないんですよね。
0979970
2006/06/26(月) 16:21:47ID:kXeMxgQFchat_login.cgiを作って。それでまあ一応管理CGIの方は
<iframe src="...">〜</iframe>だけの追加でいいことになりますし。
ありがとうございました
0980nobodyさん
2006/06/26(月) 16:25:09ID:???encode( 'MIME-Header', $hoge )で文字化けしまくりです。
できれば5.8標準モジュールで済ませたいのですが、
JCodeとかを使わなければ無理でしょうか?
スクリプト自体はeuc-jpで書いています。
0981nobodyさん
NGNG0982nobodyさん
2006/06/26(月) 19:22:04ID:???$hogeがちゃんとしたユニコード文字列ならそれでエンコードされるはず。
ただし、utf8にしかならない。
日本語しか使わないかつ互換性の問題などでどうしてもiso-2022-jpにしたければ、
'MIME-Header-ISO_2022_JP'というのも用意されている。
詳しくはEncode::MIME::Header参照。
0983nobodyさん
2006/06/26(月) 19:44:59ID:???この中身が消えちゃうのは何故でしょうか・・・
0984nobodyさん
2006/06/26(月) 20:05:42ID:???0985nobodyさん
2006/06/26(月) 20:07:33ID:???どうしたいか分からないが
@splitdata = map { $_ =~ s/( )+$//; $_; } @splitdata;
だと予想。
0986nobodyさん
2006/06/26(月) 20:17:37ID:???grep { s/( )+$//; } @splitdata;
だけでいけるはず
0987nobodyさん
2006/06/26(月) 20:18:45ID:???0988nobodyさん
2006/06/26(月) 20:19:12ID:???0989nobodyさん
2006/06/26(月) 20:31:47ID:???ふぉ〜い〜ち → 書くことが沢山あるとき
適材適所
0990nobodyさん
2006/06/26(月) 20:33:09ID:???0992nobodyさん
2006/06/26(月) 20:40:33ID:???それとどれだけ短く書けるかで上級度も図ってた。
0993nobodyさん
2006/06/26(月) 20:44:11ID:???0994nobodyさん
2006/06/26(月) 20:44:51ID:???例えばウィニー作った人なんて相当なもんなんでしょ。
あーいう人。というか金子って人はウィニのソースの全てを把握をしてるのかな?
それとも全体の:kg:jgん;kjdgんljng;owjdgnbl;djgblaijdbga
youhasa .
毎度自分のプログラムの改造をするときにまず自分のプログラムを読んで把握のしなおしからするのかな。
0995nobodyさん
2006/06/26(月) 20:45:26ID:???0996nobodyさん
NGNG0997nobodyさん
2006/06/26(月) 20:46:13ID:???そもそもCGIで処理効率なんて考える?
回線状況による誤差を考えるとどうでもよくない?
いや、CGIでなくてもさ。
0999nobodyさん
2006/06/26(月) 20:49:24ID:???いや、そういう問題じゃなくねw
>>998
なんで好きじゃないんだか。覚えれば普通のことだと思うよ。
999get!
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。