Perlコーディング初心者質問スレ Part 59at PHP
Perlコーディング初心者質問スレ Part 59 - 暇つぶし2ch50:nobodyさん
09/02/20 16:28:05
晒せないところは伏字にすればいいだろ

51:nobodyさん
09/02/20 17:01:26 vekYyWEG
if () {}
if () {}
if () {}

if () {}
elsif () {}
elsif () {}
に変えたら直りました。上記だと2個の条件を同時に満たしたときにバグるようです。
下記だと同時に条件を満たしたとき先に記述された条件のほうを優先するようです。
なぜだかさっぱりわかりません。

52:nobodyさん
09/02/20 17:03:40

そんなレベルの奴が書いた300行のスクリプト…

53:nobodyさん
09/02/20 17:18:50
>>52
for next などの繰り返し処理や
サブルーチンの使い方などが良くわからないのでやたら長くなりました

ちなみに賞味300行なので空行を入れて印刷すると15ページになりました。
連動する別のファイルのスクリプトをあわせると30ページ以上になりました。
やっぱりサブルーチンは覚えるべきだとおもいました。

54:nobodyさん
09/02/20 17:30:01
>>53
本とか買えば?

55:nobodyさん
09/02/20 17:34:37
>プログラムの記述には問題は無いはず。
こういう自信って何処から来るんだろう。

56:nobodyさん
09/02/20 17:45:10
「我は全知全能なり」という自己認識

57:nobodyさん
09/02/20 17:51:45
>>55

単純にエラーの表示が出なかったからです。
>>54
本は難しすぎてよくわかりませんでした。

58:nobodyさん
09/02/20 17:53:27
>>51
てめぇは本をまず買えよw


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



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

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

if ばかり並べると全てが評価されます。

59:nobodyさん
09/02/20 18:36:53
「コンパイルが通れば単体試験OK」
を思い出した。

60:nobodyさん
09/02/20 18:37:19
最初に買うなら、初めてのPerlが一番いいと思う。

61:nobodyさん
09/02/20 18:42:56
プログラミングをはじめようとしてる人に薦めてるのは

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

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

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

やっぱ始めのうちは 「紙で読むこと」 が重要だと思う

62:51
09/02/20 18:46:04
>>58
ありがとう
>>60-61
了解

63:nobodyさん
09/02/20 18:51:29
明らかにネタだろ。
答えを期待しない質問とか、for next とか、本が難しいとか
真剣さがいささかも感じられませんね。

64:nobodyさん
09/02/20 19:09:45
ネタでも「あぁなるほど」と思う人間もいるんだぜ?
1つの質問に対する回答が、質問者しか助けないと思ったら間違いだ

65:nobodyさん
09/02/20 19:41:50
「あぁなるほど」は2chの楽しみの一つやね。

66:nobodyさん
09/02/20 22:16:49
>>65
あぁなるほど

67:nobodyさん
09/02/20 22:55:29 fozUBJJ4
変数が数字かどうかをチェックチェックしたいと考えています。

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

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

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



68:nobodyさん
09/02/20 22:58:19
それだと、1,9800.05とかでも通っちゃうよなあ

69:nobodyさん
09/02/20 23:04:44
if ( $data =~ /^[0-9,.]+$/ ){
 #数字,.のみ
}else{
 #それ以外もあるよ
}
じゃダメなのかな?

70:nobodyさん
09/02/20 23:09:49
同じサーバーに、こんな人がいませんように(-人-)

71:nobodyさん
09/02/20 23:18:50
てか、何でもいいじゃん動けば。

目的は、そういうwebprogを道具として使おうっていうだけなんだから、
そんなことを深く考えるより、商売なら金になることを考えたほうがいいと思う

72:nobodyさん
09/02/20 23:29:23
Scalar::Utilのlooks_like_numberは?

73:nobodyさん
09/02/20 23:29:29
> てか、何でもいいじゃん動けば。

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

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

金のなる木になるどころか、負け犬になりますよw

74:nobodyさん
09/02/20 23:37:37
>>73
そういうことが起こってから考える

75:nobodyさん
09/02/20 23:54:52
>>74
SQL インジェクションが起こってからだと洒落にならない件。

76:nobodyさん
09/02/21 00:19:11
そもそもDBは知らなくて使えない

