Perl 初心者コーナー Part23
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/05/16 11:18ID:zDRBc/j4【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 10
http://pc2.2ch.net/test/read.cgi/php/1048686475/
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
CGIに依存しないPerlの話題一般/Part2
http://pc2.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は、【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
過去ログやお勧めサイトは >>2-10
0622nobodyさん
03/05/30 02:15ID:???http://www.atmarkit.co.jp/fpc/slotsocket/indexpage/
0623597
03/05/30 02:28ID:???なぜ、
14-16行目は
$template->param(
LIST => \@list
);
10行目は
push @list, $%list;なのでしょうか?
つまり、どうして、push @list, \%list でないのでしょうか?
0625_
03/05/30 02:42ID:???0627直リン
03/05/30 03:10ID:KvuUHxNV0628nobodyさん
03/05/30 03:11ID:k5B8Isn5(key=aaa&key=bbbのように)
同じキーの値が複数ある場合、何で分割されているのでしょうか?
CGI.pmは同じキーの場合、配列にして戻ってくるらしいのですが、
見たところ配列でもないし、何で分けられているのかさっぱり分かりません・・。
0630nobodyさん
03/05/30 03:22ID:/oIAPWL0普通にconnect関数を使えばいいのでしょうか?
調べてみましたがどこにも書いてなかったのでお願いします。
0631nobodyさん
03/05/30 11:03ID:MqvbgP4I$hoge[0]じゃないといけないのに、@hoge[0]でもOKだったんですけどなぜですかね
0632直リン
03/05/30 11:10ID:KvuUHxNV0633nobodyさん
03/05/30 11:25ID:wqqbPD7W$salt = $logpw =~ /^\$1\$(.*)\$/ && $1 || substr($logpw, 0, 2); #aska.cgiのある一行です
関数的な意味ではなく文法的な意味が。&&や||がどの部分にかかっているかとかがいまいちわかりません。
分解したり()つけたりどなたか分かりやすく説明していただけないでしょうか。
0634nobodyさん
03/05/30 11:39ID:???$salt = (($logpw =~ /^\$1\$(.*)\$/) && $1) || substr($logpw, 0, 2);
パターンマッチが成功したら→ $salt = $1
失敗したら → $salt = substr($logpw, 0, 2)
違ってたらすまん
0635nobodyさん
03/05/30 11:44ID:???それはね〜。
スライスと言ってね〜
$はスカラー変数として評価されて、
@は配列として評価されるんだよ〜。
たとえばね〜。
配列の要素0と3と6をコピーしたいとするよね〜。
@hoge = ($hage[0], $hoge[3], $hoge[6]);
↑これだと、ちょっと面倒だよね〜。
@hoge = @hage[0, 3, 6];
↑これだと、すっきりして見えるよね。
スライスって便利だね〜。
マジ、本読もうね〜。
0636635
03/05/30 11:45ID:???ここの所、ちょっと変数名間違っちゃったけど、
言いたいこと分かってくれるよね〜?
0637nobodyさん
03/05/30 11:48ID:???>どこかのホームページでUDPもconnectできると書いてあるんですが・・・
へー。どこかのホームページにそんな事書いてたのか〜。
>調べてみましたがどこにも書いてなかったのでお願いします。
へー。どこにも書いてなかったのか〜。
・・・( ´_ゝ`)ヘー
0638nobodyさん
03/05/30 11:55ID:???それで合ってるっぽ。
$salt = ($logpw =~ /^\$1\$(.*)\$/ ? $1 : substr($logpw, 0, 2) );
こう書いた方が、まだ分かりやすい・・・
0640630
03/05/30 14:51ID:qOosOO5S失礼しました。
どこかのホームページではなく、とあるホームページです。
自分なりにconnect関数について調べたのですが、udpを使用しての使い方は載ってませんでしたので…。
0641nobodyさん
03/05/30 14:58ID:???いや、そういう意味じゃなく、
その「どこかのホームページ」に書いてたなら、
その「どこかのホームページ」内に、説明がなかったのかね?って意味。
ちょっと、ひねくった言い方してみた。
0643630
03/05/30 15:11ID:uU/3TkKVudpでconnectとか書いてあるんですけど、どこにそれが書いてあるのやら…。
当方の見落としですかね?
0644630
03/05/30 15:12ID:qOosOO5S>>642
>>642のサイトです。
udpでconnectとか書いてあるんですけど、どこにそれが書いてあるのやら…。
当方の見落としですかね?
0645630
03/05/30 15:13ID:gys3ZHK80646nobodyさん
03/05/30 15:58ID:tzfB9BhB日記CGIを借りてきて、自分で設定を様々に変更しました。
ローカルのテストで成功しましたので、Web上にアップしましたが、CGIにアクセスしようとしたところ、「500 Internal Server Error」と出てしまいました。
日記のフォルダ内は
index.html
バックナンバー用フォルダ
cgi-binフォルダ┬●●.cgi
├データ保存用フォルダ
└HTML生成用テンプレート
となっており、それぞれのフォルダのパーミッションは777、●●.cgiのパーミッションは755に設定しました。
Perlのパスは、!/usr/local/bin/perl です。
あまりに初心者の質問で申し訳ありませんが、
1:500 Internal Server Errorとは、どういうエラーなのでしょうか。
2:こういう場合、どこを修正すれば良いのでしょうか。パーミッションが悪いのか、パスが悪いのか、それともアップロードの仕方が悪いのか、もっと他に原因があるのでしょうか。
よろしくお願いします。
0647nobodyさん
03/05/30 16:47ID:???ローカルってWin?
ローカルで動くならperlの文法は合ってるんだろうね。
どっかで初歩的なミスしてると思うよ。
ま、スレ違いなので、
http://pc2.2ch.net/test/read.cgi/php/1048686475/l50
↑こちらへどうぞ。
0648nobodyさん
03/05/30 18:30ID:axvQjxfE0650nobodyさん
03/05/30 19:09ID:???モノが足らない。他に3つぐらい必要
>>628
CGI::Applicationは内部でCGI.pmを使ってるから処理は同じ。
>>643
UDPでconnectってのは単に宛先を省略できるようになるだけ。
実際にコネクトしてるわけじゃない。
0651nobodyさん
03/05/30 19:36ID:???0652_
03/05/30 19:41ID:???0653nobodyさん
03/05/30 20:14ID:???連想配列Aと連想配列Bがある場合、AにBをコピーさせたいのですが、
コピーする際にキーの重複を避ける為にBのキーに固定文字を追加して
移動させるにはどのように書けば良いのか教えて下さい。
配列の場合にはそのままpushで簡単だったのですが…
0655nobodyさん
03/05/30 22:04ID:v3ScOAWpを
%b = (1_b => "a",2_b => "b")
ってことじゃねーの?
0656nobodyさん
03/05/30 22:45ID:???0657653
03/05/30 23:01ID:???すみません。
>>655の解釈の通りです。
連想配列の解説を読みあさって、自分でも作ってみました。
while (($key, $value) = each(%B)) {
$A{"b_$key"} = $value;
}}
一応、期待通りに動いてはくれているのですが、
もう少しスッキリ書けないものかと思いまして。
これが最善の用法ですかね?
0658nobodyさん
03/05/30 23:11ID:v3ScOAWp<!--#exec cgi="./acslog.cgi" -->でアクセスされたときと、
http://aaa.net/acslog.cgiでアクセスされたときを分岐したいのですが、
無理ですか?
0659658
03/05/30 23:13ID:v3ScOAWp適当ですのでお気にしないでください。
0660nobodyさん
03/05/30 23:38ID:TYAZIilihttp://homepage3.nifty.com/coco-nut/
http://www.k-514.com/
0661nobodyさん
03/05/30 23:52ID:???それでできるなら、それでいいんじゃない?
俺なら・・・
while (($key, $value) = each(%B)) {
$key .= '_b';
$A{$key} = $value;
}
こうするけどね。
>>658
あのさ・・・
本当に教えてほしいなら、ちゃんと質問しようよ・・・
何を質問したいのか?って所から考えちゃったよ・・・
HTMLに埋め込んでるSSIで呼び出されたCGIファイルの実行結果と、
CGIファイル直接アクセスされた時の実行結果を変えたいって事でしょ?
SSIで呼び出す時は、GETで情報埋め込んでおいたらどう?
0662nobodyさん
03/05/30 23:56ID:???@A{ map "b_$_", keys %B } = values %B;
>>658-659
その質問は CGI 関係のスレへ振ってくれ。
あとコレ読んで。
http://www.goto.info.kanagawa-u.ac.jp/~horiyuki/rfc/rfc2606j.txt
0663653
03/05/31 01:29ID:???なるほど、そっちの方が後で読んだ時にわかりやすいですね。
ありがとうございます。
>>622
すごい。
そこまで端折れるものだったとは。
状況によって、>>661さんと>>662さんの構文を使い分けていきたいと思います。
ありがとうございました。
0664658
03/05/31 01:30ID:6mtQ8nNeSSIでacslog.cgi?aaa
とかしても意味ないんじゃないですか?
?つけても、execで実行すると.cgiで実行した結果になるんですが・・・・
0665nobodyさん
03/05/31 02:13ID:???0666nobodyさん
03/05/31 02:55ID:???・・・ヘ?
GETで値送って、その値見て処理を変えるんだよ?
直接CGIにアクセスされても、GETで値送らない限り処理変えられると思うが・・・?
とりあえず、>>665の言う通りスレ違いだから、これ以上はCGI質問板へ。
0667Name_Not_Found
03/05/31 05:21ID:yCzSry8LJavascriptでのsetTimeoutやsetIntervalでの1000msの長さに
違いが出るということはあるのでしょうか?
サーバはinfoseekで試したのですが1分30秒の間に
10カウント近くtimeの方が早く、時計を見ていた結果、
Javascriptのほうが正しいっぽいのです。
何か情報をお持ちの方、お答えをお願い致します。
0668nobodyさん
03/05/31 05:36ID:???違いが出たのなら、記述ミスを疑うべき。
0669nobodyさん
03/05/31 05:37ID:???それはPerlの問題ではない。
インターネット経由でCGIを実行するんだから、数秒のタイムラグはあって当然。
同じスクリプトをローカルで実行させてみ?
0670nobodyさん
03/05/31 09:54ID:fOVZj1BA以下のスクリプトを作ってみました。
$_ = "abc";
$h{abc} = "ABC";
$h{$1} = "XYZ";
if (/(abc)/) {
print $1,"\n"; # "abc"
print $h{$1},"\n"; # "ABC"
s /$1/$h{$1}/;
print $_,"\n"; # "XYZ"?
}
最後のプリントで"XYZ"が出力されてしまうところが理解できないのです。
置換文字列内のハッシュの添字は変数展開されないのでしょうか?
どなたかご教示ください。
0671nobodyさん
03/05/31 10:02ID:???s/($1)/$h{$1}/;
0672直リン
03/05/31 11:10ID:1EAhrEiJ0674nobodyさん
03/05/31 15:03ID:???>>671 の補足。
s/PATTERN/REPLACEMENT/
PATTERN 中の $1 は直前まで持っていた値
REPLACEMENT 中の $1 は PATTERN 中で代入された値
s/$1/$h{$1}/ の PATTERN には () が無いので
REPLACEMENT で参照される $1 は既に undef
$h{$1} = "XYZ" の段階で $1 は undef
よって s/$1/$h{$1}/ は s/abc/XYZ/ と等価
0675nobodyさん
03/05/31 16:21ID:???いつか、ちゃんと勉強しなおそうとは思うけど。
0676670
03/05/31 17:14ID:fOVZj1BA良く分かりました。どうも有り難うございます。
ハッシュの添字は変数展開されないのかしら、と思ったのは、勉強中の
「初めてのPerl」という本に次の記述があったからです。
(以下引用)
@fred = ('hello','dolly');
$y = 2;
$x = "This is $fred[$y-1]'s place"; # "This is dolly's place"になる
インデックスの式はーあたかも文字列の外部に置かれているかのようにー
普通に評価されていることに注意しましょう。まず最初にインデックスの
式に対して変数展開が行なわれるわけではないのです。
(引用終り)
この部分、何を言っているのかさっぱり分からない(変数展開してると思う)
のですが、配列のインデクスに対して変数展開が行なわれないのなら、
ハッシュの添字に対しても同じことかな、と思ってしまったのです。
変数展開する/しないで頭の中ゴチャゴチャです。
0678nobodyさん
03/05/31 18:10ID:???> インデックスの式に対して変数展開が行なわれるわけではない
"$y-1" を "2-1" という「文字列」に展開してしまうのではく、
「$y - 1」という式として扱う、つまりダブルクォート文字列外と
同じく添え字を表す式として使える、と言いたいんだろう。
もしインデックスの式に対してまで変数展開が行われるとしたら、
$x = "This is $fred[$y-1]'s place"; は
$x = qq/This is $fred["2-1"]'s place/; として扱われ、
文字列 "2-1" を数値として評価し、結果 $fred[2] を見る事に
なってしまう。
0679nobodyさん
03/05/31 18:11ID:???0680nobodyさん
03/05/31 18:32ID:???↑このスラッシュの前後で、
$1の中身が"abc"→undef となるのか。勉強になった。
0681nobodyさん
03/05/31 19:42ID:???ボタンをクリックして処理を始めるというのがいまいちわかりません。
投稿 ボタンをクリックすると、 投稿処理が始まりますよね?
どのようにしていその処理に移ればいいのでしょうか?
厨な質問でスマソ・・・
0682nobodyさん
03/05/31 21:02ID:???0683nobodyさん
03/05/31 21:16ID:???どうもCGIを作りたいみたいだから、先に
スレタイを読んで理解すること、HTMLを理解することを薦める。
HTMLを理解しないとどうせCGIからHTMLを吐けないからね。
<form action="hoge.cgi">
0684nobodyさん
03/05/31 21:16ID:???×Perlについて興味を持ち始めたんですが、
○CGIについて興味を持ち始めたんですが、
×厨な質問でスマソ・・・
○スレ違いな質問でスマソ・・・
0685nobodyさん
03/05/31 21:20ID:FYLpMA2Jスレ違いだけど教えてやる。
投稿をクリックするとform actionで指定されたcgiを呼び出す。
で、呼び出されたcgi側でフォームで指定されたメソッドにしたがって処理。
0686nobodyさん
03/05/31 21:26ID:???このスレの方が大抵いつも上にあるから?
0687_
03/05/31 21:30ID:???0688nobodyさん
03/05/31 21:39ID:Ecff4K+l0689nobodyさん
03/05/31 21:49ID:???0690nobodyさん
03/05/31 22:00ID:qGkh6pMiアッタマイイ(・∀・)!!
0691nobodyさん
03/05/31 22:18ID:ZijosZeyxmailでメール送信する場合って、
open(MAIL, "| /usr/sbin/xmail/sendmail -t");
で送れるんですか?
0692nobodyさん
03/05/31 22:23ID:???詳しく説明してる様なサイトってないでせうか?
0695nobodyさん
03/05/31 22:41ID:???> my $filesize = -s $filename;
my $filesize = (-s $filename);
スマソ
0696693
03/05/31 22:42ID:???0697nobodyさん
03/05/31 22:58ID:m6zPJsPy0699nobodyさん
03/05/31 23:11ID:???マルチうざいです。
しかも、向こうで答えようとしている人がいるのに何でマルチするのですか?
なぜ、わざわざスレ違い、いや板違いであるこのスレで質問するのですか?
そして、textareaのスクロールバーなのか、
ウィンドウのスクロールバーなのかくらいハッキリさせろ。
cf. http://pc2.2ch.net/test/read.cgi/hp/1053619342/226 だよね?(´Д⊂ク
0700nobodyさん
03/05/31 23:15ID:ZijosZey板違いの何がいけないんですか?
0703612
03/05/31 23:31ID:3Wm6q7+jいちおうNet::SSLeayというモジュールが必要ということで
ppm install Nea::SSLeay としてやってみたもののうまくできません。
どうすればよいでしょうか?
perl初心者ですが申し訳ありません。
650さんにものが足りないといわれましたが、なにが足りないのでしょうか?
0704nobodyさん
03/05/31 23:33ID:ZijosZeyマンコ
0705nobodyさん
03/05/31 23:33ID:???>>700
何の板なのか、そしてここは何のスレかを腹筋しながら50回音読してください。
# 向こうで答えが出ているのにわざわざマルチするなんて最低だよq(^-^)
0706nobodyさん
03/05/31 23:45ID:???1 スタートメニューからperl package managerを起動する
2 search sslする
3 Crypt-SSLeayが見つからなければ
repoでリポジトリを確認し、repo 2とかやって切り替える。2に戻る。
4 install (3で見つけた番号)
だったと思う。俺はもう既にインストール済みだから手順を確認できない。
0707nobodyさん
03/06/01 00:16ID:???初心者だから仕方ないでしょう。
誰でも最初は初心者に決まってるじゃないですか。
質問には全部答えてあげればいいじゃないですか。ガキじゃないんだから。
そしてスレの内容をめちゃくちゃにして誰もが不利益を被るようにすればいいじゃないですか。
0709nobodyさん
03/06/01 00:27ID:???初心者だから仕方ないでしょう。
初心者だから仕方ないでしょう。
初心者だから仕方ないでしょう。
初心者だから仕方ないでしょう。
初心者だから仕方ないでしょう。
初心者だから仕方ないでしょう。
初心者だから仕方ないでしょう。
初心者だから仕方ないでしょう。
0710nobodyさん
03/06/01 00:47ID:DeFU3cB4Win32モジュールってどこにあります?
なかなか見つからないんですが・・・
0711nobodyさん
03/06/01 01:03ID:???1.本気で自分は絶対に間違ってなく、他の全てが間違っていると考えている。
->本物。なので処置なし。放置。
2.薄々自分のやったことに後ろめたさを感じているが、認めたくない。
->厨房。頭が冷えるまで放置。と言うか物の道理がわかるまでネットにつなげるな。
3.ネタ
->放置
おお、実態がどれであろうと放置以外に選択肢がない。
0712nobodyさん
03/06/01 01:06ID:???ウィンドウズにActivePerlを入れてるなら、
スタート->検索->ファイルやフォルダで検索を開き、Win32で検索。
……Perlとかんけーねえ!?
0713動画直リン
03/06/01 01:10ID:FDrVWEME0714nobodyさん
03/06/01 01:36ID:DeFU3cB4ごめん。はじめっからはいってるんだね。
すんませんでした。
0715707
03/06/01 02:34ID:???やっと目が覚めました。
初心者だからって、それに甘えてルールを破る事って
いけないことですよね。。。
自分が甘ったれだって、気がつきました。
もう少し、勉強してきます。
ありがとうございました。
0717本当の本物707
03/06/01 03:08ID:5qKTyD6i僕が、変な質問の仕方したばかりに、
偽者が現れて、荒れてきてます。。。
>>716は、偽者です!
僕は、今ちゃんとまじめに勉強してます。
今後も、もしかしたら僕の偽者が現れるかもしれませんが、
どうか、放置してください。
本当の本当に、ご迷惑をおかけしました。。。。
IDも晒しておきます。
0718直リン
03/06/01 03:10ID:FDrVWEME0721nobodyさん
03/06/01 03:40ID:???んだから、板違い/スレ違いが来たら叩くだけだC〜
その結果スレが荒れたって困らないC〜
荒れて困るほど人が多い板じゃないC〜
■ このスレッドは過去ログ倉庫に格納されています