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/
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:???] 条件と処理を一行にいくつも書くと読みづらくなるから改行をもっと工夫せい