【Perl】初心者コーナー Part13
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/05/30 13:06ID:R2kt1mTx1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIの質問は【CGIだけど、なんか質問ある? part 6】
http://pc.2ch.net/test/read.cgi/php/1019561283/
参考書籍の話題は【【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あたりを見よう。
0021nobodyさん
02/06/01 05:07ID:???よろしく
0023山
02/06/01 23:23ID:A+zARsIN($a,$b,$c) = split(/<>/, $line);
if($a eq "abc") { ???????????? }
}
foreachで配列を処理します。$aが、abcだった場合、現在処理中の
配列のセット($a,$b,$c)ごと削除したいんです。
説明わかりにくくてすみませんが、どうすればいいですか?
0024nobodyさん
02/06/01 23:29ID:???これ使って自分でモジュールを作れ。
http://www.vector.co.jp/soft/win95/util/se032901.html
0027nobodyさん
02/06/02 04:53ID:???そもそも、23ってwhileの方が…
それか
foreach(@qq){
($a,$b,$c) = split(/<>/, $line{$_});
~~~
0029もじら
02/06/02 10:42ID:???DBIをどのように設定したらいいかわかりません
どのように答えたらいいかわかりません
0033もじら
02/06/02 14:24ID:???接続ID = pg_connect("","","DB名");
これはPHPの中の記述です
この書き方は何に依存しているかは不明ですが
それでこの関数でエラーがでました
httpd とポスグレの状態は起動しています
どのように起動していればいいかは不明です
テーブルも作りました
ほんとに質問の仕方もわかりません
0034もじら
02/06/02 14:30ID:???おそらくPERLからDB関数でカーソルを得てるとおもうのですが
DB関数はナニに依存しているのか、どこに組み込めばよいのか不明です
VBはOCXとODBCドライバを記述すればよかったのですが
VBでADOをさわったことはあるのですがカーソルは使えます
PERLがカーソル機能をもっているなら、関数を書けばいいだけなのか
不明です。
0036nobodyさん
02/06/02 14:54ID:???PHPだと>>33のようにすればできたけどPerlでDBとのやりとりを行うにはどうすればいいの
他の言語だと>>34のようにできたけど。
やるための準備はできているからPerlでの記述の仕方を教えて。
きっとこんな感じだろ。
0037もじら
02/06/02 15:16ID:???この書き方でDBIの関数を使える
これは正しいですか?
もし正しいなら、DBIモジュールはどこに組み込めばいいのかわかりません
DBIの概要は読みましたが、どこから入手してどこに組み込むのかわかりません
決してソースのキボンヌではないです
でもINSERT文のひとつが実行できたらミッション完了です
よろしくおねがいします
0038nobodyさん
02/06/02 15:21ID:???つーか「モジュールとはなにか」すら理解せずにDBIを使おうとするのは間違ってます。
0039nobodyさん
02/06/02 17:14ID:QCpBS98Orequire 'jcode.pl';
jcode::convert(\$value, 'euc');
jcode::tr(\$value, '0-9A-Za-z', '0-9A-Za-z');
としてみたんですがsjisにしないと文字化けするため、上記のあとの行に
&jcode'convert(*value,'sjis');
をいれてみました。ですが全然変換されない状態です。
アドバイスあればお願いします。
0040nobodyさん
02/06/02 17:23ID:QdZB4aXd004139
02/06/02 17:31ID:QCpBS98OEUC以外の方法はないんでしょうか?
0042nobodyさん
02/06/02 18:04ID:DhpOMnbMリンクのCGIで入力項目を一つ増やしたのですが
ログに記録されません!
どこがおかしいのでしょうか?
http://nyanyanya.hoops.ne.jp/link.txt
増やした項目は bun ってゆーのです。
よろしくお願いします!!
0043もじら
02/06/02 19:07ID:???だからウィンユーザにmakeは不要なのです
私はウィンソック担当だからCGIのインタフェースを理解して
テスト環境を構築してるのです
手順だけわかればOKですので誰かつついてくれませんか?
0044nobodyさん
02/06/02 19:28ID:???シフトJISだとこうかなあ。
$_ = 'TBC個人情報3万件流出';
my @zenkaku = qw(
0 1 2 3 4 5 6 7 8 9
A B C D E F G H I J K L M
N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m
n o p q r s t u v w x y z);
my @hankaku = ("\x30".."\x39","\x41".."\x5A","\x61".."\x7A");
my %table;
@table{@zenkaku} = @hankaku;
s/(\x82[\x4F-\x9A])/$table{$1}/g;
print;
>>40
trは文字単位の置き換え。
$str1 = $str2 = 'abc abz';
$str1 =~ tr/abc/ABC/d;
$str2 =~ s/abc/ABC/g;
print "str1: ",$str1,"\n"; # ABC ABz
print "str2: ",$str2,"\n"; # ABC abz
>>43
帰れ。
004539
02/06/02 19:42ID:QCpBS98Oしかしすごいですねー。
0046nobodyさん
02/06/02 21:18ID:???0047nobodyさん
02/06/02 21:25ID:???こうでよかったね。>>44のは関係ないのと混ぜちゃった。
004839
02/06/02 21:49ID:QCpBS98O>>44のTBCがRABに変換される仕組みを作ってるのは
s/(\x82[\x4F-\x9A])/$table{$1}/g; この一行だと思うんですが
どうしてこれだけで変な変換されるのかわからないです。
まともに変換するためにはどうすれば良いのでしょうか?
また、このコードはどうやって調べてるのでしょうか?
0050nobodyさん
02/06/02 22:02ID:???http://www.bh.wakwak.com/~min/cgi-bin/monoceros.cgi
何がいけないんでしょうか・・・
お教えいただければ幸いです。
0051nobodyさん
02/06/02 22:09ID:???0052nobodyさん
02/06/02 22:10ID:???ttp://tohoho.wakusei.ne.jp/wwwperl2.htm#socket
>50
配布CGIは配布元で聞くべし。
0053nobodyさん
02/06/02 22:11ID:vJY+ySFUそのときのcgiが受け取った数値は文字列として受け取るの?
0054!
02/06/02 22:23ID:0rr9HH/y0055nobodyさん
02/06/02 22:28ID:???うちだと上のままで動くから原因がわからん。
BCがABにずれるんなら、一文字ずれてるのかな。
コードは16進に変えてるだけ。検索すれ。
>>49
なんでさっきから一つズレてるの?
0056nobodyさん
02/06/02 22:30ID:xW341CtXYES
0057nobodyさん
02/06/02 22:30ID:???0058ぎもじら
02/06/02 22:37ID:???でもわかりやすいHP情報助かりました
005939
02/06/02 22:46ID:QCpBS98O>>44のをコピペしたときに my @zenkaku = qw(のあとにつづく部分の
改行をとったんですが、そのときに半角スペースを削ってしまってました。
その影響でTBCがRABに変換されていたようで、うちの地元のTVニュース番組で
RABてのがあって、これはいったいどういうことだろう?と思い。。。
関係なくてすみません。とにかくありがとうございました。
0060nobodyさん
02/06/02 23:32ID:???0061nobodyさん
02/06/03 00:08ID:450OcSEVそれで、10000行の入力でdprofppを使ってプロファイルを取ってみると、
Mymod::BEGINが10000-20000回の間で呼び出されていて、
定義していないはずのmain::BEGINも10000回前後呼ばれています。
perlmodには「BEGINは1回だけ呼ばれる」と書いてあったと思うんですが。
0062nobodyさん
02/06/03 00:49ID:???みなさん、
タカラ(およびコナミ)との『聖戦』が始まりました! これをコピペすれ!
コナミがタカラを買収! 黒幕はコナミか?
http://www.mainichi.co.jp/life/hobby/game/news/news/past/200004/20000427_03.html
株式会社タカラが、「ギコ猫」を商標出願中。 (,,?Д?) 我らのギコ猫を救え!
http://www2.ipdl.jpo.go.jp/BE0/index.html の商標検索から「ギコ猫」入力
=============開始==============
・広報コピペ部隊 できる限り各地にのニュースを伝える 例)タカラの株式スレなど
・テンプレ部隊 関連スレ・抗議文などのテンプレを作る
・法律部隊 法的に議論、打開策を考える
・誘導部隊 各地で出てくるであろう新参にいろいろ教えてあげる
・不買運動部隊 不買運動を広めよ
・株主・IR対策部隊 株価・株主・企業活動としてのPRやIRに対する対策
F5や単なる中傷は控えめに。正々堂々と戦うのだ。
0063nobodyさん
02/06/03 04:44ID:zPDyt+6kソースみんとわからんけど。
BEGINブロックが複数あると、その数だけDProfはカウントするぞ。
あと「use Hoge;」は「BEGIN {require Hoge; import Hoge;}」に等しいから
useを使うごとにBEGINブロックが一個追加されることになる。
しかしカウント数が1万回にもなる理由はわからぬ。
0064nobodyさん
02/06/03 10:16ID:9MQeJRCJcgiでデータを更新し、一番上(1行目)にデータを追加するのですが問題があります。
5行目のデータ(文字数)が長い場合、更新して新しいデータを追加したとき
古い五行目の余分なデータが新しい5行目のデータの最後に付いてしまっています。
open(FILE,"+<$filepath");
#処理は省略
pop @data;#6個目は削除
seek(FILE,0,0);
print FILE @data;
こんな感じでやってるのですが、最後のデータが大きいとデータが残ってしまいます。
どうやればいいのでしょうか。
006664
02/06/03 11:27ID:???できました。
そんな関数truncateがあったとは。
0067nobodyさん
02/06/03 15:53ID:UUcyKeQxこの方法で文字化けを回避しようするとエラーがでます。
エラーをださないようにするにはどうすれば?
0068nobodyさん
02/06/03 15:56ID:???最初からeucを使う。
0071nobodyさん
02/06/03 17:27ID:???@letters 内の、重複した要素を削除する方法を教えてください。
よろしくお願いします。
0073nobodyさん
02/06/03 18:48ID:???すいません、よく意味が分かりません・・
もう少し詳しく教えていただけませんか?
0074nobodyさん
02/06/03 19:00ID:???%mita = ();
foreach $youso (@letters) {
push(@newletters, $youso) unless $mita{$youso}++;
}
0075プロのグラマー
02/06/03 19:09ID:???0076nobodyさん
02/06/03 19:14ID:???perlに必ず付いてくるperldocコマンドつーのがあってな。
シェルとかDOS窓のコマンドラインから>>72みたいのを入力するわけ。
すると-qの後に指定したキーワードに関するFAQが出てくる。
ただしキーワードは英語のみ。だから「重複した要素を削除」の
方法を知りたいなら「remove duplicate elements」で検索する。
0078nobodyさん
02/06/03 21:58ID:wD1usRutよく本を見ると、perlはeucで書けと書いてありますが、これはどういうことなのでしょうか。
私は秀丸で書いてるんですが、eucで保存すると、後で開いたときにすべて文字化けしてます。
「eucで書く」という行為自体がどうすることなのかよくわかりません。
みなさんeucで書かれてるんですか?
0080nobodyさん
02/06/03 22:29ID:???seek前にtruncateすると、printする前に異常終了した場合データが
吹っ飛ぶんで、print後にtruncateした方が良いと思う。
Cookbookのサンプルもそうなってるし。
seek(FILE,0,0);
print FILE @data;
truncate (FILE, tell(FILE));
close(FILE);
0081ぎもじら
02/06/03 23:47ID:???ポスグレのDBIいれようとしたら
c:\>ppm install DBI
でインストできちゃった
なんで?
どんな仕組みになってるのかわかりません
ヨロシコ
0082nobodyさん
02/06/04 00:13ID:???分からない事があったらとりあえず検索するクセつければぁ?(゚Д゚)
0084nobodyさん
02/06/04 01:22ID:???0085nobodyさん
02/06/04 08:43ID:???Perlのバージョンは5.6.1です。
Text::Templateのバージョンは1.43です。
use Text::Template;
$NaviView = 'SHOW';
my $template = new Text::Template (
'type' => 'FILE',
'source' => 'test.html'
) or die;
print $template -> fill_in();
デスクトップでテストするとHTMLファイル内の{$NaviView}が展開されて表示されます。
しかし、cgi-bin/step8/フォルダ内だと、何故か{$NaviView}の部分が表示されません。
ソースは同じなので、原因がわからずに困っています。
どうか助けてください。
008666
02/06/04 09:27ID:b8OuO/Ji自分も調べてみたけど、そっちの方が安全性が高いみたいですね。
なんか、処理速度も速いみたいです。どうもです。
0087nobodyさん
02/06/04 11:32ID:V54BnlXw繰り返したいのですがうまくいきません。どうか助けてください。変数の中に
変数というのは無理なんでしょうか?
for($m=1 ;$m <= 9 ; ++$m){
&print($m);
}
====================
sub print {
my ($i) = @_ ;
$A = "$NO$i"; #←この部分がやりたいことです
print = $A;
}
若輩者ですが、宜しくお願いします。
0088nobodyさん
02/06/04 12:45ID:???$A = "\$NO$i"; でいいのでは。って、こういうことじゃないのか?
ちなみにforの部分は、漏れはforeach(1..9)と書くのが好き。
009061
02/06/04 13:01ID:???レスどうもでした。それと遅レスすいませんです。
tmon.outにはBEGINが数万回記録されていたのに、
BEGINにprint文を入れてみたら1回しか出力されなかったので、
DProfのバグということで落ちついてみます。
本当のところは知らないですが。
0092nobodyさん
02/06/04 13:13ID:???過去スレで出たんだけど、foreachよりもforの方がいいらしい。
foreach(1..9)だと、@_ = (1,2.3,4,5,6,7,8,9);みたいな一時配列を作ってから処理をするからメモリを食うんだと。
まぁ、この程度の数値なら差はないだろうけど、
for($i=0;$i<10000;$i++)
foreach(0 .. 10000)
くらいになると差が出るんじゃないかな?
009361
02/06/04 13:14ID:???#!/usr/bin/perl -w
use strict;
sub LIMIT { 10000 }
for (my $i = 0; $i < LIMIT; $i++) {
}
print "end\n";
このソースで下の測定結果になります。
Total Elapsed Time = 0.019991 Seconds
User+System Time = 0.019991 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
150. 0.030 0.025 10002 0.0000 0.0000 main::BEGIN
0.00 0.000 -0.000 1 0.0000 - strict::import
0.00 0.000 -0.000 1 0.0000 - strict::bits
0094nobodyさん
02/06/04 13:42ID:???過去のバージョンでは確かにそうだったが、
5.005の時点で最適化されたため、今や foreach(n .. m) の方が早い。
あやふやな知識は試してみてから外に出そうな。
0095nobodyさん
02/06/04 13:52ID:???それはPerl4とかの話でしょ。
今はもう一時配列作っていないから心配ないよ。
ちなみに0 .. 10000のほうが速い。ってperlsynに書いてある。
0096nobodyさん
02/06/04 13:53ID:???0097nobodyさん
02/06/04 13:54ID:???すまんがわからん。さっぱりわからん。
俺も幾つか試してみたけど、まるで納得いかない結果になったよ。
多分どこかにバグがあるのは間違いないと思う。
0098nobodyさん
02/06/04 14:12ID:???5.6.0では
Total Elapsed Time = -0.85246 Seconds
User+System Time = 0 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
0.00 0.575 0.105 10001 0.0001 0.0000 main::LIMIT
0.00 0.008 0.008 1 0.0077 0.0076 main::BEGIN
0.00 0.000 -0.000 1 0.0000 - strict::import
0.00 0.000 -0.000 1 0.0000 - strict::bits
Elapsed以外は正しく見えるが...
perltocにdprofpp(utility change)と書いてあるから古いの使ってるんじゃないのか?
009997
02/06/04 14:22ID:???俺のはPerl5.6.1(ActivePerl631) Devel::Dprof 20000000.00_00 だ。
このコードはどうだろう。
俺の環境では、なぜか use ...; をコメントアウトするとまともに動くのだが。
#!perl -w
use less; # strictとかでも同様。lessを選択したのは何の効果も無いプラグマだから
sub limit{ 100 }
sub LIMIT{ &limit }
for(my $i = 0; $i < LIMIT; $i++){}
0100nobodyさん
02/06/04 14:30ID:???レスどうもです。
ええと、perl -versionは5.6.1だったです。dprofppのバージョンは分かりませんでした。
SerioWare GNU/Linux 0.35A附属のものを使っています。
で、この環境では>>99と少し違って、
ちょうど>>94とかぶってたので、forとforeachを調べてみたら、
#!/usr/bin/perl -w
use strict;
for (my $i = 0; $i < 1000000; $i++) {
}
これだとBEGINは1回呼ばれるだけだったです。
0101nobodyさん
02/06/04 14:45ID:???それは知らなかった、サンクス。
もっとも、漏れのプロバのスペースはいまだにPerl4なんだけどな。(涙ッシュ
010298
02/06/04 14:50ID:???ActivePerl 5.6.1でやってみた。結果は異常。
>>98はFreeBSD上の5.6.0。こいつのdprofppにActivePerlで作ったtmon.outを
食わせてみると、ActivePerlと結果同じ。 Devel::DProfのバグっぽい。
0103nobodyさん
02/06/04 16:38ID:???出力だけs-jisに変換してるんですか?
0104nobodyさん
02/06/04 16:44ID:???0106nobodyさん
02/06/04 20:32ID:???しかもfor(my $x; $x < $limit; $x++ ) は本当はwhileだという罠
perl -MO=Deparse,-x3 -e 'for(my $x; $x < 100; $x++){ print "barf\n" }'
my $x;
while( $x < 100 ) {
print "barf\n";
}
continue {
++$x;
}
-e syntax OK
0107nobodyさん
02/06/04 20:50ID:???use Benchmark qw/ cmpthese /;
sub cstyle
{
my $a = 0;
for( my $x = 0; $x < 1000; $x++ ) {
$a++;
}
}
sub pstyle
{
my $a = 0;
for my $x ( 0..999 ) {
$a++;
}
}
cmpthese(
100000,
{
cstyle => \&cstyle,
pstyle => \&pstyle
}
);
Benchmark: timing 100000 iterations of cstyle, pstyle...
cstyle: 95 wallclock secs (94.13 usr + 0.01 sys = 94.14 CPU) @ 1062.25/s (n=100000)
pstyle: 72 wallclock secs (71.58 usr + 0.02 sys = 71.60 CPU) @ 1396.65/s (n=100000)
Rate cstyle pstyle
cstyle 1062/s -- -24%
pstyle 1397/s 31% --
010885
02/06/05 09:40ID:???myで宣言してたのがいけなかったようです。
use strictをコメントアウトしたらうまくいきました。
0110nobodyさん
02/06/05 10:03ID:???0114nobodyさん
02/06/05 14:12ID:O06am5wh2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数:105420人 発行日:2002/05/030
どもども、風薫る5月ワキガも香るひろゆきですー。
今日はどうしても報告したいことがあるですよー。
東京地裁の顔になりつつある今日この頃ですが、最近裁判官がおいらを露骨に馬鹿にするですよー。
裁判を傍聴している人は既にご存知でしょうが、ついこの前は、おいらのことを
「あなたは売春クラブの経営者みたいな言い訳をしますね」
なんて言いやがったですよー。
どうやら売春クラブの経営者は警察に捕まると必ず
「出会いの場を提供しただけだ」
と、見苦しい言い訳をするらしいですよー。。。
そんなセコイ奴等とおいらを並べて語るとは悔しいけど、ストライクですー。。。えぇえぇ、、、
確かにおいらは企業や公人の誹謗中傷を禁止していませんし、削除もしません。
その上、「発信元は判らない」を看板とし、悪質な書き込みをし易い環境を提供し、いやむしろそれを売りにしようと目論んでいますが、そんなことはおいらのクチビルの厚さとは関係ないですよー。。。
ところで、中央大卒のおいらの同級生達がおいらのことを「宅八郎みたいな奴」と罵っているって本当ですか?。。。うぅうぅ、、、
んじゃ!
0115nobodyさん
02/06/05 16:42ID:???中途半端な質問だから一般的な回答をもらったのに、脳内変換するなよ。
ユーザ個別にという前提で聞いてないじゃないだろ。
その場合はユニークなIDとセットで行うのが普通だし、判定なんて
簡単な話じゃないの。
0118nobodyさん
02/06/05 21:36ID:6v6pwQwJコマンドを教えてもらえないでしょうか?
私の調べた範囲ではわからなかったのでお願いします。
■ このスレッドは過去ログ倉庫に格納されています