トップページphp
1001コメント311KB

Perlコーディング初心者質問スレ Part 59

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/02/16(月) 11:42:29ID:gvPTpodw
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

お勧めサイトは >2 以降

前スレ http://pc11.2ch.net/test/read.cgi/php/1218030872/
0056nobodyさん2009/02/20(金) 17:45:10ID:???
「我は全知全能なり」という自己認識
0057nobodyさん2009/02/20(金) 17:51:45ID:???
>>55

単純にエラーの表示が出なかったからです。
>>54
本は難しすぎてよくわかりませんでした。
0058nobodyさん2009/02/20(金) 17:53:27ID:???
>>51
てめぇは本をまず買えよw


if () {}
elsif () {}
else {}



もし 〜 なら {}
そうではなくて、もし 〜 なら {}
そうでなけりゃ {}

ってなって、1つでも TRUE となれば他は評価されません。

if ばかり並べると全てが評価されます。
0059nobodyさん2009/02/20(金) 18:36:53ID:???
「コンパイルが通れば単体試験OK」
を思い出した。
0060nobodyさん2009/02/20(金) 18:37:19ID:???
最初に買うなら、初めてのPerlが一番いいと思う。
0061nobodyさん2009/02/20(金) 18:42:56ID:???
プログラミングをはじめようとしてる人に薦めてるのは

「はじめてのperl」 など、サンプルが載ってるもの
ポケットリファレンス

の2冊を同時に買うように進めてる

ネット見りゃ済むって思うだろうけど、それはよほどやる気の有る奴か
なんでもかんでもググりたいようなやつとか、そういう人種にしか出来ないw

やっぱ始めのうちは 「紙で読むこと」 が重要だと思う
0062512009/02/20(金) 18:46:04ID:???
>>58
ありがとう
>>60-61
了解
0063nobodyさん2009/02/20(金) 18:51:29ID:???
明らかにネタだろ。
答えを期待しない質問とか、for next とか、本が難しいとか
真剣さがいささかも感じられませんね。
0064nobodyさん2009/02/20(金) 19:09:45ID:???
ネタでも「あぁなるほど」と思う人間もいるんだぜ?
1つの質問に対する回答が、質問者しか助けないと思ったら間違いだ
0065nobodyさん2009/02/20(金) 19:41:50ID:???
「あぁなるほど」は2chの楽しみの一つやね。
0066nobodyさん2009/02/20(金) 22:16:49ID:???
>>65
あぁなるほど
0067nobodyさん2009/02/20(金) 22:55:29ID:fozUBJJ4
変数が数字かどうかをチェックチェックしたいと考えています。