77:nobodyさん
09/02/21 01:47:16
厳密に書くとこんな感じか。

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

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

if ($data =~ m/^\d[\d,]*(?:\.\d+)?$/){

78:nobodyさん
09/02/21 03:59:22
system('rm -rf /'); # するなよ? 単なる冗談だぞ

79:nobodyさん
09/02/21 04:00:47
途中で書いちまったよ

商売ならなおのこと気を遣うべきで、
それがわからんなら線抜いて寝ちまえ、ってことだな

80:nobodyさん
09/02/21 04:25:01
>>78-79
さっさと寝ろ。

81:nobodyさん
09/02/21 04:40:34
親クラス、子クラスとあって、子クラスからSUPERで親クラスのメソッドを呼べるのはいいのですが、
子クラスのインスタンスから親クラスのメソッドはどうしたら呼べますか?

82:nobodyさん
09/02/21 05:09:33
>>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さん
09/02/21 05:32:46
ああもしかして、メソッドをオーバーライドしないときの動作かな?
メソッドが実装されていなければ、親のクラスを辿って実行するよ。

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さん
09/02/21 08:40:32
>>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さん
09/02/21 08:42:04
途中送信・・・
上記のように、Childクラスでオーバーライドしたメソッドがあるとき、スーパークラスのメソッドを呼びたいのです。

86:nobodyさん
09/02/21 08:43:10
そういうときは mixin するんじゃないの

87:nobodyさん
09/02/21 10:14:01
スカラー変数のリファレンスをプログラム中でIDとして使用したいと思っているのですが、
プログラムの実行中に同じスカラー変数のリファレンスであるにも関わらず値が変わってしまいます。
同一のスカラー変数のリファレンスであればその変数が消滅しない限りリファレンスを同じと思っていたのですが、
変わってしまう可能性があるのはなぜなのでしょうか?
知ってる方がいたら教えてください。

88:nobodyさん
09/02/21 10:57:17
変数をどこかで触ってるんじゃないの。
とりあえずソースコード晒せ。

89:nobodyさん
09/02/21 13:06:29
>>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さん
09/02/21 13:08:00
use hoge qw(huga);
としたときに、呼び出し先のある関数に huga というエイリアスを張ろうとしています
ですが、どうやら importer が自動で起動しないようです
hoge.pm の &importer が呼び出されないことってあるんでしょうか?
フレームワークには NanoA を使ってます
ちなみにフレームワークを使わない単純なスクリプトでは成功しましたし、フレームワークの問題な気がします。
もし使えないことがあるなら代替方法を考えたいです
use で渡された引数を受け取る手段って他にないんでしょうか?

91:90
09/02/21 14:31:01
すみません、importer ではなくて import でしたorz
プログラムのほうはちゃんとそうなってました

92:nobodyさん
09/02/21 14:34:37
>>84
そういうのは考えたことが無かったな。
SUPER.pm使うぐらいしか思いつかない。

package main;
use SUPER;

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

>>89
ユニークな値ならなんでもよし。

93:nobodyさん
09/02/21 15:01:05
>>84
SUPERはカレントパッケージの@ISAから探そうとする
Can't locate object method "whoami" via package "main" at ./tmp.pl line 19.
と言われるようにカレントパッケージがmainなのでwhoamiは見つからない



94:nobodyさん
09/02/21 18:31:27
>>92
同じ名前で呼び出すことにこだわるなら、必要なときに分岐できるように
ChildのCをさらにオーバーライドすると思う。
それか、別名で定義するか

95:nobodyさん
09/02/21 18:32:52
訂正、Childのwhoamな

96:nobodyさん
09/02/21 18:34:39
>>89
オブジェクトをハッシュにキーにしてはいけないと聞いたことがある。
何故かはしらね
オーバーロードしてるよきに困るからじゃないか?

97:nobodyさん
09/02/21 20:18:48
一から作れるなら、こんな感じか。
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さん
09/02/21 20:31:17
>>97
そういう形になりますか、ありがとうございます。


オーバーライドしたとき、元のメソッドを呼びたいときっていうのは、珍しいことでしょうか?

99:nobodyさん
09/02/21 20:53:13
珍しいかどうかじゃなくて、設計の勉強しろよw

100:90
09/02/21 21:01:21
すみません、自己解決しました。
ファイルが
lib/haga/hoge.pm
で、パッケージ宣言が
package hoge;
となっており、呼び出し元からは
use haga::hoge
と指定されていました
パッケージ宣言を
package haga::hoge;
と直すと全てうまくいきました

しかし不思議なのは、パッケージ自体は使えたことですね
import関数だけが呼ばれないようでした

101:nobodyさん
09/02/22 14:43:56
>>100
・ package NAME の実体はシンボルテーブルを表現するグローバルハッシュのキー
・ use NAME は本質的にはファイル名

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

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

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

結論: あんまり不思議じゃありませんでした。


102:nobodyさん
09/02/22 14:54:31
>>101
おお~なるほど

為になります
ありがとうございました

103:nobodyさん
09/02/24 03:40:08
Strawberry PerlでDevel::Coverが使えません
"cover_db: No such file or directory at ..."で死にます
似たような症状が出た人っていますか?

104:nobodyさん
09/02/24 10:37:41
No such file or directory なんでしょ?

105:nobodyさん
09/02/26 21:12:44
最近RPM化が流行っているようなのですが、一番良い方法はどれなんでしょうか。

106:nobodyさん
09/02/27 02:14:12
「cpanモジュールの」という語を補完して考えると、cpan2rpmでいいんじゃまいか

107:nobodyさん
09/02/27 21:23:42
>>106
> 「cpanモジュールの」という語を補完して考えると、cpan2rpmでいいんじゃまいか

Catalyst とか Sledge とかをインストールする場合とかどんなですか。

108:nobodyさん
09/02/28 21:24:49
最近perlを始めたのでこのスレを読み始めました。
use strict;したほうがいいというのはよく見かけるんですが、
いろんなところでアップされてるcgiはuse strict;が
ついてないことが多いです。これはどうしてでしょうか。

109:nobodyさん
09/02/28 21:48:56
大昔はuse strictしないことが多かった
最近ではuse strictしてないコードはマジキチ

あとさ、アルファベットは半角使おうぜ

110:nobodyさん
09/02/28 22:24:27
>>108
納品前に strict と warnings は外してる。

111:nobodyさん
09/02/28 22:41:55
>>108
use strict;を付けるとエラーが出るから付けないって人も居た。
本末転倒。

112:nobodyさん
09/02/28 23:26:30
>>110
糞ソースだから、君ははじめから strict 付きで開発出来ないんだよね。
がんばれよ

>>108
strict 付きで動かなかったり、warnning 出るスクリプトは糞です。
過剰表現ではなくて。

113:nobodyさん
09/03/01 00:40:14
まぁ~た始まったよ

114:偽者
09/03/01 00:53:45
まあまあ、俺に免じて許してやって

JAPU

115:nobodyさん
09/03/01 01:21:33
いろんなところのcgiじゃなくてcpanモジュール見なさい。
君が見てる「いろんなところのcgi」とやらは例外なくゴミだから。

116:nobodyさん
09/03/01 02:49:23
BEGIN CHECK INIT ENDなどの特殊なメソッドについて調べたいんですが、なんてググったらいいですか?あと、perldocのどの項目見たらいいですか?

117:nobodyさん
09/03/01 03:00:05
>>116
URLリンク(perldoc.jp)

begin end check init block perl 辺りで。
PODをgrepした方が速いけどね。

118:nobodyさん
09/03/01 03:21:26
はてなとかで、perlでキーワード検索して、perl書いてる人のブログを追っていくと良い。
その前に、初めてのPerlと続・初めてのPerlを読んだ方が良いかな。

119:nobodyさん
09/03/01 16:15:08
use Moose;するとuse strict; use warnings;が含まれるので、
CPANでstrict, warnings使ってないじゃないか、
という揚げ足取りをされないために、念のため補足

120:nobodyさん
09/03/01 16:27:40
Mooseだけど、
システム開発を本職でやってる人たちって、やっぱオブジェクトつくるときMooseつかってる人多いの?
俺は仕事の補助的にperl使ってるだけで、今はスカラをblessして使ってるけどMooseに切り替えて見ようかなとか検討中。


121:nobodyさん
09/03/01 16:50:17
こないだ出たモダンPerl入門を少し立ち読みしてみたらいいと思う
けっこうしっかりとMooseについて纏められているよ

122:nobodyさん
09/03/01 17:20:11
Moose の本って、1冊しかないの?

123:nobodyさん
09/03/01 17:20:33
>>121
情報サンクス。
近くにその本置いてそうな本屋がないくらいど田舎なんで、
モダンPerl入門を森林組合に注文してみた。


124:nobodyさん
09/03/01 17:50:25
>>122
Moose自体は2006年頃に初登場だから
比較的新しくてたぶん他にはないんじゃないかな
ブログとかにも情報なくはないよ

125:nobodyさん
09/03/02 00:11:21
流れ的にこんな質問していいのか分からんけど
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さん
09/03/02 00:15:02
new CGI->new();

こんな書き方初めて見たお(´・ω・‘)

127:nobodyさん
09/03/02 00:31:20
>>124
perldoc CGI;
すれば一瞬で解るようなことなんだが。

まあ、取り敢えず$query->param($key)して落ち着け。
ハッシュで得たいならmy %query = $query->Vars();しとけ。

128:nobodyさん
09/03/02 00:31:51
アンカーミス... OTL

129:nobodyさん
09/03/02 00:35:54
>>120
Moouse/Mouseもハッシュベースじゃないオブジェクトは
(無理じゃないけど)アレだよ。
どうしても必要があるとき以外は、俺はハッシュベースにしてる。

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

まあ、one liner用のooseとかもあるくらいだから、
ちっこいプロジェクトでも使いではあるけどね。

130:nobodyさん
09/03/02 00:38:03
my $query = CGI->new->new;
こう解釈されるのか。
案外普通だ。

131:nobodyさん
09/03/02 00:57:22
>>127
がーん、俺の使い方が間違ってたのか。
後付けになるけど今までActivePerl 5.6/CGI.pm 3.04を使っていて、>>125の書きかたでも通ってたんだ。
今までに作ったスクリプトは全部書き直しだなぁ。
どうもありがとうです。

132:nobodyさん
09/03/02 03:09:00
>>125
ハッシュレフとアクセサが分かって無かったんだろうな。

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

CGIがDamianの言ってることガン無視で組んでたからたまたま動いてると。


133:nobodyさん
09/03/02 22:03:42 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さん
09/03/02 22:12:50
仕様。

135:nobodyさん
09/03/02 22:46:57
>>133
今ひとつ掴めないが。

my $dest = q{"$1$2varp = 5;\n"};
$input =~ s/$src_regex/$dest/sgee;

136:nobodyさん
09/03/02 22:50:15 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さん
09/03/02 22:52:49 bC9LrltQ BE:650933055-2BP(1028)
>>135
早とちりしてた。 動きました。 なんで?

138:nobodyさん
09/03/02 23:05:28 jCf+CacP
1: 自分はこういう事がしたい。
ぜろちゃんねるのスクリプトを使用した掲示板を設置し、
test070124 URLリンク(0ch.mine.nu)
そこにアップローダを備えて誰でも過去ログをアップすることが出来る板を
設置しようと考えました。ただアップするだけではなくインデックスも更新できる
ような仕様を目指しました。

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

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

なにが問題なのかよいアドバイスをよろしくお願いします。


139:nobodyさん
09/03/02 23:48:16
>>136
/sgee; のeは一個でeval()一個と同等。
$destの中身をevalを使って評価してる。

my $dest = q{"$1$2varp = 5;\n"};
$input =~ s/$src_regex/eval $dest/sge;

140:nobodyさん
09/03/03 00:09:40
同等とは聞くけど、これはだめなんだよな?
$foo = q(huh?);
$foo =~ s/huh\?/die(q(huh))/e;
if ($@) {print q(died)}

141:nobodyさん
09/03/03 00:10:50
そもそも () ってネスト出来たっけ?

142:nobodyさん
09/03/03 00:53:19
>>140
期待してるのはこう?

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

eval()って書いたのは、eval EXPRを示したかっただけだから突っ込まないでくれ。
eval BLOCKとは異なることを言いたかった。

143:nobodyさん
09/03/03 01:26:39
>>142
そうそう。
2個目のeからeval EXPRで外側を囲まれる感じとでも理解しておけばいいのかな?
どうもありがとう。

144:nobodyさん
09/03/03 13:34:16 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さん
09/03/03 13:39:15
吸いません。自己解決しました。
2chに書き込むと解決する法則が発動したな。
she-bangで#!/usr/bin/env perlとしていたため、/usr/bin/perlではなく/opt/local/bin/perlが使われていました。
ナンタルチーヤ!
勝手にパールいれんな。

146:nobodyさん
09/03/03 13:47:20
#!/usr/bin/env perl
こういう書き方がそもそも悪い

てゆか、ソースコードは1行独立で書こうよ。
文中に含まれると可読性悪い。

147:nobodyさん
09/03/03 19:13:25
質問です。

静的な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" "URLリンク(www.w3.org)">
<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さん
09/03/03 19:25:29
きっとなにか勘違いしてるだけだよ落ち着いて

149:147
09/03/03 19:29:13
自己解決しますた。
以前に書いたソースなので、自分でもよく覚えていないのですがw

print "Content-type: text/html\n\n";
の前に、printで出力している部分がありました…(デバッグ用だったのかなあ…)

150:nobodyさん
09/03/03 19:30:06
>>417
俺ならまずtelnet(または同等のツール)でcgiを叩く

151:nobodyさん
09/03/03 19:32:23 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
09/03/03 19:33:00
>>150
それで気がつきますよね。
何故か、print "Content-type: text/html\n\n";の前に、出力している部分は
opera、FFで確認できなかったので、telnetで確認すべきでした。

というか、これは500エラーにならないんだろうか…

153:nobodyさん
09/03/03 22:44:52
>>151
$が抜けてる所があるから、どちらも間違い。
直したとしても、要求仕様が分からないから判断できない。

154:nobodyさん
09/03/04 01:10:40
あのーAcmeってネタモジュールですか?

155:訂正
09/03/04 06:49:37 +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さん
09/03/04 07:13:20
if もし○○ならば
elsif ○○ではなくて××ならば
elsif さらに××でもなくて△△ならば

というだけの話なのだが

157:nobodyさん
09/03/04 07:46:56 +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さん
09/03/04 08:01:49
>>157
30以上が入力されるとバグりますって、例えば$aが40だったら$a > 10は満たされるからそこが実行されるに決まってるだろうがよ。


159:nobodyさん
09/03/04 08:04:26
そこがっていうかそこもって言わないと分からないのか。

if ( $a > 10 ){なんか処理}
if ( $a > 20 ){なんか処理}
if ( $a > 30 ){なんか処理}

お前さんの例で言うなら、例えば$aが40だったら「なんか処理」は三つとも実行される。

160:nobodyさん
09/03/04 10:14:27
if(10未満){処理}
elsif(10以上20未満){処理}
else{処理}


161:nobodyさん
09/03/04 10:20:20
なんで小さい順に評価しようとするの?
大きい順に評価して if を並べりゃいいじゃない

162:nobodyさん
09/03/04 10:26:43
(´・ω・`)?

163:nobodyさん
09/03/04 12:01:34 +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さん
09/03/04 12:04:07
条件と処理を一行にいくつも書くと読みづらくなるから改行をもっと工夫せい

165:nobodyさん
09/03/04 12:20:59
>>163
レス読んでるの?
あれ読んで分からないの?

166:nobodyさん
09/03/04 12:58:45
>>165
何番のレスですか?

167:nobodyさん
09/03/04 13:18:26
とりあえずさ
何が要求仕様なのかもう一度整理しろ

んで、仮にこういうデータが来たらどう処理されるなってのを考えろ

168:nobodyさん
09/03/04 14:37:04
>>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さん
09/03/04 15:04:49
質問に偽装したいやがらせ

170:nobodyさん
09/03/04 15:47:05
>>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さん
09/03/04 16:28:04
そもそもてめぇの言う不具合を示せよ
俺らはエスパーじゃねーんだよクソッタレ

172:nobodyさん
09/03/04 16:43:38
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さん
09/03/04 16:45:26
書き忘れたことあった。

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さん
09/03/04 16:47:31
for my $i (@pointlist){
  $rankA = $ranklist[$i] if $pointA < $pointlist[$i];
  $rankB = $ranklist[$i] if $pointB < $pointlist[$i];
}

の方がすっきりしない?

175:nobodyさん
09/03/04 17:20:03 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さん
09/03/04 17:49:56
>>174
あっ、そうゆう書き方出来るんですね。


177:nobodyさん
09/03/04 19:02:40
ごめん174は嘘

178:nobodyさん
09/03/04 19:03:16
for my $i (0 .. $#pointlist){
  $rankA = $ranklist[$i] if $pointA < $pointlist[$i];
  $rankB = $ranklist[$i] if $pointB < $pointlist[$i];
}

179:nobodyさん
09/03/04 19:08:07 +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さん
09/03/04 19:23:02
文章力とかじゃねぇよ
お前プログラム勉強する気あるのか?
ifとelsifの違いは>>156に書いてあるだろ

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

実行されるのはどれか1つだ


if(){}
if(){}
if(){}

実行されるのは0-3個のどれか



181:nobodyさん
09/03/04 19:25:37
ふぐあいかっこわらい
こんだけ世界中で使われてるものの不具合がお前ごときに見つけられるわけがねーだろ

182:nobodyさん
09/03/04 19:32:56
共用鯖で実験ですか…


氏ねよ



183:nobodyさん
09/03/04 19:34:08
>>179

>>58にも書いてあるし
お前はそれに>>62でありがとうって返してる



184:nobodyさん
09/03/04 19:41:31
つか、そんなもん100個くらい並べたくらいで壊れねーよ。

185:nobodyさん
09/03/04 19:55:41
では1000個並べてみます><

186:nobodyさん
09/03/04 20:00:39
すごいのが来ていたんだな。。。
まー「外注に依頼」という正解にたどり着いたのはいいことだ。

187:nobodyさん
09/03/04 20:13:55
これは受託先がボッタくれそうでいいなあ・・

共用鯖で実験ならいつもやってますw
無限ループやらかして、何度自分でプロセス切った事やらw

188:nobodyさん
09/03/04 22:04:05
共有鯖って、数十秒でキルされるんじゃないの?
そういう設定が普通だと思ってた

189:nobodyさん
09/03/04 23:45:41 4H3lqSU+
ある文字列が対象の含まれていないときだけ実行させるにはどうすればよいでしょうか?
含まれていたときはスルーし、最後に実行させたいのですが。

こんな感じのときです

対象 hogehoge
検索 geh
含まれていたら print "NO";
含まれていなかったら他の条件へ。

190:nobodyさん
09/03/04 23:53:18
>含まれていたときはスルーし、最後に実行させたいのですが。
ここがよくわからない

if ( $str =~ /geh/ ){
 print "NO";
}else{
 #他の条件
}


191:nobodyさん
09/03/04 23:53:35
my $str = 'hogehoge';
my $search = 'geh';
if($str =~ /$search/){
print "NO\n";
}else{
....
}


192:nobodyさん
09/03/04 23:53:59
含まれていたら終了

193:nobodyさん
09/03/05 00:02:54 PCYMuwfz
>>190
>>191

>>191で行ってみます。それをしたかったんです。

194:nobodyさん
09/03/05 00:09:14 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さん
09/03/05 00:16:13
含まれていたら print "NO"って書いてたやん

処理が逆なら真偽ひっくり返したらいいだけ

196:nobodyさん
09/03/05 00:26:06 PCYMuwfz
>>195
>含まれていたら print "NO"って書いてたやん

間違えていました。正しくは含まれていないときに実行したいのです。

真偽をひっくり返すとは?


197:nobodyさん
09/03/05 00:28:58
if(!条件)もしくはunless(条件)

198:nobodyさん
09/03/05 00:41:15 PCYMuwfz
こういうのは出来ないんですよね?

$str = hogehoge;
if ( $str != ~/geh/) {
print "NO";
}

199:nobodyさん
09/03/05 00:45:44
>>198
$str = hogehoge;
if ( $str !~ /geh/) {
print "NO";
}

200:nobodyさん
09/03/05 00:49:56
if($str !~ /geh/){
  ~処理~
}


!~ は 一致したときに偽となります。
なので、!~ で一致しなければ真となります。

201:nobodyさん
09/03/05 01:01:50 PCYMuwfz
>>199>>200
出来ました。
ありがとうございました。


202:nobodyさん
09/03/05 02:37:44
2chでもそうですけど書き込み確認画面ってありますよね?
あれってどうやっているんですか?2つcgiを用意するのか
もしくは1つでやっているんでしょうか?

203:nobodyさん
09/03/05 02:41:58
1つでも2つでもどうとでもできる

204:nobodyさん
09/03/05 06:51:21
簡易掲示板チャットをやっているんですがユーザーへの禁止語句にエラーが出てしまうのです。
原因を調べてみた結果「ー」がその原因だったことが判明しました。
ソースはこんな感じなんですがどうすればエラーが出ないようになるでしょうか?

if( $NG =~ m/$subject/) {
print '禁止ワードです';
}

文字コードはShift-JISでj-code.plなどは使用していません。よろしくお願いします。


205:nobodyさん
09/03/05 08:28:19
/\Q$subject/でいけるっしょ

206:nobodyさん
09/03/05 08:36:47
>>205
そんなやり方があるんですね。ありがとうございます。
軽くググってましたが \Q***\E を使うといいらしいですが\Eで閉じる必要はないのでしょうか?


207:nobodyさん
09/03/05 08:39:30
閉じてもいいよ
クウォートメタの効果を途中で止めたいなら\Eで閉じなきゃいけないけどこの場合はないから閉じなくてもいい

208:nobodyさん
09/03/05 08:41:08
>>207
なるほど~。
>>204の例だと if{ } の間だけ効果を発揮するということでしょうか?


209:nobodyさん
09/03/05 08:58:56
いやいや
/\Q$subject[a-z]\d/みたいにクウォートメタしたいものの後に正規表現使う場合には
/\Q$subject\E[a-z]\d/こう書かいて閉じておかないと、パターンマッチではなく
$subjectの内容直後に"[a-z]\d"という文字があるときしかマッチしなくなるということ


210:179
09/03/05 16:49:09 9GnY8N9B
外注に出したら100万と見積もられましたが100万はきついのでやはり自分で勉強したいのですが
IFの使い方に特化した本ありませんか?

211:nobodyさん
09/03/05 16:56:24
そんな本あるかよ

212:nobodyさん
09/03/05 16:57:13
>>210
君はプログラムに手出ししない方がいいと思う。

213:nobodyさん
09/03/05 16:59:45
URLリンク(books.livedoor.com)
どうぞ


214:nobodyさん
09/03/05 17:05:25
ていうか近視眼的な解決策しか求めないからいけないんだよね。

215:nobodyさん
09/03/05 17:06:52
どうせならこのぐらいのボケかたがいい
URLリンク(www.amazon.co.jp)

216:nobodyさん
09/03/05 17:08:19
>>210
キミは
英語を勉強しようとして、「if」 しか解説してない本を探せると思うか?
日本語を勉強しようとして 「あ行」 しか解説してない本を探せると思うか?


217:nobodyさん
09/03/05 17:09:07
URLリンク(ec2.images-amazon.com)
こういったリンクの方がうれしい

218:nobodyさん
09/03/05 17:26:32
これってレディスコミック?中身が見たいw

219:nobodyさん
09/03/05 17:50:16
IFに特化した本ワロタwwwwww

220:nobodyさん
09/03/05 17:58:01
必要な情報はもう全部ここで答えられてるから
それ見て勉強するか100万払うこったな

面倒くさいからもう来んな

221:nobodyさん
09/03/05 19:52:11
週間 ifの全て

創刊号は演算子優先順位一覧表がついて、590円!

222:nobodyさん
09/03/05 19:52:52
さすがにネタだろ
ネタじゃないなら、もうソースも恥部もさらけ出せよ

223:nobodyさん
09/03/05 20:40:48
多分、リアルで高校生とか中学生とかなんだろう。Perlってホントに初心者向けの本ってないからなあ。PHPと違って。

224:nobodyさん
09/03/05 20:43:15
古い内容でよければ、ネットにいくらでも解説あるよな

225:nobodyさん
09/03/05 20:53:49
ifって古いとかどうこうじゃないけどな


226:nobodyさん
09/03/05 21:32:14
>>221
たけーよw

227:nobodyさん
09/03/06 00:19:12
>>179
if文を100個も並べるようなコードは、おそらくif文などほとんど使わずに書けると思うよ。
コード以前に、仕様定義を日本語で整理することに頭と時間使った方が結局近道。
どういう処理をさせたいか日本語で表せない(他人に伝えられない)のにコーディングできるはずがない。

例えば
if ($tensuua < 10) {$ranka = 3;} elsif ($tensuua > 10 and $tensuua < 20) {$ranka = 2;} else {$ranka = 1;}
のコードは、$tensuua == 10 のとき、意図しない結果となると思う。
条件式は、混乱するんだったら、表を書いてでも整理すべし。

228:nobodyさん
09/03/06 00:29:04
100万ww俺今から外注始めるwwwww

229:nobodyさん
09/03/06 01:14:19
俺なら70万でやってやるよw

230:nobodyさん
09/03/06 01:57:58
5万
NCNRでお願いします。

231:nobodyさん
09/03/06 05:12:13
ちょうど俺液晶買い換えたいと思ってたんだよね
3万でいいよ

232:nobodyさん
09/03/06 13:15:46
今月給料が少なかったから手付50万円で月々の保守10万円で年間契約で受け持つよ
制作は規模にもよるけど3ヶ月以内を約束で。

233:nobodyさん
09/03/06 14:24:55
IFって何かと思った。
なんかのフレームワークかな?とか。

……俺だけ?

234:nobodyさん
09/03/06 14:28:56
>>233
君を入れて3人だけだね。

235:nobodyさん
09/03/06 18:09:13
俺はインターフェイスの設計かとオモタ

236:nobodyさん
09/03/06 22:21:27
【月刊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さん
09/03/06 23:18:44
創刊号は
if の歴史
からいこうぜ

238:nobodyさん
09/03/06 23:27:43
付録は何ですか><

239:nobodyさん
09/03/06 23:36:05
2号からはおいくらですか?

240:nobodyさん
09/03/07 00:03:23
つか2年後に初めて入り口とかw
まともにやってたら中級の入り口に立ってるはずなのにw

241:nobodyさん
09/03/07 02:52:57
付録「ifとiff」



242:nobodyさん
09/03/07 02:58:51
>240
むしろツッコミどころは第23号じゃね?

243:nobodyさん
09/03/07 14:31:06
お前らの大好きな perl-users.jp で書けばいいじゃん。


244:nobodyさん
09/03/07 14:53:41
>>243
なにそれ?


245:nobodyさん
09/03/07 15:05:38
ぐぐれ

246:nobodyさん
09/03/07 18:31:27
Switchモジュール特集は今すぐ始めてくれて構わないんだぞ?

247:nobodyさん
09/03/07 22:21:11
>>243
あそこは頑張ってて好きだぜ。perl学ぶならここ見ろ、ってのが出来るのはいいことじゃね

248:nobodyさん
09/03/08 01:43:51
import関数は何をするものですか?

249:nobodyさん
09/03/08 11:38:53
Switchはクックブックに少し載ってるよね

250:nobodyさん
09/03/08 13:14:22
>>247
ああいうのは、5年後10年後に負の遺産になるのが常だからなあ。

251:nobodyさん
09/03/08 21:55:46
口で言うだけより行動する方がかっこいいし
あの辺のクラスタは10年経ってもずっとやってそう

252:nobodyさん
09/03/08 22:16:42
5.10のgiven,when,defaultって手もあるな

253:nobodyさん
09/03/09 00:06:15
>>251
何というか、君は腰巾着だな。ひとり立ちせえよ。

254:nobodyさん
09/03/09 00:38:08
>>253
煽りたいんですね、わかります

255:nobodyさん
09/03/09 01:19:00

$hogeがaとb以外のときに実行するには

if ($hoge ne 'a' or $hoge ne 'b' ){
 print "oik";
}

で合ってますか?


256:nobodyさん
09/03/09 01:26:29
>255
その場合だと、「a以外」または「b以外」のときに真となるので、常に成立することになる。
「aまたはb」という条件式を作り、それをさらに否定するといい。

257:nobodyさん
09/03/09 01:27:09
andにするだけでいいだろ

258:nobodyさん
09/03/09 01:28:42
これ、新しいAAみたい → oik
orじゃなくて、andじゃないとマズくね?

259:nobodyさん
09/03/09 01:30:03
被ってるし。床に横になってギター弾いてるみたいんだよなー → oik

260:nobodyさん
09/03/09 01:40:09
olkはokの誤植です。。。

$hoge = 'c';

if ($hoge ne 'a' and $hoge ne 'b' ){
 print "ok";
}

なら ok で、このとき $hoge = 'b' ならなにもしないんですよね?

261:nobodyさん
09/03/09 01:46:15
>260
おっけー。

あと、既に知ってるかもしれないが
「ド・モルガンの法則」でぐぐってみると勉強になるかも


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch