Perl コーディング初心者質問コーナー Part37
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/08/22 01:41ID:???誰もが最初は初心者。
だからって、初心者に甘んじた質問の仕方は意味がないよ。
【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは >>2-10
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:???0152nobodyさん
04/09/01 00:24ID:IFM26Jlfダウンロードというボタンをおしたら、CSVがダウンロードできる仕組みにしたいです、
0155nobodyさん
04/09/01 01:15ID:IFM26Jlfだれか教えてください。
ダウンロードというボタンをおしたら、CSVがダウンロードできる仕組みにしたいです。
が正解でした。といううことでおしえてください
0156nobodyさん
04/09/01 01:23ID:???教えてやろう。
PerlもCGIも使わなくてもできる。
よって板違い。
0157nobodyさん
04/09/01 01:47ID:IFM26Jlf0158Pearl
04/09/01 01:56ID:???...
END
と終端文字列を記述すると何も表示されないのに、
print "...";
print <<"END";
...
END
とすると表示されます。(print"...";の内容は表示されません)
これは何故なんでしょうか??
初心者ですいません…。
0159nobodyさん
04/09/01 02:16ID:???0160nobodyさん
04/09/01 12:01ID:VNRqZmighashでの実装、use fieldsでの実装
どちらがいいんでしょうか?
fieldsのが便利だと思うんですが、
内部でpseudo-hashを使ってる?らしく
pseudo-hashは今後推奨されなくなるようで
その辺り困ってます。
--------------------------------------
sub new {
my( $class, $name, $height ) = @_;
my $this = {
'name' => $name,
'height' => $height
};
bless $this, $class;
}
--------------------------------------
use fields qw( name height );
0161nobodyさん
04/09/01 12:17ID:???5.9.0以降ではpseudo-hash使わない実装に変更されたので
普通に使う分には問題ないんじゃなかったっけ。内部の
phash直接触るような行儀悪いプログラム書いてりゃ別だけど。
0162nobodyさん
04/09/01 12:33ID:VNRqZmigありがとうございます!
なるほど、確かに、phashを直接使うなみたいな事は書いてありました。
perl6になったらこの辺も変わりそう?ですし、
perl5では、これでいいってことで!
0163nobodyさん
04/09/01 18:16ID:GIk9V8QY日本語を使う時には特別な処理が必要なのですね。
今いろいろなサイト見てますが、皆さんのオススメの解説サイトがありましたら教えてください。
おながいしますm(_ _)m
0164nobodyさん
04/09/01 18:28ID:???メール送信の基本はperlに限ったことではないが
0166163
04/09/01 19:59ID:GIk9V8QY件名の分だけ他とは違うエンコードをしないといけないという意味です。
>>165
そうなのです。あまりいいところが見つからないのです。
実際のサンプルソースとかを載せながら解説してるサイトがあるといいなと思ったのですが;
0167nobodyさん
04/09/01 21:10ID:???0168nobodyさん
04/09/01 21:49ID:Fq5X9xKH上記のコードでリダイレクトさせる前に
htmlタグを読み込ませたいと思います。
<IMG SRC="http://www.hogehoge/test.cgi" width=1 height=1>
例えば上記のようなタグを読み込ませたい場合、
どのようにコードすればいいのでしょうか?
おながいします
0169nobodyさん
04/09/01 22:00ID:???お勧めサイトは(・∀・)ココダ!!
ttp://www.ietf.org/rfc/rfc2047.txt
>>168
うーん。
> width=1 height=1
リダイレクトした「数」をカウントできればいいというわけではないの?
0170nobodyさん
04/09/01 22:06ID:3SqQ1yBxprint "Location: (p)http://www.yahoo.co.jp/\n\n";
0171>>163
04/09/01 22:26ID:5tu92ZqP$subj = MIME::Words::encode_mimeword($subj, 'B', 'iso-2022-jp');
0173nobodyさん
04/09/01 22:39ID:???0174168
04/09/01 22:51ID:Fq5X9xKHレスありがとうございます。
そうですね、数をカウントできればいいというわけではないです。
$hoge = file( "http://www.hogehoge/test.cgi" );
これについてなんですが、
http://www.hogehoge/test.cgi の部分に変数を用いたい場合、
どんな感じになるでしょうか?初歩的な質問すいません。
http://$variable.com/test.cgi のようなURLにしたいのですが。
$hoge = file( "http://$variable.com/test.cgi" );
で変数として扱われるんでしょうか?
0175163
04/09/02 01:14ID:hfUgeMHv英語よめません;
>>171>>173
>$subj = MIME::Words::encode_mimeword($subj, 'B', 'iso-2022-jp');
これって5.8でないと駄目なんですか?使用サーバのperlは5.6ですが。
後、このモジュール?ライブラリ?ってRFC2047の
1.encoded-word は 75バイト以内でなければならない.
2.encoded-word を含む行は 76バイト以内でなければならない.
をクリアしてないですよね?PERLメモ読んでて、とりあえずBASE64エンコードは
なんかのモジュールでやるとしても1と2をどうしようかと迷ってます。
みなさんはちゃんと1と2に対応したサブルーチン等を作ったりしてるんでしょうか?
■ このスレッドは過去ログ倉庫に格納されています