トップページ⇒php
1001コメント404KB

Perl コーディング初心者質問コーナー Part33

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/03/01 02:46ID:1GeWO7LH
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

過去ログやお勧めサイトは >>2-10
0002nobodyさん04/03/01 02:49ID:1GeWO7LH
関連スレ
【Perl上級者コーナーPart01】
http://pc2.2ch.net/test/read.cgi/php/1024741312/
CGI: Common Gateway Interface part 11
http://pc2.2ch.net/test/read.cgi/php/1055597189/
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
★三 【 スクリプト改造工房 PART 8 】 ★三
http://pc2.2ch.net/test/read.cgi/php/1077525387/
【 スクリプト改造依頼スレ 】(丸投げ)
http://pc2.2ch.net/test/read.cgi/php/1076831972/
△▲ WebProg 初心者の質問 Part7 ▼▽
http://pc2.2ch.net/test/read.cgi/php/1073460282/
【Perl】ファイルロック(排他処理)について語ろう
http://pc2.2ch.net/test/read.cgi/php/1024795138/
★負荷軽減対策委員会(Perl、PHP)★
http://pc2.2ch.net/test/read.cgi/php/1034645635/
【Perl】掲示板を使ろう!
http://pc2.2ch.net/test/read.cgi/php/988890976/
Perlモジュールについて
http://pc2.2ch.net/test/read.cgi/php/997829243/
CGIに依存しないPerlの話題一般/Part2
http://pc2.2ch.net/test/read.cgi/php/1030548610/
0003nobodyさん04/03/01 02:49ID:1GeWO7LH
[過去ログ] 1 of 2

Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980 参照不能
 DAT: http://tako.2ch.net/perl/dat/957208980.dat
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087 参照不能
 DAT: http://tako.2ch.net/perl/dat/971817087.dat
Part3 http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521 参照不能
 DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part4 http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156 参照不能
 DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part5 http://pc.2ch.net/php/kako/988/988728069.html
Part6 http://pc.2ch.net/php/kako/996/996075607.html
Part7 http://pc.2ch.net/php/kako/1000/10002/1000267444.html
Part8 http://pc.2ch.net/php/kako/1003/10039/1003900311.html
Part9 http://pc.2ch.net/php/kako/1009/10095/1009549309.html
Part10 http://pc.2ch.net/php/kako/1014/10145/1014556702.html
Part11 http://pc.2ch.net/php/kako/1017/10172/1017201229.html
Part12 http://pc.2ch.net/php/kako/1019/10199/1019917048.html
Part13 http://pc.2ch.net/php/kako/1022/10227/1022731565.html
Part14 http://pc.2ch.net/php/kako/1026/10269/1026977659.html
Part15 http://pc.2ch.net/php/kako/1028/10288/1028816385.html
0004nobodyさん04/03/01 02:50ID:1GeWO7LH
[過去ログ] 2 of 2

Part16 http://pc.2ch.net/php/kako/1032/10320/1032070299.html
part17 http://pc.2ch.net/php/kako/1034/10345/1034583844.html
part18 http://pc.2ch.net/php/kako/1037/10377/1037797479.html
part19 http://pc.2ch.net/php/kako/1042/10422/1042260745.html
part20 http://pc2.2ch.net/php/kako/1044/10447/1044717887.html (タイトルに19と誤記)
part21 http://pc2.2ch.net/php/kako/1047/10479/1047980851.html
part22 http://pc2.2ch.net/php/kako/1050/10503/1050369328.html
part23 http://pc2.2ch.net/php/kako/1053/10530/1053051519.html
part24 http://pc2.2ch.net/php/kako/1054/10549/1054992610.html
part25 http://pc2.2ch.net/php/kako/1056/10567/1056730690.html
part26 http://pc2.2ch.net/php/kako/1059/10590/1059043704.html
part27 http://pc2.2ch.net/php/kako/1060/10608/1060808783.html
part28 http://pc2.2ch.net/php/kako/1063/10635/1063562491.html
part29 http://pc2.2ch.net/php/kako/1066/10662/1066286828.html
part30 http://pc2.2ch.net/test/read.cgi/php/1069846177/
part31 http://pc2.2ch.net/test/read.cgi/php/1072896288/
part32 http://pc2.2ch.net/test/read.cgi/php/1075545279/ (タイトルに31と誤記) 前スレ

