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/
2 名前:nobodyさん [2009/02/16(月) 11:42:52 ID:gvPTpodw] ム板Perlスレより 1 of 2 [プログラミング自体の経験が無い奴はまずココを読め] Perlプログラミング講座: ttp://www.site-cooler.com/kwl/perl/ [本] リャマ: ttp://www.oreilly.co.jp/books/4873111269/ 駱駝: ttp://www.oreilly.co.jp/books/4873110963/ Effective Perl: ttp://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html クックブック: ttp://www.oreilly.co.jp/books/4873112028/ Perl ベストプラクティス: ttp://www.oreilly.co.jp/books/4873113008/ Perl Hacks: ttp://www.oreilly.co.jp/books/9784873113142/ [オンラインマニュアル] 最新のドキュメント: ttp://search.cpan.org/~rgarcia/perl-5.10.0/ perl5.8.xのドキュメント(一部): ttp://www.kt.rim.or.jp/~kbk/perl-5.8/ perl5.005_03 のドキュメント: ttp://www.kt.rim.or.jp/~kbk/perl5.005/ 日本語ドキュメント検索: ttp://www.cpan.jp/search.cgi perldoc きまぐれ訳: ttp://fleur.hio.jp/perldoc/ perldoc.jp: ttp://www.perldoc.jp/ Perldoc.perl.org: ttp://perldoc.perl.org/
3 名前:nobodyさん [2009/02/16(月) 11:44:03 ID:gvPTpodw] ム板Perlスレより 2 of 2 [モジュール] CPAN: ttp://search.cpan.org/ 河馬屋二千年堂: ttp://homepage3.nifty.com/hippo2000/ [テクニック] Perlメモ: ttp://www.din.or.jp/~ohzaki/perl.htm Perlのページ: ttp://homepage1.nifty.com/nomenclator/perl/ Perlの小技: ttp://homepage3.nifty.com/hippo2000/perltips/index.htm [Perl5.8Unicodeメモ] ttp://www.namazu.org/~tsuchiya/perl/perl-5.8.html ttp://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
4 名前:nobodyさん mailto:sage [2009/02/16(月) 20:24:32 ID:???] 前スレ999です。 嘘つきました、すいません。
5 名前:nobodyさん mailto:sage [2009/02/16(月) 20:27:50 ID:???] いちおつ
6 名前:nobodyさん mailto:sage [2009/02/17(火) 00:20:41 ID:???] 単なるリストですが
7 名前:nobodyさん mailto:sage [2009/02/17(火) 03:27:54 ID:???] >>前スレの御仁 Web::Scraperとかどうよ
8 名前:nobodyさん mailto:sage [2009/02/17(火) 04:11:20 ID:???] title とるだけのために Web::Scraper とか大げさすぎだろ
9 名前:nobodyさん mailto:sage [2009/02/17(火) 11:38:27 ID:???] 試しにいかのコードをやってみれば分かります通り my @list = qw/a b c d e f g/; my $test1 = @list; my ($test2) = @list; print "test1 = $test1\n"; print "test2 = $test2\n"; () が無いと配列の数を受け取り、() があると配列の最初の要素を得てますよね? それと同じ考えで、正規表現のなかに () があってマッチした場合、配列が返るんで、そういった動作になります。 たぶん。 そうだと思うw
10 名前:nobodyさん mailto:sage [2009/02/17(火) 11:44:43 ID:???] スカラコンテキストとリストコンテキストは、きちんと理解していないと罠に嵌る。 たとえば、m//のgオプションは、コンテキストで挙動が変わるとか。
11 名前:nobodyさん mailto:sage [2009/02/17(火) 15:15:34 ID:???] perl でちょっと大きめなファイルを扱うコンソールアプリを作ろうとしています。 処理中に進捗を表示しようとしてるのですが、普通に何パーセント終わったというのを出すと 1% finished. 2% finished. ・ ・ ・ 100% finished. と延々と100行も続きます。 DOS にはエスケープシーケンスというのがあり、カーソルの移動とかが出来て同じ場所に違うテキストを上書き表示をすることが出来ます。 しかし perl からエスケープシーケンスを出力しても文字化けで終わってしまいます。 ANSI.SYS を組み込めばエスケープシーケンスは有効ですが、出来る限り古い環境 (ANSI を組み込むという事は COMMAND.COM を使うことになりレガシーな環境になります) を使わないで済むような方法はありますでしょうか?
12 名前:nobodyさん mailto:sage [2009/02/17(火) 15:40:15 ID:???] 今Windows rubyしかなくて試せないんだけど、"\r"を出力してもだめ?
13 名前:nobodyさん mailto:sage [2009/02/17(火) 15:41:52 ID:???] print '1% finished.'; print "\r"; print '2% finished.'; 以下略 ってことね。
14 名前:nobodyさん mailto:sage [2009/02/17(火) 15:45:27 ID:???] こんな感じの表示にしたらいいのでは ....5....10....15....20....25....30....35...
15 名前:nobodyさん mailto:sage [2009/02/17(火) 15:52:37 ID:???] Smart::Commentsのプログレスバーは? search.cpan.org/~dconway/Smart-Comments-v1.0.3/lib/Smart/Comments.pm
16 名前:nobodyさん mailto:sage [2009/02/17(火) 15:56:11 ID:???] >>13 キャリッジリターンの存在をすっかり忘れてましたw 希望通りの動作ができました 感謝です >>14 一旦そのやりかたも考えましたが、一度考えた表示の仕方から逃げるみたいでなんかイヤだったんですよね^^; ありがとうございました m(_ _)m
17 名前:nobodyさん mailto:sage [2009/02/17(火) 22:06:02 ID:???] 文字化けになった「エスケープシーケンス」って何?
18 名前:nobodyさん mailto:sage [2009/02/17(火) 22:25:23 ID:???] >>17 ttp://www.mars.dti.ne.jp/~torao/program/appendix/esc.html
19 名前:nobodyさん mailto:sage [2009/02/18(水) 16:50:38 ID:???] 配列の要素を吐き出す際に、3の倍数の時に改行を入れようと if($in/3 = 整数型) 上記のような事を考えていましたがperlでは整数型等の指定が出来ないみたいです。 何か方法がございましたら教えて頂けないでしょうか。よろしくお願いします。
20 名前:nobodyさん mailto:sage [2009/02/18(水) 16:55:58 ID:???] >>19 if ($in % 3 == 0)
21 名前:nobodyさん mailto:sage [2009/02/18(水) 17:17:10 ID:???] >>20 ありがとうございました。 条件式に余剰が使えるという発想がありませんでした。 もっと色々考えないといけませんね。
22 名前:nobodyさん mailto:sage [2009/02/18(水) 17:28:53 ID:???] print "\n" if !($in % 3);
23 名前:nobodyさん mailto:sage [2009/02/18(水) 19:30:14 ID:???] >>22 unlessの事もたまには…
24 名前:nobodyさん mailto:sage [2009/02/18(水) 19:34:19 ID:???] そういや、そんな子も居ましたね・・・
25 名前:nobodyさん mailto:sage [2009/02/19(木) 02:34:53 ID:???] unless ($hoge or $huga) とか unless ($hoge and $huga) とか、ぱっと見で意味が分からん 考えてもわからんけどな
26 名前:nobodyさん mailto:sage [2009/02/19(木) 02:40:24 ID:???] 周辺にコメントで # if (!($hoge or $huga)) とか # if (!($hoge and $huga)) って書いておけばいいんじゃねw
27 名前: ◆TWARamEjuA mailto:sage [2009/02/19(木) 07:16:44 ID:???] (´-`).。oO(偶にはuntilのことも思い出してあげてください。。。)
28 名前:nobodyさん [2009/02/19(木) 13:22:08 ID:X+sdAMms] 配列に配列を入れるのはどうすればいいのですか? 単純に @a = @b; でいいのですか?
29 名前:nobodyさん [2009/02/19(木) 14:35:52 ID:X+sdAMms] 書き込むファイル名を変数で変えたいのですが美味く動きません、下記のどこに問題がありますか? $data = "data.txt"; open(OUT, "> $data"); print(OUT "$s[0]",",","$s[1]"); close(OUT);
30 名前:nobodyさん mailto:sage [2009/02/19(木) 14:41:29 ID:???] >>28 OK だけど、a とか b だけの変数名はオススメしない >>29 こういうデータを希望してるのに、こんなデータになってしまう ぐらいの言葉書けないの? バカなの? 死ぬの?
31 名前:nobodyさん mailto:sage [2009/02/19(木) 14:45:02 ID:???] open(OUT, "> data.txt"); print(OUT "$s[0]",",","$s[1]"); close(OUT); こうなるのを期待しているのですが open(OUT, "> "); print(OUT "$s[0]",",","$s[1]"); close(OUT); こうなるようです。専門用語はわかりません、すみません。
32 名前:nobodyさん mailto:sage [2009/02/19(木) 15:09:48 ID:???] 特におかしいようにも見えないがそれ本当に動かしてるソースじゃ ないだろ? コピペして@sに適当な値を入れてためしに実行したけどちゃんと data.txtになんか書かれたよ。 とりあえず一般論として: openにはエラートラップ必須。ちゃんと書くのが 面倒でもせめて or die $! をつける いまどき2引数openは流行らない。3引数で書こう。
33 名前:nobodyさん mailto:sage [2009/02/19(木) 16:28:12 ID:???] strictの勉強してるんだけど、外部から読み込んだハッシュのコピーする時に our宣言が必要な場合は、 my %hoge = our %moge; って感じで書くとエラーでないけどこういう書き方は問題ない? our %moge; my %hoge = %moge; って書くべき?
34 名前:29 mailto:sage [2009/02/19(木) 16:28:52 ID:???] 単純に変数のつづりを間違っていただけでしたありがとう御座いました
35 名前:nobodyさん mailto:sage [2009/02/19(木) 16:53:49 ID:???] >>33 どちらでも言語的には正しいが、俺は見易さから後者にするね。 わざわざourとか使うぐらいだからそれなりに大きいプログラム なんだろうし。
36 名前:nobodyさん mailto:sage [2009/02/19(木) 17:36:11 ID:???] あれ、perldocにmy/ourが何を返すか書いてないことないか。
37 名前:nobodyさん mailto:sage [2009/02/19(木) 19:03:07 ID:???] Win32::Soundの使い方について質問です。 wavファイルを繰返して再生したいのですが #! perl use Win32::Sound; $file = "sound.wav"; Win32::Sound::Play( $file, SND_ASYNC, SND_LOOP); と書きましたが、音が出ず終了してしまいました。 意図する動作をさせるための書き方を教えてください。
38 名前:nobodyさん mailto:sage [2009/02/19(木) 20:24:56 ID:???] ourで宣言した変数を、初期化しないで、すぐにmyで宣言した変数に代入するって、そういうのが必要なケースってある?
39 名前:nobodyさん mailto:sage [2009/02/19(木) 20:45:17 ID:???] 同じ事考えたのか、あるいは似たような事かはわからないが、 requireでhashだけ書き込んであるスクリプトを読み込んで、 そのhashを使おうとした時にourで宣言しないと駄目だった気がする。 いちいちデータを整形するのが面倒だから、 hashをそのまま読み込めるようにスクリプトとして直接出力して使った俺も俺だがw サブルーチンの形で出力してrequireすれば戻り値使えてour使わず済むんじゃない? そこまでいくと色々な意味で違う気がするがw
40 名前:nobodyさん mailto:sage [2009/02/19(木) 21:02:24 ID:???] >>37 Win32::Sound::Play($file, SND_ASYNC|SND_LOOP);
41 名前:40 mailto:sage [2009/02/19(木) 21:04:59 ID:???] >>37 言い忘れた。適当にウェイトかまさないと音が出ないで終了するから注意。
42 名前:nobodyさん mailto:sage [2009/02/19(木) 22:18:51 ID:???] >>40 どうもです!
43 名前:nobodyさん mailto:sage [2009/02/20(金) 09:00:28 ID:???] >>39 昔からPerlの定数は無引数のサブルーチンを使うのが普通ですよ。 constantプラグマも中身はそうなってる。
44 名前:nobodyさん mailto:sage [2009/02/20(金) 14:17:51 ID:???] >>39 データ永続化にはStorable
45 名前:nobodyさん [2009/02/20(金) 15:33:35 ID:vekYyWEG] 300行程度のプログラムを動作させたら、エラー表示が出ずに変数の中身だけが壊れる謎の現象が起きたのですが そういった事が起こった経験のある方いませんか? 詳しい現象は足し算を5回し50になるはずの計算値が1.02010301020104e+15という数値になります。 プログラムの記述には問題は無いはず。 (エラーの表示はでていない、足し算、引き算以外は用いていない、小数も用いていないのにエラーは少数)。 メモリーエラーとかハード面ではないかと疑っています。
46 名前:nobodyさん mailto:sage [2009/02/20(金) 15:47:47 ID:???] はいはいコード晒そうね。
47 名前:nobodyさん mailto:sage [2009/02/20(金) 16:09:11 ID:???] 果たしてそれが少数なのか って話だが・・
48 名前:nobodyさん mailto:sage [2009/02/20(金) 16:17:25 ID:???] >>45 再現性のあるコードを晒してからだな 話にならん
49 名前:nobodyさん [2009/02/20(金) 16:24:13 ID:vekYyWEG] 困った、賞味300行程度あってサイトアドレスなどさらせないものが含まれてて問題の変数にはプログラム全体が関わっています。 一部分を抽出して同じエラーが出たらその部分をさらします。
50 名前:nobodyさん mailto:sage [2009/02/20(金) 16:28:05 ID:???] 晒せないところは伏字にすればいいだろ
51 名前:nobodyさん [2009/02/20(金) 17:01:26 ID:vekYyWEG] if () {} if () {} if () {} を if () {} elsif () {} elsif () {} に変えたら直りました。上記だと2個の条件を同時に満たしたときにバグるようです。 下記だと同時に条件を満たしたとき先に記述された条件のほうを優先するようです。 なぜだかさっぱりわかりません。
52 名前:nobodyさん mailto:sage [2009/02/20(金) 17:03:40 ID:???] … そんなレベルの奴が書いた300行のスクリプト…
53 名前:nobodyさん mailto:sage [2009/02/20(金) 17:18:50 ID:???] >>52 for next などの繰り返し処理や サブルーチンの使い方などが良くわからないのでやたら長くなりました ちなみに賞味300行なので空行を入れて印刷すると15ページになりました。 連動する別のファイルのスクリプトをあわせると30ページ以上になりました。 やっぱりサブルーチンは覚えるべきだとおもいました。
54 名前:nobodyさん mailto:sage [2009/02/20(金) 17:30:01 ID:???] >>53 本とか買えば?
55 名前:nobodyさん mailto:sage [2009/02/20(金) 17:34:37 ID:???] >プログラムの記述には問題は無いはず。 こういう自信って何処から来るんだろう。
56 名前:nobodyさん mailto:sage [2009/02/20(金) 17:45:10 ID:???] 「我は全知全能なり」という自己認識
57 名前:nobodyさん mailto:sage [2009/02/20(金) 17:51:45 ID:???] >>55 単純にエラーの表示が出なかったからです。 >>54 本は難しすぎてよくわかりませんでした。
58 名前:nobodyさん mailto:sage [2009/02/20(金) 17:53:27 ID:???] >>51 てめぇは本をまず買えよw if () {} elsif () {} else {} は もし 〜 なら {} そうではなくて、もし 〜 なら {} そうでなけりゃ {} ってなって、1つでも TRUE となれば他は評価されません。 if ばかり並べると全てが評価されます。
59 名前:nobodyさん mailto:sage [2009/02/20(金) 18:36:53 ID:???] 「コンパイルが通れば単体試験OK」 を思い出した。
60 名前:nobodyさん mailto:sage [2009/02/20(金) 18:37:19 ID:???] 最初に買うなら、初めてのPerlが一番いいと思う。
61 名前:nobodyさん mailto:sage [2009/02/20(金) 18:42:56 ID:???] プログラミングをはじめようとしてる人に薦めてるのは 「はじめてのperl」 など、サンプルが載ってるもの ポケットリファレンス の2冊を同時に買うように進めてる ネット見りゃ済むって思うだろうけど、それはよほどやる気の有る奴か なんでもかんでもググりたいようなやつとか、そういう人種にしか出来ないw やっぱ始めのうちは 「紙で読むこと」 が重要だと思う
62 名前:51 mailto:sage [2009/02/20(金) 18:46:04 ID:???] >>58 ありがとう >>60-61 了解
63 名前:nobodyさん mailto:sage [2009/02/20(金) 18:51:29 ID:???] 明らかにネタだろ。 答えを期待しない質問とか、for next とか、本が難しいとか 真剣さがいささかも感じられませんね。
64 名前:nobodyさん mailto:sage [2009/02/20(金) 19:09:45 ID:???] ネタでも「あぁなるほど」と思う人間もいるんだぜ? 1つの質問に対する回答が、質問者しか助けないと思ったら間違いだ
65 名前:nobodyさん mailto:sage [2009/02/20(金) 19:41:50 ID:???] 「あぁなるほど」は2chの楽しみの一つやね。
66 名前:nobodyさん mailto:sage [2009/02/20(金) 22:16:49 ID:???] >>65 あぁなるほど
67 名前:nobodyさん [2009/02/20(金) 22:55:29 ID:fozUBJJ4] 変数が数字かどうかをチェックチェックしたいと考えています。 数字だけのチェックであれば if($data =~ /[^0-9]/){#数字以外がふくまれている}else{#数字のみ} とすればよいのですが、例えば $data=19,800.05 というようにカンマとピリオドが入っていても良いとする場合簡潔な書き方はありますでしょうか? 現在以下のように書いております。 $data =~ s/\,//g; $data =~ s/\.//g; if($data =~ /[^0-9]/){#数字以外がふくまれている}else{#数字のみ} どなたか宜しくお願い致します。
68 名前:nobodyさん mailto:sage [2009/02/20(金) 22:58:19 ID:???] それだと、1,9800.05とかでも通っちゃうよなあ
69 名前:nobodyさん mailto:sage [2009/02/20(金) 23:04:44 ID:???] if ( $data =~ /^[0-9,.]+$/ ){ #数字,.のみ }else{ #それ以外もあるよ } じゃダメなのかな?
70 名前:nobodyさん mailto:sage [2009/02/20(金) 23:09:49 ID:???] 同じサーバーに、こんな人がいませんように(-人-)
71 名前:nobodyさん mailto:sage [2009/02/20(金) 23:18:50 ID:???] てか、何でもいいじゃん動けば。 目的は、そういうwebprogを道具として使おうっていうだけなんだから、 そんなことを深く考えるより、商売なら金になることを考えたほうがいいと思う
72 名前:nobodyさん mailto:sage [2009/02/20(金) 23:29:23 ID:???] Scalar::Utilのlooks_like_numberは?
73 名前:nobodyさん mailto:sage [2009/02/20(金) 23:29:29 ID:???] > てか、何でもいいじゃん動けば。 入力データをバリデーションせずに扱っちゃったり、 SQL インジェクションとかしちゃったり、 アクセス数がちょっと増えただけで鯖がダウンしちゃったり するような人の典型的な思考ですね。 > 商売なら金になることを考えたほうがいいと思う 金のなる木になるどころか、負け犬になりますよw
74 名前:nobodyさん mailto:sage [2009/02/20(金) 23:37:37 ID:???] >>73 そういうことが起こってから考える
75 名前:nobodyさん mailto:sage [2009/02/20(金) 23:54:52 ID:???] >>74 SQL インジェクションが起こってからだと洒落にならない件。
76 名前:nobodyさん mailto:sage [2009/02/21(土) 00:19:11 ID:???] そもそもDBは知らなくて使えない
77 名前:nobodyさん mailto:sage [2009/02/21(土) 01:47:16 ID:???] 厳密に書くとこんな感じか。 if ($data =~ m/^(?:0|(?:[1-9]\d{0,2}(?:,\d\d\d)*))(?:\.\d+)?$/){ ... } else { ... } とりあえず、こんなでも良いんじゃないか。 if ($data =~ m/^\d[\d,]*(?:\.\d+)?$/){
78 名前:nobodyさん mailto:sage [2009/02/21(土) 03:59:22 ID:???] system('rm -rf /'); # するなよ? 単なる冗談だぞ
79 名前:nobodyさん mailto:sage [2009/02/21(土) 04:00:47 ID:???] 途中で書いちまったよ 商売ならなおのこと気を遣うべきで、 それがわからんなら線抜いて寝ちまえ、ってことだな
80 名前:nobodyさん mailto:sage [2009/02/21(土) 04:25:01 ID:???] >>78-79 さっさと寝ろ。
81 名前:nobodyさん mailto:sage [2009/02/21(土) 04:40:34 ID:???] 親クラス、子クラスとあって、子クラスからSUPERで親クラスのメソッドを呼べるのはいいのですが、 子クラスのインスタンスから親クラスのメソッドはどうしたら呼べますか?
82 名前:nobodyさん mailto:sage [2009/02/21(土) 05:09:33 ID:???] >>81 質問内容が今ひとつ分からない。 package Parent; sub new { my ($proto) = @_; my $class = ref($proto) || $proto; return bless { greeting => 'hello' }, $class; } package Child; use base qw(Parent); sub new { $_[0]->SUPER::new } package main; use Data::Dumper; print Dumper(Child->new); # new print Dumper(Child->new->new); # clone
83 名前:nobodyさん mailto:sage [2009/02/21(土) 05:32:46 ID:???] ああもしかして、メソッドをオーバーライドしないときの動作かな? メソッドが実装されていなければ、親のクラスを辿って実行するよ。 package Parent; sub new { bless { greeting => 'hello' }, $_[0] } sub greeting { return $_[0]->{greeting} } package Child; use base qw(Parent); package main; print Child->new->greeting, "\n"; # Parentのメソッドが呼ばれる
84 名前:nobodyさん mailto:sage [2009/02/21(土) 08:40:32 ID:???] >>83 具体例を出すべきでしたね、すみません。 package Parent; sub new { bless {},shift } sub whoami { print "parent\n" } package Child; use base 'Parent'; sub whoami { print "child\n" } package main; my $obj = Child->new; $obj->whoami; # child $obj->SUPER::whoami; # エラー。"parent\n"を出してほしい
85 名前:nobodyさん mailto:sage [2009/02/21(土) 08:42:04 ID:???] 途中送信・・・ 上記のように、Childクラスでオーバーライドしたメソッドがあるとき、スーパークラスのメソッドを呼びたいのです。
86 名前:nobodyさん mailto:sage [2009/02/21(土) 08:43:10 ID:???] そういうときは mixin するんじゃないの
87 名前:nobodyさん mailto:sage [2009/02/21(土) 10:14:01 ID:???] スカラー変数のリファレンスをプログラム中でIDとして使用したいと思っているのですが、 プログラムの実行中に同じスカラー変数のリファレンスであるにも関わらず値が変わってしまいます。 同一のスカラー変数のリファレンスであればその変数が消滅しない限りリファレンスを同じと思っていたのですが、 変わってしまう可能性があるのはなぜなのでしょうか? 知ってる方がいたら教えてください。
88 名前:nobodyさん mailto:sage [2009/02/21(土) 10:57:17 ID:???] 変数をどこかで触ってるんじゃないの。 とりあえずソースコード晒せ。
89 名前:nobodyさん mailto:sage [2009/02/21(土) 13:06:29 ID:???] >>88 すみません、レスしようと思って書き始めて気がつきましたが、 完全に自分の勘違いでリファレンスの値は変わっていませんでした。 リファレンスが不変となると、さらに別の疑問が。。 インサイドアウトオブジェクトを使用するときに、identを使う意味がなくなるように思うのですがどうなんでしょうか? (例) use Class::Std::Utils; { my %value_of; sub new { my($class, $opt) = @_; my $obj = bless \do{my $anon_scalar}, $class; return $obj; } sub set_value { my($self, $value) = @_; $value_of{ident $self} = $value; <===ここの ident を消しても動く。 return; } ・ ・ } この中でidentを削除しても普通に動いてしまいます。 リファレンスが不変なら、なぜわざわざidentで一意の値を取得する必要がわかりません。
90 名前:nobodyさん mailto:sage [2009/02/21(土) 13:08:00 ID:???] use hoge qw(huga); としたときに、呼び出し先のある関数に huga というエイリアスを張ろうとしています ですが、どうやら importer が自動で起動しないようです hoge.pm の &importer が呼び出されないことってあるんでしょうか? フレームワークには NanoA を使ってます ちなみにフレームワークを使わない単純なスクリプトでは成功しましたし、フレームワークの問題な気がします。 もし使えないことがあるなら代替方法を考えたいです use で渡された引数を受け取る手段って他にないんでしょうか?
91 名前:90 mailto:sage [2009/02/21(土) 14:31:01 ID:???] すみません、importer ではなくて import でしたorz プログラムのほうはちゃんとそうなってました
92 名前:nobodyさん mailto:sage [2009/02/21(土) 14:34:37 ID:???] >>84 そういうのは考えたことが無かったな。 SUPER.pm使うぐらいしか思いつかない。 package main; use SUPER; my $obj = Child->new; $obj->whoami; # child $obj->super('whoami')->(); >>89 ユニークな値ならなんでもよし。
93 名前:nobodyさん mailto:sage [2009/02/21(土) 15:01:05 ID:???] >>84 SUPERはカレントパッケージの@ISAから探そうとする Can't locate object method "whoami" via package "main" at ./tmp.pl line 19. と言われるようにカレントパッケージがmainなのでwhoamiは見つからない
94 名前:nobodyさん mailto:sage [2009/02/21(土) 18:31:27 ID:???] >>92 同じ名前で呼び出すことにこだわるなら、必要なときに分岐できるように ChildのCをさらにオーバーライドすると思う。 それか、別名で定義するか
95 名前:nobodyさん mailto:sage [2009/02/21(土) 18:32:52 ID:???] 訂正、Childのwhoamな
96 名前:nobodyさん mailto:sage [2009/02/21(土) 18:34:39 ID:???] >>89 オブジェクトをハッシュにキーにしてはいけないと聞いたことがある。 何故かはしらね オーバーロードしてるよきに困るからじゃないか?
97 名前:nobodyさん mailto:sage [2009/02/21(土) 20:18:48 ID:???] 一から作れるなら、こんな感じか。 PersonをインターフェイスにしてChildに多重継承させてもいいけど、 ちょっとゴチャつきそう。 package Person; sub new { my $class = shift; return bless { @_ }, $class; } sub whoami {} package Parent; use base 'Person'; sub whoami { print "parent\n" } package Child; use base 'Person'; sub new { my ($class, $parent) = @_; return $class->SUPER::new(parent => $parent); } sub whoami { print "child\n" } sub parent { shift->{parent} } package main; my $parent = Parent->new; my $obj = Child->new($parent); $obj->whoami; # child $obj->parent->whoami; # parent
98 名前:nobodyさん mailto:sage [2009/02/21(土) 20:31:17 ID:???] >>97 そういう形になりますか、ありがとうございます。 オーバーライドしたとき、元のメソッドを呼びたいときっていうのは、珍しいことでしょうか?
99 名前:nobodyさん mailto:sage [2009/02/21(土) 20:53:13 ID:???] 珍しいかどうかじゃなくて、設計の勉強しろよw
100 名前:90 mailto:sage [2009/02/21(土) 21:01:21 ID:???] すみません、自己解決しました。 ファイルが lib/haga/hoge.pm で、パッケージ宣言が package hoge; となっており、呼び出し元からは use haga::hoge と指定されていました パッケージ宣言を package haga::hoge; と直すと全てうまくいきました しかし不思議なのは、パッケージ自体は使えたことですね import関数だけが呼ばれないようでした
101 名前:nobodyさん mailto:sage [2009/02/22(日) 14:43:56 ID:???] >>100 ・ package NAME の実体はシンボルテーブルを表現するグローバルハッシュのキー ・ use NAME は本質的にはファイル名 この2つが一致するようにしておくのが慣習になっており(そうでもしないと発狂するので)、ほとんどのプログラムはそれを前提として書かれている。 use haga::hoge; は lib/haga/hoge.pm を見ており、import は package 宣言と同じ名前空間を見ている。 それは前述のようにハッシュなので、キーが見つからなければ黙って *自動生成* される。 use は正しいファイルを読み込み、package は指示された名前空間を設定し、内部的に import は仕様通り仕事を果たしており、問題は発生していないためエラーの類は出ない。 結論: あんまり不思議じゃありませんでした。
102 名前:nobodyさん mailto:sage [2009/02/22(日) 14:54:31 ID:???] >>101 おお〜なるほど 為になります ありがとうございました
103 名前:nobodyさん mailto:sage [2009/02/24(火) 03:40:08 ID:???] Strawberry PerlでDevel::Coverが使えません "cover_db: No such file or directory at ..."で死にます 似たような症状が出た人っていますか?
104 名前:nobodyさん mailto:sage [2009/02/24(火) 10:37:41 ID:???] No such file or directory なんでしょ?
105 名前:nobodyさん mailto:sage [2009/02/26(木) 21:12:44 ID:???] 最近RPM化が流行っているようなのですが、一番良い方法はどれなんでしょうか。
106 名前:nobodyさん mailto:sage [2009/02/27(金) 02:14:12 ID:???] 「cpanモジュールの」という語を補完して考えると、cpan2rpmでいいんじゃまいか
107 名前:nobodyさん mailto:sage [2009/02/27(金) 21:23:42 ID:???] >>106 > 「cpanモジュールの」という語を補完して考えると、cpan2rpmでいいんじゃまいか Catalyst とか Sledge とかをインストールする場合とかどんなですか。
108 名前:nobodyさん mailto:sage [2009/02/28(土) 21:24:49 ID:???] 最近perlを始めたのでこのスレを読み始めました。 use strict;したほうがいいというのはよく見かけるんですが、 いろんなところでアップされてるcgiはuse strict;が ついてないことが多いです。これはどうしてでしょうか。
109 名前:nobodyさん mailto:sage [2009/02/28(土) 21:48:56 ID:???] 大昔はuse strictしないことが多かった 最近ではuse strictしてないコードはマジキチ あとさ、アルファベットは半角使おうぜ
110 名前:nobodyさん mailto:sage [2009/02/28(土) 22:24:27 ID:???] >>108 納品前に strict と warnings は外してる。
111 名前:nobodyさん mailto:sage [2009/02/28(土) 22:41:55 ID:???] >>108 use strict;を付けるとエラーが出るから付けないって人も居た。 本末転倒。
112 名前:nobodyさん mailto:sage [2009/02/28(土) 23:26:30 ID:???] >>110 糞ソースだから、君ははじめから strict 付きで開発出来ないんだよね。 がんばれよ >>108 strict 付きで動かなかったり、warnning 出るスクリプトは糞です。 過剰表現ではなくて。
113 名前:nobodyさん mailto:sage [2009/03/01(日) 00:40:14 ID:???] まぁ〜た始まったよ
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 おっけー。 あと、既に知ってるかもしれないが 「ド・モルガンの法則」でぐぐってみると勉強になるかも