Perlについての質問箱 15箱目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
05/01/17 18:11:32"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 http://pc5.2ch.net/php/ )
CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
http://www.perl.org/get.html
● 2005/01/17現在の最新版: 5.8.6
● 2005/01/17現在の開発版: 5.9.1
0159デフォルトの名無しさん
05/01/28 21:47:33~/.cpan/CPAN/MyConfig.pm
が設定ファイルだから再インストなんかしないでこいつを編集。
rootで入れたんなら、
/usr/local/lib/perl5/5.8.4/CPAN/Config.pm
が設定ファイルなので好きなようにパラメータを編集すればよし。
0160デフォルトの名無しさん
05/01/28 22:15:06だって、初めて聞いたし。
でも興味あるから見てみる。
0161デフォルトの名無しさん
05/01/28 22:48:29PDFJのほうが好き。
0162デフォルトの名無しさん
05/01/28 23:20:55articledemo.pdf のようにサンプル論文PDF程度のことが
ことができれば自分的には十分なので
0163デフォルトの名無しさん
05/01/29 01:23:220164デフォルトの名無しさん
05/01/29 05:13:13手始めに何か参考本がほしくなりました。お勧めの本とかってありませんでしょうか?
あんまり入門本とかではなくて分厚くて読み応えのある本がいいのですが・・・。
よろしくお願いします。
0165デフォルトの名無しさん
05/01/29 05:31:44>>2
一応こういうスレもある
【Perl,CGI】参考書籍 第三版
http://pc5.2ch.net/test/read.cgi/php/1030209573/
0167デフォルトの名無しさん
05/01/29 09:13:48perlがはじめてで読み応えある本希望ということなら、>>3の
駱駝で決まりだろうな。
0168164
05/01/29 15:16:59アマゾンで予約してきます。
0169デフォルトの名無しさん
05/01/29 22:28:40age2ch.plのsearch.plを
my @crypted = ($content =~ /<dd>([0-9a-zA-Z\/\.]{11})<br><br>/g);
↓
my @crypted = ($content =~ /<dd>\s*([0-9a-zA-Z\/\.]{11})\s*<br><br>/g);
に書きなおすということは、どういうことで、どのような変化が起こるのですか?
教えて下さい。お願いします。
0170デフォルトの名無しさん
05/01/29 22:29:49Cnt | S 11/17 00:07:07 1100617627.980650 | E 11/17 00:07:39 1100617659.310731 | ID:32539 | 31.330081
Day | S 11/17 00:04:59 1100617499.362986 | E 11/17 00:04:59 1100617499.628110 | ID:21124 | 0.265124
というような形式で記述されているテキストを、『| E』の直前の17バイトの数字で
ソートしてファイルに書き込みたいのですが、どのようなコードかわからず躓いてます。
while( <READ> )
{
if ( /(\w{3}) | S (\d+)\/(\d+) (\d+):(\d+):(\d+) (\S{17}) | E (\d+)\/(\d+) (\d+):(\d+):(\d+) (\S{17}) | ID:(\d+) | (\S+)$/ )
{
push ( @value , [ $2, $_ ] );
}
}
@sort_value = sort{ $a->[0]<=>$b->[0] } @value;
print WRITE $_->[1] foreach( @sort_value );
としてあるのですが、意図した通りに動いてくれません。
どのようにしたらいいでしょうか?
どなたかわかる方、ご教授お願いいたします。
0171デフォルトの名無しさん
05/01/29 22:31:52は、
push ( @value , [ $7, $_ ] );
の書き間違えです。
$7 の方でやっているのにできません。
0172デフォルトの名無しさん
05/01/29 22:43:43俺なら、「『| E』の直前の17バイトの数字」をkeyとするhashに行をぶち込み、
(まあ、たとえば%hogeとすると)
foreach (sort keys %hash){
print WRITE $hash{$_};
}
とするな
0173デフォルトの名無しさん
05/01/29 22:44:24単純にsplitすればいいんじゃない?
0174デフォルトの名無しさん
05/01/29 22:51:33そうね、「『| E』の直前の17バイトの数字」の抽出は正規表現でもいいし、
行に規則性があればsplitのほうが簡単
0175デフォルトの名無しさん
05/01/29 23:29:54> としてあるのですが、意図した通りに動いてくれません。
> どのようにしたらいいでしょうか?
どこでおかしくなっているのか調べて、そこを修正するといいよ。
0176デフォルトの名無しさん
05/01/29 23:31:55「|」は正規表現のメタキャラクタだからエスケープしろ。
他にも突っ込みどころはあるが致命的な間違いはたぶん
これ。
0177デフォルトの名無しさん
05/01/30 00:16:53my $RegExp = qr/(\S{17}) (?: \| E)/;
close READ;
print WRITE map $_->[1], sort $a->[0] <=> $b->[0], map [ (/$RegExp/o)[0], $_ ], @value;
close WRITE;
かな?
0178デフォルトの名無しさん
05/01/30 00:25:05余計なものが色々入ってないか?
0179デフォルトの名無しさん
05/01/30 01:55:10my @crypted = ($content =~ /<dd>([0-9a-zA-Z\/\.]{11})<br><br>/g);
というのは、$content(投稿内容)に含まれるIPアドレスを暗号化して、
age2ch.plを誰が使っているのか解らなくする命令だ。そこに「\s*」を
挿入すると、暗号化が解除されて、キミのIPアドレスが2ちゃんねるの
運営側に筒抜けになる。
意味が解らない人に罠をかけて陥れようとする香具師がいるようだな。
0180169
05/01/30 02:28:02ホントですか!?なんか人間不信になりそうですが・・
ではこれは、やらないほうがいいということですね。
そうするとsearch.plは、もう使い物にならないということですか?
他になにか探す方法はないのでしょうか?
教えて下さい。お願いします。
0181デフォルトの名無しさん
05/01/30 03:43:10面白いけどちょっと遊びすぎw
>>180
嘘ですよ
それは、
<dd>※(本体)※<br><br>
※のところに空白が入っていても、マッチングに成功するようにする修正パッチ。
0182デフォルトの名無しさん
05/01/30 06:47:45> ホントですか!?なんか人間不信になりそうですが・・
↑そっくり、お返ししたい今日この頃…。
0183デフォルトの名無しさん
05/01/30 16:23:01半角スペースを区切り文字に指定するとき
join(" ",@array)
で出来ないのですが、半角スペースはどう書けばいいんでしょうか?
0184デフォルトの名無しさん
05/01/30 16:30:09どう出来無いの?
それで当ってそうだけど
#ってか本人ならCスレに誤爆詫び入れとけよ
0185デフォルトの名無しさん
05/01/30 16:31:000186183
05/01/30 16:33:56" "で、連結したのに、" "がないんです。
0187183
05/01/30 16:35:39失礼しました。
0188デフォルトの名無しさん
05/01/30 17:00:320189デフォルトの名無しさん
05/01/30 17:06:58同意だけど二つ並べちゃうとダブルクォーテーション一つに見えるよ・・・
0190デフォルトの名無しさん
05/01/30 17:42:05"hoge$hage"
どっちがいいの?
0191デフォルトの名無しさん
05/01/30 17:46:48> 同意だけど二つ並べちゃうとダブルクォーテーション一つに見えるよ・・・
プログラミング環境の表示を、シングルクォート2つがダブルクォートに見える
ようにしておくのはマヌケの3乗だよ。
0192169
05/01/30 17:50:47一体どれを信じればいいんですか?
search.plは今もちゃんと使えるんですか?
0193デフォルトの名無しさん
05/01/30 17:55:10\sの意味調べればわかんだろ。
0194169
05/01/30 17:56:00search.plで検索すると
前は○○○×○とかだったんですけど
最近はeeee×eeとかで、串がまったく見つからないんですが
どういうことでしょうか?
原因と改善策を教えて下さい。
0195デフォルトの名無しさん
05/01/30 18:02:28プログラミングも好きだけどAAも好きなんだよヽ(`Д´)ノワーン
#2chブラウザだし
0196デフォルトの名無しさん
05/01/30 18:09:00ベンチマーク的には同じだった。
書きやすいから、漏れなら下の方を選ぶ。
0197デフォルトの名無しさん
05/01/30 20:18:18それはどんな場合の話?
printの引数なら "hoge",$hage にするよ
0198デフォルトの名無しさん
05/01/30 20:48:11100万回やったら上のが早かった
Winだけど
0199デフォルトの名無しさん
05/01/30 21:13:44Visual Studioはどうしてる?
0200デフォルトの名無しさん
05/01/30 21:38:47これなんで?
0201Rubyist!
05/01/30 21:55:490202デフォルトの名無しさん
05/01/30 22:20:42細かいことにこだわらないようじゃプログラマ失格だな。
0203Rubyist!
05/01/30 22:30:030204デフォルトの名無しさん
05/01/30 22:46:50\による意図しない展開を避けるため。
0205デフォルトの名無しさん
05/01/30 23:07:23そ、それだけすか?それだけのために '' にしろと言われても・・・
0206デフォルトの名無しさん
05/01/30 23:10:260207デフォルトの名無しさん
05/01/30 23:16:38>>188 に書いてますよね。
というか、私は \ による展開は '' の方が意図しないものになるように感じるんですよね。
% cat hoge.pl
print '\';
% perl hoge.pl
Can't find string terminator "'" anywhere before EOF at z.pl line 1.
0208デフォルトの名無しさん
05/01/30 23:20:35え、どこに?
0209デフォルトの名無しさん
05/01/30 23:21:43ああすいません、揚げ足取りしたかったんですかね。
書いてません書いてません。
0210デフォルトの名無しさん
05/01/30 23:24:4102111001
05/01/30 23:48:18シングルクォート派だけど。
0212デフォルトの名無しさん
05/01/31 00:08:31ごしゃごしゃって"<tag name=\"hoge\">"見たいなケース?
そういう場合は、普通こうだろ
qq|<tag name="hoge">|
'の場合でもq|hoge'hoge|っと
0213デフォルトの名無しさん
05/01/31 00:19:261秒後 (処理時間2秒)
5秒後 (処理時間6秒)
13秒後 (処理時間9秒)
16秒後 (処理時間5秒)
…
サーバ開始時間を0秒として,それから何秒後にリクエストが来たか,
その処理時間は何秒だったか,というような形のログです.
このログデータを使い,プログラムで任意の数のクラスタサーバを用意して,
どうすれば一番効率の良い負荷分散をするプログラムを作ることがしたいのですが,
どういう構造にしたらいいのかわかりません.
たとえば3台のクラスタサーバを用意するとした場合,
1台目 … 0+ (3×0行目,3×1行目,3×2行目・・・)
2台目 … 1+ (3×0行目,3×1行目,3×2行目・・・)
3台目 … 2+ (3×0行目,3×1行目,3×2行目・・・)
というラウンドロビンで振り分けていくプログラムを作りました.
これはこれで1台でやるよりは効率よく処理できます.
しかし,これに加えて処理時間と到着時間が被っていないかで判定して振り分けるのがいいと思うのですが,
どういう制御文にしたらいいのかわかりません….
Perlで作らなければいけないのでここで質問させていただいたのですが,
どなたか知恵を貸していただけませんか.
読み込むログデータは冒頭のような形で固定です.
0214デフォルトの名無しさん
05/01/31 00:19:31でも別にわざわざ気をつけるほどのことじゃないけどな。
02151001
05/01/31 00:22:05そうだね。そういう時は特にそうだね。
でも単純に
$foo = 'hoge';
$bar = 'hage';
$baz = 'zure';
というときもシングルクオートにしちゃうね。
エスケープがうんぬんというよりも、
見た目が単に綺麗じゃないよね。ダブルクォートって。
フォント変えれば心も変わるかもしれないけどね。
0216213
05/01/31 00:22:471.42423_2.53556
5.24524_6.35352
13.43663_9.59301
16.93821_5.23428
・
・
という形です.
『_』はスペースです.
0217デフォルトの名無しさん
05/01/31 00:27:46そんなに違いますかね?
コンパイル時ってことは評価されるのは一度だけですよね?
0218デフォルトの名無しさん
05/01/31 00:30:23え?
評価可能なパターンが入っているかどうか、
いやらしい眼でなめずるように見るか、
それとも見ないかの違いじゃないのか?
実行時に作用しないか?
0219Hiro58
05/01/31 00:40:18perlは素人の言語なのでしょうか?その会社の人はphpかaspとかいっているのですが、わざわざ変える必要はあるのでしょうか?
0220デフォルトの名無しさん
05/01/31 00:45:34じゃあ、なでしこで。
0221デフォルトの名無しさん
05/01/31 00:48:02はてなのシステムはPerlだそうだが。
phpのほうが素人っぽくないか…?
0222デフォルトの名無しさん
05/01/31 00:49:090223デフォルトの名無しさん
05/01/31 00:53:11そんなことないと思うが、その場で反駁できなかった時点で負けと思ってほかの言語で頑張れ。
0224デフォルトの名無しさん
05/01/31 01:01:57その会社の人は間違いなく素人
違うところでバイトした方が君のためだ
0225デフォルトの名無しさん
05/01/31 01:02:37顧客の見たPerl感はPerl4と個人サイトの掲示板なんだろうなぁと想像
とりあえずPerl5で作って、Perlで作られているものの代表例を言ってみることをお勧め。
Movable Typeとか。
0226デフォルトの名無しさん
05/01/31 01:48:25御存じなら教えていただけないでしょうか?
TL10DにUpdate kitを当てた状態で、
Perl/Tkを使いwedgitに日本語を表示させたいのですが文字化けします。
Tcl/Tkのwishでは問題なく表示されているので、
Perl/Tkの問題のように思いますがGoogleでも、
TurboのHPでも有効な情報は検索できませんでした。
環境は以下の通りです。どうぞよろしくお願いします。
tcl-8.3.5-18
perl-Tk-800.023-4
perl-5.8.0-11
0227Hiro58
05/01/31 01:50:45まあ、社員はみんな良い人で社長もいい人☆バイト代もたくさんもらえるので
がんばってperlで続けてみます。
そういえばaspだとすごいWebアプリが作れそうな気がするのですが…。
ユニクロとかaspだし。でも簡単にはできないですよね。。
>>224
その通りです。会社で誰も作れる人がいないのでバイトの自分がプログラム
してます。
0228デフォルトの名無しさん
05/01/31 02:08:460229デフォルトの名無しさん
05/01/31 02:17:18>>3
テンプレくらい嫁
0230デフォルトの名無しさん
05/01/31 02:25:08>aspだとすごいWebアプリが作れそうな気がするのですが…。
試してみれば?
ttp://www.microsoft.com/japan/users/recipe/
ttp://www.microsoft.com/japan/msdn/asp.net/webmatrix/
0231デフォルトの名無しさん
05/01/31 02:29:10まあ、PerlにもWebアプリケーションフレームワークは色々あるみたいだし。
0232デフォルトの名無しさん
05/01/31 02:47:18お前の腕次第だ。馬鹿。
asp使ってもお前にはすごいWebアプリが作れるとは思えない。
0233デフォルトの名無しさん
05/01/31 02:53:09ウェブ開発で不可能なことは無いしね。作る人次第だ
0234Hiro58
05/01/31 02:58:55visualC#でもやってみようかと。。どちらにしろ、そこまで大きな依頼は
無いのでやはり必要ないかもしれないですね(スイマセン)今のところHPの管理ページ
のみなので。(ショッピングカートや在庫管理など)
>>231
Webアプリケーションフレームワークありました。とりあえず「Sledge」を見つけたのですが、スクリーンショット
など無くて、どのようなもんか想像できないです(泣)
0235デフォルトの名無しさん
05/01/31 03:03:340236デフォルトの名無しさん
05/01/31 04:02:05WINのActivePerlなら、下のコードで こんにちは と
確かに表示できるので、use encoding "cp932"; とSJIS指定してる
ところで、EUCでも指定すれば、出来ると思うけどなぁ。
(ActivePerlでは、cp932と指定しないと化ける)
use Tk;
use encoding "cp932";
$mw = MainWindow -> new;
$lb = $mw -> Label(-text => "こんにちは!", -font => 'System') -> pack();
MainLoop;
0237デフォルトの名無しさん
05/01/31 15:41:33Cやshでも使ってやれよ。
0238デフォルトの名無しさん
05/01/31 15:41:38>のみなので。(ショッピングカートや在庫管理など)
B2C?
SSL とか 負荷分散とか FW までヤラサレル悪寒 (((( ;´ω`))) カクカクプルプル
0239デフォルトの名無しさん
05/01/31 21:18:27if($a==/[abcdefghi]/){〜〜〜}
でいいのでしょうか?
0240デフォルトの名無しさん
05/01/31 21:23:290241デフォルトの名無しさん
05/01/31 21:23:53やりたいのはこういうことかな
if($a !~ /[^abcdefghi]/){〜〜〜}
0242デフォルトの名無しさん
05/01/31 21:25:09if ($a =~ /\A[abcdefghi]\z/) { 〜〜〜 }
0243241
05/01/31 21:29:42=~でしたね
すみませんでした。
0244デフォルトの名無しさん
05/01/31 21:35:54if ($a =~ tr/abcdefghi// == 1) {〜〜〜}
0245デフォルトの名無しさん
05/01/31 21:38:12if (-1 < index('abcdefghi', $a)) {
;
}
0246デフォルトの名無しさん
05/01/31 21:40:15\Z のZは、小文字でも良いんだっけか?
if ( $a =~ /\A[a-i]\Z/ ) { 〜〜〜 }
0247デフォルトの名無しさん
05/01/31 21:54:30違うものだよ。
\Z Match only at end of string, or before newline at the end
\z Match only at end of string
0248デフォルトの名無しさん
05/01/31 22:18:24大文字Zだと$aの中身が "a\n" でもマッチしちゃうのね。
納得。お勉強になった。つか、ずっと勘違いしてた。
ご指摘、サンクスです。
0249デフォルトの名無しさん
05/01/31 22:20:58と書く前にさっとマニュアルを見るという行動が
なぜ出来ないのかと。
0250デフォルトの名無しさん
05/01/31 22:30:12\z って、最近実装されたんでね?
0251デフォルトの名無しさん
05/01/31 23:22:45御親切に御回答いただき有難うございます。
残念ながら御指摘の点を以下のように変更し実施しましたが、
文字化けの現象を回避するには至りませんでした。
暇を見付けて、もう少し検証を続けてみようと思っております。
有難うございました。
use encoding "euc-jp";
0252デフォルトの名無しさん
05/01/31 23:25:32> \z って、最近実装されたんでね?
それで?
いや、だから、
% perldoc perlre
に相当するアクションを行なわないのはなぜかと。
どういう問題があるの?
Winだと、添付マニュアルは、htmlで提供されてい
たりするんだっけ。
0253デフォルトの名無しさん
05/01/31 23:32:00それ間違ってねえ?
0254デフォルトの名無しさん
05/02/01 01:03:18$num = @array;
でわかりますよね。
では,配列の配列(リストのリスト) の要素数を知りたい場合はどうすればいいでしょう?
たとえば,
1年1組は生徒数30人
2年1組は生徒数32人
3年1組は生徒数31人
という学校を,
@array[学校のクラス][各クラスにいる生徒の数]
という配列に当てはめたとき,
$num = @array;
とすると「$num = 3」(クラス数)になります。
そうではなくて,
num[1] = 30(1年1組)
num[2] = 32(2年1組)
num[3] = 31(3年1組)
という感じで各クラスの数を知りたい場合にはどうすればいいでしょうか?
0255デフォルトの名無しさん
05/02/01 01:04:35という感じで各クラスの数を知りたい場合にはどうすればいいでしょうか?
(正)
という感じで各クラスの生徒数を知りたい場合にはどうすればいいでしょうか?
です。
すみません。
0256デフォルトの名無しさん
05/02/01 01:04:52しょうか?
0257デフォルトの名無しさん
05/02/01 01:09:32質問する前にsearch.cpan.orgで調べようと思わんのか?あーん?
0258デフォルトの名無しさん
05/02/01 01:11:05まず、その配列の配列の実装方法わかってる?
(@arr1, @arr2)じゃ駄目、リファレンスを使う。
リファレンスについて調べれば自ずと方法がわかるはずだ。
■ このスレッドは過去ログ倉庫に格納されています