Perl コーディング初心者質問コーナー Part37
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/08/22 01:41ID:???誰もが最初は初心者。
だからって、初心者に甘んじた質問の仕方は意味がないよ。
【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
0055いらすま
04/08/24 21:03ID:Hn5K2dOO掲示板の背景の色をかえたいのですが、どうしたらよいので??
0059nobodyさん
04/08/24 22:30ID:???ってまあ74バイト区切りで改行いれなきゃいけないとか面倒なことがあってそれだけじゃたりないんだっけ?
フォームメールなんて作ったことないからわからんなw
0061nobodyさん
04/08/24 23:20ID:???0063nobodyさん
04/08/25 00:17ID:???0064nobodyさん
04/08/25 00:40ID:???最近オブジェクト指向でモジュールを1個作ってみたんだけど、確かに再利用性は高いし
インターフェースだけ覚えとくだけで便利なのは間違いないけど、それってライブラリもそんなに大差ないよね。
ライブラリの方が手軽だしさ。
まあDBIくらいになるとオブジェクト指向の方がいいんだけど、みんなはどんな感じで使ってる?
やっぱ小中規模であれば、1個モジュール1個ライブラリってのがいいと思うんだけどさ。
0065nobodyさん
04/08/25 00:48ID:???メインルーチンを再利用したいなら、クラスモジュールにしとく方が有利かも。
0066nobodyさん
04/08/25 01:06ID:???ほう!そうゆう考え方が主流なのね。
基本的にある程度の振る舞いをもったオブジェクトが欲しい時とか
一貫性のある処理でそれだけで独立させたいときがムジュール。
ちょっとこれだけ再利用。みたいなものの集まりをライブラリとするってのが賢いよね。
ボンジュ〜ル?
0067nobodyさん
04/08/25 01:17ID:???0069nobodyさん
04/08/25 10:09ID:piXV00NL画像連結ライブラリを使うと本当に読み込みが早くなるのでしょうか?
返答よろしくお願いします
0070nobodyさん
04/08/25 10:13ID:???007169
04/08/25 11:23ID:???0072nobodyさん
04/08/25 11:24ID:???カウンタなんて小さい画像の集まりだから、HTTPヘッダによるオーバーヘッド分がなくなるだけでも有利でしょうな。
大きな画像連結なら負荷やメモリを気にするところだが。
Perlの手始めは向いてるね。カウンタ。
0074nobodyさん
04/08/25 11:34ID:???0075nobodyさん
04/08/25 11:36ID:???0077nobodyさん
04/08/25 11:40ID:???0078nobodyさん
04/08/25 12:39ID:???お前みたいにくだらない部分にこだわるやつに限ってゴミソースで重かったりする。
だまってテーブルレイアウトやめればそんなくだらない差は気にならなくなる。
ついでに言うと連結処理あり、なしのベンチとってそれもちゃんと考慮に入れろや。
0079nobodyさん
04/08/25 18:46ID:???1000ファイルもあると I/O のコストの方が高くならない?
逆にHTTPサーバーの方のキャッシュが期待できる連結なしの方が早くなりそうだし、
最適化の仕方次第で結果が代わったりするんじゃないかな。(予想だけど
ベンチマークとるなら実際の運用環境に近い条件でやらないと意味がないと思う
>>69
GIF画像の連結はやったことないので、一般的な回答になるけど。
アルゴリズムの優劣とかならはっきりとした一般答がでるかもしれない、
でも、こういった、環境や実装に大きく依存するベンチマークは自分でとらないと役にたたない。
画像連結の方法だけとってみても、perlでやるのか、ライブラリか、外部プログラムに頼るのかで結果が代わってくるはず。
0080nobodyさん
04/08/25 18:59ID:???この場合、キャッシュは考慮すべきといっても、offにすべきではないと思う。
連結なしの場合、httpヘッダでcache controlや期限を適切に設定していれば、
ファイルを送る必要はなく文字列出力だけで済む事もあるのだから。
クライアント数とアクセス数を分けて考えてテストする必要がある。
(再訪問者が多い場合にクライアント側のキャッシュの効果が期待できる)
0081nobodyさん
04/08/25 19:21ID:???http://pc5.2ch.net/test/read.cgi/php/1060009605/l50
0082nobodyさん
04/08/25 19:25ID:???(;・∀・)また、騙されたの?
ttp://pc5.2ch.net/test/read.cgi/php/1060009605/
% kill -9 81 || kill -9 81 || kill -9 81
% killall -TERM me
0083nobodyさん
04/08/25 23:12ID:???今回に限って言えば、ベンチは意味が薄いのではないだろうか。
サーバとの経路とかでも結果が大きく変わるだろうし。
0084nobodyさん
04/08/26 00:15ID:???2種類のレスポンスを返す方法ってありますか?
例えば
GETで要求されたURLの応答に
200 OK
を返した直後にクライアントとの接続を閉じずに
304 Not Modified
を返せるような。
どなたかお知恵を貸してください。お願いします。
0085nobodyさん
04/08/26 00:19ID:???無理。
どういう理由でそういうことをしたいのかを明確に書けば別解のアドバイスが出てくるかも知れず。
でも、ここはperlコーディングスレなので、webprog 初心者スレの方がいいんじゃないかな。
0087nobodyさん
04/08/27 07:40ID:gO3gmMRy作ればよいのでしょうか?
例えばどこかのhtmlから<!--#exec cmd="ransuu.cgi"-->を呼び出すと
253145968や040104580とかランダムな9桁の数値を返すものです。
全くの初心者で困っています。教えて下さい、お願いします。
0088nobodyさん
04/08/27 07:52ID:???009288
04/08/27 15:08ID:???0093nobodyさん
04/08/27 17:15ID:???<INPUT type="submit" name="Reload" value="再読込">
</FORM>
こんな感じでホームページに設置されているボタンを押すPerlスクリプトって作れないでしょうか。
0095nobodyさん
04/08/27 18:07ID:???こういう感じのサーバなのです
1.FTPサーバーに管理ファイルをアップする。
2.社内のローカルホスト(http://192.168.0.200:8080/reload.html)にアクセスして更新ボタンを押して更新完了
3.上記をファイルの数だけ繰り返す
私のところに1の管理ファイルがバイトから1日10件くらい集まるので、
これをいちいちアップして更新して・・・というのは、かなり面倒なのですが、
社内鯖の仕様を変更するのは問題があるので、自動でアップ処理してくれるスクリプトを組もうと思った次第です。
最終的には
1.設定フォルダ内のファイルを社内鯖にアップする
2.更新ボタンを押す
3.これを毎朝9時に行う
ということをしたいのです。
0096nobodyさん
04/08/27 18:17ID:ScoK2mkg対策@私の場合
1.バイト君にFTPサーバーの特定のディレクトリにファイルをうpするように指示をする。
2.その特定のディレクトリを監視するスクリプトを、例えばcronで1時間ごとに起動して、
ファイルが存在すれば何らかの更新作業をさせる。
3.私は他の作業をする。
0097nobodyさん
04/08/27 18:17ID:???0098nobodyさん
04/08/27 18:50ID:???0099nobodyさん
04/08/27 18:53ID:???getならリクエスト1個で終わるんだけどね
0100nobodyさん
04/08/27 19:08ID:???010293
04/08/27 19:15ID:???WWWは扱ったことがないので、ぐぐって勉強してます。
>96
支給されてるクライアントがNTなので、タスクマネージャーで実行しようと思ってます。
>99
サーバ側の仕様には手を出せないのでPOSTでがんばってます。
>100
ttp://member.nifty.ne.jp/hippo2000/perltips/LWP.html
これでいいんでしょうか? 入手してみます。
0103nobodyさん
04/08/27 20:43ID:???0104nobodyさん
04/08/27 22:09ID:ScoK2mkg> 支給されてるクライアントがNTなので、タスクマネージャーで実行しようと思ってます。
ではそれで毎日9時に動くようにすれば?
でもってなぜCGIが必要なんだろう?
確認ならばメールで通知、返信すれば自動で更新作業させるなりと方法はあるのに。
0105nobodyさん
04/08/27 22:28ID:???ブラウザ立ち上げておかないといけないし、強制終了してしまっていたら立ち上げなおしたりしなきゃいかんし。
0106nobodyさん
04/08/27 22:34ID:???おまえら少しは文章を嫁
010793
04/08/27 23:10ID:???ttp://digit.que.ne.jp/work/index.cgi?Perl%a5%e2%a5%b8%a5%e5%a1%bc%a5%eb%2fLWP#i5
この辺りを読んで解決しました。また1つ賢くなれました。ありがとうございました。
0110nobodyさん
04/08/28 13:06ID:???ボタンを押すのが簡単ってのは人間が操作する場合で、プログラムにとっては、POSTリクエスト送る方が簡単。
プログラムでそういったことをエミュレートしたいなら、ブラウザのオートメーションを調べてみるといい。
冗長になるは言うまでもないけど。一応フォローしておくと、
HTTPの仕組みを知らない人にとってはこっちの方がコードが簡潔だったりする、
ちょっとした用途にスクリプトを書く場合でもコードを大幅に節約できるといった利点がある.
0111nobodyさん
04/08/28 17:38ID:???0112nobodyさん
04/08/29 22:39ID:???エスケープが必要な文字の検索で詰まってます。
$str =~ s/($key)/<$1>/g;
こんな感じで、ヒットしたキーの前後に文字を追加してるんですが、
これだと、正規表現の文字(ドット. や プラス+ )自体を検索することが
できません。
何かいい方法ありますでしょうか
0113nobodyさん
04/08/29 22:53ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq6.html#How_do_I_match_a_pattern_that_is
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlre.html
http://perldoc.com/perl5.8.4/pod/func/quotemeta.html
0115nobodyさん
04/08/30 10:02ID:???0116nobodyさん
04/08/30 10:28ID:???0117nobodyさん
04/08/30 13:20ID:WEq7wEdz"/" でセパレートされた文字列を分解してそれぞれ配列に入れたいのですが、
どうすればいいか教えてください。
0122nobodyさん
04/08/30 17:23ID:???0123nobodyさん
04/08/30 17:29ID:I+lehIeA以下のようにやってもエラーになります。
perl -e '$var=1; $var1=1; $var2=1; print "Ok!\n" if ($var==$var1==$var2==1);'
どうやったらいいのでしょうか。おせーてください。
0125nobodyさん
04/08/30 17:41ID:???えっと、>>123の場合は、1なので、==をandに代えればできますが、他の数の場合
まずいです。
perl -e '$var=1; $var1=1; $var2=2; print "Ok!\n" if ($var and $var1 and $var2 and 2);'
これでもOk!になってしまいます。
0126123=125
04/08/30 17:44ID:???($var == 1 and $var1 == 1 and $var2 == 1)
もっと簡単な方法がないかと思ったものですから。
24ケースくらいあるんで書くのたいへん(TT)
0127nobodyさん
04/08/30 17:52ID:???my @var1 = (3, 3, 3, 3, 3, 3);
my %tmp = (); @tmp{@var1} = ();
print "var1 ", 1 == keys %tmp ? 'ok.' : 'no.', "\n";
my @var2 = (2, 2, 2, 2, 4, 2);
%tmp = (); @tmp{@var2} = ();
print "var2 ", 1 == keys %tmp ? 'ok.' : 'no.', "\n";
0129nobodyさん
04/08/30 17:56ID:???0131nobodyさん
04/08/30 18:47ID:???0132nobodyさん
04/08/30 19:53ID:???比較では不確定なモノを左に書くのが一般的。
これを逆に書くと何となく気持ちが悪い。
それを何とも感じないヤシはセンスが悪い。
0133nobodyさん
04/08/30 20:15ID:???もしバカがその人だったらぶん殴ってやる
0134nobodyさん
04/08/30 20:58ID:???0135123=125
04/08/30 21:04ID:???高度な技を伝授いただきありがとうございます。
@tmp{@var1} = ();
というところですが、ハッシュの配列ということでしょうか。
これは、らくだ本にも出ていますでしょうか。今手元にない
のですが。
0136nobodyさん
04/08/30 21:07ID:???0138nobodyさん
04/08/30 21:23ID:???http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perldata.html
0139nobodyさん
04/08/30 21:33ID:c+ZgByNiどうやればよいでしょうか。
0140nobodyさん
04/08/30 21:44ID:???その言い訳は何年も前に死滅したはずだが?
Found = in conditional, should be == at -e line 1.
頭が化石になってますよ。
0141nobodyさん
04/08/30 23:29ID:WEq7wEdzfor(0..10) {
・・・・・
}
}
ネストさせると、最初のfor文は$_ですが、中のfor文は何になるのですか?
0145nobodyさん
04/08/30 23:59ID:???変な質問ですみません。
>>143
ネストしてても一緒なんですか。
for(0..10) {
for(0..10) {
$data[$_][$__] = ・・・
・・・・・
}
}
だったらいいなと勝手に思ってました。
そうすると
for(0..10) {
for($i=0; $i<10; $i++) {
$data[$_][$i] = ・・・
・・・・・
}
}
とすべきなんですね。
0146nobodyさん
04/08/31 00:56ID:???for(0..10) {
for my $i (0..10) {
$data[$_][$i] = ・・・
・・・・・
}
}
0147nobodyさん
04/08/31 04:35ID:nQH60qUMwinxpにversion 5.005_03 built for MSWin32-x86-objectですが、思ったとおりにtruncateが動作しません。
open(FILE,'>aaa.txt');
print FILE "aaaaaaaa";
seek(FILE,0,0);
truncate(FILE,0);
print FILE "bbbb";
close(FILE);
これは、思ったとおりに動きます。aaa.txtは「bbbb[eof]」の4バイトになります。
$aaa='FILE';
open($aaa,'>aaa.txt');
print $aaa "aaaaaaaa";
seek($aaa,0,0);
truncate($aaa,0);
print $aaa "bbbb";
close($aaa);
これは、なぜか「bbbbaaaa[eof]」の8バイトになります。
seekは正しく機能して、truncateは機能していないからこの結果だと思うのですが、なぜ機能しないのでしょうか。
上の例を見ても、truncate機能自体はあると思うのですが・・・
0149nobodyさん
04/08/31 06:56ID:???■ このスレッドは過去ログ倉庫に格納されています