【Perl】初心者コーナー Part12
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/04/27 23:17ID:1NNXdNspいらっしゃーい、Perlの「コーディング」で困ってる人のスレです。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。
CGIの質問は【CGIだけどなんか質問ある Pert 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を見よう。
0584nobodyさん
02/05/10 12:01ID:???if($xx=2の倍数){$color=#FFFFFF;}
として2の倍数の時のみ色を白に変えたいんですけどどうすれば良いのでしょうか?
0585nobodyさん
02/05/10 12:30ID:???Googleサイトのマニュアルにある以上のことは無理。
>>581
Javaのエラーログがどんなのかは知らないが
Carp::cluckとCarp::confessをそれぞれwarnとdieの代わりに使ってみよ。
見当違いだったらすまそ。
>>582
ピュアPerlなんだな?*.xsっつーファイルはないんだな?
それなら@INCにあるフォルダに突っ込めばとりあえずは動く可能性がある。
環境変数PERL5LIBの意味も調べてみろ。
0588数百のカテゴリ分け例を求む
02/05/10 12:46ID:xN5d7c7lSQLを使ってホームページの自動URLリンクプログラムを作っていますが、カテゴリー分けの作成に困っています。
数百程度に細かく分けたいのですが、自分で考えると偏りそうで。
カテゴリ分けサンプルなど参考になる文献やサイトはないでしょうか。
0589584
02/05/10 12:56ID:???私でしたら2で割る数の求め方を知らなかった人間ですので、
ちょっと。
0591nobodyさん
02/05/10 13:10ID:???http://directory.google.co.jp/
http://www.yahoo.co.jp/
真っ先に思いつくこれらは参考にならんのだろうか
0592nobodyさん
02/05/10 14:00ID:Pgg0tTKKやり方教えて・・・・。
0595nobodyさん
02/05/10 14:54ID:Pgg0tTKKhttp://sk.redbit.ne.jp/~tboard/cgiroom.html
ここの2番目のソースを見てみました。
どの辺がアップロードの処理なのか教えて・・・・・。
0596582
02/05/10 15:50ID:???レスども、
tar.gzの中に、Makefile.PLが入ってないんですよ、
単に、*.pmファイルがあるだけで、
こういう場合どなんでしょ?
0597nobodyさん
02/05/10 15:55ID:???あっ…!
>>584
すまん、間違えた
「割り切れたら」は
if(($xx % 2) == 0){ ... }
だったわ。
0598数十でもいいよ
02/05/10 16:37ID:mOuIPJt0ありがとうございます。こちらはとてもよく構成されていると思いますが、どうも全体が見渡せません。
1ページ程度内にすべてのカテゴリーが一覧として載っていて全体がわかりやすいカテゴリーのリストを探しています。
0599nobodyさん
02/05/10 16:57ID:???少しは努力しろよ
0600nobodyさん
02/05/10 17:10ID:ZA7s2wmA猿でも厨房でもわかるPerlの基礎について学べる
サイトを教えてください。(3にあるお薦めも難しいです・・・
0601nobodyさん
02/05/10 17:40ID:???「プログラミング」という行為、学習で perl が初めてなら、
先ず、javascript 辺りから始める事をお薦めします。
perl はある程度他の言語の「プログラミング」経験が
ある人じゃないと、いきなり学習するのは辛いかと…
0602nobodyさん
02/05/10 18:39ID:???ついつい文法がごっちゃになってエラー出してしまうオイラは逝ってよしですか?
0603nobodyさん
02/05/10 18:58ID:Pgg0tTKK◎;;;; ・∀・;;;) チクーワ
 ̄ ̄ ̄ ̄
0604nobodyさん
02/05/10 21:05ID:DbBvL4haテストで10回に3回ほどサーバーが強制終了されてしまいます。
何がいけないのか教えてください。
ソースは
http://members.home.ne.jp/y-koike/bbs.txt
http://members.home.ne.jp/y-koike/show.txt
です。お願いします。
0606604
02/05/10 21:39ID:DbBvL4haWin2000でhttpdVer.1.39f、PerlはActivePerlです。
0607nobodyさん
02/05/10 21:53ID:/cNgrcGu0608nobodyさん
02/05/10 22:39ID:???ざっと見たが、とりあえずまともに動くコードには見えない。
だがサーバーが落ちるような原因は見当たらないな。
常に落ちるってのならともかく3/10じゃお手上げだ。
ついでに余計なおせっかいだが、
そのサンプルは相当な糞コードだな。
まともな本で勉強したほうがいいぞ。
0609604
02/05/10 23:06ID:DbBvL4haやっぱサンプルから横着しないで一から自作だな…
0610nobodyさん
02/05/11 02:07ID:qFv6V9OI無いですか?
0611nobodyさん
02/05/11 05:07ID:???0612nobodyさん
02/05/11 08:42ID:gbNCX/hH$hoge = "head:abc.abc.abc.def";
print "Before: $hoge\n";
$hoge =~ s/(head:)(abc\.)(.?)/$1$3/g;
print "After : $hoge\n";
このコードで、期待する結果として $hoge には head:def が
最終的に入るようにしたいのですが、やはり s/ の部分を
while で括るしかないのでしょうか?
$hoge =~ s/(head:)(abc\.)(.?)/$1$3/g;
$3 のところの特殊変数で「マッチしなかった文字列」なんて
あるわけないですよね…特定できないし…
0616nobodyさん
02/05/11 13:37ID:7MEyepY2CGIの動作を確認するならやはりこのように
オフラインでテストできるようにした方がいいのでしょうか?
俺もやるな。
あぷする手間も省けるし。
0623612
02/05/11 17:45ID:???文字列の "head:" と "abc." は固定です。"head:" は必ず、行頭に
1回しか出てきませんが、"abc." は色んなところで複数回出てきます。
"def" は固定ではないので >>615 の場合だと、"def" 以外の時は
機能しなくなってしまいます
0624nobodyさん
02/05/11 18:03ID:???勉強する気は無いんかと。()でグルーピングして * とか + とか {m,n} とか知らんのかと。
$hoge =~ s/(?:abc\.)+//;
0627nobodyさん
02/05/11 19:19ID:???0628しょぼいSE
02/05/11 19:32ID:QCHMLNRj他人様のホームページをインラインフレームで表示するときに、表示した他人様のページのスクロールバーを消す方法ってある?
CGIでできるかと思ったけど、方法がわからん(−−;
0630612
02/05/11 19:51ID:???> 勉強する気は無いんかと。()でグルーピングして * とか + とか {m,n} とか知らんのかと。
ありがとうございます。ほとんど昨日、今日perl始めたばっかりの房なので…
() って、$1 とかに突っ込む以外にも効果あるんですね。
?: が無くても期待する結果が同じなのが謎なのでその辺を自分で勉強します
0631nobodyさん
02/05/11 20:19ID:???完璧に見切れます、というのならともかく「ほぼ」じゃダメだろ。
そもそも完璧じゃなさそうなのだが。まあ>>629が真実なんだろうな。
0632nobodyさん
02/05/11 20:23ID:???それはHTMLとかCSSの仕事。
HTMLならscrolling="no"、CSSならoverflow: hidden;あたり。Web製作板へGO。
0634616
02/05/11 22:28ID:???0635nobodyさん
02/05/12 00:32ID:Kq9I9f0Mどうすればいいのでしょうか?
おしえてください。
0637nobodyさん
02/05/12 00:39ID:???6文字で。
my @word = (0..9,'a'..'z','A'..'Z');
my $rand = '';
$rand .= $word[int rand @word] for (1..6);
0639nobodyさん
02/05/12 00:47ID:???0641パルお
02/05/12 01:40ID:eZiXZjwU0642nobodyさん
02/05/12 02:08ID:???>いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。
>
>1:自分はこう言う事がしたい。
>2:それでこんな風にやってみたが・・・
>3:それだとこんなエラーが出て上手く行かなかった。
>
>1と3が無いと誰も答えられないよ、良い回答は良い質問から。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
というわけで>>641 2:3:が無いよ、と言わせてもらって >>4に載ってるここ見た?
http://member.nifty.ne.jp/hippo2000/perltips/lwpcook.html#COOKIES
0643nobodyさん
02/05/12 03:52ID:???my $num = shift;
print "$num => ", unpack("C*", chr($num)), "\n";
255 => 255
256 => 196128
257 => 196129
なんでこうなるの?
0644nobodyさん
02/05/12 14:08ID:9L9P3cqpuse Any〜でのデータベース使用の準備の後、
dbmopen〜|die〜;
tie〜|die〜;
の両方が死にます。
WindowsMeではパーミッション666のDBMデータベース使えないのでしょうか?
それともPerl5を入れれば改善されるのでしょうか?
激しく既出だとは思うのですが…
0645nobodyさん
02/05/12 14:56ID:???がいしゅつ以前の問題だろ…。
何でも良いからマニュアルの演算子の項を見れ。
ちなみに、それだとあらゆるプラットフォームで確実に死ぬ。
0646645
02/05/12 14:59ID:???それならそもそもuseをした時点で死ぬだろ。
0647nobodyさん
02/05/12 16:08ID:4Ko6xKbIたまに無限ループを作ってしまうことがあります。
その時にPerl.exeを強制終了させたいのですが、タスクマネージャから落とそうとすると
アクセスが拒否されて落とす事が出来ません。
再起動すれば問題無いのですが、煩雑ですし、Perl.exeが走ったままで使いつづけるのも怖いので
解決方法があればお教え願いたいです。
0648644
02/05/12 16:26ID:???すみません。|演算子は||の書き込みミスです。
Perlは5かもしれません。よく分かりません。
一応、がんばって自力で途中まで調べました…。
use DB_File;
はどうなんでしょう?とりあえず帰ったら試してみます。
これでだめだったらどうしよう…。
0650664
02/05/12 16:46ID:???何をやっているか…標準クラスモジュールのスコープを使用可能にしているのでは?
Perlは5でした。結局、tieが通らないのが問題だと思います。
Perl附属データベースを優先的に使用するように指定できれば良いのでは…
と思ってはいるのですが…やりかたが…
0651nobodyさん
02/05/12 17:28ID:???やっぱり何やってるかわかってないじゃん。
つーか、「〜すれば良いのでは?」と思うなら勝手にそうしてください。
やり方がわからないならGoogleってください。
ここはあなたに相槌を打つスレじゃないので。
0652nobodyさん
02/05/12 20:41ID:???0653nobodyさん
02/05/12 22:30ID:???0654nobodyさん
02/05/12 23:20ID:???unpackは1Byteずつ処理。
どうもリストコンテキストで評価されてそんな数字になっているみたいだね。
chrはUTF-8の文字列を返しているみたいだけど… 詳しい方、解説キボン。
my $num = 256;
print "$num => ", join ', ', unpack("C*", chr $num), "\n";
print "$num => ", ord chr $num, "\n"; # chrの反対はord
0655nobodyさん
02/05/13 07:46ID:???動的変数作ってしまって、プログラム終了まで使われなくなった変数って
やっぱシステムリソース喰ったままなんですかね?
「もう、この変数は使わない〜」と思ったら、undef した方がいいの?
それとも、コンパイラが適当に判断してくれたりするんだろうか?
$a = "(・v・)";
$b = 12345;
{
# ここで $a と $b 使う。これ以降は使用されない
}
{
# 新たに変数 $c を割り当てる。しかし、$a $b が使われていないので
# $a $b 用の領域を使って確保される?(暗黙の undef とか?…)
$c = "( ゚д゚)";
}
0656nobodyさん
02/05/13 07:58ID:???-wとuse strict;とuse warnings;$|=1;も入れて可能な限りエラーをなくして見たりしてるんですが
なぜか
Use of uninitialized value in concatenation (.) or string at C:\***.cgi line n.
と
Use of uninitialized value in string eq(またはneとか==とか!=とか。) at C:\***.cgi line n.
というエラーは消えてくれません。
動作にはまったくこれといって支障ないですけど、なんとなく気になってた疑問なのでちょっと聞いてみました。
0657nobodyさん
02/05/13 10:50ID:???理由はメッセージに書いてあるじゃないか。変数は初期化しろ。
とわいえ、俺もこのwarningはウザイと思う場合もある。そん時はno warnings;〜;use warnings;ではさむ。
0659nobodyさん
02/05/13 16:13ID:e7rLHiwbmy $patch = system("diff file1 file2");
system ("diff file1 file2 >patch.diff");
print qq|$patch\n|;
これをまとめるのはどのようにしたらよろしいのでしょうか?
my $patch = system("diff file1 file2 >patch.diff");
print qq|$patch\n|;
では表示が 256 になってしまうので宜しくお願いします。
0660nobodyさん
02/05/13 20:22ID:???何がしたいのか分からないのでこの答えが妥当かどうかはわかりませんが
$patch = `diff file1 file2`;
0661656
02/05/13 21:29ID:???変数のところじゃなくて、
Use of uninitialized value in concatenation (.) or string at C:\***.cgi line n.
が出るのは
print <<"EOF";
の行なんです。これを指摘されるのは何でなんでしょう?
print <<"EOF";
〜
EOF
内で使われる変数は全部use var qw[$a $b 〜];というふうにあらかじめ書いてるんでが。
ヒアドキュメントになにか決まりごとでもあるんでしょうか?
0662nobodyさん
02/05/13 21:47ID:???宣言と初期化は違う。
宣言しただけだと変数の中身はundefだから、そんな感じで怒られる。
初期化(空文字列を代入するとか)をしておけばエラーは出なくなる。
0663656
02/05/13 22:55ID:???use strict;
use var qw[$a $b 〜$z];
$a=$b=$c=〜$z="";
{
print <<"EOF";
〜
$a
$b 〜
$z
EOF
}
とやってみましたが、やっぱりprint <<"EOF"; を指摘されます。別に問題なく動くということは
print <<"EOF";で出るUse of uninitialized value in concatenation (.) or string at C:\***.cgi line n.は
やっぱり意味の無いエラーなんでしょうか。
0664nobodyさん
02/05/13 22:56ID:S5I/8Zh9selectall_arryとかで値を抜き出す時に使う変数が理解不能です。
$@hogehoge とか $$_[1] って奴です
一応$_[1]とかは解りますが$@を会わせたり$$でjobid以外の使い方が今いち理解できません。
0666nobodyさん
02/05/13 23:13ID:???$patch = `diff file1 file2`;
open (FH, ">patch.diff");
print qq|$patch|;
print FH qq|$patch|;
0668nobodyさん
02/05/13 23:30ID:???途中で変数にundefが代入されたんだろう。
試しにprint文の直前でprintに関わる全ての変数に対して defined $z or $z = ''; してみれ。
0669nobodyさん
02/05/14 00:14ID:ZpKcImQq1ディレクトリ内のファイル数が多くなるとアクセスが重くなったり、サーバーに問題が起きたりするのでしょうか。
サーバーはファイルにアクセスするときに1ディレクトリずつ辿っていくとするなら遅くなりそうですが。
5000ファイルとかでも大丈夫でしょうか。
0670nobodyさん
02/05/14 00:21ID:???WinソフトならCPU使用率のグラフでも見ればいいんですが、サーバ上となると。
CGIスレで聞こうと思ったんですが、言語に依存しそうなのでこちらでよろしいですか?
0671nobodyさん
02/05/14 00:26ID:i98930LO0672nobodyさん
02/05/14 00:39ID:o5LDH6aT-d:DProf とか。
CGIなら
#!/usr/bin/perl -d:DProf
とかで。
0673670
02/05/14 00:55ID:???CGIのほうではエラーで起動できず、DOSプロンプト(WinME+Apache)のほうではなにも表示せず終了なのですが。
0674670
02/05/14 01:04ID:???ありがとうございましたm(_ _)m
…と言っても、そんなファイルは見つからない〜のw。
0675nobodyさん
02/05/14 01:21ID:???Perl内部ではメモリ開放されるだろうけど、OSには返されないだろ、
ってクックブックに書いて有ったきがする。つ〜わけで、システム
リソースは喰ったまま。スクリプトが終了した時点で全て回収
される。
ただmyを使用すれば、新たな変数宣言時に跡地が有効利用されて、
全体としてメモリ使用量が減る、ってことになるんですかね。
0676656
02/05/14 02:11ID:???>>668 どうもです。
とりあえずそれをやってみます。
undefってやっぱりPOSTから分解したときに対応している値が空だとundefが入っちゃうんでしょうか?
***.cgi?a=&b=123だと$a=$FORM{'a'};は中身はundefなのか''空なのかどっちになってるのかよくわかってないです。。
0677nobodyさん
02/05/14 03:03ID:???>POSTから分解したときに対応している値が空
その場合はundefじゃないと思うよ(空)。分からない時は
defined $FORM{'a'} ? print "定義済み〜\n" : print "未定義〜\n";
しちゃえば?
>>672
質問した者では無いんですが、良い事を教わりました。
0678nobodyさん
02/05/14 09:12ID:???0680nobodyさん
02/05/14 11:32ID:???abnormal termination...
0681nobodyさん
02/05/14 13:14ID:???0682nobodyさん
02/05/14 14:04ID:???http://www.perldoc.com
■ このスレッドは過去ログ倉庫に格納されています