Perl コーディング初心者質問コーナー Part27
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/08/14 06:06ID:xOc/6R60【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
関連スレ
【Perl上級者コーナーPart01】
http://pc2.2ch.net/test/read.cgi/php/1024741312/
CGI: Common Gateway Interface part 11
http://pc2.2ch.net/test/read.cgi/php/1055597189/
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
過去ログやお勧めサイトは >>2-10
002016
03/08/14 12:43ID:H+TQovVpレスありがとうございます。
早速ファイル名を aya.cgi love にしてFFFTPを使ってトクトクに送り、
あなたのアクセスしたファイルは、
アクセスする権限が与えられていないか、
もしくはindex.html 又は index.htmが存在しません。
と表示されました。
お手数ですが、他に方法は無いでしょうか。よろしくお願いします。
補足
*拡張子 .pl だとこのCGIのダウンロードが始まり、駄目っぽいので、元通り拡張子.cgiで試してみました。
*#! /usr/local/bin/perl と書きましたが、これは本の中にこう書いてあるだけで、実際には #!/usr/bin/perl
であり、Tok2.comに送ってやっとります。 説明不足スイマセン。
0021nobodyさん
03/08/14 12:45ID:???s/(\W)/'%' . unpack('H2', $1)/eg;
半角スペースは当然 %20 に変換される
0026nobodyさん
03/08/14 15:14ID:???# CGIヘッダの出力
print "Content-type: text/html\n\n";
while($HP1 > 0) and ($HP2 > 0){
srand1;
srand2;
}
# Player1
$HP1 = 400 - $kougeki1;
$KIK1 = 60;
$PAN1 = 20;
$DF1 = 10;
# Player2
$HP2 = 300 - $kougeki2;
$KIK2 = 100;
$PAN2 = 40;
$DF2 = 0;
# Player1
$kougeki1 = srand;
# Player2
$kougeki2 = srand2;
0027nobodyさん
03/08/14 15:14ID:???if($mode == 1){
$offense = \%you;
$defense = \%my;
}elsif($mode == 2){
$offense = \%my;
$defense = \%you;
}
if( int(rand(2)) ){
#punch
$damage =
$offense->{'$PAN1'} - $defense->{'$DF2'};
if(!$rand = int(rand(5))){
#half
$damage = int($damage / 999);
}elsif($rand < 3){
#miss
$damage = "";
}
}else{
#kick
$damage =
$offense->{'$KIK1'} - $defense->{'$DF2'};
}
0028nobodyさん
03/08/14 15:14ID:???if($mode == 1){
$offense = \%you;
$defense = \%my;
}elsif($mode == 2){
$offense = \%my;
$defense = \%you;
}
if( int(rand(2)) ){
#punch
$damage =
$offense->{'$PAN2'} - $defense->{'$DF1'};
if(!$rand = int(rand(5))){
#half
$damage = int($damage / 999);
}elsif($rand < 3){
#miss
$damage = "";
}
}else{
#kick
$damage =
$offense->{'$KIK2'} - $defense->{'$DF1'};
}
($damage < 0) and ($damage = 0);
$defense->{'HP1'} -= $damage;
($damage < 0) and ($damage = 0);
$defense->{'HP2'} -= $damage;
0029nobodyさん
03/08/14 15:15ID:???print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n";
print "<html>\n";
print "<head><title>対戦バトル</title></head>\n";
print "<body>
<p>Player1:体力は$HP1です</p>
<p>Player2:体力は$HP2です</p>
<p>Player1は<big>$kougeki1</big>のダメージを与えた。</p>
<p>Player1は<big>$kougeki1</big>のダメージを受けて混乱した。
<p>Player1は<big>$kougeki1</big>のダメージで友達のトイレではみ出したクソをし始めた。
<p>Player2は<big>>$kougeki2</big>のダメージを与えた。</p>
<p>Player2は<big>>$kougeki2</big>のダメージを受けて裸踊りを始めた。
<p>Player2は<big>>$kougeki2</big>のダメージで友達の女にレイプし始めた。</p></p></body>\n";
print "</html>";
0030あぼーん
NGNG0031あぼーん
NGNG0032nobodyさん
03/08/14 19:26ID:OJ2itBeZこのように、socketで作ったSOCKハンドルのポインタ操作はでき
ないのでしょうか。
どこで操作しても、ポインタは「-1」となっております。
理解不足で申し訳ありませんが、宜しくお願いいたします。
0035nobodyさん
03/08/14 23:19ID:???操作をすることはできません。
Perlをやってる奴はおまえさんみたいなオタクが多い。
オタクはきもいから、気づかないんでしょうね。
0036nobodyさん
03/08/15 00:16ID:???perl = cgi ではない。
お前さんがまずしなければならんのは、自分のパソコンにperlをインストールして
コマンドラインさっきのコマンドが実行するかを確認することやね。
この文章読んでわからんようであれば、あらしと取られかねんからそのつもりで。
#あと、perlをどうやってインストールしたらいいですかなんてことは聞くなよ(w
0037nobodyさん
03/08/15 01:51ID:???0038nobodyさん
03/08/15 02:22ID:???s./// と tr///
の違いがいまいちわからないのですが、どういう違いがあるのでしょうか・・・
0039nobodyさん
03/08/15 02:25ID:???my ($name, $selected) = @_;
my ($key, $form);
$form .= '<select name="' . $name . '">' . "\n";
foreach $key (sort keys %{$name}) {
if($key eq $selected){
$form .= '<OPTION value="' . $key . '" selected>' . ${$name}{$key} . '</OPTION>' . "\n";
}
else{
$form .= '<OPTION value="' . $key . '">' . ${$name}{$key} . '</OPTION>' . "\n";
}
}
$form .= '</select>' . "\n";
return $form;
}
このようなselectボックスを生成するサブルーチンを作ったのですが、
sort keys %{$name}
のところで「〜HASH ref while "strict refs"〜」と怒られてしまいます。
no strict;は使いたくないので、何かよい解決策があれば教えてください。
すみませんが宜しくお願いいたします。
0040nobodyさん
03/08/15 06:11ID:???たとえば $_='ABCDECBA' あたりで
s/ABC/123/
と
tr/ABC/123/
を試してみれば分かります。
0041nobodyさん
03/08/15 09:33ID:???配列に格納されているすべての文字列の先頭にある文字列を連結させたいんですが
下記のコードではうまくいきませんでした。
実際は頭に付ける文字列を変えて何回もこの処理を繰り返すのですが、
(サブルーチンにして、↓の例の$push_wordは引数として受け取る)
二回目からは、前回頭に付けた文字列と$push_wordを頭につけてしまいます。
簡単な応用技術ですがご教授願えたら幸いです。
【理想】
@bar = ("gg","dge","mpire","ncode","nglish")
を
@bar = ("Egg","Edge","Empire","Encode","English")
とするような処理(配列名barに意味はなし)
【こうしてみた】
(@barを定義した後、)
my $push_word = "E";
foreach (@bar){
my $a = $push_word;
$a .= $_;
$_ = $a;
}
print "@bar";
0042nobodyさん
03/08/15 10:09ID:???if (connect (SOCK,sockaddr_in($target_port, $addr))) {
®ist;
}else{
&error();
}
みたいにしたのですが、テスト運用してみると
途中でスクリプトごと落ちることがあり悩んでいます。
どのようにしたら、安全な処理ができますでしょうか?
0043nobodyさん
03/08/15 10:10ID:???エスケープしてませんでした。
&regist; と書いたつもりです。
0044nobodyさん
03/08/15 10:10ID:???0045nobodyさん
03/08/15 10:20ID:???my @bar = ("gg","dge","mpire","ncode","nglish");
my $push_word = "E";
print map $push_word.$_, @bar;
漏れも勉強中なので自信ありませんが
こんな感じでどうでしょうか?
結果はEggEdgeEmpireEncodeEnglish
0046nobodyさん
03/08/15 11:32ID:???引数がちょっと無茶じゃない?普通に考えて、
・selectの名前
・selectedにしたいもの
の他に、
・option要素のハッシュ
が必要でしょ。
例えば
<select name="chara">
<OPTION value="giko" selected>ギコ</OPTION>
<OPTION value="mona">モナー</OPTION>
</select>
を作るとして、その関数だと get_select_form("chara", "giko")を
呼ぶときに、グローバルの %chara にOPTIONの要素を入れておく
ってことになるけど、それって変じゃない?
引数リストを $name, $selected, $ref_values (順不同)みたいにすれば
いいと思うよ。
0047nobodyさん
03/08/15 11:57ID:???すばやい回答thx。
print map 〜ってのってどういう意味?map関数ってとほほに載ってないんだけど…
あと、注文多くて悪いんだけど、Eを追加した後の@barが欲しいんだ。例で書いた最後の@barはおまけみたいなもん。ごめんな
0049nobodyさん
03/08/15 12:53ID:???ソフト(シンボリック)リファレンスをやめて、リファレンスを使う。
>>41
foreach使うなら
foreach(@bar){
$_ = $push_word. $_;
}
mapは、リストを受けて、処理を行って、リストで返すパイプみたいなもの。
perldoc -f map
# >>48 '=' 抜けたね。
>>42
エラーかシグナルか、落ちる原因をはっきりさせてから対策を立てる。
0051nobodyさん
03/08/15 16:53ID:???bbs.cgi 再開発プロジェクト
http://qb.2ch.net/test/read.cgi/operate/1053067870/508 ぐらいから参照(w
0052nobodyさん
03/08/15 19:07ID:???3行目に
open (IO,"+<$logfile");
7行目に
while (<IO>){
if ($_ =~ /<>$ip/){
@y2=split(/<>/,$_);
if ($y2[6] ne $ip){
push(@log,$_);
}else{
$y2[0] = 'All Clear (^-^)v'; #消去後の名前
$y2[5] = 'All Clear (^-^)v'; #消去後のメッセージ
push(@log,"$y2[0]<>$y2[1]<>$y2[2]<>$y2[3]<>$y2[4]<>$y2[5]<>$y2[6]<>$y2[7]<>\n");
}
}else{
push(@log,$_);
}
}
11行目に
truncate(IO,0);
seek(IO,0,0);
print IO @log;
close (IO);
&reload2;
}
を入れると直ります。
0053あぼーん
NGNG0054あぼーん
NGNG0055あぼーん
NGNG0056あぼーん
NGNG0057あぼーん
NGNG0058あぼーん
NGNG0059あぼーん
NGNG0060あぼーん
NGNG0061nobodyさん
03/08/15 21:25ID:ifID8mtmあと、できればサブルーチンがそのままDLLの関数になるようにしたいのですが。
どういう風にすればよいのでしょうか。
環境はWinMEでActivePerlです。
0063山崎 渉
03/08/15 22:25ID:???│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
0065nobodyさん
03/08/16 04:33ID:???初めてこのスレ来ました
レベル低すぎ
じゃあサヨウナラ
0066nobodyさん
03/08/16 04:40ID:???5 => 5,
10 => 10,
15 => 15,
30 => 30,
50 => 50
);
このようなデータを
foreach my $key (sort keys %hash) {
print $key;
}
このようにsortすると、
10
15
30
5
50
となりますよね。
この5が一番上にいくような効率のいい方法はないもの
でしょうか。
0069nobodyさん
03/08/16 05:02ID:???sort {$a<=$b>=$KIK} keys %doragonash
の方がうまくいきますね。それよりもあなたの知性の低さは迷惑です。
早く首吊って死んでくれることを祈ってます。
0071あぼーん
NGNG0073あぼーん
NGNG0074あぼーん
NGNG0075あぼーん
NGNG0076nobodyさん
03/08/16 05:07ID:???本当、ここはくさった人間しかいませんね。とっとと死んでください!!
0077nobodyさん
03/08/16 05:08ID:???かちゅ使用者には迷惑だって言っているだろうが。
0078あぼーん
NGNG0079nobodyさん
03/08/16 05:18ID:???返事が遅れてしまい、すみません。
ハッシュのリファレンスを使うことにより、無事解決
いたしました。
本当に有難うございました。
0080あぼーん
NGNG0081あぼーん
NGNG0082あぼーん
NGNG0084nobodyさん
03/08/16 08:41ID:mdqCqsMrどのような方法が考えられるでしょう?
0085あぼーん
NGNG0086nobodyさん
03/08/16 10:24ID:22Mj43o0お答え、ありがとうございます。
できるとは最初から思ってはいませんでしたが。
C言語とかでDLL書くのめんどくさいのでperlでかけたらなぁって。
とりあえずまずはperlcc使えるように環境を整えようかと思っております。
なぜか僕の環境、Cプログラムは吐き出すんですがコンパイルしてくれなくて。
しかもそのプログラムをコンパイルしてみるがエラー続出。
どうなんだ、LarryWallよw
仕方がなく自分でエラー部分を書き直してるのですが。
なんとかまともなCプログラム、吐き出させられないですかね。
ちなみに環境はWinMeでActivePerl、CコンパイラはDev-C++(GCC系)とBCCです。
解決方法がありましたら、教えてください。
0087nobodyさん
03/08/16 10:32ID:???0089nobodyさん
03/08/16 11:18ID:mv+dlsfN検索部分を改良したい。
英語の半角、全角をともに検索するには
どうしたらいいのでしょうか?
0090nobodyさん
03/08/16 11:22ID:???【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
0091助けてください
03/08/16 12:07ID:???http://server/program.cgi/hogeというのを、http://server/hogeで見れるようにしたい
2: それでこんな風にやってみたが・・・
.htaccessに「ErrorDocument 404 /program.cgi」と追加。
3: こんなエラーが出て上手く行かなかった。
エラーは出ないけど、404エラーなので、エラーログがたまっていく・・・
どなたか助けてくださいm(__)m
009291
03/08/16 12:08ID:???だと、ヘッダに404となってしまうので、
ファイル名をnph-program.cgiにして、「print 'HTTP/1.0 200 OK'."\r\n";」とヘッダに追加。
でも、エラーログが(ry
0094nobodyさん
03/08/16 12:32ID:R1l09wg/DirectoryIndex DirectoryIndex nph-program.cgi
と記載してあります。
やっぱプログラム側の問題じゃないからここじゃ駄目ですね。。。
0095nobodyさん
03/08/16 12:37ID:???残り少ない夏休みを2chでコピペ荒らしするだけに費やす気みたいだけど、
入門本くらい一通り読んで初心者レベルに到達してから来てね。
0096nobodyさん
03/08/16 12:44ID:???perlをCにトランスは完全に出来ませんし
できたとしても使い物にはなりません(実行ファイルは馬鹿でかい)
あきらめたほうがいい
XSをつかうかswigをつかうか
perlのソースコードを書き換えるかしてください
Win32系のモジュールで直接DLL関数に引数はわたせます
0097nobodyさん
03/08/16 12:52ID:???コメント扱いで出力。htmlなら<!-- -->内に埋め込む。batならremの後ろに書く。
自分でファイルをオープンして書き込み保存。
syslogに飛ばす。
変数デーモンを作成して、そこへの接続を全て記録。
>>91
そう言う用途にはapacheのモジュールのmod_writeを使うと便利。
が、確実にスレ違いなのでそれ以上言わない。
0098nobodyさん
03/08/16 12:54ID:???mod_rewriteね。
009991
03/08/16 13:05ID:R1l09wg/Apacheの板orスレってあったっけ?(−−
010191
03/08/16 13:49ID:R1l09wg/おお。..._〆(゚▽゚*)メモメモ
ありがとうございました
それではいってきます(w
010291
03/08/16 15:16ID:R1l09wg/こんなエラーから進めない(;;
010391
03/08/16 15:39ID:R1l09wg/mod_rewriteが入っていない可能性が出てきたので他の方法ってありませんか?
010584
03/08/16 15:54ID:mdqCqsMr>コメント扱いで出力。htmlなら<!-- -->内に埋め込む。batならremの後ろに書く。
……コロンブスの卵(^^; そーか、SQL実行しないでこーすればいいのか(汗)
アドバイスありがとうございました。
あと、「syslogに飛ばす」っつーのは、具体的にどうすればいいのでしょうか?
厨で申し訳ありませんが、ヒントなど頂ければ幸いです。よろしくお願いします。
0106nobodyさん
03/08/16 16:25ID:???qx{/usr/bin/logger -s "Virus warning: uploader:[$host]:Detected $1 and deleted."};
みたいな。
0109nobodyさん
03/08/16 17:41ID:???0110あぼーん
NGNG0111あぼーん
NGNG0112あぼーん
NGNG0113あぼーん
NGNG0114あぼーん
NGNG0115nobodyさん
03/08/16 18:09ID:???0116nobodyさん
03/08/16 18:41ID:???011784
03/08/16 18:57ID:mdqCqsMrそれはさておき、「Can't locate Date/Manip.pm in @INC〜」なんてエラーが出てきました。
CPANで「Install1 Date」はしたのですが、他になにかしなければならないことがあるのでしょうか?
重ね重ねで申し訳ありませんが、よろしくお願いします。
0118nobodyさん
03/08/16 21:02ID:???一々作らんでも @INC に入ってない? UNIX系OS以外は知らんけど。
作るなら h2ph で。
見つからんって言われてるんだから、入れればいいじゃん。:-)
http://search.cpan.org/author/SBECK/DateManip-5.42a/
0119nobodyさん
03/08/16 21:19ID:???十進数の数字があり、それを出力する時16進数にしたいのですが、
どのように変換すれば良いのでしょうか?
すみません、かなり初歩的な質問ですがお願いします。
■ このスレッドは過去ログ倉庫に格納されています