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

【Perl】初心者コーナーPart10

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。02/02/24 22:18ID:zOj6Yq/3
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

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

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

参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://pc.2ch.net/test/read.cgi/php/988809842/
CGIの質問はこちら【CGIだけど、なんか質問ある?part5】
http://pc.2ch.net/test/read.cgi/php/1009331505/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/

過去ログ、その他の役立ち情報は>>2-10を見よう。
067967502/03/18 16:06ID:???
>>673
useの後ろに付くlibはプラグマってやつね。
プラグマはperlの動作を変えるわけ。strictとかutf8とかあるから
自分で調べてみなさい。(プラグマは慣用的に小文字を使う。)
use lib LIST;は
BEGIN { unshift(@INC, LIST) }と同じね。
@INCにはモジュールなどを探すディレクトリが入ってるわけです。
068067302/03/18 16:41ID:BUM18lm5
>>678
はい。わかりました。ただ「駱駝本」が読めないのが難点ですがw
今度書泉で探してみますね。
>>679
よーーーーーーーーーーくわかりました!プラグマですか。正直そんな
単語は聞いた事も無かったですね。どうもありがとうございました。
0681nobodyさん02/03/18 16:45ID:???
@INCってinclude?
0682nobodyさん02/03/18 17:19ID:???
>>680
らくだぼん、とよむ。
0683nobodyさん02/03/18 17:31ID:kNBmdvNL
すみません!
煮詰まってしまったので教えて下さい。


受け取るデータ(文字列:長さ制限なし)が1000文字以上だった場合、
文頭、文末それぞれ1文字を削除した状態に加工後、

REMOTE_ADDR,domain,加工後の文字列,文字列を受け取った時間

というようにCSV形式に成形して↑これをファイルに書込んでいます。

文字コードはEUC-JPで、文字列の加工にはsubstrを使っています。
文字列の加工まではうまくいくのですが、ファイルに書込まれたデータを
見ると、文字列の最後と時間の前のカンマが全角ひらがなとして1文字に
なってしまいます。

