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

Perl 初心者コーナー Part23

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/05/16 11:18ID:zDRBc/j4
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。

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

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


CGIだけど、なんか質問ある? Part 10
http://pc2.2ch.net/test/read.cgi/php/1048686475/
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
CGIに依存しないPerlの話題一般/Part2
http://pc2.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は、【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/

過去ログやお勧めサイトは >>2-10
036235403/05/24 18:41ID:CEfAWsDp
>>361
そうですか。。。
途中で切断でもいいので、「保存」を押して転送が開始された時点でのカウントでもいいのですが・・・
0363nobodyさん03/05/24 18:42ID:???
>>360
ダウンロードカウンタでも落としてきて参考にしなよ
036435403/05/24 18:44ID:CEfAWsDp
>>363
わかりました。探してみます
036535403/05/24 18:56ID:vyZFmtfU
うーん、5.6個みてまわったんですけど、cgiのクリックされた時点でカウントするタイプみたいですね。
、、これであきらめます。
0366nobodyさん03/05/24 18:56ID:???
>362
CGI使わずに、鯖のアクセスログとか見た方が鯖に優しいぞ。
0367nobodyさん03/05/24 19:16ID:4X2MnE2O
【ITスクール】

ITスクールを開催しています。
スクール形式は1dayパックで3時間だけです。
授業料金は安く、即、実践へ活用できます!

http://homepage3.nifty.com/it3s/index.htm
0368nobodyさん 03/05/24 19:58ID:???
>>362
formを使って、ソレをカウントしてそれからロケーションに飛ばせばいいんじゃないの?
036935503/05/24 20:11ID:???
>>356
> 可能です。
そうですか。。。
漏れにはその方法がわからないけど、こんな風なのはどうか評価してください。

連続する5文字が両方にあったら真とするということに勝手にします。
で、$value1、$value2とも最初の5文字を@value1、@value2に入れる。
次に2文字目から6文字目までの5文字を配列に入れる。
以下繰り返し。
最後に@value1、@value2の比較。

駄目でしょうか?
2バイト文字があったら、、、ダメミタイダナァァァァァアアアアアアアアアアああああああ!!!!!
0370nobodyさん03/05/24 21:11ID:???
>>369
頼むから本一冊買って勉強してくれ。
http://www.google.co.jp/search?num=100&hl=ja&q=Perl+%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E3%83%9E%E3%83%83%E3%83%81&lr=lang_ja
0371nobodyさん03/05/24 22:21ID:???
>>360
ちょっと俺が間違ってた。
CGIで吐くんじゃなくて別のポートを見張るサーバを別に立てて、そこへ向けてLocationで飛ばす。
で、送出できたバイト数を数えればダウンロードできたかどうか分かる。
簡易HTTPサーバ作るってこと。
037235603/05/24 22:27ID:???
>>369
> で、$value1、$value2とも最初の5文字を@value1、@value2に入れる。
あのぉ、、、(汗)
> 駄目でしょうか?
さすがに「しゃーねーなぁ、、、それでいこか。」とは口が裂けても云えませんm(_ _)m
> 2バイト文字があったら、、、ダメミタイダナァァァァァアアアアアアアアアアああああああ!!!!!
さんざん既出だとは思うが、文字コードを云々・・・

「検索アルゴリズム」
いっぺんこれでググってみると新しい道が見つかるかもよ。道は険しいけれども。
(「木」「ハフマン」「辞書」とか出てくるかもしれんが@「圧縮」も似たようなもん)
0373nobodyさん03/05/24 22:46ID:???
>>355
if ($value1.$value2 =~ m/(.+).*\1/i) {
my $word = $1;
if ($value1 =~ /$word/i && $value2 =~ /$word/i) {
print $word,"\n";
}
}

こういうのはいかが?
0374nobodyさん03/05/24 22:47ID:???
藻前、自分ができないからって、逃げるなよ。
0375nobodyさん03/05/24 22:48ID:???
>>373のままでは色々問題あるのでその辺は適当に処理してくれ
0376nobodyさん03/05/24 22:49ID:???
>>355
あなたが、何を文字列として定義するか(重要)で
難しさは極端に変わりますが、簡単な \w+ を例に
するとこんな感じでしょうか。

