【Perl】初心者コーナー Part15
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/08/08 23:19ID:???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あたりを見よう。
0730CGIゲームつくりたい人
02/09/07 20:58ID:BCsa1yWWレスありがとうございます。
作りたいゲームは・・・罪と罰++やFFAみたいなゲームです
普通のPerlの本をきちんと読めば作れますか?
それともゲーム作成向けの本とかあるんですか?
0732nobodyさん
02/09/07 21:08ID:???だいたいゲーム作りたいならCやれ。
Perlは馬鹿でも使える言語だが、ゲームが作りやすい言語でない。
習得期間は
Perlは3カ月で
Cは1年
C++は3年だ。
Perlの本はオライリーの奴買っとけ。
0733nobodyさん
02/09/07 21:13ID:???複雑さがCとは比べものにならないでしょ(^_^;)
0734nobodyさん
02/09/07 21:17ID:???両方覚えたけどPerlの方が楽。
Cは基本的な部分を覚えるまでに挫ける人が出そう。
プログラムのいろはを知らない人間ならPerlからの方が断然楽だと思う。
サンプルソースが山のように転がってるし。
なにをもって習得とするかの問題だけど、出力をHTMLでできる分、
PerlでCGIスクリプト作った方が楽だと思うよ。
0735nobodyさん
02/09/07 22:28ID:???perlは「ゲームを作るための言語」ではないので
「ゲームの作り方の本」なるものはないと思われ。
応用すればゲームにもなるというだけの話
0736nobodyさん
02/09/08 01:41ID:GXmEPtQHと
foreach(@xx){〜}
の違いを教えてください
0737nobodyさん
02/09/08 01:46ID:???perl -MO=Deparse,-x7 -e 'foreach(qw/a b c/){ print }'
というわけで、for(@配列)の場合、ただのforeachと同等。
0738nobodyさん
02/09/08 01:53ID:GXmEPtQH0739nobodyさん
02/09/08 06:17ID:nOl8KoRoperlでゲームは作れるが、perlでゲームを作る本などない
perlで掲示板が作れるようになれば、まあゲームも作れるだろう
0741nobodyさん
02/09/08 06:47ID:gqIGmvuoアクション系列のゲームならそうでしょうが、ウェブ上でのゲームなら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以下のソースだと,カウンタの値が永遠に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;
0744nobodyさん
02/09/08 11:41ID:???html形式で送ろうと思うんですが、
ヘッダーの部分の
Content-Type: text/plain; charset=ISO-20220JP
ここのtext/plainを
text/html
に変えればいいだけですか?
ローカルだと実行できないので教えてください。
0746nobodyさん
02/09/08 12:14ID:Y8OpaJeI掲示板のプログラムを作成しています。
『投稿確認』をしたいのですが、そこでどうにもこうにも困ってるキングオブDQNなんです。
まず、htmlファイルからsubmitで送られたデータを表示することはできるのですが
そこから先、どうすればいいのか分かりません。
どうすれば
[投稿確認画面表示]⇒[logファイルへの書き込み]の二段構えにすることができるのでしょう?
0747nobodyさん
02/09/08 12:21ID:???<input type="hidden" name="***" value="*********">
hidden
0749746
02/09/08 12:31ID:Y8OpaJeIありがとうございます。さっそく作ってみます。
0751nobodyさん
02/09/08 13:02ID:???0752746
02/09/08 13:16ID:Y8OpaJeI確認画面で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とかのデータが全部消えてる。
0754747
02/09/08 13:21ID:???1から勉強しなおせ。
>751
gotoなどと言ってみるテスト。
0757747
02/09/08 13:30ID:???nameなどのデータを入力
↓
入力されたデータを受け取る
確認画面表示
↓
入力されたデータを送っていない
データが空っぽ
0759746
02/09/08 14:01ID:???なには他に注意点はあるのでしょうか?
荒らしてゴメン。
0760nobodyさん
02/09/08 14:04ID:???ソースをtxtにしてアプれ。
多分一斉につっこんでくれる。
0762761?
02/09/08 14:11ID:???これだとhtmlファイルを見ると\nが効いて改行されているのですが
cgiファイルでは改行されていないので見にくいです。
ヒアドキュメントを使って print HTML <<HEADER ではだめでした。
どうしたらよいでしょうか?
open(HTML, ">hoge.html") || &error("ファイルが開けません");
print HTML "<HTML>\n<HEAD>ここにタイトルやスタイルシートなどをごちゃごちゃと</HEAD>\n<BODY>\n";
close(HTML);
0763762?
02/09/08 14:17ID:???0764746
02/09/08 14:25ID:???0765nobodyさん
02/09/08 14:29ID:???0766nobodyさん
02/09/08 14:29ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0767nobodyさん
02/09/08 14:45ID:971QY8yxどのように書いたらよいですか?
a.sh
#!/bin/sh
STR=testtxt
↑
(このSTRという変数をperlのスクリプト内で使いたい)
0768nobodyさん
02/09/08 14:52ID:???#!/bin/sh
export STR=mona
/usr/bin/perl test.pl
-- test.pl ----------------------------
#!/usr/bin/perl
print "STR = $ENV{STR}\n";
0769nobodyさん
02/09/08 16:11ID:QxRWekvCiモード用作成は初めてで、
しかもMacなので、どうやってテストすればいいか分かりません。
iモードツールみたいなもののMac版ってないですかね?
教えて下さい。
0770nobodyさん
02/09/08 16:27ID:???0771nobodyさん
02/09/08 16:30ID:fnlZSMGR0772nobodyさん
02/09/08 21:22ID:???どうやらGoogieは、「〜.cgi」で終わってるリンクは無視するけど、
「〜.cgi?***」となってるリンクは拾う模様。
***の部分はテキトーで構わないので、Googleに拾って欲しければ
そのCGIへリンクを張る時に、「<a href=〜.cgi?hoge>」とでもしておけばよし。
まぁ俺調べに過ぎないのでダメだったらすまそ。
つってもスレ違いぽいけど。
0773nobodyさん
02/09/08 21:42ID:???open(HTML, ">hoge.html") || &error("ファイルが開けません");
print HTML "<HTML>\n";
print HTML "<HEAD>ここにタイトルやスタイルシートなどをごちゃごちゃと</HEAD>\n";
print HTML "<BODY>\n";
close(HTML);
0774nobodyさん
02/09/08 22:08ID:wn4ctmfO0776nobodyさん
02/09/08 22:13ID:???漏れ串くらいしか無理。
A串は無理。
診断君でも見てな。
0777nobodyさん
02/09/08 22:13ID:???0778775
02/09/08 22:18ID:???0779741
02/09/08 22:19ID:gqIGmvuo0780nobodyさん
02/09/09 00:56ID:ocbC3C/Q0781nobodyさん
02/09/09 01:41ID:ewVE42mB初心者なのでよろしくお願い致します
CGIを単独で実行できるEXEにするようなツールはありませんか?
postやgetで受信した変数を判断し、ローカルでそれっきりで動くもの
そういうものはありませんか?
0782nobodyさん
02/09/09 01:47ID:???0783Rikuta
02/09/09 01:50ID:4uRhXRlu長くなったタイトルや、URL表記を途中まで取得し、
残りを「....」としたいのですが、正規表現ではどうするのでしょうか。
@subject = split(//,$subject);
@subject = splice @subject,0,40;
undef $subject;
foreach (@subject){
$subject = $subject.$_;
}
print $subject;
としたのですが、当然というか・・・日本語では化けてしまいます。
Jperlを使用しないでどうすればよいでしょうか。
0784nobodyさん
02/09/09 01:52ID:ewVE42mBありがとうございます
試して見ます
0785741
02/09/09 02:12ID:2XJWXXjE0786741
02/09/09 02:49ID:2XJWXXjE0788787
02/09/09 03:07ID:???0789nobodyさん
02/09/09 03:08ID:EyAemdpt$n = 40;
$subject = substr($subject,0,$n+1);
$tmp = chop($subject)."\0".$tmp while($subject);
$tmp =~ s/(?<=[\x81-\x9f\xe0-\xfc])\0(.)\0/$1\0\0/g;
$subject = substr($tmp,0,$n*2).'....';
$subject =~ tr/\0//d;
print $subject;
>>741
読み込みオープンのロックは1。それも他の書き込みに対するロックなので
読み込みには無力。
書き込みで開いてロックしときな。
0791nobodyさん
02/09/09 03:26ID:???エンコードして切ってデコードって言いたいんじゃないの?こんなふうに。
$n = 40;
$subject = substr($subject,0,$n+1);
$subject =~ s/([\W])/sprintf("%%%02X",unpack("C",$1))/ge;
$subject = substr($subject,0,$n);
$subject =~ s/(%[a-f\d]|%)$//i;
$subject =~ s/%([a-f\d]{2})/pack("H2",$1)/egi;
print $subject;
0792791
02/09/09 03:42ID:???0793nobodyさん
02/09/09 03:43ID:PULoisdM空行を削除するにはどうしたらいいんですか?
あたりまえだと思うけど
while(<STDIN>){
s/^$//;
}
としても駄目なんです。。
0794nobodyさん
02/09/09 04:47ID:???@line = <IN>;
$n = @line;
for($i=0; $i<$n; $i++){
if($line[$i] eq "\n"){
$line[$i] = '';
}
}
かな…?
0795名無しさん@Meadow
02/09/09 05:44ID:???print unless /^$/;
で逝けますYO
0796T女の竹田
02/09/09 07:59ID:???Shift-JIS
$subject = ($subject =~ /([\x0-\x7e\xa0-\xdf]|[\x81-\xbf\xe0-\xfc][\x40-\xfc]){40}/s) ? $& : $subject;
EUC-JP
$subject = ($subject =~ /([\x0-\x7e]|[\x8E\xA1-\xFE][\xA1-\xFE]){40}/s) ? $& : $subject;
これでどうかな?
0797nobodyさん
02/09/09 09:52ID:OPX6Zz9+パスワードが違ったらはじくのを作りたいんですが正しく動作しません
どこをどう直せばいいでしょうか?
if ($pass != xxxx){
print "aho";
exit;
}
0799nobodyさん
02/09/09 10:16ID:OPX6Zz9+パスワードが違ったらahoと表示させたいんですよ
eqだと合ってたらahoですよね?
そこまでわかってて何故neにたどりつけないのか謎
ちなみにパスワードは暗号化したほうが良いよ
0801nobodyさん
02/09/09 10:41ID:OPX6Zz9+neでやっても500Internal...がでてきちゃうんですよ
0802nobodyさん
02/09/09 10:54ID:OPX6Zz9+passが違う場合にif内を実行したらcgiを終了させるものを作りたいんですよ
(passが合ってるならifより後を実行)
0803 ◆TpctYDQ6
02/09/09 10:56ID:YALFpbWAprint "aho";
exit;
}
で、エラーなら問題は別のところでしょ。
0804nobodyさん
02/09/09 11:04ID:OPX6Zz9+print "Content-type: text/html; charset=EUC-JP\n";
を加えたら正しく動きました。スマンコ
首釣って逝ってきます。
0806nobodyさん
02/09/10 01:33ID:???その方法でいけました。
ただ、
while(<STDIN>){
s/hoge/hage/;
s/omeko/sasete/;
print;
}
みたいな置換と一緒に空行を削除したい
場合はどうすればいいの?
ifをネストすればいけると思うんだけど
書けないので教えてください。
0807適当さん
02/09/10 06:52ID:???while(<STDIN>){
if($_ ne"\n"){
s/hoge/hage/;
s/omeko/sasete/;
print;
}
}
0808nobodyさん
02/09/10 12:40ID:???今日が、その年その月の第何週何日目か?
を求める方法を教えて下さい。
例えば今日の場合、第2週の3日目なので
出力結果を23と得たいです。
お願いします。
0809名無しさん@Meadow
02/09/10 12:47ID:???while(<STDIN>){
next if /^$/;
s/omae/bakaka/;
s/omae/ahoka/;
print;
}
でもええよ。
0810nobodyさん
02/09/10 12:59ID:???($sec , $min , $hour , $mday , $mon , $year , $week) = localhost(time);
print (int($mday/7)+1)*10 + $week ;
0811nobodyさん
02/09/10 12:59ID:???∧‖∧
0812nobodyさん
02/09/10 13:02ID:???それだと2-6日は必ず第1週になるよ…
0813nobodyさん
02/09/10 13:29ID:???0814∧‖∧
02/09/10 13:46ID:???仕様書の意味取り違えてました。
($sec , $min , $hour , $mday , $mon , $year , $week) = localtime(time);
print (int(($mday+8-$week)/7))*10 + $week;
かな?
0815T女の竹田
02/09/10 19:32ID:???>>808を読むと日曜が始まりみたいだけど、それなら
($sec , $min , $hour , $mday , $mon , $year , $wday) = localtime(time);
として、
第何週かは
int(($mday + 12 - $wday) / 7)
何日目かは
$wday + 1
だと思う。たぶん…
0816nobodyさん
02/09/10 20:37ID:???>>815
ランダムに日付を変えて何度かテストしてみても
期待通りの結果が得られて大丈夫でした。
ちなみに、利用するのは
いつも巡回する複数サイトの一部記事を
引っこ抜いて表示させるものです。
新しく追加するサイトのファイル名が
今回質問させていただいたフォーマットでした。
ありがとうございました。
0817nobodyさん
02/09/10 21:40ID:ApnEpI8Hリャマ本第2版、P172の問題2が分かりません。
題意は、Unixのmvコマンドと同じ働きをするプログラムを書け、
という内容で、ヒントとして、第2引数がディレクトリの場合も考慮せよと。
で、漏れの解答はこんな感じです。変数の名前、正規表現の
区切り文字は末尾の解答例に合わせてます。
($old, $new) = @ARGV;
if (-d $new){
$basename = $old;
$basename =~ s#^/.*/##g;
$new = $new . "/$basename";
}
rename($old, $new) or
die "Cannot rename $old to $new: $!";
一応は思った通りの動きをします。メデタシ。
ところが、解答例は、4行目が以下のようになってる。
($basename = $old) =~ s#.*/##s;
勿論、こちらも思った通りの動作をしますです。
かっこは、漏れの解答での3行目と4行目を合体させてだけなので
無視するとして、よく分からないのは、右辺です。
1) s/ は置換だけど、後の/sは一体何?
2) .*/ だと、頭の/が残るような気がするんだけど。。。
なんでだろう。。。?
0818nobodyさん
02/09/10 21:44ID:Lqs0IC/U0819817
02/09/10 21:45ID:ApnEpI8Hルートディレクトリの「/」も 「.*/」で、「.」にマッチするやん!
ってゆーか、これだと、
# test.pl aaa ~/bbb
の場合、エラーになるよね?
ニョロがマッチしないから。。。
で、1)の方は、おながいします。
0820nobodyさん
02/09/10 21:45ID:???1)については
ttp://namazu.org/~tsuchiya/perl/info/perl-ja_44.html#SEC44
0821817
02/09/10 21:59ID:ApnEpI8Hははぁ、なるほど!
文字列を単一行として扱う、ということですね。
だけど、この問題の場合、こんなオプションが必要なのでしょうか?
勘違いしているかもしれないけど、漏れの理解では、深いディレクトリ
を処理すると、引数が複数行になってしまうことがあるかもしれないので
sをつける、と思ってるのですが、この考えによると、普通mvするとき
引数に改行なんか入れないですよね?
そもそも、んな深いディレクトリを掘ることってあまりないので、
今まで思いもよらなかったし、そもそもmvコマンドで引数に改行
入れてもいいのかどうかも分からん。。。
0822nobodyさん
02/09/10 22:32ID:???0823nobody
02/09/11 02:17ID:Zh9eBVFzcrypt関数の使い方で聞きたいことがあります。
(例)
print "文字列を暗号化します。適当に文字をいれて下さい\n";
$get = <STDIN>
$key ="sp";
$pass = crypt($get,$key);
print "暗号化された文字列は$passです\n";
この$keyの部分は任意の二文字を入れるんだけど
それってどういう意味があるんでしょうか?
これによって暗号化される結果などが違ってくるのでしょうか??。
特に意識することではないんでしょうか?
0827nobodyさん
02/09/11 03:13ID:???0828nobodyさん
02/09/11 12:43ID:???どうかおしえてつかーさい。
0829nobodyさん
02/09/11 12:58ID:???「LWP」で検索。
0830nobodyさん
02/09/11 13:13ID:l0g0P0Oz7枚くらい読みこまなきゃいけないんですけど長ったらしくて。
■ このスレッドは過去ログ倉庫に格納されています