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

くだすれPerl(超初心者用)

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/09/10(日) 13:33:48ID:???
このスレッドは、他のスレッドでは書き込めない超低レベル、  
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。  
Perl使いが優しくコメントを返しますが、  
お礼はPerlの布教と初心者の救済をお願いします。  
0175nobodyさん2007/06/15(金) 19:41:34ID:???
>>174
1. ああっ女神さまっ 1〜34巻
2. 逮捕しちゃうぞ 文庫版1〜4巻
3. 大人のCGIスクリプト
0176nobodyさん2007/06/15(金) 20:12:22ID:???
女神はクソアニメだろ…
0177nobodyさん2007/06/15(金) 20:55:45ID:???
銀英伝全巻(余裕があるなら、アニメ版全巻も)
0178nobodyさん2007/06/15(金) 21:51:09ID:???
それが僕には楽しかったから(小学館プロダクション)
ニーチェ入門 (筑摩書房)
本当の潜水艦の戦い方 (光人社)
0179nobodyさん2007/06/15(金) 22:38:03ID:3CYhNC9F
まじめに教えてくださいよ
0180nobodyさん2007/06/15(金) 22:48:57ID:???
あいまい3cm
0181nobodyさん2007/06/15(金) 22:51:37ID:???
答えていますとも。

>SF を読むこと。
>だじゃれや言葉あそびへの理解を深めること。
>母国語できちんと文が書けるようになること。
>多くのハッカーは「おたく」というレッテルを受け入れています。
>それは自分が普通の社会的期待から自由だと宣言する方法の一つなのです。
ttp://cruel.org/freeware/hacker.html
0182nobodyさん2007/06/16(土) 21:27:44ID:0wRsaGP2
Perl勉強しただけでハッカーになれるんですか?
0183nobodyさん2007/06/17(日) 08:54:43ID:???
perlしか知らなくてもハッカーになれるヤツはなるし
全言語覚えてもハッカーになれないヤツはなれない

要は応用力の問題
0184nobodyさん2007/06/20(水) 21:35:54ID:???
よろしければご教示願います。

PerlのCGIからEXEを叩くだけのSYSTEM関数を呼ぼうとしているのですが
処理自体はバックグラウンドでやらせて、制御は画面に戻したいので
「res = SYSTEM(1, @args)」で実行しようとすると、-1が戻されてしまいます。
「res = SYSTEM(@args)」でやれば問題なく動くのですが…

第一引数に1を設定した場合は実行不可になる、といったような
事例はあるのでしょうか?
(検索キー「SYSTEM」では該当が多すぎて…)
0185nobodyさん2007/06/20(水) 22:20:47ID:???
>>184
つかそもそもsystem関数の使い方わかってないだろ

「perl system」でググるくらいの検索能力は身につけようぜ兄弟
0186nobodyさん2007/06/20(水) 22:35:16ID:???
win 用の特別な記法があるのかと思ってググりまくった俺、マカー。orz...
0187nobodyさん2007/06/20(水) 23:12:17ID:???
>>185
いやあの・・・すいません。
「@args」と書いてあるところが、叩かせようとしているEXEの
引数つきコマンドラインです。

system関数の記事ならいくつもHITしますが、第一引数に1をセット
しての使い方についての記述はほとんどなかったので…
(この書き方自体がwin専用らしいですが)
0188nobodyさん2007/06/21(木) 00:30:05ID:???
>>187
最初に「Windows+ActivePerlの環境です」とかくらいは書いた方が良いと思うんだ。
@argsの内容とかも。argsなんて名前の配列にコマンドまで入ってるなんてあまり想像しない。

で、たぶん-1返してるのは@argsの中のプログラム側だからそっちを調べないと無理かも。
0189nobodyさん2007/06/26(火) 18:01:07ID:pgSc3qoH
perl、cgiを独学で勉強しているが理解できない;;
10日で覚える〜の本を参考書にしてるけど10日じゃ理解できないYO・・
学習能力ねぇから難しいなぁw
0190nobodyさん2007/06/26(火) 23:19:15ID:???
この手のは学習能力というより意欲の問題。
若干相性はあるがね。
0191nobodyさん2007/06/26(火) 23:32:33ID:???
人間必要に駆られないと覚えないから。