この文字化けを解消する方法ありませんでしょうか?
ファイルに書込んだ後比較用データとして、後でまた呼び出し
カンマでsplitをかけると、ちゃんと時間と文字列に分割されては
いるようなんですが・・・・
0684nobodyさん02/03/18 17:46ID:???
>>683
EUCなら簡単に出来ますが、1文字削除する行為が意味不明なので
教えてあげない。
ってゆうか、Perlメモ見れば分かるよね。
068568302/03/18 17:48ID:???
一応perlメモ見たんですが(^^;
もう一回逝ってきます。
1文字削除は私にも…上からの命令なのです。
068668302/03/18 17:52ID:???
>>684
ありがとうございました。
見つかりました!
あ、即レスも感謝です。

perlメモ今見てきたらありました。
煮詰まってるとだめですね。。。
0687nobodyさん02/03/18 19:23ID:???
特定のサブルーチン(メソッド)が、継承されても、
常に親クラスのを呼び出すことって出来ますか?
つまり、$obj->method とあった時に、
$objが子クラスのオブジェクトでmethodが子クラスにあった時でも
親クラスのmethodを呼び出すような物です。
それをSUPER::とかじゃなくて、クラス側(モジュール側?)で書きたいのです。
可能であれば、是非方法を御教授下さい。
宜しくお願い致します。
0688nobodyさん02/03/18 20:42ID:???
>>687
?
オブジェクト指向的に妙じゃないか?
0689nobodyさん02/03/18 20:43ID:???
なぜSUPERじゃだめなのか小一時間質問したい。
それともあれか、"virtualではない"メソッドを定義したいってか?
069068702/03/18 22:53ID:???
例えばアクセスメソッドとかがオーバーライドされたら、あれだと思ったので、、
まぁ無理ならいいです。すいませんでした。
0691nobodyさん02/03/19 00:04ID:???
>>690
java でいう final てやつだね。perl5でできるのかなー。
0692nobodyさん02/03/19 01:20ID:???
どなたかわかるかたがいたら教えていただきたいのですが、
CSVデータをうまく分割するコードがあれば是非教えてください。
Perlメモにあるやり方は知っていますが、ほかにもっとうまいやり方が
ありそうでなかなか思い浮かばないので途方に暮れています。
できればワンライナーかシュウォーツ変換のうまいコードがあればありがたいです。
0693nobodyさん02/03/19 01:34ID:???
>>692
もっとうまくってどんなふうに?
0694nobodyさん02/03/19 02:44ID:???
>693
>できればワンライナーかシュウォーツ変換のうまいコードがあれば
ってことですが...
0695nobodyさん02/03/19 03:16ID:???
>>694
1行で書いても何も得にならないよ。
そんなことで悩んでないでPerlメモにあるやつを、自分の使いやすいように
アレンジするか、適当なモジュールを導入した方がいいと思う。
但し、格納するデータが汎用でなくカンマやダブルクウォートを含まないのなら
特に加工が必要ないので簡単になるけどね。
バイナリを格納しないのなら、区切りを制御文字に・・・(CSVにならない)

で、結局君はどんな目的で「ワンライナーかシュウォーツ変換のうまいコード」
が必要なわけ?
0696nobodyさん02/03/19 03:37ID:???
>695
すぐに使うわけではなかったのでべつにできないならできないでいいけど、
たったいまこちらである程度いいものができたのでテストを繰り返して
いるところです。
ただ、わたしのライブラリを増やしたかっただけ(自己満足)なのでこれで
5パターンになりつつあります。(テスト結果でバグがなければ)
ただ、Perlメモにあるのはなんか好きになれないというだけのことです。
いま書いたのは、ワンライナーで2次元配列にセットするものでなんとなく
気に入っています。
ということで、この質問は自己解決のためもう忘れてください。
0697nobodyさん02/03/19 09:43ID:???
シュウォーツって初めて見る表現だな。Schwartzだから間違っちゃいないのか…。
0698nobodyさん02/03/19 17:20ID:FUNiZ5qx
Perlでoopってどうなの
皆してる?
流行のソースの記述きぼーん
0699nobodyさん02/03/19 19:08ID:???
>>698
エージェント指向。
0700nobodyさん02/03/19 20:27ID:???
>>698
ユーザー指向。
0701nobodyさん02/03/19 22:01ID:???
>>698
LWPとか*::Parserとその派生クラスとかDBIとかいろいろあるけど、
最も身近なのはTieかな。
0702 02/03/19 23:05ID:???
perl の eq 演算子(文字列比較)なんですが、比較したい変数の先頭文字が
メタキャラクタの場合、比較がうまくいかないのですが、こういうものなのでしょうか?

たとえば下記のような二つの文字列を代入した変数があります。

$ORIG="hello";
$TARGET="$$";

これを比較した場合、等しくなってほしくないのですが、eq で比較すると
等しいという結果になってしまいます。
↓こんな感じ。

if ($ORIG eq $TARGET) {

# この中に入ってしまう

} else {

#本当はこっちに来てほしい
}


変数にメタキャラクタが入っている場合、どのように比較すればいいのでしょうか?
あるいは、変数の最初の文字にメタキャラクタが入っている場合、
うまく比較できないのは perl の仕様なのでしょうか?
0703nobodyさん02/03/19 23:07ID:???
$ORIG = "hello";
$TARGET = '$$'; # シングルクオートで囲ってあるの。

で大丈夫だよー。
0704nobodyさん02/03/19 23:13ID:???
$$はスクリプトを実行しているPerlのプロセスIDだね。
0705nobodyさん02/03/19 23:44ID:???
先生!当方、Windows Meなのですが
Perlを勉強したいと思い、perlの本を買いました。
(すぐわかるPerl、CGI&Perlポケットリファレンス)

とりあえず、最初どうしたらよいのでしょうか?
プログラミングを参考書に習って書いていくにしても
どういう風に進めたらいいか分からなくて...
0706nobodyさん02/03/19 23:45ID:???
>>705

買った本に書いてなかったか?
0707nobodyさん02/03/19 23:47ID:???
>>705
ActivePerl落とした?
0708nobodyさん02/03/19 23:50ID:???
>>703-704
それでも等しくなるのはおかしい。

>>702
> うまく比較できないのは perl の仕様なのでしょうか?
なわけねぇだろ。
100%お前のミスだよ。

ifの前に print("$a $b\n") で変数の値を出力してみろ。

0709nobodyさん02/03/19 23:51ID:???
>>705
すぐわかるの巻末を熟読。
071070202/03/20 00:12ID:???
>>703 >>704

レスありがとうございます。
すみません、ちょっと私の書き方がまずかったです。
perl においてシングルクォートでくくると、変数を展開しない、エスケープが使えないというのは承知しているのですが、
今回のケースは、正確には下記のようなケースなのです。

前提:
1.テキストファイルにデータが書かれている
2.テキストファイルには、1行に複数の項目が書かれており、デリミタでくくられている

処理:
1.テキストファイルから1行読み込む
2.splitで分割する(分割した文字列が $TARGET に入る)
3.その文字列を eq で比較する

という感じなので、$TARGET には、普通の ascii 文字列が入ってくるかもしれないし、
$ とか ? で始まる文字列が入ってくるかもしれないのです。

↓コード例==============
$ORIG="hello";

open(DATA, "ファイル名")
while(<DATA>){
 @hoge = split(/,/, $_);
 $TARGET= @hoge[0];
 if ($ORIG eq $TARGET) {
  # $TARGET の中身の先頭文字が $ などの場合は
  # この中に入ってしまう
}
:
==============

さぁどうしようかという感じなのですが....
どこかに、「eq では、先頭にメタキャラクタが入っていると比較できない(perlの仕様)」
見たいなことが明文化されていると、ある意味幸せなんだけど...
みなさんこういうときどうされてますか?
0711nobodyさん02/03/20 00:14ID:???
$TARGETをprintしれ。
そうすれば大体わかる。
っつーか全ソース晒せ。
0712nobodyさん02/03/20 00:15ID:???
>>710
709は読んだか?

大体メタキャラクタってなんだよ。"正規表現の"メタキャラクタならまだ解らんでもないが。
脳内定義は止めてくれ。
0713 02/03/20 00:21ID:fhi6exvT
あ〜実験しますね
>>10
>>10-20
>>アボーン
http://
http://ドキュソ

0714 02/03/20 00:22ID:fhi6exvT
う〜む
こういうことになるのかぁ
0715 02/03/20 00:23ID:fhi6exvT
>>1000000
http://DQN
http://DQN.jp
これではどうかな
0716 02/03/20 00:24ID:fhi6exvT
なるほど
ではこれでは
>>DQN
0717 02/03/20 00:25ID:fhi6exvT
>>は数字じゃないとだめなのね
http://は半角文字じゃないとだめなのね
_φ( ̄ー ̄ )メモメモ
0718nobodyさん02/03/20 00:26ID:???
>>ID:fhi6exvT
消えろ
0719 02/03/20 00:27ID:fhi6exvT
そだこれはどだ
>>5どきゅん
http://DQNんだ
0720 02/03/20 00:28ID:fhi6exvT
うぃ実験あんがとでした。
>>718
0721nobodyさん02/03/20 00:29ID:???
fhi6exvTよぉ。
たかが2ちゃんねるでもな、おもしれぇところで下らん事やると、
そこは面白くない場所になって寂れるんだよ。

下の方にいくらでも廃墟のスレッドがあるだろ?
そこで、sageでこっそりやるのがテストってモンなんだよ。
0722ネタ?ニマジレス02/03/20 00:29ID:???
>>710
> どこかに、「eq では、先頭にメタキャラクタが入っていると比較できない(perlの仕様)」
> 見たいなことが明文化されていると、ある意味幸せなんだけど...

僕は不幸だと思います。
0723 02/03/20 00:32ID:fhi6exvT
>>721
あ、sageですればよかったすね
失礼しました。
ところでお聞きしたいんですが2ちゃんねるのレスの改行制限、文字数制限っていくつなんでしょうか?
いま2ちゃんねるのまねCGIつくってまして
0724nobodyさん02/03/20 00:35ID:???
>723
↓とかで。
【スレッド】 2ch型掲示板その4 【フロート式】
http://pc.2ch.net/test/read.cgi/php/1010669197/l50
0725nobodyさん02/03/20 00:52ID:???
荒らしは放置の方向でいこうYO
072670202/03/20 01:06ID:???
>>709 >>711 >>712
レスどうもありがとうございます。(709は 710 を書いた後に気がつきました。)

すみません、結論から言えば私のミスでした。みなさん申し訳ありません。
perl の eq は間違っていませんでした(printしまくってみて、気がついた。)
別のところが問題だったのですが、そこがわかりません。
ソースを貼り付けます。
1 #!/usr/bin/perl
2
3 $ORIG="hello";
4 print "$ORIG\n";
5
6 open (DATA, "dat.txt");
7 while (<DATA>) {
8 chomp;
9
10 @hoge = split(/,/, $_);
11 $AA = @hoge[0];
12 $BB = @hoge[1];
13
14 print "\n";
15 print '$AA>>'."$AA"."<<";
16 print '$BB>>'."$BB"."<<\n";
17
18 if( $ORIG eq $BB) {
19 print "pattern 1\n";
20 } elsif($ORIG =~ /$BB/ ) {
21 print "pattern 2\n";
22 } else {
23 print "pattern 3\n";
24 }
25 }
072770202/03/20 01:06ID:???
hoge.datの内容
----------------
11,bb
22,$$
----------------

実行結果
----------------
$ ./hoge.pl
hello

$AA=11 $BB=bb
pattern 3

$AA=22 $BB=$$
pattern 2
----------------

気になるのは、2行目のデータを読み込んだときに
hello と $$ を比較していて、
部分一致になってしまっている点です。この二つを比較すると
不一致になる(だから pattern 3 が表示される)
はずなのですが、どうして pattern 2 にいってしまうのでしょうか?
0728nobodyさん02/03/20 01:16ID:???
$BB = quotemeta($BB);
072970202/03/20 01:42ID:???
ああっ、直りました!!
quotemeta(); をいれて print してみたところ、
$$ が \$\$ で表示されました。

この quotemeta(); で、今まで問題がなかったところに影響がないかどうか、
テストをしてみます。
(quotemeta されることにより、いままで正常に eq できていたところが
eq できなくなると、それはそれで困るので)

ついでに quotemeta() で、\ が挿入される文字についても調べて見ます。
(正規表現で特別な意味を持つ文字が対象? だからセミコロンとかは対象にならない?)

728 さん、どうもありがとうございました。
0730nobodyさん02/03/20 09:35ID:???
>>729
とりあえずquotemetaの「meta」が何を意味するのかを勉強しなさい。
どうもeqと正規表現の違いが分かっていないように見える。
0731nobodyさん02/03/20 10:17ID:???
ハッシュを多次元配列の構造体としてついかいたいんだけど

$mesu{ 'manco' }{ 'size' } = '宇宙' ;

見たいな感じで、
合わせて、どっかいいポインター紹介してもらえないすか、
0732nobodyさん02/03/20 10:19ID:???
>>731
どうぞご自由に使ってください。
貴方の邪魔をする者はいません。

「どっかいいポインター」が何の事かは分かりませんが…。
0733nobodyさん02/03/20 10:28ID:???
無理だと思うからキーを<>で区切れば?

あとここの人間下ネタ嫌いみたいだから・・・(笑
0734 02/03/20 10:34ID:fhi6exvT
フォームメールで添付ファイルを送信するやりかたをおしえてください
0735nobodyさん02/03/20 10:59ID:???
>734
7bitにエンコード(←合ってる?)したりかなりめんどくさいからオススメしません。
0736nobodyさん02/03/20 11:02ID:???
>>735
逆に一回BASE64なりなんなりのライブラリを作ったら最強。
0737nobodyさん02/03/20 11:35ID:???
これはどうだろう?
http://member.nifty.ne.jp/hippo2000/perltips/perlmail.htm
073873102/03/20 13:19ID:???
なんかそのままいけたくさい。
>$mesu{ 'manco' }{ 'size' } = '宇宙' ;

>「どっかいいポインター」が何の事かは分かりませんが…。
URLって事で
0739 02/03/20 18:12ID:fhi6exvT
>>734ですが
mimew.plっての発見してできました。
074073502/03/20 19:29ID:???
>739
そらよかったやん。
語学のためにURLきぼんぬ。
0741nobodyさん02/03/20 19:37ID:???
少々板違いなんですが、Windows上でperlを動かすと
コマンドプロンプトらしきものが立ち上がり
そこでperlが動いてるのが見えるんですが
これを見えないようにするやり方ありませんか?
バックグラウンド(?)で動かしたいのです
0742nobodyさん02/03/20 19:40ID:???
>>741
無理。以上。
0743nobodyさん02/03/20 19:41ID:???
コマンドプロンプトから実行せんとどこから実行すんのよ。
ひょっとしてApache か anhttpdのDOS画面のことか?
0744nobodyさん02/03/20 19:46ID:???
>>743
>anhttpdのDOS画面

むぅ?
  ПП 
 (゜x゜ )○
0745nobodyさん02/03/20 19:55ID:???
>744
いや,おれのマシンではたまに出てくるのよ。4回に1回ぐらい。
0746nobodyさん02/03/20 20:24ID:???
>>741
perl.exeじゃなくてwperl.exeだったら大丈夫じゃない?
ActivePerlだったら入っているはず。
0747nobodyさん02/03/20 21:22ID:UA5ZBzLD
テキストデータファイルperlで扱うCGIを作る場合、
全部一気に配列に読み込んで扱いますか??
データソートとかする場合、いちいち読みに行くと遅いかなあと思うけど
サーバに負担かかるだろうし、例えば5Mくらいのデータファイルだったら
普通みなさんどうしますか?
それから、データが後々増えることを考慮する場合どうしますか?
0748nobodyさん02/03/20 21:26ID:???
>>747
前それでもめた。

while(<>)

がベストというのが有識者の意見。
0749nobodyさん02/03/20 21:28ID:???
>748
それは「表示するだけなら」じゃないのか?
0750出来の悪い子02/03/20 21:32ID:K1AeGIQF
質問です
メールをチェックする正規表現がうまく作動しないのですが
どうしたら良いですか?

} elsif ($email =~ /^[^@]+@[^.]+\..+/) {
&Header('Insert Editor');
print "<H5>     Emailが正しく入っていません<br>";

これだと素通りしてしまいます
とりあえず下記のやり方でごまかしているのですが。

} elsif ($email eq "") {
&Header('Insert Editor');
print "<H5>     Emailを入力してください<br>";

これじゃチェックにならない(´・ω・`)ショボーン

どう記述すれば良いでしょうか?
0751nobodyさん02/03/20 21:48ID:???
while(<xxx>){ push(@yyy); } ね。
その時散々煽ったおれも全部上に書き換えたよ。(笑

「^」使うとまぎらわしいね。「 !~ メールアドレスの書式」 にしてみろよ。

てきとーで書くけど $email !~ /\w\.-_@\w-_\.\w/ とか。
0752nobodyさん02/03/20 21:50ID:???
>751
てきとーに書きすぎた。
$Mail =~ /^[\w\-\.]+\@[\w\-]+\.[\w\-\.]+$/i でどう?
0753出来の悪い子02/03/20 21:57ID:???
>>752
駄目でした。
うーん 頭冷やしてきます。

0754nobodyさん02/03/20 22:00ID:???
「$email !~ /^[\w\-\.]+\@[\w\-]+\.[\w\-\.]+$/i」にしてる?
0755nobodyおっさん02/03/20 22:32ID:???
>752==754
メールユーザID文字数は何文字でもいいの?
. (ピリオド)が2つ続いてもマッチするのでは?
最後に . (ピリオド)がきてもマッチするのでは?
i オプションの意味は?
0756nobodyさん02/03/20 22:38ID:???
>755
ならアンタが早く説明してやれよ。
どうせ初心者の相手する気なんてまったく無くて解答者に茶々入れるだけにここいるんだろけど。
0757nobodyさん02/03/20 22:40ID:???
>>747
1MB超えた辺りから、自前のエンジンより
DB_FileのBTREEとかXS拡張DBDを使うDBIが検索やソートは高速になってくるよ。
0758nobodyさん02/03/20 22:56ID:???
if($email !~ (?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|"[^\\\x80-\xff\n\015"]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015"]*)*")(?:\.(?:[^(\04
0)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|"[^\\\x80-\xff\n\015"]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015"]*)*"))*@(?:[^(\0
40)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])*\])(?:\.(?:[^(\040)<>@,;:".\\\
[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\\\x80-\xff\n\015\[\]]|\\[^\x80-\xff])*\]))*){ &err("mailerrer"); }
0759nobodyおっさん02/03/20 23:23ID:???
>756
生半可な知識だったら書かないほうがいいということを言いたかっただけ。
できもしないのに嘘をはずかしげもなく語るほうがよっぽど迷惑なのでは?
0760nobodyさん02/03/20 23:27ID:???
>>759
じゃあおまえが絶対な解答で答えてあげてくださいよ。
0761nobodyさん02/03/20 23:29ID:???
>>759
自分が出来ないのに人を非難するのは筋違いかと。
0762nobodyさん02/03/20 23:30ID:???
>759
生半可な知識でも書いてみるのはいいことだよ。
そこからより効率のいい正しい方法の話し合いがされて、間違いを書いた方も正しいやり方を覚えられる。
初心者は自分の知りたかった事が議論によって導き出され、より理解力が深まる。
答えだけ出されるよりよっぽど勉強になるよ。
0763nobodyさん02/03/20 23:36ID:???
ドットが2つ続くかどうかなんてチェックしてたら
とても簡潔なコードにはならんよ。

それならモジュール使って送信テストまでするよ。
0764nobodyさん02/03/20 23:41ID:UA5ZBzLD
>>748,>>749,>>757
遅れましたが、ありがとう!
なんかDBの知識もなく、また頼まれ仕事で納期もないので
取りあえずタブ区切りテキスト+自前エンジンでやるしかないんですが、
やはり動作速度を犠牲にしたほうがいいのかな。
サーバに負担かけたら怒られますかね。ド素人ですまんです。
0765nobodyおっさん02/03/20 23:53ID:???
>763
>ドットが2つ続くかどうかなんてチェックしてたら
>とても簡潔なコードにはならんよ。
なぜそういいきれる? その根拠はなんなの?
やらないうちから決め付けるのはやめたほうがいいと思う。
0766nobodyさん02/03/21 00:09ID:???
メアドチェックならperlメモにあったよね?
ていうか>>758にある。。
0767nobodyさん02/03/21 00:29ID:???
>>764
5MBをいちいちメモリ上に展開するのはやめたほうがいいと思われ。
0768nobodyさん02/03/21 00:30ID:???
>nobodyおっさん
場に出てきたモノにカウンターかます以外のこともやってみれっての。
0769nobodyさん02/03/21 00:33ID:???
>>764
2-3年前のサーバと、今のサーバでは、CPUやメモリやHDDの回転数なんて言った
処理系のスペックは比較にならないくらいあがってるよ。
だから無茶な処理して良いと言うことではないけど、ね。
問題は、先方がコーディングする人間に支払っているコストと、与えている開発日数、
そして、要求している仕様ですべて決まると思うよ。
0770nobodyおっさん02/03/21 00:49ID:???
>768
761に非難するのは筋違い とありますが、わたしがはじめに書いたいくつかの
疑問点は非難しようというのではなくて助言のつもりで書いただけです。
この助言を書いた途端にどなたかがいきなりつっかかってきた上に非難される
のはこちらも困ります。

760に絶対な解答をとありますが、メールアドレスには[]付きのIPアドレス
を含むなどの予想外の形態のもの等もありますので不可能といっていいでしょう。
「Perlメモ」にも非常に長い正規表現が書かれていますが、これも絶対ではない
と書かれています。特殊な形態はマッチさせない条件でなら簡単に書けると思う
のですが、絶対な解答ということなので遠慮しておきます。
0771nobodyさん02/03/21 00:52ID:???
>770
初心者スレではそういう説明が重要だよ。
それがわからない人が多いんだから。
なにかを否定する場合はきちんと説明もつけましょうね。
そうすればみんながハッピーになれる。
0772nobodyさん02/03/21 01:51ID:KirJ6q/U
>>767
やはりそうですよね。過去レス随時削除するような掲示板くらいしか
作ったことなかったもので、そんなでかいのは検討も付かなかったのです。
>>769
おっしゃる通りです。俺みたいな素人に安く頼むんだから我慢しろという
姿勢で行きます。ただ、コストはそうですが、開発日数の方はちゃんとした
DBシステム覚えた方が早くて楽チンのような予感もするので、次の仕事が入るまでに
覚えることにします。

ありがとうございました。
0773nobodyさん02/03/21 02:15ID:???
>>750
正規表現はそれで合ってるよ。(意図したいことは分かる。)
漏れも、簡単なチェックならそう書く。

んで、>>751の指摘の要点は
} elsif ($email =~ /^[^@]+@[^.]+\..+/) {
じゃなくて、
} elsif ($email =~ /^[^@]+@[^.]+\..+/) {
ってしろってことだけど、これでダメだったの?

print "<H5>[$email]は不正なメールアドレスです</H5><br>";
に書き換えてみて、うまく行かない時の表示キボン。
077477302/03/21 02:17ID:???
>>773
ミスった。
「} elsif ($email =~ /^[^@]+@[^.]+\..+/) {
じゃなくて
} elsif ($email !~ /^[^@]+@[^.]+\..+/) {
ってしろってことだけど、これでダメだったの? 」
でした。
0775nobodyおっさん02/03/21 02:40ID:???
>774
また責められそうですが、助言として書いておきます。
762さんも「議論によって導き出され、より理解力が深まる」という認識ですので。

ユーザIDにドットを含んでいてもマッチします。
アットマークの後にアットマークがきてもマッチします。
末尾は何にでもマッチします。
077677402/03/21 03:43ID:???
>>775
もちろん承知。助言さんきゅ。

ということで、いい加減な文字をemail欄に書いて書き込もうとする奴を
排除する目的じゃなくて、正しいメールアドレスしか受けつけないように
したいという目的の場合は、正規表現を改良するのもいいかも>>750
0777nobodyおっさん02/03/21 04:00ID:???
メールアドレスのパターンにマッチさせるには、まずメールアドレスの基本形式
を知ることからはじめたほうがいいと思う。(特殊形式は除く前提で)

ということで、まずはメールアドレスのかんたんな構成を書いておきます。

[メールユーザID]@[メールサーバドメイン名]
077877402/03/21 04:15ID:???
>>777
あう?
■ このスレッドは過去ログ倉庫に格納されています