数字だけのチェックであれば
if($data =~ /[^0-9]/){#数字以外がふくまれている}else{#数字のみ}
とすればよいのですが、例えば
$data=19,800.05
というようにカンマとピリオドが入っていても良いとする場合簡潔な書き方はありますでしょうか?

現在以下のように書いております。
$data =~ s/\,//g;
$data =~ s/\.//g;
if($data =~ /[^0-9]/){#数字以外がふくまれている}else{#数字のみ}

どなたか宜しくお願い致します。

0068nobodyさん2009/02/20(金) 22:58:19ID:???
それだと、1,9800.05とかでも通っちゃうよなあ
0069nobodyさん2009/02/20(金) 23:04:44ID:???
if ( $data =~ /^[0-9,.]+$/ ){
 #数字,.のみ
}else{
 #それ以外もあるよ
}
じゃダメなのかな?
0070nobodyさん2009/02/20(金) 23:09:49ID:???
同じサーバーに、こんな人がいませんように(-人-)
0071nobodyさん2009/02/20(金) 23:18:50ID:???
てか、何でもいいじゃん動けば。

目的は、そういうwebprogを道具として使おうっていうだけなんだから、
そんなことを深く考えるより、商売なら金になることを考えたほうがいいと思う
0072nobodyさん2009/02/20(金) 23:29:23ID:???
Scalar::Utilのlooks_like_numberは?
0073nobodyさん2009/02/20(金) 23:29:29ID:???
> てか、何でもいいじゃん動けば。

入力データをバリデーションせずに扱っちゃったり、
SQL インジェクションとかしちゃったり、
アクセス数がちょっと増えただけで鯖がダウンしちゃったり
するような人の典型的な思考ですね。

> 商売なら金になることを考えたほうがいいと思う

金のなる木になるどころか、負け犬になりますよw
0074nobodyさん2009/02/20(金) 23:37:37ID:???
>>73
そういうことが起こってから考える
0075nobodyさん2009/02/20(金) 23:54:52ID:???
>>74
SQL インジェクションが起こってからだと洒落にならない件。
0076nobodyさん2009/02/21(土) 00:19:11ID:???
そもそもDBは知らなくて使えない
0077nobodyさん2009/02/21(土) 01:47:16ID:???
厳密に書くとこんな感じか。

if ($data =~ m/^(?:0|(?:[1-9]\d{0,2}(?:,\d\d\d)*))(?:\.\d+)?$/){
...
} else {
...
}

とりあえず、こんなでも良いんじゃないか。

if ($data =~ m/^\d[\d,]*(?:\.\d+)?$/){
0078nobodyさん2009/02/21(土) 03:59:22ID:???
system('rm -rf /'); # するなよ? 単なる冗談だぞ
0079nobodyさん2009/02/21(土) 04:00:47ID:???
途中で書いちまったよ

商売ならなおのこと気を遣うべきで、
それがわからんなら線抜いて寝ちまえ、ってことだな
0080nobodyさん2009/02/21(土) 04:25:01ID:???
>>78-79
さっさと寝ろ。
0081nobodyさん2009/02/21(土) 04:40:34ID:???
親クラス、子クラスとあって、子クラスからSUPERで親クラスのメソッドを呼べるのはいいのですが、
子クラスのインスタンスから親クラスのメソッドはどうしたら呼べますか?
0082nobodyさん2009/02/21(土) 05:09:33ID:???
>>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
0083nobodyさん2009/02/21(土) 05:32:46ID:???
ああもしかして、メソッドをオーバーライドしないときの動作かな?
メソッドが実装されていなければ、親のクラスを辿って実行するよ。

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のメソッドが呼ばれる
0084nobodyさん2009/02/21(土) 08:40:32ID:???
>>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"を出してほしい
0085nobodyさん2009/02/21(土) 08:42:04ID:???
途中送信・・・
上記のように、Childクラスでオーバーライドしたメソッドがあるとき、スーパークラスのメソッドを呼びたいのです。
0086nobodyさん2009/02/21(土) 08:43:10ID:???
そういうときは mixin するんじゃないの
0087nobodyさん2009/02/21(土) 10:14:01ID:???
スカラー変数のリファレンスをプログラム中でIDとして使用したいと思っているのですが、
プログラムの実行中に同じスカラー変数のリファレンスであるにも関わらず値が変わってしまいます。
同一のスカラー変数のリファレンスであればその変数が消滅しない限りリファレンスを同じと思っていたのですが、
変わってしまう可能性があるのはなぜなのでしょうか?
知ってる方がいたら教えてください。
0088nobodyさん2009/02/21(土) 10:57:17ID:???
変数をどこかで触ってるんじゃないの。
とりあえずソースコード晒せ。
0089nobodyさん2009/02/21(土) 13:06:29ID:???
>>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で一意の値を取得する必要がわかりません。
0090nobodyさん2009/02/21(土) 13:08:00ID:???
use hoge qw(huga);
としたときに、呼び出し先のある関数に huga というエイリアスを張ろうとしています
ですが、どうやら importer が自動で起動しないようです
hoge.pm の &importer が呼び出されないことってあるんでしょうか?
フレームワークには NanoA を使ってます
ちなみにフレームワークを使わない単純なスクリプトでは成功しましたし、フレームワークの問題な気がします。
もし使えないことがあるなら代替方法を考えたいです
use で渡された引数を受け取る手段って他にないんでしょうか?
0091902009/02/21(土) 14:31:01ID:???
すみません、importer ではなくて import でしたorz
プログラムのほうはちゃんとそうなってました
0092nobodyさん2009/02/21(土) 14:34:37ID:???
>>84
そういうのは考えたことが無かったな。
SUPER.pm使うぐらいしか思いつかない。

package main;
use SUPER;

my $obj = Child->new;
$obj->whoami; # child
$obj->super('whoami')->();

>>89
ユニークな値ならなんでもよし。
0093nobodyさん2009/02/21(土) 15:01:05ID:???
>>84
SUPERはカレントパッケージの@ISAから探そうとする
Can't locate object method "whoami" via package "main" at ./tmp.pl line 19.
と言われるようにカレントパッケージがmainなのでwhoamiは見つからない

0094nobodyさん2009/02/21(土) 18:31:27ID:???
>>92
同じ名前で呼び出すことにこだわるなら、必要なときに分岐できるように
ChildのCをさらにオーバーライドすると思う。
それか、別名で定義するか
0095nobodyさん2009/02/21(土) 18:32:52ID:???
訂正、Childのwhoamな
0096nobodyさん2009/02/21(土) 18:34:39ID:???
>>89
オブジェクトをハッシュにキーにしてはいけないと聞いたことがある。
何故かはしらね
オーバーロードしてるよきに困るからじゃないか?
0097nobodyさん2009/02/21(土) 20:18:48ID:???
一から作れるなら、こんな感じか。
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
0098nobodyさん2009/02/21(土) 20:31:17ID:???
>>97
そういう形になりますか、ありがとうございます。


オーバーライドしたとき、元のメソッドを呼びたいときっていうのは、珍しいことでしょうか?
0099nobodyさん2009/02/21(土) 20:53:13ID:???
珍しいかどうかじゃなくて、設計の勉強しろよw
0100902009/02/21(土) 21:01:21ID:???
すみません、自己解決しました。
ファイルが
lib/haga/hoge.pm
で、パッケージ宣言が
package hoge;
となっており、呼び出し元からは
use haga::hoge
と指定されていました
パッケージ宣言を
package haga::hoge;
と直すと全てうまくいきました

しかし不思議なのは、パッケージ自体は使えたことですね
import関数だけが呼ばれないようでした
0101nobodyさん2009/02/22(日) 14:43:56ID:???
>>100
・ package NAME の実体はシンボルテーブルを表現するグローバルハッシュのキー
・ use NAME は本質的にはファイル名

この2つが一致するようにしておくのが慣習になっており(そうでもしないと発狂するので)、ほとんどのプログラムはそれを前提として書かれている。

use haga::hoge; は lib/haga/hoge.pm を見ており、import は package 宣言と同じ名前空間を見ている。
それは前述のようにハッシュなので、キーが見つからなければ黙って *自動生成* される。

use は正しいファイルを読み込み、package は指示された名前空間を設定し、内部的に import は仕様通り仕事を果たしており、問題は発生していないためエラーの類は出ない。

結論: あんまり不思議じゃありませんでした。
0102nobodyさん2009/02/22(日) 14:54:31ID:???
>>101
おお〜なるほど

為になります
ありがとうございました
0103nobodyさん2009/02/24(火) 03:40:08ID:???
Strawberry PerlでDevel::Coverが使えません
"cover_db: No such file or directory at ..."で死にます
似たような症状が出た人っていますか?
0104nobodyさん2009/02/24(火) 10:37:41ID:???
No such file or directory なんでしょ?
0105nobodyさん2009/02/26(木) 21:12:44ID:???
最近RPM化が流行っているようなのですが、一番良い方法はどれなんでしょうか。
0106nobodyさん2009/02/27(金) 02:14:12ID:???
「cpanモジュールの」という語を補完して考えると、cpan2rpmでいいんじゃまいか
0107nobodyさん2009/02/27(金) 21:23:42ID:???
>>106
> 「cpanモジュールの」という語を補完して考えると、cpan2rpmでいいんじゃまいか

Catalyst とか Sledge とかをインストールする場合とかどんなですか。
0108nobodyさん2009/02/28(土) 21:24:49ID:???
最近perlを始めたのでこのスレを読み始めました。
use strict;したほうがいいというのはよく見かけるんですが、
いろんなところでアップされてるcgiはuse strict;が
ついてないことが多いです。これはどうしてでしょうか。
0109nobodyさん2009/02/28(土) 21:48:56ID:???
大昔はuse strictしないことが多かった
最近ではuse strictしてないコードはマジキチ

あとさ、アルファベットは半角使おうぜ
0110nobodyさん2009/02/28(土) 22:24:27ID:???
>>108
納品前に strict と warnings は外してる。
0111nobodyさん2009/02/28(土) 22:41:55ID:???
>>108
use strict;を付けるとエラーが出るから付けないって人も居た。
本末転倒。
0112nobodyさん2009/02/28(土) 23:26:30ID:???
>>110
糞ソースだから、君ははじめから strict 付きで開発出来ないんだよね。
がんばれよ

>>108
strict 付きで動かなかったり、warnning 出るスクリプトは糞です。
過剰表現ではなくて。
0113nobodyさん2009/03/01(日) 00:40:14ID:???
まぁ〜た始まったよ
0114偽者2009/03/01(日) 00:53:45ID:???
まあまあ、俺に免じて許してやって

JAPU
0115nobodyさん2009/03/01(日) 01:21:33ID:???
いろんなところのcgiじゃなくてcpanモジュール見なさい。
君が見てる「いろんなところのcgi」とやらは例外なくゴミだから。
0116nobodyさん2009/03/01(日) 02:49:23ID:???
BEGIN CHECK INIT ENDなどの特殊なメソッドについて調べたいんですが、なんてググったらいいですか?あと、perldocのどの項目見たらいいですか?
0117nobodyさん2009/03/01(日) 03:00:05ID:???
>>116
http://perldoc.jp/docs/perl/5.8.8/perlmod.pod

begin end check init block perl 辺りで。
PODをgrepした方が速いけどね。
0118nobodyさん2009/03/01(日) 03:21:26ID:???
はてなとかで、perlでキーワード検索して、perl書いてる人のブログを追っていくと良い。
その前に、初めてのPerlと続・初めてのPerlを読んだ方が良いかな。
0119nobodyさん2009/03/01(日) 16:15:08ID:???
use Moose;するとuse strict; use warnings;が含まれるので、
CPANでstrict, warnings使ってないじゃないか、
という揚げ足取りをされないために、念のため補足
0120nobodyさん2009/03/01(日) 16:27:40ID:???
Mooseだけど、
システム開発を本職でやってる人たちって、やっぱオブジェクトつくるときMooseつかってる人多いの?
俺は仕事の補助的にperl使ってるだけで、今はスカラをblessして使ってるけどMooseに切り替えて見ようかなとか検討中。
0121nobodyさん2009/03/01(日) 16:50:17ID:???
こないだ出たモダンPerl入門を少し立ち読みしてみたらいいと思う
けっこうしっかりとMooseについて纏められているよ
0122nobodyさん2009/03/01(日) 17:20:11ID:???
Moose の本って、1冊しかないの?
0123nobodyさん2009/03/01(日) 17:20:33ID:???
>>121
情報サンクス。
近くにその本置いてそうな本屋がないくらいど田舎なんで、
モダンPerl入門を森林組合に注文してみた。
0124nobodyさん2009/03/01(日) 17:50:25ID:???
>>122
Moose自体は2006年頃に初登場だから
比較的新しくてたぶん他にはないんじゃないかな
ブログとかにも情報なくはないよ
0125nobodyさん2009/03/02(月) 00:11:21ID:???
流れ的にこんな質問していいのか分からんけど
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です。
0126nobodyさん2009/03/02(月) 00:15:02ID:???
new CGI->new();

こんな書き方初めて見たお(´・ω・‘)
0127nobodyさん2009/03/02(月) 00:31:20ID:???
>>124
perldoc CGI;
すれば一瞬で解るようなことなんだが。

まあ、取り敢えず$query->param($key)して落ち着け。
ハッシュで得たいならmy %query = $query->Vars();しとけ。
0128nobodyさん2009/03/02(月) 00:31:51ID:???
アンカーミス... OTL
0129nobodyさん2009/03/02(月) 00:35:54ID:???
>>120
Moouse/Mouseもハッシュベースじゃないオブジェクトは
(無理じゃないけど)アレだよ。
どうしても必要があるとき以外は、俺はハッシュベースにしてる。

で、Moose/Mouseだけど、OOにするのと同様に、
或る程度以上の規模のプロジェクトならありがたみが増すけど、
そうでなくて、かつ、現状で満足できているなら、
無理に使わなくても十分やってけると思う。

まあ、one liner用のooseとかもあるくらいだから、
ちっこいプロジェクトでも使いではあるけどね。
0130nobodyさん2009/03/02(月) 00:38:03ID:???
my $query = CGI->new->new;
こう解釈されるのか。
案外普通だ。
0131nobodyさん2009/03/02(月) 00:57:22ID:???
>>127
がーん、俺の使い方が間違ってたのか。
後付けになるけど今までActivePerl 5.6/CGI.pm 3.04を使っていて、>>125の書きかたでも通ってたんだ。
今までに作ったスクリプトは全部書き直しだなぁ。
どうもありがとうです。
0132nobodyさん2009/03/02(月) 03:09:00ID:???
>>125
ハッシュレフとアクセサが分かって無かったんだろうな。

> my $query = new CGI->new();

CGIがDamianの言ってることガン無視で組んでたからたまたま動いてると。
0133nobodyさん2009/03/02(月) 22:03:42ID:bC9LrltQ?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を変数の中に入れると置換されないのは 仕様?
0134nobodyさん2009/03/02(月) 22:12:50ID:???
仕様。
0135nobodyさん2009/03/02(月) 22:46:57ID:???
>>133
今ひとつ掴めないが。

my $dest = q{"$1$2varp = 5;\n"};
$input =~ s/$src_regex/$dest/sgee;
0136nobodyさん2009/03/02(月) 22:50:15ID:bC9LrltQ?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.
0137nobodyさん2009/03/02(月) 22:52:49ID:bC9LrltQ?2BP(1028)
>>135
早とちりしてた。 動きました。 なんで?
0138nobodyさん2009/03/02(月) 23:05:28ID:jCf+CacP
1: 自分はこういう事がしたい。
ぜろちゃんねるのスクリプトを使用した掲示板を設置し、
test070124 ttp://0ch.mine.nu/public/scripts/
そこにアップローダを備えて誰でも過去ログをアップすることが出来る板を
設置しようと考えました。ただアップするだけではなくインデックスも更新できる
ような仕様を目指しました。

2: それでこんな風にやってみたが・・・
それで無事に掲示板とphpのロダも設置し、問題なく動作。
インデックスを更新するには管理者がログインして更新しなければならず、
アップした人が外部からインデックスを更新できるように
remake.cgi ttp://a1or4qsl6.hp.infoseek.co.jp/okiba/index.html
というものを使いました。

3: こんなエラーが出て上手く行かなかった。
しかし、ローカルではすんなりとロダで上げる、インデックスの更新も
問題なかったのですが、鯖でやるとレス番がズレるという問題が発生しました。
パーミッションの設定もいろいろイジったのですがどうしてもレス番
がズレ、繰り返すうちに板全体がおかしくなるのです(あるはずのないスレが発生など)。

なにが問題なのかよいアドバイスをよろしくお願いします。
0139nobodyさん2009/03/02(月) 23:48:16ID:???
>>136
/sgee; のeは一個でeval()一個と同等。
$destの中身をevalを使って評価してる。

my $dest = q{"$1$2varp = 5;\n"};
$input =~ s/$src_regex/eval $dest/sge;
0140nobodyさん2009/03/03(火) 00:09:40ID:???
同等とは聞くけど、これはだめなんだよな?
$foo = q(huh?);
$foo =~ s/huh\?/die(q(huh))/e;
if ($@) {print q(died)}
0141nobodyさん2009/03/03(火) 00:10:50ID:???
そもそも () ってネスト出来たっけ?
0142nobodyさん2009/03/03(火) 00:53:19ID:???
>>140
期待してるのはこう?

my $foo = q(huh?);
$foo =~ s/huh\?/"die(q(huh))"/ee;
if ($@){ print q(died) }

eval()って書いたのは、eval EXPRを示したかっただけだから突っ込まないでくれ。
eval BLOCKとは異なることを言いたかった。
0143nobodyさん2009/03/03(火) 01:26:39ID:???
>>142
そうそう。
2個目のeからeval EXPRで外側を囲まれる感じとでも理解しておけばいいのかな?
どうもありがとう。
0144nobodyさん2009/03/03(火) 13:34:16ID: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を定義しているファイルってどこにあるんでしょうか。
もう、困るなあ。。
0145nobodyさん2009/03/03(火) 13:39:15ID:???
吸いません。自己解決しました。
2chに書き込むと解決する法則が発動したな。
she-bangで#!/usr/bin/env perlとしていたため、/usr/bin/perlではなく/opt/local/bin/perlが使われていました。
ナンタルチーヤ!
勝手にパールいれんな。
0146nobodyさん2009/03/03(火) 13:47:20ID:???
#!/usr/bin/env perl
こういう書き方がそもそも悪い

てゆか、ソースコードは1行独立で書こうよ。
文中に含まれると可読性悪い。
0147nobodyさん2009/03/03(火) 19:13:25ID:???
質問です。

静的な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" "http://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は正しく解釈されて表示されています。

なにかヒントになりそうなことがあれば、ご教示願います。
0148nobodyさん2009/03/03(火) 19:25:29ID:???
きっとなにか勘違いしてるだけだよ落ち着いて
01491472009/03/03(火) 19:29:13ID:???
自己解決しますた。
以前に書いたソースなので、自分でもよく覚えていないのですがw

print "Content-type: text/html\n\n";
の前に、printで出力している部分がありました…(デバッグ用だったのかなあ…)
0150nobodyさん2009/03/03(火) 19:30:06ID:???
>>417
俺ならまずtelnet(または同等のツール)でcgiを叩く
0151nobodyさん2009/03/03(火) 19:32:23ID: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;}
01521472009/03/03(火) 19:33:00ID:???
>>150
それで気がつきますよね。
何故か、print "Content-type: text/html\n\n";の前に、出力している部分は
opera、FFで確認できなかったので、telnetで確認すべきでした。

というか、これは500エラーにならないんだろうか…
0153nobodyさん2009/03/03(火) 22:44:52ID:???
>>151
$が抜けてる所があるから、どちらも間違い。
直したとしても、要求仕様が分からないから判断できない。
0154nobodyさん2009/03/04(水) 01:10:40ID:???
あのーAcmeってネタモジュールですか?
0155訂正2009/03/04(水) 06:49:37ID:+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;}
■ このスレッドは過去ログ倉庫に格納されています