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

【Perl】初心者コーナー Part16

■ このスレッドは過去ログ倉庫に格納されています
00013PIO ◆3pIoOHKo 02/09/15 15:11ID:???
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

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あたりを見よう。
0133nobodyさん02/09/19 10:58ID:IJ0KtDTA
$day = 3;
$day = sprintf("%02d",$day);
これを実行すると$dayが03になることはわかったのですが、
「%02d」の「2」は何を意味していますか?
0134nobodyさん02/09/19 11:20ID:???
>>123
ビット演算とか比較演算って知ってる?
解説書でも読めば必ず書いてあると思うんだが。
とりあえず出てきた演算子のperlでの分類と意味を書く。
・比較演算子
== 等しければ真、そうでなければ偽
・ビット演算子
| ビット演算した論理和(OR) (ex. 2|5 -> 7)
& ビット演算した論理積(AND)(ex. 2&5 -> 0)
・論理演算子
|| 真偽の論理和 (ex. 2||5 -> 2)
&& 真偽の論理積 (ex. 2&&5 -> 5)

ビット演算はその名の通りビットごとの演算がされる。
論理演算は、perlではundef,0,""以外は全て真なので
||なら最初の真の値、&&なら最後の真の値になると思って良い。

>>124
その状況でPASVが使えないならFTP接続は無理。
FW管理人と相談してね。
0135nobodyさん02/09/19 11:24ID:???
->はアロー演算子?というツッコミはなしでおながいします。。。

>>133
二桁の意味。
ちなみに%02dのそれぞれに意味がある。
% フォーマットを指定するよ宣言
0 隙間は0で埋めてね
2 2桁より少ないときにね
d 10進整数で表記してね
0136nobodyさん02/09/19 11:34ID:???
>>125-126 >>130
漏れはこう解釈したが

open O1, ">1.txt";
open O2, ">2.txt";
while(<>){
chomp;
split /,/;
if ($o[1] eq $_[1] && $o[2] == $_[2]) {
print O1 "$o[0],$_[0],$_[1],$_[2]\n";
} elsif ($o[3] eq $_[3] && $o[4] == $_[4]) {
print O2 "$o[0],$_[0],$_[3],$_[4]\n";
}
@o = @_;
}
0137nobodyさん02/09/19 11:38ID:???
>135
詳しい解説ありがとうございます。
0138&&と||の質問者02/09/19 18:03ID:???
>>128さん、>>132さん、>>134さん、どうもありがとうございました。
>>134さんの例で理解できました。
単に真偽を取り扱う場合は&&でも&でも同じということですね。
0&1 はビット比較で0=偽
0&&1 論理演算で0=偽
0139nobodyさん02/09/19 19:04ID:???
>>138
でも普通、真偽判定にビット演算子は使わない。
その文で何の処理をしているか読み下しにくくなるからね。

あとこういう場合、&& より and、|| より or を使う癖をつけとくと
後々幸せになれるかも知れない。数値として比較する時は
==、文字列として比較する時は eq、という区別もはっきり
させとくと尚良し。

