くだすれPerl(超初心者用)
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
2006/09/10(日) 13:33:48ID:???もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
Perl使いが優しくコメントを返しますが、
お礼はPerlの布教と初心者の救済をお願いします。
0862nobodyさん
2008/02/06(水) 10:22:36ID:???CGI.pm
Mason
Sledge
Catalyst
Jifty
Reaction
間にいろいろハサんで欲すぃ
0863nobodyさん
2008/02/06(水) 10:35:41ID:???Kent
CGI.pm
CGI::Application
Mason
Sledge
Gantry
Catalyst
Jifty
Reaction
0864nobodyさん
2008/02/06(水) 11:59:40ID:???0865nobodyさん
2008/02/06(水) 16:07:31ID:???0866nobodyさん
2008/02/06(水) 17:39:26ID:z242xw4+一行テキスト と テキストエリア と 送信ボタン と hiddenがいくつか のフォームを作りました。
jcode.plを通して、デコードする仕組みにしました。
テキストエリアに、600文字以下の、少ない全角文字を入力し、送信ボタンをクリックすると、
ログファイルに記載され、意図した表示になるのですが。
テキストエリアに沢山の文字(662文字以上)を入れ、送信ボタンを押しても反応しません。
perlには、フォームに入力する文字制限などがあるのでしょうか?
600文字程度ですと、使用目的では文字数が足りないので、なんとか直したいのですがどうしたらよいでしょう?
0867866
2008/02/06(水) 17:42:41ID:z242xw4+IE6だと、ボタンをクリックしても無反応なのですが。
FireFoxだと、一応書き込みができました、
しかし、やはり全角文字600文字程のところから後が切れて、ログファイルに記録されます。
また、全てが半角の数字を入力した場合には、何文字でも入力できる感じです。
宜しくお願いします。
0868866
2008/02/06(水) 17:50:10ID:z242xw4+半角数字でも、1000文字程度しか書き込みができませんでした。
0869nobodyさん
2008/02/06(水) 17:50:25ID:???0870nobodyさん
2008/02/06(水) 17:51:53ID:???0871866
2008/02/06(水) 18:04:28ID:z242xw4+ありがとうございます
メソッドをポストにしたら出来ました!
0872nobodyさん
2008/02/08(金) 17:15:00ID:???eval { $test=; };
print "fin"
この三行スクリプトを実行するとfinが表示されずに
syntax error at test.pl line 2, near "=;"
Execution of test.pl aborted due to compilation errors.
が表示されるのは正常なActivePerl(forWin)およびevalの振る舞いですか?
0873872
2008/02/08(金) 17:24:04ID:ZczohSgBActivePerlのperl -vはPerl v.5.8.8 / build817です。
0874872
2008/02/08(金) 18:04:44ID:???拾えそうなイキフンで記述してあるリファレンスが誤りです。大変ありがとうございました。
0875nobodyさん
2008/02/08(金) 18:57:59ID:???$@
0876797
2008/02/14(木) 15:20:19ID:???実は>>798が教えてくれたページを参考に作ったプログラムだったのですが、そこに罠があったのです。
ファイル名をSJISにするということで、アップページの文字コードもSJISにしていたのですが、
SJISで特定の文字(表、ソ、十など)にはWindowsでパスの区切りに使う\のコードが入っているので、
その部分が区切りと解釈されて、ファイル名が切られていたのです。
そこで、アップページの文字コードをUTF8にした所、切られることなく正常動作するようになりました。
おまけ
最近遭遇し一応解決したネタを1つ。
なぜか、CGI::LiteとIE6(最近のパッチ以降?)の組み合わせで<INPUT type="file">が複数連続すると、
途中のファイル名が取得できません。ダミーで<INPUT type="hidden">を挟むと大丈夫です。
0877nobodyさん
2008/02/14(木) 16:19:19ID:???>なぜか、CGI::LiteとIE6(最近のパッチ以降?)の組み合わせで<INPUT type="file">が複数連続すると、
あーわかるわかる。初心者にありがちなバグだね。
おれもHTTP拡張のバウンダリ周りで苦労した。10年ぐらい前に。
0878nobodyさん
2008/02/18(月) 22:53:11ID:b8HgX1gh配列、@listの中には5つの要素が入っています。
そのなかの3つ目を削除するにはどうすれば良いですか?
$list[3] = ''; だと中身が空のまま要素数は変わりません…。
0879nobodyさん
2008/02/18(月) 23:31:32ID:???0882nobodyさん
2008/02/20(水) 18:51:36ID:???スレとレス
間違えてるぞ
0883nobodyさん
2008/02/20(水) 20:04:29ID:AT7Ymvry$〇〇 = $ENV{'REMOTE_ADDR'};
でIPを取得したのはわかったんですが、フォームの中に<input type=hidden name=△△ value=$○○>などで他人に書き込みさせても自分のIPが表示されてしまいます
色々ググったりしたんですが良く分かりません
優しい解説お願いします
0884nobodyさん
2008/02/20(水) 20:25:09ID:???hiddenタグでやろうとしていることがいまいち分からないが、
通常は、書き込んだ時にログファイルに一緒にIPアドレスを
書き込むものなんだが。
0885nobodyさん
2008/02/20(水) 20:30:56ID:???スクリプトは時刻表示とコメントだけの、一行掲示板の簡易なものです
一緒にとはどういうことなのでしょうか?
ログファイルには時刻とコメントしか載りません
超初心者ですいませんm(_ _)m
0886nobodyさん
2008/02/20(水) 20:42:58ID:???その、時刻とコメントを書き込むファイルに、IPアドレスも一緒に
書き込む方法があるでしょといいたいのだよ。
表示する際はそのデータは必ずしも出す必要は無いのだから。
それが嫌ならば、書き込みをしたときに内部的に別なファイルにも
IPアドレスと時刻を書き込ませるようにプログラムを書けばよい。
0887nobodyさん
2008/02/20(水) 20:55:23ID:???フォームにセットしなくても、書き込んだ人のIPはこれで取り出せるよ → $ENV{'REMOTE_ADDR'}
0888nobodyさん
2008/02/20(水) 20:55:38ID:???IPアドレスを一緒に書き込むプログラムの書き方を知りたいんです(;∇;)/~~色々ググって、配布されてるスクリプトから該当する部分を抽出して頑張ったんですが...良く分からなかったんです、
0889nobodyさん
2008/02/20(水) 20:57:55ID:???レスありがとうございますm(_ _)m
それでIPは表示されるのは分かったんですが、それをどこに設置すればログに書き込んだ人のIPが表示されるかが分からないんです(;∇;)/~~
0890nobodyさん
2008/02/20(水) 21:04:58ID:???open(OUT,">> log.txt");
$line = $ENV{'REMOTE_ADDR'};
print OUT $line;
close(OUT);
0892nobodyさん
2008/02/20(水) 21:14:53ID:???あったはずだが。
それらを読んでも分からないのであれば、何処かに君が書いたソースを
うpしてここに貼りなさい。気分が向いたら改変してやるからw
0893nobodyさん
2008/02/20(水) 22:19:30ID:???もう一つ質問させて下さいm(_ _)m
($sec,$min,$hour,$day,$mon,$year,$wday) = localtime(time);
$week = $weekday[$wday];
$mon++;
$date = "$mon月 $day日 $hour:$min";
という時刻表示のスクリプト(年が無駄にあるのは気にしないで下さいw)を使ってる?んですが、$minの所だけを1ケタの秒の時だけ01や02みたいに0を先頭に付けたいのですが、どのようにすれば良いのでしょうか?
ちなみに 2月20日 22:04
というような事です!
0894nobodyさん
2008/02/20(水) 22:24:58ID:???printf使うとか。
また、例のごとくそれの使い方が分からないということであれば、
以下のコードを付け加える。
if($min>9){
$min = "0" . $min;
}
0895nobodyさん
2008/02/20(水) 22:40:01ID:???($sec,$min,$hour,$mday,$mon,$year,$wday,$d,$d) = localtime;
$date = sprintf("%04d/%02d/%02d(%s) %02d:%02d:%02d", $year+1900, $mon+1, $mday,
('Sun','Mon','Tue','Wed','Thu','Fri','Sat')[$wday], $hour, $min, $sec);
print $date;
0896nobodyさん
2008/02/20(水) 22:48:10ID:???これはどうなの?
$date = sprintf("%2d月%2d日 %2d:%02d",$mon,$day,$hour,$min);
print $date;
0897nobodyさん
2008/02/20(水) 22:53:59ID:???$dは無くても良いぞ。
どうしても書きたいなら、undefにすべし
それと、
my( $year, $month, $day, $hour, $min, $sec, $wday ) = ( localtime() )[5,4,3,2,1,0];
って言うのを覚えると見た目に麗しい
0898nobodyさん
2008/02/20(水) 23:05:01ID:???足りない分の後ろの要素は無視されるから
必要なければ書かなくてよろし
0900nobodyさん
2008/02/20(水) 23:12:33ID:???23:06 とかできました(゜∀゜;ノ)ノ
また何かあったらよろしくお願いします!(b^ー°)
0901nobodyさん
2008/02/20(水) 23:34:16ID:???0904nobodyさん
2008/02/21(木) 16:13:36ID:VlnHmaCl[3]内容
[2]内容
[1]内容
みたいにレス番号を付けるにはどうしたら良いのでしょうか?
0906nobodyさん
2008/02/21(木) 17:10:04ID:???お前の質問の仕方は抽象杉でわけわかんねえんだよ。
質問したければお前が書いたコードをうpれ。話はそれからだ。
0907nobodyさん
2008/02/21(木) 17:42:47ID:???まあもう良いです
0908nobodyさん
2008/02/21(木) 18:09:09ID:???全データ読み込んで、内容の数を数えて、
・ 一番上の内容を表示する前に数えた数を
・ 次の内容を表示する前に(数えた数-1)を
と出していけばいんじゃね?
データフォーマットも表示部分のソースも無いんじゃ
エスパーでもないかぎり(ry
0909nobodyさん
2008/02/21(木) 18:17:46ID:???・自分なりの勉強したはずなのに「本当に調べたの?」といいたくなる程度であるところ。
・「もう良いです。」とすぐにさじをなげるところ。
もう良いというのならば、このままPerlも辞めた方がいいぞ。道はいくらでもあるんだから。
0910nobodyさん
2008/02/21(木) 21:37:27ID:???おれも子供の頃「関数内から抜けるコマンド何だっけ?」と電話で聞いたことある。あれは助かった。
でも何カ所も直したり、まして新規でBBSを作るなら、オマエそれ全部おれに書かせるのかって。
0911nobodyさん
2008/02/21(木) 23:40:01ID:???駄目だったとか、検索エンジンの使い方のコツをある程度体得しておかなければ
目的のコンテンツにたどり着けなかったりしたから、その気持ちは分かる。
Perlのサンプルソースを手に入れる時、検索を使うよりも、2chの専用スレの
テンプレのURL一覧を見た方が早いなと感じた場合もあった。
だけど、今は大分検索エンジンの使い勝手も良くなり、目的のものがヒット
しやすくなった。Perlのこの程度の事なら日本語だけでも大丈夫だしね。
この状況で、このレベルのことが分からないなら、もう無理だと思う。
0912nobodyさん
2008/02/21(木) 23:46:33ID:???ttp://upload.wikimedia.org/wikipedia/commons/b/b3/Larry_Wall_YAPC_2007.jpg
0913nobodyさん
2008/02/22(金) 07:19:54ID:???ここがどれだけ過疎ってるかを表してますね
0914nobodyさん
2008/02/22(金) 07:55:30ID:???0915910
2008/02/22(金) 10:59:13ID:???っつーかググレが一番要らない。何でもググレばわかる筈だよ。理論上。
「これどうやるの?」「正規表現」みたいな一行レスもググレと同じで意味が無い。
ググレ言っていいのは通常スレ内だけで、こういうスレは隔離用だから、答えたい人
だけが見て、答えたくない人は見なければいい。教えてgooと同じ。たとえば
「C 関数 戻る」
で検索すると、return()はなかなか出て来ない。だからといって普段Tcl/Tk専門で
やってるSUNの社員に、一時的な知識のために参考書を買わせるのも無駄が多い。
ただ全部は聞きに来るなよって。
0916nobodyさん
2008/02/22(金) 11:35:20ID:???後者は、情報にたどり着くまでの手助けを十分にしているといえる。
ひろゆきも、この簡潔な回答が出来るのは、2chの特徴であり、
他のサイトのくだらない挨拶をしなければならないところとの
大きな違いだといってたぞ。
0917nobodyさん
2008/02/22(金) 11:40:32ID:???正規表現で分かるのかよw
0918nobodyさん
2008/02/22(金) 12:38:27ID:???あとはPerlなんて一生触りたくない層が最も多い。つまり言語がPerlなのはあるツールが
元々Perlで書かれていたからで、欲しいのはINとOUTのデータだけ。
こういう層に正規表現をわざわざ勉強させる必要は無いし、あればとっくにやってる。
そういうわけで具体的に一連の処理を書くことが望ましい。べつに10秒で書けるんだから。
また追加モジュールの紹介も価値が低い。モジュールのインスコが一番難しいんだから。
rootが必要だし、客先のネットワークによって無保証のモジュールの導入を禁止されている。
必ずしも導入できなくはないが、自社でアップデート対応を保証しなくてはならない。
0919nobodyさん
2008/02/22(金) 13:47:46ID:???0921nobodyさん
2008/02/22(金) 16:15:50ID:???元のソフトがPerlで書かれててPerlなんか一生触りたくないなら、
INなりOUTなりを使い慣れたプログラム言語で作ったフィルタで修正すりゃいいだろ。
一生触りたくないプログラム言語で書かれたソフトのメンテなんて断ればいい。
「どうしても」と言われたら使い慣れたプログラム言語に移植する方向で交渉すればいい。
くだすれで質問した答えを意味も分からずコピペしたソフトを使わされる顧客は悲惨だな。
よほどCPANのモジュールぶちこんでもらった方が安心できるとオモワレ。
モジュールのインストールってそんなに難しいか?
インストール先を自分の権限範囲にすればroot権限いらないモジュールも多いと思うが?
ああ、>>918みたいなクレクレ厨じゃ英語のメッセージは読めないんだな。納得。
0922nobodyさん
2008/02/22(金) 20:36:06ID:???言えば、配布されているCGI-Perlスクリプトを少し直して使いたい人が非常に多い。
こういう層に向かって「勉強しろ」はありえない。
その人はそこで節約した時間を社会奉仕にあてるかもしれない。
Perlはおれの方が少し詳しいかもしれないけど、Perl知ってりゃ偉いわけじゃなし。
ググレとかモジュールのご紹介とかアホを晒す暇があったら処理を書けばいいし、
それが出来ない奴は消えりゃいい。
0923nobodyさん
2008/02/22(金) 20:39:07ID:???ソープランドでセックスしながら説教してるバカオヤジと同じだよ。
普通相手の人生なんて関係ないし興味もないよ。出た問いに答えればいい。
そういうスレなんだから。
0924nobodyさん
2008/02/22(金) 20:47:34ID:8Vusg7lr0925nobodyさん
2008/02/22(金) 20:48:52ID:???0926nobodyさん
2008/02/22(金) 21:26:16ID:???くだすれで顧客とか言ってる奴=>918と>921で桶?
>918
>客先のネットワークによって無保証のモジュールの導入を禁止されている。
>921
>くだすれで質問した答えを意味も分からずコピペしたソフトを使わされる顧客は悲惨だな。
どっちにしろ最初に客先とか言い出した>918がアフォだと思うが。
0927nobodyさん
2008/02/22(金) 21:28:15ID:???どこを縦読み?
0928nobodyさん
2008/02/22(金) 21:40:20ID:???0929nobodyさん
2008/02/23(土) 02:02:05ID:???何で話の流れとは関係の無い仮定の話が出てきてるの?w
0930nobodyさん
2008/02/23(土) 02:07:11ID:???例えばこっちと一緒にするとか。
Perlコーディング初心者質問スレ Part 56
http://pc11.2ch.net/test/read.cgi/php/1189939783/
0931nobodyさん
2008/02/23(土) 03:04:09ID:mggQq9GV掲示板にレス番号を付けるにはどのようにすれば良いのでしょうか?
3.内容
2.内容
1.内容
みたいにして行きたいのですが...具体的に教えて下さい
0933nobodyさん
2008/02/23(土) 03:31:09ID:???5. 資料を示さず持論が支持されていると思わせる
例:(世界では、犬は哺乳類ではないという見方が一般的だ)
0934921
2008/02/23(土) 16:43:38ID:???>配布されているCGI-Perlスクリプトを少し直して使いたい人が非常に多い。
>こういう層に向かって「勉強しろ」はありえない。
スクリプト直すのに、意味も分からずコピペして直すのか。すげえな。
「客先の」とか言ってるって事は、それを金取って(もしくは客へのサービスとして)提供するわけだろ?
拾ってきたスクリプトに掲示板で質問してコピペで手直し加えて金儲けとか、せこすぎる。
そんなもん外注に出せよ。
0936nobodyさん
2008/02/24(日) 03:14:09ID:G7lDCCArhttp://nurupo.biz
さんのdownloadの簡易コメントって奴です
[2/24] 内容
みたいになるのを
[2/24]3.内容
[2/24]2.内容
[2/24]1.内容
みたいにしたいんです
0937nobodyさん
2008/02/24(日) 06:46:40ID:???ダウソしてソース見た。分かった事は下記の通り。
・ データファイルには 日付<TAB>内容 が1件1行で入っていて、レス番は入ってない
・ 最大記事数を超えた分はデータファイルから消える
・ 新しいレスはファイルの先頭に追加される(古いレスほど後ろにある)
・ 表示する時に@DATA(配列)に全レスを読み込んでいる($DATA[0]がファイル内のレス総数)
・ sub print 内では、$begin、$end、$iにファイルの先頭から何行目かを示す数値が入る
とりあえず考えてみた。
試してないから、ちゃんと動くかどうかは保証しない。
どんなレス番の振り方をしたいかわからんので思いつくのを並べてみた。
1. 表示してるページ内でのレス番
97行目 print "[$date] ". ($end - $begin - $i + 1) .". $text\n";
2. ファイルに残ってるレス総数中のレス番
97行目 print "[$date] ". ($DATA[0] - $begin - $i +1) .". $text\n";
3. それまでに書かれた全部の中でのレス番
何行も修正しなきゃならんしデータフォーマットも変わる(=今使ってるとしたらデータ読めなくなる)から、
最初からレス番機能が付いてる別のソフト探したほうがヨサゲ。
どうしてもってんなら考えてやらんこともない。
0938nobodyさん
2008/02/24(日) 10:48:11ID:???0939nobodyさん
2008/02/24(日) 16:26:23ID:mX6RyV0Tわざわざ本当にありがとうございます
2.のファイルに残ってるレス総数中のレス番
で表示をしたいのですが、2.を試してみたところ
[時間]3.内容
[時間]2.内容
[時間]1.内容
[時間]0.内容
[時間]-1.内容
といった風に、どんどんマイナスになってしまいます・・・
0940nobodyさん
2008/02/24(日) 18:48:04ID:???スマソ。
97行目 print "[$date] ". ($DATA[0] - $i +1) .". $text\n";
0941nobodyさん
2008/02/24(日) 19:21:05ID:mX6RyV0T97行目 print "[$date] ". ($DATA[0] - $i +1) .". $text\n";
でやっても>>939と同様の結果になってしまいます・・・
0942nobodyさん
2008/02/24(日) 20:13:54ID:???75行目 my $max = @DATA;
76行目 my $res_no = undef;
96行目と97行目の間に追加 $res_no = $max - $i + 1;
97行目 print "[$date] $res_no. $text\n";
でどうYO?
0943nobodyさん
2008/02/24(日) 20:33:50ID:mX6RyV0Tできました!!!
すごいですヽ( ´ ∇ ` )ノ ワーイ
本当にありがとうございましたワーイ!!\(o ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄▽ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄o)/ワーイ!!
0944nobodyさん
2008/02/24(日) 22:00:31ID:???0945nobodyさん
2008/02/25(月) 00:21:00ID:U/vtQwh8データを読み込んで1行目とフォームの内容が同じの時にエラー表示させればいいんですよね?
0947nobodyさん
2008/02/25(月) 01:33:39ID:???・時間が近すぎる場合、IPアドレスが同一かをチェック
・投稿内容が(数回前までと)同じかをチェック
>>945の方法だと、二重投稿を防止することは出来ても、あらしの連投は防止出来ないよね。
ま、質問自体が二重投稿を防止する方法なので、特に言うことは無いと思うが。
0948nobodyさん
2008/02/25(月) 06:27:19ID:???画面出力命令のオンオフ切替が頻発し
連結してから纏めて出力した方が速い云々
ベンチマークしてないし本当かどうか知らんけどね
0949nobodyさん
2008/02/25(月) 06:44:13ID:???仕様変更でその場で出力じゃなく変数に代入とかになるとウザイ。
0950nobodyさん
2008/02/25(月) 09:45:58ID:???http://boobar.hp.infoseek.co.jp/bench/print.txt
0951nobodyさん
2008/02/25(月) 22:07:36ID:???0952nobodyさん
2008/02/26(火) 22:28:43ID:TAx5gJzCPHPではmime_content_type()という関数があるみたいなんだけど、
Perlではどうやるの?
0953nobodyさん
2008/02/27(水) 00:36:15ID:NLm3jzH+@LOG[0]でやったんですがどうも違ったみたいで
0954nobodyさん
2008/02/27(水) 02:31:06ID:???use CGI;
my $q = new CGI;
$q->uploadInfo($filename)->{'Content-Type'};
>>953
@LOG[@LOG-1]
0955954
2008/02/27(水) 02:37:08ID:???use CGI;
my $q = new CGI;
my $filename = $q->param('uploaded_file');
$q->uploadInfo($filename)->{'Content-Type'};
1行書き忘れた。
0956952,953
2008/02/27(水) 03:43:32ID:???0957nobodyさん
2008/02/27(水) 07:27:20ID:???一番最後の要素ってことなら
$LOG[$#LOG]
0958nobodyさん
2008/02/27(水) 11:51:23ID:???0960nobodyさん
2008/02/28(木) 04:40:38ID:???0961952
2008/02/28(木) 08:35:02ID:5gTQ/iMEレスありがとう
それはロダとかでファイルをアップロードした時の判別方法だよね?
書き忘れたんだけど、LWP::Simpleで外部画像を取得した時に判別する方法を教えてほしいです。
お願いします。
0962nobodyさん
2008/02/28(木) 11:37:27ID:???LWP::Simple はシンプル故に、レスポンスヘッダと
コンテントボディを同時には取得できない。
http://search.cpan.org/dist/libwww-perl/lib/LWP/Simple.pm
普通に LWP でリクエストを送って得たレスポンスからなら
同時に取得できる。
http://search.cpan.org/dist/libwww-perl/lwpcook.pod
http://search.cpan.org/dist/libwww-per/lib/HTTP/Headers.pm
PHP の Fileinfo() 相当のモジュールはこれ。
http://search.cpan.org/dist/File-MMagic-1.27/
レス数が950を超えています。1000を超えると書き込みができなくなります。