【Perl】初心者コーナーPart10
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
02/02/24 22:18ID:zOj6Yq/31:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。
参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://pc.2ch.net/test/read.cgi/php/988809842/
CGIの質問はこちら【CGIだけど、なんか質問ある?part5】
http://pc.2ch.net/test/read.cgi/php/1009331505/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
過去ログ、その他の役立ち情報は>>2-10を見よう。
0312289
02/03/08 17:37ID:wwEgc1iJ自分ではperlは書けない部外者がグズグズとごめんなさい。
使っているのは、無料配布されているCGI軍団です。
おっしゃる通りです。
教えて頂いた場所へ行ってみますね。
お騒がせいたしました。
0313nobodyさん
02/03/08 20:54ID:d+W0Gg3j使えるならやり方を詳しく教えてください。
お願いします。
0314nobodyさん
02/03/08 21:00ID:???>いらっしゃーい、Perlのコーディングで困ってる人のスレです。
0315nobodyさん
02/03/08 21:26ID:???http://www.google.com/search?hl=ja&q=XP%82%C5Apache%82%CD%8Eg%82%A6%82%E9%82%CC%82%A9&lr=lang_ja
0316nobodyさん
02/03/08 21:27ID:???313はXPでapacheを起動するperlスクリプトのコーディングで困ってるんだよ。
system("c:/progra~1/apache/httpd.exe");
0318ge
02/03/09 00:54ID:oQUE7R44エラーがあった場合に、
'C:\Program Files\httpd\cgi-bin\test\test.cgi' script produced no output
とでるだけでエラーが出ないのですが、
DOS から perl を打った時のようにエラー表示したいのですが、
どうしたらよいでしょうか。
0320ge
02/03/09 00:56ID:oQUE7R440321s///o厨
02/03/09 01:08ID:???anHTTPdは安定しないしすぐリソース喰うので好きじゃないが。
0322nobodyさん
02/03/09 01:38ID:kV8ZYAMBuse CGI::Carp 'fatalsToBrowser';
ちかいもんはでるよ。
0323nobodyさん
02/03/09 02:03ID:???0324nobodyさん
02/03/09 03:56ID:???なにも出力しないで終了しやがったってことだろ。
「出力こねーぞ!」ってエラー出してるだろ。
プログラムを見直せ。
AnHTTPDだと、[GI出力を検査]のチェックボックスにチェックがしてあれば、
Perlのエラーを表示してくれるだろ。
0325nobodyさん
02/03/09 06:20ID:???PerlへのパスがPerl.dllになってるとエラー吐かないことあるよね。
Perl.exeだと吐くけど。
0326nobodyさん
02/03/09 09:38ID:biqte+lk0327nobodyさん
02/03/09 11:15ID:fgv50gi6print "777777777777777" % "10" . "\n" ;
これの答え、5になる奴いない?
バージョン5.00503で、答え5になるやつが
あったんだけど、誰か詳細しらん?
0329nobodyさん
02/03/09 11:35ID:fgv50gi6わざとやってんだよ、
いいから、お前はすっこんでろな。
0330nobodyさん
02/03/09 11:36ID:???http://pc.2ch.net/test/read.cgi/tech/991994996/505-519
0332nobodyさん
02/03/09 11:42ID:???http://www.tvdo.net/mrcam/vaiolx/
落ち着いてここのライブ映像でも見てくれ。激しく無料だ。
0333nobodyさん
02/03/09 12:21ID:???0334nobodyさん
02/03/09 12:44ID:???【青春の】衛藤家ライブカメラウォッチ【1ページ】
http://kaba.2ch.net/test/read.cgi/net/1015644999/l50
専門スレがたちました。
0335nobodyさん
02/03/09 13:17ID:???何熱くなってるんだかわからんが、もっとマターリ逝こうよ。
最近人少なくなってるんだからさ。
で、本題ね。
プログラミングやるんなら、16ビット・24ビット・32ビットの最大値くらいは
知っておくべき。
これヒントでもあり解答でもある。
0337nobodyさん
02/03/09 13:47ID:???0338nobodyさん
02/03/09 14:07ID:fgv50gi6おまえ、恐ろしいしったかバカだなぁ〜
あのよ、数字が小さくてもなんだよ。
でな、Perlのバージョンが同じでも、ライブラリのバージョンの違いで、
結果が変わるわけな、
でな、漏れが聞きたかったのは、libcとか、glibcのバージョンの依存があるとかよ、
そおういう事聞きたかったのよ、
ほぉ〜、ビット最大値ねぇ〜、今年になってから変わったっけ?
0339nobodyさん
02/03/09 14:31ID:???> でな、漏れが聞きたかったのは、libcとか、glibcのバージョンの依存があるとかよ、
> そおういう事聞きたかったのよ
じゃあ最初からそう書けばいいのでは。
あなたのような性格の方はこの板よりマ板向けかと思われます。
0340nobodyさん
02/03/09 16:21ID:???では初めからどうぞ。
0341nobodyさん
02/03/09 17:16ID:7LzSOF3K今、imode端末からcgi(perl)をたたくプログラムを作ろうと思ってるのですが
UIDの取り方のアドバイスをいただきたいのです^^;
NULLGWDOCOMOという文字を入れておけば、imodeサーバー側でユーザーIDに変換
してくれるとあったのですが
formをいくつか配置してあるものに
<form method="POST" action="test.cgi?uid=NULLGWDOCOMO">
とかけばよいのでしょうか?
ためしにサーバーにあげてテストしたところuidの値をみたら
そのまま文字列が入っていました。。
どなたかご教授いただけたらうれしいです。
よろしくお願いします。
0342>>341
02/03/09 20:19ID:???でどうでしょう
0343nobodyさん
02/03/09 20:19ID:???0345テストテスト
02/03/10 10:24ID:FplTavEMdocomoに登録申請されて許可されているディレクトリ以下であれば
UIDなる物に変換されます。いよゆるMYMENUです。
勝手なサーバーにやっても変換されません。
ドコモはPOSTサポートしています。一部のウンコ機種だけ使えないだけ。
0346nobodyさん
02/03/10 11:46ID:???ハッシュに、いくつの連想配列が含まれているのかを知りたいのですが、
やり方がわかりません。
わからないので仕方なく、
foreach (keys %HASH) { ++$HASH; }
のようなことをやっています。なにとぞお助け下さい・・・
0348nobodyさん
02/03/10 11:54ID:???0349ドビギナー
02/03/10 12:38ID:???1、最適なRWIN値ってどー出すの!?
2、「同時に張るコネクション数」ってどーゆーこと!?
お前ら、助けて下さい!
0351nobodyさん
02/03/10 12:40ID:Pl5m+TdB自分も>>346 のに興味あったので
%hash = (A=>1,B=>2,C=>3);
$i = %hash/2;
print $i,"\n";
print scalar %hash;
をやって試してみたんですが,
3
6
と予想したのに
1.5
3/8
が表示されました。
なんでこうなるんですか?
0354テストテスト
02/03/10 12:49ID:FplTavEM板違い。そんなものビギナーが気にする必要なし。
どこかのアアホサイト見てるんだけうが
HTTP 1.1でセッションを100個張るレジスト書き換え.regファイルとか
配布してるが、意味がないしスーパー迷惑なのでやめれ。
0355347
02/03/10 12:51ID:???$num = keys %HASH;
でいいみたい。(keys のかわりに valuesでもいいんだって)
http://plaza27.mbn.or.jp/~satomii/jdoc/perltut/associative.html
0356ドビ
02/03/10 12:52ID:???あと、板違いってことも気付いた。
ごめんな。
0358351
02/03/10 13:02ID:???%hash = (A=>1,B=>2,C=>3);
$i = %hash;
print($i,"\n");
print(%hash+0);
だと
3/8
3
になりました。
OS依存かと思って調べてみたら
http://www.kt.rim.or.jp/~kbk/perl5.005/perldata.html
>返される値は使 用しているエントリの数と、割り付けられているエントリの数を、スラ ッシュで区切った文字列です
らしいです。
お騒がせしました。
0359nobodyさん
02/03/10 13:10ID:???%h = (1,2,3,4,5,6,7,8,9,10);
print scalar keys %h,"\n";
print scalar %h,"\n";
が
5
4/8
って返ってくるんだよね。エントリ=要素ではないのかな。
0362nobodyさん
02/03/10 15:12ID:GU0dbd6s調べることってできるんでしょうか。例えば、bbs.cgiっていうCGIの中で、
bbs.cgiっていう文字列を自動的に得たいのです。同じコードをあっちこっちで
使っていて、更新するときに中身の書き換えを不要にするためです。
0363341
02/03/10 15:12ID:Ew4WhUAiそか、、NTTが許可したサーバーでだけ使えるんですね^^;
アドバイスありがとうございました。
0365nobodyさん
02/03/10 15:21ID:GU0dbd6sお、それはヒントですか?調べてみます。ありがとうございます!
0367365
02/03/10 15:28ID:???なんでだ??うそっぱちか?
>>$0 #perlスクリプトのコマンド名
コマンド名ってのがcgiファイル名ってことですね??言葉が難しいや。
0369365
02/03/10 15:34ID:???できたー!!すげー、一見汎用性あるっぽくてカコイイ!!
0370nobodyさん
02/03/10 15:35ID:???なんかエラーがでて文字列の長さが取得できないんですが…。
0371370
02/03/10 15:40ID:???何故…。
0372370
02/03/10 15:44ID:???#!perl
use utf8;
length '時';
__END__
しかし問題なのは実際のコードでは use utf8 などしていないということ(鬱
0373365
02/03/10 15:56ID:GU0dbd6sなんていうんだろう、urlっていうのかパスっていうのか、よくわからないんですけど
http〜〜〜cgi-bin/bbs/bbs.cgi
みたいな感じのものを調べたいのです。
0374nobodyさん
02/03/10 16:00ID:???utf8で保存してる?
>しかし問題なのは実際のコードでは use utf8 などしていないということ(鬱
何か他にモジュール使ってない?
0375nobodyさん
02/03/10 16:06ID:???print 'http://' . $ENV{'HTTP_HOST'} . $ENV{'SCRIPT_NAME'};
で出るかな?
0376370
02/03/10 16:08ID:???どうやらDBI+DBD::SQLiteでDBからフェッチした文字列がおかしい模様…。
でもJcode::getcode()で調べてもEUC-JPなので謎です。
0380nobodyさん
02/03/10 16:26ID:???そうするとpanicは避けられるっぽいです。
ただそうすると大幅に書き換えなければいけないので出来れば避けたいです…。
# とりあえず完全に再現できるスクリプトを書き中…
0381365
02/03/10 16:28ID:GU0dbd6s>>375、>>378
ありがとうございます!$0みたいにずばりはないんですね。
ちょっと調べてみます。
0382370
02/03/10 16:48ID:???これで
"panic: utf8_length: unaligned end at test.pl line 20."です
#perl -w
use DBI;
unlink 'test.db';
my $dbh = DBI->connect('dbi:SQLite:test.db');
$dbh->do(<<_SQL_);
CREATE TABLE test( foo CHAR(100) );
INSERT INTO test VALUES('テストだよ');
_SQL_
my $sth = $dbh->prepare(<<_SQL_);
SELECT * FROM test
WHERE foo like '%';
_SQL_
$sth->execute();
$\ = "\n";
while($_ = $sth->fetchrow_arrayref()){
print length($_->[0]);
}
__END__
0384nobodyさん
02/03/10 16:58ID:???use Jcode; して、20行目を
print length (jcode($_->[0])->utf8);
にしてみるとどう?
0385370
02/03/10 17:07ID:???->utf8()では問題無しですが、->euc()だとpanicです
察するに内部フラグがどうにかなってるっぽいんですが…。
# さっきのスクリプト後半
$\ = "\n";
print join ' ', unpack 'C*', ('テストだよ');
print length 'テストだよ';
while($_ = $sth->fetchrow_arrayref()){
print join ' ', unpack 'C*', ($_->[0]);
print length $_->[0];
}
__END__
出力:
165 198 165 185 165 200 164 192 164 232
10
165 198 165 185 165 200 164 192 164 232
panic: utf8_length: unaligned end at test.pl line 23.
0386384
02/03/10 17:23ID:???utf8なやつだと解釈しようとして失敗してる(eucなんだから当然)からなわけで。
だからlengthに渡すものをutf8に変換しておこう、と言う改造をしてみたんだが。
納得いかないならこんなのとか。
{
no utf8;
$\ ="\n";
while ($_ = ....){
print length($_->[0]);
}
}
0387384
02/03/10 17:34ID:???なんか勘違いした事書いたかも。スマソ。
0388370
02/03/10 17:41ID:???申し訳ない、>>384が目に入ってませんでした。
それでOKです!
いろいろ試した結果、eval qq{"$_->[0]"}でも正常化できるみたいです。
でもno utf8じゃダメっぽいです…。
とりあえず、解決たので一安心です。
どうもありがとうございました。
0389nobodyさん
02/03/11 01:26ID:???今さらでスマンが、
keysやvaluesでいくと%HASHが巨大だった場合に危険じゃない?
どうせやるなら
++$num while (my ($key, $value) = each %HASH);
とか?めんどくさいけど。
0390nobodyさん
02/03/11 01:56ID:???代入はいらないのじゃない?
0391nobodyさん
02/03/11 02:00ID:???スカラコンテキストで使うとそれぞれの数を返すっていうkeysやvaluesの機能でしょ.
内部でいちいち展開して数を数えるような,非効率的な事はやっていないと思うよ.
use Benchmark;
my $num = 0;
my %hash;
for (1 .. 1000000) { $hash{$_} = $_ }
timethese 1 => {
'++' => sub { ++$num while (my ($key, $value) = each %hash) },
keys => sub { $num = keys %hash }
};
# 結果
#
# Benchmark: timing 1 iterations of ++, keys...
# ++: 5 wallclock secs ( 4.79 usr + 0.00 sys = 4.79 CPU) @ 0.21/s (n=1)
# keys: 0 wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CPU)
0392nobodyさん
02/03/11 02:46ID:???$num = keys %hash;
○
++$num while each %hash;
×
++$num foreach keys %hash;
0393nobodyさん
02/03/11 13:07ID:ILIPqmP1while文で只管ぐるぐる回して
5秒ぐらいで処理を抜けるような感じにしています。
でも、なんかもっとちゃんとした方法があると思うんですがどんな方法があるんでしょうか?。
0395393
02/03/11 14:17ID:???やはりこういうものがあったんですね(^^
ありがとうございました。
もっと勉強してきます・・・
0396nobodyさん
02/03/11 18:53ID:???コレを見てくれ!
0397nobodyさん
02/03/12 02:51ID:???スクリプトがわからないのでお教えいただけませんでしょうか?
または参考URLをお願いします。
0398nobodyさん
02/03/12 02:56ID:???0399sage
02/03/12 03:05ID:XpAJ+W0c0401nobodyさん
02/03/12 03:31ID:???基本はこれだけど, Perl5からは srandで種作らなくても自動で最適な種が作られるようになってる。
srand time;
print rand 100;
0403nobodyさん
02/03/12 04:52ID:52qV3w5qシステム公開してるとこ、無いですかね、
しっかりした、ソース見て勉強したいんですけど、
0404nobodyさん
02/03/12 04:53ID:52qV3w5q0〜100未満のランダムな数がくるぞ
(少数含むから、気をつけれ!)
0405nobodyさん
02/03/12 06:34ID:mNSx+HCB「更新」ボタンの無効化ってどうやるんですか?
0406nobodyさん
02/03/12 07:25ID:???・・・
0409nobodyさん
02/03/12 10:43ID:???それか、アプローダとかでリロードしないで欲しいとか。
0410nobodyさん
02/03/12 11:09ID:???0411370
02/03/12 11:10ID:???ふと思いついてDevel::Peekでダンプしてみたところ
SV = PV(0x1c4a57c) at 0x1c2f258
REFCNT = 1
FLAGS = (POK,pPOK,UTF8)
PV = 0x1c8aff0 "\245\306\245\271\245\310\244\300\244\350"\0
CUR = 10
LEN = 11
やっぱりUTF8フラグが立っている模様。
これ、バグですよねぇ…。英語書ける方、誰か報告してくれないかな…。
0412405
02/03/12 13:34ID:eWSq/Ah6submitでhtmlの情報をcgiに送る。
↓
cgiがログファイルをいじる。
↓
cgiが呼び出されて表示されたその画面で「更新」ボタンを押す。
↓
もう一度ログファイルをいじる。
↓
ログファイルが変になる。
↓
(+д+)マズー!
具体例。
ログファイルの配列:@array=(0,1,2,3)
一度目push(@array,4);という命令を出す。→@array=(0,1,2,3,4)→ログファイルに書き込む
リロードするともう一度push(@array,4)を実行する→@array=(0,1,2,3,4,4)
→困る。どなたか対策を教えてください。
■ このスレッドは過去ログ倉庫に格納されています