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

【Perl】初心者コーナー Part15

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん02/08/08 23:19ID:???
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

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

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

CGIだけど、なんか質問ある? Part 6 (その2)
http://pc.2ch.net/test/read.cgi/php/1025930486/
参考書籍の話題は【【Perl,CGI】参考書籍 第2版】
http://pc.2ch.net/test/read.cgi/php/988809842/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
スクリプトの改造依頼は 【スクリプト改造工房 Part4】
http://pc.2ch.net/test/read.cgi/php/1012839651/

過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0655nobodyさん02/09/06 00:48ID:???
>>654
板違い
それに、それはJavaではなくJavaScriptだ
0656nobodyさん02/09/06 00:48ID:???
2apeとかの掲示板を携帯対応にはできるのでしょうか?
0657nobodyさん02/09/06 00:50ID:???
>>656
君の腕次第
0658nobodyさん02/09/06 00:59ID:???
>>657
教えてください。
0659 ◆XUwkgSoY 02/09/06 01:03ID:???
>>658
$ua=$ENV{'HTTP_USER_AGENT'};
if($ua=~/UP.Browser|DoCoMo|J-PHONE|ASTEL|PDXGW|L-mode/i){

あとはお好きに
0660nobodyさん02/09/06 01:11ID:???
>>659
PDXGW|L-modeって…
0661nobodyさん02/09/06 01:12ID:???
>>659
すごく初心者なのですがそれをどうしたらいいのでしょうか?
0662 ◆XUwkgSoY 02/09/06 01:16ID:???
>>660,659
ttp://specters.net/cgipon/labo/c_dist.html
ここの内容を要約して見たつもり。
0663T女の竹田02/09/06 01:16ID:???
>>649
うん、セキュリティから言うとJavaScriptじゃ何もしてないのと同じだしね。
この場合みたいにおまけみたいな機能ならいいかなと思った。
0664 ◆XUwkgSoY 02/09/06 01:17ID:???
もとい
>>660,661だ
0665 ◆AMaff.3Q 02/09/06 01:23ID:???
unkooooooo
0666 ◆XUwkgSoY 02/09/06 01:25ID:???
>>661
まずは携帯から掲示板にアクセスして、
うまく動作してない箇所があったら>>659の方法で処理を振り分ける。
一応うちではそうしてるにょろ。
0667nobodyさん02/09/06 03:28ID:???
サブルーチンの事で質問ですけれども。
ぶっちゃけスクリプトのどこに置くのが一番効率いいんでしょうか。
とにかく先頭の方でしょうか
はたまた最下部でしょうか
それとも呼び出す直前でしょうか
どこでもいっしょでしょうか
というかなるべく使わないほうがいいんでしょうか
自分では調べられないので教えてくださいまし。
0668nobodyさん02/09/06 03:50ID:???
変わらないから気にしなくて良し
066966702/09/06 03:51ID:???
はい
0670名無しさん@Meadow02/09/06 05:32ID:dZ6p0Gwt
>>646
IE5.5ではできんかった。というよりINPUT TYPEとかも書いてほしい。

>>649 よく理解できんです。
サーバーのデータベースに直接アクセスするとかソースを見られて
はいけないものは、CGIだけど、それ以外は、なるべくサーバーに
負荷がかからないクライアントサイドのJavaScriptで処理した方が
いいのでは。
まあ、JavaScriptをOnにしてくださいと書くのは面倒というのはある。
テキストブラウザとかだとJavaScriptできないし。あとJSのバー
ジョンとかNSとIEの違いによるサポート状況の違いとか面倒。

>>627 もう来ないか。textareaだかで受け取ったデータの中の
全角<->半角変換スクリプト:

$input = "012344567899012";
@zenkaku=('0', '1','2','3','4','5','6','7','8','9');
@hankaku=('0','1','2','3','4','5','6','7','8','9');
$sw = 1;
if ($sw == 1) {
&zen_han(\@zenkaku,\@hankaku);
} else {
&zen_han(\@hankaku, \@zenkaku);
}
sub zen_han {
my ($A, $B) = @_;
for $i (0 .. 9) {
$input =~ s/@$A[$i]/@$B[$i]/g;
}
}
print $input, "\n";
0671nobodyさん02/09/06 06:55ID:HPly/0Dw
cgiは今回初めてです。アクセス制限の仕方を教えて下さい。
0672nobodyさん02/09/06 06:59ID:???
>>671
http://www.google.co.jp/search?q=%83A%83N%83Z%83X%90%A7%8C%C0%82%CC%8Ed%95%FB
0673nobodyさん02/09/06 07:04ID:???
和鳥で、KENTのWebPatioを使ってます。
regist.cgiの中の
unlink("$logdir$in{'no'}\.cgi");
unlink("$logdir$in{'no'}\.dat");
なのですが、unlinkでエラーを返してきます。
和鳥だとunlinkは使えないのでしょうか?
0674nobodyさん02/09/06 07:14ID:???
掲示板が昨日まで動いていたのに急に動かなくなりました。
早くどうにかしてください。
0675nobodyさん02/09/06 07:20ID:???
>>673
板違いかな
http://pc.2ch.net/perl/
こっちちゃう
0676nobodyさん02/09/06 07:23ID:???
>>674
板違いかな
http://natto.2ch.net/denpa/
こっちちゃう
067762702/09/06 14:32ID:???
>>670
サンクス
0678nobodyさん02/09/06 15:15ID:???
PerlでのCGIなのですが、スクリプトの負荷を数値化する方法はないですか?
0679T女の竹田02/09/06 17:31ID:???
>>670
文字境界…。
$input = "浮P";
とかにすると化けちゃうよ。
0680ぱぴぷぺ02/09/06 17:41ID:UnlQ9r36
なんとかPerlで動的に画像をブラウザに表示させたろう
と考えてるんだけど、モジュールとか使わない場合、
XBMつーーのがあるのを知ったのですが、
これはモノクロのみカラーは絶対ダメ?
0681nobodyさん02/09/06 18:28ID:???
>>680
>動的に画像をブラウザに表示
なら、Location、binmodeで吐く
「動的に作成した画像をブラウザに表示」
なら、GDが無難か?ファイルにもよるか…
0682nobodyさん02/09/06 18:31ID:???
xbmは白黒のみ
xbm,xpmはIEで表示できたっけ。
0683名無しさん@Meadow02/09/06 20:35ID:???
>>679
perlによる日本語の扱いはeucにするのが常識。
0684T女の竹田02/09/06 23:09ID:???
>>683
ごめん。ついSJISで考えてた。
EUCなら、
$input="横井";
だね。
0685 02/09/06 23:30ID:???
while (!mkdir($hoge, 0705)) { mkdir "$hoge", 0705; }
これってどんな意味があるんですか?
0686nobodyさん02/09/06 23:31ID:???
$hogeがパーミッション705で製作されるまで繰り返す。
0687nobodyさん02/09/06 23:34ID:???
>>685
どうしてもmkdirしたい
{}の中が怪しいがw
068868502/09/06 23:38ID:???
>>686
これはもし、ディレクトリィがあった場合はどうなるんですか?
>>687
どの部分がぁゃしぃですか?
0689nobodyさん02/09/06 23:42ID:Aw2qBvZ4
ある変数の一番最後の文字を別の変数の頭に置くにはどうすればよいでしょうか。
例えば$aaaが4876で$bbbが124だった場合、$aaaを487、$bbbを6124にしたいのです。
「$bbb = chop($aaa).$bbb」 と書いてみたら、結果は$aaaが空白で$bbbが4876124になってしまいました。
どう書けばよいでしょうか。
0690nobodyさん02/09/06 23:57ID:1kVQvMrN
■10.000円の高額収入
1件につき最大10.000円の高額収入。月収100万円以上も可能。
■画期的なビジネス!
インターネットを利用したこれまでにない斬新で画期的なビジネスです。
■誰でも出来ます!
インターネットができる環境の方なら誰でも参加可能です。
インターネットを利用したビジネスですので、自宅や会社で好きなときにで
きるビジネスです。
■専門的な知識は一切不要!
ビジネスに必要なツールは全て当社で用意いたします。
また、サポートも万全です。
■詳細は今すぐこちらから
http://www.bea.hi-ho.ne.jp/paisen/
0691nobodyさん02/09/06 23:59ID:???
>>689
$aaaを""で1文字ずつsplitしたものを配列に入れて@hairetu[-1]で最後の文字を取り出してみる?
069268502/09/07 00:01ID:???
これは?
$ccc=$aaa$bbb;
$cco=$ccc =~ s/\d/\d/g;
$cco=$cco-1;
$ccc=~ s/(\d{1,$cco})([^\n])/$2/g;
$ccc=$ccc$bbb;
069368502/09/07 00:02ID:???
一行ミスった。
$ccc=~ s/(\d{1,$cco})([^\n]*)*/$2/g;
こふだった。
069468502/09/07 00:05ID:???
全然違うので考え直してきます。
069568502/09/07 00:12ID:???
$aaa='11111';
$bbb='22222';
$cc0="$aaa$bbb";
$cco=$cc0 =~ s/\d/\d/g;
$cco=$cco-1;
$ccc =~ s/(\d{1,$cco})([^\n]*)/$2/g;
$ccc="$ccc$bbb";
0696nobodyさん02/09/07 00:17ID:???
>>692-695
おいおい、何をやりたいんだ?
0697nobodyさん02/09/07 00:18ID:???
$aaa = '4876';
$bbb = '124';
$aaa =~ s/(.)$//;$bbb = $1.$bbb;
0698nobodyさん02/09/07 00:20ID:???
>>697
( ´,_ゝ`) プッ
0699T女の竹田02/09/07 00:23ID:???
>>685
そのスクリプトを理解する必要はないし、そのスクリプトから
何かを学ぼうと思わない方がいいと思うよ。

>>689
そのまま
$bbb = chop($aaa).$bbb;
で動くと思うけど。
070069702/09/07 00:23ID:???
>>698
何か間違ってる?
070168502/09/07 00:24ID:???
$aaa='11111';
$bbb='22222';
$cc0=$aaa;
$cco=$cc0 =~ s/\d/\d/g;
$cco=$cco-1;
$cc1=$aaa;
$cc1 =~ s/(\d{$cco})([^\n]*)/$2/g;
$ccc="$cc1$bbb";
070268502/09/07 00:39ID:???
685[なぜだ?今の答えなら間違いなくあたっていたはずだ。
きさまは以前にも突然現れ消えたことがあった。]
689[オラには聞き逃げができる。]
685[そいつはやっかいな技だ。バシッ!私も聞き逃げは自身があるんだ。]

070368502/09/07 00:43ID:???
1行書き忘れた。
685[689とまではいかないがね。]
070468902/09/07 01:15ID:mL5CsCc5
>>699
わたしもなぜ$bbb = chop($aaa).$bbb; で$bbbの値全部が$aaaの頭にくっついて
しまうのか、わからないんです。
>>685
$aaa $bbb の値は dat.txtを参照しているので、固定値ではありません。
070568902/09/07 01:34ID:mL5CsCc5
すみません。間違えました。頭ぐちゃぐちゃです(;;)

わたしもなぜ$bbb = chop($aaa).$bbb; で$aaaの値全部が$bbbの頭にくっついて
しまうのか、わからないんです。 ○

わたしもなぜ$bbb = chop($aaa).$bbb; で$bbbの値全部が$aaaの頭にくっついて
しまうのか、わからないんです。×
0706nobodyさん02/09/07 01:42ID:???
ループの中でやってるとか。

#例
while($aaa){
$bbb = chop($aaa).$bbb;
}

これなら$aaaが空になって全部$bbbの頭に付く。
0707nobodyさん02/09/07 01:46ID:???
>>705
だって数であって文字列ではないし…
070868902/09/07 01:55ID:mL5CsCc5
>>706
きっとその通りです(><)
でも、置換条件があるので、
if($aaa ne $hoge){
$bbb = chop(aaa).$bbb;
}
というように、{}内に書かなきゃいけないかなと思っているのです。
発想自体間違っているのかな...

>>707
文字列扱いにする方法はありますでしょうか。。
0709nobodyさん02/09/07 02:01ID:???
>>708
$aaaを''で囲む(適当)
0710nobodyさん02/09/07 02:03ID:???
>>707
chopの時点で文字列コンテキストに変換されるわけだが。。

>>708
適当なとこ言うな。

>>689
普通にやりたいことやるなら
$bbb = substr($aaa, -1) . $bbb;
だけど、chopでも$bbbの値は希望のものになるはず。
ならないなら他に原因がある。
前後のコード晒してみると吉。

0711nobodyさん02/09/07 02:04ID:???
一度だけ通れば良いなら
if($flag != 1 && $aaa ne $hoge){
$bbb = chop($aaa).$bbb;$flag=1;
}
とか。
0712nobodyさん02/09/07 02:10ID:???
( ´,_ゝ`) プッ みなさんレベルが低いですね
071368902/09/07 02:10ID:mL5CsCc5
>>710
とりあえずchopはあきらめてsubstrで試してみます。
(やりたい事は同じはずだから)
ありがとうございました。
0714nobodyさん02/09/07 02:12ID:???
ちなみにif(){〜}はループじゃないぞ。
その外側にwhile(){〜}とかfor(){〜}とかforeach(){〜}とかの
ループがあるんじゃないのか。

substrじゃ$aaaの値は減らないけど良いの?話違わない?

>>712
スレタイ嫁
0715nobodyさん02/09/07 02:33ID:???
……chop、カッコで囲んだら?
$bbb = (chop($aaa)).$bbb;
0716nobodyさん02/09/07 02:43ID:???
>>715
カッコつけてんじゃねーよ
0717名無しさん@Meadow02/09/07 04:24ID:???
>>684
私は、jperl使ってるので別に文字化けしないけど。
じゃtr使えばいいじゃんという問には答えません。
0718nobodyさん02/09/07 12:21ID:???
( ´,_ゝ`) プッ みなさんレベルが低いですね
0719nobodyさん02/09/07 14:35ID:???
↑さびしんぼハケーン(・∀・)ニヤニヤ
0720nobodyさん02/09/07 16:12ID:???
↑さびしんぼハリケーン(・∀・)ニヤニヤ
0721CGIゲームつくりたい人02/09/07 18:06ID:BCsa1yWW
CGIに関してはまったく知識がないのですがこれから勉強するつもりなのですが
目標が自分でCGIゲームを作ることで
そのために参考書を買って勉強したいのですが
オススメの本ありますか?
本屋いってもゲーム作りの本がどれだかわからなくて・・・
よろしくおねがいします。
0722nobodyさん02/09/07 18:40ID:???
>>721
作りたいゲームにもよるけど
Perl は君の求めるものに向いてないと思うよ。
JavaScript とかの方が良いんじゃない?
0723nobodyさん02/09/07 18:59ID:???
>>722
C言語薦めた方が…。
>>721
perlでゲーム作るのは空しいかも。
趣味の域は越えられますまい。
0724nobodyさん02/09/07 19:11ID:???
>722-723
まてまて、Flash+CGIという素晴らしいコンビネィションがあるだろうが
0725nobodyさん02/09/07 19:18ID:???
>>721
が何言語でCGIを作るのかが、大事だろうが。
0726nobodyさん02/09/07 20:02ID:6TBf75EA
データが入ってるファイルに一行で
ヤッタ?マン コーヒー ライター
という3つがスペースで区切られてあった時、
aa=ヤッタ?マン
bb=コーヒー
cc=ライター
というふうにするにはどうすればよいのでしょうか?
0727nobodyさん02/09/07 20:05ID:???
待てみんな。>>721-725
>>721 はわざわざこのスレを選んだんだ。
http://www.webgame.co.jp/
でも Perl のゲームはわりとあるし。
てゆうか検索してオレがびっくりしたよ。

しりとりゲームくらいならココで。
http://www.geocities.co.jp/SiliconValley-Oakland/1680/xperl/
0728nobodyさん02/09/07 20:08ID:???
>>726
($aa, $bb, $cc) = split / /,"ヤッタ?マン コーヒー ライター";
0729nobodyさん02/09/07 20:27ID:???
>>728
うわぁぁ?! thx!
0730CGIゲームつくりたい人02/09/07 20:58ID:BCsa1yWW
>>722-725 >>727
レスありがとうございます。
作りたいゲームは・・・罪と罰++やFFAみたいなゲームです
普通のPerlの本をきちんと読めば作れますか?
それともゲーム作成向けの本とかあるんですか?
0731nobodyさん02/09/07 21:07ID:???
>>730
つくったらiswebに置くの?
0732nobodyさん02/09/07 21:08ID:???
だ!か!ら!無理だっつーの。
だいたいゲーム作りたいならCやれ。
Perlは馬鹿でも使える言語だが、ゲームが作りやすい言語でない。
習得期間は
Perlは3カ月で
Cは1年
C++は3年だ。
Perlの本はオライリーの奴買っとけ。
0733nobodyさん02/09/07 21:13ID:???
修得はCよりもPerlの方が時間がかかるとおもうよ。
複雑さがCとは比べものにならないでしょ(^_^;)
0734nobodyさん02/09/07 21:17ID:???
>733
両方覚えたけどPerlの方が楽。
Cは基本的な部分を覚えるまでに挫ける人が出そう。
プログラムのいろはを知らない人間ならPerlからの方が断然楽だと思う。
サンプルソースが山のように転がってるし。

なにをもって習得とするかの問題だけど、出力をHTMLでできる分、
PerlでCGIスクリプト作った方が楽だと思うよ。
0735nobodyさん02/09/07 22:28ID:???
>>730
perlは「ゲームを作るための言語」ではないので
「ゲームの作り方の本」なるものはないと思われ。
応用すればゲームにもなるというだけの話
0736nobodyさん02/09/08 01:41ID:GXmEPtQH
for(@xx){〜}
と
foreach(@xx){〜}
の違いを教えてください
0737nobodyさん02/09/08 01:46ID:???
perl -MO=Deparse,-x7 -e 'for(qw/a b c/){ print }'
perl -MO=Deparse,-x7 -e 'foreach(qw/a b c/){ print }'

というわけで、for(@配列)の場合、ただのforeachと同等。
0738nobodyさん02/09/08 01:53ID:GXmEPtQH
サンクス
0739nobodyさん02/09/08 06:17ID:nOl8KoRo
結論

perlでゲームは作れるが、perlでゲームを作る本などない
perlで掲示板が作れるようになれば、まあゲームも作れるだろう
0740nobodyさん02/09/08 06:36ID:???
>>732
Perlでマインスイーパー作りましたが、何か?
0741nobodyさん02/09/08 06:47ID:gqIGmvuo
>>732
アクション系列のゲームならそうでしょうが、ウェブ上でのゲームならPerlベースで幾らでもありますよ。
表現はHTMLが精々ですけどね(w

で、質問です。
AnyDBMで1000人前後のデータ(名前、成績、等大小50パラメータぐらい)を管理しようと考えています。
それでファイルロックをどうしようか悩んでいるのですが、
sub LOCK {open (LOCK, "lockfile.lock");flock(LOCK,2);}
sub UNLOCK {flock(LOCK,8);close(LOCK);}
こんなのってありなんでしょうか?
それともやはりrename等で制御したほうが良いですか?
0742名無し二丁拳銃 ◆0s6WDHa6 02/09/08 11:30ID:HukZlCsp
最近Perlを始めて,今,カウンタを作っているところなんですが,
以下のソースだと,カウンタの値が永遠に1のままなんです。

#!/usr/local/bin/perl

#値を保存するファイル名
$file = "count.dat";

#−−処理開始−−

#ファイルを読み込み
open FH,$file;
$count= <FH>;

#カウントアップ処理

$count++;

#書き出し処理
print "Content-Type: text/html\n\n";
print "Total : <a href=cgi-bin/acces/replist.cgi>$count</a>";

#値を保存

open FH,>$file;
close FH;

exit;
0743nobodyさん02/09/08 11:37ID:???
>>742
ファイルに書き込んでないじゃん。
0744nobodyさん02/09/08 11:41ID:???
sendmailでメールを送りたいです。
html形式で送ろうと思うんですが、
ヘッダーの部分の
Content-Type: text/plain; charset=ISO-20220JP
ここのtext/plainを
text/html
に変えればいいだけですか?
ローカルだと実行できないので教えてください。
0745nobodyさん02/09/08 12:07ID:???
>>744
ローカルでテストするときはsendmailに渡すんじゃなく、ファイルに書き出してみればいいんじゃない。
0746nobodyさん02/09/08 12:14ID:Y8OpaJeI
はじめまして。
掲示板のプログラムを作成しています。
『投稿確認』をしたいのですが、そこでどうにもこうにも困ってるキングオブDQNなんです。

まず、htmlファイルからsubmitで送られたデータを表示することはできるのですが
そこから先、どうすればいいのか分かりません。
どうすれば
[投稿確認画面表示]⇒[logファイルへの書き込み]の二段構えにすることができるのでしょう?
0747nobodyさん02/09/08 12:21ID:???
>746
<input type="hidden" name="***" value="*********">
0748 02/09/08 12:24ID:???
>>746
hidden
074974602/09/08 12:31ID:Y8OpaJeI
>>747-748
ありがとうございます。さっそく作ってみます。
0750nobodyさん02/09/08 12:52ID:???
>>745
どもっす。
とりあえず、上手くいきました。
0751nobodyさん02/09/08 13:02ID:???
whileとかループをぬけるのはlastですが、ifをそっこーで抜ける方法はありますか?
075274602/09/08 13:16ID:Y8OpaJeI
うう、うまくいかなかった。やっぱりキングオブDQNだよ。w
確認画面でsubmitで送られた文字を表示して

<form action = "./data.cgi" mehtod = post>
<input type = "hidden" name = "confirm" value = "OK">
<input type= "submit" value = "投稿する">

で最初にsubmitで送られた文字を表示するのと同じCGIを呼び出して
if ($confirm eq 'OK' ) {
……
}
で分岐させたのだけれど、うまくいかない。
確認画面が表示されるだけです。しかも、nameとかemailとかのデータが全部消えてる。
0753nobodyさん02/09/08 13:16ID:???
>>751
アルゴリズムを再考しる。
075474702/09/08 13:21ID:???
>752
1から勉強しなおせ。

>751
gotoなどと言ってみるテスト。
0755nobodyさん02/09/08 13:23ID:???
>>752
確認画面を表示の時に一度送られてきたデータも
hiddenで書き出してる?
■ このスレッドは過去ログ倉庫に格納されています