08/05/08 20:59:09
>>174
../ が前方を巻き込んで消えるようにしたいのです
一行では無理でしょうか
176:nobodyさん
08/05/08 21:06:50
ごめんなさい。
完全に勘違いしてました。
こういうこと?
$str =~ s{[^/]*/(\.\./)+}{}g;
177:173
08/05/08 21:22:58
>>176
すみませんお手数おかけして…
それだと
ABC/DFG/HIJ/../ の時も
ABC/DFG/HIJ/../../ の時も
ABC/DFG/ になってしまいます
ABC/DFG/HIJ/../../ の時には
ABC/ になるようにしたいのです
178:nobodyさん
08/05/08 21:29:39
正規表現でどうにかする方向は>>176さんに任せつつ。
>>173
use File::Spec;
print File::Spec->canonpath('ABC/DFG/HIJ/../../'); # ABC
末尾のデリミタが消えたりしますが。
179:176
08/05/08 21:40:41
質問の趣旨がようやくわかった。ファイルパスの操作か。
こんなことしてどうするんだろうとか不思議に思ってた。
なんか寝ぼけてるな。
これを正規表現でどうにかしたのをみてみたい。
180:173
08/05/08 22:04:20
わ、最初からファイルパスと言うべきでした。すみません。
RSS出力のCGIをいじってて、文章中にあるリンクやimgタグがRSSフィードでは
絶対パスでないと働かないので、相対パスになってた時に絶対パスに置き換わるように
したかったのです。
$RSS_BASE_URI = "URLリンク($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
08/05/08 22:46:06
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', 'URLリンク(example.com)');
# URLリンク(example.com)
182:nobodyさん
08/05/08 22:46:10
>>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さん
08/05/08 22:47:32
ああ、やっぱモジュールがあったのねorz...
おまけにタワゴト書いてるし。
184:173
08/05/08 23:36:51
>>181
ごめんなさい。>>162です。
記事の中から該当部分を抜き出してまた戻す方法も分からない絶望的分からなさだったので
教えていただいたものを使うことができず、恥ずかし悲しくなりながら単純な置換だけでなんとか
やれないかと別の方向にごにょごにょしちゃってました。
もう少し勉強してそれを使えるようにがんばってみます。ありがとうございました。
>>182
移動してきてました…。
自分が知らないだけでこれもきっと一行ですむのだろうと思ってたら、そうでもないようですね。
勉強してなんとか単純置換以外も使えるようになろうと思います。ありがとうございました。
185:nobodyさん
08/05/09 04:31:31
モジュール使えで終了な話ではあるけどワンライナーでかけないのが悔しいorz
186:nobodyさん
08/05/09 07:34:10
せいぜい短くしても
$str="ABC/DFG/HIJ/../../././abc/efg" ;
1 while $str =~ s{([^/]*?/\.\./|\./)}{} ;
print $str . "\n" ;
程度だね。
187:nobodyさん
08/05/10 18:46:41 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さん
08/05/10 19:17:45
ヘッダは?
189:nobodyさん
08/05/10 20:49:00 jhS0+1hl
print "Content-type: text/html\n\n";
これですか?
190:173
08/05/10 21:11:01
>>186
あ、一行でもできたんですね!
ありがとうございます、動きました!
URLを抽出してモジュールに渡すのに悪戦苦闘してましたが、
このままできないのもくやしいのでそっちもがんばってきます。
191:nobodyさん
08/05/10 23:31:35
>>189
その行を print "<!DOCTYPE~ の行の前に書いてる?
あとエラーじゃなくて真っ白? ソースも?
192:nobodyさん
08/05/11 12:00:02 /WAyhnOg
>>191
はい。この行を書いて、一行改行してhtmlソースです。
ANHTTPDで真っ白でした。
前に$kaoとかを定義づけてるんですけども(ifで)それのミスなら500が出るかな、と思ったので。
193:181
08/05/11 17:10:05
>>190
「くやしいのでモジュール使うやりかたでもがんばってみる」方のようなので
ごにょごにょするときの参考にしてみてください。
use URI; # URIモジュールさん召喚。
my $RSS_BASE_URI2 = 'URLリンク(example.com)'; # 例。
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="URLリンク(example.com)">
# <a href="URLリンク(example.com)">latest</a>
# <a href="URLリンク(example.com)">Test Script</a>
__DATA__
<img src="../../../diary/././img/././test.jpg">
<a href="../../../diary/latest">latest</a>
<a href="URLリンク(example.com)">Test Script</a>
194:193
08/05/11 17:25:08
事故レスれす。
> $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さん
08/05/11 20:48:25
>>192
ANHTTPDの設定だと思うけどなー。
「ANHTTPD 真っ白」でぐぐったらなんか色々出てきたから
やってみたら
196:nobodyさん
08/05/12 04:25:47
ブラウザを使わずにBookOFなどの商用サイトに接続して本を検索したり注文したりする
Perlで可能でしょうか?
可能でしたら具体的に教えていただけないでしょうか
197:nobodyさん
08/05/13 03:27:45
そのサイトが検索用にAPIでも提供していれば
コマンドラインからの実行で検索は出来るはず(Amazon等)
注文までは知らね
198:nobodyさん
08/05/13 05:33:31
>>196,>>197
別にAPIとか対応して無くても、Formで受け付けてくれるなら(JavascriptやFlashでなければ)
気合さえあれば、検索も注文も出来る。
199:190
08/05/13 07:31:33
>>193
ありがとうございます、参考に……って回答だった!
自分のとこでも動きました。こんなに簡潔になるなんて感激です。
~ s/ 以下にも入れられたんですね…
一回やってエラーが出たので(多分何か抜けてた)
別の場所で動かしたそれを元に戻す過程がいるのかと
甚だしい勘違いをしてました。
何一つ自分で解決できなかったけどなぜか大きく成長したような気がしました
本当にありがとうございます。
CGIでやってみたいことはまだまだあるので次はgoogle的なもので
解決できるようになりたいものです。
200:nobodyさん
08/05/14 02:23:53
>>198
まあ、やって出来ない事は無いとは思うけど
気合いってよりは無駄な作業が多くなるでしょ
検索して返ってくるのはHTMLな訳だからそこから必要な物を切り出して
さらにフォームを探して送信する内容を整えて・・・
201:nobodyさん
08/05/14 04:27:20
>>200
そう、だから気合がいる。昔そんなのを書いてて、
「こんなん苦労して書く必要あんのかよ?しかも1サイトにしか通用しねえし・・」
とか思ったこともあるけど、気合(笑)でカバーした。あの頃は若かった。
202:196
08/05/14 04:44:38
みなさん情報ありがとうございます
ブラウザ無しでできるって事ですね
ブラウザ無しでデータをやり取りすると速いんじゃないかと思うのですが
実際どうでしょうか?
込み合ってるサイトもスイスイですか?
203:nobodyさん
08/05/14 05:50:58
>>202
それは、相手のサーバーの処理能力とか、回線状態による。
まあそのページが、Javascriptやら画像やらフレームやらで大変込み入った内容なら
ブラウザでレンダリングするよりかは早くなるかも知れん。
(向こうのレスポンスについては、こっちからじゃなんもでけん)
けど、HTMLを正規表現等でパースして、ifで場合分けして、Formに内容セットしてとかしてたら、
はっきり言ってブラウザでクリックしたりしてするのの楽さと比べて、そんな恩恵あるとは思えん。
なにより、そうゆうコード書くのにかなり気合を要する(w)。
まあやるのは自由だけど・・・。
DDosアタックでも仕掛けるのなら話は別だが・・。
204:nobodyさん
08/05/14 06:19:24
スイスイ具合は「画像オフ・JSオフ・CSSオフ」のブラウザと大差ないよ。レンダリングの有無だけ。
「Perlで書けばスイスイ!」だけを期待してるんだったら、やめれと。
でも、HTMLをパースしてCookieも食べて、フォーム仕立てて送信、お返事をパース…の繰り返しを書いて
意地でもPerlで注文してやる、というマゾな考えならそれはそれでありなのかもね。
205:nobodyさん
08/05/16 00:52:53
近所の古本屋さんでオライリーPerl リソースキット UNIX版Xと記載されたperlの解説本を発見!
定価15000円らしいのだが2000円の値札が付いている
CD付属でそのCDは未開封
パラパラッと立ち読みしたらWindows環境にも通用しそうな気がするんですよ
自分はWindows環境なんだけどこの本は勉強なりそうですか?
付録のCDはWindows環境でも使えそうですか?
ご存知の方お願いします
206:nobodyさん
08/05/16 12:23:26
>>205
それ、解説書じゃなくて、CPANにある
モジュールのドキュメントを和訳しただけのものだから。
しかも10年前のものだから。
URLリンク(www.oreilly.co.jp)
207:nobodyさん
08/05/16 16:32:25
>>206さん
ありがとうです
UNIXと記載がありますが2000円捨てるつもりで買ってみようかと思います
他にも古い本でプログラミングperlUNIXとか600円で売っていたんですよ
Windowsで動くのか心配だけど一緒に買ってみます
208:nobodyさん
08/05/16 16:37:16
XPのためにWin98の本買うようなもの
最新のドキュメントを探したほうがいい
古いの見ても混乱するだけ
209:nobodyさん
08/05/16 16:45:50
>>208さん
そうだなー
そう言われればその通りですよね
やっぱり見合わせます
ありがとうございます
210:nobodyさん
08/05/16 17:18:48
Perlほど解説本なしでネットでまかなえるプログラミング言語はないだろう
211:nobodyさん
08/05/19 01:43:18
コマンドプロンプトからユーザエージェントして返ってきた文字列が
英数字以外は文字化けしてます
コマンドプロンプト内で読めるように教えてください
jcode.plもエラーになります
212:nobodyさん
08/05/19 01:52:01
>>211
意味がわかりません。
> コマンドプロンプトからユーザエージェントして
とはどうゆうことですか?
213:nobodyさん
08/05/19 02:16:27
わかんないならスルーしろよ
なんで答えるの?
教えたらわかりそうなのか?
214:nobodyさん
08/05/19 02:24:16
>>213
いやあ、多分LWP-UserAgentのことかなとエスパー。
ほんで取ってきたページのソースがcp932じゃないから
コマンドプロンプトで文字化け。
実は俺も昔やったことがある。
だから聞いてみた。
215:nobodyさん
08/05/19 02:26:22
>>214
ぅぉぉぉー ヽ( ゚д゚)ノヽ(゚д゚ )ノ ぅぉぉぉー
わかってんじゃん
それそれ
cp932をも少し詳しく
216:nobodyさん
08/05/19 02:27:15
「CLI で LWP を飛ばしたら、CP932 じゃない文字列が返ってきます」まではわかるから、
もう一段階進んで
「jcode.pl は UTF-8 を知らんぞ」でいいのかな。
217:216
08/05/19 02:29:01
つーか、質問者さんがその態度で通すんだったら移動してくださいな。
くだらない質問でもど偉そうに聞いていいスレ
スレリンク(php板)
218:nobodyさん
08/05/19 02:40:29
>>215
次からは、もちっと質問を詳しく。
ほいで解決方だけど、
perl 実行したいスクリプト.pl > kekka.html
とでもして、そのファイルを各種文字コードで開けるエディタ(秀丸、TeraPad等)で開く
もし持ってなければ、とりあえずIEで開けばなんの文字コードかはわかる。
or
use Encode;(5.8以降標準で入ってる)
で文字コードをcp932に変換。
>>216
その可能性もあるかもだけど、多分、もともとのページの文字コードが分かってなかったら使えない。
(と思ったが、自動判別出来るんだっけ?もう長いこと使ってないから忘れちまった。)
あと、$response()->as_string() あたりでサーバーからのレスポンスヘッダが読めるから、
それでそのページの文字コードを判別しい。(か、もしくはhtmlの中の<metaを探すか)
219:nobodyさん
08/05/19 02:50:31
>>218
自動判別は (jcode.pl|Jcode.pm|Encode::Guess) な感じでいちおうあるよ。
# jcode.pl は UTF-8 に対応してないので、その辺はどうにもならない。
どれも「当たるとは限らん」ところが大事ですけど。
220:nobodyさん
08/05/19 02:50:47
>>217
気分悪いならスルーでいいよ
あなた個人を攻撃してるわけでもないのに
態度云々言われたらこっちが気分悪い
取り合えず2chには向いてないと思うよ
これからもし私を見かけてもスルーしてね
おちょくってるわけでもないのに変な奴だ
>>218
詳しくありがとう
221:nobodyさん
08/05/19 03:23:45
例の人が久々に来てたのか。エスパーたち、乙。
222:nobodyさん
08/05/19 10:53:12
またおまえかwww
223:nobodyさん
08/05/19 15:45:54
このバカ定期的に沸いてくるな
しかもあちこちに増殖している
224:nobodyさん
08/05/19 16:40:56
ふーん
人を馬鹿扱いできるほどお前稼いでるの?
税金なんぼ払ってるかいってみ
225:nobodyさん
08/05/19 16:59:25
失せろ
226:nobodyさん
08/05/19 17:15:21
キモイ
227:nobodyさん
08/05/19 18:46:02
稼いでる = 馬鹿でない
上の理論が成り立つと思ってるマヌケさ
228:nobodyさん
08/05/19 18:49:18
なんか自分を凄く見せたがる為に銭金の話をしたがる馬鹿いるよな
森伊蔵云々、ディナー云々
中学生のホラ自慢みたいw
229:nobodyさん
08/05/19 19:09:24
もう構うなってw
230:nobodyさん
08/05/19 21:49:23
みんなお疲れ様
わかる人お願いします
ソースコードutf-8で保存してから実行してみた
アクティブパール5.88
WindowsXp
ここからどうすれば日本語になるの?
use LWP::UserAgent;
use utf8;
use encoding 'cp932';
$ua = LWP::UserAgent->new();
$req = HTTP::Request->new("GET", "URLリンク(www.yahoo.co.jp)");
$res = $ua->request($req);
print $res->content();
231:nobodyさん
08/05/20 04:17:01
use LWP;
use Encode;
print encode('cp932',decode('utf8',LWP::UserAgent->new()->get('URLリンク(www.yahoo.co.jp)')->content()));
232:nobodyさん
08/05/20 04:28:46
>>231
私の環境ではエラーになっちゃったけど
物凄く参考になった
ありがとう
233:nobodyさん
08/05/20 04:36:24
>>231
できました!
スペースの文字コードを半角スペースに変えたらエラーにならないで実行できました
見事に日本語になってます
ありがとうございました!
234:nobodyさん
08/05/20 15:30:39
>>231をhtmlファイルで保存したいんだけどできない
すいませんまた教えてください
open(FH, '>>', "yahoolog001.html") or die "Cannot open content()!";
flock(FH, 2);
print FH qq|content()\n|;
235:nobodyさん
08/05/20 16:51:57
>>234
231をyahoo_get.plとでも名前付けて保存して、
perl yahoo_get.pl > yahoo001.html
236:nobodyさん
08/05/20 17:29:08
>>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さん
08/05/20 18:28:08
>>235
スクリプト内に入れてやれよww
print FH encode('cp932',decode('utf8',LWP::UserAgent->new()->get('URLリンク(www.yahoo.co.jp)')->content()));
238:nobodyさん
08/05/20 18:38:22
>>236
違う違う、235のは、コマンドラインから実行するんであって、perlスクリプトの中に書くんではない。
>>234とか見てると、ファイルのオープンとかはあってるけど、
オブジェクトとか、クラスメソッドとかのことを良く分かってないようなので、
とりあえず一行で書けるのにしてみた。
それから、君は>>211や>>230と同じ人(?、かどうかは定かではないが)
コマンドプロンプトから実行してるなら、リダイレクトや標準出力、標準入力等についてもある程度は理解がないと。
(Perlではないんで、入門書とかにはあんまり書いてないか。でも基本ってか常識レベルなんで、
わかってないとこれからしんどいよ。逆にわかってくると、いちいちスクリプトの中でやらなくていいことが増えるんで
書くのが楽になるし、理解も深まる。)
239:nobodyさん
08/05/20 18:42:43
wktk
240:nobodyさん
08/05/20 21:15:41
>>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('URLリンク(www.yahoo.co.jp)<)')->content();
ここからログインのテストしたいので
またお願いするかもしれませんが
その時はよろしくお願い致します
>>238さん
勉強方法詳しくありがとうございました
標準入出力の解説書なかなか見当たらないです
手持ちの解説書で標準入出力を解説しているのは
「perlデータマンジング」という本だけです
大変わかりやすく良書なのですが紙面の関係上さわり程度なのが残念です
何かお勧めの解説書があれば教えて頂ければ嬉しいです
ありがとうございました
241:nobodyさん
08/05/22 14:07:57
お世話になります
httpsでログイン可能な簡易ブラウザサンプルどこかないでしょうか?
自分が調べたところ2001年にある雑誌が付録で付けていたようなのですが
絶版になり各方面探しても見当たりませんでした
やりたいことはhttps接続での送受信です
お心当たりのある方よろしくお願い致します
242:nobodyさん
08/05/22 14:12:19
LPW
243:nobodyさん
08/05/22 14:12:53
間違えた笑
LWP
244:nobodyさん
08/05/23 20:25:12 VktSXUAF
sで一気にいくつかのものを変換する方法ありますか?
たとえるならあいうえおという文のあとおをかとこにおきかえたいんです。
245:nobodyさん
08/05/24 02:20:54
trじゃダメなの?
246:nobodyさん
08/05/26 19:32:51
どもお世話になります
あれから色々調べているんですけど
ログインや検索やセレクトメニューの選択やボタンクリックなど
具体的なサンプルってないですね
もしかしてperlで出来ないですか?
結局HACKER本買い捲ったんだけど
みんなHTMLの取得までなんですよ
そこからセレクトメニューを選んだりOKボタンをクリックするとか
できないんだろうか?
247:nobodyさん
08/05/26 19:36:22
お前は何を言っているんだ
248:nobodyさん
08/05/26 20:03:33
なんで?
perlでなんでも出来るって言ってたじゃないですか?
249:nobodyさん
08/05/26 20:18:52
ネタですか?
250:nobodyさん
08/05/26 20:35:06
>>248
もしかして>>196からの流れか?
ひょっとして画面が表示されて検索ワードが勝手に入力されてセレクトメニューが勝手に選択されてボタンが勝手に押されるとか
そういうのイメージしてる?
251:nobodyさん
08/05/26 20:47:35
>>250
それそれ
それです!
perlで出来るんですよね?
今のところそのようなサンプル見当たらないんですよ
自動ソフトのスクリプトとかならOKボタンのクリックなどは
初歩の初歩インストール後5分後には覚えれるくらい簡単なんですけど
perlの場合参考になるような記述すら見当たらないんですよ
超凄いらしい解説本やオライリーのHACKシリーズやWEBシリーズを購入したんですけど
全然すごくない
OKボタンの1回すら出てこない
なんでもできないのですか?
252:nobodyさん
08/05/26 20:54:44
それをやろうと思ったのはお前が最初で最後だと思うよ
253:nobodyさん
08/05/26 21:12:52
>>252
なんでですか?
perlでは出来ないってことなの?
254:nobodyさん
08/05/26 21:16:41
ちなみに自分はある自動ソフトで検索とか保存とか
WEB上での操作でやりたいことは大体教えてもらえましたよ
そのソフトを教えてくれる方たちはみんな普通にご存知でした
ただ遅いんですよorz
0.5秒で完結させたいんです
255:nobodyさん
08/05/27 02:30:31
>>252
自分は>>198や>>201なんだけど、多分初めてじゃないと思うぞ(w)
>>253,254
君のやりたいことってのが、GUIのツールみたく目に見える感じで動いて行くってのなら多分ムリ。
(Tkとか使ったら無理やりにでもできるかも知れん。でも自分はGUI系はからっきしなんで、よくわからん)
そうでなくて、コマンドラインから、ブラウザで操作したことと同じ結果を得るってことなら可能。
どんな本や、どんなページ参考にしたかわからないけど、
ちょっと上の方に出てるLWPなんかの解説や、CPANのmanualなんかをじっくり読めば(リンクを少々辿らないダメだけど)、
検索フォームにワード仕込んだり、”OK”ボタンを押すってことにもたどりつきそうだけど・・・。
256:255
08/05/27 02:31:04
でもまあ、サンプルでも書いとく。
use strict;
use LWP;
use Encode;
use HTML::Form;
my $pwd = `cd` . '\\';
my $cmd = 'C:\Program Files\Internet Explorer\iexplore.exe';
my $url = '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さん
08/05/27 03:14:05
また湧いたのか・・・
258:nobodyさん
08/05/27 03:29:45
>>255さん
ありがとうございます
まさにそれなんです
GUIを使わないで送受信してみたいんです
お疲れのところわざわざサンプルまで作って頂き本当にありがとうございます!
頂いたサンプルを参考にログインとかもチャレンジしてみます
ありがとうございました
259:nobodyさん
08/05/27 14:08:14
ブラウザのインターフェースに強引に割り込ませるのかと思ったわ
httpについて勉強するといいよ
260:nobodyさん
08/05/28 00:14:16 T0EpbUiq
ググったら趣旨が違うのしかでないんですが、
ifで、たとえば$Aに\という文字列が含まれる場合、
\が含まれています。とするにはどうしたらいいんでしょうか?
if($A =~ \\)
{print "\\が含まれています"}
でいけますか?
261:nobodyさん
08/05/28 02:23:14
if($A =~ /\\/)
262:nobodyさん
08/05/31 01:19:07
$in{'ext'} = extfind($in{'orgname'}); if(!$in{'ext'} && $in{'upfile'}){ &error(202); }
この処理ってどういう意味なのでしょうか?
263:nobodyさん
08/05/31 02:02:14
;
264:nobodyさん
08/05/31 15:52:59
>>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
08/05/31 15:54:58
戻り値をセットせなあかんから1行にまとめたら駄目だな・・orz
266:264
08/05/31 16:03:00
&error(202) if(!($in{'ext'} = &extfind($in{'orgname'})) && $in{'upfile'});
オリジナルと大して変わらんけどこうやればいけるか
スレ汚しスマソ・・
267:nobodyさん
08/05/31 18:48:39
より、この処理ってどういう意味なのでしょうか?
という質問が出易くなりますな。
268:nobodyさん
08/05/31 20:14:45
>>264
やっぱりperl難しいな・・・
URLリンク(sugachan.dip.jp)
拡張子合わずってログに記録したときは
ファイルをアップしないように改造しようかと
思ってるのだがなかなかできなくて。。。
$in{'ext'} = extfind($in{'orgname'}); if(!$in{'ext'} && $in{'upfile'}){ &error(202); }
を
$in{'ext'} = extfind($in{'orgname'}); if(!$in{'ext'}){ &error(202); }
に、しても普通にアップロードできてしまうし。。。どこがおかしい?
269:nobodyさん
08/05/31 20:40:29
>>268
そこのアップローダの改造の質問 って前にもどこぞで見たなあ。
で「改造スレに行け」と言われてたハズだが?
ソースが好みじゃないのでやる気にならん。…改造スレ行けば?
270:nobodyさん
08/06/04 08:35:22
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さん
08/06/04 10:11:46
postしてみろ
272:nobodyさん
08/06/04 14:06:46
GETで投稿出来ちゃうと、2chにリンク貼られまくったときにw
273:nobodyさん
08/06/06 23:21:44
sub getDirSize($)の($)ってどういう意味?
274:nobodyさん
08/06/07 02:53:47
>>273
プロトタイプ。
$は引数としてスカラーしかとらないってこと。
275:273
08/06/07 08:37:38
>>274
thx
276:nobodyさん
08/06/13 17:42:23 GNaVOr+f
UTF-8の16進コードを文字にしたいんですが、
pack('C*','0xe4','0xba','0xba')とやっても化けてしまいます。
どういう式を書けばいいのですか?
277:nobodyさん
08/06/13 18:06:20
pack('C*',0xe4,0xba,0xba) だとどうなる?
278:nobodyさん
08/06/13 18:32:03
>>277
ありがとうございます。できました。
裸のままでよかったのですね。
pack('H*','e4baba');
というのもあったみたいです。
今は10進→16進→文字なんですが、
10進から直接変換できますか?
279:nobodyさん
08/06/13 18:37:43
0xがついてなきゃ10進だよ。
pack('C*',228,186,186) とか
10進の数字しかないならpack('C*','228','186','186') でも通るけどな。
280:nobodyさん
08/06/13 19:26:54
ありがとうございます。
文字列との違いが判りました。
UTF-8のコード範囲を調べると
[\x00-\x7f]
[\xC0-\xDF][\x80-\xBF]
[\xE0-\xEF][\x80-\xBF][\x80-\xBF]
[\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF]
とあります。
これには他の言語も含まれているとおもいます。
先ほど教えていただいた変換で一覧を作ろうと思うのですが、中国語なども混ざってしまいます。
日本語のみの範囲はどのようなものなのでしょうか。
281:nobodyさん
08/06/13 19:41:37
URLリンク(ja.wikipedia.org)
282:nobodyさん
08/06/13 20:36:31
そういえば、日本語じゃなくても、
罫線とか利用している文字もありますね。
なかなか難しい。
283:nobodyさん
08/06/15 14:13:18
postやgetじゃなくて、普通にページにアクセスしたときの条件分岐が作りたいのですが、
そんなことはできませんか?
284:nobodyさん
08/06/15 14:29:37
Use of uninitialized value in concatenation (.) or string at main.cgi line 93.
このエラーの意味が分からないのですが、教えて頂けませんか?
285:nobodyさん
08/06/15 20:40:23
>>283
もう少し詳しく
>>284
main.cgiというファイルの93行目で、連結の方法がおかしい。
286:nobodyさん
08/06/15 22:45:56
>>284
>>285 =~ s/連結の方法がおかしい/未定義値を文字列として評価している/;
例えば $foo が undef の状態で "foo$foo" とか 'foo' . $foo とか。
287:nobodyさん
08/06/16 09:05:17
おはようございます。
あるサブルーチンでファイルを扱おうとしています。
evalの中でopenしたファイルハンドルをエラー処理(if $@)で閉じるにはどうすればよいのでしょうか。
環境はperl5.8 use strictです。
288:nobodyさん
08/06/16 10:45:47
スレリンク(tech板: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さん
08/06/16 10:49:36
スレリンク(tech板: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さん
08/06/16 13:00:09
>>288-289
せっかくお答えいただいたのにすみません。
私が知りたいのはスコープを跨ぐ場合の話です。
例えば、evalの中で宣言した変数をevalの外で使おうとすると、perlに叱られます。
ファイルハンドルの場合は叱られないのですが、これが作法に則った方法なのかわかりません。
291:nobodyさん
08/06/16 14:31:35 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さん
08/06/16 16:00:58
>>290
失礼。他のスレッドへの返答でした。
スレリンク(tech板:519番) への回答
# 変数が半角スペースで始まっていれば、半角スペースを先頭一個だけ消去
if($example =~ /^ /){ $example =~ s/ //; }
# 変数が全角スペースで始まっていれば、全角スペースを先頭から一個だけ消去
elsif($example =~ /^ /){ $example =~ s/ //; }
拙いですがどうですか?
293:nobodyさん
08/06/16 16:05:48
>>292
修正です。
# 先頭の全角スペース、半角スペースの連続を削除
$example =~ s/^([\ \ ]+)//;
294:nobodyさん
08/06/16 17:36:08
流れがよく分からんけど、
もうひとつファイルを用意して、
書き出して言ったらダメなの?
>>293
スクリプトとファイルの文字コードが同じならいいけど。
295:nobodyさん
08/06/16 21:58:28
>>291
ありがとうございます。
お答えいただいた案1がしっくりきたので、この方式で行きます。
またよろしくお願いします。
296:nobodyさん
08/06/17 10:38:26
>>294
すいません、超未熟でした。
297:nobodyさん
08/06/18 00:25:23 Mmy0x8n6
perlで、
print "あ";
で一秒待ってから
print "い";
を実行する方法ってありますか?
localtimeで受け取って1秒過ぎるまでwhileで空白を書き続けるってのも考えたんですが・・・
負荷がかかりそうなんで。
298:nobodyさん
08/06/18 01:19:02
sleep 1;
299:nobodyさん
08/06/19 06:37:25
select undef,undef,undef,1;
300:nobodyさん
08/06/19 10:35:29
$| = 1;
301:うっとりハムちゃん
08/06/20 15:05:12 nHevfWAE
すいません、教えてください。
掲示板に書き込まれた内容に URLが含まれていた場合、
自動的にリンクになるようにしたいのですが、
簡単に追加する方法等がありますか?
よろしくお願いします。
302:nobodyさん
08/06/20 15:20:25
URLかチェックして一致したらAタグ追加する。
正規表現 perl URL とかでググれば例が出てくると思う
303:nobodyさん
08/06/20 22:01:17
>>301
$_ =~ s/([^=^\"]|^)(http\:\/\/[\w\.\,\~\-\/\?\&\+\=\:\@\%\;\#\%\*]+)/$1<a href=\"$2\">$2<\/a>/g;
304:nobodyさん
08/06/20 22:29:00
…メタ文字じゃない文字をエスケープして意味あんの?
文字クラス中のエスケープは更に酷い。
305:うっとりハムちゃん
08/06/21 03:14:25 k6DOaEg8
皆さんレスありがとうございます。
>303 さんの記述を一行足すだけではダメですよね?
例えば $comment 内に書き込まれた中から抜粋する際は
それを指定する必要などはありますか?
306:nobodyさん
08/06/21 07:47:06
minibbsあたりのソースで見ましたね>余計なエスケープ
307:nobodyさん
08/06/21 17:19:06
>>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メモ
URLリンク(www.din.or.jp)
308:うっとりハムちゃん
08/06/21 19:10:28
できました!!!
とても親切で、どうもありがとうございました!!
助かりました! m(_ _)m
309:297
08/06/21 21:40:03 etCJxH2B
遅くなりました。
ありがとうございました。
310:nobodyさん
08/06/23 09:49:20
遅くなったのは、教わったとおりにsleepしてから書き込んだから
311:nobodyさん
08/06/23 20:42:58
だれかボスケテ。
---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
08/06/23 20:43:29
これの戻り値を、
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さん
08/06/23 22:23:59
スレチなきもするが、非同期通信の呼び出し方法はブラウザごとに違うよ。
つ prototype.js
314:311
08/06/24 05:32:07
>>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
08/06/24 05:38:53
送り側 ※ 実際の送信されるリクエストヘッダ
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
08/06/24 05:48:29
モジュール ヘッダ(#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
08/06/24 05:56:14
ずれまくりですいません。
>>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
08/06/24 05:57:06
とゆうことで注目するのは、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貼り直し
08/06/24 06:17:21
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さん
08/06/24 10:11:34
cgiが正常ならクライアント側の問題だろ?
prototype.jsを遣わない理由がどこにある。
321:nobodyさん
08/06/24 14:59:55
RequestHeaderが違ってくるのは、XMLHttpRequestメソッドとブラウザの問題だと思うんだけど。
URLリンク(www.fraction.jp)
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さん
08/06/25 05:30:05
>>320さん >>321さん
318です。仰るとおり、送って来るReuestHeaderが異なるのは、各ブラウザ側の挙動の違いの問題です。
その後、教えて頂いたprototype.jsのXHR周りの動作について、手持ちのブラウザで基本的な動作確認をしましたが、
やはり送ってくるRequestHeaderはブラウザごとに違います。設定によりいくらかのヘッダの操作も出来ますが、
FireFox3で、当該の"chaesrt=..."の部分を消すことは出来ないようです。
( これもブラウザにより異なります。IEでもデフォで、"charset="が付いてきたりします。
ここら辺の違いを吸収してくれるハズのライブラリで、ブラウザごとに分かち書きとかしないといけないのは、
本末転倒のような気がします。まあJavascriptのことはスレ違いになるんで、言及はここら辺でやめときます。)
323:322
08/06/25 05:30:57
で、何が問題かと言うと、実は今自分の運営しているサイトで、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さん
08/06/25 10:26:42
>>323
当然考えているとは思うけど、CGI::Lite に手を入れてしまうのがリーズナブルなんじゃないかな。
parse_form_data() 内で、
$content_type eq 'application/x-www-form-urlencoded'
と判断しているので、これを =~ にでもすればいいだけなわけだし。
325:nobodyさん
08/06/25 13:14:34
簡単なパースしかしないなら、モジュール使わない方法もあるんじゃね?
326:nobodyさん
08/06/28 19:23:20
HTMLフォームから送信されてきた文字列の中からURLを探しだして
<a href=>のタグをくっつけたいんですが、cgiのURLとかで?が入ってると上手く置き換えできません。
これを回避する方法を教えていただければ幸いです。
$mojiretu =~ s/$url/<a href="$url">$url<\/a>/; #$ulに?が入ってると置き換えできない。
327:nobodyさん
08/06/28 19:59:00
>>326
上手く行くかどうかしらんし、根本的な解決にはならんかも知れんが、
$mojiretu =~ s/\Q$url\E/<a href="$url">$url<\/a>/;
328:nobodyさん
08/06/28 20:12:33
>>327
うはwできた
ありがとおお!!
329:nobodyさん
08/06/28 22:15:55
「\E までのパターン指定メタ文字の意味を打ち消す」
ってどういう意味かな?
330:nobodyさん
08/06/28 22:29:45
$str="a?b";
のとき、
/$str/
が
/a?b/
じゃなくて、
/a\?b/
に展開されるようにしてくれる。
331:nobodyさん
08/06/28 22:33:22
?が「パターン指定メタ文字」なんだな、たぶん。
それで、?があると、そのあとに続く文字が
特別な意味をもつんだな。
だからそれをエスケープ?しなくてはならなくて、
そのための呪文という意味か。よくわかりました。
332:nobodyさん
08/06/28 22:50:41
>>331
>それで、?があると、そのあとに続く文字が
>特別な意味をもつんだな。
違うよw
ま、追い追い勉強しなw
333:nobodyさん
08/07/01 21:46:30
perl -MCPAN -e shellの後に、install Math::BaseCalcしたら、
make: *** [test_dynamic] エラー 255ってでるんだよ
どうしたら、解決出きるのか教えてください
334:nobodyさん
08/07/01 23:37:34
>>333
config で make program を変更してみるとか、、、フォースインストール
するとか、、、
俺の場合はMath::BaseCalcじゃないけど、makeでコケた奴はソースで手動で
コンパイルして入れたりもする。
335:nobodyさん
08/07/01 23:40:04
>>333
まずはインストール時のメッセージをじっくり調べてみてはいかがでしょう。
336:うっとりハムちゃん
08/07/05 00:33:32 NR2upuAB
すいません、おじゃまします。
cgiにアクセスした際に、同時に○○.phpを読み込む際のPerl記述を教えていただけると助かります。
よろしくおねがいします。
337:nobodyさん
08/07/05 09:04:26
つ system
つ ``
338:うっとりハムちゃん
08/07/05 13:03:49 NR2upuAB
レスありがとうございます!
例えば○○.php を読み込みたい(実行したい)場合、以下では無反応なのですが、間違っていますか?
system ("○○.php");
339:うっとりハムちゃん
08/07/05 13:38:38 NR2upuAB
説明不足で申し訳ないのですが、用途としては、
phpカウンターをcgi(掲示板)実行時にも
カウントさせたいのです。
IMGタグでphpを読み込んでもいいのですが、
これだと携帯で見た時に壊れた画像マークになっちゃうので。。。
それで、cgiを実行時にphpファイルも同時実行できないかと思い、困っています。
よろしくお願いします。
340:nobodyさん
08/07/05 14:13:13
携帯でそうなる理由を調べてそれを解消したほうが早い
systemで実行するなら/usr/local/bin/php xxx.phpとかだろうけど
それでキミの欲しいものが得られるのか?
http経由で呼ぶならそうすればいい
341:うっとりハムちゃん
08/07/05 15:00:49
できました!
とても助かりました!!
どうもありがとうございました。 m(_ _)m
342:nobodyさん
08/07/05 20:33:29
>>341
おめでとう。
何をどう変えてどのような望む動作が得られたのかはさっぱりわからんが。
343:nobodyさん
08/07/05 21:27:12
おそらく直に読んでカウンターが上がったんじゃないかと
344:うっとりハムちゃん
08/07/05 23:02:34 NR2upuAB
たびたびすいません (><)
system ("/usr/local/bin/php ○○.php");
↑これで うまくできたのですが、他のレンタルサーバーでも使おうと思ってみたら、
そっちではphpを読み込んでくれず、ソースコードが丸ごと表示されちゃいました。
サーバーによって動作は異なるのでしょうか?
345:うっとりハムちゃん
08/07/06 01:29:25 +aL1pH4z
もしかして system の場合、何か終了(閉じる?)を記載しないといけないのでしょうか?
単純にphpカウンターを実行するだけでいいのですが。。。
346:nobodyさん
08/07/06 02:26:42
>>344
そりゃあんた、その違うレンサバとやらがphp対応なのかどうかと、
phpの実行パスが/usr/local/bin/phpとは限らんだろう。
サーバによっては、httpからはphp実行出来ても、ユーザー権限で直接実行出来ないように
設定されてる場合もあるし。
347:うっとりハムちゃん
08/07/06 02:40:09 +aL1pH4z
ありがとうございます。
サーバー会社に問い合わせたところ、
system ("/usr/local/bin/php ○○.php");
で動作しますと言われました。
パスに関してはあっているようです。