[ひまぢん氏のミラー]
Part1 http://www.angelfire.com/ak5/2ch-web-program/kako/957208980.html
Part2 http://www.angelfire.com/ak5/2ch-web-program/kako/971817087.html
Part3 http://www.angelfire.com/ak5/2ch-web-program/kako/979894521.html
Part4 http://www.angelfire.com/ak5/2ch-web-program/kako/984430156.html
Part5 http://www.angelfire.com/ak5/2ch-web-program/kako/988728069.html
0005nobodyさん04/03/01 02:51ID:1GeWO7LH
[総合]
 ・http://www.excite.co.jp/world/ # 英文のページ多いから一応
 ・Perl Com: http://www.perl.com/
 ・CPAN.com: http://search.cpan.org/
 ・ActivePerl: http://www.activestate.com/
 ・CGI-ML:http://forest.ne.jp/cgi-ml/

[お薦め]
 ・Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm ★読んどけ
 ・Perl Recipes: http://www.effectiveperl.com/recipes/ # 死んでるか?
 ・Randal's WebTechniques columns: http://www.stonehenge.com/merlyn/WebTechniques/
 ・Perlの部屋: http://www.cc.rim.or.jp/~midorin/mad-p/perl/index.html
 ・Perl初心者の部屋:http://www.harukaze.net/~mishima/perl/
 ・Perlリファレンス:http://www.big.or.jp/~mio/ga/pl/plref/pl_ref.htm
 ・Perlのページ:http://homepage1.nifty.com/nomenclator/perl/
0006nobodyさん04/03/01 02:53ID:1GeWO7LH
 [Document&Tutorial]
 ・Home - Japanized Perl Resources Project: http://perldocjp.sourceforge.jp/
 ・Perl Monks: http://www.perlmonks.org/
 ・use Perl; : http://use.perl.org/
 ・Learn Perl - Perl Education: http://www.devdaily.com/perl/edu/index.shtml
 ・Perldoc.com: http://www.perldoc.com/
 ・Using Perl5 in Web: http://docs.rinet.ru/Using_Perl5_in_Web/
 ・Rex Swain's Home Page: http://www.rexswain.com/
 ・Robert's Perl Tutorial: http://www.netcat.co.uk/rob/perl/win32perltut.html
 ・Perl Tuts: http://savage.net.au/Perl-tutorials.html
 ・Beginning Perl Tutorials: http://www.pageresource.com/cgirec/index2.htm
 ・jcode.pl の私的な解説書: http://www.mikeneko.ne.jp/~lab/kcode/jcode.html
 ・Logical Choice Software, Home Page: http://www.logsoft.com/perltips/
 ・Perlfect Solutions: http://perlfect.com/
 ・The Perl Archive : http://www.perlarchive.com/
 ・Perl6 & Parrot VM についての情報: http://dev.perl.org/perl6/
 ・use Object; : http://perl.infoware.ne.jp/
0007nobodyさん04/03/01 03:36ID:???
前スレはけっこうキレイに終わりましたね。
0008nobodyさん04/03/01 04:21ID:???
今年もよろしく
0009nobodyさん04/03/01 04:45ID:???
今月もよろしく
0010nobodyさん04/03/01 09:06ID:???
今週もよろしく
0011nobodyさん04/03/01 11:13ID:???
今日もよろしく
0012nobodyさん04/03/01 15:07ID:OuFmXd5y
質問です。
現在GIFカウンタ作っています。
QUERY_STRINGの値で、昨日・今日・合計の三つの数値のどれを呼び出すかを決めています。
例えば<img src="counter.cgi?total">と書けば、カウントが1増えた合計値が表示されるのはいいのですが、
<img src="counter.cgi?total"><img src="counter.cgi?today">などと書いた場合、
?totalで+1された後に、さらに?todayで+1されてしまい、カウントが2つ上がってしまいます。
どのような記述をすれば回避できますでしょうか?
0013nobodyさん04/03/01 15:55ID:???
また糞スレ盾やガッ他・・・
0014nobodyさん04/03/01 15:58ID:???
Perlをかけない>>13がいるスレはここですか?
0015nobodyさん04/03/01 16:32ID:???
>>12
Todayがカウントアップする時にTotalもカウントアップするのは問題ないのでは。
Totalが+1でTodayが+2とか言うのは問題だが。
0016nobodyさん04/03/01 17:10ID:???
>>12
1:全部セットで使うと決めて、Total(today)でのみカウントアップにする
2:アドレスでカウントアップを制限する
0017nobodyさん04/03/01 17:18ID:???
>>12です。

