【Perl】初心者コーナー Part16
■ このスレッドは過去ログ倉庫に格納されています
00013PIO ◆3pIoOHKo
02/09/15 15:11ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 6 (その2)
http://pc.2ch.net/test/read.cgi/php/1025930486/
参考書籍の話題は【【Perl,CGI】参考書籍 第2版】
http://pc.2ch.net/test/read.cgi/php/988809842/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
スクリプトの改造依頼は 【スクリプト改造工房 Part4】
http://pc.2ch.net/test/read.cgi/php/1012839651/
過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
関数化できる部分も展開した状態で書いた状態をさしてました。
>>163
それが本当だと
AutoSplitとAutoLoader使って書かれてる
CPANモジュールって多数ありますけど、
あえて効率悪くしてるのでしょうか?
CPANのも「なんでこの程度でAutoLoader使ってるの?」ってモジュールばかりだよ。
1回の起動でよばれない部分が大半なきもするんですが...
またCPANモジュールの場合、モジュールがモジュール呼んで
って繰り返す場合がおおいので、AutoLoaderなかったら
それこそ無駄なコンパイル、無駄なメモリがたっぷりなきがします
#具体例もなしに不毛なきがしてきた...
0167nobodyさん
02/09/20 23:10ID:???ただ、この場合は一つのファイルの一度のコンパイルで全てが終わるって事も
わかる。
処理してからコンパイルするんじゃなくてコンパイルしてから
処理するんでしょ?
って事はコンパイル後に外部を呼んだら外部もコンパイル、又は
全てを再コンパイルって事にはならんの?
(useは最初によまれちゃいますけど...)
むちゃくちゃ強引な例)
if(1){
require "a.pl";#ここに遷移したとき初めてコンパイルされる
}else{
require "b.pl";#つまりこっちはコンパイルされない
}
ちがいましたっけ?
(AutoLoader簡易版の一例)
sub AUTOLOAD {#定義されていない関数があると呼ばれる
my $file = $AUTOLOAD;
$file =~ s!::!/!g;
if(eval{require "$file.pl";}){
die('ダメっぽい')if($AUTOLOAD{$file});
$AUTOLOAD{$file}=1;
return &{$AUTOLOAD}(@_);
}
return undef;
}
とかしてあげると、ある関数が呼ばれたとき
初めて読み込んでコンパイルされ、
2回目以降は関数が存在するので
AUTOLOADは呼ばれないって動きになるものだと...
#突っ込まれるとなんか自身がなくなってしまう^^;
0170nobodyさん
02/09/20 23:41ID:???0171nobodyさん
02/09/20 23:42ID:???require "a.pl";#ここに遷移したとき初めてコンパイルされる
}else{
require "b.pl";#つまりこっちはコンパイルされない
}
動かなきゃそこに行くことは分からないんでしょ?
動くならそもそもコンパイルの必要が無いと思うんだけど。
0172171
02/09/20 23:45ID:???ただ、コンパイル>requierがあった>コンパイルって二度手間に
なるんじゃないかと言ってるわけで。
0173nobodyさん
02/09/20 23:58ID:???コンパイルをYO-
2段階でやってるからYO-
2度手間にはならねーYO!
それはもちろんそう。というか、そうじゃなきゃAutoLoaderの実装に苦労するよ…
で、内部のpp_requireのコード読んでたら妙なことみっけ
#!perl -w
sub Loader::new{
return bless{}, $_[0];
}
sub Loader::INC{
my($self, $file) = @_;
print "ファイル $file が要求されました\n";
return "/path/to/$file.pm"; # フルパスを返す
}
@INC = (Loader->new());
require foo;
__END__
こんなの何処かに書いてあったっけ?
INC()の挙動が妙なんで実験機能かなぁ。
0179156
02/09/21 03:05ID:mTosX4PH勉強になります。
ちなみにわたしのスクリプトは書いてあるルーチンをか必ずすべて使うスクリプトなので
1-3すべて無意味っぽいですね。
アルゴリズム見直しかあ。手に負えなそうtt
奇特な方がソースみてくれるの期待して公開してるスクリプト晒しときます。
http://tokada.s19.xrea.com/
今負荷率みてみたらあほみたいなアクセスは減ってるみたいで、
負荷も落ちついてるみたいですが。
0181156
02/09/21 04:22ID:???感謝です。
http://olive.zero.ad.jp/~zbk52224/files/Random2ch-0-2-1a.zip
にzipもあります
0183156
02/09/21 04:42ID:???もしよければ、改変したものを公開していただけるとうれしいです。
勉強になるしw
1.不要なコード,極端なコメント,不要な変数、ループの削除
2.局所化されてない変数ありません?(不確か)
3.関数内での定数の宣言,requireの廃止
4.Random2ch.pl,linksFromHtml.plの統合
5.インデントの調整
すると、もちっとよさげかなぁ?とかおもいますが、
Socket周りをちゃんとするのはえらいと思う
毎回HTTPのリクエストしないで、
解析結果を保存しておいて、一定期間内のアクセスであれば
保存したデータを使うようにするだけで、
結構スピードアップしそう。
ネットワークの開くのって結構コスト高いっすよね?
って感じかなぁ?
おやすみなさい。
 ̄ ̄ ̄V  ̄ ̄ ̄ ̄ ̄ ̄ ̄