my $value1 = 'http://www.yahoo.co.jp';
my $value2 = 'Copyright (C) 2003 Yahoo Japan Corporation. All Rights Reserved. ';

if ( reword($value1, $value2) ) {
print '重複した単語がある';
} else {
print '重複した単語はない';
}

sub reword {
my $str = shift;
my $substr = shift;
my (%word); # 単語用ハッシュ
$word{"\L$1"}++ while $str =~ /(\w+)/g; # 単語をキーに登録
$word{"\L$1"} && return 1 while $substr =~ /(\w+)/g; # 登録済みなら真を返す
return 0; # 無かった
}
037734303/05/25 00:49ID:???
>>349
お礼が遅くなり、申し訳ございません。
無事にサンプルスクリプトを動かす事が出来、それを踏まえて自分のスクリプトでやりたい事が実現できました。ありがとうございます。
しかし、上記のサンプルコードでプラス変数を追加し、文字列変換の def 部分をその変数で置き換えた場合にエラーが出てしまいました。
変数を表す場合は、@{$_[3]}ではダメだとまでは判別できるのですが、実際の表記の仕方が見当もつかない状況です(連想配列の場合もそうなんですが)

そこで、答えそのものではなくても、strict使うのであればここを読め、の様なサイトはないでしょうか?
>>4のサイトを全て回りましたが、普通に*で渡すようにとの解説ばかりでした。
037834903/05/25 01:32ID:???
>>377
use strict 以前の話なのですよ。343さんがハマってる部分は。
むしろ use strict は全然関係無し。

まず * が何を表していて、何故 \ が出てきたか、@{ } は何を
しているのか、どうしてこのコードで引数に渡した配列そのもの
の値を置換する事ができるのか。そういう点を全部読み解き、
理解しましたか?

あと、エラーが出た場合はどんなエラーが出たのか言って
くれないと、何が悪いのかサッパリ見当付かないですよ。
0379nobodyさん03/05/25 01:54ID:???
>>4のサイトでなくて個人的にお勧め っ・∀・)っ ttp://www.rfs.jp/
038034303/05/25 02:15ID:???
>>378
ご指摘ありがとうございました。
ご指摘いただいている箇所の理解が全然足りないようです。
先ほどから検索をかけて、
http://www.kt.rim.or.jp/~kbk/perl5.005/perlref.html
あたりが見つかりましたので、そこを熟読して、あと手元に青ラクダ本がありますので、
シンボリックリファレンス項目あたりも熟読してから再度チャレンジしてみようと思います。

それと質問をする側として必要な情報の提示を怠り、申し訳ありませんでした。

自分の理解を深めてから再度頑張ってみます。

>>379
お勧めサイトありがとうございます。
色々と載っていて、とても役に立ちそうです。
0381nobodyさん03/05/25 13:54ID:sMN/Ic1b
日記のスクリプトを組みたいと思っています。
そこで長い間つかえるように日記のログを年、月と階層的にディレクトリを
作り、ユニークなログを実現したいです。
そこで、
opendir(LOG,"./Log") || die mkdir("./Log", 0755);
opendir(YEAR,"./Log/$year") || die mkdir("./Log/$year/",0755);
opendir(MONTH,"./Log/$year/$month") || die mkdir("./Log/$year/$month",0755);
のようなスクリプトを実行してみました。
./Log/$year/で$monthディレクトリ1つが無い時は正常に動作しましたが、
ディレクトリを2つ以上作成したい時でも1つしか作る事ができませんでした。
これを解決するための原因をご存知の方がいらっしゃいましたらよろしくお願いします。

環境:OS  Win2000
   Perl 5.6.1