>>15氏
お言葉有難うございます。
totalのみを表示するときには、totalがカウントアップするときにはtodayもきちんとカウントアップします。
また、todayのみを表示するときには、todayがカウントアップするときにはtotalもきちんとカウントアップします。
問題となっている点は、今日と合計のアクセスを表示する場合、
<img src="counter.cgi?today"><img src="counter.cgi?total">
と記述しているのですが、二回CGIを呼び出すため、カウントが2つ回ってしまうということです。

例えば、合計カウントが1000、今日のカウントが200の場合、
<img src="counter.cgi?today"> だけならば、合計1001、今日201となります。
同じく、<img src="counter.cgi?total"> だけならば、合計1001、今日201となります。

しかし、
<img src="counter.cgi?today"><img src="counter.cgi?total">
このように両方呼び出した場合、
1つめのCGIの呼び出しで合計1001、今日201となり、表示するのは201なのですが、
totalの値を呼ぶ際にもう一度CGIを呼ぶことによって合計1002、今日202となり、合計の表示が1002となってしまうのです。

ロジックの問題なので、WebProg 初心者の質問 Part7に行ったほうがいいですかね。
0018nobodyさん04/03/01 17:21ID:???
連稿失礼します。

>>16氏
>1:全部セットで使うと決めて、Total(today)でのみカウントアップにする
やはりこの方式が一番手っ取り早いでしょうか。
そちらのやり方も検討してみます。
わざわざレス有難うございました。
0019nobodyさん04/03/01 18:07ID:???
Perlで短くかつバカなプログラムを書いてください。↓どうぞ
0020nobodyさん04/03/01 18:46ID:???
>>12
ワラタ
0021nobodyさん04/03/01 19:07ID:???
>>12
おもろいネタだな
0022nobodyさん04/03/01 19:47ID:???
print qq(↓の数字で俺の運命が決まる!<br>\n);
printf qq(%d<br>\n), int(rand $#Life);
my @Life = qw(溺死 焼死 轢死 凍死 瀕死
田中麗奈と恋人になる 田中麗奈と結婚 田中麗奈とSEX SEX後に腹上死 SEXなんて永遠に出来ず孤独死);

my $count = 0;
foreach (@Life){
 printf qq(%d %s<br>\n), $count++, $_;
}

これでどうだ。
00232204/03/01 19:48ID:???
ブフー!流石に見直し無しで書いたら酷い間違い方だな。
まぁいいや。俺は4、5、6です。
0024nobodyさん04/03/01 20:10ID:???
半角数字0〜9を全角数字0〜9に変換したいんですがどうやるといいんでしょうか。
具体的には、変数に任意の数が入っていて、それを全角にしたいんです。
$data = 1234;
としてここで何か処理をして
$dataの値を"1234"としたいわけです。

自分では
$data =~ s/0/0/g;
$data =~ s/1/1/g;
 :
 :
$data =~ s/8/8/g;
$data =~ s/9/9/g;
というのを考えたんですがもっとうまい書き方はないかと思い質問してみました。
00252204/03/01 20:14ID:???
>>24
ttp://tohoho.wakusei.ne.jp/lng/199911/99110327.htm
こんな感じで検索。
http://www.google.co.jp/search?q=Perl+%E5%85%A8%E8%A7%92%E6%96%87%E5%AD%97+%E5%A4%89%E6%8F%9B&sourceid=opera&num=0&ie=utf-8&oe=utf-8
0026未承諾広告※ ◆TWARamEjuA 04/03/01 21:11ID:???
$data =~ s/\G(\d)/('0', '1', '2', '3', '4', '5', '6', '7', '8', '9')[$1]/eg; # (w
0027nobodyさん04/03/01 21:19ID:???
>>17

一定期間内において同一IPからのカウントアップ要求が
ダブらないようなチェックルーチンを入れればいいだけなんじゃ?
0028nobodyさん04/03/01 21:20ID:???
>>24

phpだと専用の関数がある。
0029nobodyさん04/03/01 21:31ID:???
いろいろやってみましたがどういう処理にしたら上手くいくのか分からないので
質問させてください。

「hoge.log」というファイルがあり中身は

3212421321,ほげ,1543443246,ほげ,ほげ
.
.
.
.
3546754134,ほげ,3224654724,ほげ,ほげ
2346567945,ほげ,6735432758,ほげ,ほげ
.
.
.
.
となっています。

つまり、[ランダムな10桁の整数],ほげ,[ランダムな10桁の整数],ほげ,ほげ
って感じのが改行されていっぱいあると思ってください。データはコンマ区切り。

そこで、サブルーチンで引数1「3546754134」と引数2「1234567890」を渡して、
引数1とマッチする行をhoge.logの先頭の行に持ってきて、さらに先頭に持ってきた
行の三番目のランダムな10桁引数2に置換したいのです。

ご理解いただけるでしょうか。
だれかエライ人明解なコードを教えてください。
00302904/03/01 21:34ID:???
日本語が意味不明でした。

訂正
#
そこで、サブルーチンに引数1「3546754134」と引数2「1234567890」を渡して、
引数1とマッチする行をhoge.logの先頭の行に持ってくる。

さらに先頭に持ってきた行の三番目の区切りの「ランダムな10桁の整数」を
引数2に置換したいのです。
#
0031nobodyさん04/03/01 22:04ID:???
sub hoge{
my($line,@line);
open(IN, "+<hoge");
while (<IN>){
/^$_[0],/o and ($line= $_,last) or push(@line, $_);
}
seek(IN, 0, 0);
$line=~ s/,\d{10},/$_[1]/;
print IN $line,@line;
close(IN);
}
00323104/03/01 22:06ID:???
間違ってた 試してないけど

sub hoge{
my($line,@line);
open(RW, "+<filename");
while (<RW>){
/^$_[0],/o and ($line= $_,last) or push(@line, $_);
}
seek(RW, 0, 0);
$line=~ s/,\d{10},/,$_[1],/;
print RW $line,@line;
close(RW);
}
00332904/03/01 22:23ID:???
>>31氏
すごい・・・。perl初めて一週間なのですが私にはこのような考え方は
一生生まれないのだろうな。配列の使い方ってこんな風に使えるのですね。
いっぱいコード書いて、たくさん練習します。

ちなみにまだよく>>31氏のコードを理解できてません。一生懸命徹夜で理解してみます。
なんでか知らないけど、思うように動いてしまった。
そんな感じの空虚さが頭でグルグル回ってます。あと何年勉強したらこういう
コードがすぐに書けるようになるのだろうか。がんばります。

#私はCの知識もなければperlがはじめての言語なので、プログラムの感覚も
泡を握っているようでむなしいです。#

とにかくありがとうございました。
0034nobodyさん04/03/01 22:45ID:???
>>24
my @numbers = qw(0 1 2 3 4 5 6 7 8 9);
$data = join('', map{ $numbers[$_] } split(//, $data));
こんなでもいいんじゃない?
00353104/03/01 23:02ID:???
>>34
処理速度・負荷がどうかわからんが、例えばSJISの場合以下のように
したらどう? 実行環境が今ないからベンチ採れないけど

tr/\x30-\x39/\x4f-\x58/;
s/(.)/\x82$1/g;
0036nobodyさん04/03/01 23:33ID:???
perlに限った話しではないですが、
複数行の文字列をprintする時、

print ( "hoge\n" );
print ( "hoge2\n" );
print ( "hoge3\n" );
とそのままやるのと、

$buffer .= "hoge\n";
$buffer .= "hoge2\n";
$buffer .= "hoge3\n";
print ( "$buffer" );
と変数に入れて最後にprintするのどっちがいいのですか。
見やすさ、スピード、慣習、などの観点から。
00373404/03/02 00:00ID:???
>>35
use Benchmark qw(:all);
my $result = timethese(-5, {
34=>sub{
my $data = 123456;
my @numbers = qw(0 1 2 3 4 5 6 7 8 9);
$data = join('', map{ $numbers[$_] } split(//, $data));
},
35=>sub{
my $data = 123456;
$data =~ tr/\x30-\x39/\x4f-\x58/;
$data =~ s/(.)/\x82$1/g;
},
});
cmpthese($result);

Benchmark: running 34, 35 for at least 5 CPU seconds...
34: 4 wallclock secs ( 5.28 usr + 0.00 sys = 5.28 CPU) @ 27106.27/s (n=143155)
35: 5 wallclock secs ( 5.30 usr + 0.00 sys = 5.30 CPU) @ 37172.03/s (n=197186)
Rate 34 35
34 27106/s -- -27%
35 37172/s 37% --

# @numbersを外へ掃き出した場合。
Benchmark: running 34, 35 for at least 5 CPU seconds...
34: 4 wallclock secs ( 5.31 usr + 0.00 sys = 5.31 CPU) @ 36571.67/s (n=194287)
35: 4 wallclock secs ( 5.28 usr + 0.00 sys = 5.28 CPU) @ 37336.99/s (n=197186)
Rate 34 35
34 36572/s -- -2%
35 37337/s 2% --

# 正規表現の方が速いか。
0038nobodyさん04/03/02 00:06ID:???
Perlで出力したHTMLソース内でSSIを使うにはどうすれば良いんでしょうか

Print <<_EOF_;
Content-type:text/html

<html>
......(略)......

<!--#exec cgi="./fSize.cgi"-->
......(略)......
</html>

_EOF_

でやってみたのですが、SSIが単なるコメントとして扱われてしまいました。
0039eaoska047124.adsl.ppp.infoweb.ne.jp04/03/02 00:12ID:QKupWf2O
2chのfusianasanみたい↑に、
リモートホスト?
みたいなものを、取得したいんですが、
$ENV{'REMOTE_ADDR'};
と書いても、数字のIPしか取得できませんでした。

文字列取得するには、どうすればいいですか?
0040nobodyさん04/03/02 00:13ID:???
C言語みたいに
#define NUMBER
0041nobodyさん04/03/02 00:14ID:???
Perlは、
C言語みたいに
#define NUMBER 200
のように、定数を宣言できませんか?
0042nobodyさん04/03/02 00:14ID:???
>>40
お前のドコへのレスだよ
00434204/03/02 00:14ID:???
( ゚д゚)ハッ!
00444104/03/02 00:15ID:???
>>40
ごめんなさい、途中で書き込む押してしまったみたいです。
0045nobodyさん04/03/02 00:16ID:???
>>41
$NUMBER=200;
で$NUMBER使えばいいんじゃないの?
0046nobodyさん04/03/02 00:18ID:???
>>39
鯖によって、$ENV{'REMOTE_ADDR'}; がホスト返さないこともあるから、その場合は
$addr = $ENV{'REMOTE_ADDR'};
$host = gethostbyaddr(pack('C4',split(/\./,$addr)),2) || $_;}






って書こうとオモタラ$ENV{'REMOTE_ADDR'};ですか。そりゃとれんよ・・・
$ENV{'REMOTE_HOST'}な
0047nobodyさん04/03/02 00:20ID:???
ミスタ

×$ENV{'REMOTE_ADDR'}; がホスト返さないこともあるから
×$ENV{'REMOTE_HOST'}; がホスト返さないこともあるから
0048nobodyさん04/03/02 00:20ID:???
>>47イ�`

>>38
00494104/03/02 00:22ID:???
>>45
それだと、packageにしたとき、使えないみたい

と思ったらいけました。
ごめんなさい。

それでいけました。
失礼しました。
0050nobodyさん04/03/02 00:24ID:???
ここは、ドジッ娘がいっぱいで、ほのぼのとしたインターネットですね。
■ このスレッドは過去ログ倉庫に格納されています