1 名前:nobodyさん mailto:sage [2008/03/03(月) 05:07:32 ID:???] このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 Perl使いが優しくコメントを返しますが、 お礼はPerlの布教と初心者の救済をお願いします。
152 名前:nobodyさん mailto:sage [2008/05/01(木) 01:16:22 ID:???] 日本語が良くわかんない(><)
153 名前:nobodyさん [2008/05/02(金) 11:14:09 ID:Sh68NuTD] 2chの日付の後に付くIDはどうやって算出しているのですか? よろしくお願いします。
154 名前:nobodyさん mailto:sage [2008/05/02(金) 23:30:24 ID:???] pc11.2ch.net/php/#9 のように?とは&使わずに引数使うのどうするの?
155 名前:nobodyさん mailto:sage [2008/05/03(土) 00:23:50 ID:???] >>154 mod_rewriteとか。 実をゆうと localhost/file.cgi/aaa=bbb とかで、/の後ろを引数として渡したり出来るんだけど、 色々と混乱しそうだから、俺は使わない。
156 名前:nobodyさん mailto:sage [2008/05/04(日) 16:40:15 ID:???] どうやったら、変数に何も値が入ってないってことを確かめられるの?
157 名前:nobodyさん mailto:sage [2008/05/04(日) 18:06:42 ID:???] $hensu or print "ナイヨ(><)\n";
158 名前:nobodyさん mailto:sage [2008/05/04(日) 18:19:28 ID:???] $hensu = 0; で破綻するので>>157 はデタラメ。 defined($hensu) or print "ナイヨ(><)\n"; が正解。
159 名前:nobodyさん mailto:sage [2008/05/04(日) 19:26:18 ID:???] >>156 にとっての「何も値が入ってない」によって答えが変わるでしょ。 my $var = ''; # これが「長さ0の文字列が入ってる」のか「何も入ってない」のか print "どっちが正解かわかんないんです(><)\n" if $var xor defined($var);
160 名前:nobodyさん mailto:sage [2008/05/04(日) 22:15:41 ID:???] 三値論理
161 名前:nobodyさん mailto:sage [2008/05/05(月) 18:10:43 ID:???] use Socketと書かなくても、gethostbyname関数が使えるのはなぜ? ドメインを入力してIPアドレスを出力するだけの、単純なスクリプトを作りたいので
162 名前:nobodyさん mailto:sage [2008/05/07(水) 13:21:17 ID:???] 記事の中の a href=" URL " もしくは img src=" URL " のURLが相対パスになっていた時に絶対パスに変換されるようにするには どうしたらいいですか?
163 名前:nobodyさん mailto:sage [2008/05/07(水) 19:46:59 ID:???] HTMLタグに「絶対パス」を入れても表示出来ないよ
164 名前:nobodyさん [2008/05/07(水) 21:26:07 ID:fDlQQ0EM] いまapache?でcgiのテストをしてるんですが。 長居のでソースは遠慮するんですが、そのcgiを指定するとPLファイルをブラウザで表示したみたいに自分の打ったテキストがそのまま出てしまうのですが、このとき考えられるミスを教えて下さい。
165 名前:nobodyさん mailto:sage [2008/05/07(水) 22:20:31 ID:???] >>161 use strict; use warnings; #use Fcntl qw(:flock); use Socket; open(LOG, '>', 'test.tmp') or die $!; flock(LOG, 2); #flock(LOG, LOCK_EX); print LOG scalar gethostbyaddr(pack('C4', 127, 0, 0, 1), 2), "\n"; #print LOG scalar gethostbyaddr(pack('C4', 127, 0, 0, 1), AF_INET), "\n"; close(LOG); use Fcntl qw(:flock) や use Socket しなくても flock() も gethostbyaddr() もつかえる。ふしぎ! >>162 よくわかんないけど $ENV{'SERVER_NAME'} とか $ENV{'SCRIPT_NAME'} とか ttp://search.cpan.org/~gaas/URI-1.36/URI.pm ここの URI->new_abs() とかを眺めるといいんじゃないかと。 >>164 ・自鯖板ネタなのにここに書いてる。 ・よくわかんないまま共用レン鯖でテストしてる。 ・ファイル名が なんたら.cgi だけど .htaccess で .cgi が text/plain になるよう仕込んである。 ・ファイル名が なんたら.pl で実行属性がついてない。 ・実は Perl と無関係な問題。 …1つぐらいは当たってると思います。
166 名前:nobodyさん mailto:sage [2008/05/07(水) 22:27:20 ID:???] これじゃね?→Content-Type: text/html;
167 名前:nobodyさん [2008/05/07(水) 22:44:41 ID:fDlQQ0EM] >>165 あ、すいません。自鯖板ネタなんだと思います。 そんな板があると知らなかったので・・・何回か色々とググったら、たぶんapacheの設定ミスみたいです。 見直してみます。 ご迷惑おかけしました。 >>166 そっちは試してみたので。スクリプト的にはたぶん問題ないです。 helloworldレベルの奴でも出なかったし、本丸写しでも無理でしたし。 ありがとうございました。
168 名前:nobodyさん mailto:sage [2008/05/08(木) 00:03:38 ID:???] $HOGE = ABC DEF123 を ABC123 に置き換えたい時は $str =~ s/DEF123/$HOGE123/g; では駄目ですよね? どうしたらいいですか?
169 名前:nobodyさん mailto:sage [2008/05/08(木) 00:16:04 ID:???] $str =~ s/DEF123/${HOGE}123/g;
170 名前:nobodyさん mailto:sage [2008/05/08(木) 00:50:06 ID:???] >>169 ありがとうございます。うう…
171 名前:nobodyさん mailto:sage [2008/05/08(木) 10:10:29 ID:???] >>161 組み込み関数だから使える。
172 名前:161 mailto:sage [2008/05/08(木) 18:42:19 ID:???] >>171 thx
173 名前:nobodyさん mailto:sage [2008/05/08(木) 20:29:16 ID:???] ABC/DFG/HIJ/../ → ABC/DFG/ こういうのが こういう感じで置き換わるように $str =~ s/\/[^\/]*\/\.\.\//\//g; こうやってみたのですが ABC/DFG/HIJ/../../ → ABC/DFG/../ こういうのは こうなっちゃいます ABC/DFG/HIJ/../../ → ABC/ こうなってくれるにはどうしたらいいですか?
174 名前:nobodyさん mailto:sage [2008/05/08(木) 20:46:01 ID:???] ../ を消すだけじゃ駄目? $str =~ s{\.\./}{}g; こんな風に。
175 名前:173 mailto:sage [2008/05/08(木) 20:59:09 ID:???] >>174 ../ が前方を巻き込んで消えるようにしたいのです 一行では無理でしょうか
176 名前:nobodyさん mailto:sage [2008/05/08(木) 21:06:50 ID:???] ごめんなさい。 完全に勘違いしてました。 こういうこと? $str =~ s{[^/]*/(\.\./)+}{}g;
177 名前:173 mailto:sage [2008/05/08(木) 21:22:58 ID:???] >>176 すみませんお手数おかけして… それだと ABC/DFG/HIJ/../ の時も ABC/DFG/HIJ/../../ の時も ABC/DFG/ になってしまいます ABC/DFG/HIJ/../../ の時には ABC/ になるようにしたいのです
178 名前:nobodyさん mailto:sage [2008/05/08(木) 21:29:39 ID:???] 正規表現でどうにかする方向は>>176 さんに任せつつ。 >>173 use File::Spec; print File::Spec->canonpath('ABC/DFG/HIJ/../../'); # ABC 末尾のデリミタが消えたりしますが。
179 名前:176 mailto:sage [2008/05/08(木) 21:40:41 ID:???] 質問の趣旨がようやくわかった。ファイルパスの操作か。 こんなことしてどうするんだろうとか不思議に思ってた。 なんか寝ぼけてるな。 これを正規表現でどうにかしたのをみてみたい。
180 名前:173 mailto:sage [2008/05/08(木) 22:04:20 ID:???] わ、最初からファイルパスと言うべきでした。すみません。 RSS出力のCGIをいじってて、文章中にあるリンクやimgタグがRSSフィードでは 絶対パスでないと働かないので、相対パスになってた時に絶対パスに置き換わるように したかったのです。 $RSS_BASE_URI = "$ENV{ 'HTTP_HOST'}$ENV{'SCRIPT_NAME'}"; $RSS_BASE_URI2 = &GetDir($RSS_BASE_URI); 元のCGIにこれがあるので、 $str =~ s/href=\"/href=\"$RSS_BASE_URI2/g; $str =~ s/src=\"/src=\"$RSS_BASE_URI2/g; $str =~ s/http\:\/\/.*?\/http\:\/\//http\:\/\//g; $str =~ s/\/\.\//\//g; $str =~ s/\/[^\/]*\/\.\.\//\//g; こうやってみたんですが…(見にくくてすみません) こういう書き方をするようなものではないのでしょうか? >>178 すみません、記事の中からURLを抜き出して当てはめるにはどうすれば…
181 名前:178 mailto:sage [2008/05/08(木) 22:46:06 ID:???] my $str = 'ABC/DFG/HIJ/../.././././'; while (index($str, './') + 1) { $str =~ s!/\./!/!g; $str =~ s!/[^/]*/\.\./!/!g; } print $str; ループなしでどうやるんだろう。 >>180 最初から「>>162 です」と言って欲しかった気がする165です。 $RSS_BASE_URI2 の正体等々よくわかんないので、下記を見ながらごにょごにょしてください。 use URI; print URI->new_abs('../../images/spacer.gif', 'example.com/cgi-bin/test/ '); # example.com/images/spacer.gif
182 名前:nobodyさん mailto:sage [2008/05/08(木) 22:46:10 ID:???] >>180 横レス。 モジュールがあるか?と静観してたんだが、こっちに移動してきたのかw my $RSS_BASE = '/ABC/DFG/HIJ/' ; # 絶対パス my $path = '../../abc/efg/' ; # 相対パス my $cnt = $path =~ s{\.\./}{}g ; # ../ の数把握と同時に消去。 $RSS_BASE =~ s/([^\/]*?\/){$cnt}$// ; # 絶対パスから../の回数分のディレクトリを削る。 print $RSS_BASE . $path . "\n" ; # プリント。
183 名前:nobodyさん mailto:sage [2008/05/08(木) 22:47:32 ID:???] ああ、やっぱモジュールがあったのねorz... おまけにタワゴト書いてるし。
184 名前:173 mailto:sage [2008/05/08(木) 23:36:51 ID:???] >>181 ごめんなさい。>>162 です。 記事の中から該当部分を抜き出してまた戻す方法も分からない絶望的分からなさだったので 教えていただいたものを使うことができず、恥ずかし悲しくなりながら単純な置換だけでなんとか やれないかと別の方向にごにょごにょしちゃってました。 もう少し勉強してそれを使えるようにがんばってみます。ありがとうございました。 >>182 移動してきてました…。 自分が知らないだけでこれもきっと一行ですむのだろうと思ってたら、そうでもないようですね。 勉強してなんとか単純置換以外も使えるようになろうと思います。ありがとうございました。
185 名前:nobodyさん mailto:sage [2008/05/09(金) 04:31:31 ID:???] モジュール使えで終了な話ではあるけどワンライナーでかけないのが悔しいorz
186 名前:nobodyさん mailto:sage [2008/05/09(金) 07:34:10 ID:???] せいぜい短くしても $str="ABC/DFG/HIJ/../../././abc/efg" ; 1 while $str =~ s{([^/]*?/\.\./|\./)}{} ; print $str . "\n" ; 程度だね。
187 名前:nobodyさん [2008/05/10(土) 18:46:41 ID:jhS0+1hl] テストしても何も表示されないんですが何がおかしいのでしょう? print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n"; print "<html>\n"; print "<head><title>あ</title></head>\n"; print "<body>$kao<br>$body<br>$asi</body>\n"; print "</html>"; タイトルすら出てくれないんです。 たぶん初歩的なミスだと思うのですが・・・
188 名前:nobodyさん mailto:sage [2008/05/10(土) 19:17:45 ID:???] ヘッダは?
189 名前:nobodyさん [2008/05/10(土) 20:49:00 ID:jhS0+1hl] print "Content-type: text/html\n\n"; これですか?
190 名前:173 mailto:sage [2008/05/10(土) 21:11:01 ID:???] >>186 あ、一行でもできたんですね! ありがとうございます、動きました! URLを抽出してモジュールに渡すのに悪戦苦闘してましたが、 このままできないのもくやしいのでそっちもがんばってきます。
191 名前:nobodyさん mailto:sage [2008/05/10(土) 23:31:35 ID:???] >>189 その行を print "<!DOCTYPE〜 の行の前に書いてる? あとエラーじゃなくて真っ白? ソースも?
192 名前:nobodyさん [2008/05/11(日) 12:00:02 ID:/WAyhnOg] >>191 はい。この行を書いて、一行改行してhtmlソースです。 ANHTTPDで真っ白でした。 前に$kaoとかを定義づけてるんですけども(ifで)それのミスなら500が出るかな、と思ったので。
193 名前:181 mailto:sage [2008/05/11(日) 17:10:05 ID:???] >>190 「くやしいのでモジュール使うやりかたでもがんばってみる」方のようなので ごにょごにょするときの参考にしてみてください。 use URI; # URIモジュールさん召喚。 my $RSS_BASE_URI2 = 'example.com/my/rss/generator/ '; # 例。 my $str = join('', <DATA>); # __DATA__ 以下の割箸をまとめて $str に袋詰めします。 # >>180 に基づいてみました。 $str =~ s/href="([^"]+?)"/'href="'. URI->new_abs($1, $RSS_BASE_URI2) .'"'/eg; $str =~ s/src="([^"]+?)"/'src="'. URI->new_abs($1, $RSS_BASE_URI2) .'"'/eg; print $str, "\n"; # 出力: # <img src="example.com/diary/img/test.jpg "> # <a href="example.com/diary/latest ">latest</a> # <a href="example.com/test/script.cgi ">Test Script</a> __DATA__ <img src="../../../diary/././img/././test.jpg"> <a href="../../../diary/latest">latest</a> <a href="example.com/test/script.cgi ">Test Script</a>
194 名前:193 mailto:sage [2008/05/11(日) 17:25:08 ID:???] 事故レスれす。 > $str =~ s/href="([^"]+?)"/'href="'. URI->new_abs($1, $RSS_BASE_URI2) .'"'/eg; > $str =~ s/src="([^"]+?)"/'src="'. URI->new_abs($1, $RSS_BASE_URI2) .'"'/eg; $str =~ s/(href="|src=")([^"]+?)"/$1. URI->new_abs($2, $RSS_BASE_URI2) .'"'/eg;
195 名前:nobodyさん mailto:sage [2008/05/11(日) 20:48:25 ID:???] >>192 ANHTTPDの設定だと思うけどなー。 「ANHTTPD 真っ白」でぐぐったらなんか色々出てきたから やってみたら
196 名前:nobodyさん mailto:sage [2008/05/12(月) 04:25:47 ID:???] ブラウザを使わずにBookOFなどの商用サイトに接続して本を検索したり注文したりする Perlで可能でしょうか? 可能でしたら具体的に教えていただけないでしょうか
197 名前:nobodyさん mailto:sage [2008/05/13(火) 03:27:45 ID:???] そのサイトが検索用にAPIでも提供していれば コマンドラインからの実行で検索は出来るはず(Amazon等) 注文までは知らね
198 名前:nobodyさん mailto:sage [2008/05/13(火) 05:33:31 ID:???] >>196 ,>>197 別にAPIとか対応して無くても、Formで受け付けてくれるなら(JavascriptやFlashでなければ) 気合さえあれば、検索も注文も出来る。
199 名前:190 mailto:sage [2008/05/13(火) 07:31:33 ID:???] >>193 ありがとうございます、参考に……って回答だった! 自分のとこでも動きました。こんなに簡潔になるなんて感激です。 ~ s/ 以下にも入れられたんですね… 一回やってエラーが出たので(多分何か抜けてた) 別の場所で動かしたそれを元に戻す過程がいるのかと 甚だしい勘違いをしてました。 何一つ自分で解決できなかったけどなぜか大きく成長したような気がしました 本当にありがとうございます。 CGIでやってみたいことはまだまだあるので次はgoogle的なもので 解決できるようになりたいものです。
200 名前:nobodyさん mailto:sage [2008/05/14(水) 02:23:53 ID:???] >>198 まあ、やって出来ない事は無いとは思うけど 気合いってよりは無駄な作業が多くなるでしょ 検索して返ってくるのはHTMLな訳だからそこから必要な物を切り出して さらにフォームを探して送信する内容を整えて・・・
201 名前:nobodyさん mailto:sage [2008/05/14(水) 04:27:20 ID:???] >>200 そう、だから気合がいる。昔そんなのを書いてて、 「こんなん苦労して書く必要あんのかよ?しかも1サイトにしか通用しねえし・・」 とか思ったこともあるけど、気合(笑)でカバーした。あの頃は若かった。
202 名前:196 mailto:sage [2008/05/14(水) 04:44:38 ID:???] みなさん情報ありがとうございます ブラウザ無しでできるって事ですね ブラウザ無しでデータをやり取りすると速いんじゃないかと思うのですが 実際どうでしょうか? 込み合ってるサイトもスイスイですか?
203 名前:nobodyさん mailto:sage [2008/05/14(水) 05:50:58 ID:???] >>202 それは、相手のサーバーの処理能力とか、回線状態による。 まあそのページが、Javascriptやら画像やらフレームやらで大変込み入った内容なら ブラウザでレンダリングするよりかは早くなるかも知れん。 (向こうのレスポンスについては、こっちからじゃなんもでけん) けど、HTMLを正規表現等でパースして、ifで場合分けして、Formに内容セットしてとかしてたら、 はっきり言ってブラウザでクリックしたりしてするのの楽さと比べて、そんな恩恵あるとは思えん。 なにより、そうゆうコード書くのにかなり気合を要する(w)。 まあやるのは自由だけど・・・。 DDosアタックでも仕掛けるのなら話は別だが・・。
204 名前:nobodyさん mailto:sage [2008/05/14(水) 06:19:24 ID:???] スイスイ具合は「画像オフ・JSオフ・CSSオフ」のブラウザと大差ないよ。レンダリングの有無だけ。 「Perlで書けばスイスイ!」だけを期待してるんだったら、やめれと。 でも、HTMLをパースしてCookieも食べて、フォーム仕立てて送信、お返事をパース…の繰り返しを書いて 意地でもPerlで注文してやる、というマゾな考えならそれはそれでありなのかもね。
205 名前:nobodyさん mailto:sage [2008/05/16(金) 00:52:53 ID:???] 近所の古本屋さんでオライリーPerl リソースキット UNIX版Xと記載されたperlの解説本を発見! 定価15000円らしいのだが2000円の値札が付いている CD付属でそのCDは未開封 パラパラッと立ち読みしたらWindows環境にも通用しそうな気がするんですよ 自分はWindows環境なんだけどこの本は勉強なりそうですか? 付録のCDはWindows環境でも使えそうですか? ご存知の方お願いします
206 名前:nobodyさん mailto:sage [2008/05/16(金) 12:23:26 ID:???] >>205 それ、解説書じゃなくて、CPANにある モジュールのドキュメントを和訳しただけのものだから。 しかも10年前のものだから。 www.oreilly.co.jp/out/presuni/
207 名前:nobodyさん mailto:sage [2008/05/16(金) 16:32:25 ID:???] >>206 さん ありがとうです UNIXと記載がありますが2000円捨てるつもりで買ってみようかと思います 他にも古い本でプログラミングperlUNIXとか600円で売っていたんですよ Windowsで動くのか心配だけど一緒に買ってみます
208 名前:nobodyさん mailto:sage [2008/05/16(金) 16:37:16 ID:???] XPのためにWin98の本買うようなもの 最新のドキュメントを探したほうがいい 古いの見ても混乱するだけ
209 名前:nobodyさん mailto:sage [2008/05/16(金) 16:45:50 ID:???] >>208 さん そうだなー そう言われればその通りですよね やっぱり見合わせます ありがとうございます
210 名前:nobodyさん mailto:sage [2008/05/16(金) 17:18:48 ID:???] Perlほど解説本なしでネットでまかなえるプログラミング言語はないだろう
211 名前:nobodyさん mailto:sage [2008/05/19(月) 01:43:18 ID:???] コマンドプロンプトからユーザエージェントして返ってきた文字列が 英数字以外は文字化けしてます コマンドプロンプト内で読めるように教えてください jcode.plもエラーになります
212 名前:nobodyさん mailto:sage [2008/05/19(月) 01:52:01 ID:???] >>211 意味がわかりません。 > コマンドプロンプトからユーザエージェントして とはどうゆうことですか?
213 名前:nobodyさん mailto:sage [2008/05/19(月) 02:16:27 ID:???] わかんないならスルーしろよ なんで答えるの? 教えたらわかりそうなのか?
214 名前:nobodyさん mailto:sage [2008/05/19(月) 02:24:16 ID:???] >>213 いやあ、多分LWP-UserAgentのことかなとエスパー。 ほんで取ってきたページのソースがcp932じゃないから コマンドプロンプトで文字化け。 実は俺も昔やったことがある。 だから聞いてみた。
215 名前:nobodyさん mailto:sage [2008/05/19(月) 02:26:22 ID:???] >>214 ぅぉぉぉー ヽ( ゚д゚)ノヽ(゚д゚ )ノ ぅぉぉぉー わかってんじゃん それそれ cp932をも少し詳しく
216 名前:nobodyさん mailto:sage [2008/05/19(月) 02:27:15 ID:???] 「CLI で LWP を飛ばしたら、CP932 じゃない文字列が返ってきます」まではわかるから、 もう一段階進んで 「jcode.pl は UTF-8 を知らんぞ」でいいのかな。
217 名前:216 mailto:sage [2008/05/19(月) 02:29:01 ID:???] つーか、質問者さんがその態度で通すんだったら移動してくださいな。 くだらない質問でもど偉そうに聞いていいスレ pc11.2ch.net/test/read.cgi/php/1158647441/
218 名前:nobodyさん mailto:sage [2008/05/19(月) 02:40:29 ID:???] >>215 次からは、もちっと質問を詳しく。 ほいで解決方だけど、 perl 実行したいスクリプト.pl > kekka.html とでもして、そのファイルを各種文字コードで開けるエディタ(秀丸、TeraPad等)で開く もし持ってなければ、とりあえずIEで開けばなんの文字コードかはわかる。 or use Encode;(5.8以降標準で入ってる) で文字コードをcp932に変換。 >>216 その可能性もあるかもだけど、多分、もともとのページの文字コードが分かってなかったら使えない。 (と思ったが、自動判別出来るんだっけ?もう長いこと使ってないから忘れちまった。) あと、$response()->as_string() あたりでサーバーからのレスポンスヘッダが読めるから、 それでそのページの文字コードを判別しい。(か、もしくはhtmlの中の<metaを探すか)
219 名前:nobodyさん mailto:sage [2008/05/19(月) 02:50:31 ID:???] >>218 自動判別は (jcode.pl|Jcode.pm|Encode::Guess) な感じでいちおうあるよ。 # jcode.pl は UTF-8 に対応してないので、その辺はどうにもならない。 どれも「当たるとは限らん」ところが大事ですけど。
220 名前:nobodyさん mailto:sage [2008/05/19(月) 02:50:47 ID:???] >>217 気分悪いならスルーでいいよ あなた個人を攻撃してるわけでもないのに 態度云々言われたらこっちが気分悪い 取り合えず2chには向いてないと思うよ これからもし私を見かけてもスルーしてね おちょくってるわけでもないのに変な奴だ >>218 詳しくありがとう
221 名前:nobodyさん mailto:sage [2008/05/19(月) 03:23:45 ID:???] 例の人が久々に来てたのか。エスパーたち、乙。
222 名前:nobodyさん mailto:sage [2008/05/19(月) 10:53:12 ID:???] またおまえかwww
223 名前:nobodyさん mailto:sage [2008/05/19(月) 15:45:54 ID:???] このバカ定期的に沸いてくるな しかもあちこちに増殖している
224 名前:nobodyさん mailto:sage [2008/05/19(月) 16:40:56 ID:???] ふーん 人を馬鹿扱いできるほどお前稼いでるの? 税金なんぼ払ってるかいってみ
225 名前:nobodyさん mailto:sage [2008/05/19(月) 16:59:25 ID:???] 失せろ
226 名前:nobodyさん mailto:sage [2008/05/19(月) 17:15:21 ID:???] キモイ
227 名前:nobodyさん mailto:sage [2008/05/19(月) 18:46:02 ID:???] 稼いでる = 馬鹿でない 上の理論が成り立つと思ってるマヌケさ
228 名前:nobodyさん mailto:sage [2008/05/19(月) 18:49:18 ID:???] なんか自分を凄く見せたがる為に銭金の話をしたがる馬鹿いるよな 森伊蔵云々、ディナー云々 中学生のホラ自慢みたいw
229 名前:nobodyさん mailto:sage [2008/05/19(月) 19:09:24 ID:???] もう構うなってw
230 名前:nobodyさん mailto:sage [2008/05/19(月) 21:49:23 ID:???] みんなお疲れ様 わかる人お願いします ソースコードutf-8で保存してから実行してみた アクティブパール5.88 WindowsXp ここからどうすれば日本語になるの? use LWP::UserAgent; use utf8; use encoding 'cp932'; $ua = LWP::UserAgent->new(); $req = HTTP::Request->new("GET", "www.yahoo.co.jp/ "); $res = $ua->request($req); print $res->content();
231 名前:nobodyさん mailto:sage [2008/05/20(火) 04:17:01 ID:???] use LWP; use Encode; print encode('cp932',decode('utf8',LWP::UserAgent->new()->get('www.yahoo.co.jp ')->content()));
232 名前:nobodyさん mailto:sage [2008/05/20(火) 04:28:46 ID:???] >>231 私の環境ではエラーになっちゃったけど 物凄く参考になった ありがとう
233 名前:nobodyさん mailto:sage [2008/05/20(火) 04:36:24 ID:???] >>231 できました! スペースの文字コードを半角スペースに変えたらエラーにならないで実行できました 見事に日本語になってます ありがとうございました!
234 名前:nobodyさん mailto:sage [2008/05/20(火) 15:30:39 ID:???] >>231 をhtmlファイルで保存したいんだけどできない すいませんまた教えてください open(FH, '>>', "yahoolog001.html") or die "Cannot open content()!"; flock(FH, 2); print FH qq|content()\n|;
235 名前:nobodyさん mailto:sage [2008/05/20(火) 16:51:57 ID:???] >>234 231をyahoo_get.plとでも名前付けて保存して、 perl yahoo_get.pl > yahoo001.html
236 名前:nobodyさん mailto:sage [2008/05/20(火) 17:29:08 ID:???] >>235 何回もすいません どうすればいいのか? 下記のような状況です open(FH, '>>', "yahoolog001.html") or die "Cannot open yahoo001.html!"; flock(FH, 2); perl yahoo_get.pl > yahoo001.html; ----------------- Can't locate object method "perl" via package "yahoo_get" (perhaps you forgot to load "yahoo_get"?) at yahoo-tes001.pl line 6.
237 名前:nobodyさん mailto:sage [2008/05/20(火) 18:28:08 ID:???] >>235 スクリプト内に入れてやれよww print FH encode('cp932',decode('utf8',LWP::UserAgent->new()->get('www.yahoo.co.jp ')->content()));
238 名前:nobodyさん mailto:sage [2008/05/20(火) 18:38:22 ID:???] >>236 違う違う、235のは、コマンドラインから実行するんであって、perlスクリプトの中に書くんではない。 >>234 とか見てると、ファイルのオープンとかはあってるけど、 オブジェクトとか、クラスメソッドとかのことを良く分かってないようなので、 とりあえず一行で書けるのにしてみた。 それから、君は>>211 や>>230 と同じ人(?、かどうかは定かではないが) コマンドプロンプトから実行してるなら、リダイレクトや標準出力、標準入力等についてもある程度は理解がないと。 (Perlではないんで、入門書とかにはあんまり書いてないか。でも基本ってか常識レベルなんで、 わかってないとこれからしんどいよ。逆にわかってくると、いちいちスクリプトの中でやらなくていいことが増えるんで 書くのが楽になるし、理解も深まる。)
239 名前:nobodyさん mailto:sage [2008/05/20(火) 18:42:43 ID:???] wktk
240 名前:nobodyさん mailto:sage [2008/05/20(火) 21:15:41 ID:???] >>237 さん、>>238 さん、御二方ともお忙しい中ありがとうございます FH付けると何故かまた文字化けになってしまい苦戦していました よくわかりませんがcp932を止めたら文字化けが亡くなりました アドバイスのお陰で2つの方法で保存させることが出来ました しかも昨日までは取得した最後の1024バイトしか表示されなかったのですが ページ全部を取得できていますありがとうございました ↓スクリプトだけで保存でたソース --------------- use LWP; use Encode; open(FH, '>>', "yahoolog001.html") or die "Cannot open yahoo_get.pl!"; flock(FH, 2); print FH LWP::UserAgent->new()->get('www.yahoo.co.jp ')->content(); ↓コマンドラインから保存できたソース -------------- use LWP; use Encode; print LWP::UserAgent->new()->get('www.yahoo.co.jp ')->content(); ここからログインのテストしたいので またお願いするかもしれませんが その時はよろしくお願い致します >>238 さん 勉強方法詳しくありがとうございました 標準入出力の解説書なかなか見当たらないです 手持ちの解説書で標準入出力を解説しているのは 「perlデータマンジング」という本だけです 大変わかりやすく良書なのですが紙面の関係上さわり程度なのが残念です 何かお勧めの解説書があれば教えて頂ければ嬉しいです ありがとうございました
241 名前:nobodyさん mailto:sage [2008/05/22(木) 14:07:57 ID:???] お世話になります httpsでログイン可能な簡易ブラウザサンプルどこかないでしょうか? 自分が調べたところ2001年にある雑誌が付録で付けていたようなのですが 絶版になり各方面探しても見当たりませんでした やりたいことはhttps接続での送受信です お心当たりのある方よろしくお願い致します
242 名前:nobodyさん mailto:sage [2008/05/22(木) 14:12:19 ID:???] LPW
243 名前:nobodyさん mailto:sage [2008/05/22(木) 14:12:53 ID:???] 間違えた笑 LWP
244 名前:nobodyさん [2008/05/23(金) 20:25:12 ID:VktSXUAF] sで一気にいくつかのものを変換する方法ありますか? たとえるならあいうえおという文のあとおをかとこにおきかえたいんです。
245 名前:nobodyさん mailto:sage [2008/05/24(土) 02:20:54 ID:???] trじゃダメなの?
246 名前:nobodyさん mailto:sage [2008/05/26(月) 19:32:51 ID:???] どもお世話になります あれから色々調べているんですけど ログインや検索やセレクトメニューの選択やボタンクリックなど 具体的なサンプルってないですね もしかしてperlで出来ないですか? 結局HACKER本買い捲ったんだけど みんなHTMLの取得までなんですよ そこからセレクトメニューを選んだりOKボタンをクリックするとか できないんだろうか?
247 名前:nobodyさん mailto:sage [2008/05/26(月) 19:36:22 ID:???] お前は何を言っているんだ
248 名前:nobodyさん mailto:sage [2008/05/26(月) 20:03:33 ID:???] なんで? perlでなんでも出来るって言ってたじゃないですか?
249 名前:nobodyさん mailto:sage [2008/05/26(月) 20:18:52 ID:???] ネタですか?
250 名前:nobodyさん mailto:sage [2008/05/26(月) 20:35:06 ID:???] >>248 もしかして>>196 からの流れか? ひょっとして画面が表示されて検索ワードが勝手に入力されてセレクトメニューが勝手に選択されてボタンが勝手に押されるとか そういうのイメージしてる?
251 名前:nobodyさん mailto:sage [2008/05/26(月) 20:47:35 ID:???] >>250 それそれ それです! perlで出来るんですよね? 今のところそのようなサンプル見当たらないんですよ 自動ソフトのスクリプトとかならOKボタンのクリックなどは 初歩の初歩インストール後5分後には覚えれるくらい簡単なんですけど perlの場合参考になるような記述すら見当たらないんですよ 超凄いらしい解説本やオライリーのHACKシリーズやWEBシリーズを購入したんですけど 全然すごくない OKボタンの1回すら出てこない なんでもできないのですか?
252 名前:nobodyさん mailto:sage [2008/05/26(月) 20:54:44 ID:???] それをやろうと思ったのはお前が最初で最後だと思うよ
253 名前:nobodyさん mailto:sage [2008/05/26(月) 21:12:52 ID:???] >>252 なんでですか? perlでは出来ないってことなの?
254 名前:nobodyさん mailto:sage [2008/05/26(月) 21:16:41 ID:???] ちなみに自分はある自動ソフトで検索とか保存とか WEB上での操作でやりたいことは大体教えてもらえましたよ そのソフトを教えてくれる方たちはみんな普通にご存知でした ただ遅いんですよorz 0.5秒で完結させたいんです
255 名前:nobodyさん mailto:sage [2008/05/27(火) 02:30:31 ID:???] >>252 自分は>>198 や>>201 なんだけど、多分初めてじゃないと思うぞ(w) >>253 ,254 君のやりたいことってのが、GUIのツールみたく目に見える感じで動いて行くってのなら多分ムリ。 (Tkとか使ったら無理やりにでもできるかも知れん。でも自分はGUI系はからっきしなんで、よくわからん) そうでなくて、コマンドラインから、ブラウザで操作したことと同じ結果を得るってことなら可能。 どんな本や、どんなページ参考にしたかわからないけど、 ちょっと上の方に出てるLWPなんかの解説や、CPANのmanualなんかをじっくり読めば(リンクを少々辿らないダメだけど)、 検索フォームにワード仕込んだり、”OK”ボタンを押すってことにもたどりつきそうだけど・・・。
256 名前:255 mailto:sage [2008/05/27(火) 02:31:04 ID:???] でもまあ、サンプルでも書いとく。 use strict; use LWP; use Encode; use HTML::Form; my $pwd = `cd` . '\\'; my $cmd = 'C:\Program Files\Internet Explorer\iexplore.exe'; my $url = 'google.co.jp/ '; my $lwp = LWP::UserAgent->new('agent'=>'mozilla3.9'); my $word; my $out1 = '1.html'; my $out2 = '2.html'; $word = shift() or $word = 'Perl'; $word =~ tr/\r\n//d; my $html = $lwp->get($url)->content(); open(O1,">$out1"); print O1 $html; close(O1); system qq("$cmd" "$pwd$out1"); my $form = HTML::Form->parse($html,$url); $form->value('q' => encode('utf8',decode('cp932',$word))); $form->value('ie'=> 'UTF-8'); my $response = $lwp->request($form->click); my $out2 = '2.html'; open (O2,">$out2"); print O2 $response->content(); close(O2); system qq("$cmd" "$pwd$out2"); これを、例えばtest_search.plとでも保存して、コマンドラインから、 perl test_search.pl "検索したいキーワード" で実行すると、最初googleのTopが表示されて、それを閉じれば、そのワード(なければ”Perl”)での 検索結果がIEで表示される。(無理やり、画面遷移っぽくなるように作った。) モジュールや関数の詳細は、自分で調べてくれ。
257 名前:nobodyさん mailto:sage [2008/05/27(火) 03:14:05 ID:???] また湧いたのか・・・
258 名前:nobodyさん mailto:sage [2008/05/27(火) 03:29:45 ID:???] >>255 さん ありがとうございます まさにそれなんです GUIを使わないで送受信してみたいんです お疲れのところわざわざサンプルまで作って頂き本当にありがとうございます! 頂いたサンプルを参考にログインとかもチャレンジしてみます ありがとうございました
259 名前:nobodyさん mailto:sage [2008/05/27(火) 14:08:14 ID:???] ブラウザのインターフェースに強引に割り込ませるのかと思ったわ httpについて勉強するといいよ
260 名前:nobodyさん [2008/05/28(水) 00:14:16 ID:T0EpbUiq] ググったら趣旨が違うのしかでないんですが、 ifで、たとえば$Aに\という文字列が含まれる場合、 \が含まれています。とするにはどうしたらいいんでしょうか? if($A =~ \\) {print "\\が含まれています"} でいけますか?
261 名前:nobodyさん mailto:sage [2008/05/28(水) 02:23:14 ID:???] if($A =~ /\\/)
262 名前:nobodyさん mailto:sag [2008/05/31(土) 01:19:07 ID:???] $in{'ext'} = extfind($in{'orgname'}); if(!$in{'ext'} && $in{'upfile'}){ &error(202); } この処理ってどういう意味なのでしょうか?
263 名前:nobodyさん mailto:sage [2008/05/31(土) 02:02:14 ID:???] ;
264 名前:nobodyさん mailto:sage [2008/05/31(土) 15:52:59 ID:???] >>262 >$in{'ext'} = extfind($in{'orgname'}); サブルーチン(?) extfindの一番目の引数にハッシュ$in{'orgname'}の値をセットして 呼び出し、戻り値をハッシュ$in{'ext'}に代入。 >if(!$in{'ext'} && $in{'upfile'}){ &error(202); } 次にハッシュ$in{'ext'}の中の人が留守で、 尚且つハッシュ$in{'upfile'}の中の人が居る場合 恐らくエラーメッセージを表示するであろう サブルーチンerrorの一番目の引数に"202"をセットして呼び出す。 ちなみに2行を一行にまとめると↓みたいになる &error(202) if(!&extfind($in{'orgname'}) && $in{'upfile'});
265 名前:264 mailto:sage [2008/05/31(土) 15:54:58 ID:???] 戻り値をセットせなあかんから1行にまとめたら駄目だな・・orz
266 名前:264 mailto:sageΛ||Λ [2008/05/31(土) 16:03:00 ID:???] &error(202) if(!($in{'ext'} = &extfind($in{'orgname'})) && $in{'upfile'}); オリジナルと大して変わらんけどこうやればいけるか スレ汚しスマソ・・
267 名前:nobodyさん mailto:sage [2008/05/31(土) 18:48:39 ID:???] より、この処理ってどういう意味なのでしょうか? という質問が出易くなりますな。
268 名前:nobodyさん mailto:sage [2008/05/31(土) 20:14:45 ID:???] >>264 やっぱりperl難しいな・・・ sugachan.dip.jp/obsolete/snup/ 拡張子合わずってログに記録したときは ファイルをアップしないように改造しようかと 思ってるのだがなかなかできなくて。。。 $in{'ext'} = extfind($in{'orgname'}); if(!$in{'ext'} && $in{'upfile'}){ &error(202); } を $in{'ext'} = extfind($in{'orgname'}); if(!$in{'ext'}){ &error(202); } に、しても普通にアップロードできてしまうし。。。どこがおかしい?
269 名前:nobodyさん mailto:sage [2008/05/31(土) 20:40:29 ID:???] >>268 そこのアップローダの改造の質問 って前にもどこぞで見たなあ。 で「改造スレに行け」と言われてたハズだが? ソースが好みじゃないのでやる気にならん。…改造スレ行けば?
270 名前:nobodyさん mailto:sage [2008/06/04(水) 08:35:22 ID:???] perlで書かれたチャット掲示板みたいなCGIプログラムがあります テキストエリアに文字を入力して、投稿ボタンを押すとregist.cgiに渡されて書き込まれる仕組みです このregist.cgiはmessageとcountという2つの引数をとるみたいなのですが、 ブラウザからURL:/aaa/bbb/regist.cgi?message=test&count=1 とやっても書き込まれませんでした ちなみにFirefoxのTemperDataで確認したリクエストとレスポンス上ではベーシック認証は使われていませんでした 最終的にはperlで自動的に書き込んでくれるプログラムを書きたいのですが、まずはperlでこのregist.cgiに投稿するにはどうすればいいか教えてください
271 名前:nobodyさん mailto:sage [2008/06/04(水) 10:11:46 ID:???] postしてみろ
272 名前:nobodyさん mailto:sage [2008/06/04(水) 14:06:46 ID:???] GETで投稿出来ちゃうと、2chにリンク貼られまくったときにw
273 名前:nobodyさん mailto:sage [2008/06/06(金) 23:21:44 ID:???] sub getDirSize($)の($)ってどういう意味?
274 名前:nobodyさん mailto:sage [2008/06/07(土) 02:53:47 ID:???] >>273 プロトタイプ。 $は引数としてスカラーしかとらないってこと。
275 名前:273 mailto:sage [2008/06/07(土) 08:37:38 ID:???] >>274 thx
276 名前:nobodyさん [2008/06/13(金) 17:42:23 ID:GNaVOr+f] UTF-8の16進コードを文字にしたいんですが、 pack('C*','0xe4','0xba','0xba')とやっても化けてしまいます。 どういう式を書けばいいのですか?
277 名前:nobodyさん mailto:sage [2008/06/13(金) 18:06:20 ID:???] pack('C*',0xe4,0xba,0xba) だとどうなる?
278 名前:nobodyさん mailto:sage [2008/06/13(金) 18:32:03 ID:???] >>277 ありがとうございます。できました。 裸のままでよかったのですね。 pack('H*','e4baba'); というのもあったみたいです。 今は10進→16進→文字なんですが、 10進から直接変換できますか?
279 名前:nobodyさん mailto:sage [2008/06/13(金) 18:37:43 ID:???] 0xがついてなきゃ10進だよ。 pack('C*',228,186,186) とか 10進の数字しかないならpack('C*','228','186','186') でも通るけどな。
280 名前:nobodyさん mailto:sage [2008/06/13(金) 19:26:54 ID:???] ありがとうございます。 文字列との違いが判りました。 UTF-8のコード範囲を調べると [\x00-\x7f] [\xC0-\xDF][\x80-\xBF] [\xE0-\xEF][\x80-\xBF][\x80-\xBF] [\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF] とあります。 これには他の言語も含まれているとおもいます。 先ほど教えていただいた変換で一覧を作ろうと思うのですが、中国語なども混ざってしまいます。 日本語のみの範囲はどのようなものなのでしょうか。
281 名前:nobodyさん mailto:sage [2008/06/13(金) 19:41:37 ID:???] ttp://ja.wikipedia.org/wiki/Unicode
282 名前:nobodyさん mailto:sage [2008/06/13(金) 20:36:31 ID:???] そういえば、日本語じゃなくても、 罫線とか利用している文字もありますね。 なかなか難しい。
283 名前:nobodyさん mailto:sage [2008/06/15(日) 14:13:18 ID:???] postやgetじゃなくて、普通にページにアクセスしたときの条件分岐が作りたいのですが、 そんなことはできませんか?
284 名前:nobodyさん mailto:sage [2008/06/15(日) 14:29:37 ID:???] Use of uninitialized value in concatenation (.) or string at main.cgi line 93. このエラーの意味が分からないのですが、教えて頂けませんか?
285 名前:nobodyさん mailto:sage [2008/06/15(日) 20:40:23 ID:???] >>283 もう少し詳しく >>284 main.cgiというファイルの93行目で、連結の方法がおかしい。
286 名前:nobodyさん mailto:sage [2008/06/15(日) 22:45:56 ID:???] >>284 >>285 =~ s/連結の方法がおかしい/未定義値を文字列として評価している/; 例えば $foo が undef の状態で "foo$foo" とか 'foo' . $foo とか。
287 名前:nobodyさん mailto:sage [2008/06/16(月) 09:05:17 ID:???] おはようございます。 あるサブルーチンでファイルを扱おうとしています。 evalの中でopenしたファイルハンドルをエラー処理(if $@)で閉じるにはどうすればよいのでしょうか。 環境はperl5.8 use strictです。
288 名前:nobodyさん mailto:sage [2008/06/16(月) 10:45:47 ID:???] pc11.2ch.net/test/read.cgi/tech/1208674881/514 より #!C:/perl/bin/perl open(IN,"example.log"); while(<IN>){ $i++; if($i == 3){ $line .= "\t\t$_"; } else{ $line .= "$_"; } } close(IN); open(OUT,">example.log"); print OUT $line; close(OUT); print"Content-type:text/html\n\n"; print "変更完了";
289 名前:nobodyさん mailto:sage [2008/06/16(月) 10:49:36 ID:???] pc11.2ch.net/test/read.cgi/tech/1208674881/511 より #!C:/perl/bin/perl open(IN,"example.log"); while(<IN>){ unless($_ =~ /hoge/){ $line .= "$_"; } else{ $line .= "\n"; } } close(IN); open(OUT,">example.log"); print OUT $line; close(OUT); print"Content-type:text/html\n\n"; print "消去完了";
290 名前:nobodyさん mailto:sage [2008/06/16(月) 13:00:09 ID:???] >>288-289 せっかくお答えいただいたのにすみません。 私が知りたいのはスコープを跨ぐ場合の話です。 例えば、evalの中で宣言した変数をevalの外で使おうとすると、perlに叱られます。 ファイルハンドルの場合は叱られないのですが、これが作法に則った方法なのかわかりません。
291 名前:nobodyさん mailto:sage [2008/06/16(月) 14:31:35 ID:??? BE:177559834-2BP(1)] 案1) my $fh = IO::File 〜とかopen my $fh〜等を使って いちいち閉じなくていいようにする。 案2) use IO::File;して my $fh = *FH{IO}; $fh->close() if defined($fh) && $fh->opened();
292 名前:nobodyさん mailto:sage [2008/06/16(月) 16:00:58 ID:???] >>290 失礼。他のスレッドへの返答でした。 pc11.2ch.net/test/read.cgi/tech/1208674881/519 への回答 # 変数が半角スペースで始まっていれば、半角スペースを先頭一個だけ消去 if($example =~ /^ /){ $example =~ s/ //; } # 変数が全角スペースで始まっていれば、全角スペースを先頭から一個だけ消去 elsif($example =~ /^ /){ $example =~ s/ //; } 拙いですがどうですか?
293 名前:nobodyさん mailto:sage [2008/06/16(月) 16:05:48 ID:???] >>292 修正です。 # 先頭の全角スペース、半角スペースの連続を削除 $example =~ s/^([\ \ ]+)//;
294 名前:nobodyさん mailto:sage [2008/06/16(月) 17:36:08 ID:???] 流れがよく分からんけど、 もうひとつファイルを用意して、 書き出して言ったらダメなの? >>293 スクリプトとファイルの文字コードが同じならいいけど。
295 名前:nobodyさん mailto:sage [2008/06/16(月) 21:58:28 ID:???] >>291 ありがとうございます。 お答えいただいた案1がしっくりきたので、この方式で行きます。 またよろしくお願いします。
296 名前:nobodyさん mailto:sage [2008/06/17(火) 10:38:26 ID:???] >>294 すいません、超未熟でした。
297 名前:nobodyさん [2008/06/18(水) 00:25:23 ID:Mmy0x8n6] perlで、 print "あ"; で一秒待ってから print "い"; を実行する方法ってありますか? localtimeで受け取って1秒過ぎるまでwhileで空白を書き続けるってのも考えたんですが・・・ 負荷がかかりそうなんで。
298 名前:nobodyさん mailto:sage [2008/06/18(水) 01:19:02 ID:???] sleep 1;
299 名前:nobodyさん mailto:sage [2008/06/19(木) 06:37:25 ID:???] select undef,undef,undef,1;
300 名前:nobodyさん mailto:sage [2008/06/19(木) 10:35:29 ID:???] $| = 1;
301 名前:うっとりハムちゃん [2008/06/20(金) 15:05:12 ID:nHevfWAE] すいません、教えてください。 掲示板に書き込まれた内容に URLが含まれていた場合、 自動的にリンクになるようにしたいのですが、 簡単に追加する方法等がありますか? よろしくお願いします。
302 名前:nobodyさん mailto:sage [2008/06/20(金) 15:20:25 ID:???] URLかチェックして一致したらAタグ追加する。 正規表現 perl URL とかでググれば例が出てくると思う
303 名前:nobodyさん mailto:sage [2008/06/20(金) 22:01:17 ID:???] >>301 $_ =~ s/([^=^\"]|^)(http\:\/\/[\w\.\,\~\-\/\?\&\+\=\:\@\%\;\#\%\*]+)/$1<a href=\"$2\">$2<\/a>/g;
304 名前:nobodyさん mailto:sage [2008/06/20(金) 22:29:00 ID:???] …メタ文字じゃない文字をエスケープして意味あんの? 文字クラス中のエスケープは更に酷い。
305 名前:うっとりハムちゃん [2008/06/21(土) 03:14:25 ID:k6DOaEg8] 皆さんレスありがとうございます。 >303 さんの記述を一行足すだけではダメですよね? 例えば $comment 内に書き込まれた中から抜粋する際は それを指定する必要などはありますか?
306 名前:nobodyさん mailto:sage [2008/06/21(土) 07:47:06 ID:???] minibbsあたりのソースで見ましたね>余計なエスケープ
307 名前:nobodyさん mailto:sage [2008/06/21(土) 17:19:06 ID:???] >>305 print &autolink($comment); sub autolink { my $text = $_[0]; $text =~ s{(s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)}{<a href="$1">$1</a>}g; return $text; } 参考: Perlメモ www.din.or.jp/~ohzaki/perl.htm#httpURL
308 名前:うっとりハムちゃん mailto:sage [2008/06/21(土) 19:10:28 ID:???] できました!!! とても親切で、どうもありがとうございました!! 助かりました! m(_ _)m
309 名前:297 [2008/06/21(土) 21:40:03 ID:etCJxH2B] 遅くなりました。 ありがとうございました。
310 名前:nobodyさん mailto:sage [2008/06/23(月) 09:49:20 ID:???] 遅くなったのは、教わったとおりにsleepしてから書き込んだから
311 名前:nobodyさん mailto:sage [2008/06/23(月) 20:42:58 ID:???] だれかボスケテ。 ---post_data.cgi--- use CGI::Lite #read(STDIN,$buff,$ENV{'CONTENT_LENGTH'}); $param = CGI::Lite->new()->parse_form_data('POST'); print "Content-Type: text/plain\n\n"; print "$buff\n"; for (sort(keys(%$param))){ print "$_ = " . $param->{"$_"} . "\n"; } つう、なんの変哲もないファイルを書いて、これに、 ---test.js--- function reQuested_files( data,method,fName,async,callback){ var r_obj = crHttpReq(); r_obj.onreadystatechange = function(){ if(r_obj.readyState == 4){ callback(r_obj); } } r_obj.open( 'POST','post_data.cgi',async ); r_obj.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); r_obj.send( 'a=abcdeFG&b=123.4567&z=zzz' ); } から、javascriptのXMLHttpRequest(所謂ajaxってやつ)でのPOST送信のテストをしたんだけども・・・、
312 名前:311 mailto:sage [2008/06/23(月) 20:43:29 ID:???] これの戻り値を、 function callback_function(rs_obj){ var res = rs_obj.responseText; alert( decodeURI(res) ); } で、alert表示させた場合の結果がおかしい。 具体的にゆうと、これでIEからの送信だと、alertに a = abcdeFG b = 123.4567 z = zzz と、正確に(期待したとおりの)結果が返って来るんだが、最近出たばかりのFirefox3でやると、 結果alertになにも表示されない。 これjavascriptのせいかなと思って色々調べてみたんだが、まだはっきりとわからない。 けど試しに、上のレスのスクリプトで、コメントアウトしてる read() 部分を有効化させてやると、 どちらも同じ結果になる。(a=abcdeFG&b=123.4567&z=zzz) つまりこれは、STDIN(POSTデータの実体)は入ってるのに、CGI::Lite->parse_form_data('POST') で、なぜか狐3の時だけ、正常にパースされてない様なんだけど、どうなのかな? っと思って聞いてみた次第です。 (Web鯖のエラーログにも、値をParse出来ないみたいなerrorが出てました。) これから、Javascript関係のスレにも行ってみようかと思うんですが、 とりあえず上記のPerlコードに、問題がないか確かめたかったんです。(問題ないですよね?) ちなみに、htmlのフォーム上から、action="post_data.cgi" method="POST" で送った時は、IE,FFとも問題ありません。
313 名前:nobodyさん mailto:sage [2008/06/23(月) 22:23:59 ID:???] スレチなきもするが、非同期通信の呼び出し方法はブラウザごとに違うよ。 つ prototype.js
314 名前:311 mailto:sage [2008/06/24(火) 05:32:07 ID:???] >>313 ありがとうございます。そうなんですよ。 実はFF3リリース日に、別件でsync,ansyncについての挙動の違い(F1.5,2.0と3.0で)に遭遇しまして、 いろいろ調べてなんとかそちらの方は解消しました。今回のもやはり同様の理由かなぁ〜と思っていましたが、 原因判明しました。結論から言うと、javascript側だけの要因ではなく、Perl側にも原因があることがわかりました。 (割合は、とりあえず半々とゆうことにしときます。) >>311 の、post_data.cgiを、CGI::Liteだけでなく、CGI.pmにしてみたり、直でSTDINから読み込んだり、 同様のスクリプトをphpで実行したりして、原因突き止めました。 まず、IE6,7、Firefox1.5,2.0,3.0で、POSTしたデータそのものについては、1byteの違いもなかったんですが、 受け側により、処理の仕方に差異があるようでして、これの違いは、送り側の"Content-Type"にありました。 具体的には以下
315 名前:311 mailto:sage [2008/06/24(火) 05:38:53 ID:???] 送り側 ※ 実際の送信されるリクエストヘッダ IE 6 なし (なにも無し) IE 6 あり application/x-www-form-urlencoded IE 7 なし (なにも無し) IE 7 あり application/x-www-form-urlencoded FF 1.5 なし application/xml FF 1.5 あり application/x-www-form-urlencoded FF 2.0 なし application/xml FF 2.0 あり application/x-www-form-urlencoded FF 3.0 なし application/xml; charset=UTF-8 ※1 FF 3.0 あり application/x-www-form-urlencoded; charset=UTF-8 ※1 (※. setRequestHeader('...')の有無) (※1.表示しているカレントページのcharsetに関わらず、UTF-8で固定のようです。)
316 名前:311 mailto:sage [2008/06/24(火) 05:48:29 ID:???] モジュール ヘッダ(#1) パース(※) CGI::Lite なし 出来る CGI::Lite #2 出来る CGI::Lite #2 #8 出来ない CGI::Lite #3 出来ない CGI.pm なし 出来る(※) CGI.pm #2 出来る CGI.pm #2 #8 出来る CGI.pm #3 出来る(※) Apache2::Reuest なし 出来ない Apache2::Reuest #2 出来る Apache2::Reuest #2 #8 出来る Apache2::Reuest #3 出来ない php(おまけ) なし 出来ない php #2 出来る php #2 #8 出来る php #3 出来ない
317 名前:311 mailto:sage [2008/06/24(火) 05:56:14 ID:???] ずれまくりですいません。 >>315 については、一応RFCでは、フォームからの入力をPOSTする時には、必ず"application/x-www-form-urlencoded" をヘッダに含めなくてはならないとなっております。 また、上記と似たような検証をしていたサイトがあって(といっても、そちらは1年ほど前の時点での調査でしたが)、 このようにブラウザごとに差異があるので、XHRでPOSTメソッドをリクエストをする時は、 setRequestHeader('application/x-www-form-urlencoded')が ”必須” になるとも書いてありました。 一応ここまでが、Javascript側の要因です。 >>316 Perlに関しては #1 $ENV{'CONTENT_TYPE'}の値(ブラウザからのContent-Type リクエストヘッダ) #2 application/x-www-form-urlencoded #3 その他(text/plainなど)自前のLWPとHTTP::Request::Commonで、適当なリクエストヘッダをでっちあげて確認した。 #8 charset=UTF-8 ※.一般的なデータ取得関数を使って、変数に値をセットできるかどうか。例:CGI::Lite->parse_form_data()、CGI.pm->Vars()、 phpだと$value=$_POST{'name'}など。CGI.pmだけは特殊で、x-www・・・以外のどんな場面であっても、 "POSTED=name=value&name=value&name・・・・"とゆう形で取得できる。
318 名前:311 mailto:sage [2008/06/24(火) 05:57:06 ID:???] とゆうことで注目するのは、CGI::Liteだけ、"application/x-www-form-urlencoded"の後ろに"charset="が付くと、 データ取得関数でデータを取得出来ないことと、他の一般的なモジュールで本来取得できないハズの Content-リクエストヘッダ無しの場合でも、普通にデータを取得出来てしまえるところに、混乱した原因があるようだ。 ちなみに、上の調査の追記としては、read(STDIN.$var,$ENV{'CONTENT_LENGTH}) を使えば、 全てのパターンでデータの取得が可能。(パースとデコードは全て自分でやらないといけないですが) しかしながら、これを各moduleのデータ取得用関数の前に持ってくると、その後の取得関数が全てコケる。(値なしになる。) また、取得関数の後に持ってきても、その前の関数の成功失敗に関わらず、データを取得できない。(phpでは未確認) (多分STDINに対するファイルポインタが、終端まで行ってしまっためだと思う) 今までお恥ずかしいながら、ajaxに限らず、ほとんどCGI::Liteメインで書いてきた。(GET,POSTの違いも大して意識してなかった) それにモジュールのロードが軽い(自機での測定で、CGI.pm比約四倍早い)し、自分には、CGI.pmは機能が豊富すぎて、 使いこなせてないって思ってた。 だけど、今後のこと(新しいブラウザ対応とか)を考えるに、どうもCGI::Liteだけではやっていけなくなってしまいそう。 まあ、最終リリースからもう五年もメンテされてないんで、早く乗り換えろよってのはもっともな話だとは思うけど・・。 なんかくやしいなぁ。 313さんへ、 自分はJavascriptについては、prototype.jsやjQueryなどの外部ライブラリを使ったことがなくて、余り詳しくもないんだけど、 これからはどうしようかと検討中です。でも今回の件に限れば、自分が受け側をCGI::Liteで利用したのが原因で 多分外部ライブラリ使ってても同じ現象に遭遇してたと思います。そんな時は余計に、原因の究明に困ったかも知れません。 とゆうことで、長々と失礼しました。同じような問題で悩んでる人がいたら、参考にして下さい。
319 名前:316貼り直し mailto:sage [2008/06/24(火) 06:17:21 ID:???] mod (#1) (※) CL なし 出来る CL #2 出来る CL #2 #8 出来ない CL #3 出来ない Cp なし 出来る(※) Cp #2 出来る Cp #2 #8 出来る Cp #3 出来る(※) AR2 なし 出来ない AR2 #2 出来る AR2 #2 #8 出来る AR2 #3 出来ない php なし 出来ない php #2 出来る php #2 #8 出来る php #3 出来ない 説明は>>317 の通り。 CL=CGI::Lite、Cp=CGI.pm、AR2=Apache2::Request、php=php(おまけ)。 #2 #8 は application/x-www-form-urlencoded; charset=UTF-8 のこと。 Apache2::Requestのつづり間違えてた。
320 名前:nobodyさん mailto:sage [2008/06/24(火) 10:11:34 ID:???] cgiが正常ならクライアント側の問題だろ? prototype.jsを遣わない理由がどこにある。
321 名前:nobodyさん mailto:sage [2008/06/24(火) 14:59:55 ID:???] RequestHeaderが違ってくるのは、XMLHttpRequestメソッドとブラウザの問題だと思うんだけど。 ttp://www.fraction.jp/log/archives/2005/03/216 prototype.jsは関係ないんじゃない?と思ったが XMLHttpRequestでgrepしてみると /* Force "Connection: close" for older Mozilla browsers to work * around a bug where XMLHttpRequest sends an incorrect * Content-length header. See Mozilla Bugzilla #246651. */ こんなのが。補正してるってことかな? RequestHeaderによっては受け取れない部分はCGI::Liteの問題。 知らないとハマるから、良い検証だったと思います。乙
322 名前:nobodyさん mailto:sage [2008/06/25(水) 05:30:05 ID:???] >>320 さん >>321 さん 318です。仰るとおり、送って来るReuestHeaderが異なるのは、各ブラウザ側の挙動の違いの問題です。 その後、教えて頂いたprototype.jsのXHR周りの動作について、手持ちのブラウザで基本的な動作確認をしましたが、 やはり送ってくるRequestHeaderはブラウザごとに違います。設定によりいくらかのヘッダの操作も出来ますが、 FireFox3で、当該の"chaesrt=..."の部分を消すことは出来ないようです。 ( これもブラウザにより異なります。IEでもデフォで、"charset="が付いてきたりします。 ここら辺の違いを吸収してくれるハズのライブラリで、ブラウザごとに分かち書きとかしないといけないのは、 本末転倒のような気がします。まあJavascriptのことはスレ違いになるんで、言及はここら辺でやめときます。)
323 名前:322 mailto:sage [2008/06/25(水) 05:30:57 ID:???] で、何が問題かと言うと、実は今自分の運営しているサイトで、CGI::Liteで書いた既存のcgiが動いてるんですが、 現在、日中平均で30req/s前後、ピーク時で90-100req/s程度のリクエストがあります。このスクリプトを導入した際に、 CGI.pmとCGI::Liteでそれぞれベンチを取ったのですが、本番環境と同一ハード,ソフトの環境で、 CGI.pmだと40rq/s位で限界、CGI::Liteだと150-160rq/s位までは持ちこたえられるとの結果を得ましたので、 CGI::Lite版を採用することに決めました。(その時は、最大50rq/s程度が想定でしたが・・・) で、今回これと同じ処理をするcgiに、Jsからajaxリクエストを投げるような構成を考えていたのですが、 そのテストの段で、上記の>>311 のような問題に行き当たったわけです。 現実問題として、速度や負荷の観点から、今回もCGI::Liteで行こうと思ったのですが、上記のような問題のため (prototype.jsを使う使わないに関係なく)CGI::Liteが使えないので困ったなぁ とゆう感じです。 ( 実は、mod_perl+Apache2::Requestでは、同様の処理で 1800rq/s! とかベンチ出たんですが、 実験的な環境のため、そのまま本番環境には投入できません。)
324 名前:nobodyさん mailto:sage [2008/06/25(水) 10:26:42 ID:???] >>323 当然考えているとは思うけど、CGI::Lite に手を入れてしまうのがリーズナブルなんじゃないかな。 parse_form_data() 内で、 $content_type eq 'application/x-www-form-urlencoded' と判断しているので、これを =~ にでもすればいいだけなわけだし。
325 名前:nobodyさん mailto:sage [2008/06/25(水) 13:14:34 ID:???] 簡単なパースしかしないなら、モジュール使わない方法もあるんじゃね?
326 名前:nobodyさん mailto:sage [2008/06/28(土) 19:23:20 ID:???] HTMLフォームから送信されてきた文字列の中からURLを探しだして <a href=>のタグをくっつけたいんですが、cgiのURLとかで?が入ってると上手く置き換えできません。 これを回避する方法を教えていただければ幸いです。 $mojiretu =~ s/$url/<a href="$url">$url<\/a>/; #$ulに?が入ってると置き換えできない。
327 名前:nobodyさん mailto:sage [2008/06/28(土) 19:59:00 ID:???] >>326 上手く行くかどうかしらんし、根本的な解決にはならんかも知れんが、 $mojiretu =~ s/\Q$url\E/<a href="$url">$url<\/a>/;
328 名前:nobodyさん mailto:sage [2008/06/28(土) 20:12:33 ID:???] >>327 うはwできた ありがとおお!!
329 名前:nobodyさん mailto:sage [2008/06/28(土) 22:15:55 ID:???] 「\E までのパターン指定メタ文字の意味を打ち消す」 ってどういう意味かな?
330 名前:nobodyさん mailto:sage [2008/06/28(土) 22:29:45 ID:???] $str="a?b"; のとき、 /$str/ が /a?b/ じゃなくて、 /a\?b/ に展開されるようにしてくれる。
331 名前:nobodyさん mailto:sage [2008/06/28(土) 22:33:22 ID:???] ?が「パターン指定メタ文字」なんだな、たぶん。 それで、?があると、そのあとに続く文字が 特別な意味をもつんだな。 だからそれをエスケープ?しなくてはならなくて、 そのための呪文という意味か。よくわかりました。
332 名前:nobodyさん mailto:sage [2008/06/28(土) 22:50:41 ID:???] >>331 >それで、?があると、そのあとに続く文字が >特別な意味をもつんだな。 違うよw ま、追い追い勉強しなw
333 名前:nobodyさん mailto:sage [2008/07/01(火) 21:46:30 ID:???] perl -MCPAN -e shellの後に、install Math::BaseCalcしたら、 make: *** [test_dynamic] エラー 255ってでるんだよ どうしたら、解決出きるのか教えてください
334 名前:nobodyさん mailto:sage [2008/07/01(火) 23:37:34 ID:???] >>333 config で make program を変更してみるとか、、、フォースインストール するとか、、、 俺の場合はMath::BaseCalcじゃないけど、makeでコケた奴はソースで手動で コンパイルして入れたりもする。
335 名前:nobodyさん mailto:sage [2008/07/01(火) 23:40:04 ID:???] >>333 まずはインストール時のメッセージをじっくり調べてみてはいかがでしょう。
336 名前:うっとりハムちゃん [2008/07/05(土) 00:33:32 ID:NR2upuAB] すいません、おじゃまします。 cgiにアクセスした際に、同時に○○.phpを読み込む際のPerl記述を教えていただけると助かります。 よろしくおねがいします。
337 名前:nobodyさん mailto:sage [2008/07/05(土) 09:04:26 ID:???] つ system つ ``
338 名前:うっとりハムちゃん [2008/07/05(土) 13:03:49 ID:NR2upuAB] レスありがとうございます! 例えば○○.php を読み込みたい(実行したい)場合、以下では無反応なのですが、間違っていますか? system ("○○.php");
339 名前:うっとりハムちゃん [2008/07/05(土) 13:38:38 ID:NR2upuAB] 説明不足で申し訳ないのですが、用途としては、 phpカウンターをcgi(掲示板)実行時にも カウントさせたいのです。 IMGタグでphpを読み込んでもいいのですが、 これだと携帯で見た時に壊れた画像マークになっちゃうので。。。 それで、cgiを実行時にphpファイルも同時実行できないかと思い、困っています。 よろしくお願いします。
340 名前:nobodyさん mailto:sage [2008/07/05(土) 14:13:13 ID:???] 携帯でそうなる理由を調べてそれを解消したほうが早い systemで実行するなら/usr/local/bin/php xxx.phpとかだろうけど それでキミの欲しいものが得られるのか? http経由で呼ぶならそうすればいい
341 名前:うっとりハムちゃん mailto:sage [2008/07/05(土) 15:00:49 ID:???] できました! とても助かりました!! どうもありがとうございました。 m(_ _)m
342 名前:nobodyさん mailto:sage [2008/07/05(土) 20:33:29 ID:???] >>341 おめでとう。 何をどう変えてどのような望む動作が得られたのかはさっぱりわからんが。
343 名前:nobodyさん mailto:sage [2008/07/05(土) 21:27:12 ID:???] おそらく直に読んでカウンターが上がったんじゃないかと
344 名前:うっとりハムちゃん [2008/07/05(土) 23:02:34 ID:NR2upuAB] たびたびすいません (><) system ("/usr/local/bin/php ○○.php"); ↑これで うまくできたのですが、他のレンタルサーバーでも使おうと思ってみたら、 そっちではphpを読み込んでくれず、ソースコードが丸ごと表示されちゃいました。 サーバーによって動作は異なるのでしょうか?
345 名前:うっとりハムちゃん [2008/07/06(日) 01:29:25 ID:+aL1pH4z] もしかして system の場合、何か終了(閉じる?)を記載しないといけないのでしょうか? 単純にphpカウンターを実行するだけでいいのですが。。。
346 名前:nobodyさん mailto:sage [2008/07/06(日) 02:26:42 ID:???] >>344 そりゃあんた、その違うレンサバとやらがphp対応なのかどうかと、 phpの実行パスが/usr/local/bin/phpとは限らんだろう。 サーバによっては、httpからはphp実行出来ても、ユーザー権限で直接実行出来ないように 設定されてる場合もあるし。
347 名前:うっとりハムちゃん [2008/07/06(日) 02:40:09 ID:+aL1pH4z] ありがとうございます。 サーバー会社に問い合わせたところ、 system ("/usr/local/bin/php ○○.php"); で動作しますと言われました。 パスに関してはあっているようです。