0382nobodyさん03/05/25 15:17ID:???
>>381
困ったことに同一環境で正常に動作しました。
テスト方法は、上記のスクリプトの先頭に、
print "Content-type: text/html\n\n";
$year = "2003"; $month="5"; print "$year $month\n";
を追加して、$monthを変更しつつ数回実行。
038338103/05/25 15:37ID:sMN/Ic1b
>>382
試していただき、ありがとうございます。
上記の時間はlocaltime()で取得したものです。
書き方がとても下手ですみません。
例えば、今年の2003年1月のログが/Log/2003/1に格納されていた場合、
年が明け、来年の2004年1月になった時/Log/2004/1とLogディレクトリ下に2004ディレクトリ、
そのまた下(Logから見て2階層下)に1ディレクトリを作りたいです。
しかし、上記のスクリプトでLog以下のディレクトリを作成せずに実行すると、一回目は「Logディレクトリ」、
二回目は「5ディレクトリ」と、一回の実行で一つのディレクトリしか作れません。
>>382さんのコードですと、同階層のディレクトリを複数個作っているんですよね。
もしまだお付き合い頂けるのでしたらまた宜しくお願いします。

#現在はとりあえず200Xディレクトリと1〜12ディレクトリを予め複数個用意して他の部分を作っています。
コンソールからmkdir /Log/$year/$month で$yearと$monthのディレクトリが作成できるのに
なぜスクリプトからだとできないのだろう・・・
0384nobodyさん03/05/25 16:33ID:???
>>383
die使わなければいいだけでしょ。
エラー処理じゃなく分岐したいだけでしょ?
ファイルテスト演算子の-eでディレクトリがあるかどうか判別したら?
0385nobodyさん03/05/25 16:42ID:???
質問です。
以下のURLにある、商品名とメールアドレスを入力してボタンを押すと、検索結果を入力した
メアド宛てに送信するというシステムがあるのですが。

該当ページURL
ttp://www.hakuraiya.way.cc/quote.html(海外の薬を個人輸入代行する業者のページです)

で、ソースを見ると
http://www.hakuraiya.way.cc/cgi-local/order/quotemail.cgi
こういうCGIに入力データが送られ、検索処理後にメール送信しているようなのですが、これは
どういう風に動いているんでしょう?
入力されたデータを処理し、予め用意した商品リストと照合・検索して、結果をメール送信する
わけなので、最低でも処理用CGIスクリプトと商品データファイルが必要なところまでは理解
出来るのですが、仕組みがイマイチわかりません。

スクリプト名等で検索しましたが全くHITしないし、こういうシステムは商用&有償なのは想像が
つきます。私自身はこれで商売をしようという気持ちはなく、自分のCGIの勉強の教材にしたいと
考えているので、以上のシステムに心当たりがある方、または「こういう風にスクリプトを組んで
いるんじゃないか?」という風に教えてくださる方、どうかご助力ください。
よろしくお願いします。
0386nobodyさん03/05/25 16:48ID:???
>>385
>入力されたデータを処理し、予め用意した商品リストと照合・検索して、結果をメール送信する
仕組みは自分で答えを言っちゃってるじゃん
検索スクリプトの結果をブラウザに返す替りにメール本文にするって
そんなに難しく考えることじゃないと思うけど

こんなCGI探してますスレッド ver.9
http://pc2.2ch.net/test/read.cgi/php/1051456859/l50
ここのリンク集を探せばあるかも、あるいはないかも
0387nobodyさん03/05/25 17:20ID:???
>>385 >>386
>いらっしゃーい、Perlのコーディングで困ってる人のスレです。
0388nobodyさん03/05/25 17:29ID:???
>>387
アルゴリズムに関する質問はスレ違いじゃないみたいよ。
最終的にはコーディングを目標にしてるみたいだからいいじゃん。

>>385
リンク元は見てないけど、結果を表示しつつsendmailでメールを送ればよろしい。
難しいことじゃないよ。
0389nobodyさん03/05/25 17:30ID:LMu0ezCc
if($_ =~ /filename\=.+?\.(.+)?\n/i || $_ =~ /name\=.+?\.(.+)?\n/i){
}
こういうif文を書くと、1番目と2番目の(.+)はそれぞれ$1、$2と
なるのでしょうか。
それとも両方とも$1となるのでしょうか。
すみませんが教えていただければ幸いです。
0390nobodyさん03/05/25 17:37ID:???
>389
なぜ試さない?
039138903/05/25 17:53ID:???
>>390
あぁ?知らねぇよ。お前アタシが敬語使ってんだから敬語使えよ。
バカじゃねぇの?つかお前書き込むなよ。キモい。

