【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を見よう。
0433nobodyさん
02/05/04 21:21ID:???_____________
(つかえねぇ奴らだな。氏ね!!)
 ̄ ̄ ̄V ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ̄ ̄ ̄ ̄ ̄| ___________
| ∧_∧ | ∧_∧ /
| ( ´∀`) | (´∀` ) <オマエモ・・・オレモナー??
| ( ???:bI ) .| ( Id:??? ) \
| | | | .| | | |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| (__)_) .| (_(__)
. ̄ ̄ ̄ ̄ ̄
※偽者防止のため、IDは必ず出しましょう。
PC初心者でもやってるぞ。
0435nobodyさん
02/05/04 21:24ID:GvcNIgW1sub function
{
######省略
}
を呼ぶとき
function(); と &function;
の2つのやり方あるみたいですけど、どっち使ってもいいの?
0436nobodyさん
02/05/04 21:26ID:???後者の方がいい。
汎用性のあるものを組みたいなら特に。
0437435
02/05/04 21:29ID:GvcNIgW1ありがとう。
自分が持ってる参考書にfunction()しか載ってなかったから使っちゃいけないのかと思ったよ。
0438
02/05/04 21:35ID:dGBL2sA8どうしたらよいのでしょうか?
0439412 ◆ZJG8NJmQ
02/05/04 21:41ID:???print "content-type:text/html\n\n";
ここからまずフォームを作ります。
それからログファイルを開いて読み込みます。
で表示します。
ログ書き込み処理
\nや<>とかを変換します。
そうしたらログを開いて書き込みます。
そして閉じます。
0440nobodyさん
02/05/04 21:41ID:???Perl5以降ならfunction()でいいと思うけど。
普通のプログラミング言語ではfunction()と書くので、&を付けると嫌われる。
ただでさえスカラーの前に$とか付いて笑われているのに。
一生Perlしか使いそうにないなら&functionでもいいけど。
ただし、&functionとfunction()では若干動作が異なるとだけ覚えておいてください。
0441nobodyさん
02/05/04 21:56ID:???尤も、「貧弱なプロトタイプなんぞいらん」とか
「関数なにそれ?メソッドのこと?」って人には関係ない事ですが。
0442nobodyさん
02/05/04 22:24ID:???しかし私のサイトではそれが許可されていません。
perlプログラムであるディレクトリ以下を全部回って
それぞれにindex.htmlファイルを作っていってくれるプログラムを知りませんか。
0443nobodyさん
02/05/04 22:26ID:3kOee6Z30444nobodyさん
02/05/04 22:34ID:???作ればいいじゃん。
0445nobodyさん
02/05/04 22:39ID:3kOee6Z3あっさり言いますけど。間違えてサーバー内で無限ループって恐怖があって。
0446sage
02/05/04 22:40ID:???0447nobodyさん
02/05/04 22:45ID:???0448さゆ ◆ugYa5.J6
02/05/05 00:01ID:???スレ違いな回答でわるいんだけど、
.htaccess に
Options +Indexes
って一行書いておくと、うまくいくかも。
(サーバの設定次第だけど)
0449nobodyさん
02/05/05 00:49ID:???0450&付きであろうと無かろうと
02/05/05 01:27ID:???0451nobodyさん
02/05/05 01:28ID:???どういう差があるんですかね?
rootin();と&rootin;どちらでもいい状況なら俺も後者使うんだが。
0453thanks.html
02/05/05 01:39ID:nX5kzOReアリガソ。
うむ、なんでかわ良くわからないんだけど(・・漏れってつくづく
基本がなってないヤツだ・・・)
#(ok)のほうじゃないとダメなんですね。覚えておきます。
0454nobodyさん
02/05/05 01:50ID:nX5kzORe#!/usr/local/bin/perl
$task = $in{"task"};
require "$task.pl";
として、例えば掲示板とアクセスカウンターを以下のように使い分ける
[掲示板] bbs.pl
http://hage.com/cgi-bin/index.cgi?task=bbs
[アクセスカウンター] access.pl
http://hage.com/cgi-bin/index.cgi?task=access
とした場合。
なんか不都合な事ってあるだろうか?
質問が抽象的でアレですが、index.cgiにかかる負荷というのは
普通にbbs.cgi、access.cgiとして実現した時となんら変わらない
のだろうか?
0456nobodyさん
02/05/05 02:16ID:???&dir();
sub dir {
my $dir = shift;
chdir $dir if $dir;
my @file = glob('*');
for (@file) {
&comm($dir,$_) if -f $_;
&dir($_) if -d $_;
}
chdir '..';
}
sub comm {
my ($dir,$file) = @_;
print "$dir/$file\n";
}
0457nobodyさん
02/05/05 02:39ID:???ケチ付けるようで悪いが、車輪の再発明はやめて、標準ライブラリの
File::Findを使えば?
perldoc File::Find 又は、ラクダ本のP506又は、
http://www.bekknet.ad.jp/~bero/docj/module_/10/File_Find.html
0458nobodyさん
02/05/05 03:07ID:???0459nobodyさん
02/05/05 03:30ID:???置き換えるだけ、と言っていいじゃん。最近は、ドキュメント
も読まず、自分で知恵も出さず、安易にコードをパクろうと
する厨が多すぎ。
0460nobodyさん
02/05/05 03:47ID:???0461nobodyさん
02/05/05 04:30ID:???0462nobodyさん
02/05/05 04:49ID:???$dir = $ENV{'PATH_INFO'};
$uri = $ENV{'REQUEST_URI'};
$base = $uri;
$base =~ s#/([^/]+?)$dir$#/#;
$cgi = $uri;
$cgi =~ s#$dir$##;
$dir =~ s#^/##;
chdir $dir;
print "Content-Type: text/html\n\n<H1>Index of $base$dir</H1><BR>\n<table>";
while(<*>) {
if ( -d $_ ) {
$ref = "$cgi/$dir$_/";
$fname = "$_/";
$size = '[DIR]';
} else {
$ref = "$base$dir$_";
$fname = "$_";
$size = (stat $_)[7];
}
print "<tr><td><a href='$ref'>$fname</a></td><td align='right'>$size</td></tr>\n";
}
print "</table>\n";
0463nobodyさん
02/05/05 04:58ID:???0464nobodyさん
02/05/05 08:51ID:???0465nobodyさん
02/05/05 16:34ID:???カウンタを作っていてあと一歩のところまで来ているのですがうまくいきません。
症状
10・11・12・13・14・・とカウントアップしていき
18まではいいのですが次にリロードすると19のはずがなぜか29と表示されてしまいます。
そのあとはまた20に戻るのですが、再び21・22・23・・とカウントアップし
28まではいいのですが29のはずが39と表示されてしまいます。
ソース
http://ruffnex.oc.to/ipusiron/upload/417.txt
どなたか原因わかりますでしょうか?
0466nobodyさん
02/05/05 16:35ID:???表示させるときは
<img src="./counter.cgi?4">
<img src="./counter.cgi?3">
<img src="./counter.cgi?2">
<img src="./counter.cgi?1">
という感じにして呼び出しています
0470nobodyさん
02/05/05 16:49ID:???>KENT WEBとかで学習した厨房だろ。アホに限ってよく&付けてるな。
真性のPCヲタとかは知らんけど普通の人が別に趣味で覚える分には
最初は大体そんなもんです。実際&〜;でも〜();でもどっちでもいい。
0473nobodyさん
02/05/05 17:39ID:???画像一体型というとgif連結ですか?
まだ始めたばかりなのでまずは簡単なのからやってるので。。
当方win98se + アパッチ + アクティブperlです
0475nobodyさん
02/05/05 19:30ID:eXghpSwQ原因は、画像がブラウザのキャッシュに残ってるからだとおもいます。
0476nobodyさん
02/05/05 21:05ID:gfSt2Khcopen(IN,"$filepath");
@data=<IN>;
close(IN);
#処理#
open(OUT,">$filepath");
flock(OUT, 2);
print OUT @data;
close(OUT);
この場合flockはOUTの1回だけですけど、INのときもflockしたほうがいいですか?
0483476
02/05/05 23:12ID:lg58HjNFopen(IN,"$filepath");
flock(IN,1);
@data=<IN>;
close(IN);
#処理#
open(OUT,">$filepath");
flock(OUT, 2);
print OUT @data;
close(OUT);
こんな感じ?
0484nobodyさん
02/05/05 23:21ID:???書き込みモードでopenするのは危険。
俺なら
open IO, "+<$file" or throw error;
flock(IO, LOCK_EX) or throw error;
while(<IO>){
# 処理
}
seek IO, 0, 0;
print OUT __ANY_DATA__; # 適当に出力
close OUT;
0485476
02/05/05 23:24ID:lg58HjNF0486nobodyさん
02/05/05 23:26ID:???openと同時にファイルが(一時的に)空になる。
よって、書き込む前に自分がクラッシュしたり、誰かがロック権を得たりすると破滅する。
0487476
02/05/05 23:31ID:lg58HjNF変えてみました。
open(FILE,"+<$filepath") or die(error);
flock(FILE,2);
@data=<FILE>;
#処理#
seek(FILE,0,0);
print FILE @data;
close(FILE);
0490nobodyさん
02/05/05 23:56ID:???HTMLファイルならそのソースを、
@in に1行ずつ代入していきたいんですけど
どうすればできますか?
0494nobodyさん
02/05/06 00:05ID:???Cookbookでは、こうやってるね。
seek(FH,0,0);
print FH @data;
truncate (FH, tell(FH));
close(FH);
0495nobodyさん
02/05/06 00:12ID:???ほい。
http://www.google.com/search?hl=ja&q=lwp%82%CC%8Eg%82%A2%95%FB&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
0496476
02/05/06 00:12ID:/skFdheWopen(IN,"$filepath");
flock(IN,1);# 排他じゃだめ?
@data=<IN>;
close(IN);
#処理#
open(OUT,"+>$filepath");
flock(OUT, 2);
seek(OUT,0,0);
print OUT @data;
close(OUT);
0497nobodyさん
02/05/06 00:23ID:???0500476
02/05/06 00:34ID:/skFdheWファイルに書き込む場合(2回目のopen)を+>にしたらだいじょぶかと思ったけど
だめですか・・・。
0502495
02/05/06 00:42ID:???もっといいのみっけた。
http://www.isc.meiji.ac.jp/~sumwel_h/cyberlaw/tech/htmlfaq01.htm
0503nobodyさん
02/05/06 00:58ID:/8u085RLなれば、具体的にはどんなことが出来るのでしょうか?
アプリとか作れるのでしょうか?自分が知ってるのはCGIを作れると言うぐらいでよくわかりません。
厨名質問ですが、どなたかご教授願います。
0506nobodyさん
02/05/06 01:21ID:???せめてFAQぐらい読もう(1.10とか)
http://www.att.or.jp/perl/faq/faq0j.html
>>505 俺も激しくスレ違いと思うが(と言うか努覧ヘ不足)
0507nobodyさん
02/05/06 01:36ID:???0508495
02/05/06 01:41ID:???食べないは難しいけど、出さないは
print "Fuck So Reena!" unless $ENV{'HTTP_COOKIE'};
とか。
0512nobodyさん
02/05/06 02:43ID:e2HRGuxkこれを最短一致にするにはどうしたらいいでしょうか。
よろしくお願いします。
0515nobodyさん
02/05/06 03:31ID:e2HRGuxkなるほど!ありがとうございます。
0517nobodyさん
02/05/06 07:06ID:???open(IN,"$logfile") || &error;
この省略した書き方について誰か説明お願いしますm(_ _)m
0518nobodyさん
02/05/06 08:27ID:???ネタか?
0521nobodyさん
02/05/06 09:14ID:???どうすれば直りますか?
いちおうkent氏のカウンタで試したら普通にできたのに
なぜか俺が作ったのだと19→29、29→39になるんだるう
0522nobodyさん
02/05/06 10:39ID:???select(undef, undef, undef, 0.5);
これを
select(undef, undef, undef, 2);
か、もっと大きな数にするとなおんない?
0523pear ◆FRUIT8pk
02/05/06 11:25ID:???どこが省略されてるの?
$logfileを読み込んで、読み込めなかったら&error;吐くようになってるだけでしょ?
0525nobodyさん
02/05/06 11:31ID:???いやまだ初心者なんでよくわからんのですがperlはいろいろな書き方があるらしいので
そういう書き方が普通にあるのか余分な部分をはぶいて省略されている書き方なのか知りたかったのでし
if (!open(IN,"$logfile")) { &error; }
↑でもいいんですよね?
'||'ってifとかの条件判断のときにしか使わないものだと思っていたもんで。。
0527nobodyさん
02/05/06 12:14ID:???print 3 + (2 > 1) * ('a' cmp 'b') - (1 | 2) * (3 && 4);#=> -10
0528465
02/05/06 12:24ID:???なぜか他のサイトで配布されているのはうまくいかないのに
処理がほとんど同じ俺がつくったやつは変な症状が出ていたので
動くほうのコードをちょっとずつ自分が作っているコードと入れ替えてみたら
なぜか動きました。。やっぱりキャッシュが壊れていたのかな?
ありがとうございました。御礼にあとで2ch用のアップロダうpしにきます
0529nobodyさん
02/05/06 12:37ID:???Cでもできるけど、普通の神経の持ち主ならやらないね。
標準的なスタイルってのが決まってるから。
main() {
0 || puts("a");
1 || puts("b");
0 && puts("c");
1 && puts("d");
}
Perlでは好んでやるね。やり方は一つではない、が信念だから。
0530nobodyさん
02/05/06 14:40ID:???0532nobodyさん
02/05/06 16:26ID:usSooVS5J++や、JBulderのIDE見たく、画面デザインと、
コードつなぎ合わせてくれて、ノンコーティングとまではいかないまでも
うまい事やってくれるツール
そんなうまい話無し?
■ このスレッドは過去ログ倉庫に格納されています