$a = 0; $b = 1;
if ($a = 1 and $b == 1) {
print "$aと$bが1なので表示しました。";
}
$a = 0; $b = 0;
if ($a == 1 or $b = 1) {
print "$aか$bが1なので表示しました。";
}
0140nobodyさん02/09/19 19:10ID:???
>139
一応つっこんでおくと、下から3行目=が1個足りない。
0141nobodyさん02/09/19 19:11ID:???
上も足りてないみたいだね。
それで昔失敗したんだよなぁ。
懐かしい。
0142nobodyさん02/09/19 20:16ID:???
>>140 >>141
よく見よう。上の条件文は ($a = 1) && ($b == 1) と等価、
下の条件文は ($a == 1) || ($b = 1) と等価だ。
つまり代入の結果の値をそのまま条件に使っている。(w

&& と || は代入演算子より優先順位が高いが、
and と or は低いから括弧が不要。
0143nobodyさん02/09/19 20:17ID:???
>142
それだと、print文の内容が不自然なんだが?
014451802/09/19 20:32ID:???
ごめん、$ をエスケープするの忘れてたね。(w

$a = 0; $b = 1;

# $a = 1 で $a の値は 1
# ($a = 1) の式の値は 1 で真なので and の右の式も評価する。
# $b == 1 は真、両方真なので if ブロックに入る。
if ($a = 1 and $b == 1) {

# 条件文を解釈した時点で $a = 1, $b = 1
print '$a と \$b が 1 なので表示しました。';
}
$a = 0; $b = 0;

# $a == 1 は偽なので or の右の式も評価する。
# $b = 1 で $b の値は 1
# ($b = 1) の式の値は 1 で真なので if ブロックに入る。
if ($a == 1 or $b = 1) {

# 条件文を解釈した時点で $a = 0, $b = 1
print '$a か $b が 1 なので表示しました。';
}
0145nobodyさん02/09/20 03:12ID:tkLzuZ53
文字列の配列のソートとか、また単なる文字列比較とかするときに
アスキー配列ではなくて日本語辞書(?)の並びで簡単に扱う方法はありませんか。
たとえば、
あアいイ〜かカがガきキぎ〜(空文字が最後)
みたいな感じです。
普通にperlで並べたデータベースをexcelで編集して並べなおすと辻褄が
合わなくなってしまいます。
よろしくお願いします。
0146nobodyさん02/09/20 05:51ID:???
>>145
有名どころでは、
豊島正之sortf、http://www.asahi-net.or.jp/~ez3k-msym/archive/archive.htmには、益山って人のsortlもあるね。
Perlのライブラリではないんかい。
googleでPerl、辞書順ソートで調べたんだけど、
fj.cmp.lang.perlでそんな話し合ったみたいだけどその記事に行き当たらない。
JCPANがほしいね。
0147116=12402/09/20 11:07ID:???
ADSLモデムの設定でIPフィルタ(擬似ファイアウォール)の
設定を一部解除したらFTPできるようになりますた。

♪勉強に〜なりましたっ。
0148nobodyさん02/09/20 14:58ID:???
>>146
ご回答ありがとうございます。
僕も調べてみたんですが、見つかりませんでした。
自分で辞書順配列作ってやるしかないのかなあ。
やってみます。
0149nobodyさん02/09/20 15:32ID:???
>>148
できたら頂戴。
0150nobodyさん02/09/20 16:06ID:???
>> 149
超素人なので、僕の作ったものは役立たずだと思いますw。
とりあえず比較だけで、&jcomp($a,$b)が1,0,-1を返す関数から初めてみます。
0151 ◆AOHU.zVE 02/09/20 16:17ID:???
>>148
使ったことないから期待通り動くかしらないけど。。。
http://homepage1.nifty.com/nomenclator/perl/Lingua-JA-Sort-JIS.html
とかは?
015214602/09/20 16:34ID:???
>>151
こなのあったのね。情報アリガトン
0153 ◆AOHU.zVE 02/09/20 17:41ID:???
http://search.cpan.org/
で、sortで調べらたら出てきただけだったり
015414602/09/20 17:53ID:???
>>153
定番だよね、スマソ
0155 ◆AOHU.zVE 02/09/20 18:24ID:???
>>146
ちょっと興味>JCPAN
0156nobodyさん02/09/20 19:00ID:VWOOYV2p
Perlスクリプトの負荷軽減に関する質問です。
あるスクリプトの負荷軽減をしたいのです。

一般論として、

1.コメントを削除するのは軽減につながる?
2.処理はなるべくサブルーチン化するほうが負荷が軽減する?
3.サブルーチンは別ファイルにしてrequireするより、1ファイルにしたほうが負荷軽減になる?

その他負荷軽減のセオリーなどあるのでしょうか。
ポインタなど教えていただければ幸いですm(_ _)m
0157 ◆JAPH9PWA 02/09/20 19:12ID:???
1 - × 数十MBものコメントがあればまた別かもしれないけど。
2 - × ケースによって異なるけど、サブルーチンかすると付加は重くなる。
     ただし不可の為だけにインラインかを進めるのはナンセンス。
3 - △ ケースによる。大量の「プログラム開始時には必要かどうか分からない処理」がある場合は別ファイル化したほうがいいこともある。

負荷軽減で重要なのは上記のような小細工よりもアルゴリズムだろうね。
あとはPerl以外の言語を使うとか。
0158 ◆JAPH9PWA 02/09/20 19:13ID:???
あー、誤字・変換ミス多し。
0159 ◆AOHU.zVE 02/09/20 20:40ID:???
配布系のCGI見て勉強した人にありがちな
すべての処理を1つのCGIで済ませるタイプのプログラムだと
適当なとこでぶった切って適当なところでrequireするように
するだけでずいぶん効率UPできると思われ...
0160nobodyさん02/09/20 20:44ID:???
Perlにも関数のオーバーヘッドの負荷云々ってあるの?
0161 ◆AOHU.zVE 02/09/20 20:50ID:???
全部inlineで書いた場合のコンパイル時間にくらべたら
たかがしれてるんでは・・・
0162nobodyさん02/09/20 20:55ID:???
>>161
inlineってなんですか?
0163nobodyさん02/09/20 21:07ID:???
requireって結構負荷高いと思ってたんだけど誤解?ファイルアクセスとか
メモリとか…
実際に別けてベンチ取ると処理時間が倍近く遅くなるんだけど。

本当に滅多に使わないような部分(管理モードとか)ならともかく
ファイルサイズが巨大にならない限りは極力別けないようにしてた。
0164 ◆AOHU.zVE 02/09/20 21:27ID:???
>>162
関数化できる部分も展開した状態で書いた状態をさしてました。

>>163
それが本当だと
AutoSplitとAutoLoader使って書かれてる
CPANモジュールって多数ありますけど、
あえて効率悪くしてるのでしょうか?
0165 ◆JAPH9PWA 02/09/20 22:04ID:???
>>163に同意。
CPANのも「なんでこの程度でAutoLoader使ってるの?」ってモジュールばかりだよ。
0166 ◆AOHU.zVE 02/09/20 22:59ID:???
すべての処理を1つのCGIで済ませるタイプの場合
1回の起動でよばれない部分が大半なきもするんですが...

またCPANモジュールの場合、モジュールがモジュール呼んで
って繰り返す場合がおおいので、AutoLoaderなかったら
それこそ無駄なコンパイル、無駄なメモリがたっぷりなきがします

#具体例もなしに不毛なきがしてきた...
0167nobodyさん02/09/20 23:10ID:???
いらない部分までコンパイルするのが無駄って理屈はわかる。
ただ、この場合は一つのファイルの一度のコンパイルで全てが終わるって事も
わかる。

処理してからコンパイルするんじゃなくてコンパイルしてから
処理するんでしょ?
って事はコンパイル後に外部を呼んだら外部もコンパイル、又は
全てを再コンパイルって事にはならんの?
0168 ◆AOHU.zVE 02/09/20 23:25ID:???
requireは遷移して初めて読み込み/コンパイルが行われるはず...
(useは最初によまれちゃいますけど...)

むちゃくちゃ強引な例)
if(1){
require "a.pl";#ここに遷移したとき初めてコンパイルされる
}else{
require "b.pl";#つまりこっちはコンパイルされない
}

ちがいましたっけ?
0169 ◆AOHU.zVE 02/09/20 23:35ID:???
もうちっとまともに書くと

(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:???
if(1){
require "a.pl";#ここに遷移したとき初めてコンパイルされる
}else{
require "b.pl";#つまりこっちはコンパイルされない
}

動かなきゃそこに行くことは分からないんでしょ?
動くならそもそもコンパイルの必要が無いと思うんだけど。
017217102/09/20 23:45ID:???
呼ばれないのがコンパイルされないって事はわかってる。
ただ、コンパイル>requierがあった>コンパイルって二度手間に
なるんじゃないかと言ってるわけで。
0173nobodyさん02/09/20 23:58ID:???
PerlではYO-
コンパイルをYO-
2段階でやってるからYO-
2度手間にはならねーYO!
0174 ◆JAPH9PWA 02/09/20 23:59ID:???
>>168
それはもちろんそう。というか、そうじゃなきゃ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()の挙動が妙なんで実験機能かなぁ。
0175nobodyさん02/09/21 00:06ID:???
>>173
じゃ、分岐で外部を呼んだときは最低でも3段階になるって事?
0176nobodyさん02/09/21 00:16ID:???
>>175
だから、2段階だって。。。以下の動作わかる?

if (0){ use Hoge; }
0177nobodyさん02/09/21 00:43ID:???
>>176
Hogeから外部を呼んだらまた…って、ああそうか
Perlはインタプリタだったっけか。
ごめん勘違い。
0178 ◆AOHU.zVE 02/09/21 01:07ID:???
もとの話からずいぶんずれてきた?^^;
(ってじぶんのせいかな(汗)
017915602/09/21 03:05ID:mTosX4PH
なるほど。
勉強になります。

ちなみにわたしのスクリプトは書いてあるルーチンをか必ずすべて使うスクリプトなので
1-3すべて無意味っぽいですね。
アルゴリズム見直しかあ。手に負えなそうtt

奇特な方がソースみてくれるの期待して公開してるスクリプト晒しときます。
http://tokada.s19.xrea.com/

今負荷率みてみたらあほみたいなアクセスは減ってるみたいで、
負荷も落ちついてるみたいですが。
0180 ◆AOHU.zVE 02/09/21 03:31ID:???
しまった、危篤な人演じようと思ったら
PCインストールしたばっかでtarとgz解凍できる
ソフトがないΣ( ̄ロ ̄;)
018115602/09/21 04:22ID:???
おおお。
感謝です。
http://olive.zero.ad.jp/~zbk52224/files/Random2ch-0-2-1a.zip
にzipもあります
0182nobodyさん02/09/21 04:26ID:???
>>181
180 じゃないけど、俺流で書き換えて遊んで(・∀・)イイ?
018315602/09/21 04:42ID:???
改変・再配布自由なのでどーぞー

もしよければ、改変したものを公開していただけるとうれしいです。
勉強になるしw
0184 ◆AOHU.zVE 02/09/21 05:35ID:???
ぱっと見の感想
1.不要なコード,極端なコメント,不要な変数、ループの削除
2.局所化されてない変数ありません?(不確か)
3.関数内での定数の宣言,requireの廃止
4.Random2ch.pl,linksFromHtml.plの統合
5.インデントの調整
すると、もちっとよさげかなぁ?とかおもいますが、
Socket周りをちゃんとするのはえらいと思う
0185 ◆AOHU.zVE 02/09/21 05:39ID:???
(つづき)

毎回HTTPのリクエストしないで、
解析結果を保存しておいて、一定期間内のアクセスであれば
保存したデータを使うようにするだけで、
結構スピードアップしそう。
ネットワークの開くのって結構コスト高いっすよね?

って感じかなぁ?
0186 ◆AOHU.zVE 02/09/21 06:02ID:???
コレかわいくて気に入ってるんだけど^^;

 おやすみなさい。
 ̄ ̄ ̄V  ̄ ̄ ̄ ̄ ̄ ̄ ̄
    .∧∧ エビフリャー
  ,.、,(゚Д゚ )      /i
 ;'`;、. :,.:∪`゙:゙:`''':,'.´ -‐i
 '、;:.: .、.:',.: .:: _;.;. :.‐'゙゙~  ̄
  `` U U  
018715602/09/21 06:53ID:???
>>184
なるほど参考になります。
ソースを再検討してみます。

>>185
たしかにbbsmenu.htmlは"比較的"静的なので1日ごとの更新でもいいかもしれませんね。
subback.htmlはどうしよう。更新時間の匙かげんが難そう。
まあどちらも

ファイルがない||更新時間以前のファイルがある場合、HTTPリクエストしてlocalに保存する。
そうでない場合localのファイルに対して処理する。

ってかんじですかね。

>>186
おやすみなさい^^
0188nobodyさん02/09/21 06:59ID:???
GETの前にHEADで更新を確認したら?
018915602/09/21 07:06ID:???
>>188
なるほど。bbsmenu.htmlはそれでよさげ
019018202/09/21 10:28ID:???
(・∀・)オハヨー
とりあえずコードをまとめ直しただけですが。
http://boobar.hoops.ne.jp/Rand2ch/Rand2ch_0.2.1a.txt
0191 ◆AOHU.zVE 02/09/21 11:28ID:???
みんないつねてるんだろ(汗

connectの回数減らさないと体感できる遅さの原因になりやすいので
KEEP-ALIVEとかちゃんと使わないとまずそうですね。
0192nobodyさん02/09/21 11:38ID:???
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

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

1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
019315602/09/21 11:53ID:???
>>190
。。。。。。。。。
すげーーーーー
あまりのエレガントさにびびりました。
わたしの元ソースと比べるべくもないですな。
ハハハハハハハハ

めちゃくちゃ示唆に富んでるソースだし。。。。
ただ私のPerlへの理解度が追いついてない部分があるので、ラクダ本と突き合わせながらじっくり読ませてもらいます。

ここに質問してよかったです。
ありがとー

#こんな時に明日からしばらく出かけなくちゃいけないtt
#どっぷり漬かりたいのにtt
019415602/09/21 12:02ID:mTosX4PH
>>192
おはよーございますw
KEEP-ALIVEですか。ほうほう。
はじめて聞きます(汗

字面からは、一度ソケットひらいて通信してそのまま次の通信をするって感じとか想像するんですが、
大外ししてるかな。。。。

資料あさりたいですが、後日ってことになりそうです。
すみませんtt
0195nobodyさん02/09/21 12:57ID:/+fRFKXb
jcode.plを用いてテキストファイル(EUC)をsjisに置き換える物をつくったんですが
正しく動きません。見てもらえませんでしょうか・・・

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:???
*xxx or \$xxx
019719502/09/21 13:40ID:/+fRFKXb
>>195
無事解決できました。ありがとう!
0198nobodyさん02/09/21 13:41ID:???
自己解決?
0199nobodyさん02/09/21 14:02ID:???
ほえー、こんなスレあったんだァ。。。。
ぼく小学生だけとPerlのことはなんでも聞いてよ!
0200どうにかして02/09/21 14:15ID:???
54 名前:3PIO ◆3pIoOHKo :02/09/13 22:21 ID:???
俺のサイトは全て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:???
>202
才能は必要。
努力しつづけるという才能が。
途中で諦め、投げ捨てるような人には無理。

要は根気だ。
俺は根気があるのは才能だと思ってる。
0204b02/09/21 15:31ID:ererLzW2
http://muvc.net/jsweb/profiles.html
0205nobodyさん02/09/21 16:22ID:???
>>202が見ているのがHTMLのソースとかだったら爆尿
0206nobodyさん02/09/21 18:15ID:???
>>205
え、違うんですか?
0207nobodyさん02/09/21 18:19ID:0Otbw0Zc
ば!

く!

にょ!


ウウウウウウゥゥ!
0208nobodyさん02/09/21 18:19ID:???
ザバーーーーーーー
0209nobodyさん02/09/21 18:20ID:???
Perl/CGIのソースと
右クリックの「ソースの表示」は違うぞ
というか基本的なHTMLの知識があればそれぐらいわかるだろ
0210nobodyさん02/09/21 18:27ID:???
>>207 >>208
はいはいおじいちゃん、
おむつ替えますよー
021120202/09/21 18:41ID:/+fRFKXb
根気は無いですが、男根ならあります。
だめでしょうか?
0212nobodyさん02/09/21 18:44ID:f7+ObQJd
01,田代,まさし,40歳,
02,田代,花子,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:???
>>212
乱暴なやり方。

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:???
>>214
ありがとうございます。動きました!
別ファイルにデータを置いてるので、

$data='data.txt';
open(IN,"$data");
@data = <IN>;
close(IN);

として大丈夫でした。
あつかましくも追加で…上記データで言うと名字の部分と年齢の部分というふうに
特定の列のみ抽出することは出来るでしょうか?
0216nobodyさん02/09/21 20:35ID:???
>215
できる。
どうやればできると思う?
0217nobodyさん02/09/21 21:37ID:f7+ObQJd
>>216
それがどうにも分からんのです…
0218nobodyさん02/09/21 21:58ID:???
>217
>>214 さんが示している例がどうして動くのか、理解しましょう。
そうするとどこが問題点か解るはずです。
まず、その問題点を探してみて下さい。
0219 ◆AOHU.zVE 02/09/21 22:23ID:???
ヽ(´▽`)ノ
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:???
GyRCJCokXiQoJGkySyRAJEohKhsoQg
0221nobodyさん02/09/22 00:49ID:bAgDqIKf
ユーザー名とパスワード認証後、各ユーザー”別”のデータをcsvから読み出すにはどうしたら
良いのでしょうか。
イメージとしてはYahooや、ポイント制のあるEコマースサイトの様な機能なんですが。

もう少し具体的に書きますと、

・ユーザーID,パスワード,ポイント
以下同じ構文のcsv

みたいなcsvファイルを使って

・そのcsvに記載されてあるID,パス認証
・認証後、”同じ列”にあるポイントの表示

というような事はどうすればよいのでしょうか。
よろしくお願いします。
0222nobodyさん02/09/22 00:56ID:???
>>221
やる手順は解っているわけだから、実際にやってみてどの部分でつまづいてるの?
0223nobodyさん02/09/22 01:16ID:bAgDqIKf
>>222さん
初歩的なID,パスワード認証
(csvを読み込んで、変数に格納、それとFORMの数値を見比べてイコールなら移動)
まではわかるのですが、
その後のcsvから、ポイントの取り出しが分かりません。

縦の関係は分かっても、横の関係が分からない、というか何というか。
よろしくお願いします。
0224nobodyさん02/09/22 01:27ID:???
>>223
splitっていうか、分割できないでIDどう取るわけ?
すっげー非効率なことしてる気がしてきた。

まぁCSV落とされないようにね。
0225nobodyさん02/09/22 01:29ID:???
IDとパスは暗号化しておいて欲しいな。
022622202/09/22 01:55ID:???
認証後のポイントの取り出し方は、シュウォーツ変換を利用して
ユーザIDを比較して取り出せば?

($point)= map{ $_->[0] eq 'id' ? $_->[2] : () }map{ chop, [split(/,/, $_, 3)]} <DATA>;
022722202/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:dGvJOxY3
IDパスワードを暗号化しないとどうなるの?
0229nobodyさん02/09/22 12:14ID:???
IDのほうは暗号化しなくてもいいんじゃねー?
0230 ◆AOHU.zVE 02/09/22 16:21ID:???
cpan.jpというドメインを取得したのですが
なんか使い道ないかなぁ。。。
CPANミラーする程度しかおもいつかなくて、、、
(すれ違い?)
0231nobodyさん02/09/22 16:28ID:Fc82peeX
お
0232nobodyさん02/09/22 16:59ID:???
いるよな、こういう「ドメイン取ったぜ!使い道ないけど」厨房
■ このスレッドは過去ログ倉庫に格納されています