Perl コーディング初心者質問コーナー Part34
■ このスレッドは過去ログ倉庫に格納されています
0001前スレの連投で気分崩したので後よろ
04/04/05 16:01ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0655643
04/05/09 18:19ID:???盛り上がっているところすいません
open(IN,"/なんとか/test.cgi hoge|");
として受け取るtest.cgiに@ARGVを使うということでしょうか?
test.cgiに手を加えないで出来る方法があったらその方がよいのですが無理ですか?
0656nobodyさん
04/05/10 00:13ID:???0657nobodyさん
04/05/10 12:53ID:???AUだけ
掲示板に書き込んだ→書き込み完了画面表示→戻るリンク(その掲示板のトップへ行く)
この最後の戻るリンクをクリックすると、また書き込みしちゃうんだけど、どうすれば対処できるんでしょうか?
imode、vodafoneはちゃんと掲示板のトップに戻ってくれるんですが orz
0658nobodyさん
04/05/10 13:05ID:???>>1
http://www.au.kddi.com/ezfactory/
0660nobodyさん
04/05/10 14:41ID:???0661nobodyさん
04/05/10 14:48ID:9bXUHl3jというプログラムを書いています。
少々疑問に思ったのですが、ソケットでHTMLを獲得するのと
ウェブブラウザでHTMLを獲得するのとでは何が違うのでしょう?
処理するのがユーザ側かサーバ側か、の違いと見て良いんでしょうか。
0662nobodyさん
04/05/10 15:08ID:???ブラウザも同じソケット通信してるから、同じこと。
そのようにサーバ側でソケット使おうとユーザ側で使おうと
どちらもHTTPクライアントリクエストをwwwサーバに対しておこなっている
0663nobodyさん
04/05/10 15:17ID:???PHPなら$foo = "val";のとき$$fooで$valにアクセス出来ますが,Perlはちょっと違いますか?
$val = "hoge";
$prm = "val";
print $$prm; #「print $val;」と同じ結果
$val = "hoge";
$HASH{'prm'} = "val";
print $$HASH{'prm'}; #ダメ
0664nobodyさん
04/05/10 15:25ID:???0665nobodyさん
04/05/10 15:28ID:???use strict;
my $val = "hogehoge";
my $prm = "val";
print $$prm; #だめ
print ${$prm}; #これもだめ
0666nobodyさん
04/05/10 15:34ID:???他のアプローチを考えたほうが早いと思うが…
0667nobodyさん
04/05/10 15:36ID:???0668nobodyさん
04/05/10 15:41ID:???my $prm= 'val';
my $$prm= 'hoge';
print $$prm;
or
#use strict;
0669nobodyさん
04/05/10 15:50ID:???0671nobodyさん
04/05/10 16:04ID:???my $$prm= 'hoge';
なんてのは無理ってもんだろう。
0672nobodyさん
04/05/10 16:18ID:???どうすればいいのでしょうか。
以下のようでは空っぽのままです。
--
$test = &hairetu;
print $test[0][0];
print $test[1][1];
sub hairetu {
$box[0][0] = 0;
$box[0][1] = 0;
$box[1][0] = 0;
$box[0][2] = 0;
return $box;
}
0673nobodyさん
04/05/10 16:19ID:???×$box[0][2] = 0;
○$box[1][1] = 0;
0674nobodyさん
04/05/10 16:40ID:???print $$test[0][0];
print $$test[1][1];
sub hairetu {
$box[0][0] = 0;
$box[0][1] = 0;
$box[1][0] = 0;
$box[1][1] = 0;
return \@box;
}
0675nobodyさん
04/05/10 16:46ID:???$test = &hairetu;
print $test->[0][0];
print $test->[1][1];
sub hairetu {
$box->[0][0] = 0;
$box->[0][1] = 0;
$box->[1][0] = 0;
$box->[0][2] = 0;
return $box;
}
0677674
04/05/10 16:59ID:???0678661
04/05/10 17:04ID:9bXUHl3jするとソケットを使用したHTML取得CGIをAと言うサーバに置いた場合
ブラウザからCGIを呼び出すと
ブラウザ→CGI→HTML (→はリクエスト)
となるのではなく
ブラウザ→HTML
となるのでしょうか?
CGIを置いたサーバに負荷が掛かりそうでちょっと尻込みしているのですが
サーバ側に負荷は行かない、のかな?
0679nobodyさん
04/05/10 17:07ID:???でもそんなこと言ってたらCGIは何一つ動かせない。
それ以前に、ソケットの使えないところも多いけどね。
0681nobodyさん
04/05/10 19:02ID:???戻るリンクの代わりに戻るフォームもしくはlocationで飛ばす。
でいいような気がするけど確信はない。
いい加減な情報でスマソ。
0682nobodyさん
04/05/10 19:05ID:???0683nobodyさん
04/05/10 19:13ID:???0684すまん
04/05/10 19:14ID:DDeHe7Rs調べるにはどうしたらいいの?
0685nobodyさん
04/05/10 19:54ID:???0686nobodyさん
04/05/10 21:18ID:???http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlref.html
>>684
http://www.din.or.jp/~ohzaki/perl.htm#Character
0687nobodyさん
04/05/11 00:27ID:???詳しく載ってる本やサイトってないでようか?
0688nobodyさん
04/05/11 00:53ID:???ラクダ本とか perlref じゃ駄目?
0689nobodyさん
04/05/11 01:07ID:???ブラウザで個人的に見るのは著作権的に合法。
ソケットでCGIで取得して不特定多数に閲覧可能な状態にしてしまうのは著作権的に違法。
0691nobodyさん
04/05/11 07:45ID:???「恥知らず」という言葉を思い出したよ。
>「でも、本当に簡単なミスでも、指摘されるまで気付かないことだってありますよ。 」
簡単なミスに、指摘されるまで気付かない事自体
恥ずかしい事と思わなかったのか?
そういう台詞を言う事自体「甘え」だと思わなかったのか?
ちゃんとした大人なら、そんな甘えた台詞は恥ずかしくて言えないものだが。
こういうやつが設計をやると、三びし自みたいな日さんな事故がおきるんだろうな。
0692nobodyさん
04/05/11 08:26ID:???0693nobodyさん
04/05/11 10:07ID:???文章に自信が無いから飾ってるだけ。
0694nobodyさん
04/05/11 10:37ID:???他人様のスクリプトを見てみたところ
ロックしている方もいますし、ロックしていない方も居ます。
0695nobodyさん
04/05/11 10:47ID:???書き込んでいる真っ最中のデータを読み込んだり、
読み込んでる最中に書き込み始めたりしてもいいのなら
読込時に排他処理は不要。
「共有ロック」なんてのも調べてみると吉。
0696nobodyさん
04/05/11 12:08ID:yHiP+CICやっぱり書き込んでいる真っ最中のデータを読み込んだり、
読み込んでる最中に書き込み始めたりしちゃうわけですね。
システム側でなんとかしてくれるのかと思ってました。
共有ロック、取り入れてみたいと思います
ありがとうございました
0697nobodyさん
04/05/11 13:57ID:xHapOBBnサーバーがLocationヘッダで指定されたファイルを返すのか、
どちらでしょう? どちらでもなければ、それを教えてください。
0699nobodyさん
04/05/11 14:25ID:???サーバをテストに使ったらファイルが消えた時に責任取れないんで
ローカルでテストしたいんですがどうすれば・・・
0700nobodyさん
04/05/11 14:51ID:???0701nobodyさん
04/05/11 14:55ID:???そしたらinstall_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC ...
とエラーがでました。
恐らくモジュールが入ってないのかと思いますが
どうすればインストールできるでしょうか。
一応、Msql-Mysql-modules-1.2219と言うのをDLしてきましたが
root権限など持っていないので説明にある方法ではインストールできません。
cgiとおなじフォルダにmysql.pmを置いてやれば動くような気もしますが
取り敢えず/mysql/libの中身をまるごと置いてやっただけでは動きませんでした。
0702699
04/05/11 15:42ID:???0703nobodyさん
04/05/11 15:49ID:???winのローカル環境で動かしたいなら
http://x-web.pobox.ne.jp/fcgi/fcgi_01.html
が分かりやすいと思います
0705699
04/05/11 17:35ID:???とりあえず上のリンク先には行ってきましたが・・・
0706nobodyさん
04/05/11 17:40ID:???この人のところに文法チェッカーが配布されとる
0707nobodyさん
04/05/11 18:02ID:???という文字に変換したいのですが、
$line =~ s/<!--user-->/<a href="$usaddress">/g;
では変換されません。
どこが間違っているのでしょうか?
0711nobodyさん
04/05/11 18:31ID:???これは普通には変換されているというと思うのだが。
% cat user.pl
$usaddress = "foo";
$line = "<!--user-->";
$line =~ s/<!--user-->/<a href="$usaddress">/g;
print $line, "\n";
% perl user.pl
<a href="foo">
0712712
04/05/11 19:08ID:j+/3ilVKの掲示板なのですが、専用アイコン以外の普通のアイコンが表示されません。
中身は↓のようになってます。どうしたらいいのか、教えてください。お願いします。
http://sumiro2.hp.infoseek.co.jp/afraid/bbs.txt
0714712
04/05/11 19:20ID:???すいません・・・
0715nobodyさん
04/05/11 19:36ID:???スレ違いだが、たらい回しにされて可哀想なので一言・・。
http://sumiro2.hp.infoseek.co.jp/afraid/bbsimg/ここにアイコンを格納。
>$imgurl = "./img/";
を
>$imgurl = "http://sumiro2.hp.infoseek.co.jp/afraid/bbsimg/";
に変更。
0716nobodyさん
04/05/11 20:04ID:???0718nobodyさん
04/05/11 21:28ID:M72HBXcrhttp://pc5.2ch.net/test/read.cgi/php/1010583350/68
0719718
04/05/11 21:40ID:M72HBXcr特にエラーは出ていません。
しかし、Windows2000 + Apache2 + perl5.6.1では
鯖エラー500が出てしまいます。
どの辺がまずいのでしょうか?
0720nobodyさん
04/05/11 21:43ID:???0721718
04/05/11 21:48ID:M72HBXcrperl stove.pl
としたら、htmlのソースが表示されました。
これはサーバの問題でしょうか?
それとも、ソースに不備があってもコマンドプロンプトでは表示されるんでしょうか?
0722nobodyさん
04/05/11 21:50ID:???0723718
04/05/11 21:52ID:M72HBXcrhttp://pc5.2ch.net/test/read.cgi/php/1010583350/68-69
に分けて貼ってあるソースです。
0724nobodyさん
04/05/11 21:58ID:???http://www.rfs.jp/sitebuilder/perl/03/02.html
0725nobodyさん
04/05/11 22:04ID:???答える気にならん。
0726718
04/05/11 22:17ID:lgCnMYEoアドバイスありがとうございます。
拡張子設定はplになっています。
>>724
ありがとうございます。
よく読んでみます。
0727718
04/05/11 22:23ID:lgCnMYEoprint "Content-type: text/html", "\n\n";
が抜けていた為だったようです。
おかげで、エラーは出なくなりました。
しかし、ONボタンを押してもストーブが付きません。
なぜでしょうか?
0728718
04/05/11 22:37ID:lgCnMYEo’O N'などとスペースを入れてしまっていました。
ONに直して動くようになりました。
0729nobodyさん
04/05/12 00:31ID:cFb5OXA3�A$hoge->a('1');
�Bif ($hoge->a eq '1'){
}
�@左辺値としても使えて、$hoge->{'a'}に'1'をセットする
�Aみたいに引数で$hoge->{'a'}にセットできて
�Bみたいに引数が与えられない場合$hoge->{'a'}の値を返す
ようなメソッドを書きたいのですけどどうやったらいいのか判りませんです
どっかで見た気がするけど見つからないです
気が向いたら教えてくださいまし
0730nobodyさん
04/05/12 02:08ID:???http://perldoc.com/perl5.8.4/pod/perlsub.html#Lvalue-subroutines
require 5.006;
sub Foo::foo : lvalue {
my $self = shift;
@_ and $self->{'-foo'} = shift;
$self->{'-foo'};
}
my $obj = bless {} => 'Foo';
$obj->foo = 'foo!'; print $obj->foo; # foo!
$obj->foo('bar!'); print $obj->foo; # bar!
0731nobodyさん
04/05/12 04:19ID:???配布しているcgiに以下の記述がありました。
2ch型掲示板でID生成部分の一部です。
> $id = crypt($identify,"${year}S\.E${mday}X${mon}");
crypt関数への第二引数の部分で、「S」や「\.」、「E」、「X」はただのノイズ用文字なのでしょうか?
\記号が含まれてるため何か意味を持つのではないかと思い質問いたしました。
引用元 ttp://www.toshinari.net/ 「2chブラウザ対応掲示板」
0732nobodyさん
04/05/12 06:17ID:???http://perldoc.com/perl5.8.4/pod/func/crypt.html
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/crypt.3.html
0733nobodyさん
04/05/12 10:27ID:???Attribute::Property
http://search.cpan.org/~juerd/Attribute-Property-1.05/
とかも。」
0734731
04/05/12 11:58ID:???回答ありがとうございます。
saltは先頭が$1$以外の場合、通常先頭2文字を使うため、
$id1 = crypt($identify,"${year}"); # 104
$id2 = crypt($identify,"${year}S\.E${mday}X${mon}"); # 104S.E12X4
のどちらでも同じ結果となりました。(v5.8.2 built for MSWin32-x86-multi-thread)
もし何らかの要因で各変数が空だとしてもEとXは不要になると思うんです。
ひょっとしてコーディングミスなのでしょうか。
0737731
04/05/12 13:19ID:???どうもありがとうございました。
>>736
トリップはトリップキーをplainに、トリップキーの2文字目3文字目をsaltに、
足りない場合はH.を末尾に置き、後ろからn文字取ればn桁トリップになります。
$trip = substr(crypt($key, substr($key."H.", 1, 2)), -8); # 8桁トリップ
2chでもしたらばでもトリップ生成方法は同じのようです。
私の質問したID部分は、本家2chの場合トリップよりも複雑になっているようですが。
0738nobodyさん
04/05/12 13:38ID:???では foreach(@array) は for のように書けるのでしょうか。
こちらでは for($i = 0; @array; ++$i) とかやってみたのですがエラーが出ました。
0739nobodyさん
04/05/12 13:39ID:???0740nobodyさん
04/05/12 13:52ID:???for($i=0; $i<@array; $i++)
0741nobodyさん
04/05/12 14:05ID:???for($i = 0; $i < @array; $_ = $array[$i], ++$i)
のような感じになってるのですね。
スッキリしました。
0742nobodyさん
04/05/12 14:42ID:???http://qb3.2ch.net/test/read.cgi/operate/1067245837/
0743nobodyさん
04/05/12 16:37ID:???単にforとforeachを交換しても実行するバイトコードは変わらない、というだけの話だと思うが。
for(@array){ ... } # OK
foreach(my $i = 0; $i < @array; $i++){ .. } # OK
for($i = 0; $i < @array; $_ = $array[$i], ++$i){} はfor(@array){}に比べると
ずっと遅い、$_がlocal化されない、$_を書き換えても@arrayの要素は変わらない、などの違いがあるしな。
0744nobodyさん
04/05/12 16:58ID:???添字使いたいときもfor(my $i = 0; $i < @array, $i++) {...} よりfor(0..$#array) {...}の
方が速いよね。なんとなく0..$#arrayのリストを最初に作ってから〜とかしそうで
最初は抵抗あったけど、試してみるとその辺は処理系がよろしくやってくれてる
みたいだし。
0745nobodyさん
04/05/12 19:03ID:???多くの人はポストのようですが。
#オプティマイザが勝手にプリにしてくれるのはラクダ本で理解
0746nobodyさん
04/05/12 23:29ID:???インクリメント・デクリメント演算子のことか?
普通はポストだが、C++のコードを読み書きした直後はついプリにしてしまうね。
0747nobodyさん
04/05/12 23:33ID:???++$a
ってことか?
0748nobodyさん
04/05/13 00:54ID:???C#かなにかも後置推奨だった木がするので。
最もC#などとPerlじゃ変数の命名規則も違うけど
0750nobodyさん
04/05/13 06:04ID:???0751nobodyさん
04/05/13 06:06ID:???アセンブラとCからの習慣。
0752nobodyさん
04/05/13 10:08ID:???サーバの環境上、Dateフィールドが自動で設定されません。
そこで、自力でDateフィールドを
Date: Wed, 12 May 2004 08:50:48 +0900
のように書きたいのですが、書き方がわかりません。
(途中まではわかるのですが、下記例の最後の行がわかりません)
どなたかご存じの方、教えていただければ幸いです。
# 日時の取得 $ENV{'TZ'} = "JST-9";#タイムゾーンの設定
$times = time();#時刻を取得
($sec,$min,$hour,$mday,$month,$year,$wday,$stime) = localtime($times);
$month++;
$year = $year + 2000;
@month = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
@weekly = ('Sun', 'Mon', 'Tue', 'Wed', 'Thr', 'Fri', 'Sut');#表示したい曜日文字
$Date = sprintf?(ここ不明)
0753nobodyさん
04/05/13 10:30ID:???http://perldoc.com/perl5.8.4/pod/func/sprintf.html
http://www.rfs.jp/sitebuilder/perl/05/05.html#sprintf
0754752
04/05/13 10:57ID:???すみません、それをみてもちんぷんかんぷんでして。。。
できれば>>752のケースの例を教えていただけませんでしょうか?
そこから勉強したいと思いまして。
すみませんが、よろしくお願いいたします。
0755752
04/05/13 11:33ID:???sprinfの中でカンマを表示したく、それはどのようにすればいいのでしょうか?
$ENV{'TZ'} = "JST-9";#タイムゾーンの設定
$times = time();#時刻を取得
($sec,$min,$hour,$mday,$month,$year,$wday,$stime) = localtime($times);
$year = $year + 1900;
@month_array = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
@weekly_array = ('Sun', 'Mon', 'Tue', 'Wed', 'Thr', 'Fri', 'Sut');#表示したい曜日文字
$hour = sprintf( "%02d", $hour );
$min = sprintf( "%02d", $min );
$sec = sprintf( "%02d", $sec );
my $Date = qq|$weekly_array[$wday], $mday $month_array[$month] $year $hour:$min:$sec +0900|;
■ このスレッドは過去ログ倉庫に格納されています