0392nobodyさん03/05/25 18:04ID:???
>>383
>>384の言うとおり、dieを使うとその時点でスクリプトが終っちゃう。
手元のリファレンスによると、孫ディレクトリは子ディレクトリが無いと作れないみたい。
どうしてもやりたい場合は、File::Pathモジュール使うとよい、とあった。
0393nobodyさん03/05/25 18:35ID:???
>>390
そこに試す環境がなかったので、質問させていただきました。
友達に聞かれて答えられなかったので。
会社にに戻って試してみましたので、すみませんでした。
おっしゃるとおりです。
ちなみに。>>391は偽者ですので。
この書き込みも、会社から書き込めないことから、友達の家
より代理書き込みしてもらってるので、IDでわかるかと思います。
039438503/05/25 18:48ID:???
>>386>>388
レスどうもありがとうございます。

>>386
>検索スクリプトの結果をブラウザに返す替りにメール本文にする
ああ、なるほど!そうすればいいのか。仰るとおり、難しく考えすぎていました。

>>388
こちらも、ヒントありがとうございます。上に書いたとおり、難しく考えすぎていたので
胸のつかえが取れたような気分です。助かりました。

お二方のレスを参考に、検索+sendmailのスクリプトを探して、組み込み改造など
頑張ってみたいと思います。本当に、どうもありがとうございましたm(_ _)m
039538103/05/25 22:28ID:???
>>384
>>392
丁寧にありがとうございました。
if文などで試してみます。
0396nobodyさん03/05/25 23:52ID:???
K0NTタンのCGIはグローバル変数を使いまくって
そして使わなくなったものを undef していないから
メモリを大量に使ってしまうのですか?
0397nobodyさん03/05/26 00:21ID:???
>>396
変数のスコープを抜けたら、OSにメモリを返すとでも言いたいのか?
0398nobodyさん03/05/26 00:24ID:6A9UvBAu
<FORM ENCTYPE=multipart/form-data>
<INPUT TYPE=FILE NAME=file>

のファイル本体部分を取り出すのに

$buf =~ /(\r\n)$1(.+)\1-{10,}/;
$date = $2;

と書いてバッチシいくでしょうか?

$buf =~ /Content-.+(\r\n)$1(.+)\1-{10,}/;
上はどうでしょう?
ご意見おながいします。
039939803/05/26 00:27ID:???
間違えました

誤 \1
正 $1

です。
0400nobodyさん03/05/26 00:33ID:???
>>398
CGIモジュール使えよ。
CGI_Liteでもいいけどさ。
そんなくだらないことで悩まなくてすむようになるんだから。
040139803/05/26 00:39ID:???
知りませんですた。
ググってきます。
040239803/05/26 01:20ID:???
>>400
CGI.pm がこんなに素敵なヤツだったなんて
正直、感動しますた。
ありがd
040339803/05/26 01:27ID:???
さらに質問でつ。
http://pc2.2ch.net/test/read.cgi/php/1024795138/383
で質問したんですが誰もいないみたいなので
こちらで誰か教えてください。
おながいします。
040439803/05/26 01:43ID:???
もっと質問でつ。

use CGI;
$query = new CGI;

と書いたときモジュールが使えなかったらエラーになりますか?
それとも

if($query){}

と、できますか? どうなんでしょう?
0405nobodyさん03/05/26 03:14ID:???
>>404
自分の環境で実際に動かしてみればわかるだろ

