1 名前:nobodyさん mailto:sage [2008/03/03(月) 05:07:32 ID:???] このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 Perl使いが優しくコメントを返しますが、 お礼はPerlの布教と初心者の救済をお願いします。
98 名前: ◆EtAiUEg7/Q mailto:sage [2008/04/10(木) 18:30:49 ID:???] >>89 今更ですが range operator の誰向けでもないフォロー、ありがとうございます。 説明しようとして「左項が真になるとスイッチが入り…えーと…perldoc」でしたので。 「よくもまあ」ではあるんですが、仕事もヒマな時期でしたし ・いつも見てるスレに何かが来る ・自分が回答 ・「理解できない。でもありがとう」と言って(一旦)去る …これで他の方の被害が少しは減るのなら、と。 ソフ板辺りも壮大なことになってそうですが、あちらは見てないので関わってません。 教えてちゃんですらないんですよね。 結果が欲しい、手法には興味がない(と書くと「違う」と返されるだろうけど)、と。 そんなわけだから処理系自体がコロコロ変わったりもするわさ、と。 腰を据えて初心者本でお勉強という方向へは行かない人なのでしょう。 本当は自分もこんな話は書きたくないんですが、誰かが書かないと日記が延々と続くんだなあ と思ったので、NG用に捨てトリつけた次第です。 >>96 短気を起こしていろんな人を煽っても、いいことないですよ。 そういえば、私の短気なとこを直せば世界が変わると教えてくれた人がいました。 (レス|回答)自粛の方が続出、と。まあ、仕方ないというか自然な流れでしょうな。 捨てトリももう要らなくなって、ここは素敵な日記スレに移行かな。
99 名前:nobodyさん mailto:sage [2008/04/10(木) 18:31:42 ID:???] >>96 はKY
100 名前:nobodyさん mailto:sage [2008/04/10(木) 18:35:01 ID:???] まーくだすれだしアリっちゃアリ。
101 名前: ◆EtAiUEg7/Q mailto:sage [2008/04/10(木) 18:37:23 ID:???] >>99 =~ s/96/97/; # 勝手に直しとく
102 名前:nobodyさん mailto:sage [2008/04/10(木) 18:44:02 ID:???] >>97 おぉやっぱりあなたか あなたが顔を真っ赤かにしながらレスしている姿は笑えないよ (まぁ吹いちゃってしまったのだがwww) なんか難しい説明されてもよくわからない くだすれ = くだらないスレ と教えてくれたのですが しかも超初心者とまで付け足してあるw まさに私のためのスレだと思ったよ スレタイは業者の釣りえさだったのか 気づけよ>>自分www そんなに必死になるほどのことでもないので むしろどーでもいいことなんだけど 気になったからやってるだけで 質問者は回答に飢えている この心理を突いた網だったのだ ネットでネット(網)張ってましたねw 洒落にもならないけど実際そういう人がいてたのか・・・ 必死やのー ま、気長にやっていくのであなたは私を気遣う必要ないですよ んじゃね
103 名前:nobodyさん mailto:sage [2008/04/10(木) 18:52:33 ID:???] >子供の言い合いみたいなのに付き合ってられないので >以降その手の話題は私にはしないで結構ですレスもしないです リャマ本からの引用 「Perlは、少なくとも毎日20分間はプログラムを書く--そしてほとんどのプログラムをPerlで書く--人向けの言語です。」 もし、毎日書くか事情があるなら>>89 の引用 >その煽りの文章を考える暇があったら(中級以上のリファレンスを買うんではなく)初心者本でも素直に買って読めよ。 腰を長くすえるなら応用のきくやつを学べ。 アドバイスいっぱい転がってるじゃん。 あと、おまえなじられたら死ぬのか?
104 名前:nobodyさん mailto:sage [2008/04/10(木) 18:54:15 ID:???] | | ∩___∩ | | ノ _, ,_ ヽ (( | プラプラ / ● ● | (=) | ( _●_) ミ _ (⌒) J )) 彡、 |∪| ノ ⊂⌒ヽ / ヽノ ヽ /⌒つ \ ヽ / ヽ / \_,,ノ |、_ノ / ぷちっ / ∩___∩ . 从 / | ノ ヽ / / ● ● | (=)ヽし | ( _●_) ミ/ ` ノ 彡、 |∪| ノ / / ヽノ / ノノ / / / / ムシャ | ムシャ | ∩___∩ | ぷらぷら | ノ ヽ (( | / ● ● | J )) . (( | ( _●_) ミ ・ 彡、 |∪}=) ,ノ ∴ / ヽ/^ヽ ヽ 。 | ヽ \ | | ヽ__ノ
105 名前: ◆EtAiUEg7/Q mailto:sage [2008/04/10(木) 18:57:11 ID:???] >>102 何か、私にはわからない謎の陰謀にお気づきになった様子ですが 自分が>>78 の次に書いたのは>>97 ですよ。 「私=ここで客を待ち構えてる業者」ということにしたいのでしたら、どうぞご自由に。 # こんなとこで客を拾うのってめんどくさそうだなーとしか思えないけど。
106 名前:nobodyさん mailto:sage [2008/04/10(木) 19:00:59 ID:???] よくわからんが私の質問どっかいっちゃったのは確か棚
107 名前:nobodyさん mailto:sage [2008/04/10(木) 19:01:12 ID:???] 久々に叩かれまくられてるのを見た 超初心者でもここまでの香具師はそうそういまい
108 名前:nobodyさん mailto:sage [2008/04/10(木) 19:02:32 ID:???] レスしてるのは俺ひとりなんだけどな。
109 名前:nobodyさん mailto:sage [2008/04/10(木) 19:09:35 ID:???] 電波役になったり電波に煽られる役になったり◆EtAiUEg7/Q役になったりしながら ひとりでスレ回すのってマジ大変。
110 名前:nobodyさん mailto:sage [2008/04/10(木) 20:06:37 ID:???] くだすれ = くだらないスレじゃなくて 詳しい人が見たらくだらない質問だと思ってたけどな。 >>1 を読んでもそう取れる。
111 名前:nobodyさん mailto:sage [2008/04/10(木) 23:57:10 ID:???] >>102 おまえ、キチガイで名をはせたヨシオカヒデノリだろ。キチガイっぷりがそっくりだ。
112 名前:nobodyさん mailto:sage [2008/04/12(土) 00:00:56 ID:???] >>87 >>なんか思い込み激しいね が>>87 を見ても>>102 を見ても自分の発言に対して書いてるようにしか思えない点について
113 名前:nobodyさん mailto:age [2008/04/13(日) 13:47:51 ID:???] 元気でやっとるかね^^ ちょっとわからないことがあってまた落書きしに来たのだw 解答いただけたら嬉しいけど期待できないのはわかっているので 気長に解答者さん待ってみるよ^^; @抽出部分の検索文字を <object (.+?)object> にすると (.+?)の部分だけが取れて 始めに出てくるはずの <object と 最後の object> が現れないんだよね 変数宣言の名前を全部変えてみたけど動くので特別な変数名は使っていないようだ perl自体がそういう仕様なのかね?? Aそれから複数行抽出なんだけど 1行もしくは2行もしくは3行ってのはダメなのかな? (s<title(.+?)title>|<title(.+?)\n(.+?)title>|<title(.+?)\n(.+?)\n(.+?)title>s); Bそれからまだあるんだよね <title> <object> <span> この3箇所を抽出したいんだけど何故か最後に書いたトコだけが取れるんだ { と } の間に3つとも書いているんだけど ファイルクローズして改めてファイルオープンするって手順にするべきなのだろうか? 今はソースぐちゃぐちゃでワケワカメになってきたw 全集600ダメだ オープン オブ ダイ で ダイの部分が予約語なのか調べて見てもわかんない 他の本でdieの意味がわかる せめて予約語は全部掲載してもらいたいもんだ それでは@〜Bよろしく願います また会おう^^; シーユーあげ印w
114 名前:nobodyさん mailto:sage [2008/04/13(日) 15:31:39 ID:???] (〜´-`)〜
115 名前:nobodyさん mailto:sage [2008/04/13(日) 18:34:17 ID:???] 向うでデリミタの質問をしたのもコイツか? お前のせいで、他の人の質問でも答える気にならんのだよ自重してくれんかね。
116 名前:nobodyさん mailto:sage [2008/04/13(日) 18:44:46 ID:???] 便乗したのがコイツだろ…進歩の無いコテが答えたからいいけどさ あのコテも短レスで時々全然ボケた答え返すんだよなあ消えてくんねえかな
117 名前:nobodyさん mailto:sage [2008/04/14(月) 01:20:54 ID:???] ('A`)前進しないよ これの27行目 closedir(DIR); でエラーになるんだけどなんで? #!/perl/bin/perl use strict; use warnings; print "<html>\n"; &traverse_html("."); print "</html>\n"; sub traverse_html { my $dirname = shift; my $delim = '/'; if ($dirname =~ /[\/\\]$/) { $delim = ''; } print "<ul>\n"; opendir(DIR, $dirname) or die "$dirname: $!"; foreach my $entry (readdir(DIR)) { next if ($entry eq '.'); next if ($entry eq '..'); my $filename = "$dirname$delim$entry"; if (-d $filename) { print "<li>$entry\n"; &traverse_html($filename); } else { &do_html($filename, $entry); } } closedir(DIR); print "</ul>\n"; }
118 名前:nobodyさん mailto:sage [2008/04/14(月) 08:31:02 ID:???] >>117 再起してるからじゃね?先にファイル一覧を取得してclosedirしてから再起呼び出しするか、 ディレクトリハンドル(DIR)をローカル変数に浮かすかすればインジャネ? traverse_html ※1 の中で traverse_html ※2 を呼び出す → ※1のDIRを※2で上書きする → ※1に戻ったとき ※2のDIRはclose済み テストしてないから動くかは知らんけどこんな感じ。 sub traverse_html { my $dirname = shift; my $delim = '/'; my @entrys = undef; my $i = 0, $j = 0; if ($dirname =~ /[\/\\]$/) { $delim = ''; } print "<ul>\n"; opendir(DIR, $dirname) or die "$dirname: $!"; foreach my $entry (readdir(DIR)) { next if ($entry eq '.'); next if ($entry eq '..'); $entrys($i++) = $entry; } closedir(DIR); for ($j=0;$j<$i;j++){ my $filename = "$dirname$delim$entrys($j)"; if (-d $filename) { print "<li>$entrys($j)\n"; &traverse_html($filename); } else { &do_html($filename, $entrys($j)); } } print "</ul>\n"; }
119 名前:nobodyさん mailto:sage [2008/04/14(月) 13:27:25 ID:???] >>118 さん レスありがとう^^ 試してみたら my @entrys = undef; my $i = 0, $j = 0; 部分でエラーになって以下関連箇所もエラーになるんだよね >>117 のコードでのエラー文こんな感じ closedir() attempted on invalid dirhandle DIR at itiran-tes.pl line29 構文チェックではエラーにならない デバッグの識別子チェックというのを実行してみたらエラー箇所がわかって タイトルとファイル名は取得されていてリンクも貼られているようだ >>117 の closedir(DIR);がエラーにならないように出来たら ワンステップだけど前進出来そうなんだよね もうちょっと色々試してみるよ 朝のあわただしい中わざわざレスしてくれてありがとう 丁寧に教えてくれて感謝してまふ んじゃ
120 名前:117 mailto:sage [2008/04/14(月) 13:33:05 ID:???] >>117 には続きがあるんだけど 2chの文字数制限で記載できなかったんだ #ここに>>117 の部分がある sub do_html { my ($filename, $entry) = @_; return unless ($filename =~ /\.html?$/); open(FILE, $filename) or die "$filename: $!"; my $file = join('', <FILE>); close(FILE); my $title; if ($file =~ m|<title>(.*?)</title>|si) { $title = $1; $title =~ s/[\r\n]//g; } else { $title = $entry; } print qq|<li><a href="$filename">$title</a>\n|; }
121 名前:118 mailto:sage [2008/04/14(月) 15:57:05 ID:???] とりあえず、Linux Perl v5.8.6で動かしてみた。 117と120をつなげて動かしたら動いたよ。 OSやPerlインタプリタのの問題かな?
122 名前:nobodyさん mailto:sage [2008/04/14(月) 16:17:14 ID:???] >>121 「オープン オブ ダイ」の話を書いてから12時間で readdir でぶん回して再帰もしちゃうんだぞ、ってところが問題なんだと思うよ。
123 名前:117 mailto:sage [2008/04/14(月) 16:47:14 ID:???] >>121 さん そうなんだ わざわざテストしてくれたんだ(;´д⊂ヽありがとう WindowsXP アクティブパール5.88 シグウィンでもっかいテストしてみて作者にメールしてみるよ ありがと >>122 何が問題なのだ? 質問も解答もしないのに横から茶々入れてるあなたのほうがよっぽど問題なのだが・・・ 購入した本にサンプルが付いていた 動かないので自分で解決できないか模索した どこがおかしいのだ あんたの頭かw
124 名前:nobodyさん mailto:sage [2008/04/14(月) 17:20:05 ID:???] 向うで再帰の質問をしたのもコイツか? お前のせいで、他の人の質問でも答える気にならんのだよ自重してくれんかね。 >その煽りの文章を考える暇があったら(中級以上のリファレンスを買うんではなく)初心者本でも素直に買って読めよ。
125 名前:117 mailto:sage [2008/04/14(月) 17:21:37 ID:???] cygwinで動いたんだけどcdのhtmlからの取得はしていなかった サビフォルダーに置いていたhtmlからの取得は全部おk コマンドプロンプトで確認したんだけど ファイルは作成されていない コマンドプロンプトの操作画面に現れたものを ファイルに保存するのはどうすればいいですか? 取りあえず>>122 は答えなくていいよ どうせ野次るだけなのは明白だ 自分でも探してみるけど 私に理解できるように答えれる方おられましたらよろしくお願いします
126 名前:nobodyさん mailto:sage [2008/04/14(月) 17:22:29 ID:???] >その煽りの文章を考える暇があったら(中級以上のリファレンスを買うんではなく)初心者本でも素直に買って読めよ。
127 名前:nobodyさん mailto:sage [2008/04/14(月) 17:23:21 ID:???] >>124 それ勘違い 再起わかんないので具体的な質問できないよ その質問には答えてあげればイイヨ どうせ私が見てもわかんないのでヨロシコ
128 名前:nobodyさん mailto:sage [2008/04/14(月) 17:25:31 ID:???] 再帰を「再起」と書く初心者が同じ日に二箇所に現われるもんかねえ。
129 名前:nobodyさん mailto:sage [2008/04/14(月) 17:27:06 ID:???] >>126 「超初心者用」と「初心者用」購入したんだけど ささっと変数を解説したらCGIの話ばかりで ファイル操作は最後のほうでちょびっとだけ解説してるんだ なぜかperlの解説本は「CGI」「CGI」の連呼でキモい
130 名前:nobodyさん mailto:sage [2008/04/14(月) 17:29:05 ID:???] >>128 誤字がどうしたのだ? そんなの関係ないと思う 小心者だねw
131 名前:むこうの928 mailto:sage [2008/04/14(月) 18:04:05 ID:???] >>124 ,>>128 激しくゴメン。別人です。 何日か前から、こっちがこんなことになってるから、むこうで聞いてみた。 (まあ実際WebProgではないんだけど) しまった”再帰”か〜。 つっても再起でコケてるわけではなくて、(まただw) どうも =~ s///e の”e”でこけてるようなんだ。 正規表現絡みで、しかもこっちこんな状況だったからあんま書き込みたくなかったんだけど 案の定つっこまれてしまった。 まあいいや、今は時期が悪かったってことで、暫く消えます。
132 名前:nobodyさん mailto:sage [2008/04/14(月) 20:11:42 ID:???] 一応、お詫びします。迷ったけどこっちに書きます。 貴方が本当に別人なら理解出来るでしょう。 ====================== 当方、確認の術を持たないので(win環境なし)。 s///e の問題にしろ再帰の問題にしろ、再帰を使うほどの ネタでは無さそう。あくまでも適当に書いた例だけど。 # Wide character warning が出るのは御愛嬌。 use utf8 ; my %hash = map{ my $new = $_ ; $new =~ s/(\d)(\d)/$1十$2/ if length $new == 2 ; $new =~ s/1十(\d)/十$1/ ; $new =~ tr/123456789/一二三四五六七八九/ ; $new =~ s/0// ; $_, $new ; } 1 .. 99 ; while(my $line=<DATA>){ $line =~ s/(\d+)条/$hash{$1}条/; print $line ; } __DATA__ 3条 24条 10条
133 名前:nobodyさん mailto:sage [2008/04/14(月) 20:48:09 ID:???] こっちでいいのかな? >>131 ActivePerl5.8.8(build816) で試そうとしたんですけど、標準入力からうまく食ってもらえず。 で、__DATA__ と <DATA> にしたり open(IN, '<', 'list.utf8'); binmode(IN, ":utf8"); 以下略にしたりしてみたら 意図どおり(のはず)の出力になりました。perl.exe も落ちず。 # CP932 な環境で binmode(STDIN, ":utf8") って考えたこと自体がないのでよくわからない。 >>115 >>124 諸事情により疲れすぎて疑心暗鬼になってるように見えますよ。 諸事情のほうは継続の気配なので、少し休まれては如何かと。
134 名前:130 mailto:sage [2008/04/15(火) 02:25:32 ID:???] こっちにレスがついてた。みんなサンクス >>132 イエッサー。わかりますとも。自分でも向こうに書き込んだ後に、ハッシュ使えばs///eも再帰も必要ないかなって思った。 処理速度もこっちのほうが速いし。でも自分で書いたのはこんなの。うーん、いまイチスマートにならないなあ。 my $kanj; for (1..99){ my $kan = $_; $kan = substr($_,0,1) . '十' . substr($_,1,1) if($_ >= 10); $kan =~ tr/123456789/一二三四五六七八九/; $kan =~ tr/0//d; $kan =~ s/一十/十/; $kanj->{"$_"} = $kan; }
135 名前:130 mailto:sage [2008/04/15(火) 02:26:02 ID:???] >>133 あれ、ちゃんと動きましたか? うちでは昼間とは別のPC(PerlのVerは同じ)でやってみたけど、やっぱり例のWindowsダイアログが出て落ちる。 で、いろいろあがいてみたところ、上では、再帰ではないっぽいこと言ったけど、やっぱり再帰に問題ありかと。 特にif($num>=20)のところで、$1と$2を同じ関数に再帰してるとこで、次の正規表現マッチで$1$2あたりが壊れるんではないかと。 (ちなみに、これまたCentOS4,Perl-5.8.8-5.rpmだと期待通りに動く) 上で再帰ではないと思ったのは、あのスクリプトを、use utf8;とbinmode関係コメントアウトして実行してみると、 (当然tr/123.../のところで文字列がぶっ壊れるけど)、最後まで落ちずに走ることと、 以前に正規表現($1$2や$'$`$&も)使いまくりで、さらに6-7段ぐらいネストした関数書いた時も、期待通りに動いてくれたんで、 ちゃんと覚えてくれてるものかと思ってた。これからは、どうやらこれを改めないといけないようだ。 > # CP932 な環境で binmode(STDIN, ":utf8") って考えたこと自体がないのでよくわからない。 自分は、Win上でもtextは基本的にUTF-8で保存してるもんで、(本番環境がLinuxなのもあるけど)ワンライナーっぽく書くときは、 コードの中でopenやら、encode(decode(...))やら書くのメンドいんで、perl script.pl < infile.txt > puts.txt みたな感じを多用してます。 ちなみに、向こうのコードをopen(IN...)とかでやっても、ウチの環境ではやっぱりperl.exeが落ちるのは変わらない。
136 名前:134,135 mailto:sage [2008/04/15(火) 02:27:42 ID:???] ごめん、激しくゴメン。 名前欄>>131 の誤りです。 やっぱり消えます。
137 名前:nobodyさん mailto:sage [2008/04/15(火) 04:16:40 ID:???] >>135 大変失礼しました、重ねてお詫びします。 >>133 >諸事情により疲れすぎて疑心暗鬼になってるように見えますよ。 >諸事情のほうは継続の気配なので、少し休まれては如何かと。 ほんとにその様です。穴があったら入りたいw
138 名前:nobodyさん mailto:sage [2008/04/15(火) 04:17:12 ID:???] 俺も穴があったら入りたい(性的な意味合いで)
139 名前:nobodyさん mailto:sage [2008/04/15(火) 15:19:10 ID:???] これからジュンク堂とヨドバスカメラとbook1stとアサヒヤと紀伊国屋行ってみる りゃまbonがいいんだね 先日、立ち読みしたラクダの本かな? アレファイル操作詳しく載ってるの? 取りあえず今日はperlの絵本というのを探してみようかと思う ま行ってみるよ んじゃ
140 名前:133 mailto:sage [2008/04/15(火) 17:04:26 ID:???] 事故レス。 > 標準入力からうまく食ってもらえず。 test.pl < list.utf8 > converted.utf8 # 0バイトのファイル生成で頭抱える。 test.pl < list.utf8 # 何も吐いてくれない。 perl test.pl < list.utf8 > converted.utf8 # …ちゃんと食ってくれますね。 他人様の疲れを気にする前に、寝ぼけた自分をどうにかしろと。 >>135 要件通りに動くことより「なんで perl.exe が落ちるのはどうして?」が本題ですよね。 ちと時間があったので追試しました。 # 上記寝ぼけから醒めたので STDIN から食う元通りのコード # 食わせたのは for (1..99) { print "ふんにゃか市$_条\n" } で作ったファイル 5.8.8-816 on Win2kSP4 → 正常動作。 5.8.8-819 on WinXPSP2 → 正常動作。 # ビルドを上げる 5.8.8-822 on WinXPSP2 → アッー! # 本当に落ちたので下げた 5.8.8-820 on WinXPSP2 → 正常動作。 build822 だと見事に落ちますねえ。
141 名前:nobodyさん mailto:sage [2008/04/15(火) 19:22:38 ID:???] みごとな検証、お疲れ様。 質問者様が見てくれるといいが。
142 名前:nobodyさん mailto:sage [2008/04/15(火) 23:20:39 ID:???] >>140 原因が同じか違うかもさっぱりわからないが、 5.8.8 build822だとStorableを使ったコードで 大量のstorableデータ(50MB強)を読み込ませると読み込みが終わらない、 という現象にあたったことがある。 同一コードで、build817、あるいは5.10.0 build1001, 1002 では問題なかった。 というわけで、個人的にbuild822は信用していない。 参考情報と言うことで。
143 名前:nobodyさん mailto:sage [2008/04/16(水) 16:55:29 ID:???] *本当の検証*が向こうに出てたので、>>131 さんもご覧になるでしょう。 まあ、元々向こうのネタですし。 # きちんと問題の切り分けして再現する最小コード出す辺りが「向こう」なのかも。 自分のは検証でなく、「おらの環境では動いたずら」だけではひどいと思ったので 補足した程度ですから。 >>142 build822 をインスコすると build821 用の release.(html|txt) が入ってて萎えるんですが CHANGES.txt で build821, 822 だけに書かれてる > plus additional selected changes from the Perl 5.9 development branch. これが気になってます。 > Build 821 was only distributed for HP-UX. ここは…笑うところなのかな。 build822 が5.8系の latest ではあるんですが、自分も同じ印象です。 配布CGI+改造のテスト程度は大丈夫なんでしょうけどね。
144 名前:135 mailto:sage [2008/04/16(水) 20:08:19 ID:???] みなさん本当にありがとうございます。 向こうで見事な回答を頂きました。(Cコードを読み解く力がないので具体的なことはよくわかりませんが・・。) >>140 わざわざ試して頂いてありがとうございます。 自分の記憶では、817->819と820->822でバイナリ互換が崩れる(DBIやEncode、Uni-Jpなんかを再ビルドしないといけない)ので、 古いバージョンに戻してまでやってみようと言う気が起きませんでした。 (ちなみに819->820は再ビルド無しでモジュールが動きました。) >>142 ,>>143 そうですか、build822はあんまりよろしくないのかな? 向こうの返答では、5.10系でも同様に落ちるらしいので、むしろこのコードで動いているほうがよろしくないってことで 修正されたんではないかと思いますが、実際のところよくわかりません。(動くことによる不具合が思いつかない。) 今度ヒマな時にでも、Linux環境でperl-5.10をソースからコンパイルして同じコード試して見ます。 まあどちらにせよ、再帰の中で、tr///(s///も?)を使うようなコードは書かないようにしないといけないっぽいですね。
145 名前:質問 [2008/04/16(水) 23:05:19 ID:oAcDKLtn] ブラウザを閉じると、指定したファイルのデータを消すようにしたいのですが perlで良い方法がありましたら教えてください。
146 名前:nobodyさん mailto:sage [2008/04/17(木) 09:24:21 ID:???] >>145 サーバにいるPerlさんは、クライアントのブラウザが閉じたかどうかを知らないよ。
147 名前:nobodyさん mailto:sage [2008/04/18(金) 01:33:43 ID:???] JavaScript併用
148 名前:145 [2008/04/18(金) 07:47:12 ID:ThTU7HIn] >>146 サーバサイドだからやっぱり無理なんですかね・・ いいモジュールとか有ると期待していたんですが。。。 >>147 JavaScriptのどういったものが教えてください
149 名前:nobodyさん mailto:sage [2008/04/18(金) 10:00:46 ID:???] 閉じたら消すじゃなくて 開いたら消すにすれば?
150 名前:nobodyさん mailto:sage [2008/04/18(金) 14:57:49 ID:???] JavaScriptならonUnloadで消去用のスクリプトを実行させれば? もしくは実行終了のタイミングが予測出来るなら folkなりthreadなりで子プロで消すとかね そもそも消さなきゃならないデータなんて置かなきゃ良いんだよw どうせダウンロードされたくない画像やら動画やらなんだろうけど そんなもんはブラウザのキャッシュからいくらでも回収出来るからなぁ
151 名前:nobodyさん mailto:sage [2008/05/01(木) 01:13:00 ID:???] foreach で読み込むときに異なる行を複数取得教えてください foreachの前で下記のようにやってみたらエラーになります $str1 =~ /あいうえお/; $str2 =~ /さしすせそ/;
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でなければ) 気合さえあれば、検索も注文も出来る。