1. 何を作りたいか決める
2. とにかく作り始める
3. 詰まったら実現方法を参考書で調べる
4. 2に戻る

あとメモを取った方が効率が上がる。特殊変数全部メモるとか。
それさえあれば何時でも何処でも(少なくとも自分だけは)必ず何でも書けるメモを作る。
0192nobodyさん2007/06/26(火) 23:38:09ID:???
「10日で覚える〜」を買って本当に10日で習得したって話は聞かないから
>>189はあんまり気にしなくていいよ。

>>191
必要に駆られると覚えるの早いよなあ。納期とか。
01931892007/06/27(水) 11:43:36ID:qSRVuZRU
関数が覚えられないからメモをしっかりとってやってみます^^;
ゲームとか掲示板を思い通りに作りたいのでまずは基礎からって
感じだと思ったので、とにかく習うより慣れるかな〜
01941892007/06/28(木) 17:14:56ID:/27P2PeN
質問なんですがよろしくです
#! c:/perl/bin/perl

open(IN, "+<./count.dat");
$count = <IN>;
++$count;
seek(IN,0,0);
print IN $count;
close(IN);
こんなアクセスカウンターがあったとして./count.datの中に
12が書き込まれていたら次にアクセスしたら13になりますよね?
seek関数でファイルの先頭に持ってきているのはわかるんだけど
先頭にそのまま持ってきたら1312にならない理由を教えてほしいっす><
0195nobodyさん2007/06/28(木) 17:44:35ID:???
ファイルにはインサートモードは無い
01961892007/06/28(木) 17:53:34ID:/27P2PeN
インサートモードって何ですか?
seek(IN,0,0);
の、部分だけ消してアクセスすると1213になるけど
seek(IN,0,0);
が、あることにより上書きになるの?
0197nobodyさん2007/06/28(木) 17:58:37ID:???
常に上書きだ
書き込みポイント(シーク位置)が読んだことにより後ろになってるだけ
末尾で上書きすれば追加と同じだろう