use CGI;
の時点でエラーが出る。
0406nobodyさん03/05/26 03:15ID:???
今時CGI.pmが入ってないなんてことは無いか
俺も相当アフォだな、、、逝ってこよう。
0407nobodyさん03/05/26 03:45ID:???
>>403
evalを使うのにそういう書き方自体が無駄
040838003/05/26 04:00ID:tTZ2AIlQ
linuxサーバ上でSJISファイルを読み取って
chompを実行させても\r\nを改行と見なしてくれないのですが、
読み取られファイルをEUCにするのとchompの代わりに↓
$data =~ s/\r\n//g;
$data =~ s/\r//g;
$data =~ s/\n//g;
を使う。という方法以外で一般的な方法というのは無いのでしょうか?

0409380じゃないです03/05/26 04:07ID:???
あらっ?
名前入力してしまいましたが380は間違えです。
0410_03/05/26 04:16ID:???
http://homepage.mac.com/hiroyuki43/jaz_b01.html
0411nobodyさん03/05/26 05:14ID:???
>>408
改行コードと文字コードは別物だぞ。
文字コードは、SJIS。 改行コードは、LFにすれば問題解決。
0412nobodyさん 03/05/26 05:19ID:???
>>408 $dataつーのが、最後に改行が有るものと仮定するとして・・・

$data =~ tr/\x0d\x0a//d;
が高速。
0413nobodyさん03/05/26 06:37ID:qholo4T7
ユーザごとにリストボックスの項目数を変えるよな
ことを考えてるのですがこれって実現可能ですか。
リストで表示させる項目を一つの変数の中にまとめて
"a","b","c"と書いても実行するとリストは"a","b","c"と
繋がって表示されてしまい1項目しかでなかったものでして。
ある人は10個項目でててある人は5項目でてるような
ことがしたいのです。
0414nobodyさん03/05/26 09:30ID:???
>>413
マルチポストはやめましょう。
0415nobodyさん03/05/26 10:06ID:???
>>413
言ってる意味がよーわからんので推測でだが、出来る。
ユーザごとに指定した数を指定しておいて、配列をその数だけ
回すなりなんなりでいいんじゃん?
0416nobodyさん03/05/26 10:19ID:???
>>114
添付ファイルはどこに誰が保存しているのか?
そのファイル名はメール内でのファイル名だと思うのだが

>>119
$?
0417nobodyさん03/05/26 10:20ID:???
レス番号激しく間違えた…スマソ

>>414
添付ファイルはどこに誰が保存しているのか?
そのファイル名はメール内でのファイル名だと思うのだが

>>419
$?
0418nobodyさん03/05/26 10:36ID:???
>>417
で、今度は誤爆?
0419nobodyさん03/05/26 10:36ID:???
>406
未だにPerl4の鯖だってあるんだよ。
0420nobodyさん03/05/26 11:01ID:X5HT6fof
@orgmaster= ("orgid","countryid","orgname");
$orgid = $line{'orgid'};
$countryid = $line{'orgname_ja'};
$orgname = $line{'orgname'};


っていうのを、後ろの3行をベタにこういう風↑に書かないで、
foreach $value (@orgmaster) {
★ここが不明★ = $line{$value};
}

というようにまわしたいのですが、
★ここが不明★の部分がわかりません。どうすればいいのでしょうか?
0421bloom03/05/26 11:08ID:gUjk1KcM
http://homepage.mac.com/ayaya16/
0422nobodyさん03/05/26 11:13ID:???
>>420
ソフト・リファレンスでググってみ。
042342003/05/26 11:42ID:???
>>422
がってんわかりました。ありがとうございます。
0424nobodyさん03/05/26 12:52ID:???
$ORG{'person'}[1]、$ORG{'adana'}[1]、$ORG{'adanaid'}[1]
$ORG{'person'}[2]、$ORG{'adana'}[2]、$ORG{'adanaid'}[2]
$ORG{'person'}[3]、$ORG{'adana'}[3]、$ORG{'adanaid'}[3]
$ORG{'person'}[4]、$ORG{'adana'}[4]、$ORG{'adanaid'}[4]
$ORG{'person'}[5]、$ORG{'adana'}[5]、$ORG{'adanaid'}[5]

という変数があるのですが、これを、
$ORG{'adanaid'}[n]の値でソートして、例えば、

