【Perl】初心者コーナーPart9
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
01/12/28 23:21ID:SPLRvqQi1:自分はこう言う事がしたい。
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を見よう。
0655名無しさん@お腹いっぱい。
02/02/09 00:54ID:R07+bRc7ブラウザの種類(携帯は機種も)、IP、SSID、日付、訪問回数等を
取得できる方法ありませんか?
今は
# 適当なファイルをopenして
open(LOG,'>>logfile');
# 情報を書き込む
print LOG "$ENV{'DATE'} $ENV{'HTTP_USER_AGENT'} $ENV{'REMOTE_HOST'} $ENV{'REMOTE_ADDR'}\n";
# ファイルをクローズ
close(LOG);
ってやってるんですが、1回のアクセスで同じ情報が数回残るんです。
ちなみに掲示板のCGIの上のほうにつけてるんですが。
0656名無しさん@お腹いっぱい。
02/02/09 01:06ID:???表示 1回。
書き込み 1回。
リロード 1回。
同一IPアドレスからは連続して情報を書き込まないようにすれば。
0657名無しさん@お腹いっぱい。
02/02/09 01:12ID:R07+bRc7そのやりかたがわからないんです。
日付とSSIDの取得もわかりません。
もしわかるのであれば簡単なソースでものせてもらえませんか?
0658名無しさん@お腹いっぱい。
02/02/09 01:17ID:???自分が取りたい所で取れば良し
0659名無しさん@お腹いっぱい。
02/02/09 01:37ID:R07+bRc7他の人が教えてくれるのを待ってます。
0660名無しさん@お腹いっぱい。
02/02/09 01:39ID:???>>656な俺も既に回答は放棄してるよ。
もう少し具体的に書かないと。
0661名無しさん@お腹いっぱい。
02/02/09 01:57ID:???自分で書いて何処でどう動いてるか分からんのか?
改造だったら改造スレにソース上げれば教えてくれるかもな
0662652
02/02/09 02:26ID:???Storable, FreezeThaw, Data::Dumperなどで$dbhをプーリングする
・・・くらいしか思いつかなかったヨ。
> Hashの参照と中身(データ)を丸ごとプロセス間でやり取り
これをやってくれるのが上記のモジュール群だと思うのだが、どうか。
0664名無しさん@お腹いっぱい。
02/02/09 13:58ID:ZyuqXnPGrequire "jcode.pl";
&jcode'tr(\$string,'0-9A-Za-z','0-9A-Za-z');
これってなにか間違ってます?いろいろ調べたんですが、
頭の&無かったり'が::だったり、jcodeのヘッダでは最初の引数が*line
で*ってなんだ??とか全然わからんです。お願いします。
0665名無しさん@お腹いっぱい。
02/02/09 15:53ID:???いろいろ調べた?
Googleで"jcode.pl"を検索すると出る最初のページすら読んでないのに?
jcode.plの私的な解説書 <http://www.mikeneko.ne.jp/~lab/kcode/jcode.html>
そこにこう書いてあるぞ。
> 「-」による範囲指定は、$line の文字コード及びスクリプト自身が、JIS か EUC でなければなりません。
0666664
02/02/09 16:13ID:ZyuqXnPG0667名無しさん@お腹いっぱい。
02/02/09 16:31ID:???別段間違えて無い筈だぞ
一応最新Ver落としてやり直してみれ
まさかターミナルがSjisとかじゃ無いよな?
0668664
02/02/09 16:33ID:ZyuqXnPG何も変換されません。
ちなみにターミナルってなんですか?
0669名無しさん@お腹いっぱい。
02/02/09 16:44ID:???0670名無しさん@お腹いっぱい。
02/02/09 16:47ID:???ターミナルはターミナルだ、訳せ :)
&は関数のプレフィックスな、まあ有っても無くてもいい
'と::は意味が同じだが、まあこれもなるべく::を使え
*と\はちょっと違うんだけど、まあ似たようなもんだから気にするな
0671664
02/02/09 16:47ID:ZyuqXnPGjcode.plが壊れていたようでした。
正常なものに更新したら無事変換されました。
0672名無しさん@お腹いっぱい。
02/02/09 16:52ID:???投げやりな回答が分かり易くてGood (・∀・)b
0673名無しさん@お腹いっぱい。
02/02/09 17:44ID:???Perl5から非推奨だっけ?'
0674名無しさん@お腹いっぱい。
02/02/09 17:57ID:???んだ。
Perl5からはパッケージデリミタは :: になっている。
' は後方互換の意味しかない。
型グロブとリファレンスについては、
速度の点や、スレッド有効での問題があるから、
素直にリファレンス使ったほうが良い。
0675名無しさん@お腹いっぱい。
02/02/10 03:48ID:TjXtgJNe208_978_4_37 この時、
208を取り出すにはどしたらいい? substrを使うかな?もっと簡単な方法あるよね?
0676名無しさん@お腹いっぱい。
02/02/10 03:50ID:???0677名無しさん@お腹いっぱい。
02/02/10 03:52ID:???$str = "208_978_4_37";
$str =~/^(\d+)/$1/;
2.
$str = "208_978_4_37";
$str = (split /_/, $str)[0];
substrが一番簡単です。
0678名無しさん@お腹いっぱい。
02/02/10 03:55ID:TjXtgJNe>676 >677 ありがとうございました。
0679名無しさん@お腹いっぱい。
02/02/10 11:23ID:jVpiRjZnlocal(*data, @cokkie);
などを見かけますがこれの*dataの「*」の意味が理解出来ません。
どなたかご教授お願いします。
0680名無しさん@お腹いっぱい。
02/02/10 11:30ID:???参照。
ポインタのようなもの。
0681名無しさん@お腹いっぱい。
02/02/10 11:38ID:jVpiRjZnお答えありがとうございます。
参照という事はつまり、上記の
local(*data, @cokkie);
では、$data @data %dataが全て局所化されるという意味でしょうか?
ポインタはCの経験が無いもので、ちょっと理解出来ないです。。
0682名無しさん@お腹いっぱい。
02/02/10 14:24ID:???意味は>>681であってる。
0683名無しさん@お腹いっぱい。
02/02/10 17:16ID:LAh5h/XvWindowsで関連付けしたアプリで自動的に開きたいんですが、
どうすればいいんでしょうか?
hoge.txt を書き出したとして、
それを関連付け実行(ダブルクリック)した動作が実現すればいいんですが…。
(エディタでhoge.txtが開ければOK)
0684名無しさん@お腹いっぱい。
02/02/10 17:19ID:???0685683
02/02/10 17:26ID:LAh5h/Xvありがとうございます。でも、
「コマンドまたはファイル名が違います.」
と出てしまいます…。
0686名無しさん@お腹いっぱい。
02/02/10 17:29ID:SYLMgyWMhoge.txtのパス通ってる?
同じフォルダに置いてやってみ?
0687名無しさん@お腹いっぱい。
02/02/10 17:30ID:???systemの実装がshellexecute()なら動くけどね。
0688名無しさん@お腹いっぱい。
02/02/10 17:32ID:???0689686
02/02/10 17:33ID:SYLMgyWM漏れが出来たから、、偉そうな事言ってごめそ
0690683
02/02/10 17:36ID:???パスは通ってました。 >>686
DOS窓から関連付け実行する時も start〜 で行けますね。勉強になりました。
ありがつおございました。
#と言うか、こんな時間に即レスが帰ってきたことにビクーリ
0691681
02/02/10 18:08ID:wM0dEuj6*data
↑は型グロブいうんですね。知らなかったです。で検索して見たところ
Knave Web講座 というすごくわかりやすい解説がしてあるページにたどり
付きまして、なんとか理解することが出来ました。
>>680さんともどもありがとうございました。
0692名無しさん@お腹いっぱい。
02/02/10 18:14ID:???Set-Cookie: ******
は必ず
Content-type: *******
の1行下に記述しなければいけないのですよね?下の例であってますでしょうか?
例:
Content-type: text/html\n
Set-Cookie: web=$hoge\n
HTML記述〜
0693名無しさん@お腹いっぱい。
02/02/10 18:17ID:???逆。
Set-Cookie: web=$hoge\n
Content-type: text/html\n
後、有効期限書かないとすぐ消えるよ。
0694名無しさん@お腹いっぱい。
02/02/10 20:07ID:???たとえば
1,3,4,5,6,7,8,9
とかあったら2を返すようにしたいんですけど。
0695名無しさん@お腹いっぱい。
02/02/10 20:10ID:???階差数列を利用すれば?
$a[$i + 1] - $a[$i] = 1
となる。この条件に合わなければブビー!
0696名無しさん@お腹いっぱい。
02/02/10 20:14ID:SYLMgyWM%char = map { $_, 1 } @char;
for(1 .. 9) { print if not exists $char{$_} }
イマイチ?
0697名無しさん@お腹いっぱい。
02/02/10 20:30ID:???0698デビデビ
02/02/10 20:38ID:TkcMar2jX サーバが走ってないマシンで、動かす方法はあります?
0699名無しさん@お腹いっぱい。
02/02/10 21:04ID:???OH!?だから動かなかったのか。。?
どうもありがとうございました。
広告メールの配信企業は他にも多数あります。しかし登録したはいいがメールが来ない、懸賞は自作自演、
果てには個人情報収集目的のサービス実態なし、なんてサイトまであります。
その点このサイトは月10通〜20通の配信実績がありますし、何より住所・電話番号等不要なので匿名性が高く、安心。
それにちゃんと送金してくれます。私も既に3回送金してもらいました。
ポイントが加速度的に増えるサービス、いくつかありますので仮登録したらCheckしてみて下さい。
※注意※
必ず 本登録 して下さい。仮登録のままではポイントが加算されません。
本登録するには アンケート に答えてから 本登録スタートボタン (メールでURL配信される)を押します。
興味のある項目を答えるアンケートでは全てチェックを入れるのが吉。その分配信メールが増えてポイント増。
本登録スタートボタンのURLが載ったメールが来るまで数日〜数週間かかりますが、待っただけの価値は十二分にあります。
時間がかかるケースが多いので早めに仮登録を済ましておくことをお勧めします。
その後の本登録維持も忘れないようご注意下さい。(何かと面倒なのも広告出稿者を多く集める為の策のようです)
Ariga10.com
http://www.ariga10.com/?id=207008
こちらから登録できます。記入欄は少ないので時間はほとんどかかりません。
0701名無しさん@お腹いっぱい。
02/02/10 21:44ID:???マルチですか・・・。
0702名無しさん@お腹いっぱい。
02/02/10 21:53ID:???あれだろ。
スレ立てて指摘されたんで質問直しなんだろ。
マターリマターリ
0703名無しさん@お腹いっぱい。
02/02/10 22:55ID:???>>697 を参考にして
grep { ! { map { $_ => 1 } @hoge }->{$_} } ((sort @hoge)[0]..(sort @hoge)[$#hoge]);
てな感じか?
0705名無しさん@お腹いっぱい。
02/02/11 00:20ID:rEaHJsWIprint grep { ! { map { $_ => 1 } @hoge }->{$_} } ($sort->[0]..$sort->[$#hoge]);
0706名無しさん@お腹いっぱい。
02/02/11 00:21ID:rEaHJsWIgrep { ! { map { $_ => 1 } @hoge }->{$_} } ((sort { $a <=> $b } @hoge)[0]..(sort { $a <=> $b } @hoge)[$#hoge]);
0707名無しさん@お腹いっぱい。
02/02/11 00:32ID:???何番目の要素なのかを取得する方法って有る?
いつもブロックの中で$i++とかして参照しているけど、
いまいちスマートで無い気が。
0708名無しさん@お腹いっぱい。
02/02/11 01:01ID:???それが一番スマート。
0709名無しさん@お腹いっぱい。
02/02/11 02:54ID:fuw0wehn0710名無しさん@お腹いっぱい。
02/02/11 13:12ID:???Perlと関係ねーだろ。
CGI質問スレのほうがまだまし。
0711名無しさん@お腹いっぱい。
02/02/11 20:56ID:???ふ〜む、やっぱりこれしか無いか。ありが�d
0712名無しさん@お腹いっぱい。
02/02/11 21:59ID:???for (my $i = 0; $i <= $#hoge; ++$i) {
...
}
という手も有り。
0713名無しさん@お腹いっぱい。
02/02/11 22:10ID:???配列へ入れずにファイルをwhileでまわすのとどっちが効率いいんでしょう?
0714名無しさん@お腹いっぱい。
02/02/11 22:52ID:???効率というのはメモリ効率なのか処理効率なのか分からないが
この場合は(単語1つ1つが膨大なサイズでなければ)
前者の方がメモリを喰らうけど速いなり。
もっとも、1・2回の繰り返しじゃ体感できるような差はないと思われ。
0715名無しさん@お腹いっぱい。
02/02/11 23:04ID:???レスサンクスです。参考になりました。
実はチャットの名前の色のリストなんですね。たいした量じゃないです。(笑
0716名無しさん@お腹いっぱい。
02/02/11 23:05ID:???for(0..$bar){
@data = split(/\0/, $all_data[$_]);
unless(defined($FOO{$data[0]})){
print"処理:新データとして書き込み";
}else{
print"処理:旧データと一部差し替え";
}
}
print"最終処理"
dbmclose(%FOO);
ソケットで得た複数のデータ(名前、所属、個人番号、等)を、
$FOO{個人番号}に収めて管理するプログラムを作っています。
データは正しく受け取れて、一通りの動きはしてくれるのですが、
なぜか最終処理の部分まで到達してくれません。
不思議な事に、ローカル環境(Win2000+Apache、Win98+Apache)では最終処理まで到達します。
解決方法をご存知でしたらご教授いただければ幸いです。
0717名無しさん@お腹いっぱい。
02/02/11 23:14ID:???print"最終処理"
; が最後に抜けているとか?
\nないからバッファリングのデータ(最終処理)が吐き出されないとか?
0718名無しさん@お腹いっぱい。
02/02/11 23:16ID:???野暮だが・・・
Perl5ならdbmopenじゃなくtie使ったほうが良いよ。
0719名無しさん@お腹いっぱい。
02/02/11 23:17ID:???Socket扱うならバッファリングは行わないのが吉。
$| = 1;
0720名無しさん@お腹いっぱい。
02/02/11 23:18ID:rEaHJsWI値にアクセスする時 $hoge[$i] になって遅くなる。
とラクダに書いてある。w
continue { $i++ }
とかはどうかな。。あんま変わらんか。
0721707
02/02/11 23:53ID:???ラクダ見たけど、遅くなるなんてどの辺に書いて有るんでせうか。
>>712
そういうことで、改めてラクダ読んだら、第2章のforeachの説明
のところで、明確にforeach中で、要素の番号を知る方法は無い
と書かれていました。で、隣り合った要素を比較するなどの場合
は、>>712の方法が一つの解として紹介されており、ラクダを良く
読まねばと思う、今日この頃。
0722720
02/02/12 00:14ID:ed1xHjmGたぶん同じページやでw
ラクダ第2版日本語のp.114、
> また、こちらのほうが高速なのは〜〜〜アクセスできるからだ。
って奴。
そういうことはちゃんと読んでから言えw
0723720
02/02/12 00:15ID:???0725たま
02/02/12 00:37ID:/NrbiZO42. http://digit.que.ne.jp/work/mtWiki/yukiwiki.cgi/yukiwiki.cgi?mycmd=read&mypage=%5B%5BCGI%3A%3ALite%5D%5DのCGI LITEと、cgi-lib.plを利用した
3. READShort と出た。
CGILITEを使って画像のアップと、コメントの送信をするにはどうしたらよろしいかお教えください
0726名無しさん@お腹いっぱい。
02/02/12 00:41ID:???perldoc CGI_Lite
%Link = ('2'->'www.google.com', '1'->'www.yahoo.com');
while(($Name,$Addr) = each %Link){
print qq( [ <A href="$Addr">$Name</A> ]);
}
で出力が同じなのはなぜスか?
リストのほうで並び替えても出力(並び方)が変わらんのだが・・・
いい書き方あれば教えてください。
0728名無しさん@お腹いっぱい。
02/02/12 01:41ID:???って前もどっかに書かれてたな、、
sort key %Link にするか、どっかのモジュール(名前忘れ)使うかどっちかがいいと思われ。
0729727
02/02/12 02:01ID:???フム,sort key %Link のほうを調べてみます。
ありがとう!
0730名無しさん@お腹いっぱい。
02/02/12 02:05ID:???'1_藍上尾', '2_柿苦毛子'にしてwhileでまわして,表示する直前に'1_'を消すとかか。
うーむ,めんどいな。
0731名無しさん@お腹いっぱい。
02/02/12 02:06ID:???-> ではなく =>
> どっかのモジュール
Tie::IxHash
0732agege
02/02/12 02:49ID:???key ⇒ keys
1_, 2_ などのキーをソートしたいなら、sort {$a <=> $b} %Link だけど、
必ず数値+_形式のキーが来ると決まっているのなら、末尾の_を取り除いて
普通の配列にしてもいいネー。
0733名無しさん@お腹いっぱい。
02/02/12 03:18ID:???ちなみに
>>732
sort { $a <=> $b } keys %Link
0734名無しさん@お腹いっぱい。
02/02/12 03:23ID:???0735名無しさん@お腹いっぱい。
02/02/12 04:49ID:???CGItempXXXXというファイルが残るって書いたものですが、
解決いたしました。
0736名無しさん@お腹いっぱい。
02/02/12 05:49ID:PUJwyJrlよかったねー。
なんかいい方法あったの?
0737名無しさん@お腹いっぱい。
02/02/12 06:37ID:???>どっかのスレッドに
書き逃げでもしたの?
>解決いたしました。
解決方法も書き込めば、ログ読んだ他の人も助かるかもよ。
0738名無しさん@お腹いっぱい。
02/02/12 12:02ID:???そのままだとひとつのサイトに対して
「ハッシュのkey」と「ハッシュのvalue」の
2つづつしか要素を持てないから
いっそのこと
%site = (id => 1, url => 'www.google.com', name => 'Google', comment => '便利!');
みたいな形式にしちゃって
push(@list, \%site);
していってそれをソートして表示してみるっていうのはどう?
foreach $this (sort {$a->{name} cmp $b->{name}} @list) {
print $this->{id}.'<a href="'.$this->{url}.'">'.$this->{name}.'</a>'.$this->{comment};
}
これならひとつのサイトに対していくらでも要素を持てるし、
ソートもID順とかURL順とかいろいろできるからいっそう便利かなーと。
0739print<<"EOF";
02/02/12 15:27ID:sXZ1u4GK0740名無しさん@お腹いっぱい。
02/02/12 16:23ID:???何故?普通にバリバリ使いまくってますが。
0741名無しさん@お腹いっぱい。
02/02/12 16:25ID:???多分ヒアドキュメントを書くときソース中でインデントできない
とかいうやつですか?
先頭のインデントを出力する前に正規化で削除すれば綺麗になる
し、ソース中の見栄えもよくなるからよろしいかと思われ
てかまったく関係なかったらゴメソ
0742名無しさん@お腹いっぱい。
02/02/12 16:59ID:???自分の場合はキレイにしないでそのまま(\t付きのまま)出力してるけど、、
クックブックの24ページにのってるね。<正規
0743print<<"EOF";
02/02/12 21:39ID:???レスありがとうです。
そうです、>>741さんの言うとおりインデント出来ないのが…。
と思ってたら、やっぱり回避策があったんですね。
頑張って自己満足なソースの美化に尽くします(笑)
あ、そうだ。ベンチマークでもとってみるか。ヒアドキュメントの。意味ないけど。
0744名無しさん@お腹いっぱい。
02/02/12 22:10ID:???>あ、そうだ。ベンチマークでもとってみるか。ヒアドキュメントの。意味ないけど。
そういう心がけが上達の道だと思ったり。何となくだけど。
料理本以外にもEffective Perlは個人的にはお薦めなんでご覧あれ。
0745名無しさん@お腹いっぱい。
02/02/13 07:36ID:u18sBL1T数時間検索したけど見付けられず…。
どなたか解説、お願い出来ないでしょうか。
0746名無しさん@お腹いっぱい。
02/02/13 08:08ID:???...
_HERE_
0747745
02/02/13 09:47ID:???/igsoe位しか修飾子つかったことが無かったのですが、
/m 文字列を複数行として扱う、はこう使うものなんですね。
勉強になります。ありがとうございました。
0748名無しさん@お腹いっぱい。
02/02/13 15:02ID:???変数を展開できないとか書いてあって、鬱。
こういうもんなんすかね、一応プロフェッショナルブックとか
名うってあったんですが(藁
0749名無しさん@お腹いっぱい。
02/02/13 15:25ID:???酷い本だな。
0750名無しさん@お腹いっぱい。
02/02/13 16:02ID:???HTMLファイル内の記述で、.cgiファイルを起動させたいのですが、
どうしたらいいですか?<img src=xxx.cgi> だと、HTMLに画像跡がでるし。
お願いします。
0751名無しさん@お腹いっぱい。
02/02/13 16:15ID:???0752名無しさん@お腹いっぱい。
02/02/13 16:22ID:???ありがとうございます。消えたました。
imgタグで起動してるか心配だけど試してみます。
0753名無しさん@お腹いっぱい。
02/02/13 18:11ID:KS70lsn0で,$temp = 1889 になったんだけどなんで?
ActivePerl 5.6.1.630
0754名無しさん@お腹いっぱい。
02/02/13 19:12ID:???18.9を2進法に変換してみると分かると思われ。
0755名無しさん@お腹いっぱい。
02/02/13 20:38ID:???ま、可能な限り不自然にならないように、いろいろ苦労してるんですよ。
■ このスレッドは過去ログ倉庫に格納されています