【Perl】初心者コーナーPart10
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
02/02/24 22:18ID:zOj6Yq/31:自分はこう言う事がしたい。
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を見よう。
0757nobodyさん
02/03/20 22:40ID:???1MB超えた辺りから、自前のエンジンより
DB_FileのBTREEとかXS拡張DBDを使うDBIが検索やソートは高速になってくるよ。
0758nobodyさん
02/03/20 22:56ID:???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:???生半可な知識だったら書かないほうがいいということを言いたかっただけ。
できもしないのに嘘をはずかしげもなく語るほうがよっぽど迷惑なのでは?
0762nobodyさん
02/03/20 23:30ID:???生半可な知識でも書いてみるのはいいことだよ。
そこからより効率のいい正しい方法の話し合いがされて、間違いを書いた方も正しいやり方を覚えられる。
初心者は自分の知りたかった事が議論によって導き出され、より理解力が深まる。
答えだけ出されるよりよっぽど勉強になるよ。
0763nobodyさん
02/03/20 23:36ID:???とても簡潔なコードにはならんよ。
それならモジュール使って送信テストまでするよ。
0764nobodyさん
02/03/20 23:41ID:UA5ZBzLD遅れましたが、ありがとう!
なんかDBの知識もなく、また頼まれ仕事で納期もないので
取りあえずタブ区切りテキスト+自前エンジンでやるしかないんですが、
やはり動作速度を犠牲にしたほうがいいのかな。
サーバに負担かけたら怒られますかね。ド素人ですまんです。
0765nobodyおっさん
02/03/20 23:53ID:???>ドットが2つ続くかどうかなんてチェックしてたら
>とても簡潔なコードにはならんよ。
なぜそういいきれる? その根拠はなんなの?
やらないうちから決め付けるのはやめたほうがいいと思う。
0768nobodyさん
02/03/21 00:30ID:???場に出てきたモノにカウンターかます以外のこともやってみれっての。
0769nobodyさん
02/03/21 00:33ID:???2-3年前のサーバと、今のサーバでは、CPUやメモリやHDDの回転数なんて言った
処理系のスペックは比較にならないくらいあがってるよ。
だから無茶な処理して良いと言うことではないけど、ね。
問題は、先方がコーディングする人間に支払っているコストと、与えている開発日数、
そして、要求している仕様ですべて決まると思うよ。
0770nobodyおっさん
02/03/21 00:49ID:???761に非難するのは筋違い とありますが、わたしがはじめに書いたいくつかの
疑問点は非難しようというのではなくて助言のつもりで書いただけです。
この助言を書いた途端にどなたかがいきなりつっかかってきた上に非難される
のはこちらも困ります。
760に絶対な解答をとありますが、メールアドレスには[]付きのIPアドレス
を含むなどの予想外の形態のもの等もありますので不可能といっていいでしょう。
「Perlメモ」にも非常に長い正規表現が書かれていますが、これも絶対ではない
と書かれています。特殊な形態はマッチさせない条件でなら簡単に書けると思う
のですが、絶対な解答ということなので遠慮しておきます。
0771nobodyさん
02/03/21 00:52ID:???初心者スレではそういう説明が重要だよ。
それがわからない人が多いんだから。
なにかを否定する場合はきちんと説明もつけましょうね。
そうすればみんながハッピーになれる。
0772nobodyさん
02/03/21 01:51ID:KirJ6q/Uやはりそうですよね。過去レス随時削除するような掲示板くらいしか
作ったことなかったもので、そんなでかいのは検討も付かなかったのです。
>>769
おっしゃる通りです。俺みたいな素人に安く頼むんだから我慢しろという
姿勢で行きます。ただ、コストはそうですが、開発日数の方はちゃんとした
DBシステム覚えた方が早くて楽チンのような予感もするので、次の仕事が入るまでに
覚えることにします。
ありがとうございました。
0773nobodyさん
02/03/21 02:15ID:???正規表現はそれで合ってるよ。(意図したいことは分かる。)
漏れも、簡単なチェックならそう書く。
んで、>>751の指摘の要点は
} elsif ($email =~ /^[^@]+@[^.]+\..+/) {
じゃなくて、
} elsif ($email =~ /^[^@]+@[^.]+\..+/) {
ってしろってことだけど、これでダメだったの?
print "<H5>[$email]は不正なメールアドレスです</H5><br>";
に書き換えてみて、うまく行かない時の表示キボン。
0774773
02/03/21 02:17ID:???ミスった。
「} elsif ($email =~ /^[^@]+@[^.]+\..+/) {
じゃなくて
} elsif ($email !~ /^[^@]+@[^.]+\..+/) {
ってしろってことだけど、これでダメだったの? 」
でした。
0775nobodyおっさん
02/03/21 02:40ID:???また責められそうですが、助言として書いておきます。
762さんも「議論によって導き出され、より理解力が深まる」という認識ですので。
ユーザIDにドットを含んでいてもマッチします。
アットマークの後にアットマークがきてもマッチします。
末尾は何にでもマッチします。
0776774
02/03/21 03:43ID:???もちろん承知。助言さんきゅ。
ということで、いい加減な文字をemail欄に書いて書き込もうとする奴を
排除する目的じゃなくて、正しいメールアドレスしか受けつけないように
したいという目的の場合は、正規表現を改良するのもいいかも>>750
0777nobodyおっさん
02/03/21 04:00ID:???を知ることからはじめたほうがいいと思う。(特殊形式は除く前提で)
ということで、まずはメールアドレスのかんたんな構成を書いておきます。
[メールユーザID]@[メールサーバドメイン名]
0779nobodyおっさん
02/03/21 04:23ID:???を考えると、だいたい文字数は4〜10が妥当な線ダロウ。
文字の種類としてはなんといっても[@.]の2種類は含まないということで
[^@.]が考えられる訳だが、普通は[a-zA-Z0-9_-]あたりが使われる場合がほとんど
ということからエスケープシーケンスを使って表すと[\w-]と考えられる。
0780nobodyおっさん
02/03/21 04:33ID:???を見たことあるから余裕をもって3〜15と考えるのもいいネー。
つまり前段から /^[\w-]{3,15}@ の部分までは正規表現は決まったことになる。
0781nobodyおっさん
02/03/21 05:12ID:???762さんが言うようにいきなり最後まで書いてしまうのはチョットですぎた
行為というものです。考える余地を与えることも勉強になるものです。
それはそうとして、「正規表現道場」っていつのまにかなくなったのかナ?
あればそっちにメアドの正規表現ぐらいのってるだろうに。閑古鳥が鳴いてた
ようだから無理もないかー。
0782nobodyさん
02/03/21 05:26ID:???まだいきてるみたい。
http://pc.2ch.net/test/read.cgi/php/996105815/l50
0783nobodyおっさん
02/03/21 05:38ID:???電球
0784nobodyさん
02/03/21 07:03ID:???わかりやすく記載しているサイトってありますか?
ActivePerl入れてもなんか上手くいかなくて...
0785親切紳
02/03/21 07:18ID:???インストールはできたんだね。
じゃあ、コマンドプロンプト開いて
perl test.pl
とか入力すればtest.plが実行されるよ。
0786nobodyさん
02/03/21 07:29ID:???大口叩いてもその解答じゃ結局>>754より役に立たんな。(藁
>>763の言うとおりそれならモジュール使ってついでに送信テストまでするほうが速い。
まともに解答する気ないんなら解答者につっかかるなや。迷惑。
>>784
http://www5a.biglobe.ne.jp/~n_rieko/
0787nobodyさん
02/03/21 07:46ID:p3ZJIC7Xhttp://www.din.or.jp/~ohzaki/perl.htm#Mail
0788nobodyさん
02/03/21 09:40ID:???>この助言を書いた途端にどなたかがいきなりつっかかってきた上に非難されるのはこちらも困ります。
>生半可な知識だったら書かないほうがいいということを言いたかっただけ。
>できもしないのに嘘をはずかしげもなく語るほうがよっぽど迷惑なのでは?
がホンネなんだろ?(藁
0789nobodyさん
02/03/21 09:42ID:???[\w-]は[\w\-]じゃなくていいの?
0790nobodyさん
02/03/21 10:14ID:???>生半可な知識だったら書かないほうがいいということを言いたかっただけ。
>できもしないのに嘘をはずかしげもなく語るほうがよっぽど迷惑なのでは?
んな事書くんだったら、http://www.puni.net/~mimori/rfc/rfc2822.txt
でも見てからスペック決めろよ。
0791nobodyさん
02/03/21 11:40ID:???local-part = dot-atom / quoted-string / obs-local-part
だから
$word = qq<(?:$atom|$quoted_str)>;
$local_part = qq<$word$X(?:$Period$X$word$X)*>;
では駄目。
0792nobodyさん
02/03/21 12:03ID:???PerlってCGI以外で何かに使います?
0793nobodyさん
02/03/21 12:07ID:???$_{manco}
と、するべきか、
$_{'manco'}
どっちだ?
0795nobodyさん
02/03/21 12:14ID:???元々レポート作成言語。
そのため文字列操作が異様に発展。
CGI使いからはマイナーだがレポートのテンプレートを指定する機能も。
と、言うか、
Perlってレポート作成以外で何に使います?
CGIとかです。
が正しい。
0797nobodyさん
02/03/21 12:15ID:???自分がよく作るのはなんちゃらコンバータとかかなぁ。
HTMLから,ある規則に従ってリンク抜き出したりとか。
>793
どっちも変わらないみたいなので,私は短い前者を使う。
0798nobodyさん
02/03/21 12:19ID:???レポート処理とか。
おれはチャットログの整理とかもしてる。
複数のログから特定のキーワードを探したりするときも手軽で便利。
0799nobodyさん
02/03/21 12:23ID:???2バイト文字列指定してる場合は囲んだほうがいいよ。多分ね。
0800nobodyさん
02/03/21 12:29ID:???自己レス。
推測だが変数名に使えない文字の場合は囲まないとエラーが出る。
ただし変数名に使える文字なら不要。
例。$ENV{HTTP_HOST} と$Rom{"坂田@アホ"}。
0802nobodyさん
02/03/21 14:09ID:???sub manco
{
print "sage\n" ;
}
$a = manco ;
$a() ;
なんか解決ないすかね?
0803nobodyさん
02/03/21 14:15ID:???意味ねー(w
おとなしく&manco;しろ。
0804nobodyさん
02/03/21 14:33ID:???$a[ i ]() ;
こんな感じで
0805nobodyさん
02/03/21 14:34ID:???リファレンス使ってこんな感じかな
$a = \&manco ;
&$a() ;
0806nobodyさん
02/03/21 14:36ID:???$a = "print";
&{$a};
sub print {
print qq(<hr>ok!<hr>);
}
とりあえずこれで動いた。
>803
if elsif文を並べてサブルーチンに飛ばすような時とかに便利かも。
0807nobodyさん
02/03/21 14:53ID:???if elsifを並べるのはあんまり良くないでしょ。
ハッシュに入れたサブルーチン名(もしくはリファレンス)
をコールするってことでどうかね>適用例
0808792
02/03/21 14:53ID:???回答ありがとうございました。
レポート処理のソース書いて、実行はMS-DOSからやるんですか?
CGIしか作ったことないんで、少し気になります。
0810nobodyさん
02/03/21 15:01ID:???$b = $a[ 0 ] ;
&$b() ;
これ、いいね、
でも、
$a[ 0 ] = \&manco ;
&$a[ 0 ]() ;
これだと駄目ね
0811nobodyさん
02/03/21 15:03ID:???&manco;
なんて、レスキューやKENTみたいなことやってんじゃねーよ。
それじゃ、プロトタイプのチェックしねーだろ。
>>806
man perlref
man perldub
組み込み関数とユーザサブルーチンの区別つけれ。
ユーザ定義ハンドラを許すようなオブジェクトなら必須。
0812nobodyさん
02/03/21 15:03ID:???そうだろね。LUTみたいな考え方だね。
>808
CGI以外の用途に使うなら「Perlを始めよう」というソフトがおすすめ。
ソースを書いて直接実行したりできる。
0813803
02/03/21 15:05ID:???詳しく解説きぼん。
0815nobodyさん
02/03/21 15:10ID:???皮肉にしか聞こえん・・・
0817nobodyさん
02/03/21 15:59ID:???どこでエラーになるか確かめれ。
固いコードを書きたいんだったらプロトタイプ使え。
sub manco($)
{
print "$_[0]\n";
}
&manco();
manco();
0818nobodyさん
02/03/21 16:35ID:7Dyo1H3nフレームで上と下に分割して下のフレーム内にdocファイルへのリンクを張ったのですが、
docファイルへのリンクをクリックするとフリーズして強制終了してしまうのですが
どうすれば正しく表示できるのでしょうか。
ちなみにOSはxp proです。
0819nobodyさん
02/03/21 16:37ID:???Web製作板かWin板で聞くべし。
Perlと関係ないじゃない。
0821818
02/03/21 16:43ID:7Dyo1H3n0822nobodyさん
02/03/21 16:50ID:???0823やっぱり
02/03/21 16:51ID:???0824間違えた
02/03/21 16:51ID:???0826nobodyさん
02/03/21 18:10ID:TYcdRNHScgiで、同じディレクトリにある他のファイルのパーミッションを変更したいんだけど、
chmodを使ってもなぜか変更できないです。
chmod 0777,"./abc.dat";
こんな風にしてるんですが、何かやり方がいけないの?
0830nobodyさん
02/03/21 21:58ID:???$manco->{'kuri'}=1;
$manco->{'torisu'}=1;
print Dumper($manco);
ってすると、
$VAR1 = {
'kuri' => 1,
'torisu' => 1
};
こんな感じで表示されんだけど、
$VAR1ってなるんだけど、
これに、名前付けられないの?
0831nobodyおっさん
02/03/21 22:06ID:???こう書いたほうが尚よいダロウ!
$_= '>>1-100';
print />>(\d+)(-\d+)?/ ? $2 ? "$1$2" : $1 : "unmatched";
0833nobodyさん
02/03/21 22:24ID:???use Data::Dumper;
%hash = ('A' => 'apple', 'B' => 'buffalo');
$d = Data::Dumper->new([\%hash], ['hash']);
print $d->Dump;
0834830
02/03/21 22:27ID:???あんな、
use XML::Simple;
$manco->{'kuri'}=1;
$manco->{'torisu'}=1;
print XMLout( $manco ) ;
これ動かすと
<opt kuri="1" torisu="1" />
って表示されんだけど、ノード名前が、optになっちゃうのね、
でな、無名のハッシュだっけ?に名前付けたら、変えられんじゃね
っと思ったンヨ
はずしとりすかね?
0836830
02/03/21 22:43ID:???こうだった。
my $xs = new XML::Simple( rootname => 'mesu' ) ;
$manco->{'kuri'}=1;
$manco->{'torisu'}=1;
print Dumper($manco);
print $xs->XMLout($manco);
$VAR1 = {
'kuri' => 1,
'torisu' => 1
};
<mesu kuri="1" torisu="1" />
0837830
02/03/21 22:48ID:???漏れさ、PerlのCGIって、
WEB FORUMっていう掲示板をいじる事から
始まったんだけどね、
なんか、記述スタイルが古いつ〜かさ、
もっといま風な、オブジェクト指向っぽくやりたいな、
なんて思ってるんだけど、
これは参考になるぞ!、っていうソースどっかに
転がってないすかね、よろすく
0838nobodyさん
02/03/21 23:01ID:???いっておくが,おれは >830とは別人だぞ・・・
0839nobodyさん
02/03/21 23:08ID:???(TOPページの)最新更新日を表示させたいと思っています。
リンク先のページの最新更新日を取得するような方法はあるのでしょうか。
ご指南の程、よろしくお願いします。
なにぶんPerlは始めたばかりなので、ムズかしい処理は理解できないかも
しれないので、なにをどこらへんを勉強すれば理解できるようになるのか
教えていただけるとありがたいです。
0840nobodyさん
02/03/21 23:10ID:???sub mancoとか、
$unco
もしくは、それに類似する単語で
書かないと、誰も答えてくれねぇ〜ぞ、ゴウラァ!!!
0845839
02/03/21 23:25ID:???「河馬屋二千年堂's Page」さんを見てみましたが、すみません。
まったく理解できませんでした(涙
「モジュールとはなにか、どうやって使うのか」から勉強し直します。
せっかく教えていただいたのに、すみませんでした。
0846nobodyさん
02/03/21 23:33ID:???アンテナ系のスクリプトを改造してみたら?
基本的な対象は日記だけど、別に普通のリンク集に使ってもいいだろ。
「アンテナ なつみかん」とかで検索してみ。
>「モジュールとはなにか、どうやって使うのか」から勉強し直します。
とか言うレベルだと改造は厳しいと思うが。
0848839
02/03/21 23:38ID:???やっぱりレベル低いのに、高望みしすぎなんですかね・・・。
とりあえずダウンロードしてソースをじっくり見てみます。
ありがとうございました。
0849nobodyさん?
02/03/21 23:44ID:???>べつにモジュール万能主義でもないだろうよ。
846さんはモジュールを勧めているわけではなく、モジュールというものを
知らないレベルの人には、改造は難しいかもしれない、
という懸念をの述べただけじゃないかな。煽りネタだったらスマソ。
0850nobodyさん
02/03/21 23:50ID:???perlは、本読まないと理解は難しいよ。
他の言語と違って、他人のperlのソース読むのは、
時間の無駄のような気がする。(解説がついてるソース
とかならいいけど)
08511234
02/03/21 23:52ID:di2RpoJqありがとうございます。
ところでこれではだめだということに気づきました。
>>1
>>1-
>>1-20
これ全部にヒットしないといけなかったんです。
書いてて気づきました。
すみませんもう一度おしえてもらえませんか?
08531234
02/03/21 23:54ID:di2RpoJq>>2-
でヒットしてないのかな?
08541234
02/03/21 23:56ID:di2RpoJqこうっすね
■ このスレッドは過去ログ倉庫に格納されています