$ORG{'person'}[2]、$ORG{'adana'}[2]、$ORG{'adanaid'}[2]
$ORG{'person'}[5]、$ORG{'adana'}[5]、$ORG{'adanaid'}[5]
$ORG{'person'}[4]、$ORG{'adana'}[4]、$ORG{'adanaid'}[4]
$ORG{'person'}[3]、$ORG{'adana'}[3]、$ORG{'adanaid'}[3]
$ORG{'person'}[1]、$ORG{'adana'}[1]、$ORG{'adanaid'}[1]

みたいに表示さすにはどうすればいいのでしょうか?
042540803/05/26 13:58ID:???
>>411
そーだったんですか・・・知らなかった(-_-;)
>>412
それ使わせてもらいます。
どうもありがとうございました。
0426nobodyさん03/05/26 14:22ID:???
Perlのgrepって、小文字大文字の区別をなくすオプションってないんでしょうか?
042742603/05/26 14:23ID:???
すいません、ありましたね。iオプションで。
手元のリファレンスには何にもかいてなかったもんで
0428nobodyさん03/05/26 15:09ID:ave5j164
例えば、
http://www.2ch.net/dir/file.txt
という文字列を、
/dir/file.txt
のようにするにはどちらが効率的なんでしょうか?

# 正規表現のみの場合
$url =~ s/http:\/\/.*?\//\//i;