.∧∧ エビフリャー
,.、,(゚Д゚ ) /i
;'`;、. :,.:∪`゙:゙:`''':,'.´ -‐i
'、;:.: .、.:',.: .:: _;.;. :.‐'゙゙~  ̄
`` U U
0187156
02/09/21 06:53ID:???なるほど参考になります。
ソースを再検討してみます。
>>185
たしかにbbsmenu.htmlは"比較的"静的なので1日ごとの更新でもいいかもしれませんね。
subback.htmlはどうしよう。更新時間の匙かげんが難そう。
まあどちらも
ファイルがない||更新時間以前のファイルがある場合、HTTPリクエストしてlocalに保存する。
そうでない場合localのファイルに対して処理する。
ってかんじですかね。
>>186
おやすみなさい^^
0188nobodyさん
02/09/21 06:59ID:???0190182
02/09/21 10:28ID:???とりあえずコードをまとめ直しただけですが。
http://boobar.hoops.ne.jp/Rand2ch/Rand2ch_0.2.1a.txt
connectの回数減らさないと体感できる遅さの原因になりやすいので
KEEP-ALIVEとかちゃんと使わないとまずそうですね。
0192nobodyさん
02/09/21 11:38ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0193156
02/09/21 11:53ID:???。。。。。。。。。
すげーーーーー
あまりのエレガントさにびびりました。
わたしの元ソースと比べるべくもないですな。
ハハハハハハハハ
めちゃくちゃ示唆に富んでるソースだし。。。。
ただ私のPerlへの理解度が追いついてない部分があるので、ラクダ本と突き合わせながらじっくり読ませてもらいます。
ここに質問してよかったです。
ありがとー
#こんな時に明日からしばらく出かけなくちゃいけないtt
#どっぷり漬かりたいのにtt
0194156
02/09/21 12:02ID:mTosX4PHおはよーございますw
KEEP-ALIVEですか。ほうほう。
はじめて聞きます(汗
字面からは、一度ソケットひらいて通信してそのまま次の通信をするって感じとか想像するんですが、
大外ししてるかな。。。。
資料あさりたいですが、後日ってことになりそうです。
すみませんtt
0195nobodyさん
02/09/21 12:57ID:/+fRFKXb正しく動きません。見てもらえませんでしょうか・・・
require "./jcode.pl";
open(IN, "aaa.txt");
$xxx = <IN>;
close(IN);
&jcode'convert($xxx,'sjis');
open (FILEOUT, ">aaa.txt");
print FILEOUT $xxx;
close (FILEOUT);
0196nobodyさん
02/09/21 13:00ID:???0197195
02/09/21 13:40ID:/+fRFKXb無事解決できました。ありがとう!
0198nobodyさん
02/09/21 13:41ID:???0199nobodyさん
02/09/21 14:02ID:???ぼく小学生だけとPerlのことはなんでも聞いてよ!
0200どうにかして
02/09/21 14:15ID:???俺のサイトは全てCGIを経由しないと表示できないようにしてる
リモホしだいでどんなページにでもジャンプさせてるぞ
56 名前:Name_Not_Found :02/09/14 12:20 ID:???
>>54
鯖のことを少しは考えてやれ・・・
自分の鯖なら別にいいが。
57 名前:3PIO ◆3pIoOHKo :02/09/15 21:39 ID:???
>>56
トップページの表示にかなり時間がかかる
苦情が鯖の管理人からきたらどうにかする
0201nobodyさん
02/09/21 14:25ID:???0202nobodyさん
02/09/21 15:22ID:acWgwkORとりあえず初心者本読んでperlをちょっと勉強したんですが、
Web上でよくみる掲示板のソースを見ると
もう何がナンだか分からなくなって、
でももっと勉強すれば理解できるようになりますか?
才能とか関係ないっすよね?
0203nobodyさん
02/09/21 15:26ID:???才能は必要。
努力しつづけるという才能が。
途中で諦め、投げ捨てるような人には無理。
要は根気だ。
俺は根気があるのは才能だと思ってる。
0204b
02/09/21 15:31ID:ererLzW20207nobodyさん
02/09/21 18:19ID:0Otbw0Zcく!
にょ!
ウウウウウウゥゥ!
0208nobodyさん
02/09/21 18:19ID:???0209nobodyさん
02/09/21 18:20ID:???右クリックの「ソースの表示」は違うぞ
というか基本的なHTMLの知識があればそれぐらいわかるだろ
0211202
02/09/21 18:41ID:/+fRFKXbだめでしょうか?
0212nobodyさん
02/09/21 18:44ID:f7+ObQJd02,田代,花子,40歳,
03,泉,まさし,40歳,
04,泉,ピン子,60歳,
05,泉,茂千代,118歳,
06,…
07,…続く
例えば上記のようなデータから
田代に該当 2
泉に該当 3
…
まさし 2
花子 1
ピン子 1
茂千代 1
…
40歳 3
60歳 1
118歳 1
…
というふうに列の重複数をすべて書き出したいんです。
どしたらいいでしょうか?
0213nobodyさん
02/09/21 19:33ID:acWgwkORソースはちゃんとダウンロードしたCGIファイルを見てるよ
0214nobodyさん
02/09/21 19:38ID:???乱暴なやり方。
my @data = qw(
01,田代,まさし,40歳,
02,田代,花子,40歳,
03,泉,まさし,40歳,
04,泉,ピン子,60歳,
05,泉,茂千代,118歳,
);
my %count;
foreach (@data) {
foreach (split /,/) {
$count{$_}++;
}
}
foreach (sort keys %count) {
print($_, 'に該当 ', $count{$_}, "\n");
}
0215nobodyさん
02/09/21 20:33ID:???ありがとうございます。動きました!
別ファイルにデータを置いてるので、
$data='data.txt';
open(IN,"$data");
@data = <IN>;
close(IN);
として大丈夫でした。
あつかましくも追加で…上記データで言うと名字の部分と年齢の部分というふうに
特定の列のみ抽出することは出来るでしょうか?
0216nobodyさん
02/09/21 20:35ID:???できる。
どうやればできると思う?
0217nobodyさん
02/09/21 21:37ID:f7+ObQJdそれがどうにも分からんのです…
0218nobodyさん
02/09/21 21:58ID:???>>214 さんが示している例がどうして動くのか、理解しましょう。
そうするとどこが問題点か解るはずです。
まず、その問題点を探してみて下さい。
while(<IN>){
chomp;
my @data = split(/,/);
push(@{$count{$data[$IDX]}},\@data);
}
for(sort keys %count){
printf("%sに該当%d\n",$_,scalar @{$count{$_}});
}
0220nobodyさん
02/09/22 00:28ID:???0221nobodyさん
02/09/22 00:49ID:bAgDqIKf良いのでしょうか。
イメージとしてはYahooや、ポイント制のあるEコマースサイトの様な機能なんですが。
もう少し具体的に書きますと、
・ユーザーID,パスワード,ポイント
以下同じ構文のcsv
みたいなcsvファイルを使って
・そのcsvに記載されてあるID,パス認証
・認証後、”同じ列”にあるポイントの表示
というような事はどうすればよいのでしょうか。
よろしくお願いします。
0223nobodyさん
02/09/22 01:16ID:bAgDqIKf初歩的なID,パスワード認証
(csvを読み込んで、変数に格納、それとFORMの数値を見比べてイコールなら移動)
まではわかるのですが、
その後のcsvから、ポイントの取り出しが分かりません。
縦の関係は分かっても、横の関係が分からない、というか何というか。
よろしくお願いします。
0224nobodyさん
02/09/22 01:27ID:???splitっていうか、分割できないでIDどう取るわけ?
すっげー非効率なことしてる気がしてきた。
まぁCSV落とされないようにね。
0225nobodyさん
02/09/22 01:29ID:???0226222
02/09/22 01:55ID:???ユーザIDを比較して取り出せば?
($point)= map{ $_->[0] eq 'id' ? $_->[2] : () }map{ chop, [split(/,/, $_, 3)]} <DATA>;
0227222
02/09/22 02:09ID:???my $point;
($point)=map{ $_->[0] eq 'id' ? $_->[2] : () }map{ $point?last:chop, [split(/,/, $_, 3)]} <DATA>;
0228nobodyさん
02/09/22 12:03ID:dGvJOxY30229nobodyさん
02/09/22 12:14ID:???なんか使い道ないかなぁ。。。
CPANミラーする程度しかおもいつかなくて、、、
(すれ違い?)
0231nobodyさん
02/09/22 16:28ID:Fc82peeX0232nobodyさん
02/09/22 16:59ID:???0233nobodyさん
02/09/22 17:21ID:???0234nobodyさん
02/09/22 20:07ID:???かずあき(1001) > いや、アップロードしたプログラムは実行効率上げるためにコメント行を全てカットしてあるから、正直なにが書いてあるかウチ本 人にもわかんないのよ (9/22(日)20:06 )
実行効率上がるんですか?変わらない気がするんですけど。
0235nobodyさん
02/09/22 20:12ID:???0236nobodyさん
02/09/22 20:56ID:???ナノ秒単位でなら上がるかも。
0237nobodyさん
02/09/22 21:21ID:dGvJOxY3<img src="xx.cgi">で起動させた後、空白を表示させる方法が分かりません。
ヒントをください
0239nobodyさん
02/09/22 22:06ID:???なんかいかにも「こっそりIP抜きたい」っていうやり方だね・・・。
0240237
02/09/22 22:37ID:dGvJOxY3CGIの方に(xxx.cgi)
print "text/html\n\n";
print " ";
htmlの方に
<img src="xxx.cgi">
と書いてもCGIは実行されるのですが、html側は□に×(画像が表示できない状態)
になってしまいます。なんでしょうか?
>>239
違いますよ
0241nobodyさん
02/09/22 22:41ID:???イマイチ信用できないな。
でも、まぁ、ヒントだけ。
・1*1の透過GIF
・バイナリモード
0242nobodyさん
02/09/22 22:45ID:???えっ、ホントにやったの?
あなたhtmlをちゃんと理解してます?
画像ファイルを入れなきゃ画像は表示されませんYo
<a href="xxx.cgi">
<img src="nantoka.gif">
</a>
0243nobodyさん
02/09/22 22:49ID:???0244237
02/09/22 22:52ID:dGvJOxY3print `/bin/cat space.gif`;
で解決しました。が/bin/catの意味が分かりません。
どんな意味をもってるんですか?
0245nobodyさん
02/09/22 23:05ID:aEiiJGxoHTMLで書いてから
printとか付けたしてったら
エラーでまくりです。
とりあえず「"」の前にはちゃんと「\」を書いてますが
それ以外にも「\」を書かないといけない文字ってありますか?
0246nobodyさん
02/09/22 23:10ID:???山のように。
0248nobodyさん
02/09/22 23:12ID:aEiiJGxoマジですか?
出来ればよく使うタグで\をしなきゃいけない文字教えて下さい。
0249nobodyさん
02/09/22 23:29ID:Ao5uw2aw1個終われば次の1個がはじまって。。。
と、言う内容で。
0250nobodyさん
02/09/22 23:42ID:aEiiJGxo正規表現スレ見たけど、何がなんだか全然分からん。
教えて。
0252nobodyさん
02/09/23 00:00ID:Igutub/Eforkとやらの関数でaが一度に多数流れるのは見たんですが多すぎて逆に遅くなってしまいます。
んで、3個ぐらいに制限したいなと・・・
0255nobodyさん
02/09/23 01:25ID:???print "<a href="a.html">表示<a>"; #エラー
print \"<a href=\"a.html\">表示<a>\"; #エラー
print "<a href=\"a.html\">表示<a>" #エラー
print "<a href=\"a.html\">表示<a>"; #エラーじゃないけどSJISだと文字化け
print "<a href=\"a.html\">表\示<a>"; #OK
print "<a href=\"mailto:[email protected]\">メアド<a>"; #エラー
print "<a href=\"mailto:meidohuku\@moemoe.ne.jp\">メアド<a>"; #OK
0258nobodyさん
02/09/23 03:47ID:???ちょっと難しい内容だが、これを読んでくれ。
ttp://homepage1.nifty.com/nomenclator/perl/shiftjis.htm
要は苦労したくなければ、現状では文字コードは EUC-JP で
print <<HTML;
<a href="a.html">表示</a>
HTML
等としろってこったな。
厨でもなんでもいいけど、、、
面白い(興味を持てる)事したいだけなんだけどね。
(すれ違いってより、聞くとこ間違ったカナ)
0260nobodyさん
02/09/23 04:11ID:???0261nobodyさん
02/09/23 04:59ID:v/9sXn0Jたとえば関数なんかで
func{
local ($a,@b) = @_;
}
ってやる場合、my にできないよね?
こういう場合って、local でやるしかないかな〜、、
配列とか引き渡す場合、どうやってる?
0262nobodyさん
02/09/23 05:06ID:v/9sXn0Jfunc{
local ($a,*b) = @_;
print "変数の中身は→$a\n";
print "配列の最初の要素は→$b[0]\n";
}
たとえば、こう言う風に使うとき
@a = (1,2,3,4,5);
&func('オマエモナー',*a);
0263nobodyさん
02/09/23 05:10ID:v/9sXn0J>>262 の例で、
my $a = 'あほか?';
my @b = (1,2,3,4,5);
&func($a,*b);
で実行するとエラー出るよね??
my $a = 'あほか?';
local @b = (1,2,3,4,5);
&func($a,*b);
だったら、OKでした。なんか my と local が同じソース内に、ごっちゃになってるのが
気に入らないので、結局
local $a = 'あほか?';
local @b = (1,2,3,4,5);
&func($a,*b);
と、local で統一することに、、、でも、周りからは my 使えと、、、
■ このスレッドは過去ログ倉庫に格納されています