メモリでも挿入ってのは、データを後ろにずらしてから上書きしてるんだよ。
01981892007/06/28(木) 18:16:42ID:/27P2PeN
???(´・ω・`)
seek(IN,0,0); は、
常に上書きって覚えとけば問題ないのかな?
ありがとうございますです。
0199nobodyさん2007/06/28(木) 18:26:31ID:???
あーもういいやそれで
0200nobodyさん2007/06/30(土) 14:41:50ID:zANvV/vQ
こういう範囲指定を → 4.43.96.0/24
このように変換   → 4.43.96.0-4.43.96.255
したいのですが、良い方法を教えてください。
0201nobodyさん2007/06/30(土) 15:21:36ID:???
拡大解釈して、「あるIPアドレスがあるネットマスク内にあるか否か」
ってスクリプトなら。

my $netmask = q{4.43.96.0/24} ;
my $ip = q{4.43.96.0} ; # <= ここにテストするIPアドレスをセット
my ( $org_ip, $byte ) = split m{/}, $netmask ;
my $packed_one = unpack qq{B$byte}, pack 'C4', split ( /\./, $ip ) ;
my $packed_two = unpack qq{B$byte}, pack 'C4', split ( /\./, $org_ip ) ;

if ( $packed_one eq $packed_two ){ print q{in} . qq{\n} ; }


こんな感じ?と素人が答えてみるテスト。

0202nobodyさん2007/06/30(土) 15:54:22ID:???
>>201
正直Perlは良く分からないのですが、コピペして結果がでました。
どうもありがとうございます。ペコリ
0203質問2007/06/30(土) 16:27:58ID:6uCjWfRX
配列の値をリファレンスを使って、サブルーチンへ渡す方法についての質問です。

下記のような簡単な物を作って、配列のリファレンスがサブルーチン側へ渡されていることは
わかりました。($alldata_refと$getdata_refが同じ)
が、サブルーチンを使っての配列の値の参照がなぜかできません。
いろんなサイトをみても問題はないようですが、わかる方教えてください。

@alldata=(1,2,3,4,5);
$alldata_ref=\@alldata;
print "$alldata_ref\n";
foreach (@$alldata_ref){
print "$_";
}
print "\n";


&COUNT8(\@alldata);

sub COUNT8{
my $getdata_ref="@_";
print "$getdata_ref\n";
foreach (@$getdata_ref){
print "$_";
}
print "\n";
0204nobodyさん2007/06/30(土) 16:43:21ID:???
my $getdata_ref=shift;
02052032007/06/30(土) 16:46:10ID:???
うほっ。
よくわかりませんが、できました。
ちょっとshift勉強しに公園のトイレ前に行きます。
0206nobodyさん2007/06/30(土) 16:53:48ID:???
便乗で質問させてください

>>203って、サブルーチンの中で引数を取得する時に
ダブルクォーテーションで囲った事が原因ですよね?
0207nobodyさん2007/06/30(土) 17:11:28ID:???
printで表示される物と、内部的な扱いは違う。
ついでに、ダブルクオートしなかったら要素数が返るだけと思う。
shift@_なり、$_[0]なりで、ちゃんとリファレンスを取得することが大事。
0208nobodyさん2007/06/30(土) 20:16:18ID:???
ついでに、ダブルクオートしなかったら、COUNT8に渡された
リスト(アレイリファレンス1個のリスト)がスカラーコンテ
キストで評価されて結果は1。
0209nobodyさん2007/07/01(日) 06:34:28ID:???
my($getdata_ref)=@_;
が推奨されています。
当たり前ですが複数なら以下です。
my($abc,$def,$ghi)=@_;

またPerlでは@arrayの評価は左辺値で決まるので、ダブルクオートしなければ
必ず要素数が返ると信じるのは誤動作の元です。
$#array+1を使うか、scalar(@array)と明示する方法がオススメです。

さらにfor文をこのように書く人が大勢居ますが、
for(,my $i=0; $i<@array; $i++)
非常に遅いので予め@arrayの要素数をスカラーに移して使いましょう。
0210nobodyさん2007/07/03(火) 16:41:35ID:Fn19fg5B
>>209
板違い。
Perl板でやれ。
0211nobodyさん2007/07/03(火) 19:22:53ID:???
perl板って何処にあるんだよ。
0212nobodyさん2007/07/04(水) 09:06:32ID:???
http://pc11.2ch.net/perl/
0213nobodyさん2007/07/07(土) 14:31:13ID:MhnKrAyD
ActivePerlでPerl始めたんだけど、エクセルのデータかCSVから
それぞれの行、列から数値を取り出したいんですけど、
どこかに良いサンプルか参考になるサイトはないですか?
0214nobodyさん2007/07/07(土) 14:50:58ID:???
>>213
ここはwebprog板なのでキミの質問は板違いである。
0215nobodyさん2007/07/08(日) 06:04:57ID:???
べつに板は違わないけど
Perl CSVやPerl Excelで検索すりゃ一瞬で出るものを書かれると何かが減退する
02162132007/07/09(月) 22:38:35ID:6iXDsaKo
Webで検索しても分らないから質問したんですが・・・orz
0217nobodyさん2007/07/10(火) 10:55:28ID:???
減退しようぜ
0218nobodyさん2007/07/10(火) 11:13:10ID:???
まああるていどやって、ここがわからないという質問だと答える気にもなるけど
お前らの答えは信用ならんから、サンプルやサイトを教えてくれと言われたら
こたえる気はなくすわな
0219nobodyさん2007/07/10(火) 11:49:08ID:???
「IBMの言う通りにしたけど出来なかった(゚Д゚)」
と言われたなら、へー出来ないんだーという情報価値も少しある。
出来たらぶっ飛ばすけどね。

今ちょっと見たらOffice2000がどのライブラリも対応してる感じだけど、
バージョンの説明も無いし、なんで検索のお手伝いをしないといけないんだって。
0220nobodyさん2007/07/10(火) 13:28:27ID:???
>>216
Google 使って「Perl CSV」で検索すると、先頭に出てくるのだが。
一体、何がどう分からないのかな?
0221nobodyさん2007/07/10(火) 18:20:33ID:???
Mac OS X(10.3.9)を使ってるんですが、perlが5.8.1です。
アップグレードってどうやるんですか?5.8.6にしたいんですが(参考にしてる本が5.8.6だから)
0222nobodyさん2007/07/11(水) 09:43:51ID:???
>>216
ほれ。チョーわかりやすいサンプルを書いてやったぜ。

#! /usr/bin/env perl
$csv = <<"_CSV_";
activePerlで,Perl,始めたんだけど、,エクセルの,データか,CSVから,
それぞれの,行、列から,数値を,取り出したいんですけど、,
どこかに,良いサンプルか,参考になる,サイトは,ないですか?
_CSV_
grep{push(@d2a,[split(/,/)])}split(/\r?\n/,$csv); # 格納
for(@d2a){print for(@$_);print "\n";} # 表示
0223nobodyさん2007/07/11(水) 09:47:22ID:???
>>221
5.8.6をインストールすればいい
0224nobodyさん2007/07/11(水) 15:56:08ID:FWgAFc3u
質問です。おながいします
sub printPage
{
my $begin = $FORM{'page'} * $PAGEVIEW;
my $end = $begin + $PAGEVIEW;

if($end > @DATA) {
$end = @DATA;
}
本を見ながら掲示板を作っているんだけど、my $begin やmy $end が
@DATAの添え字になっているって本に書いてあるんだけど@DATAの添え字なら
$DATE[$begin]とかってってならなくてmy $begin やmy $endで添え字になって
いる理由がわかりません。
わかる方おながいします。
02252242007/07/11(水) 16:09:46ID:FWgAFc3u
すまんかった。スルーしてくれ
0226nobodyさん2007/07/11(水) 19:57:17ID:???
>>222
Excelの吐くCSVはそれだけじゃダメだよ…
02272132007/07/12(木) 08:33:10ID:???
CSVの1行目に
A,B,C,D,E,とあるとするとそれを
�@=A
�A=B
�B=C
…
と格納して

print �B
print �A
print �D
みたいなことがしたいんですが。。。。
この処理が終わると2行目へ・・・と言った感じで。
0228nobodyさん2007/07/12(木) 14:01:39ID:???


               (:.;゚;Д;゚;.:)y-~


0229nobodyさん2007/07/13(金) 15:37:18ID:jk1vnwXj
超初心者質問です。おながいします。
#! c:/perl/bin/perl

print "Content-type: text/html\n\n";
print "Hello Perl !";

と、CGIに書いて本には
Content-type: text/html

Hello Perl !
と、出力すると書いてあるのですがやってみると、

Hello Perl !

しか出力しません。なぜでしょうか??
AN HTTPD ってのを使ってます。

0230nobodyさん2007/07/13(金) 15:49:26ID:???
>>229
ブラウザ何使ってる?
wgetとかコマンドラインのやつ使ってなけりゃ
Firefox入れてLive Http headers アドインを入れてみるのを薦める
0231nobodyさん2007/07/13(金) 15:52:21ID:???
>>229
本の出力例+説明はコマンドラインから走らせたときを想定してると思う。
CGIとして叩いた場合でなくて。
02322292007/07/13(金) 16:27:58ID:jk1vnwXj
230,231さん、ありがとう。
いろいろ調べてたらCGIヘッダーはWebサーバーからWeb
ブラウザに送信される過程で使われるだけだからブラウザに表示
されるのは「Hello Perl ! 」だけ、とのことみたいなのでなんとなく
解決しました☆
Windows XP使ってますがAN HTTPDではPerl勉強するのに不足でしょうか?
230さんの「Firefox入れてLive Http headers アドインを入れてみるのを薦める 」
を、やったほうがいいでしょうか?

0233nobodyさん2007/07/13(金) 17:33:57ID:???
Firefoxはブラウザだ。サーバ(httpd)はなんでもいいよ
02342292007/07/13(金) 19:08:30ID:jk1vnwXj
ユーザーエージェントが
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
なので、Firefoxですか?
0235nobodyさん2007/07/13(金) 19:18:19ID:???
流石くだ質…レベルが低すぎるってレベルじゃねえぞ
0236nobodyさん2007/07/13(金) 21:48:51ID:???
>>234
思いっきりIE6って書かれてるじゃまいか・・・

>>235
スレタイ嫁
答えたくないんなら、スレ読むな
0237nobodyさん2007/07/13(金) 22:29:23ID:???

何故貴方に感想を書くことを
制限されなければならないのですか?
ここはあなたの掲示板なのですか?
スレッドに帰属意識でも持ってるお馬鹿さんですか?
0238nobodyさん2007/07/13(金) 22:34:44ID:???
>>236
最近はMSIEって書いてあっても信用できない事が(Opera等)あるからキヲツケロ。

0239nobodyさん2007/07/14(土) 00:18:15ID:???
>>237
スレ汚しが趣味ですか?
0240nobodyさん2007/07/14(土) 07:16:10ID:???
はい
0241nobodyさん2007/07/14(土) 07:46:14ID:???
>>240
NGフィルタかけたいから、コテなりトリなりつけてくれ。
0242獅子王2007/07/15(日) 18:51:36ID:EW+ZDItZ
スイマセンが及ばずながら僕もPerlを使いたいと志すものです。
他のところではちょっと僕の質問の仕方が無礼だったようなのでここで質問させてください。
実はつい先日perlをダウンロードするために配布サイトまで行ったのですが
英語尽くしで何がなんだかわかりません。どうも僕にperlのダウンロード
の仕方を教えていただけませんでしょうか?長々とスイマセン。
0243nobodyさん2007/07/15(日) 19:59:41ID:???
ttp://www.activestate.com/downloads/
ActivePerlのGet Current Release→Download→continue→Windows (x86) MSI
0244nobodyさん2007/07/15(日) 20:40:29ID:???
Windowsと決め付けるところがさすがに超初心者スレッド。
0245nobodyさん2007/07/15(日) 21:09:48ID:???
1. UNIX/Linuxはバージョンはともかくプリインストールの筈である
2. 習慣としてMacならMacと断りを入れる
3. 傾向としてWindowsユーザだけがこのような質問をする

というわけで>244はアスペルガー症候群という自閉症だと思われる。
ttp://www.autism.jp/asp/

>子どもでも大人でも社会生活には暗黙のルールがあります。暗黙のルールがわからないために
>他の子どもから嫌われたりいじめられるアスペルガー症候群の子どもが多いのです。

>その場で何が話題になっているか、言外の意味を汲み取ることが苦手なのでどうとでもとれる
>曖昧な質問には答えることが難しいのです。問いかけはなるべく具体的にする必要があります。
0246nobodyさん2007/07/15(日) 23:00:57ID:???
>>245
後半は余計だ。荒れる素だからヤメレ。
0247nobodyさん2007/07/16(月) 13:22:38ID:???
>>245
1以外は妄想だな。
なんていったけ、見下されると我慢できなくて攻撃態勢に入る精神疾患。
0248nobodyさん2007/07/16(月) 13:46:04ID:???
>>247
ホントばかだなオマエは。
その1以外のために「暗黙のルール」や「言外の意味」に関する見解を示したんだよ。
1だけならたしかに後半は余計だった。
0249nobodyさん2007/07/16(月) 13:57:35ID:???
だいたいリンクを踏んで行けば最後に一通りOS名が表示されることも知らないから
>>244のような発言が出るのだろうし、もし>>243で
「OSぐらい書け」
と言っていたら、ギャラリーの八割が
「Windowsに決まってるだろ」
と思うわけ。そういう当たり前の常識がオマエには無いんだよ。なぜなら脳に障害があるから。

>>244の脳に障害があることを前提に、極めてわかりやすく、リンクに要点の引用まで付けて
"暗黙のルール" の具体例を示したのに、それでも結局
「1以外は妄想だな。 」
と来る。妄想じゃなくて、暗黙の了解なんだよね。
要するにバカには言葉が通じないので、バカが死ねと言い続けるしか無いんだな。
0250nobodyさん2007/07/16(月) 14:15:09ID:???
なんか今訊いたらOSXもPerlはプリインストールらしいじゃん。
初期でPerlが入っていない主要OSはWindowsのみ。>>244みたいな筋金入りのバカは
「Linuxでもカスタムインストールなら」
と言うかもしれないが、Linuxでは主要なアプリケーションでPerlが使われており、Perlは
対象から外せないか、外したつもりでも他のAPの依存関係で結局インストールされる。
試しにLinuxでPerl消してみろよ。yumもaptも動かなくなるから。

なんでこんなバカが人前で発言する気になるんだろう。
0251nobodyさん2007/07/16(月) 17:32:45ID:Pd2envQf
どっちも酷いな
0252nobodyさん2007/07/16(月) 18:05:34ID:???
>>248-250
後付けで何とか体面を整えようと必死杉。笑う。

これを裏付けるデータあるかね。お前さんの脳内以外に。
> 2. 習慣としてMacならMacと断りを入れる
> 3. 傾向としてWindowsユーザだけがこのような質問をする
0253nobodyさん2007/07/16(月) 18:50:59ID:???
FreeBSD使いに喧嘩を売ったと見なす
02542462007/07/17(火) 01:15:15ID:???
>>248
あーあ、結局荒れるのか。いいかげんモチツケ。

>>247
アスペルガー症候群の事か?藻前の煽りも余計だ。荒れる素だからヤメレ。
0255nobodyさん2007/07/18(水) 12:20:06ID:???
>>252
オマエ無様だからそろそろ己の低スキルを自覚して自殺しろよ。
オマエの人真似の言葉なんて誰の役にも立ちゃしないし、生きていても意味が無い。

>>254
「荒れる」のハードルも低くなったもんだなぁ。これはせいぜい教育的指導の域を出ない。
>>244みたいな典型的なバカが匿名を盾に人並みに発言するのが社会にとって最も有害。
ノーテクはノーテクだから>>252のように技術以外の部分に必死で食らいつく他に無い。
先に絡んで来たのは>>244なのだし、オレは知ったこっちゃない。
0256nobodyさん2007/07/18(水) 12:58:42ID:???
まぁスレも過疎ってるし話を広げて行こうぜ。テーマはこんな感じで。
「OSを指定しないPerlの新規インストールに関する質問には当然OSを尋ねるべきである」

1. Linux、Solaris、OSXは通常プリインストールである
2. したがって質問者の使用OSがWindowsである確率はシェアから約99%超と考えられる
3. 1%の可能性のためにOSを尋ねる場合、回答到達までに3フェーズ必要となる
  (OS問合せ->OS回答->URI回答)
4. したがってスレタイに関係なく、この場合OS名を尋ねる者は鬱陶しくも痛いバカである

反論があれば個別にどうぞ。
それとは別にPerlに関するくだらない質問は勝手に訊いてください。
0257nobodyさん2007/07/18(水) 16:34:28ID:???
獅子王君はどこいったのかね?
0258nobodyさん2007/07/19(木) 18:35:22ID:IU8VyPgY
初心者です。質問おながいします。
top.htmlのページからindex.cgiを通してサブルーチンで分岐してa.htmlとb.htmlを
出力したいのですがどうすればいいか詰まってしまいました。
例えば、top.htmlで「男性」or「女性」をクリックしてindex.cgiでotoko.htmlと
onnna.htmlを分岐する場合、top.htmlの中身のリンクの<a href=./index.cgi>
の所になにか条件を指定してcgi内でサブルーチンで分岐できるのですか?
できるならリンクの書き方を教えて欲しいです。
わかりにくくてすんません。
0259nobodyさん2007/07/19(木) 19:12:33ID:CIvRVShF
>>258
普通にパラメータ書いて分岐させりゃ簡単に出来ると思われ。

ってか、top.htmlにotoko.htmlやonnna.htmlへの直接リンクを書かないのはなぜ?
0260259 2007/07/19(木) 19:19:01ID:IU8VyPgY
どうもですm(__)m
直リンクじゃなくてcgiを利用して使いたかったんで^^;
すいません、パラメータってなんですか?><
0261nobodyさん2007/07/19(木) 19:21:52ID:???
>>260
実験してるって事?

ひとまず、
http://www.aikis.or.jp/~s-suzuki/cgilabo/kouza/cgi2.html#cgilabo4
これでも見て勉強汁。
0262259 2007/07/19(木) 19:28:14ID:IU8VyPgY
ありがとう。
いろいろ試してみないと気が済まない性格で^^;
0263nobodyさん2007/07/20(金) 00:13:39ID:???
>>255
裏づけるデータはお前の脳内以外には無いんだな。
0264nobodyさん2007/07/20(金) 03:03:34ID:???
キミもそれしか言えないのかね
0265nobodyさん2007/07/21(土) 09:40:53ID:???
妄想でしかないんだろ。
妄想を真理と思い込み、他の可能性には気が廻らない。
想定外だったという理由のバグを大量生産するタイプだ。
0266nobodyさん2007/07/21(土) 17:15:10ID:LRr3Colp
バグってきついよねぇ〜。
0267nobodyさん2007/07/23(月) 11:42:52ID:???
>>259

#!/usr/local/bin/perl
use CGI qw(:standard);#CGIでのパラメタ受け取り等を簡単に扱うためのもの
use strict;

my$url=sample.cgi; #これ自身のファイル名にしておく

my$name = param('name'); #フォームからの名前投稿をパラメタとして受け取り

# 以下、投稿フォーム。
#form action="$url" は、submitボタンを押した時に飛ぶ場所
#name="name" は、パラメタ名

print my$a= <<EOM;
Content-type: text/html\n\n
<html><head>
</head><body>
<form action="$url" method="POST">
名前<input type="text" size=10 maxlength="7" name="name"><br>
<input type="submit" value="投稿" name="toukou"></form><hr>
EOM

# 以下、表示。
#もしも$nameがあれば(パラメタとしてでも$nameを受け取っていれば)$nameを表示
if($name){
print$name;
}
0268nobodyさん2007/07/23(月) 12:05:29ID:???
アンカミスった
>>259でなく>>258。

上はただのパラメタの使い方。

フォームを
<form action="$url" method="POST">
<input type=radio name=seibetu value otoko >
<input type=radio name=seibetu value onna >
<input type=submit value=投稿>
</form>
とすれば、投稿ボタンが押されたときに$urlのURLに飛んで、パラメタ名seibetuにotokoかonnaを入れて渡すことが出来る。

受け取り側は
my$seibetu = param('seibetu');#パラメタ受け取り

if($seibetu eq otoko){
#パラメタがotokoだった場合の処理
}
elsif($seibetu eq onna){
#パラメタがonnaだった場合の処理
}

デバッグしてないから文法ミスがあるかもしれないが、こんな感じで
0269nobodyさん2007/07/23(月) 12:26:23ID:???
そうそう、
>>261のリンク先に、getが使用されにくい理由に
・環境変数には長さに制限があるので、getの場合途中でパラメータが切れることがある
・ブラウザがIEの時、フォームに<TEXTAREA>があるときはGETは使えない
・postの場合、パラメータの長さが。環境変数 CONTENT_LENGTH に格納される

とあるが、getはURLエンコードして、見える状態で渡されるから、悪意ある第三者に利用される可能性がある。
セキュリティの面から言ってもpostを使ったほうがいい。
もっと言うなら、「getもpostも両方の扱い覚えるのマンドクセ」ってときはpostの扱いだけ覚えればいい。

以上、駄文スマソン
02702582007/07/23(月) 16:22:00ID:dzTqHpzl
ありがとう。簡単にこんな感じで作ってみたけど上のもコピーしてやってみます!
#! c:/perl/bin/perl
$buffer = $ENV{'QUERY_STRING'};
if($buffer eq 1) {
otoko()};
if($buffer eq 2) {
onna()};

sub otoko{

print "Content-type: text/html\n\n";
print "<HTML><HEAD>";
print "<TITLE>CGI-TEST</TITLE>";
print "<BODY>\n";
print "$buffer 男性<br>";
print "</BODY></HTML>";
exit;
}

sub onna{

print "Content-type: text/html\n\n";
print "<HTML><HEAD>";
print "<TITLE>CGI-TEST</TITLE>";
print "<BODY>\n";
print "$buffer 女性<br>";
print "</BODY></HTML>";
exit;
}
0271nobodyさん2007/07/23(月) 19:24:19ID:ZBWpUMJL
パーミッションの設定に躓いてから なにもやらなくなって
早2年
そんな自分に嫌気がさす。
てかActivePerlとMySQLのインスコが難しすぎる。
何度やっても失敗ばっかりだ。
俺の人生を象徴しているかのよう。悔しいぜ。
0272nobodyさん2007/07/23(月) 20:36:30ID:vSTTUlTw
Perl勉強しはじめて2週間。
基本的なことなんだけど考え付かなくなってしまったので
発想力をちょっと貸してください。

HTTPリクエストして、BODY部分だけ表示させたいのですが
HEAD部分を表示させないようにSOCKETを

while (<$SOCKET>){ m/^\r\n$/ and last; }
print <$SOCKET>;

こんな感じでHEAD部分はループさせて抜けてから
BODY部分をprintさせるうえで
while使わずにやる方法としてはどうやりますか?

do{}whileやuntilでも出来ると思うんですが
何故かHEAD部分から全部表示されたり、無限ループに突入したりします。

難しいものじゃないはずなのに何故か書けない罠にはまった感じです。

発想力をちょっと貸してください。
0273nobodyさん2007/07/23(月) 21:52:25ID:???
>>272
つかまずバッファに入れてから処理しようぜ
SOCKETひらきっぱで処理するのイクナイ
0274nobodyさん2007/07/23(月) 22:19:18ID:???
>>272
ソケットとかややこしそうで足踏み入れてなかったが、ソケットのヘッダとボディは
"Content-type: text/html\n\n";
となってるんだよな?
\n\nと、改行が2個あるところで判断すればいいと思う。
この改行は\nであって\r\nでは無理だと思う。

my$ppp = my@socket = <$SOCKET>;
for (0..$ppp-1){
if($socket[$_]=m/^\n$/){last}
shift @socket;
}
print @socket;

↑これでイケル希ガス。つかもっといい方法を思いたったので次に書く。
おそらく、HTMLで表示するんだろうから、chompで改行文字を消してもいいんだよね?

my@socket = chomp(<$SOCKET>); #改行文字だけの部分はchompでカラになる。
while(@socket){shift @socket} #@socketで要素が何も無い場所に来るとwhile文がfalseとなりループは終わり、shiftも終わる。
#@socketの0個目の要素は何もカラ、1個目からの要素は改行を取り除いたボディ部分。

ちゃんと動作するか知らんが、初心者同士がんがろうぜ
■ このスレッドは過去ログ倉庫に格納されています