# 関数も使う場合
$url =~ s/http:\/\///i;
@temp = split(/\//, $url);
shift(@temp)
$url = "/" . join("/", @temp);
0429nobodyさん03/05/26 15:32ID:???
>>428
どちらでも好みの方を。
速度が速い方が良いなら、100回くらいループさせてベンチ取ればいい。
0430nobodyさん03/05/26 15:49ID:???
>>424
http://flex.ee.uec.ac.jp/texi/perl/perl_54.html
043142403/05/26 17:42ID:???
>>430
たぶん、おっしゃってるのは、そのページの一番最後の

sub reverse { $b cmp $a; }
@harry = ('dog','cat','x','Cain','Abel');
@george = ('gone','chased','yz','Punished','Axed');
print sort @harry;
  # 出力は AbelCaincatdogx
print sort reverse @harry;
  # 出力は xdogcatCainAbel
print sort @george, 'to', @harry;
  # 出力は AbelAxedCainPunishedcatchaseddoggonetoxyz

を参考にできるということなのだと思うのですが、
print sort @george, 'to', @harry; の意味がわかりません。
sort LIST, 'to', LISTなんて書式の意味も、書いてないし。。。
この書式で探したのですが、わかりませんでした。。。
どういうことなのでしょうか?
043235603/05/26 20:54ID:???
>>431
> print sort @george, 'to', @harry; の意味がわかりません。
結果からして、
print sort((@george,'to',@harry));
なんぢゃないかなと逝ってみる震度6弱。
0433nobodyさん03/05/26 21:08ID:haPyfOxB
&ReadParse(*in);
$n_pass = "$in{'password'}";
# パスワード
$pass = '0123';
if($pass eq $n_pass)
こうするとできるのに、

# パスワード
$pass = '0123';
if($pass eq $in{'password'}")
こうすると、すべてパスワードが違うとでます。フォームから渡せてないんでしょうか?
0434nobodyさん03/05/26 21:09ID:haPyfOxB
if($pass eq $in{'password'}")

if($pass eq $in{'password'})
です。
0435動画直リン03/05/26 21:10ID:gUjk1KcM
http://homepage.mac.com/hitomi18/
043643103/05/26 21:21ID:XWjbOab7
>>432
あー。。。了解すますた。
0437nobodyさん03/05/26 22:23ID:???
>>433
後者でもちゃんと &ReadParse; やってる?
0438nobodyさん03/05/26 22:32ID:haPyfOxB
>>437
え?&ReadParseって、cgi-libのライブラリのでしょ?
$in{'password'}
こうやったらライブラリいらないんじゃないんですか?
どっちにしてもライブラリはいるんですか?
0439nobodyさん03/05/26 22:43ID:???
>>438
なんかねぼけたこと言ってる奴だな……

PerlはCGI専門言語じゃない。
ブラウザのフォームから送られたデータを取得するには、
それ相応のステップをふまなければならない。
なにもしなければ、%inは空のままだ。
当たり前だ。何もしなかったんだから。

顔洗って出直してきなさい。
0440nobodyさん03/05/26 22:48ID:haPyfOxB
>>439
そんな・・・
方法を教えてください。お願いします
044144003/05/26 22:51ID:haPyfOxB
あまったれてすいません。検索すればいくらでもでてきますね。
要はPOSTの場合
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
で読み取って、splitできりきざんでやればいいんですね。
0442nobodyさん03/05/26 22:55ID:???
つうか、&ReadParse使えば?
044344003/05/26 23:02ID:haPyfOxB
>>442
それでもいいんですけど、あんまりライブラリを使うのが好きじゃないんですよ・・・
全部で10行くらいだから中にいれてもいいかな〜って・・
044444003/05/26 23:04ID:haPyfOxB
何回も書き込みすいません。
cgiを使う側の場合、
・cgiソースは簡潔がいいからライブラリ使う。
・ソースが多少多くてもいいからライブラリはできるだけさける。
どっちがいいんですかね?
0445_03/05/26 23:09ID:???
http://homepage.mac.com/hiroyuki43/hankaku09.html
0446bloom03/05/26 23:10ID:gUjk1KcM
http://homepage.mac.com/ayaya16/
0447nobodyさん03/05/26 23:24ID:???
やっぱり何か寝ぼけてるなぁ・・・
0448nobodyさん03/05/26 23:28ID:???
>>444
人によって違うんじゃないかな。何を求めるのかによって。
ここで判断をあおぐようなことじゃないと思う。

044944003/05/26 23:33ID:haPyfOxB
>>448
そうですね。レスサンクス。
realParseだけなんで中に書きます
0450nobodyさん03/05/26 23:36ID:x8s60k6p
目的によってシステムを構築しなさい
その際、じっくりと頭の中でシステムを描きなさい
そうすればおのずと答えは出てきます
0451nobodyさん03/05/27 00:16ID:???
>>444
マジレスするなら……

俺は開発速度を優先するべき状況にいるので、
ライブラリはとことん利用する立場だ。
Perlの場合はモジュールが便利だ。CPANを見るべし。

ライブラリを使えば、ソース自体を短くすることができ、
短いソースは同時にバグの入る確率が少なくなることを意味する。
副次的にバグの絶対数を下げる効果も期待できる。
(ライブラリにバグが入ってたらどうしようもないが、
 自分よりも能力のある人間(作者)を信じて突き進むのみだ)

ま、好きにしろい。
0452nobodyさん03/05/27 00:18ID:LZ3W66wZ
>>438
いると思う。
自分でフォームデコード書くならいらないけど。
045345203/05/27 00:22ID:LCoN4Nuw
しくった。

漏れは勉強がてら、
ライブラリに頼らず自分でコード書く。
045442403/05/27 00:56ID:tldcRAHy
SORT のマニュアルを読んでやってみたのですが、どうもうまくいきません。

$ORG{'person'}[1]="tanaka";   $ORG{'adana'}[1]="tanachan";  $ORG{'adanaid'}[1]=5;
$ORG{'person'}[2]="takada";   $ORG{'adana'}[2]="takachan";  $ORG{'adanaid'}[2]=2;
$ORG{'person'}[3]="imai";     $ORG{'adana'}[3]="imachan";   $ORG{'adanaid'}[3]=3;
$ORG{'person'}[4]="takenaka";  $ORG{'adana'}[4]="takechan";  $ORG{'adanaid'}[4]=1;
$ORG{'person'}[5]="hirano";   $ORG{'adana'}[5]="hirachan";  $ORG{'adanaid'}[5]=4;

で、
foreach ($key {sort { $ORG{'adanaid'}[$a] <=> $ORG{'adanaid'}[$b] } @ORG{'adanaid'}){
 print qq|\$ORG{'person'} = $ORG{'person'} , \$ORG{'adana'} = $ORG{'adana'}, \$ORG{'adanaid'} = $ORG{'adanaid'}<br>|;
}
としたら、
compilation errors.になってしまいます。
思うに、@ORG{'adanaid'}があやしいのかとも思うのですが、
ただしい記法はどうすればいいのでしょうか?
($ORG{'adanaid'}[1], $ORG{'adanaid'}[2], $ORG{'adanaid'}[3], $ORG{'adanaid'}[4], $ORG{'adanaid'}[5])
という意味の配列を表したつもりなのですが・・・
0455動画直リン03/05/27 01:10ID:77ADrmTJ
http://homepage.mac.com/hitomi18/
0456nobodyさん03/05/27 01:10ID:???
>>454
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perllol.html
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlref.html
045745403/05/27 01:28ID:tldcRAHy
>>456
あー、それですねー。実は前に読んでちんぷんかんぷんで、
そのままにしてました。。。
しかし、今読んでもちんぷんかんぷん。。。
(わからない用語ばかりで、用語を調べるとよけいにわからなくなる(泣))

もしよかったら、恐縮がですが、
($ORG{'adanaid'}[1], $ORG{'adanaid'}[2], $ORG{'adanaid'}[3], $ORG{'adanaid'}[4], $ORG{'adanaid'}[5])
を配列として表す方法を教えていただけませんjか?
そしたら、演繹的に勉強していきますので・・・。
0458nobodyさん03/05/27 01:49ID:???
>>454
データ形式を見直したほうがいいのでは……
それと、$ORG{}[0]の要素が未定義じゃマズいでしょ。それもソートの対象になるんだから。
045945403/05/27 01:59ID:tldcRAHy
>>458
あ、ほんとですね。。。ありがとうございます。
0460nobodyさん03/05/27 02:25ID:???
>>457
こういうのは実際に最小限のコードをどんどん書いて実際に
走らせながら理解していくのが一番早いし身につくんだが…。

@list = ('a', 'b', 'c');
$list = \@list; # \ で配列 @list のリファレンスを得る
print $list; # "ARRAY(0xbb1350)" ← $list の中身は配列のリファレンス
print @{$list}; # "abc" ← @{} で配列としてデリファレンス
print @$list; # {} を省略した書き方

# [] で無名配列のリファレンスを作成
# @list のように変数名が無いから「無名」
$list = [ 'd', 'e', 'f' ];
print $list; # "ARRAY(0xbb135c)"
print @{$list}; # "def"

%hash = (a => 1, b => 2, c => 3);
print "$_:$hash{$_}/" foreach sort keys %hash;
# "a:1/b:2/c:3/"

%hash = (a => [0..3], b => [4..7], c => [8..11]);
print "$_:$hash{$_}/" foreach sort keys %hash;
# "a:ARRAY(0xbb1350)/b:ARRAY(0xbb1374)/c:ARRAY(0xbb1398)/"
# $hash{'a'} の中身は配列のリファレンス

print @{$hash{'a'}}; # "0123" ← @{} で配列としてデリファレンス

これでもう分かるよな?
046145703/05/27 11:13ID:OknXPD/2
>>460
リファレンスについて、随分わかってきました。
print @{$ORG{'adanaid'}};
で、配列要素一覧が取り出せることもできました。

ただ・・・もう少しおつきあいねがえませんでしょうか?(非常に恐縮です)
同じりくつで、

foreach ($key {sort { @{$ORG{'adanaid'}}[$a] <=> @{$ORG{'adanaid'}}[$b] } @{$ORG{'adanaid'}) {
  print qq|\$ORG{'person'} = $ORG{'person'} , \$ORG{'adana'} = $ORG{'adana'}, \$ORG{'adanaid'} = $ORG{'adanaid'}<br>|;
}
とやったのですが、コンパイルエラーになってしまいます。
print @{$ORG{'adanaid'}}[1]は動くから、そのまま1を$aと$bに変えればいいかと思ったのですが・・・
■ このスレッドは過去ログ倉庫に格納されています