くだすれPerl(超初心者用)2
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん
2008/03/03(月) 05:07:32ID:???もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Perl使いが優しくコメントを返しますが、
お礼はPerlの布教と初心者の救済をお願いします。
0831nobodyさん
2008/11/29(土) 12:59:08ID:060X3luIあ い う え お か き く け こ
と文字列があり、リロードする度に2回ずつ表示させるにはどう書いたら良いか教えてほしいです。
一回目 あ
二回目 あ
三回目 い
って感じです。宜しくお願いします。
0832nobodyさん
2008/11/29(土) 13:40:07ID:???0833nobodyさん
2008/11/29(土) 21:05:33ID:???my $num = 0;
for $num (0 .. 20) {
$num = $num/2;
print $words[ $num%@words ], "\n";
}
0834831
2008/11/30(日) 01:08:25ID:???ありがとうございました。
0835nobodyさん
2008/11/30(日) 18:06:10ID:???my @words = qw(あ い う え お か き く け こ);
{
my $call = 0;
sub _idx {
int($call++/2);
}
}
while (my $val = $words[_idx()]) {
print "$val\n";
}
0836nobodyさん
2008/12/09(火) 19:35:05ID:???ボタンを押して表示されるURLが「test.cgi?page=1?Word=○○」になるようにしたい
<form action="test.cgi?page=1">と書いても?以降は無視されちゃうんですが
何か方法ありますか?
0837nobodyさん
2008/12/09(火) 19:48:00ID:???0838836
2008/12/09(火) 19:53:00ID:???とやると、URLが「test.cgi?Word=○○」になってしまいます。
「?page=1」を入れるにはどうしたらいいでしょう
0839nobodyさん
2008/12/09(火) 21:57:27ID:???<input type="hidden" name="page" value="1">
<input type="text" name="Word">
0840836
2008/12/10(水) 07:22:57ID:???すみません それだと「test.cgi?page=1&Word=○○」になってしまいます
Wordの前を「?」にしたいので、hiddenではできないかなと思ってたんですが
できるのでしょうか
0841nobodyさん
2008/12/10(水) 08:06:09ID:???順番的な話だけなら記述する行を逆にすればいい話だけど
0842836
2008/12/10(水) 08:45:47ID:???アクセス数の内訳を把握するためにURLを表示させたいのですが、
同じ内容を表示するにはURL内のpageとWordの前に
それぞれ?がないとだめなようなので。
formの記述でなんとかなるかなと思ったんですが、無理ですか…
他の方法を考えます。ありがとうございました。
0843nobodyさん
2008/12/10(水) 11:15:13ID:???プログラムを頂いてActive perl5.6ではしっかり動作したのですが、
5.8.8環境下で一応動くものの、日本語が文字化けして意味不明になります。
ググッた所では日本語の処理方法が違う?見たいな事がチラホラ見えます。
日本語処理で5.6を5.8.8においてそのような違いが有るのでしょうか?
対処方法が有れば、ご教授お願いします;
パッチの置き場所が問題?w
動作環境
5.6 XP ルート設定有り マイコン→ユーザ1→プログラム置き場
5.8.8 XP 設定なし マイコン→Cドライブ→直置き
0844nobodyさん
2008/12/10(水) 11:24:04ID:???5.8対応するならUTF-8前提で書き直したほうがいいと思う。
0846nobodyさん
2008/12/10(水) 11:41:47ID:???>>844
やはり文字コードが変更されていたんですね;;
書き直し・・・強引に動かす方法無いですかね?(有れば)
無理が有りすぎならプログラム書いた人に相談してきます。
>>845
テンプレート?練習用テンプレで書いてみるって事でいいですか?
急いで探してみます><
0847nobodyさん
2008/12/10(水) 12:17:15ID:???0850nobodyさん
2008/12/14(日) 13:24:40ID:???一つのファイルで全部やるよりも、
書き込み.cgi
閲覧.cgi
管理人用.cgi
検索.cgi
などのように、処理の種類ごとに
ファイルを細かく分けた方が、体感軽いとかありますか?
0851nobodyさん
2008/12/14(日) 13:32:50ID:???0852nobodyさん
2008/12/14(日) 14:18:58ID:???ありがとうございました!
0853nobodyさん
2008/12/15(月) 17:24:02ID:???ループごとにカウントしてlastだと管理しにくいので良い方法を探しています
0854nobodyさん
2008/12/15(月) 19:30:03ID:V2NIPW0rfor(0..$num)とでもしとけば?
0857nobodyさん
2008/12/15(月) 22:03:34ID:???0858nobodyさん
2008/12/15(月) 22:05:31ID:???0859nobodyさん
2008/12/15(月) 22:08:55ID:???レスしても混乱するだけだろ。
0860nobodyさん
2008/12/16(火) 00:25:05ID:???0861nobodyさん
2008/12/16(火) 00:47:33ID:???0864853
2008/12/16(火) 12:06:04ID:???質問の仕方が悪くて申し訳ないです。
例えば配列の値を見るとき、
my $count=0;
for (@array) {
print $_;
$count++;
last if $count>1000;
}
等、終了条件を決めて抜ければいいんですが
ループの度にカウンターを設定してカウントって面倒ですよね?
意図としては>>861のように、何もせず、あるいはもう少し簡単にブレイクする方法があれば
教えて頂きたいというものでした。
PHPだとmax_execution_timeで実行時間を制限できます。
Perlだとそういったものは無いのでしょうか?
0865853
2008/12/16(火) 12:09:30ID:???×for (@array) {
○foreach (@array) {
0866nobodyさん
2008/12/16(火) 12:19:48ID:???854氏が既に書いてるが、
for my $i ( 0 .. 999 ){
print $array[$i] ;
}
0867853
2008/12/16(火) 12:35:45ID:???for my $i ( 0 .. $#array ){
print $array[$i] ;
}
こんな感じでしょうか。
あれれ?配列の場合、無限ループにはなり得ない??
0868nobodyさん
2008/12/16(火) 13:16:54ID:???0869nobodyさん
2008/12/16(火) 13:57:42ID:???$i=1;
foreach(@array){
print $_;
$array[$i+1]=$array[$i];
$i++;
}
こんな悪戯とかは。
0872nobodyさん
2008/12/17(水) 08:19:35ID:???俺は意外と無いんだけど…
0873nobodyさん
2008/12/17(水) 10:44:54ID:JyAZ5ywx0874nobodyさん
2008/12/17(水) 10:53:59ID:???取得できたらファイル保存してスリープ
を繰り返す
0875nobodyさん
2008/12/17(水) 11:28:15ID:JyAZ5ywxcronとかそういうのがあると聞いたんですが
0876nobodyさん
2008/12/17(水) 11:33:30ID:???書いた
cron使えるサーバならそれでいける
0877nobodyさん
2008/12/17(水) 12:12:50ID:JyAZ5ywx2つの場所にある cgi が、十分短い時間だけスリープして相手を呼び出すってどうでしょう?
0878nobodyさん
2008/12/18(木) 11:45:09ID:???2つのCGIで呼び合うというのは作ったことがあるができるよ。
システム占有率が目立たなければ問題ないと思う。
cronが使えればそれに越したことはないと思うが
0879JyAZ5ywx
2008/12/18(木) 11:54:13ID:pPcqWUbs0880nobodyさん
2008/12/19(金) 19:42:45ID:???ファイルの先頭に追加書き込みをする処理を行いたいのですが、
読み書きモードで開いて、ファイルを全て配列に読み込み、
unshiftで先端に追加してファイルに書き込みをしなおし、
するやり方と、
上書きモードで新しいファイルに追加を書き込み、
それから読み込みモードで元ファイルを開いて中身を新しいファイルに書き込み、
unlinkとrenameをするやり方では、
どちらの方が良いのでしょうか?
また、この二つ以外にオススメのやり方があれば教えて下さい。
0881880
2008/12/19(金) 20:00:28ID:???通常の掲示板の書き込み保存ファイルなどだけを扱うつもりです。
0882nobodyさん
2008/12/19(金) 20:13:08ID:???できれば先頭に追加書き込みする仕様を変えるとかは選択肢にないの?
0883nobodyさん
2008/12/19(金) 20:22:02ID:???読み込むときにreverseなどをした方が良いのでしょうか?
0884nobodyさん
2008/12/19(金) 20:23:05ID:???ブラウザでファイルの中身を表示するときのことです。
掲示板でいうと記事一覧表示などです。
0885nobodyさん
2008/12/19(金) 20:26:00ID:???0886nobodyさん
2008/12/19(金) 20:38:36ID:???読み込みは一番多いところでは1秒に30〜100回程あります。
ただ、少ない時間(朝〜昼など)は読み込みも1分に1度程度になる時期もあります。
静的なhtmlというと、書き込みのたびにhtmlファイルの形に書き出す感じでしょうか。
確かにそうしている掲示板スクリプトなどは閲覧が早いですよね、
そういったことはやったことがないので調べてみます、
難しそうに感じますが試してみます。ありがとうございます。
ログファイルへの書き込み自体は、末尾に追加書き込みをし、
閲覧時にreverseするやり方が良いのですか?
サーバーは専用サーバーを借りております。
ただ私に知識が足りないので、基本的な運用は管理者の方に任せている状態です。
必要なモジュールなどはお願いして入れてもらっている形です。
0887nobodyさん
2008/12/20(土) 00:27:59ID:???CPAN の File::ReadBackwards を使うという手もあります。
何故住人が口を揃えてファイル先頭への追記を忌避するかというと、
必然的にいずれかのステップでファイル全体のコピーを必要とするため、
空間的にも時間的にも効率が悪いからです。
また、読出し負荷を下げるために静的ファイルを利用する際には、
投稿ログファイルのタイムスタンプとキャッシュのタイムスタンプを比較して、
キャッシュのほうが新しければキャッシュをただ投げ返すといった方法もとれるでしょう。
がんばってください。
0888nobodyさん
2008/12/20(土) 00:56:27ID:???0889nobodyさん
2008/12/20(土) 22:09:13ID:???win環境です。
パスワードセットして解凍するです。
よろしくお願いします。
0891nobodyさん
2008/12/20(土) 22:53:25ID:???zip解凍ソフトの実行ファイルをオプション付きでPerlからたたく
これで解決
0892nobodyさん
2008/12/20(土) 22:54:40ID:???wwwwww
CPAN つかえよwww
0893nobodyさん
2008/12/21(日) 18:51:35ID:???./movies/loli.zip
~$
0894nobodyさん
2008/12/22(月) 12:53:17ID:???0895nobodyさん
2008/12/22(月) 20:16:30ID:Vaq4WjNPそこで読み込んだhtmlファイルに変数を埋め込んでcgiから出力したいんです
簡単なデータ構造なら埋め込む方法は何個か思いつくんですが、記事とか記事のタイトルとか、配列やハッシュの配列などをどう処理しようか悩んでます
一般的にはどういう方法を取るもんなんでしょうか
0896nobodyさん
2008/12/22(月) 20:26:01ID:???0898nobodyさん
2008/12/22(月) 20:57:44ID:???Tenjin - the fastest template engine in the world
http://www.kuwata-lab.com/tenjin/
0899nobodyさん
2008/12/22(月) 21:01:36ID:???extlib にゴミが大量に入ってて当初のコンセプトはどこにあるのかさっぱりだけどwww
0900nobodyさん
2008/12/22(月) 23:07:11ID:TJyyzWEdall skipped: Perl 5.8.1 or later required
Failed Test Stat Wstat Total Fail Failed List of Failed
-------------------------------------------------------------------------------
t/enc_module.t 2 512 3 2 66.67% 2-3
3 tests and 6 subtests skipped.
Failed 1/24 test scripts, 95.83% okay. 2/5850 subtests failed, 99.97% okay.
make: *** [test_dynamic] エラー 29
/usr/bin/make test -- NOT OK
Running make install
make test had returned bad status, won't install without force
Perlのバージョンを今の5.8.0から5.8.1以上に上げないといけないのでしょうか?
0901nobodyさん
2008/12/22(月) 23:09:31ID:???0902895
2008/12/23(火) 00:34:22ID:ZaYeCOkcありがとうございます
とりあえずのところ、一番わかりやすかったHTML::Templateを使ってみることにしました
できれば勉強のために自分で作ってみたかったんですが、ソースコード見て諦めましたw
0903nobodyさん
2008/12/24(水) 03:27:20ID:DJKrSH/Sなんとか関数と暗号でググると コードとか詳しく説明してあるがイマイチ
0904nobodyさん
2008/12/24(水) 23:13:25ID:???0906nobodyさん
2008/12/25(木) 00:45:10ID:eRkadvZc0907nobodyさん
2008/12/25(木) 10:37:40ID:???おれはCatalystとか使える環境でやってるから、レンサバのかたの事情は
よく分からんのだけど、speedy_cgiレベルでもキツい?
speedy_cgiオケなら、初めはCGI::Application(Titanium)でやって
負荷が増えてきたたらspeedy_cgi化するってのがよさそうだけど。
0908nobodyさん
2008/12/25(木) 21:09:02ID:???0909nobodyさん
2008/12/26(金) 00:56:21ID:???例えば、mod_perlは同じユーザーで、プロセス使い回しで実行されるから、かなり危険。
SpeedyCGIはどうなの?
0910nobodyさん
2008/12/27(土) 00:59:07ID:???0912nobodyさん
2008/12/28(日) 06:40:16ID:???0913nobodyさん
2008/12/29(月) 10:09:26ID:p2M05RZ+#!/usr/local/bin/perl
print "Refresh: 3;http://google.com/","\n";
print "Content-type: text/html\n\n";
print "a";
exit;
0914nobodyさん
2008/12/29(月) 10:19:37ID:???0915nobodyさん
2008/12/29(月) 14:53:03ID:???0916nobodyさん
2008/12/31(水) 22:39:26ID:vTUPxBETってな感じで繰り返すのですがyahooへ三回飛ばしたい場合
if ($count>=0 and $count<=4){
print "Location:$word_5\n\n";
}elsif ($count>=5 and $count<=9){
print "Location:$word_5\n\n";
}elsif ($count>=10 and $count<=14){
print "Location:$word_5\n\n";
三回書くのではではなく
:$word_5 = 3
みたいな感じで数字で回数を指定するにはどう書いたら良いでしょうか?
できたらコピペで使えるような答えが欲しいです・・・お願いします。
http://test.testars.com/link.txt ソース
http://test.testars.com/link.cgi
0917916
2008/12/31(水) 22:42:28ID:???$word_5 = 9
みたいに書く方法無いでしょうか?
0918916
2008/12/31(水) 22:43:52ID:???すいません
0919nobodyさん
2009/01/02(金) 02:39:12ID:???use strict;
my @num_url = (
"2,http://www.yahoo.co.jp/",
"3,http://www.goo.ne.jp/",
"2,http://www.google.co.jp/");
my $file = "./count";
my ($fh, $count);
open($fh, "<", $file) or die "error";
$count = <$fh>;
close($fh) or die "error";
chomp $count;
my $num_url;
my $i = 0;
for $num_url (@num_url) {
my ($num, $url) = split(/,/, $num_url);
if ($count >= $i and $count < $i + $num) {
print "Location:$url\n\n";
}
$i += $num;
}
$count++;
if ($count >= $i) {
$count = 0;
}
open($fh, ">", $file) or die "error";
print $fh $count;
close($fh) or die "error";
0921nobodyさん
2009/01/03(土) 21:24:01ID:xUjko049cgi掲示板を連ねてレンタル掲示板を作ろうかと検討しています。
そこで、全てのフォルダにある掲示板cgiに広告を表示させたいのですが、
MTみたいなモジュールを使って表示させることを掲示板cgiで可能なのでしょうか?
サーバー内
┏bbs1(レンタル)フォルダ
┣bbs2(レンタル)フォルダ
┣bbs3(レンタル)フォルダ
┣bbs4(レンタル)フォルダ
┣bbs5(レンタル)フォルダ
┣bbs6(レンタル)フォルダ
┣bbs7(レンタル)フォルダ
以下どんどん追加
全てに共通した広告を出す。
また、広告の修正なども、1つを修正すれば全てに反映されるようにしたい。
0922nobodyさん
2009/01/03(土) 21:37:02ID:???0924nobodyさん
2009/01/03(土) 23:50:12ID:xUjko049それを聞いてんだろカス!
教えてやる知識ねーならくんなよボケw
0925nobodyさん
2009/01/04(日) 00:16:52ID:???バカにはわからないようだ。ww
0926nobodyさん
2009/01/04(日) 00:24:01ID:???0927nobodyさん
2009/01/04(日) 00:31:33ID:???教えてもらえないバカは回答得ようと必死でマルチしてるが、
俺は教えなくても何にも困って無いぞ。
0928nobodyさん
2009/01/04(日) 00:55:27ID:???複数掲示板に対応するスクリプトをひとつ用意した方が楽じゃないか?
まあ、ム板にもあったように広告用モジュール作って、読み込ませればいい。
0929nobodyさん
2009/01/04(日) 03:50:47ID:???>教えてやる知識ねーならくんなよボケw
自分に対して「教えてやる」って・・・
まず日本語から勉強じゃまいか?
それ以前に幼児に対するような躾が必要そうだがw
0930nobodyさん
2009/01/04(日) 10:21:21ID:???レス数が900を超えています。1000を超えると表示できなくなるよ。