1 名前:nobodyさん [2009/02/16(月) 11:42:29 ID:gvPTpodw] Perlのコーディングで困ってる人のスレです。 【投稿する際の注意】 質問するときは内容をよく吟味してから投稿してください。 「コマンドの意味がわかんない」とかはマニュアル見ましょう。 回答者さんは何でも屋じゃありません。 1: 自分はこういう事がしたい。 2: それでこんな風にやってみたが・・・ 3: こんなエラーが出て上手く行かなかった。 最低でも1と3が無いと誰も答えられないよ。 良い回答は良い質問から。一緒に勉強しましょう。 お勧めサイトは >2 以降 前スレ pc11.2ch.net/test/read.cgi/php/1218030872/
114 名前:偽者 mailto:sage [2009/03/01(日) 00:53:45 ID:???] まあまあ、俺に免じて許してやって JAPU
115 名前:nobodyさん mailto:sage [2009/03/01(日) 01:21:33 ID:???] いろんなところのcgiじゃなくてcpanモジュール見なさい。 君が見てる「いろんなところのcgi」とやらは例外なくゴミだから。
116 名前:nobodyさん mailto:sage [2009/03/01(日) 02:49:23 ID:???] BEGIN CHECK INIT ENDなどの特殊なメソッドについて調べたいんですが、なんてググったらいいですか?あと、perldocのどの項目見たらいいですか?
117 名前:nobodyさん mailto:sage [2009/03/01(日) 03:00:05 ID:???] >>116 perldoc.jp/docs/perl/5.8.8/perlmod.pod begin end check init block perl 辺りで。 PODをgrepした方が速いけどね。
118 名前:nobodyさん mailto:sage [2009/03/01(日) 03:21:26 ID:???] はてなとかで、perlでキーワード検索して、perl書いてる人のブログを追っていくと良い。 その前に、初めてのPerlと続・初めてのPerlを読んだ方が良いかな。
119 名前:nobodyさん mailto:sage [2009/03/01(日) 16:15:08 ID:???] use Moose;するとuse strict; use warnings;が含まれるので、 CPANでstrict, warnings使ってないじゃないか、 という揚げ足取りをされないために、念のため補足
120 名前:nobodyさん mailto:sage [2009/03/01(日) 16:27:40 ID:???] Mooseだけど、 システム開発を本職でやってる人たちって、やっぱオブジェクトつくるときMooseつかってる人多いの? 俺は仕事の補助的にperl使ってるだけで、今はスカラをblessして使ってるけどMooseに切り替えて見ようかなとか検討中。
121 名前:nobodyさん mailto:sage [2009/03/01(日) 16:50:17 ID:???] こないだ出たモダンPerl入門を少し立ち読みしてみたらいいと思う けっこうしっかりとMooseについて纏められているよ
122 名前:nobodyさん mailto:sage [2009/03/01(日) 17:20:11 ID:???] Moose の本って、1冊しかないの?
123 名前:nobodyさん mailto:sage [2009/03/01(日) 17:20:33 ID:???] >>121 情報サンクス。 近くにその本置いてそうな本屋がないくらいど田舎なんで、 モダンPerl入門を森林組合に注文してみた。
124 名前:nobodyさん mailto:sage [2009/03/01(日) 17:50:25 ID:???] >>122 Moose自体は2006年頃に初登場だから 比較的新しくてたぶん他にはないんじゃないかな ブログとかにも情報なくはないよ
125 名前:nobodyさん mailto:sage [2009/03/02(月) 00:11:21 ID:???] 流れ的にこんな質問していいのか分からんけど CGI.pmでクエリキーは得られるが値がundefになる。誰か助けて。 use strict; use warnings; use CGI; my $query = new CGI->new(); my @params = $query->param(); print ''.$ARGV[0]."\n"; for my $key (@params) { print $key. "="; print $query->{$key} || ''; } $ perl cgitest.pl hoge=moge hoge=moge hoge= 環境はActivePerl 5.10.0/CGI.pm 3.41です。
126 名前:nobodyさん mailto:sage [2009/03/02(月) 00:15:02 ID:???] new CGI->new(); こんな書き方初めて見たお(´・ω・‘)
127 名前:nobodyさん mailto:sage [2009/03/02(月) 00:31:20 ID:???] >>124 perldoc CGI; すれば一瞬で解るようなことなんだが。 まあ、取り敢えず$query->param($key)して落ち着け。 ハッシュで得たいならmy %query = $query->Vars();しとけ。
128 名前:nobodyさん mailto:sage [2009/03/02(月) 00:31:51 ID:???] アンカーミス... OTL
129 名前:nobodyさん mailto:sage [2009/03/02(月) 00:35:54 ID:???] >>120 Moouse/Mouseもハッシュベースじゃないオブジェクトは (無理じゃないけど)アレだよ。 どうしても必要があるとき以外は、俺はハッシュベースにしてる。 で、Moose/Mouseだけど、OOにするのと同様に、 或る程度以上の規模のプロジェクトならありがたみが増すけど、 そうでなくて、かつ、現状で満足できているなら、 無理に使わなくても十分やってけると思う。 まあ、one liner用のooseとかもあるくらいだから、 ちっこいプロジェクトでも使いではあるけどね。
130 名前:nobodyさん mailto:sage [2009/03/02(月) 00:38:03 ID:???] my $query = CGI->new->new; こう解釈されるのか。 案外普通だ。
131 名前:nobodyさん mailto:sage [2009/03/02(月) 00:57:22 ID:???] >>127 がーん、俺の使い方が間違ってたのか。 後付けになるけど今までActivePerl 5.6/CGI.pm 3.04を使っていて、>>125 の書きかたでも通ってたんだ。 今までに作ったスクリプトは全部書き直しだなぁ。 どうもありがとうです。
132 名前:nobodyさん mailto:sage [2009/03/02(月) 03:09:00 ID:???] >>125 ハッシュレフとアクセサが分かって無かったんだろうな。 > my $query = new CGI->new(); CGIがDamianの言ってることガン無視で組んでたからたまたま動いてると。
133 名前:nobodyさん [2009/03/02(月) 22:03:42 ID:bC9LrltQ BE:781119656-2BP(1028)] my $input ="//commentA \n var1 = 3 ; //commentB \n varx = 8 ;"; my $src_regex = qr/((\n\s+)var1\s=[^;]+;.*)\n/; my $dest = "\$1\$2varp = 5;\n"; $input =~ s/$src_regex/$dest/sg; $1,$2を変数の中に入れると置換されないのは 仕様?
134 名前:nobodyさん mailto:sage [2009/03/02(月) 22:12:50 ID:???] 仕様。
135 名前:nobodyさん mailto:sage [2009/03/02(月) 22:46:57 ID:???] >>133 今ひとつ掴めないが。 my $dest = q{"$1$2varp = 5;\n"}; $input =~ s/$src_regex/$dest/sgee;
136 名前:nobodyさん [2009/03/02(月) 22:50:15 ID:bC9LrltQ BE:911305875-2BP(1028)] >>135 Evalするとエラ〜になりまつ Scalar found where operator expected at (eval 1) line 1, near "$1$2" (Missing operator before $2?) Bareword found where operator expected at (eval 1) line 1, near "$2varp" (Missing operator before varp?) Use of uninitialized value in substitution iterator at ./s.pl line 15.
137 名前:nobodyさん [2009/03/02(月) 22:52:49 ID:bC9LrltQ BE:650933055-2BP(1028)] >>135 早とちりしてた。 動きました。 なんで?
138 名前:nobodyさん [2009/03/02(月) 23:05:28 ID:jCf+CacP] 1: 自分はこういう事がしたい。 ぜろちゃんねるのスクリプトを使用した掲示板を設置し、 test070124 ttp://0ch.mine.nu/public/scripts/ そこにアップローダを備えて誰でも過去ログをアップすることが出来る板を 設置しようと考えました。ただアップするだけではなくインデックスも更新できる ような仕様を目指しました。 2: それでこんな風にやってみたが・・・ それで無事に掲示板とphpのロダも設置し、問題なく動作。 インデックスを更新するには管理者がログインして更新しなければならず、 アップした人が外部からインデックスを更新できるように remake.cgi ttp://a1or4qsl6.hp.infoseek.co.jp/okiba/index.html というものを使いました。 3: こんなエラーが出て上手く行かなかった。 しかし、ローカルではすんなりとロダで上げる、インデックスの更新も 問題なかったのですが、鯖でやるとレス番がズレるという問題が発生しました。 パーミッションの設定もいろいろイジったのですがどうしてもレス番 がズレ、繰り返すうちに板全体がおかしくなるのです(あるはずのないスレが発生など)。 なにが問題なのかよいアドバイスをよろしくお願いします。
139 名前:nobodyさん mailto:sage [2009/03/02(月) 23:48:16 ID:???] >>136 /sgee; のeは一個でeval()一個と同等。 $destの中身をevalを使って評価してる。 my $dest = q{"$1$2varp = 5;\n"}; $input =~ s/$src_regex/eval $dest/sge;
140 名前:nobodyさん mailto:sage [2009/03/03(火) 00:09:40 ID:???] 同等とは聞くけど、これはだめなんだよな? $foo = q(huh?); $foo =~ s/huh\?/die(q(huh))/e; if ($@) {print q(died)}
141 名前:nobodyさん mailto:sage [2009/03/03(火) 00:10:50 ID:???] そもそも () ってネスト出来たっけ?
142 名前:nobodyさん mailto:sage [2009/03/03(火) 00:53:19 ID:???] >>140 期待してるのはこう? my $foo = q(huh?); $foo =~ s/huh\?/"die(q(huh))"/ee; if ($@){ print q(died) } eval()って書いたのは、eval EXPRを示したかっただけだから突っ込まないでくれ。 eval BLOCKとは異なることを言いたかった。
143 名前:nobodyさん mailto:sage [2009/03/03(火) 01:26:39 ID:???] >>142 そうそう。 2個目のeからeval EXPRで外側を囲まれる感じとでも理解しておけばいいのかな? どうもありがとう。
144 名前:nobodyさん [2009/03/03(火) 13:34:16 ID:YRhfBR/o] OSXでperl開発をしているんですが、ある日突然@INCが変わってしまい、それまで動いていた プログラムが動かなくなってしまいました。思い当たる節としてはport でgnuplotを入れた際に 偉い時間がかかったのでそのときに何か変更されたのではと思っています。 perl -le 'print for @INC' /sw/lib/perl5 /sw/lib/perl5/darwin /opt/local/lib/perl5/5.8.8/darwin-2level /opt/local/lib/perl5/5.8.8 /opt/local/lib/perl5/site_perl/5.8.8/darwin-2level /opt/local/lib/perl5/site_perl/5.8.8 /opt/local/lib/perl5/site_perl /opt/local/lib/perl5/vendor_perl/5.8.8/darwin-2level /opt/local/lib/perl5/vendor_perl/5.8.8 /opt/local/lib/perl5/vendor_perl . 現在このようになっており、/Library/Perl/5.8.8などがサーチパスから外されています。 @INCを定義しているファイルってどこにあるんでしょうか。 もう、困るなあ。。
145 名前:nobodyさん mailto:sage [2009/03/03(火) 13:39:15 ID:???] 吸いません。自己解決しました。 2chに書き込むと解決する法則が発動したな。 she-bangで#!/usr/bin/env perlとしていたため、/usr/bin/perlではなく/opt/local/bin/perlが使われていました。 ナンタルチーヤ! 勝手にパールいれんな。
146 名前:nobodyさん mailto:sage [2009/03/03(火) 13:47:20 ID:???] #!/usr/bin/env perl こういう書き方がそもそも悪い てゆか、ソースコードは1行独立で書こうよ。 文中に含まれると可読性悪い。
147 名前:nobodyさん mailto:sage [2009/03/03(火) 19:13:25 ID:???] 質問です。 静的なHTMLファイルのフォームから、cgiを叩いて、次のページを表示させるという、 至って普通なことをしているのですが、IEだと正しくHTMLが解釈されてページが表示されるものの、 operaとFirefoxでは、plaintextとして、ソースが表示されてしまいます。 cgiにお約束の一文も入れてから、HTMLを吐いています。 print "Content-type: text/html\n\n"; ヘッダの最初はこんな感じです。文字コードも間違いなくeucで出力されていることも確認しました。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "www.w3.org/TR/html4/loose.dtd "> <html lang="ja"> <head> <meta http-equiv="content-type" content="text/html; charset=euc-jp"> <meta http-equiv="content-style-type" content="text/css"> <meta http-equiv="content-script-type" content="text/javascript"> <meta http-equiv="cache-control" content="no-cache"> … </head> <body>…</body> </html> operaとFirefoxでソースを保存しようとすると、なぜか表示されているtextではなく、cgiを叩いて失敗した 画面のソースが保存されてしまうため、仕方なく、表示されるtextをそのままコピペで.htmlで保存して、 operaとFirefoxで開いてみると、HTMLは正しく解釈されて表示されています。 なにかヒントになりそうなことがあれば、ご教示願います。
148 名前:nobodyさん mailto:sage [2009/03/03(火) 19:25:29 ID:???] きっとなにか勘違いしてるだけだよ落ち着いて
149 名前:147 mailto:sage [2009/03/03(火) 19:29:13 ID:???] 自己解決しますた。 以前に書いたソースなので、自分でもよく覚えていないのですがw print "Content-type: text/html\n\n"; の前に、printで出力している部分がありました…(デバッグ用だったのかなあ…)
150 名前:nobodyさん mailto:sage [2009/03/03(火) 19:30:06 ID:???] >>417 俺ならまずtelnet(または同等のツール)でcgiを叩く
151 名前:nobodyさん [2009/03/03(火) 19:32:23 ID:x3eHsIxd] ifの使い方が良くわかりません、点数でランク分けする処理を2つ行いたいのですが以下の2通りの書き方のうちどちらが正しいのでしょう? if ($tensuua < 10) {$ranka = 3;} elsif (tensuua < 20) {$ranka = 2;} else {$ranka = 1;} if ($tensuub < 10) {$rankb = 3;} elsif (tensuub < 20) {$rankb = 2;} else {$rankb = 1;} ------------------------------------------------------------------------------------------ if ($tensuua < 10) {$ranka = 3;} elsif (tensuua < 20) {$ranka = 2;} elsif (tensuua < 30) {$ranka = 1;} elsif ($tensuub < 10) {$rankb = 3;} elsif (tensuub < 20) {$rankb = 2;} else {$rankb = 1;}
152 名前:147 mailto:sage [2009/03/03(火) 19:33:00 ID:???] >>150 それで気がつきますよね。 何故か、print "Content-type: text/html\n\n";の前に、出力している部分は opera、FFで確認できなかったので、telnetで確認すべきでした。 というか、これは500エラーにならないんだろうか…
153 名前:nobodyさん mailto:sage [2009/03/03(火) 22:44:52 ID:???] >>151 $が抜けてる所があるから、どちらも間違い。 直したとしても、要求仕様が分からないから判断できない。
154 名前:nobodyさん mailto:sage [2009/03/04(水) 01:10:40 ID:???] あのーAcmeってネタモジュールですか?
155 名前:訂正 [2009/03/04(水) 06:49:37 ID:+iuw4LCF] >>153 点数でランク分けする処理を2つ行いたいのですが($tensuuaと$tensuubの数値によってそれぞれに対応する$rankaと$rankbの中身を書き換える)以下の2通りの書き方のうち どちらが正しいのでしょう? 以前にif→elsifとせずif→ifを並べたらバグって変数内の数値が出鱈目になったことがありました、そのときは2つ以上の条件を同時に満たした上、 書き換えられる変数が同じ名前でした。今回、上のソースだとif→ifと同じように間違っているのか、変数が違うから問題ないのかがわかりません。 if ($tensuua < 10) {$ranka = 3;} elsif ($tensuua < 20) {$ranka = 2;} else {$ranka = 1;} if ($tensuub < 10) {$rankb = 3;} elsif ($tensuub < 20) {$rankb = 2;} else {$rankb = 1;} ------------------------------------------------------------------------------------------ if ($tensuua < 10) {$ranka = 3;} elsif ($tensuua < 20) {$ranka = 2;} elsif ($tensuua < 30) {$ranka = 1;} elsif ($tensuub < 10) {$rankb = 3;} elsif ($tensuub < 20) {$rankb = 2;} else {$rankb = 1;}
156 名前:nobodyさん mailto:sage [2009/03/04(水) 07:13:20 ID:???] if もし○○ならば elsif ○○ではなくて××ならば elsif さらに××でもなくて△△ならば というだけの話なのだが
157 名前:nobodyさん [2009/03/04(水) 07:46:56 ID:+iuw4LCF] >>156 if ( $a > 10 ){なんか処理} if ( $a > 20 ){なんか処理} if ( $a > 30 ){なんか処理} コレだと$aに30以上が入力されるとバグります 10 if a>10 then なんか処理 20 if a>10 then なんか処理 30 if a>10 then なんか処理 ベーシックだと順に処理されて行番号30の処理が優先されたと思います。
158 名前:nobodyさん mailto:sage [2009/03/04(水) 08:01:49 ID:???] >>157 30以上が入力されるとバグりますって、例えば$aが40だったら$a > 10は満たされるからそこが実行されるに決まってるだろうがよ。
159 名前:nobodyさん mailto:sage [2009/03/04(水) 08:04:26 ID:???] そこがっていうかそこもって言わないと分からないのか。 if ( $a > 10 ){なんか処理} if ( $a > 20 ){なんか処理} if ( $a > 30 ){なんか処理} お前さんの例で言うなら、例えば$aが40だったら「なんか処理」は三つとも実行される。
160 名前:nobodyさん mailto:sage [2009/03/04(水) 10:14:27 ID:???] if(10未満){処理} elsif(10以上20未満){処理} else{処理}
161 名前:nobodyさん mailto:sage [2009/03/04(水) 10:20:20 ID:???] なんで小さい順に評価しようとするの? 大きい順に評価して if を並べりゃいいじゃない
162 名前:nobodyさん mailto:sage [2009/03/04(水) 10:26:43 ID:???] (´・ω・`)?
163 名前:nobodyさん [2009/03/04(水) 12:01:34 ID:+iuw4LCF] 2つのifが同時に真になる場合バグが生じる場合もあるようなので、この現象を回避するにプログラムの修正を行いたいので2つのソースの書き方のうちどちらが正しいか教えて欲しいのです。 現在はすべてifでかかれているので正常に動作しません。 もし上でもよければ修正が容易なのですが下のようにしなければならないのならifが100個ぐらいあるのでフローチャートでも書かないとむりかなと思ってます。 ソースその1 if ($tensuua < 10) {$ranka = 3;} elsif ($tensuua < 20) {$ranka = 2;} else {$ranka = 1;} if ($tensuub < 10) {$rankb = 3;} elsif ($tensuub < 20) {$rankb = 2;} else {$rankb = 1;} ------------------------------------------------------------------------------------------ ソースその2 if ($tensuua < 10) {$ranka = 3;} elsif ($tensuua < 20) {$ranka = 2;} elsif ($tensuua < 30) {$ranka = 1;} elsif ($tensuub < 10) {$rankb = 3;} elsif ($tensuub < 20) {$rankb = 2;} else {$rankb = 1;}
164 名前:nobodyさん mailto:sage [2009/03/04(水) 12:04:07 ID:???] 条件と処理を一行にいくつも書くと読みづらくなるから改行をもっと工夫せい
165 名前:nobodyさん mailto:sage [2009/03/04(水) 12:20:59 ID:???] >>163 レス読んでるの? あれ読んで分からないの?
166 名前:nobodyさん mailto:sage [2009/03/04(水) 12:58:45 ID:???] >>165 何番のレスですか?
167 名前:nobodyさん mailto:sage [2009/03/04(水) 13:18:26 ID:???] とりあえずさ 何が要求仕様なのかもう一度整理しろ んで、仮にこういうデータが来たらどう処理されるなってのを考えろ
168 名前:nobodyさん mailto:sage [2009/03/04(水) 14:37:04 ID:???] >>167 了解 ソースその1で動作環境はウェブサーバーで仮に$tensuua=20と$tensuub=20が同時に入力された場合 if→ifの場合のエラーと同じ不具合がおこりえるのかどうか 教えてください。 ソースその1 if ($tensuua < 10) {$ranka = 3;} elsif ($tensuua > 10 and $tensuua < 20) {$ranka = 2;} else {$ranka = 1;} if ($tensuub < 10) {$rankb = 3;} elsif ($tensuub > 10 and $tensuub < 20) {$rankb = 2;} else {$rankb = 1;} ------------------------------------------------------------------------------------------ ソースその2 if ($tensuua < 10) {$ranka = 3;} elsif ($tensuua > 10 and $tensuua < 20) {$ranka = 2;} elsif ($tensuua < 30) {$ranka = 1;} elsif ($tensuub < 10) {$rankb = 3;} elsif ($tensuub > 10 and $tensuub < 20) {$rankb = 2;} else {$rankb = 1;}
169 名前:nobodyさん mailto:sage [2009/03/04(水) 15:04:49 ID:???] 質問に偽装したいやがらせ
170 名前:nobodyさん mailto:sage [2009/03/04(水) 15:47:05 ID:???] >>168 my ($tensuua, $tensuub) = (15, 15); my ($ranka, $rankb); if ($tensuua < 10) {$ranka = 3;} elsif ($tensuua < 20) {$ranka = 2;} else {$ranka = 1;} if ($tensuub < 10) {$rankb = 3;} elsif ($tensuub < 20) {$rankb = 2;} else {$rankb = 1;} print "a:$ranka b:$rankb\n"; これを実行すると、 a:2 b:2 こうなるわけだが、何か問題があるのか?
171 名前:nobodyさん mailto:sage [2009/03/04(水) 16:28:04 ID:???] そもそもてめぇの言う不具合を示せよ 俺らはエスパーじゃねーんだよクソッタレ
172 名前:nobodyさん mailto:sage [2009/03/04(水) 16:43:38 ID:???] use strict; my $rankA = -1; my $rankB = -1; my $pointA = 5; my $pointB = 56; my @pointlist = qw/30 20 10/; my @ranklist = qw/1 2 3/; for(my $i = 0; $i < $#pointlist + 1; $i++){ $rankA = $ranklist[$i] if $pointA < $pointlist[$i]; $rankB = $ranklist[$i] if $pointB < $pointlist[$i]; } print "point = $pointA / rank = $rankA\n"; print "point = $pointB / rank = $rankB\n";
173 名前:nobodyさん mailto:sage [2009/03/04(水) 16:45:26 ID:???] 書き忘れたことあった。 use strict; my $rankA = -1; my $rankB = -1; my @pointlist = qw/30 20 10/; my @ranklist = qw/1 2 3/; # 上記までは変更しない # 下の pointX を変更して動作を確かめてください my $pointA = 5; my $pointB = 56; for(my $i = 0; $i < $#pointlist + 1; $i++){ $rankA = $ranklist[$i] if $pointA < $pointlist[$i]; $rankB = $ranklist[$i] if $pointB < $pointlist[$i]; } print "point = $pointA / rank = $rankA\n"; print "point = $pointB / rank = $rankB\n";
174 名前:nobodyさん mailto:sage [2009/03/04(水) 16:47:31 ID:???] for my $i (@pointlist){ $rankA = $ranklist[$i] if $pointA < $pointlist[$i]; $rankB = $ranklist[$i] if $pointB < $pointlist[$i]; } の方がすっきりしない?
175 名前:nobodyさん [2009/03/04(水) 17:20:03 ID:bLGM+Am6] $_SERVER["REQUEST_URI"] の質問 ローカルホストで簡易掲示板を作りあるページで $_SERVER["REQUEST_URI"] とやると 127.0.0.1/hoge/bbs/ 鯖にあげてローカルホストでやった場所と同じところで $_SERVER["REQUEST_URI"] とやると 127.0.0.1/hoge/bbs/php/ となるのはなぜ? 問題はないんだけど後学のために教えてください。 phpは つい1週間前に入れたばかりで httpd でのテストです。
176 名前:nobodyさん mailto:sage [2009/03/04(水) 17:49:56 ID:???] >>174 あっ、そうゆう書き方出来るんですね。
177 名前:nobodyさん mailto:sage [2009/03/04(水) 19:02:40 ID:???] ごめん174は嘘
178 名前:nobodyさん mailto:sage [2009/03/04(水) 19:03:16 ID:???] for my $i (0 .. $#pointlist){ $rankA = $ranklist[$i] if $pointA < $pointlist[$i]; $rankB = $ranklist[$i] if $pointB < $pointlist[$i]; }
179 名前:nobodyさん [2009/03/04(水) 19:08:07 ID:+iuw4LCF] if ifの謎の不具合は本にも載ってないし原因もわからず・・・ >>51 でも書いたように if () {} if () {} if () {} を if () {} elsif () {} elsif () {} にすると直る。 バグの症状は変数の数値が壊れる。この不具合が起こったプログラムは修正済みで不具合時のソースは見当たらず。 不具合時の環境はlolipopレンタルサーバーでブラウザーから呼び出したとき。 現在は直した部分以外の変数が壊れる現象があり、プログラムには100個程度のifが使われていることから、前回と 同じ理屈で不具合が起きているのではないかと推測。 if () {} elsif () {} else {} を2個組み合わせてもifまたはelsifの2個以上が同時に真になったときに同じ現象が起きたのではないのかと推測 その推測を元に質問いたしましたが、文書力が無いので伝わらず。これはもうあきらめるしかないっぽい、外注に 出します、色々とありがとうございました。 この質問とレスの番号の全て→ >>45-66 >>151 >>153 >>155-174 >>176-178
180 名前:nobodyさん mailto:sage [2009/03/04(水) 19:23:02 ID:???] 文章力とかじゃねぇよ お前プログラム勉強する気あるのか? ifとelsifの違いは>>156 に書いてあるだろ if(){} elsif(){} else{} 実行されるのはどれか1つだ if(){} if(){} if(){} 実行されるのは0-3個のどれか
181 名前:nobodyさん mailto:sage [2009/03/04(水) 19:25:37 ID:???] ふぐあいかっこわらい こんだけ世界中で使われてるものの不具合がお前ごときに見つけられるわけがねーだろ
182 名前:nobodyさん mailto:sage [2009/03/04(水) 19:32:56 ID:???] 共用鯖で実験ですか… 氏ねよ
183 名前:nobodyさん mailto:sage [2009/03/04(水) 19:34:08 ID:???] >>179 >>58 にも書いてあるし お前はそれに>>62 でありがとうって返してる
184 名前:nobodyさん mailto:sage [2009/03/04(水) 19:41:31 ID:???] つか、そんなもん100個くらい並べたくらいで壊れねーよ。
185 名前:nobodyさん mailto:sage [2009/03/04(水) 19:55:41 ID:???] では1000個並べてみます><
186 名前:nobodyさん mailto:sage [2009/03/04(水) 20:00:39 ID:???] すごいのが来ていたんだな。。。 まー「外注に依頼」という正解にたどり着いたのはいいことだ。
187 名前:nobodyさん mailto:sage [2009/03/04(水) 20:13:55 ID:???] これは受託先がボッタくれそうでいいなあ・・ 共用鯖で実験ならいつもやってますw 無限ループやらかして、何度自分でプロセス切った事やらw
188 名前:nobodyさん mailto:sage [2009/03/04(水) 22:04:05 ID:???] 共有鯖って、数十秒でキルされるんじゃないの? そういう設定が普通だと思ってた
189 名前:nobodyさん [2009/03/04(水) 23:45:41 ID:4H3lqSU+] ある文字列が対象の含まれていないときだけ実行させるにはどうすればよいでしょうか? 含まれていたときはスルーし、最後に実行させたいのですが。 こんな感じのときです 対象 hogehoge 検索 geh 含まれていたら print "NO"; 含まれていなかったら他の条件へ。
190 名前:nobodyさん mailto:sage [2009/03/04(水) 23:53:18 ID:???] >含まれていたときはスルーし、最後に実行させたいのですが。 ここがよくわからない if ( $str =~ /geh/ ){ print "NO"; }else{ #他の条件 }
191 名前:nobodyさん mailto:sage [2009/03/04(水) 23:53:35 ID:???] my $str = 'hogehoge'; my $search = 'geh'; if($str =~ /$search/){ print "NO\n"; }else{ .... }
192 名前:nobodyさん mailto:sage [2009/03/04(水) 23:53:59 ID:???] 含まれていたら終了
193 名前:nobodyさん [2009/03/05(木) 00:02:54 ID:PCYMuwfz] >>190 >>191 >>191 で行ってみます。それをしたかったんです。
194 名前:nobodyさん [2009/03/05(木) 00:09:14 ID:PCYMuwfz] あれ?違いますね。 含まれていないときに終了させ、含まれている時にはスルーすることをしたいのですが。 $str = 'hogehoge'; if ( length($str) ne '8' ) { print "no"; } elsif { geh が含まれていないとき print "no"; } elsif { 他の条件1 print "no"; } elsif { 他の条件2 print "no"; } else { 実行 print "oK"; } こういうことです。
195 名前:nobodyさん mailto:sage [2009/03/05(木) 00:16:13 ID:???] 含まれていたら print "NO"って書いてたやん 処理が逆なら真偽ひっくり返したらいいだけ
196 名前:nobodyさん [2009/03/05(木) 00:26:06 ID:PCYMuwfz] >>195 >含まれていたら print "NO"って書いてたやん 間違えていました。正しくは含まれていないときに実行したいのです。 真偽をひっくり返すとは?
197 名前:nobodyさん mailto:sage [2009/03/05(木) 00:28:58 ID:???] if(!条件)もしくはunless(条件)
198 名前:nobodyさん [2009/03/05(木) 00:41:15 ID:PCYMuwfz] こういうのは出来ないんですよね? $str = hogehoge; if ( $str != ~/geh/) { print "NO"; }
199 名前:nobodyさん mailto:sage [2009/03/05(木) 00:45:44 ID:???] >>198 $str = hogehoge; if ( $str !~ /geh/) { print "NO"; }
200 名前:nobodyさん mailto:sage [2009/03/05(木) 00:49:56 ID:???] if($str !~ /geh/){ 〜処理〜 } !~ は 一致したときに偽となります。 なので、!~ で一致しなければ真となります。
201 名前:nobodyさん [2009/03/05(木) 01:01:50 ID:PCYMuwfz] >>199 >>200 出来ました。 ありがとうございました。
202 名前:nobodyさん mailto:sage [2009/03/05(木) 02:37:44 ID:???] 2chでもそうですけど書き込み確認画面ってありますよね? あれってどうやっているんですか?2つcgiを用意するのか もしくは1つでやっているんでしょうか?
203 名前:nobodyさん mailto:sage [2009/03/05(木) 02:41:58 ID:???] 1つでも2つでもどうとでもできる
204 名前:nobodyさん mailto:sage [2009/03/05(木) 06:51:21 ID:???] 簡易掲示板チャットをやっているんですがユーザーへの禁止語句にエラーが出てしまうのです。 原因を調べてみた結果「ー」がその原因だったことが判明しました。 ソースはこんな感じなんですがどうすればエラーが出ないようになるでしょうか? if( $NG =~ m/$subject/) { print '禁止ワードです'; } 文字コードはShift-JISでj-code.plなどは使用していません。よろしくお願いします。
205 名前:nobodyさん mailto:sage [2009/03/05(木) 08:28:19 ID:???] /\Q$subject/でいけるっしょ
206 名前:nobodyさん mailto:sage [2009/03/05(木) 08:36:47 ID:???] >>205 そんなやり方があるんですね。ありがとうございます。 軽くググってましたが \Q***\E を使うといいらしいですが\Eで閉じる必要はないのでしょうか?
207 名前:nobodyさん mailto:sage [2009/03/05(木) 08:39:30 ID:???] 閉じてもいいよ クウォートメタの効果を途中で止めたいなら\Eで閉じなきゃいけないけどこの場合はないから閉じなくてもいい
208 名前:nobodyさん mailto:sage [2009/03/05(木) 08:41:08 ID:???] >>207 なるほど〜。 >>204 の例だと if{ } の間だけ効果を発揮するということでしょうか?
209 名前:nobodyさん mailto:sage [2009/03/05(木) 08:58:56 ID:???] いやいや /\Q$subject[a-z]\d/みたいにクウォートメタしたいものの後に正規表現使う場合には /\Q$subject\E[a-z]\d/こう書かいて閉じておかないと、パターンマッチではなく $subjectの内容直後に"[a-z]\d"という文字があるときしかマッチしなくなるということ
210 名前:179 [2009/03/05(木) 16:49:09 ID:9GnY8N9B] 外注に出したら100万と見積もられましたが100万はきついのでやはり自分で勉強したいのですが IFの使い方に特化した本ありませんか?
211 名前:nobodyさん mailto:sage [2009/03/05(木) 16:56:24 ID:???] そんな本あるかよ
212 名前:nobodyさん mailto:sage [2009/03/05(木) 16:57:13 ID:???] >>210 君はプログラムに手出ししない方がいいと思う。
213 名前:nobodyさん mailto:sage [2009/03/05(木) 16:59:45 ID:???] books.livedoor.com/item/659088 どうぞ
214 名前:nobodyさん mailto:sage [2009/03/05(木) 17:05:25 ID:???] ていうか近視眼的な解決策しか求めないからいけないんだよね。
215 名前:nobodyさん mailto:sage [2009/03/05(木) 17:06:52 ID:???] どうせならこのぐらいのボケかたがいい www.amazon.co.jp/gp/product/images/B001QWUZ9W/ref=dp_image_0?ie=UTF8&n=465392&s=books
216 名前:nobodyさん mailto:sage [2009/03/05(木) 17:08:19 ID:???] >>210 キミは 英語を勉強しようとして、「if」 しか解説してない本を探せると思うか? 日本語を勉強しようとして 「あ行」 しか解説してない本を探せると思うか?
217 名前:nobodyさん mailto:sage [2009/03/05(木) 17:09:07 ID:???] ec2.images-amazon.com/images/I/61%2B5RCVUK-L._SS500_.jpg こういったリンクの方がうれしい
218 名前:nobodyさん mailto:sage [2009/03/05(木) 17:26:32 ID:???] これってレディスコミック?中身が見たいw
219 名前:nobodyさん mailto:sage [2009/03/05(木) 17:50:16 ID:???] IFに特化した本ワロタwwwwww
220 名前:nobodyさん mailto:sage [2009/03/05(木) 17:58:01 ID:???] 必要な情報はもう全部ここで答えられてるから それ見て勉強するか100万払うこったな 面倒くさいからもう来んな
221 名前:nobodyさん mailto:sage [2009/03/05(木) 19:52:11 ID:???] 週間 ifの全て 創刊号は演算子優先順位一覧表がついて、590円!
222 名前:nobodyさん mailto:sage [2009/03/05(木) 19:52:52 ID:???] さすがにネタだろ ネタじゃないなら、もうソースも恥部もさらけ出せよ
223 名前:nobodyさん mailto:sage [2009/03/05(木) 20:40:48 ID:???] 多分、リアルで高校生とか中学生とかなんだろう。Perlってホントに初心者向けの本ってないからなあ。PHPと違って。
224 名前:nobodyさん mailto:sage [2009/03/05(木) 20:43:15 ID:???] 古い内容でよければ、ネットにいくらでも解説あるよな
225 名前:nobodyさん mailto:sage [2009/03/05(木) 20:53:49 ID:???] ifって古いとかどうこうじゃないけどな
226 名前:nobodyさん mailto:sage [2009/03/05(木) 21:32:14 ID:???] >>221 たけーよw
227 名前:nobodyさん mailto:sage [2009/03/06(金) 00:19:12 ID:???] >>179 if文を100個も並べるようなコードは、おそらくif文などほとんど使わずに書けると思うよ。 コード以前に、仕様定義を日本語で整理することに頭と時間使った方が結局近道。 どういう処理をさせたいか日本語で表せない(他人に伝えられない)のにコーディングできるはずがない。 例えば if ($tensuua < 10) {$ranka = 3;} elsif ($tensuua > 10 and $tensuua < 20) {$ranka = 2;} else {$ranka = 1;} のコードは、$tensuua == 10 のとき、意図しない結果となると思う。 条件式は、混乱するんだったら、表を書いてでも整理すべし。
228 名前:nobodyさん mailto:sage [2009/03/06(金) 00:29:04 ID:???] 100万ww俺今から外注始めるwwwww
229 名前:nobodyさん mailto:sage [2009/03/06(金) 01:14:19 ID:???] 俺なら70万でやってやるよw
230 名前:nobodyさん mailto:sage [2009/03/06(金) 01:57:58 ID:???] 5万 NCNRでお願いします。
231 名前:nobodyさん mailto:sage [2009/03/06(金) 05:12:13 ID:???] ちょうど俺液晶買い換えたいと思ってたんだよね 3万でいいよ
232 名前:nobodyさん mailto:sage [2009/03/06(金) 13:15:46 ID:???] 今月給料が少なかったから手付50万円で月々の保守10万円で年間契約で受け持つよ 制作は規模にもよるけど3ヶ月以内を約束で。
233 名前:nobodyさん mailto:sage [2009/03/06(金) 14:24:55 ID:???] IFって何かと思った。 なんかのフレームワークかな?とか。 ……俺だけ?
234 名前:nobodyさん mailto:sage [2009/03/06(金) 14:28:56 ID:???] >>233 君を入れて3人だけだね。
235 名前:nobodyさん mailto:sage [2009/03/06(金) 18:09:13 ID:???] 俺はインターフェイスの設計かとオモタ
236 名前:nobodyさん mailto:sage [2009/03/06(金) 22:21:27 ID:???] 【月刊ifの全て】 創刊号 ifブロック特集 第2号 elseブロック特集 第3号 elsifブロック特集 第4号 unlessブロック特集 第5号 whileブロック特集 第6号 untileブロック特集 第7号 forブロック特集 第8号 if修飾詞特集 第9号 unless修飾詞特集 第10号 while修飾詞特集 第11号 until修飾詞特集 第12号 for修飾詞特集 第13号 if演算子(?:)特集 第14号 範囲演算子(..)特集 第15号 範囲演算子(...)特集 第16号 論理積演算子(&&)特集 第17号 論理和演算子(||)特集 第18号 論理積演算子(and)特集 第19号 論理和演算子(or)特集 第20号 排他的論理和演算子(xor)特集 第21号 grep関数特集 第22号 evalブロック特集 第23号 Switchモジュール特集 最終号 はじめてのPerlプログラミング
237 名前:nobodyさん mailto:sage [2009/03/06(金) 23:18:44 ID:???] 創刊号は if の歴史 からいこうぜ
238 名前:nobodyさん mailto:sage [2009/03/06(金) 23:27:43 ID:???] 付録は何ですか><
239 名前:nobodyさん mailto:sage [2009/03/06(金) 23:36:05 ID:???] 2号からはおいくらですか?
240 名前:nobodyさん mailto:sage [2009/03/07(土) 00:03:23 ID:???] つか2年後に初めて入り口とかw まともにやってたら中級の入り口に立ってるはずなのにw
241 名前:nobodyさん mailto:sge [2009/03/07(土) 02:52:57 ID:???] 付録「ifとiff」
242 名前:nobodyさん mailto:sage [2009/03/07(土) 02:58:51 ID:???] >240 むしろツッコミどころは第23号じゃね?
243 名前:nobodyさん mailto:sage [2009/03/07(土) 14:31:06 ID:???] お前らの大好きな perl-users.jp で書けばいいじゃん。
244 名前:nobodyさん mailto:sage [2009/03/07(土) 14:53:41 ID:???] >>243 なにそれ?
245 名前:nobodyさん mailto:sage [2009/03/07(土) 15:05:38 ID:???] ぐぐれ
246 名前:nobodyさん mailto:sage [2009/03/07(土) 18:31:27 ID:???] Switchモジュール特集は今すぐ始めてくれて構わないんだぞ?
247 名前:nobodyさん mailto:sage [2009/03/07(土) 22:21:11 ID:???] >>243 あそこは頑張ってて好きだぜ。perl学ぶならここ見ろ、ってのが出来るのはいいことじゃね
248 名前:nobodyさん mailto:sage [2009/03/08(日) 01:43:51 ID:???] import関数は何をするものですか?
249 名前:nobodyさん mailto:sage [2009/03/08(日) 11:38:53 ID:???] Switchはクックブックに少し載ってるよね
250 名前:nobodyさん mailto:sage [2009/03/08(日) 13:14:22 ID:???] >>247 ああいうのは、5年後10年後に負の遺産になるのが常だからなあ。
251 名前:nobodyさん mailto:sage [2009/03/08(日) 21:55:46 ID:???] 口で言うだけより行動する方がかっこいいし あの辺のクラスタは10年経ってもずっとやってそう
252 名前:nobodyさん mailto:sage [2009/03/08(日) 22:16:42 ID:???] 5.10のgiven,when,defaultって手もあるな
253 名前:nobodyさん mailto:sage [2009/03/09(月) 00:06:15 ID:???] >>251 何というか、君は腰巾着だな。ひとり立ちせえよ。
254 名前:nobodyさん mailto:sage [2009/03/09(月) 00:38:08 ID:???] >>253 煽りたいんですね、わかります
255 名前:nobodyさん mailto:sage [2009/03/09(月) 01:19:00 ID:???] $hogeがaとb以外のときに実行するには if ($hoge ne 'a' or $hoge ne 'b' ){ print "oik"; } で合ってますか?
256 名前:nobodyさん mailto:sage [2009/03/09(月) 01:26:29 ID:???] >255 その場合だと、「a以外」または「b以外」のときに真となるので、常に成立することになる。 「aまたはb」という条件式を作り、それをさらに否定するといい。
257 名前:nobodyさん mailto:sage [2009/03/09(月) 01:27:09 ID:???] andにするだけでいいだろ
258 名前:nobodyさん mailto:sage [2009/03/09(月) 01:28:42 ID:???] これ、新しいAAみたい → oik orじゃなくて、andじゃないとマズくね?
259 名前:nobodyさん mailto:sage [2009/03/09(月) 01:30:03 ID:???] 被ってるし。床に横になってギター弾いてるみたいんだよなー → oik
260 名前:nobodyさん mailto:sage [2009/03/09(月) 01:40:09 ID:???] olkはokの誤植です。。。 $hoge = 'c'; if ($hoge ne 'a' and $hoge ne 'b' ){ print "ok"; } なら ok で、このとき $hoge = 'b' ならなにもしないんですよね?
261 名前:nobodyさん mailto:sage [2009/03/09(月) 01:46:15 ID:???] >260 おっけー。 あと、既に知ってるかもしれないが 「ド・モルガンの法則」でぐぐってみると勉強になるかも