【Perl】初心者コーナー Part17
レス数が1000を超えています。これ以上書き込みはできません。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 8
http://pc.2ch.net/test/read.cgi/php/1032704121/
参考書籍の話題は【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は 【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/
過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0002nobodyさん
02/10/14 17:25ID:???Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980 参照不能
DAT: http://tako.2ch.net/perl/dat/957208980.dat
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087 参照不能
DAT: http://tako.2ch.net/perl/dat/971817087.dat
Part3 http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521 参照不能
DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part4 http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156 参照不能
DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part5 http://pc.2ch.net/php/kako/988/988728069.html
Part6 http://pc.2ch.net/php/kako/996/996075607.html
Part7 http://pc.2ch.net/php/kako/1000/10002/1000267444.html
Part8 http://pc.2ch.net/php/kako/1003/10039/1003900311.html
Part9 http://pc.2ch.net/php/kako/1009/10095/1009549309.html
Part10 http://pc.2ch.net/php/kako/1014/10145/1014556702.html
Part11 http://pc.2ch.net/php/kako/1017/10172/1017201229.html
Part12 http://pc.2ch.net/php/kako/1019/10199/1019917048.html
Part13 http://pc.2ch.net/php/kako/1022/10227/1022731565.html
Part14 知らん
Part15 http://pc.2ch.net/test/read.cgi/php/1028816385/
Part16 http://pc.2ch.net/test/read.cgi/php/1032070299/
[ひまぢん氏のミラー]
Part1 http://www.angelfire.com/ak5/2ch-web-program/kako/957208980.html
Part2 http://www.angelfire.com/ak5/2ch-web-program/kako/971817087.html
Part3 http://www.angelfire.com/ak5/2ch-web-program/kako/979894521.html
Part4 http://www.angelfire.com/ak5/2ch-web-program/kako/984430156.html
Part5 http://www.angelfire.com/ak5/2ch-web-program/kako/988728069.html
コピペしただけなんで誰かフォローおながいすます。
0004前の973
02/10/14 17:39ID:???例の通りに実行しても全然動かないのですけど、どうやれば動くのでしょうか?
以下は何もおきずに終わります。
perl gres.pl -e 's!and!or!g' *.txt
以下は"Processed 0 files." と表示されて終わります。
perl gres.pl -v -e 's!and!or!g' *.txt
ファイルを見つけられないのかとファイル名を直接指定すると、
perl gres.pl -e 's!and!or!g' readme.txt
GLOB(XXXX) ←こんなのが画面いっぱいに表示されて、readme.txt は 0 バイトになってしまいます。
未解決なので引き続きおながいします。
まだ動かないので...
┷===〓□┘ ∧=∧ < コテは皆殺しだゴルァ!
_┗ __(゚Д゚ )__\__________________
____ / ̄ ̄ > 7 / /==|=== ̄||
〇 )))) )) ̄ ̄ ̄ ̄ ) ̄)) // Г/ 〇)./ ▽ | ⇒⊥______
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|回 ̄] (( /_7 " / | ☆ / \ > ヽ
__ >――ゝ __ /____ |__\_ノ__ ノ__ノ
∠__ / ̄ ̄ ∠___// ̄ ̄◎ ̄ ̄◎ ̄ ̄ ̄◎ ̄ ̄¬}
〈==={\ ̄ ̄ 〈==={ (◎) (◎)/
ゝ==\\_ ゝ== > ((◎) ((◎) ((◎) ((◎)((◎) /
ゝ==ヽー ̄ ̄ ゝ==ヽ===========
0006nobodyさん
02/10/14 18:33ID:???0007nobodyさん
02/10/14 18:34ID:???0008デフォルトの名無しさん
02/10/14 20:09ID:???0009nobodyさん
02/10/14 20:20ID:BFM6g6aWsoket→connectでsubject.txtの内容を$aに格納してclose
フォルダにあるsubject.txtに$aを書き込むと言う形をとろうとしても
subject.txtには何も書き込まれていないと言う状況です。
どのようにしたらいいのでしょうか?
0010nobodyさん
02/10/14 20:31ID:???00119
02/10/14 20:58ID:b64mpFF2ありがとうございます。
システムコマンドは全く解らないんですが
システムコマンドを使う場合コピーはどうしたらいいんでしょうか?
00131@ ◆Go4ZKngPGE
02/10/14 22:20ID:???#コテハン
だよ。スレ立てのためだけに使ったんだよ。
そんなに必死にならなくてもボク自身は初心者だよ。
コテハン使いたかったキミもそうでないキミも
みんなで仲良く使えばいいじゃん。ネ。
#コテハン
0014nobodyさん
02/10/14 22:32ID:???一般的なことは書けない。WindowsなのかLinux|Unixなのかで
違いますから。
0016質問!
02/10/14 23:38ID:9ZSiyechの下のほう(ライブラリ)のところ・・・
>コメントを記述する場合は
>シャープ( # )の前にセミコロン( ; )を追記する必要がある場合もあるそうです。
とありますが具体的にどういう場合でしょう?
(jcode.plにはセミコロンついてますね)
0018nobodyさん
02/10/14 23:53ID:???0020nobodyさん
02/10/15 00:01ID:???0021nobodyさん
02/10/15 00:05ID:???0022nobodyさん
02/10/15 00:17ID:???0023デフォルトの名無しさん
02/10/15 00:17ID:???プリプロって何よ。
0027nobodyさん
02/10/15 01:23ID:???掲示板作るにCGI使いたいのですが、
HTMLに埋め込む形でテーブルの中に掲示板を入れることってできるでしょうか。
0028デフォルトの名無しさん
02/10/15 01:47ID:???っんだよ。変な言葉覚えちゃったよ。ちょっと:
人
(__)
\(__)/ ウソコー!
( ´A` )
0029nobodyさん
02/10/15 01:47ID:???0030nobodyさん
02/10/15 02:01ID:???0032nobodyさん
02/10/15 02:39ID:nVvEr8H/ありませんでしょうか?
0035nobodyさん
02/10/15 03:41ID:???いっぱいあるよ。
【スレッド】2ch型掲示板 その6【フロート型】
http://pc.2ch.net/test/read.cgi/php/1028384308/
0037nobodyさん
02/10/15 13:43ID:0TY8yVdT“Premature end of script headers”でInternal Server Errorになります。
ヘッダの終わりが早すぎる? やっぱりわかりません。
Mac OS Xでローカルマシンで実行しています。
perlのパスは間違っていないはずです。何が悪いんでしょう?
#!/usr/bin/perl
use CGI qw(:satndard);
print header;
print start_html('Hello');
print h1('This is hello.cgi');
print end_html;
0038nobodyさん
02/10/15 14:20ID:???0040nobodyさん
02/10/15 14:42ID:0TY8yVdTありがとうございます。解決しました。
すみやかに回線切って逝ってまいります。
0041nobodyさん
02/10/15 15:07ID:1tgEM8TW自分で作れっていわれそうですが、先人のプログラムがあれば是非利用してみたいです。
英単語をカウントするものはごろごろ落ちてるんですが、日本語のものってちょっと見つからなくて困っています。
例)
一番は一番で三番は四番。
↓
一番 2
三番 1
四番 1
0042nobodyさん
02/10/15 15:09ID:???0043nobodyさん
02/10/15 16:08ID:???ひらがなで単語を区切る?
じゃあ、これはどうよ。←
「これはどうよ」が一単語かよ。
日本語を単語に区切るにはchasenなどの形態素解析ソフトが必要。
004441
02/10/15 16:45ID:???ご返答ありがとうございます。
茶筅も調べてみたのですが、細かく区切り過ぎてしまうようです。
一連の単語として区切るようなオプションがあれば一番なのですが。。
茶筅例)
拉致被害者→拉致 被害 者
拉致被害者→拉致被害者の一単語としてカウントしたい。
そこで、ひらがな、もしくは記号(、。「」等)で区切ることができればと考えています。
あくまで漢字、カタカナのみで、ひらがなの単語はカウントしないと考えています。
0045nobodyさん
02/10/15 16:51ID:???「これはどうよ」はさ、「これは どうよ」なのか「これ はどうよ」なのかの判断はどうさせる気よ?
すでにPerlの問題でもない気がするけど。
こないだ見たプロジェクトXのワープロ開発の話を思い出したさ。
004642
02/10/15 16:52ID:???文字コード書いてないからSJIS対応で書いた。不完全だけと十分だろ。
map($set{$_}++, split(/(?:\x82[\x9f-\xf1])+/));
0048login:Penguin
02/10/15 19:40ID:???また、PerldBIで構築したサイト教えて下さい
また、強化書ですが、 oreilly の perl dbi が
がいいですか
それともascii のperl DBIの本がいいですか?
0049nobodyさん
02/10/15 20:18ID:???http://pc.2ch.net/test/read.cgi/php/1030209573/
0050nobodyさん
02/10/15 20:34ID:???push@log,$_ while<LOG>;
と
@log=<LOG>;
とで、スピード的、メモリ的な違いは出ませんかね。
調べられないもので。
005351
02/10/15 20:46ID:???スピードは大差ない
Benchmark: timing 1000 iterations of code1, code2...
code1: 1 wallclock secs ( 1.43 usr + 0.00 sys = 1.43 CPU)
code2: 2 wallclock secs ( 1.43 usr + 0.00 sys = 1.43 CPU)
005450
02/10/15 20:51ID:???じゃぁメモリに優しそうな前者を使うのがベターってことですかね。
0057nobodyさん
02/10/15 23:01ID:???何を測りたいベンチなの?
意味のある数字が出ていない気がするが。
--- bench ---
#!/usr/bin/perl
use Benchmark;
timethese( 5, {
handle => q{
open F, '<./test.log' or die;
my @log = (); @log = <F>;
close F;
},
while1 => q{
open F, '<./test.log' or die;
my @log = (); push @log, $_ while <F>;
close F;
},
while2 => q{
open F, '<./test.log' or die;
my @log = (); while (<F>) { push @log, $_ }
close F;
},
});
__END__
> perl -e 'print map { "$_\n" } (0..999_999);' > test.log
> perl bench
Benchmark: timing 5 iterations of handle, while1, while2...
handle: 19 wallclock secs (14.92 usr + 3.61 sys = 18.53 CPU)
while1: 10 wallclock secs (10.52 usr + 0.19 sys = 10.70 CPU)
while2: 12 wallclock secs (11.11 usr + 0.13 sys = 11.24 CPU)
005850
02/10/15 23:56ID:???おおう。省略形のwhileが最速ってことですかこれは。
省略形の方が速いんすね。
そして @log = <F> が一番遅いとは思いませなんだ。
結論として push @log, $_ while <F>; っていう記述が一番よろしいカンジですか。
0060nobodyさん
02/10/16 01:13ID:???0061nobodyさん
02/10/16 02:10ID:???ベンチを競うほどでもないし、自分が好きなやり方でやったほうがいい。
やり方は何通りもあるってやつです。
速度が気になるのなら、
while (<LOG>) {
処理
}
とやるか、いっそCで書き直すというほうがマシでしょ。
006257
02/10/16 04:13ID:???>>57 の数字を信じるなら、100万行*5で せいぜい10秒の差だ。
数千行のファイルをたまに触るだけの人が気にしなきゃいけない
数字じゃない。しかし日常的に数十万行のファイルを*Perlで*
扱っているなら、知っておくべき実験結果だろうな。
やり方は色々ある。どんな風に書くも自由だ。
だけど状況によって最適解は変わる事を常に意識しなきゃだめだ。
0063nobodyさん
02/10/16 05:58ID:???0064nobodyさん
02/10/16 07:32ID:???まあ、数十万行のファイルを触るときに数千行と同じやりかたをするのか?って疑問を
もって欲しいもんだ。
# しかもそれが日常的な場合だと特に。
0065nobodyさん
02/10/16 07:42ID:???普通に効率のいい方を使えばいいっていうだけの話ちゃうの
0067nobodyさん
02/10/16 11:11ID:???localtime の逆関数みたいのないですか?
$year $mon $mday $hour $min $sec --> $epoc にしてくるようなの。
0068nobodyさん
02/10/16 11:28ID:4mkRoll6use Time::Local;
$epoc = &timelocal($sec, $min, $hour, $mday, $mon, $year);
0069nobodyさん
02/10/16 11:36ID:4mkRoll6補足
年は4ケタ(2002とか)、それ以外はlocaltimeと同じでつ。
曜日は求めた値をlocaltimeにかけると分かるです。
不正な値はエラーになっちゃうんでうまく対策してください。
007167
02/10/16 12:01ID:???ありがとうございます。
助かります。
007251
02/10/16 12:58ID:???>何を測りたいベンチなの?
>意味のある数字が出ていない気がするが。
前レスを受けてのベンチだからわかると思ったんだけど・・・
意味のある数字? timing 1000 でとったんだけど・・・
0073nobodyさん
02/10/16 13:15ID:???だからさ、高負荷をかける状況になる場合、ファイル丸ごと変数に取り込む
ようなことしないよね。ってことから意味のある数字かどうか考えたらいいんじゃないか?
東京大阪間を最短で歩くコースを考えてくれても、「なんで新幹線乗らないの?」って
言われたらおしまい。これと同じこと。
0074nobodyさん
02/10/16 13:27ID:???$hoge =~ s/0/0/g;
$hoge =~ s/1/1/g;
$hoge =~ s/2/2/g;
これを9まで続けるでいいでしょうか。
0076nobodyさん
02/10/16 13:40ID:???ttp://www.din.or.jp/~ohzaki/perl.htm#JP_Z2H
まぁ、そのやり方が一番楽だと思うよ。
0077nobodyさん
02/10/16 13:43ID:???open(F,"test.log");
my @log = (); push @log, $_ while <F>;
#@log = <F>;でもどっちでもいいよこの際。
close(F);
foreach(@log){
....
}
より
open(F,"test.log");
my $log = '';read(F,$log,-s "test.log");
close(F);
while($log =~ /\G([^\r\n]+)[\r\n]+/g){
....
}
とかにした方が全然速くない?
特に「ファイルを早く閉じたいから一気読みしてる」とか言ってる奴が
前者を使う理由がわからない。
#for$n($start..$end){$log[$n]の加工}とかで一部だけ
#加工したいなら読み込み段階で素直に
#while(<F>){$n++;next if($n < $start);last if($n > $end);$_の加工}
#とでもした方が全然速いし当然メモリはほとんど使わないし。
0078nobodyさん
02/10/16 13:44ID:???ありがとうございます。
とりあえず今は数字しか必要ないので今のやり方でやります。
007973
02/10/16 14:41ID:???それを前提にしたベンチやってても、その結果を考慮に入れる香具師は
いないってこと。
0080nobodyさん
02/10/16 14:50ID:???逆じゃないの?
一気にメモリに読み込む仕様にした時にでかいファイルを読まれたら
どうなるかは視野に入れて作った方が良いというか。
製作者の意図通りに使ってくれない人なんて沢山いるだろうし。
0081nobodyさん
02/10/16 15:12ID:???だからね、
「一気にメモリに読み込む仕様にした時にでかいファイルを読まれたら
どうなるかは視野に入れ」たら、普通そういう仕様にしないでしょ。
検討はしましたが、実際には使いませんね、でいいじゃん。
制作者の意図って誰の意図? Larryのことか?
008280
02/10/16 15:35ID:???落ちけつ。俺だってそんな仕様にはしないし
確かに普通そんな仕様にはしないだろう。
だがその話をしてる人は普通の用途では無いかもしれんし
実用云々は置いておいて単なる処理の話をしてるのかもしれん。
自分じゃまずやらない事だからこそ何か発見があるかもしれんし
色々話すだけなら構わんのでない?
0083nobodyさん
02/10/16 15:49ID:???s/あ/ア/;
tr/あ/ア/;
これはどっちも同じですよね。
対象文字列に正規表現が使えるか使えないかの違いでしょうか。
0085nobodyさん
02/10/16 17:30ID:???流行なんでしょうか?昔は見なかったような・・・
0086nobodyさん
02/10/16 17:46ID:???0087nobodyさん
02/10/16 18:44ID:???0089nobodyさん
02/10/16 20:34ID:???>while($log =~ /\G([^\r\n]+)[\r\n]+/g){
\Gってなんですか?
あとテキストファイルの読み込みは<FILEHANDLE>が一般的と明言されてますけど
例にあるreadの方が本当に速いんですか?
0090nobodyさん
02/10/16 20:56ID:???\Gは前回マッチした場所の直後からスタート。
スピードは計ってみりゃいいじゃん。
#! /usr/bin/perl
open(LOG,">test.log");for(1..1000){print LOG 'a' x 1000 ."\n";}close(LOG);
use Benchmark;
timethese(50,{
1=>q{
open(F,"test.log");
my @log = (); push @log, $_ while <F>;
close(F);
foreach(@log){next;}
},
2=>q{
open(F,"test.log");
my $log = '';read(F,$log,-s "test.log");
close(F);
while($log =~ /\G([^\r\n]+)[\r\n]+/g){next;}
}
});
#Benchmark: timing 50 iterations of 1, 2...
#1: 22 wallclock secs (19.37 usr + 0.82 sys = 20.19 CPU) @ 2.48/s (n=50)
#2: 5 wallclock secs ( 3.37 usr + 1.01 sys = 4.38 CPU) @ 11.40/s (n=50)
0091nobodyさん
02/10/16 21:44ID:???readは読み込み専用に用意された関数だから、そりゃ速いだろ。
ファイルハンドルで回すのが一般的なのは扱いやすい、発展しやすいからじゃ
ないかな。(といってもreadで読むのは別に珍しくは無いと思うけど)
0092nobodyさん
02/10/17 01:50ID:???どうやればいいんですかねえ?
0093nobodyさん
02/10/17 03:57ID:???デザインを大幅に変えていた。
変え終わってローカルで最終テストをしている時に気づいた
パスワードが暗号化されていない・・。・゚・(ノД`)・゚・。
このままでは、ダメだと思い、別のところで配布されている
スクリプトに変えようかと思ったが、デザイン変えてしまったし、
折角だから、自分で暗号化してみようかと思い必死で暗号の仕方を探した。
何度も何度も試した。
エラーの繰り返し。
それから、12時間経過・・・(´Д`) =3
もう、別のスクリプト探すyoヽ(`A´)ノウワァン
こんなことなら、初めから別のスクリプトにしておけば良かった。
無駄な12時間だった・・・。(-_-)
0094nobodyさん
02/10/17 08:19ID:???パスワードの暗号化の部分だけ、別スクリプトからもらってきたら
よかったんじゃない? っていうかパスワード暗号化って必要な
ものなのか?
0095nobodyさん
02/10/17 09:13ID:???記事変更・削除時に入力されたパスをcrypt(入力,93)使って暗号化、記録してある物と比較
一致すればOK パスが記録されたファイルを見られても大丈夫
>>93 これじゃ駄目?
0096nobodyさん
02/10/17 12:19ID:???0098nobodyさん
02/10/17 16:52ID:???を訳してください。
010199
02/10/17 17:07ID:???010296
02/10/17 17:25ID:???http://www.mikeneko.ne.jp/~lab/perl/des/
0103nobodyさん
02/10/17 20:41ID:???何度も別のスクリプトからもらってきて
試してみたんですが、無理でつた。
僕の知識不足です。
さすがに、生のパスワードがそのままログに
残ってしまうのは、もしも漏れた時に・・と考えると・・・。
それに、自分では来訪者のパスワードが見れてしまうので
気持ち悪いのです。。
>>95
わざわざ説明ありがとうございますた。
今試してみたのですが、記事削除時の比較がなかなか上手く
できないです。もう少し頑張ってみます。ペコリ
0105nobodyさん
02/10/17 23:44ID:???吊るされに逝ってきます
0106nobodyさん
02/10/18 01:16ID:eCvV6YKPError 500
CGI エラー - Content-Type ヘッダが正しくありません。
CGI 出力メッセージ:
"my" variable $year masks earlier declaration in same scope at C:\www\up\upload.cgi line 1366.
flock() is not available on Win95!
と出てしまったのですが、OSが95で flock() を含むスクリプトは使えないってことですか?
何か解決策はありませんでしょうか?
0107nobodyさん
02/10/18 01:32ID:???0108107
02/10/18 01:50ID:???eval{ flock() };
0110nobodyさん
02/10/18 13:52ID:lRuefofgperlで作れるのは掲示板とかチャットとかです。
パスワード発行のやり方とかは知りません。
0113nobodyさん
02/10/18 17:46ID:???掲示板やchat作れるんならパスワード認証くらい簡単なはず。
一。<form action="hoge.cgi"></form>の中にメールアドレスとパスワードを入力する画面の設計。
二。hoge.cgiでメールアドレスとパスワードをファイルにかき出す。
三。メールアドレスを集めて、sendmailで用意したメール本文を送信。
ところで、パスワードは何に使うのかなぁ
0114名無しさん@カラアゲうまうま
02/10/18 19:40ID:???0115110
02/10/18 19:48ID:???メールの送る内容(情報)を選べるようにしたいので、
会員登録後もIDとパスワードでログインして送信設定などを各会員にやってもらう予定なのです。
会員システムの時、IDとパスワードをユーザーが自分で決める方式と
IDは任意でパスワードは自動発行のだいたい二通りがあると思うんですけど
これってどっちがいいんでしょうか。別にどっちも大して変わらないんでしょうか。
0116超凄腕プログラマー
02/10/18 20:22ID:???0117nobodyさん
02/10/18 22:04ID:XuCvNIceCJ-CLUB の I-BOARD2001
のアイコンの種類と文字色の種類を増やしたいんですが、
set.cgi で増やしても
500 Internal Server Error
が出てしまいます。
他に書き換えなければならない部分があるのでしょうか?
エディタは秀丸とメモ帳でやってます。
改行は自分では入れていません。
0118nobodyさん
02/10/18 22:30ID:???0120nobodyさん
02/10/18 23:08ID:???自動発行ってトリップみたいなものかな?
実状は自分で決めたパスワードさえ忘れてしまう人が呆れるほど多かったりする罠。
自動発行だと忘れる人は倍増する気もするけど、
メールでしっかり忘れないようにするなら逆に忘れられても大丈夫かもしれない。
0121nobodyさん
02/10/18 23:56ID:Ts+deQMHどんな原因が考えられるでしょうか?
まったく見当がつかなくて困っています。
おながいします。
0122nobodyさん
02/10/19 00:00ID:???・CGIが使えない設定
・Perlやシェルの場合のパス違い
・パーミションの実行権なし
・アップロード時の文字コードまたは改行の設定ミスあるいはバイナリモードでアップした
0124デフォルトの名無しさん
02/10/19 00:45ID:???0125nobodyさん
02/10/19 00:53ID:SecGkhKpどう書けばイイですか?
0126121
02/10/19 01:17ID:???べんきょうになりますた。
>>124
すっげー根詰めてやってたから、和んだ(w
メールアドレスの@が犯人でした
ありがとうございました
0127rubyist@カラアゲうまうま
02/10/19 09:13ID:???糞言語に相応しい糞なやりとりだな。
0128デフォルトの名無しさん
02/10/19 09:36ID:???あんたさあ、糞言語の糞スレなんか読んでないで、
rubyスレでまともな発言したらぁ
0129nobodyさん
02/10/19 09:51ID:???()で変数にしたい部分を囲む。
したら$1という変数に勝手に入る。
正規表現のとこに書いてあるだろ。
0130名無しさん@カラアゲうまうま
02/10/19 15:26ID:5SBDqdQD0132nobodyさん
02/10/19 15:31ID:???perlと格闘してますがぁ、
^Mがどうしても消せません!!!!!!!!!!!!!!!
^Mがどうしても消せないのです!!!!!!!!!!!!!!!
chompやchopでは
^Mがどうしても消せません!!!!!!!!!!!!!!!
どうやって消すのでしょうか?
0134nobodyさん
02/10/19 16:05ID:???perl -e 'BEGIN{}' -p ファイル名 引数
みたいに、-e 、-pを共存してかけますか?
0135nobodyさん
02/10/19 16:38ID:???できますか?
perldoc perlstyle
perldoc.jpなどに日本語訳あり
>>134
こういうこと?
perl -pe "..." file1 file2 ...
>>135
出来るけど、ブロックだと何か困ることでも?
f() while EXPR;
0137135
02/10/19 17:01ID:???あっ、そうだった・・・
質問間違えてた。EXPRが真なら処理A(ループ含む)をし、偽なら処理B(ループ含まない)なんてことできますかね?
べつにブロック使って困ることはありませんが、できそうになかったので敢えて質問してみました。
処理を関数にすれば、普通にifなり三項演算子なり使えば問題なさそうだけど。
sub A
{
ループする処理
}
sub B
{
ループしない処理
}
if(EXPR){
A()
}else{
B()
}
0141nobodyさん
02/10/19 17:55ID:M9PYtBQykiseiという配列があって、その中には数字のみのデータが入っているのですが
(こんな感じに→ @kisei=(256, 512, 4444); )
$idという変数にも何か数字が入っているとして、$idが@kiseiに含まれているかどうか
調べる為にはどうすれば良いでしょう?
やはりforeachで配列を回して探さなければいけませんか?
0143通行人さん@無名タレント
02/10/19 18:41ID:???ハッシュかな、、、、簡単にプログラムするなら
0144134
02/10/19 18:42ID:???-peではまとまって書かなければならないですよね。
そうではなくて、
-p hoge.pl
のhoge.pl内の変数に対し、
-e 'BEGIN{}'
で初期値の設定がしたいのです。
0145nobodyさん
02/10/19 19:04ID:???"─"
を含む行を消す時ってsedだと
sed /─/d
のように短く出来るけど、perlだと結構冗長にならない?
0147141
02/10/19 19:17ID:M9PYtBQyまじで?
0148nobodyさん
02/10/19 19:18ID:???perl -ibak -ne "print unless /―/"って感じかな?
sedみたいに特化してないから、仕方ないと思うけど。
0153デフォルトの名無しさん
02/10/19 20:38ID:???もっとまとめて簡潔に質問してください。
grep $id, @kisei;
rubykitchさんを調べてるのですか?
0155nobodyさん
02/10/20 07:05ID:???URLに使える文字以外をエスケープしようと思うのですが
下記のようにすると、記号の前に\が入ったりします。
(http://hogehoge.com/\~xxx/)
どうしたらいいでしょうか?
s|([^\w\[\];/\?:@&=\+$,-\.!~\*'\(\)])|'%'.unpack('H2',$1)|eg;
0156デフォルトの名無しさん
02/10/20 11:15ID:???rubykitchのidは、正規表現ラッパーになってると
聞いてるが、何か?
0157nobodyさん
02/10/20 21:52ID:???0158nobodyさん
02/10/20 23:20ID:S0+M+/Ux$total 全体
$A 求めるもの
$percent パーセント
おながいします。
0160nobodyさん
02/10/20 23:56ID:???0161nobodyさん
02/10/21 00:02ID:???0162nobodyさん
02/10/21 00:15ID:???$pai 円周率。
おなかしいます。
0163nobodyさん
02/10/21 00:18ID:???0164nobodyさん
02/10/21 00:30ID:???perldoc て日本語訳ありますこ?
0165nobodyさん
02/10/21 00:34ID:???0166nobodyさん
02/10/21 00:49ID:???http://perldoc.jpで日本語化が進行中
0168nobodyさん
02/10/21 15:22ID:???リファレンスの使い方は一応わかったんですけど、どんな時に使うのかがわかりません。
0169nobodyさん
02/10/21 16:08ID:???ちょっと高度なことをするとき。
よく使う場合はねぇ、
配列引数をサブルーティンに複数渡すとき、
多元配列を扱うとき、
ハッシュ変数にアクセスするとき、
だやね。
0170nobodyさん
02/10/21 16:34ID:???0171nobodyさん
02/10/21 16:47ID:???そのまま何も変えないで使うとデータファイルはaska.logです。
で、このlogファイルは投稿内容や暗号化された削除キーなどが記録されています。
そのlogファイルをブラウザからアクセスすると容易に閲覧できます。
投稿内容だけならともかく、投稿者のホスト名や暗号化された削除キーが載っています。
これはセキュリティ的に危険だと思うんですがこんなんでいいんでしょうか。
管理者以外にlogファイルを見られなくする方法は.cgiファイルにすれば見れないと
前に知りましたがこの方法が一番簡単なんでしょうか。
0173nobodyさん
02/10/21 17:23ID:nGDYlndqCGIで
パスワードを入力してボタンを押す
↓
パスワードが合ってるか? →エラーの為のHTML出力
↓(YES) (NO)
管理人しか見れない様なHTML出力
という風に同一CGI内でパスワードの処理をしたいんです。
んで、
<form action=\"$URL\" method=\"POST\">\n
<input type=\"hidden\" name=\"mode\" value=\"admin\">\n
<input type=\"password\" name=\"pass\" size=\"8\">\n
<input type=\"submit\" value=\"管理用\"></form>
というのを出力してみたのですが、
ここからパスワードを取得して、比べる→その結果によって出力っていうのがどうやったら良いのかわかりません。
どなかたご教授お願いします。
分からなければCGI.pmとかcgi-lib.plでも使え。
・分岐は if を使う。
・出力は print を使う。
0175173
02/10/21 17:30ID:nGDYlndqやってみます。
ありがとうございました。
0179_
02/10/21 18:01ID:???ログファイルの名前を分かり難い物に変える。
(英字と数字を組み合わせて「a5mhp3f」とか。)
パーミッション600等が使えれば600にしておく。
0180173
02/10/21 18:33ID:nGDYlndqcgi-lib.plの使い方はわかりました。
>>173の
<input type=\"submit\" value=\"管理用\">
この部分でできたボタンを押したことを感知するイベントハンドラ(?)みたいな処理にしないとマズいですよね?
そこを押したらpassを取得して比べるという事をしなければならないので。
そーいったのはどうすればできるのでしょうか?
0181nobodyさん
02/10/21 18:44ID:???> <input type=\"hidden\" name=\"mode\" value=\"admin\">\n
mode が admin な時に実行すれば?
0182nobodyさん
02/10/21 18:53ID:???パーミッション600だと読み込みが出来なくなっちゃうのでダメですよね。
結局見せたくないなら、手っ取り早くcgiファイルにしとけって事ですかね。
プロの人はどうやってるんでしょうか。
0183173
02/10/21 19:09ID:nGDYlndq%form = &read_input('euc');
$iptPass = $form{'pass'};
$mode = $form{'mode'};
if($mode eq admin){
# ---パスワード認証された時の処理
if ($iptPass = $PASS){
(略)
}
# ---パスワードが間違えてた時の処理
else{
(略)
}
}
>>181さんを参考にして、こんな風に付け足ししてみたんですけど、ダメでした。。。・゜・(ノД`)・゜・
もうちょっと詳しく解説して戴けますか?
>パーミッション600だと読み込みが出来なくなっちゃうのでダメですよね。
suexec対応の鯖使え。
共有鯖でsuexecでCGI動かしてない鯖は糞だから見限れ。
>結局見せたくないなら、手っ取り早くcgiファイルにしとけって事ですかね。
・見られたくないファイルはHTTP経由で見れないディレクトリに置く。
・suexecでCGIが動く鯖を使う。
・.htaccessでdenyる。
どれかにしる。
>>183
if ($iptPass = $PASS){
↓
if ($iptPass eq $PASS) {
だべさ。
0186173
02/10/21 19:56ID:nGDYlndqどうもありがとうございます。
でもできないです…。
0187173
02/10/21 20:05ID:nGDYlndqhttp://www.geocities.co.jp/SiliconValley-Sunnyvale/6220/chlog.zip
0188nobodyさん
02/10/21 20:18ID:???http://www.strangeworld.cx/cgi-bin/remix/bbs.cgi?area=soft15
0189nnd
02/10/21 21:51ID:j4V+CWpA$count =1;
$data = "$count" . ".html";
上のように自動に作成された1.htmlというファイルですが、
特定のフォルダ下に自動作成するにはどうしたらいいのでしょうか?
/html/1.html
という様にhtmlというフォルダの下に1.htmlというファイルを
自動的に作る場合はどのように指定してやればよいのでしょうか?
どなたかご教授お願いします。
0190nobodyさん
02/10/21 22:07ID:5oRhJ4R+open(FH,">./html/$count.html");
close(FH);
がむばれ
0191nobodyさん
02/10/21 22:13ID:???キミは決定的な勘違いをしている。
パスワード入力画面を出力したプロセスで
その結果を受け取れるワケがない。
ブラウザ「cgi呼び出し」
↓
CGI「パスワード入力画面出力」
↓
ブラウザ「パスワード入力画面表示」
これで1プロセス。ここでCGIの実行は終了。
この操作と同時に「CGIが吐き出したフォームに書き込まれる内容」を
CGI自身が受け取れるわけがない。
同じCGIの中でパスワードのチェックもしたいなら、
CGIが実行する一番最初の処理に
「パスワード付きの呼び出しが来たらこっちで処理」
という分岐をいれなければダメだ。
0192nobodyさん
02/10/21 22:17ID:???> 結局見せたくないなら、手っ取り早くcgiファイルにしとけって事ですかね。
> プロの人はどうやってるんでしょうか。
プロじゃなくっても、サーバいじれるなら、.datへのアクセスを
禁止しておくのが普通でしょ。
0193nobodyさん
02/10/21 22:26ID:5oRhJ4R+それか、httpでアクセスできないとこに設置するとか。
0194作ってみた
02/10/21 22:34ID:???これじゃだめか?
#!/usr/local/bin/perl
# パスワード
$pass='pass';
# このファイル名
$file='pass.cgi';
read(STDIN,$_,$ENV{'CONTENT_LENGTH'});
foreach (split(/&/)){
($name,$_)=split(/=/);
s/%([a-fA-F0-9][a-fA-F0-9])/pack('C',hex($1))/eg;
$input{$name}=$_;
}
print "Content-tyep:text/html\n\n<html><body>";
if($input{'pass'} ne ''){
if($input{'pass'} eq $pass){
print "本物";
}else{
print "偽者";
}
}else{
print '<form action="'.$file.'" method="POST"><input type="password" name="pass"><input type="submit"></form>';
}
print "</body></html>";
0195189
02/10/21 22:35ID:j4V+CWpA明日試して見ます。すいません。今日はもう寝させてくださいzzz
0197173
02/10/21 23:33ID:nGDYlndq難しい…。
何となく前半はわかったのですが、後半がよくわかりません。
もう少し考えさせてください。m(_ _)m
>>194
わざわざ作っていただいてありがとうございます。m(_ _)m
>print "Content-tyep:text/html\n\n<html><body>";
Content-tyepではなくて、Content-typeですよね?
でも、それを直してうpしても、エラーが出ちゃうんですよね…。(^^;
0198nobodyさん
02/10/22 00:27ID:???しとかないと大変なことになるよね。
パーミッションしっかりしてれば問題ないけど、それなら.cgiにする必要もないし。
0199173
02/10/22 00:29ID:EEwgqraoごめんなさい、エラーが出たのは私めのせいでございました。。。
パーミッションを変えないという初歩的なミスを…。
ちゃんと動きました、ごめんなさい。
敬具
0200nobodyさん
02/10/22 00:54ID:???いろいろな共有鯖で使う尼向け配付にはもってこいの気もする
・・・・・・・・・・なんだ結局尼むけだなぁ
仕事に使ったらAFOってことで
0201nobodyさん
02/10/22 02:35ID:???$_ = reverse($_);1
の1って何でしょう?
0202nobodyさん
02/10/22 02:44ID:???拡張子cgiて定石だけど、あくまでアマの定石ってこと?
でも「簡単に設定できる」というのは重要だと思うけど。
仕事でもそれは変わらないと思うんだけどな。
0205nobodyさん
02/10/22 04:15ID:???「.passwd」みたいに拡張子のみにリネームするのが定石じゃないの?FTPツールとかで。
まぁ鯖によっては置けなかったりFTPツールから見えなかったりするけど。
0206nobodyさん
02/10/22 07:04ID:???また、grep関数の良いところを述べてください。
0208nobodyさん
02/10/22 08:42ID:qoySgddo「拡張子のみ」とか言わないで「ドットファイル」と呼んだほうがかっこいいよ
0209nobodyさん
02/10/22 09:38ID:???http://www.google.co.jp/search?q=map%8A%D6%90%94&ie=Shift_JIS&hl=ja&lr=
http://www.google.co.jp/search?q=grep%8A%D6%90%94&ie=Shift_JIS&hl=ja&btnG=Google+%8C%9F%8D%F5&lr=
0210nobodyさん
02/10/22 11:52ID:???クエリーデータを取得して分解する時のこの行は何をしているんですか。
0211nobodyさん
02/10/22 12:31ID:???209にあるような%8A%D6%90%94という文字を、変換前の日本語や記号に戻してるんだよ。
URLデコードっていうんだよ。
0212nobodyさん
02/10/22 13:14ID:???わかりました。
0213nobodyさん
02/10/22 13:19ID:???open(HTML,"$url") || die "ダメ:$i";
while(<HTML>){
print;
}
close;
これエラーになるんですけどなぜでしょう。
0214nobodyさん
02/10/22 14:00ID:???0219173
02/10/22 17:06ID:1nArfp1iパスワードの部屋、>>194を発展させて作ろうと思ってます。
でも、>>191さんの
>同じCGIの中でパスワードのチェックもしたいなら、
>CGIが実行する一番最初の処理に
>「パスワード付きの呼び出しが来たらこっちで処理」
>という分岐をいれなければダメだ。
という所が理解できないので、サンプルソース戴けませんか?
わからないままってのはこれから困るし…。
どうかよろしくお願いします。m(_ _)m
0221nobodyさん
02/10/22 17:57ID:???教わったところで自分が何を実行してるのかわからないだろうから
こんなとこで「理解」はどのみち無理かと。
0222nobodyさん
02/10/22 18:25ID:???とりあえず、
> 「パスワード付きの呼び出しが来たらこっちで処理」という分岐
に相当する処理を>>194から探してみようよ。
0223nobodyさん
02/10/22 20:21ID:TiLNiSf4なのにどうしてスクリプト内のコメントは全部英語なんですか?
外国人のために英語で書いてあげてるんですか?
でも圧倒的に日本人が使う頻度が高いですよね?
それとも単なるかっこつけですか?
0224iui
02/10/22 20:34ID:qg3kIz94ぜひどなたかおしえ頂きたいのですが・・・
フォームのテキストエリア内での改行についてなのですが、
2CHに書き込みすると改行が生かされていますよね?
これはどのようにするのでしょうか?
WRAPとは違うのですよね?書き込みデータを出力しているときに
<br>が入っているのでしょうか?
面倒な質問ですがどなたかご存知の方いましたらよろしくお願いします。
0225iui
02/10/22 20:34ID:qg3kIz94テキストエリアに書かれた内容をメソッドポストで
write.cgiに送りdata.htmlに出力し、
それをread.cgiで表示しています。
具体的にはこうです。
==write.cgi==
$data = "data.html";
$name=$cgi{'name'}; #POSTで送られてきたデータ
$text=$cgi{'text'}; #POSTで送られてきたデータ
open(FILE, ">>$data") || &error("");
print FILE "<font size=\"2\">$name</font><font size=\"3\">$text</font>";
close(FILE);
==read.cgi==
open(FILE, "<$data") || &error("");
@lines=<FILE>;
close(FILE);
print @lines;
data.htmlを見ても文章に改行コードが入っていないので
改行する訳ないのですが・・・
テキストエリア内での改行コードを<br>に変換???
テキストエリア内の改行コードってどうやってみるの???
などなど、悩んでました。アホな悩みですがよろしくお願いします。
0226マジレスw
02/10/22 20:38ID:???一般的なPerlユーザならあの程度の英語は理解できるからです。
日本人Perlユーザの100人中99人は理解できます。
読めない1人(=223)が減っても、2人ぐらいなら海外から補填出来ます。
結局読める人は計101人で日本語で書くより読めるユーザが増えます。
0227マジレスw
02/10/22 20:45ID:???改行コードが入ってないってのがよく分からんが
-------------------------------------------------------------
$data = "data.html";
$name=$cgi{'name'}; #POSTで送られてきたデータ
$text=$cgi{'text'}; #POSTで送られてきたデータ
$text =~s{\x0D\x0A}{<br>}g;
$text =~s{\x0D}{<br>}g;
$text =~s{\x0A}{<br>}g;
open(FILE, ">>$data") || &error("");
print FILE "<font size=\"2\">$name</font><font size=\"3\">$text</font>";
close(FILE);
-------------------------------------------------------------
他にも<,>,",@とかもエスケープせんと酷い目に合うよ。
0229228
02/10/22 20:51ID:???0230nobodyさん
02/10/22 20:54ID:???文字コードの変換とかもしてなさそうな予感。
0231173
02/10/22 21:19ID:1nArfp1i参考にしようとしました。
kent-webのプチボードの管理モードの部分です。
j-code.plは使ってたけど、&read_inputを使ってなかったので、
&read_inputを使った他のソースが欲しいなって思った所です。
>>222
if($input{'pass'} ne ''){
# ↓ここから
if($input{'pass'} eq $pass){
print "本物";
}else{
print "偽者";
}
# ↑ここまでですよね?
}else{
print '<form action="'.$file.'" method="POST"><input type="password" name="pass"><input type="submit"></form>';
}
0232nobodyさん
02/10/22 21:20ID:???根本的に認識がずれてるからどう説明すればいいかとても悩みますね
ところで>>227の $text =~s{\x0D\x0A}{<br>}g; って初めて見たけど
$text =~s/\x0D\x0A/<br>/g; じゃだめなん
0233iui
02/10/22 21:22ID:nQEHGPbTデコードできてないとの事なのですが、本に載っていたデコードを
そのままやったのでおそらくそれが原因なのでしょうか?
↓のデコードで問題あるのでしょうか?またコノヨウナ半角カタカナも
文字化けしてしまうのはデコードが上手くいってないからでしょうか?
度々すいませんがよろしくお願いします。
sub decode{
$readSize = read(STDIN, $form_data, $ENV{'CONTENT_LENGTH'});
if ( $readSize && ( $readSize != $ENV{'CONTENT_LENGTH'} )){
&error("");
}
@part = split('&', $form_data);
foreach $i (@part) {
($names, $value) = split('=', $i);
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
&jcode'convert(*value,$mycode
$value =~ s/&/&/g;
$value =~ s/"/"/g;
$value =~ s/</</g;
$value =~ s/>/>/g;
$value =~ tr/\r\n//d;
$cgi{$names}=$value;
}
}
0234nobodyさん
02/10/22 21:22ID:???環境によってperldocを通らないことがあるからではないですか。
オンラインマニュアルに求められるのは、なるべくどこでも読めることですから。
これから学習して腕を上げていかれるかと思いますが、間違っても>>226のように
人を見下すことしかできない厨房にはならないでくださいね。
0237iui
02/10/22 21:52ID:nQEHGPbT>>236
様、有難うございます。確かにtrされてますね。恥かしい。
すいませんでした。
これを<br>に置換してやって見ようと思います。
あと、もう一つすいませんが、半角カタカナはどのように
すれば文字化けせずに表示できるのでしょうか?
これもデコード処理によるものなのでしょうか?
調べる取っ掛かりになるヒントだけでも良いのでお願いします。
0238nobodyさん
02/10/22 21:58ID:???・ まずjcode.plはあるのかどうか。
・ require 'jcode.pl'; してるのかどうか。
・ $mycode = 'euc(もしくはsjis)'; があるのかどうか。
0239nobodyさん
02/10/22 22:01ID:???<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP(もしくはShift_JIS">
0240nobodyさん
02/10/22 22:05ID:???通常SJISだからそれ以外は投稿できないように(2chはこうなってるはず)
無理にjcodeを使うから文字化けするのでは?
文字コードに関しては無知なのであってるかどうかは分からんが
0241iui
02/10/22 22:15ID:nQEHGPbTjcode.plはあります。
require 'jcode.pl'; も宣言しています。
$mycode = 'sjis'; にしています。
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS>でやっています。
>>240様
するとSjisでないと文字化けするということですか?
テスト書き込みの際はSJISでやったのですが文字化けが起こって
しまいました。
0242240
02/10/22 22:27ID:???言い方が変だったかな?
SJISで半角カナを書き込むと、それがEUCのコードと一致してEUCとみなさえれて文字化けします(たぶん)
だからjcodeの仕様だと文字化けが起こるのはしょうがないと思われ(たぶん)
ということで文字化けを防ぐなら変換しないのがいいと思われ。
さっきからただの勘違いだったらスマソ
0243iui
02/10/22 23:15ID:???とりあえず明日、jcodeを洗って見ようと思います。
もしかしたら明日もまたご厄介になるかもしれませんが
よろしくお願いします。
0245nobodyさん
02/10/23 01:04ID:???0246nobodyさん
02/10/23 01:18ID:???「それとも単なるかっこつけですか?」なんて事書いてる馬鹿に
マジレスしてる時点で、>>234は脳みそがイカレてると思われ。
0247nobodyさん
02/10/23 01:52ID:???> つーか、英語読めずにプログラミングやってるのか…?
こういうこと言う人けっこういるけど
よく聞いてみるとほとんどの奴は和英ソフトとかに頼ってんだよね
実際には単語をちょいちょいくらいしか読めないやつがね、多いね。
0248nobodyさん
02/10/23 02:26ID:???すいません、foreachとかcryptとか
意味すら調べないまま認証制のCGI自作して使ってます。
0251nobodyさん
02/10/23 09:19ID:???foreach, cryptみたいな基本的な単語でさえ、これか… という
感じはあるけど、せめてMLとかできちんとエラーが表示されて
いるのに、「わけのわからないエラーが出て」みたいなやつは
逝ってよいと思う。
0252nobodyさん
02/10/23 10:10ID:???フリーのCGI配布サイトって半分以上がs-jisで書いてますよね。
おそらくそういう人たちが模範的にEUCで書いてくれれば
perlを覚えてみようという人たちも真似てEUCで書くと思うんですよね。
あ、もしかして、フリーのサイトは配布用は初心者が開いて文字化けしてる、と混乱しないように
s-jisで書いてくれてるんですかね。
0253nobodyさん
02/10/23 11:13ID:???LWPでHTTP要求したときに一定時間応答がなかったらタイムアウト
させたいのですが、どうしたらいいですか?
0255nobodyさん
02/10/23 13:22ID:???<input type="checkbox" name="okasi" value="tyoko">チョコ</input>
こうやってチェックボックスがあって、nameが同じ時はどうやって値を取得したらいいですか。
getで引数を確認したら、?okasi=poteti&okasi=tyoko こうでした。
$buffer = $ENV{'QUERY_STRING'};
local(@pairs) = split(/&/,$buffer);
foreach $pair(@pairs){
local($name,$value) = split(/=/,$pair);
$FORM{$name} = $value;
}
@FORM;
これにどんな手を加えればいいんでしょうか。
0257nobodyさん
02/10/23 13:36ID:???やり方はあるけど、>256の言う方が正しい。
0258nobodyさん
02/10/23 13:41ID:???確かにnameを別々のにすればなんの問題も無いんですけど、
普通チェックボックスってグループが同じだとnameは同じですよね?
やり方があるのなら教えて欲しいんですけど。
0259nobodyさん
02/10/23 13:47ID:???無駄に鯖負荷増やすだけだからやめれ。
グループが同じでnameが同じなのはチェックボックスじゃなくてラジオボタン。
0260nobodyさん
02/10/23 13:50ID:???$FORM{$name} .= "\0" if (defined($FORM{$name} )); # \0 is the multiple separator
$FORM{$name} .= $value;
0261x
02/10/23 14:07ID:YR7PdIKr↓ ↓ ↓
http://www.dream-express-web.com/space-trust.htm
0262名無しさん@Emacs
02/10/23 16:28ID:???>>254
つまらん
0263nobodyさん
02/10/23 17:00ID:???すると使える文字数は26文字になります。桁数は6文字です。
最大で26の6乗個=308915776個のIDが使える計算なんですが。(合ってますかね?)
生成されたIDが既に登録されている場合はもう一度生成し直す。
という風に考えていますが何か問題ありますでしょうか。
ちなみにID発行数は約1万個前後くらいだとした場合です。
------------------------
# 候補文字列を定義
@char = ('a'..'z');
# 乱数で種を抽出
srand;
$salt = $char[int(rand(@char))] . $char[int(rand(@char))] . $char[int(rand(@char))] . $char[int(rand(@char))] . $char[int(rand(@char))] . $char[int(rand(@char))];
print "$salt";
0264nobodyさん
02/10/23 17:10ID:???print $char[int(rand(27))] for(0..5);
とりあえずこっちのほうが短いけど改造するとき大変。
0265264
02/10/23 17:18ID:???srand;
print (('a'..'z')[int(rand(27))]) for(0..5);
上のが正解。
でもこれだと出来たIDが保存されないから、するなら
srand;
$salt.=(('a'..'z')[int(rand(27))]) for(0..5);
print $salt;
ていうか>>263は短いソースを求めてるわけじゃないんだけどね・・・
同じのがいくつも出てきたから直したくなってしまったスマソ
0266263
02/10/23 19:42ID:???レスありがとうございます。
流れ的には悪くはないんですよね?
IDを自動発行にしたのは、IDをユーザーが好きなのに決めるタイプだと
重複していた場合「このIDは既に登録されています、別の・・・」
というエラーを出さないといけないからです。
これってユーザーにとっては結構わざらわしいですよね。
高アクセスのサイトとかじゃないと重複する事はあまりないと思いますけど。
だったら自動でID発行した方が良いと思いこのタイプにしました。
て、別に説明するまでもないと思うんですが・・・。
0267nobodyさん
02/10/23 19:48ID:???0269253
02/10/23 20:14ID:???自己レス。
>LWPでHTTP要求したときに一定時間応答がなかったらタイムアウト
>させたいのですが、どうしたらいいですか?
$ua->timeout([$secs])
秒単位でタイムアウト(timeout)を取得/設定します。
デフォルトのtimeout()の値は180秒、つまり3分です。
ちょっと調べたらすぐ出てきました。ごめんなさい。
0270263
02/10/23 20:22ID:???いえ、別にいいと言えばいいですが、、、
でも普通の会員サイトでIDを自動でくれるとこは連番とかで出してるとこ少ないですよね・・・。
なんででしょう。。
>>268
はい、そうです。すみませんでした。
自分で考えてやってたので不安でしたので。
携帯向けと仮定しているので、数字や英字の小文字、大文字が混じると
IDの入力が面倒だと思って英小文字に限定したりするのは自分で決めたんですが、
あんまりそうやってるとこ無くていいのか確かめたかったんです。
0271iui
02/10/23 20:40ID:GY8eUNRB昨日皆様のご教授によりフォーム内の改行は解決しました。
デコードで改行コードを排除していたのが原因でした。
しかし、半角カタカナの問題が解決できません。
素直にEUCつかえば・・・もっともですが、やはりここまで
悩んだのならSJISで行きたいのです。勝手な思い込みで申し訳有りません。
先日も述べたように全てのソースにsjisを指定しております。
しかし上手く行きません(ンパ=>保狂になる・・・)
2CHはいったいどのような処理をしているのでしょうか?
すべてsjisで処理しているようですが、なぜ文字化けしないのでしょう?
jcode.plの違いなのでしょうか?デコードの問題なのでしょうか?
サイト巡りをしていると「表示」というのも文字化けする
との事ですが、これは文字化けしませんでした。
これはjcode.plが進化したという事なのでしょうか?
なんか取り留めのない質問ですがよろしくお願いします。
0272nobodyさん
02/10/23 20:43ID:???STDERRへの出力の時に、「YYYYMMDD-hh:mm:ss:エラーメッセージ」というようにしたいのです。
open(STDERR, '| sed -e"/^/`eval date +%Y%m%d-%H%M%S`/"');
だと、perlインタプリタが `eval date +%Y%m%d` を評価した時間になってしまい、
実際にエラーが出た時間で出力されませんでした。
$main::SIG{__DIE__}=\&hogehoge のようにSTDERRへの出力イベントをハンドルできるかと思って
調べたけど、ないようでした。
どなたかご存知でしたらご教授願います
timeとlocaltimeを調べよ。
0274272
02/10/23 21:25ID:???0275nobodyさん
02/10/23 21:35ID:???> 素直にEUCつかえば・・・もっともですが、やはりここまで
> 悩んだのならSJISで行きたいのです。勝手な思い込みで申し訳有りません。
意味不明なんだが。そういう思い込みで仕様を決めるって厨房??
0276nobodyさん
02/10/23 21:47ID:???そういえば、2chのAAをJcodeでShift_JISからEUCにすると
すると化ける文字があるけど。
0277nobodyさん
02/10/23 21:52ID:J0Bj1TbGSJISで送信してくるとわかってるUAに対しては
jcodeを通す必要がないのでは?
そうすれば文字化けも起こらないと思われ
0278_gunzip ◆eiH/XdoCNg
02/10/23 21:56ID:???$SIG{__WARN__} = \&my_warn_handler;
sub my_warn_handler
{
my $now = strftime "%a %b %e %H:%M:%S %Y ", localtime;
print STDERR $now, @_;
}
0279_gunzip ◆eiH/XdoCNg
02/10/23 21:57ID:???0280nobodyさん
02/10/23 23:07ID:???2chはSJISでしか投稿できないようになってるはず
EUCだと判断したら書き込めない仕組みだと思う
その判断はjcodeなのか何なのかはわからない
あと、スクリプトの文字コードって送信される文字コードとは関係ないのでは?
まあファイルに何か書き込むときにはスクリプト内の文字コードと送信された文字コードを一致させないといけないけど
それと「表示」が化けるのはS-JISでスクリプト内に書いた場合(print "表示";)
送信されてくる文字は無関係
0281nobodyさん
02/10/23 23:18ID:???0282nobodyさん
02/10/24 01:32ID:???>280
俺はページがSJISならSJISで送信されるもんだと思ってた。
詳しい人解説キボン。
0283眠いyo...
02/10/24 01:56ID:???#!/usr/bin/perl -w
use strict;
package LogHandle;
require Tie::Handle;
@LogHandle::ISA = qw(Tie::StdHandle);
sub TIEHANDLE {
open(SV, ">& $_[1]");
bless \*SV, $_[0];
}
sub PRINT {
*SV = $_[0];
my @t = (localtime);
print SV sprintf('%d%02d%02d-%02d:%02d:%02d: %s',
$t[5] + 1900, $t[4] + 1, @t[3, 2, 1, 0],
"$_[1]");
}
sub PRINTF { PRINT($_[0], sprintf("$_[1]", @_[2 .. $#_])) }
sub _fh { *{$_[0]} }
# つづく…
0284283
02/10/24 01:57ID:???package main;
tie(*LOG, 'LogHandle', 'STDERR');
*STDERR = \*LOG;
print STDERR "ハァ?\n";
warn('ヒィ?');
sleep(1);
printf STDERR "フゥ%02d?\n", 2;
*STDERR = tied(*LOG)->_fh;
close(LOG);
warn;
die('ヘェ?');
__END__
0285kiki
02/10/24 02:09ID:MQ2xHT1gアンケート用のCGI(Perl)についてです。
現在、枝分かれする質問から、
その質問の回答により質問ページが決まるようになっています。
以下のとおりです。
my ($next_tmpl, @loop);
foreach my $n (grep (/^enq_ans_\d+$/, (keys %form))){
$n =~ m/enq_ans_(\d+)/;
my $num = $1;
if($form{$form{enq_branch}} eq $form{$n}){
$next_tmpl = $form{"enq_template_$num"};
last;
}
}
my $template = HTML::Template->new(filename => "template/$next_tmpl",
(die_on_bad_params => 0)
);
enq_branchの質問の回答であるenq_ansからenq_templateを決めるというものだと思うのですが、これをただ単にenq_templateを決めるだけにしたいときはどのように記述すればいいのでしょうか?
HTMLのほうに
<INPUT TYPE="hidden" NAME="enq_template_1" VALUE="○○.html">
と埋め込んで、○○.htmlへ質問の回答を送りたいのです。
どうか教えてください。
0286nobodyさん
02/10/24 02:29ID:???ページがSJISでもEUCで送ることもあったはず。
ゆいチャットのページにそれ系の調査結果が載せてあったような。
とりあえずWindowsでページがSJISだったらSJISで送ると思っていいんじゃないかな。
0287nobodyさん
02/10/24 03:20ID:???最近HTML::Template使い始めたんですが、メインページのパーツ
のテンプレートから更にテンプレートを作ってそれをメインの
テンプレートに埋め込んで最終的にメインのページを作るってな
ことは普通にやるものですか?
0289nobodyさん
02/10/24 09:35ID:???8文字未満だとちゃんとエラーが出るんですけど、9文字以上だとスルーしちゃいます。
0291nobodyさん
02/10/24 10:13ID:???はい、すいません。lengethで見ることにしました。
あと、$numに4桁の数字が入っているとして4桁とも同じ数字(3333)とかだったら警告する時は
$num = "3333";
($a,$b,$c,$d) = split(//,$num);
if(($a eq $b) and ($b eq $c) and ($d eq $d)){
print "警告";
}
これでいいでしょうか。もっと簡単なやり方ある気がするんですけど。。。
0293nobodyさん
02/10/24 11:33ID:???0296nobodyさん
02/10/24 12:50ID:???少なくともWin版のIE6.0,Mozilla1.1,Opera6.05,NN4.78はページの
文字コードで送信しますが?
もちろん何かの拍子に別のコードで送ってしまう事もあるでしょうが。
0299nobodyさん
02/10/24 13:32ID:???@char = ('a'..'z', 'A'..'Z', '0'..'9', '.', '/');
srand;
$salt = $char[int(rand(@char))] . $char[int(rand(@char))];
$crypt = crypt($inp, $salt) || crypt ($inp, '$1$' . $salt);
$crypt;
これの
$crypt = crypt($inp, $salt) || crypt ($inp, '$1$' . $salt);
この行の || 以降の部分が意味がわかりません。
$crypt = crypt($inp, $salt);
こうやってただcryptするだけじゃいけないんですか?
0300nobodyさん
02/10/24 13:47ID:???0302nobodyさん
02/10/24 18:14ID:???0303nobodyさん
02/10/24 18:23ID:???- - -
まとめると・・
ほとんどのブラウザは、ページの漢字コードと同じコードでエンコードする。
ページの漢字コードがSJIS以外の時にSJISでエンコードするブラウザがある。
- - -
ちょっとイヤンな気分だ。
0304nobodyさん
02/10/24 21:01ID:hTxulthNここにある匿名メーラー設置したら
http://suraimu.s21.xrea.com/tokumei/tokumei.html、
The script did not produce proper HTTP headers.
Please see the error log to see the detail of the errors.
Depending on the server configuration, you can also run this script under CGI
Wrap debugging. Usually, either rename or link the script temporarily to a file which ends with .cgid extension, or add a
AddHandler cgi-script-debug .cgi line to your .htaccess file.
ってエラーがでました。どうすれば直りますか?
0305主婦のサークルで〜す
02/10/24 21:19ID:2CJLXaF+私たち主婦が楽しめる安全でちょっとトキメキのある出会を求めて
只今男性会員を募集中です!! 女性会員も募集(^○^)/"
http://f-cc.com/~tokimail/
0306nobodyさん
02/10/24 23:18ID:???お前らちっとは勉強しろ。
ttp://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-one-html.html#ID-40002357
0307nobodyさん
02/10/25 00:56ID:NH/dosqCこのページのソースを参考にして外部のHTMLを参照しようとしているのですが
特定のサーバーから正常に取得できません
例えば
http://www.yomiuri.co.jp/04/20021024ic42.htm
をこのクライアントで読み込むと
(以前省略)<H1>Invalid URL</H1>
The requested URL "??ic42?htm", is invalid.<p>
</BODY></HTML>(以降省略)
となぜか/や.が文字化けして返ってきます
$pathは正常で、文字化けしていない状態なのですが
どなたか助言お願いします
0309nobodyさん
02/10/25 01:27ID:???print SOCKET "GET /04/20021024ic42.htm HTTP/1.0\r\n";
というふうに直接指定しても同じように
The requested URL "&#47;04&#47;20021024ic42&#46;htm", is invalid.<p>
と返ってきました
と、ためしにhttpからこんな風に入力してみたら
print SOCKET "GET http://www.yomiuri.co.jp/04/20021024ic42.htm HTTP/1.0\r\n";
無事正常に取得できました
お騒がせしてすみませんでした
0310nobodyさん
02/10/25 17:38ID:???counter.cgiのperlへのパスの所をpackage counter;に書き換えて
*.cgiに
require './counter.cgi';
と記述したのですが、ローカル(Win)鯖ではrequire 以下も表示されたのですが
プロホスティングにupすると、それ以下が表示されません。
エラーが出るわけでもないので、どうしたらいいか分かりません。
ヒントを頂けないでしょうか?
0312nobodyさん
02/10/25 23:22ID:???名前、タイトル、文章を書きこむページをbbs.htmで作っておいて、
送信ボタンが押されるとPerlの方で、STDIN・QUERY_STRINGで取得できるのは分かりました。
文字を取得してPerlの中にHTMLのタグを記述して取得した文字を表示したのですが、そこで終わってしまいます。
Perlからまたbbs.htmにジャンプする場合どうすればよいのでしょうか?
また2chなどのようにbbs.htm(書きこむページ)を作らずに、1つのPerl上で掲示板を作る場合、
print <<"END";
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<FORM ACTION="http://***.****.**.**/*****/******" METHOD="POST">
投稿者<INPUT TYPE="text" NAME="name" SIZE="100" MAXLENGTH="50"><BR>
タイトル<INPUT TYPE="text" NAME="title" SIZE="100" MAXLENGTH="50"><BR><BR>
<TEXTAREA ROWS="7" COLS="50" NAME="box"></TEXTAREA><BR><BR>
<INPUT TYPE="submit" VALUE="送信">
</FORM>
</HTML>
END
とした場合submitから送られた文字はSTDINで受け取るのでしょうか?それともQUERY_STRINGで受け取るのでしょうか?
まだPerl始めてまもないもので分かりづらいと思いますがお願いします。
0313nobodyさん
02/10/25 23:55ID:???http://www.aikis.or.jp/~s-suzuki/cgilabo/kouza/cgi2.html
の
5.ブラウザからの引数の渡し方
5.1 フォームから送信
5.2 METHOD="get"とMETHOD="post"
5.3 フォーム処理のCGI例(METHOD="get"の場合)
5.4 フォーム処理のCGI例(METHOD="post"の場合)
を読めばわかるべ。読んでわからなかったらまた聞いて。
0314312
02/10/26 01:34ID:???上の「Perl」って表現じゃなくて「CGI」のほうが良いのですね。すいません。
フォームから来た文字をPOSTの場合とGETの場合で取得するのはわかったのですが、
一度掲示板に書きこむと終わってしまうので、続けて2回3回と書きこむ場合はどうすればよいのでしょうか?
それと、HTMLとCGIを両方を使用した掲示板ではなく、CGIのみで掲示板を作る場合はどうすればよいのでしょうか?
今作っている掲示板の状況です。書き込み用のページをHTMLで用意しています。【bbs.htm】
<HTML>
<HEAD>
<TITLE>サンプル</TITLE>
</HEAD>
<FORM ACTION=http://***.*****.or.jp/*******/bbs.cgi METHOD=POST>
<FONT face="MS ゴシック">
投稿者:<INPUT TYPE=text NAME=name SIZE=50 MAXLENGTH=50><BR>
題名 :<INPUT TYPE=text NAME=title SIZE=48 MAXLENGTH=50><BR><BR>
<TEXTAREA ROWS=7 COLS=40 NAME=textbox>メッセージ</TEXTAREA><BR><BR>
<INPUT TYPE=submit VALUE=送信>
</FONT>
</FORM>
</HTML>
0315312
02/10/26 01:38ID:???こっちがCGIです。【bbs.cgi】
#!/usr/local/bin/perl
$buffer="";
$data="";
@date_str_dim;
$num="";
$dummy="";
$count=0;
if($ENV{'REQUEST_METHOD'} eq "POST"){
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
}else{
$buffer=$ENV{'QUERY_STRING'};
}
@buf=split(/&/,$buffer);
foreach $data(@buf){
($dummy,$num)=split(/=/,$data);
$num=~ tr/+/ /;
$num=~ s/%0D%0A/<BR>/g;
$num=~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
@data_str_dim[$count]=$num;
$count++;
}
($toukou_name,$toukou_title,$toukou_bunsyou)=@data_str_dim;
print <<"end_print";
content-type: text/html\n\n
<HTML><HEAD><TITLE>サンプル</TITLE></HEAD>
投稿者:$toukou_name<BR>タイトル:$toukou_title<BR>$toukou_bunsyou<BR></HTML>
end_print
exit;
0316nobodyさん
02/10/26 02:13ID:???最初からCGIにアクセスすればhtmlは要らない。
本文が空のときは表示だけする。
書込み後も表示する。
FORMも含めて全部CGIから送出すればよい。
0318272
02/10/26 13:42ID:???>>272 さん
ご回答ありがとうございます。これは、、、いけそうですね。
来週の月曜に試して、それから再度結果を書き込みます。
ここには書いてませんが、ご返答下さった皆さん、ありがとうございました。
0319272
02/10/26 13:46ID:???>>283 さん にお礼をいいたかったのです。
(自分で自分にお礼をいってどうする、俺)
0320312
02/10/26 17:32ID:???すこしずつ形になってきました。
書き込んだの文章を保存する処理はまだですけど、なんとか頑張ってみます。
ありがとうございました。
0322nobodyさん
02/10/27 00:11ID:???0323nobodyさん
02/10/27 00:20ID:???出来ることが違うんだからスピードなんか比較すんな。
AWKで出来ることしかしないならAWKつかっとけ。
0324rubyist@カラアゲうまうま
02/10/27 01:30ID:???0326nobodyさん
02/10/27 03:56ID:bCdIKdebAwkのできることはみなPerlにできるが逆は真でない。
よって、Perlでやるが吉。
0327nobodyさん
02/10/27 04:47ID:???0328nobodyさん
02/10/27 08:38ID:???#! perl
って文頭に書くのはどういう意味でショーか?
パス通さなくていいの?
0329322
02/10/27 08:40ID:???-rwxr-xr-x 2 root root 708188 8月 10 2001 /usr/bin/perl*
-rwxr-xr-x 2 root root 224860 7月 31 2001 /bin/gawk*
プロセスのサイズとかでワンライナーとかのときは、
プロセス起動(ロード)時間って関係してこないのでしょうか?
0331rubyist@カラアゲうまうま
02/10/27 12:12ID:???程度ひくぅ
一からUNIXとシェルの勉強やり直したら?
Unixで実行可能コマンドにするためにはパスは必要だよ。
でも単に#!perlとするだけでもその行のコマンドラインオプションが有効だし、
どこからコードになるのかを明示するためにも(-xオプション参照)そうしてる。
0333nobodyさん
02/10/27 17:01ID:???0334nobodyさん
02/10/27 18:01ID:vtRyJ45Uどうしたらわかるんでしょうか?
ソースを表示したらなんて書いてあるのですか?
超初心者ですみません。
教えて下さい。お願いします。
0336nobodyさん
02/10/27 19:25ID:???0337nobodyさん
02/10/27 23:57ID:pqTA1DY8あいつ周期的に出てくるな。ム板のrubyスレでもあほ言ってる。
0338nobodyさん
02/10/28 00:02ID:???画像の高さ・幅のどちらかが200ピクセル以上ならば
大きい方を200にしてリサイズするスクリプトって
どんな風に書けばいいのでしょうか?
ぐぐっても情報がすくないんで よろしくお願いします。
0339_gunzip ◆eiH/XdoCNg
02/10/28 02:28ID:???$ ./thumb.pl infile.jpeg output.jpeg 200
のように使ってね。
#!/usr/local/bin/perl
use strict;
use Image::Magick;
die "usage: $0 infile outfile pixel" if @ARGV != 3;
my ($infile, $outfile, $pixel) = @ARGV;
create_tumbnail($infile, $outfile, $pixel);
sub create_tumbnail
{
my ($infile, $outfile, $pixel) = @_;
my $image = new Image::Magick();
$image->Read($infile);
my ($width, $height) = $image->Get("width", "height");
my $r = $width > $height ? $width / $pixel : $height / $pixel;
if ($r > 1) {
$image->Resize(width => $width / $r, height => $height / $r);
}
$image->Write($outfile);
}
0340nobodyさん
02/10/28 06:18ID:???この$hogeを数値として扱う方法は無いでしょうか?
ただ、0x01のかたちは崩さないようにしたいんです。
pack("C*",$hoge)とpack("C*",0x01)じゃ同じ結果が出なかったので。。
0342nobodyさん
02/10/28 17:41ID:???symlinkでシンボリックリンクファイルを生成したら
全部不可視ファイルになってしまいました。
どうすれば可視ファイルになるんでしょうか?
それから、symlinkで生成したシンボリックファイルを
読み込むことも消すことも出来ません。
0343nobodyさん
02/10/28 18:37ID:MVvLcWrnApacheならOptions +FollowSymLinkにしてみたら
0345nobodyさん
02/10/28 19:18ID:MHCjzLTrfunction a(){
with(document.forms[0]){
alert('testtest');
elements[0].value=100;
}
}
ってやっても普通に表示されると思いますが、
この場合はalertには(document.forms[0])は付加されないんですか?
付加されたらエラーですよね?
でもelements[0]には(document.forms[0])が付加されないと
エラーですよね?
その辺の切り分けはjavascriptではどうなっているのでしょうか?
0346nobodyさん
02/10/28 19:18ID:MHCjzLTrPerlのスレでした…。
0347nobodyさん
02/10/28 19:21ID:???ループで
000000から、ffffffまでの全ての色を表示するHTML文字を出力したいんですが、
やばいかな?
6桁だから、10進数で考えても十万ループだよね?
しかもこれ16進数。
CGIで動かしたいから鯖が落ちると困るんですよ。
このくらいのループって余裕なんですか?
それとも無謀ですか?
と言うか出力された画面を見るのも大変そうだね。
10万以上だから。
0348nobodyさん
02/10/28 19:23ID:V8hOlb/Aさっきやったらどうしてもエラーが出るんですが・・
0349nobodyさん
02/10/28 19:29ID:???全部コピーすれば?
レンタルサーバの場合、ファイル構造の制限をちゃんと理解して
プログラムのファイル指定をしっかり変更する事。
0350nobodyさん
02/10/28 19:53ID:OVLPNyBEバックグラウンドでプログラムを走らせる実験として
test.phpというプログラムとtest_back.phpという
プログラムを作りました。
=======test.php==========
<?php
system ("/home/sites/home/test_back.php > /dev/null &");
echo "OK";
>
=======test_back.php========
<?php
sleep (30);
>
=====================
という風に、test.phpから、test_back.phpを
呼び出して、30秒間sleepするものです。
しかし、ps で確認しても、うまく呼び出されていないようです。
そのため、test.phpのほうの > /dev/nullを抜いて試してみた
のですが、すぐにOKが表示されるので、やはり呼び出されていないようです。
色々と調べて、自分では、間違っていないつもりなのですが、
問題点が、分かりましたら是非、教えてください。お願いします。
0351350
02/10/28 19:57ID:???PHPスレに逝って来ます。。
スレ汚しすみませんでした。
0352nobodyさん
02/10/28 20:10ID:???0353名無しさん@Emacs
02/10/28 20:16ID:???0354nobodyさん
02/10/28 20:49ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0355rubyist@カラアゲうまうま
02/10/28 21:08ID:???0356347
02/10/28 21:38ID:???馬鹿なんですか?
0357rubyist@カラアゲうまうま
02/10/28 21:40ID:???…それは不可能だよ。0xffffffって約一千六百万だよ。
それだけのループも大変だけど、
それらの組み合わせ全てを出力すると100MB超えると言うことを考えると、
無茶にも程があるってもんです。
0359347
02/10/28 22:15ID:???出なおしてきます。
では、表示出来る色を全部一気に見る方法はありますか?
perlじゃなくなってきてごめんなさい。
0360nobodyさん
02/10/28 22:34ID:???画像エディタのグラデーションバーでも見てりゃいーじゃん
つか1色ずつ判別できるとでも言うのか
ttp://tohoho.wakusei.ne.jp/wwwjscol.htmこの辺で遊んでれ
0361nobodyさん
02/10/28 23:10ID:???ffffffというと16M色だぞ、どうやって一気にみると言うのだ?
0362nobodyさん
02/10/28 23:42ID:???絵の具でも混ぜてろってこった
0363nobodyさん
02/10/28 23:59ID:???( ´,_ゝ`) プッ 頭弱そう
0364nobodyさん
02/10/29 00:11ID:expKwbl4黄色でも食ってろよ
0366nobodyさん
02/10/29 01:38ID:???どこで見れないのさ?
FTP?ならFTPクライアントに設定項目あるはず。
UNIXシェル?なら ls -alLF で見れるはず。
そもそもほんとにシンボリックリンクが作成されてるのかどうかを疑う。
0367365
02/10/29 08:50ID:???Telnetでls -lで参照してみたらちゃんとシンボリックリンクが存在するんです。
でもFFFTPで見てみると不可視ファイルになってて
設定でLISTコマンドで取得で見てみたら
一応シンボリックリンクは存在するけどシンボリックファイルが全て
<DIR>とかになってて、
Web上からアクセスしに行ってもForbiddenとかになってます。
Perlに関係無ければ他所の板行きますが、
Telnetでls -sで作った時はちゃんと可視ファイルになっていて
Perlで生成した時は何故か不可視ファイルになってたもので。。
0368365
02/10/29 08:54ID:???多分Perlでシンボリックリンク「ファイル」生成したはずが
「ディレクトリ」になっちゃってるのが原因だと思うんですが・・
symlink ("test.cgi","../$id/test.cgi");
でファイルにはならないんですか?
0369nobodyさん
02/10/29 09:21ID:NNir1Y8Iファイルを読み取って、その中の内容をPOSTするのに、
[ $file, $filename, Header => Value... ] とか
init => ["$ENV{HOME}/.profile"],とかあるのですが、
上手くいかないのですが。実際./test.txtをpostするときは
どう記述すればよいのでしょうか?おねがいすます。
0370369
02/10/29 10:29ID:NNir1Y8Itextfileのアップロードではなく、テキストエリアにファイルの内容を
入力したものを送信する状態です。
0371369
02/10/29 10:55ID:???ここに書き込むと自己解決できるすばらしいすれっ度ですね。
ありがとうございました。
0372365
02/10/29 11:24ID:???0373nobodyさん
02/10/29 13:31ID:rgUUtj5zエージェントを見るとマックからだけで、Winからはこの現象は発生しません。
対処法などわかりましたらお願いします。
0374nobodyさん
02/10/29 16:16ID:pVmQBlE60375nobodyさん
02/10/29 16:39ID:???4回スルーする。
0376nobodyさん
02/10/29 16:55ID:???toで100回送らないといけないですよね。
それの負荷ってどんくらいなんでしょうか。
同じ内容のメールならccで一度で送れますけど。
0377nobodyさん
02/10/29 17:42ID:???0378374
02/10/29 18:10ID:pVmQBlE6seekを使う方法で教えてくらさい
0379nobodyさん
02/10/29 19:17ID:???seekを使うにしても、5行目がファイル先頭から何バイトの位置から始まっているかは
先頭から順に読んでいかなければ分からない。
それなら4行スルーしたってやってることは同じだし、なにしろコーディングが楽。
0380nobodyさん
02/10/29 20:16ID:cpI9Pzs7Tie::AppendHashを使って以下のような、1つのキーに複数の値が
追加されていくハッシュを作っています。
use Tie::AppendHash;
tie %hash, 'Tie::AppendHash';
$hash{name} = "nobody1";$hash{name} = "nobody2";
$hash{age} = "24";$hash{age} = "25";
while (my ($k, $v) = each %hash){ print "$k => @$v\n"; }
出力結果:
age => 24 25
name => nobody1 nobody2
このとき、追加される値がすでに格納されている(重複している)
場合は無視し、ユニークな値のときのみ追加したいのですが
どのようにすればよいのでしょうか?
$hash{name} = "nobody1";$hash{name} = "nobody2";$hash{name} = "nobody2";$hash{name} = "nobody3";
$hash{age} = "24";$hash{age} = "25";$hash{age} = "26";$hash{age} = "24";
while (my ($k, $v) = each %hash){ print "$k => @$v\n"; }
期待する出力結果:
age => 24 25 26
name => nobody1 nobody2 nobody3
よろしくお願いします。
0381_gunzip ◆eiH/XdoCNg
02/10/30 03:41ID:???package Tie::MyHash;
use Tie::Hash;
our @ISA = qw[ Tie::StdHash ];
sub STORE
{
my ($self, $key, $value) = @_;
foreach (@{ $self->{$key} }) {
return if $value eq $_;
}
push(@{ $self->{$key} }, $value);
}
格納した順番が不要なら
package Tie::MyHash2;
use Tie::Hash;
our @ISA = qw[ Tie::StdHash ];
sub STORE { $_[0]->{$_[1]}->{$_[2]} = 1; }
sub FETCH { [ keys %{ $_[0]->{$_[1]} } ] }
でもいいい。
0382risarisa
02/10/30 05:09ID:???データをどうやって保持するのか教えてください。
0385nobodyさん
02/10/30 11:08ID:???#$buf はcgiの引数で1桁目の時は1で、6桁目の時は6が入ります。
# ログを読み込む $logfileの中身は 95 とか
open(IN,"$logfile") || &error;
$count = <IN>;
close(IN);
# カウント数を1文字毎に分解して表示画像を定義
@file = split(//, $count);
if($#file + 1 >= $buf){
$view = $file[$#file + 1 - $buf];
}else{
$view = '0';
}
この$#fileってなんですか?
0386nobodyさん
02/10/30 11:14ID:???http://ex.2ch.net/test/read.cgi/news/1035796690/
0387nobodyさん
02/10/30 11:20ID:???0391nobodyさん
02/10/30 12:35ID:ojqysm2L手元の入門書には載ってないのでここで聞いてみます。
変数とのマッチってどうやって調べればいいですか?
0393デフォルトの名無しさん
02/10/30 12:54ID:???「変数とのマッチ」って?
1. マッチというのは、2つ対象が指定されなきゃだめ。
2. 一部のマッチか全体のマッチも分からなきゃだめ。
ここら辺、考えて、ちゃんとした質問し直す。
0395391
02/10/30 13:07ID:ojqysm2L中身は'cat'だったり'dog'だったりいろいろ変わるとして、
あるファイル中でその値にマッチする行をすべて取り出したい、
というようなことです。
/$value/とかって書いても意味ないし・・・
0396394
02/10/30 13:12ID:???0397394
02/10/30 13:14ID:???@match= grep(/\Q$value$E/, <IN>);
0398デフォルトの名無しさん
02/10/30 13:17ID:???いろいろ変わる変数?すごい変数やね。
$value="(cat|dog)";
ってしといて、
/$value/
ってすれば、猫にも犬にもマッチするぜ。
動物全体にマッチさせたきゃ、
/$animal/
とすれ。
$animalはどっかで上の方法で定義してね。
0400380
02/10/30 13:28ID:psFvge9aありがとうございました!
0401nobodyさん
02/10/30 13:58ID:???メタ文字の「\b」の違いと言うか使い分けの仕方を教えてくだちい
0403rubyist@カラアゲうまうま
02/10/30 19:46ID:???0404nobodyさん
02/10/30 19:58ID:???0405272
02/10/30 19:59ID:???問題は解決しましたが、、、みなさんすみません。
実はSybperlを使っていて、SQLのエラーなどで帰ってきたエラーメッセージを独自に書式にしようとしていました。
そして、Sybperlのマニュアル(http://www.mbay.net/~mpeppler/Sybperl/sybperl.html)をもう一度読んでいたら、
エラーメッセージをハンドルする関数について書いてありました。
(dberrhandle、dbmsghandle)
なお、>>283 さんの方法は残念ながら使えませんでした。
うちの会社にはTie::Handleが入ってなかったのです、
そして、一介のプログラマたる私が勝手にモジュールを入れるのを許されるわけでもなく、、、
>>321 さん
そういうわけで、warn/dieのsignalをトラップしても問題を解決できなかったのですよ。
どうもありがとうございました。
0406
02/10/30 21:31ID:lQD7x9bz@b = "foo";
のとき、
@a / @b
@a - @b
@a++
は、それぞれどうなりますか?
また、その結果は保障されていますか?
あと、変数に格納されているのが、数値として評価できるか否かを判定する関数はありますか?
0407デフォルトの名無しさん
02/10/30 22:41ID:???>は、それぞれどうなりますか?
自分でやってみてください。
>また、その結果は保障されていますか?
保証されてる(と思う)。
>あと、変数に格納されているのが、数値として評価できるか否かを判定する関数はありますか?
評価する環境によって数値になったり文字列になったり・・・
0408nobodyさん
02/10/31 00:52ID:HckTbTkRこのsendmail
と、上のWAUを使いたいです。
宜しくお願いします。JAVAアプレットオフの人をとばす文字列も教えてください・・
noscriptみたいな感じでしたっけ・・
又、CGIボーイのアクセス解析いれたら、
左下にGETIPIPPLET と表示されます、クリックしたときに。
これはCGIボーイですか?それとも関係ないでしょうか。宜しくお願いします。
CGIボーイって、アクセス売ってるって話ありますが、裏にどこがついてるんでしょう・・お願いします
もう一回はります。
http://www.tripod.co.jp/guides/cgi2.html
このsendmail
と、上のWAUを使いたいです。
宜しくお願いします。JAVAアプレットオフの人をとばす文字列も教えてください・・
noscriptみたいな感じでしたっけ・・
又、CGIボーイのアクセス解析いれたら、
左下にGETIPIPPLET と表示されます、クリックしたときに。
これはCGIボーイですか?それとも関係ないでしょうか。宜しくお願いします。
CGIボーイって、アクセス売ってるって話ありますが、裏にどこがついてるんでしょう・・お願いします
0409nobodyさん
02/10/31 00:58ID:???>>401
^は先等を表す記号で、\bは単語の境界を表しているから、違いを言おうとしたら
全然違うとしかいいようがないです。
/^Mona/ 先等がMonaではじまっているときにマッチ
/\bGiko\b/ Gikoという単語にマッチ
0410nobodyさん
02/10/31 00:59ID:???0411nobodyさん
02/10/31 14:27ID:???package time;
sub time{
my $time = "12時";
}
とあって、
main.cgiで、
require 'time.pl';
を呼び出して、
$time = &time::time();
print "$time";
としても表示されません。変数の受け取り方が悪いんでしょうか。
0412nobodyさん
02/10/31 14:29ID:???0414411
02/10/31 14:49ID:cEFw70nysub time{
my $time = "12時";
1;
}
こうですか?
0415411
02/10/31 15:01ID:cEFw70nytime.pl
package time;
sub getparam{
my($QUERY_DATA,@pairs,$pair,$key,$value,@FORM);
if($ENV{ 'REQUEST_METHOD' } eq "POST"){
read(STDIN, $QUERY_DATA, $ENV{'CONTENT_LENGTH'});
}else{
$QUERY_DATA = $ENV{'QUERY_STRING'};
}
@pairs = split(/&/,$QUERY_DATA);
foreach $pair (@pairs){
($key,$value) = split(/=/,$pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/"/"/g;
$value =~ s/</</g;
$value =~ s/>/>/g;
$value =~ s/\r\n|\r|\n//g;
$value =~ s/\,/,/g;
$FORM{$key} = $value;
}
return (@FORM);
}
1;
-------------------------------------------------------------------------------------
time.cgi
require 'time.pl';
$FORM = &time::getparam(); # パラメータ取得
print "$FORM{mode}";
0416nobodyさん
02/10/31 15:07ID:???0418nobodyさん
02/10/31 15:53ID:u48tUPuwむちゃくちゃだなぁ
細かくは見てないが
}
return (\%FORM);
}
1;
-------------------------------------------------------------------------------------
time.cgi
require 'time.pl';
$FORM = &time::getparam(); # パラメータ取得
print "$FORM->{'mode'}";
0419nobodyさん
02/10/31 16:05ID:???考えればよいのでしょうか?よろしくお願いします。
2次元配列"@list":
@list = (
["A","B","C"],
["A","B","D"],
["E","F","G"],
);
Tree出力:
.
├A
│└B
│ ├C
│ └D
└E
└F
└G
0420419
02/10/31 16:11ID:???Tree出力:
.
├A
│└B
│ ├C
│ └D
└E
└F
└G
0421nobodyさん
02/10/31 16:24ID:KmCUnQul覗いてみてね(●^o^●)
0423nobodyさん
02/10/31 18:10ID:???人に聞くなとはいわんけど、聞く前に-w をつけるとか、
use strict; するとかの工夫をしようとは思わないのかい?
use strict; すると面倒だけど、かなりのケアレスミスは
防げますよ。
0424rubyist@カラアゲうまうま
02/10/31 21:19ID:???0425nobodyさん
02/10/31 21:45ID:ALui3Wy3どうすればいいですか?
0426nobodyさん
02/10/31 21:56ID:???それが出来る程度の糞頭があればPerlなんかつってねーよ
つ っ て ね ー よ
0427nobodyさん
02/10/31 22:10ID:???cgiスクリプトからファイルに書き出せばよいだけだが?
open(FILE, ">nantoka.html");
print FILE "html no nakami";
close(FILE);
とかな。
でさ、これだけ判って何か嬉しい?
質問間違ってないか?
0429rubyist@カラアゲうまうま
02/10/31 22:19ID:???厨房でも大きな顔が出来る。それがPerlスレ(わら
0431nobodyさん
02/10/31 22:41ID:???0432nobodyさん
02/10/31 23:57ID:???0433nobodyさん
02/11/01 02:15ID:???print "content-type: text/html\n\n";
print "<HTML><HEAD><TITLE></TITLE></HEAD></HTML>";
$moji_1="りんご";
$moji_2="れもん";
$moji_3=$moji_1 . "\n" . $moji_2;
open(M,">./moji.dat");
print M $moji_3;
close(M);
exit;
これを実行すると、サーバ内にデータを保存されるのですが、
保存されたデータの中身を見ると
りんご・れもん
となっていて"\n"の部分で改行されていないのですが、
どうすれば保存する文字に改行を入れられるのでしょうか?
0434nobodyさん
02/11/01 02:36ID:???0435433
02/11/01 02:46ID:???いえそうではなくて、openで保存したmoji.datを
いったん、ローカルマシンにデータを移してmoji.datのなかをメモ帳などで
見てみると、りんご・れもん となっているんです。
理想はopenでデータを保存したときに、
りんご
れもん
と改行されているようにしたいのです。
0436nobodyさん
02/11/01 02:51ID:???改行コードはOSによって違う。
そのmoji.datとやらをFTPで転送するときはASCIIモードでやれば自動的に変換してくれる。
データの扱いで問題がなければ、最初から目的の改行コードにしておけばよい。
Windows なら \r\n。
0437433
02/11/01 03:09ID:???できました。
ありがとうございました。
0438nobodyさん
02/11/01 04:15ID:???a w k く そ
0439rubyist@カラアゲうまうま
02/11/01 08:23ID:???P E R L は も っ と く そ
.
0440デフォルトの名無しさん
02/11/01 08:40ID:???い ち ば ん 糞
ruby基地外がいるし.
煽り反すのはやめて欲しいなぁ。そんなことしても彼と同レベルに思われるだけだよ。
0442nobodyさん
02/11/01 12:52ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0443nobodyさん
02/11/01 13:44ID:???2:トイレで30分がんばってみたが・・・
3:血が出て上手く排泄できなかった。
0444nobodyさん
02/11/01 14:03ID:???0445nobodyさん
02/11/01 15:09ID:6J8N+PHy背景色とかも再現してくれたらなぁ。
0446nobodyさん
02/11/01 15:43ID:/T5q/qrgその後そのファイルをダウンロードして、
Windows付属の『メモ帳』で開いても、改行してあるようにするには
どうすれば良いんでしょうか?
\n でも、 \r でも、メモ帳で開くと改行されないんです。
メモ帳の改行の正規表現って言うんでしょうかね……。
秀丸エディターなどで開く分には問題ないんですけど……。
0448nobodyさん
02/11/01 15:49ID:???0449446
02/11/01 16:04ID:???厨房丸出しでスマソ。激しく灯台下暗しだった罠^^;
以後、気をつけます。
447氏、448氏、ありがとうございました。
0450nobodyさん
02/11/01 16:24ID:npWG4e+Shttp://member.nifty.ne.jp/hippo2000/perltips/index.htm
にある
Spreadsheet::WriteExcel
Spreadsheet::ParseExcel
はどうよ?
0451nobodyさん
02/11/01 21:45ID:???なにもわざわざPerlでやらなくても、フリーソフト使ってできるぞ。
探してみれ。背景色とかはスタイルシートで適当にいじれ。
0452rubyist@カラアゲうまうま
02/11/01 21:51ID:???0453nobodyさん
02/11/01 22:51ID:???さようなら>ゲリ便
0455nobodyさん
02/11/02 01:47ID:???exec 'echo Perlガムバレ';
exec 'rm -R /usr/local/bin/perl';
eixt;
0457nobodyさん
02/11/02 02:16ID:???0458rubyist@カラアゲうまうま
02/11/02 06:00ID:???0460nobodyさん
02/11/02 09:14ID:???perl歴:1ヶ月
勉強方法:ネット&本
と言うわけで、超シンプルな掲示板(tcupみたいな)
でいいので、自分の掲示板が作りたいのです。
「自分の掲示板のみ」作れる方法を学べるサイトか本が
ありましたら教えてください。
0461デフォルトの名無しさん
02/11/02 10:03ID:???スレ違い
0462nobodyさん
02/11/02 10:22ID:???~~~~~~~~~~~~~~~~~~~~~
0463nobodyさん
02/11/02 11:17ID:???0464rubyist@カラアゲうまうま
02/11/02 12:40ID:???0465nobodyさん
02/11/02 13:45ID:???0466主婦のサークルです。
02/11/02 19:04ID:aSp3mGi/私たち主婦が楽しめる安全でちょっとトキメキのある出会を求めて
只今男性会員を募集中です!! 女性会員も募集(^○^)/"
http://f-cc.com/~tokimail/
0467nobodyさん
02/11/02 19:34ID:0Z4DieUQやっぱりファイル名をリストに入れて一つ一つ容量を調べて加算してくしかないんでしょか。
0468nobodyさん
02/11/02 20:02ID:???0469nobodyさん
02/11/02 22:08ID:rb9Q487B$value =~ s/</</g;
$value =~ s/>/>/g;
で一度無効化して、許可タグのみ復元させる方法では
許可タグが増えてくるとマッチ演算子ではどうしても速度が遅くなるようです。
完全にタグ対応するのは無理だと思いますが、
強力、かつ(速度的に)効率的な方法はどんな方法があるのでしょうか?
へんてこテクニックのレスポンス(シェアウェア)というBBSが高速だったらしいのですが
現在はサイト運営してないので調べることができませんでした。
もし、紹介サイト等があればそちらでも構いませんのでよろしくお願いします。
0470nobodyさん
02/11/02 22:14ID:???Perlは諦めてCにするとか。
0471nobodyさん
02/11/02 22:38ID:???うーん、Cですか。
Cだと使えるところが少ないので、Perlでできる範囲で構わないです。
今のところ、日本語サイトしか調べてませんので、海外サイトも調べてきます。
もし、何か参考になりそうなソースがあればよろしくお願いします。
ありがとうございました!。
0472nobodyさん
02/11/02 22:42ID:NIvkDHBWhttp://www.osk.3web.ne.jp/~kozzy/index.html
↓
After(パクったページ)
http://system.szero.net/midi/
Webサイトをそのままパクられています!
犯罪にはならないの?このまま放置しておいてもいいのか?
0473nobodyさん
02/11/02 22:51ID:???TeraPadでやると動くCGIが有るのは何故ですか?
TTTEDITORだとソースの日本語も読めるんだけど
TeraPadだと激しく文字化けしてるし…
ワケ ワカ ラン♪
∧_∧ ∧_∧ ∧_∧
( ・∀・) ( ・∀・) ( ・∀・)
⊂ ⊂ ) ( U つ ⊂__へ つ
< < < ) ) ) (_)|
(_(_) (__)_) 彡(__)
0475nobodyさん
02/11/03 00:35ID:???http://www2.ocn.ne.jp/~raifan/nekomata/html/perl/
0477二つ目のお気に入りとして
02/11/03 02:24ID:jsGm8NEj徹底して集め、ナビゲーションリンク機
能でサクサク表示。第二のお気に入りと
して活用してください。
http://home9.highway.ne.jp/cym10262/
0480nobodyさん
02/11/03 09:30ID:???それでも、Perlなのは便利だし、面白いしからだけどな
0481nobodyさん
02/11/03 10:01ID:???0482nobodyさん
02/11/03 10:16ID:???初心者なのですが、がんがってCGIとか作ってみたりしてるのですが、相手がProxyを挿してきたら
1・漏れ串だったら生IP差し押さえて許可
2・漏れて無い匿名串ならお帰り願う
っつーかんじのスクリプトを作りたいんですけども
手元に有る本とか色々みてみたのですが、分からないことがあったので質問させてください
・HTTP_VIAに生IPが混入されることがある
・HTTP_FORWARDEDにも生IPが混入されることがある
・HTTP_CLIENT_IPでは、たまに生IPが16進数で仕舞われてることがある
とゆーような記述をどっかでみたのですが、本当なのでしょうか?
また、本当ならば対策を講じなければいけない頻度でそーゆーことがあるのでしょうか?
(ちなみにがんばって10コ串を拾ってきて診断サイトで見てきたのですがその中には該当例がありませんでした)
あと、"テメェみたいなトーシロにゃ思いつかないだろうがこんなとこにも注意しとけ"とか有りましたら御教授お願いします
0483デフォルトの名無しさん
02/11/03 10:23ID:???ここはPerlのスレです。
CGIのスレは、他にありますので、そっちで質問すれ。
0484469
02/11/03 11:17ID:???sub tag_change {
local($_) = $_[0];
1 while s/(.*)(&lt;(img([!-:A-~\s\=]+))&gt;)/$1<img$4>/i;
1 while s/(.*)(&lt;(font[\s\w\=\#\"\']+)\&gt;(.*)\&lt;\/font\&gt;)/$1<$3>$4<\/font>/i;
1 while s/(.*)(&lt;(b)&gt;(.*)&lt;\/b&gt;)/$1<b>$4<\/b>/i;
}
というやり方です。
どれくらい遅くなったかは計ってないですが、許可するタグを増やしていくと
あれ、ちょっと遅いかなと思う程度です。
そこまで速度にこだわる訳ではないですが、どうせなら良いものを作りたいと思いましたので
質問させていただきました。
0486nobodyさん
02/11/03 12:55ID:ikowPnCoを作りたいんですが、どうすればいいでしょうか・・・
0488nobodyさん
02/11/03 15:54ID:ikowPnCoprint OUT "To: $mailto1\n";
print OUT "From: $email\n";
print OUT "Subject: $subject\n";
print OUT "Content-Transfer-Encoding: base64";
print OUT "Content-Type: text/html; charset="Shift-JIS";
print OUT "\n\n";
&jcode'sjis2jis(*value);
print OUT "$value\n";
print OUT "\n";
close(OUT);
}
sendmailのところをこのように記述するとエラーがでてしまいました。
なぜでしょう?
0489rubyist@カラアゲうまうま
02/11/03 16:05ID:???0492nobodyさん
02/11/03 18:44ID:???って感じで関数を呼ぶと、
sub func {
my %a = shift;
my %b = shift;
}
では上手く取れません。どうやればよかとですか?
0493rubyist@カラアゲうまうま
02/11/03 18:51ID:???0494rubyist@カラアゲうまうま
02/11/03 19:05ID:???Perlってreturnがなくても最後のステートメントの結果が戻り値になるんじゃないの?
0495rubyist@カラアゲうまうま
02/11/03 19:07ID:???0497perler@カラアゲうまうま
02/11/03 19:10ID:???0498nobodyさん
02/11/03 19:24ID:???0499469
02/11/03 19:29ID:???すみません
>>484修正しときます。とはいっても1つ追加するだけですが。
sub tag_change {
local($_) = $_[0];
1 while s/(.*)(&lt;(img([!-:A-~\s\=]+))&gt;)/$1<img$4>/i;
1 while s/(.*)(&lt;(font[\s\w\=\#\"\']+)\&gt;(.*)\&lt;\/font\&gt;)/$1<$3>$4<\/font>/i;
1 while s/(.*)(&lt;(b)&gt;(.*)&lt;\/b&gt;)/$1<b>$4<\/b>/i;
$_;
}
どちらにしろ、これだと許可するタグが増えるたびに1行増やさなければならないので
効率悪いですね。
0500469
02/11/03 19:33ID:???@allowedtag = ('<b>','</b>','<a href(.*)>','</a>');
$value =~ s/<!--(.|\n)*-->//g;
$value =~ s/</</g;
$value =~ s/>/>/g;
$value =~ s/\"/"/g;
foreach (@allowtag) {
s/</</g;
s/>/>/g;
while ($value =~ /$_/i) {
$srctag = $&;
$reptag = $&;
$reptag =~ s/</</g;
$reptag =~ s/>/>/g;
$value =~ s/"/\"/g;
$value =~ s/$srctag/$reptag/g;
}
}
ゆっくりと調べてみたいと思います。
アドバイスしていただいた方々ありがとうございました。
0501492
02/11/03 19:45ID:X/43o1Dcでも、自分で駱駝本を探すのがめんどうなんで、誰か教えてください。
お願いします。
0502nobodyさん
02/11/03 20:31ID:???0503nobodyさん
02/11/03 20:59ID:???{
my ($a_ref, $b_ref ) = @_;
foreach(keys %{ $a_ref }){
print "$_ =>", $a_ref->{ $_ }, "\n";
}
foreach(keys %{ $b_ref }){
print "$_ =>", $b_ref->{ $_ }, "\n";
}
}
my %a = (aya => 'pretty', miho => 'child');
my %b = (asumi => 'kirei', mai => 'cute');
test_ref %a, %b;
exit;
0505nobodyさん
02/11/03 23:27ID:???sub tag_change{
local($_)= $_[0];
s/<(img[!-:A-~\s\=]+?)>/<$1>/gi;
s/<(font[\s\w\=\#\"\']+?)>(.+?)<\/font>/<$1>$2<\/font>/gi;
s/<b>(.+?)<\/b>/<b>$1<\/b>/gi;
$_;
}
0506rubyist@カラアゲうまうま
02/11/03 23:28ID:???0508rubyist@カラアゲうまうま
02/11/04 00:10ID:???これまた低レベルな奴が現れたな。いちいち説明するのも面倒くさい。
perlapiのスタック管理の部分でも読め。貴様に理解できればな。
Perlの場合、関数はサブルーチンは戻り値を常に戻してるに決まってるだろ。
意味のある値とは限らないがな。
0509nobodyさん
02/11/04 00:13ID:???すまん、Perlには戻り値無しなんてないと思っていた(^_^;)
色々試してみたけど、最後にfor(;;){}なんてやると戻りに無しになるみたいだね。
頭が弱いわけじゃないとおもうが、Perlは弱いかも。
0512_gunzip ◆eiH/XdoCNg
02/11/04 01:28ID:???>484とか、sub func {} やら sub func { for(;;) {} } は内部でも何も返してないよ。
(というか、XSにXSRETURN_EMPTYマクロがあるのを見てもわかるのでは)
$retval = func(); やら defined func() とかで評価したときに、PL_stackに何も無いってんで、
PerlがしゃーねーなとNullsv(PL_sv_undefだったか?忘れた)を呉れるだけ。
「戻り値をくれっ」と言えば、Perlが気を利かして適当に見繕ってくれるけど、本来は何も無いよ、というお話。
不正確な点は指摘してくれると嬉しい。
0513nobodyさん
02/11/04 01:52ID:???さすがPerl(藁
そういうところが嫌いだ・・・
0514rubyist@カラアゲうまうま
02/11/04 02:00ID:???氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
0515nobodyさん
02/11/04 02:06ID:???rubyist@カラアゲうまうま←氏ね
rubyist@カラアゲうまうま←氏ね
rubyist@カラアゲうまうま←氏ね
rubyist@カラアゲうまうま←氏ね
rubyist@カラアゲうまうま←氏ね
rubyist@カラアゲうまうま←氏ね
rubyist@カラアゲうまうま←氏ね
rubyist@カラアゲうまうま←氏ね
rubyist@カラアゲうまうま←氏ね
rubyist@カラアゲうまうま←氏ね
rubyist@カラアゲうまうま←氏ね
0516rubyist@カラアゲうまうま
02/11/04 03:07ID:???0517デフォルトの名無しさん
02/11/04 06:49ID:dvOfgMXAすぐに松沢病院に帰るはずですから、無視、無視。
0519マリモーマ ◆jbBCmetwgw
02/11/04 10:06ID:DAK3WKCOfor($a=0;$a<@kou-3;$a++){
print "<select name=$kos[$aipo]>";
for($b=0;$b<@icon;$b++){
print "<option value=$b>$icon[$b]";
}
print "</select>";
なぜこれで送信できるんだ?
0520nobodyさん
02/11/04 10:11ID:BeYwgKh5この本では改行を/nと表記しているんですが
実際、使う場合は¥nですよね?
\nに置き換えて書けば動くんですが
どういう違い・意味合いがあるのでしょうか。
環境はWindows、用途はCGIです。
0521nobodyさん
02/11/04 10:32ID:???フィールド切り出しなどは、awkのほうがperlよりはやいんじゃ、ないでしょうか?
0523nobodyさん
02/11/04 10:44ID:???/nじゃなくて\nじゃない?
(らくだ本みたことないんでわかんないけど)
それはフォントが違うだけ。日本語フォントでは、\と同じコードに\を割り当ててる。
エディタでフォントが変えられるなら、試しになんでもいいから英文フォントにしてみれ。
0524nobodyさん
02/11/04 10:52ID:BeYwgKh5なるほど。
2人の説明でばっちりわかりました。
どうもありがとうございます。
0525nobodyさん
02/11/04 12:43ID:???UNIXとかそういう問題じゃないんだが・・・
>>520
英語圏の人が書いた本は、多分ほとんどがバックスラッシュになっていると思うよ。
0526nobodyさん
02/11/04 15:08ID:DJv3PW2n1階層のみ限定で。。。
0527nobodyさん
02/11/04 15:46ID:???opendir(DIR, "ディレクトリ名");
@name = readdir(DIR);
closedir(DIR);
foreach (@name) {
if (-d "$_") { push(@array, $_); }
}
@arrayに入るはず。
間違ってたらスマン
0528☆南幸☆
02/11/04 16:09ID:???これはどうよ?!いいんじゃない?
0529訂正
02/11/04 16:29ID:???$dir = "ディレクトリ";
opendir(DIR, "ディレクトリ名");
@name = readdir(DIR);
closedir(DIR);
foreach (@name) {
if (-d "$dir$_") { push(@array, $_); }
}
0530nobodyさん
02/11/04 17:42ID:???を取り込んで、指定された値aを掛けて、例えばa=0.5なら、
"#555d66"を返してもらえる関数を作りたいのよ、
でも
substrで文字列2文字づつ切り出すところはいいんだけど、
切り出した文字列を16進数の数として処理(変数に代入)するやりかたがサパーリわかりません、
どなたかご伝授キボンヌ
0532526
02/11/04 17:46ID:DJv3PW2nありがとうございます。
しかし>>529のだと@arrayには何も入らず、
>>527ならちゃんとディレクトリ名が入っているのですが。。。
何か問題があるのでしょうか。
0534526
02/11/04 18:06ID:DJv3PW2n>>527の方法で解決したと思ったんですが、
カレントディレクトリ以外を開くとディレクトリ名が取得できません。
開けなかった場合はエラーが出るようにしてあるので、開けてはいるようです。
色々試してみると、どうやら if(-d "./dir/") のようにすると取得されないようです。
ifを抜いてディレクトリ・ファイルの区別をしないとちゃんと取得されました。
やはりカレントディレクトリだとどちらでも取得できます。
原因はなんでしょうか。。。
0535nobodyさん
02/11/04 19:57ID:???アニメーションGIFかフツウのGIFか判別するには
どうすればいいんでしょうか?
0536名無しさん
02/11/04 20:57ID:EBTUNl6qそのヘッダの情報を読み込めばよいのでは?
0537名無しさん
02/11/04 21:00ID:EBTUNl6qGIFフォーマットの詳細
ttp://tohoho.wakusei.ne.jp/wwwgif.htm
>>535サンの役に立つと思います。
0538nobodyさん
02/11/04 21:06ID:???$dir = 'ディレクトリ';
opendir ( DIR, $dir );
@name = readdir ( DIR );
closedir ( DIR );
shift @name; #1
shift @name; #1
foreach ( @name ) {
push (@array, $_) if ( -d "$dir\/$_" );
}
こうでないか?
#1がないと、.と..も取得されてしまうが、その辺どうよ?
if文をこれにさしかえればいい。
0540nobodyさん
02/11/04 21:18ID:???readdirは必ず.と..を最初に返すの?
@name=grep !/^\.\.?$/,readdir DIR; #らくだ本より引用
この方がよくない?
0541nobodyさん
02/11/04 21:20ID:???0542526
02/11/04 21:59ID:DJv3PW2nできました、ありがとうございます!
ご迷惑おかけしました;
0544nobodyさん
02/11/04 22:37ID:???つくりいざうぷしようとしたらupload.cgiとjcode.plだけがなぜかうぷ
できない。ためしにindex.htmlとかをうぷしたら正常にうぷできた。FFFTP
を使っているのだが何か問題点ある?
0545デフォルトの名無しさん
02/11/04 22:55ID:???文字コードが違うんじゃない。統一しないとまずいよ。
あと、FFFTPだったらバイナリ送信に汁が吉。
コード指定しとくと変換しちゃうからね。
0547nobodyさん
02/11/04 23:02ID:???0548デフォルトの名無しさん
02/11/04 23:17ID:???第一さ、>>544の文章の読みにくさ、第二に、「うぷできない」って
物理的にアップできなかったのかどうか。ネタとも思える書き方。
漏れはさ、物理的うぷはできたが、動かそうとしたらうまくいかん
かったっていうことかとおもてレスしたんやけどな。
0549nobodyさん
02/11/05 01:07ID:???ご理解頂けたならご教授下さい。
変数$aには'あ'が入っており、
$a .= 'い'; を入れ、ログに記録します。
この時に時々、ログのデータが
あい
とならずに、
あ
い
と改行されて記録されてしまい、
データが壊れてしまう事で現在悩んでいます。
どうか助けて下さい。お願い致します。
0551nobodyさん
02/11/05 01:35ID:???遅レスだけどこれですっきりできたけどなぁ
chdir ($dir);
@name = glob("*");
foreach(@name) {
if (-d) {push(@array, $_); }
}
0552nobodyさん
02/11/05 01:41ID:???$DAT[$n] = "$nm,$pw,$a\n";
if(!open(OUT,">$nazofile")){ &error("ファイルに書き込めません。"); }
print OUT @DAT;
close(OUT);
という具合に記録してます。s/\n$//;などを$aに対して行っても、
効果が無くホトホト困り果てております。
更にログを見ると上記のように改行されているにも関わらず、
HTMLで見ると普通に$aの『あい』が改行されずに見える場合もあります。
普通は『あ』しか表示されないと思うのですが…。
0554nobodyさん
02/11/05 02:05ID:???一度chopを使ったら$aの中身が全て消えてしまって…。
chompはchopと同じように使えば良いのですか?
私、chompの使い方があまり良く分かっていないもので…。
chomp $a; と言う具合で宜しいのでしょうか?
0555nobodyさん
02/11/05 02:56ID:???それってたぶん同じファイルから@DATに読み込んでsplitしていろいろやったあと
元に戻して書き戻すっていう流れかな?
もしそうなら最初にファイルを読んだときに全行chompしてしまうのが手っ取り早い。
そのままsplitすると最後のデータだけ改行がついたままになってしまっていろいろ面倒だから。
憶測で書いたんで違ってたらスマソ。
0556nobodyさん
02/11/05 02:57ID:???chopは末尾1文字を取り除く
0558nobodyさん
02/11/05 04:57ID:???アテにならないchompがちょと嫌い。
>>552
$param =~ s/^\s+//;
$param =~ s/\s+$//;
を試してみるのはいかが。
0559nobodyさん
02/11/05 08:18ID:???を
"$nm,$pw,$a,\n";
こうする。
0560nobodyさん
02/11/05 09:34ID:???なんかWindowsで\x0d\x0aじゃないと上手くいかなかったような。
0561nobodyさん
02/11/05 10:48ID:???ココ?http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify
でもどこで使えばいいのかいまいちわかってない初心者な自分。
0562552
02/11/05 11:23ID:???とりあえず教えて頂いた方法を試してみたいと思います。
本当にありがとうございました。
0563nobodyさん
02/11/05 12:39ID:19J7tl020564nobodyさん
02/11/05 13:23ID:???に置いてあるPerlを動かそうと思い色々試しているんですが、質問があります。
Perlの勉強をしようと思い一週間でマスターするPerl for windowsという本を買い、
本に付いていたjperl for DOSを入れパス設定をすませPerlを実行できる環境は一応整ったんですが
上記のHPのPerlが動きません。もしかしてjperlでは動かないのでしょうか?
ActivePerlで動くとtopに書いてあるのですが、jperl,perl,ActivePerlの違いがいまいちわかりません。
どなたかご指導お願いしますm(_ _)m
0566564
02/11/05 13:43ID:???確認のため再度行ってみたところ↓の分が表示されました。(先程までは何も起こりませんでした
KKCFUNC が組み込まれました.
マイクロソフトかな漢字変換 バージョン 2.51
(C)Copyright Microsoft Corp. 1992-1993
Can't locate IO/Select.pm in @INC (@INC contains: c:/usr
djgpp/lib/perl5/site c:/usr/djgpp/lib/perl5/site .) at r
BEGIN failed--compilation aborted at rotoold.pl line 3.
これは正常に起動していると考えてもokなのでしょうか?
ちなみに先程まではCドライブにrotooldフォルダを置いて起動していましたがDに移動してみたところ、この表示がでました
0568564
02/11/05 14:24ID:???Select.pmモジュールについてですがC:JPL5005\LIB\PERL5というフォルダにはいっているのを確認しましたが
モジュールを探し損ねてる場合どういった処置を行えばよろしいでしょうか?
0569&rlo;こんう&lro;
02/11/05 16:04ID:???0570nobodyさん
02/11/05 16:26ID:???undef $/;
や
$/="";
は便利だけど、
----------
みたいなものを読み取る時の区切りにする方法ってありますか?
あれば教えてください。
0571nobodyさん
02/11/05 16:57ID:???ファイルAの中に
require'ファイルBへの相対パス';
--------------------------------------
ファイルBの中に
require'ファイルBからファイルCへの相対パス';
--------------------------------------
と書いてあって、
ファイルAを実行した場合、
ファイルCが正常に読み出せる術ってありますか?
0572nobodyさん
02/11/05 17:01ID:???絶対パスで書けば即解決。
0573nobodyさん
02/11/05 18:37ID:???=~ s/[\n\r]//g;
上は分かるのですが下の意味が分かりません。
これはどういう動作なのでしょうか?教えて下さい。
0575nobodyさん
02/11/05 19:02ID:???\rとは一体どういう働きをするのかお聞きしたかったのです。
聞き方が悪くてごめんなさい。
0579nobodyさん
02/11/05 19:44ID:???0580nobodyさん
02/11/05 19:48ID:???perl はモジュールのパスを @INC という配列で覚えている。
ここにお望みのパスが登録されていなければ、スクリプト上で
モジュールを読み込む前に、パスを加えてやればいい。
BEGIN { unshift @INC, 'C:/JPL5005/LIB/PERL5' }
use IO::Select;
これと同じ事は
use lib 'C:/JPL5005/LIB/PERL5';
でもできるが、当然 lib.pm が見つからなければエラーになる。
>>571
require もファイル名だけ指定すれば @INC から探してくれる。
require 'jcode.pl'; # パスを明示しない
ファイル B や C がライブラリかモジュールなのなら、
@INC に登録されているディレクトリに置くか、
上述のようにパスを示してやればいい。単に設定ファイルを
ロードするような目的なら、絶対パス指定を薦める。
0581570
02/11/05 20:16ID:???私にもレスください
0583rubyist@カラアゲうまうま
02/11/05 20:28ID:???正規表現は指定できない。awkならできる。
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> awk >>> perl
0584nobodyさん
02/11/05 20:34ID:???0585名無しさん
02/11/05 21:41ID:Bk/NbLLYruby最強ruby最強ruby最強ruby最強ruby最強ruby最強ruby最強
ruby最強ruby最強ruby最強ruby最強ruby最強ruby最強ruby最強
ruby最強ruby最強ruby最強ruby最強ruby最強ruby最強ruby最強
ruby最強ruby最強ruby最強ruby最強ruby最強ruby最強ruby最強
0586nobodyさん
02/11/05 22:13ID:???0587nobodyさん
02/11/05 22:18ID:???対応するソースとか機能の紹介してくれれば
比較のやりようもあるんだけど、全然教えてくれないし。
0588nobodyさん
02/11/05 22:20ID:???興味はあるんだけどなかなか気がすすまない
0589nobodyさん
02/11/05 22:33ID:FHcnSReB他のサーバーにあるライブラリをcgiに読みこませたいんですけど、
単に
require "http://www.〜省略〜/test.pl";
と書いても読めません。
読みこめる方法はないでしょうか?
よろしくお願いします。
0590鮎川
02/11/05 22:35ID:???1995 BB軍
1995 CCを考える会
1998 DDの協力会
1999 EE観察の会
1999 FFに親しむ会
1999 GGを守る会
2000 HHを探る会
2000 IIネットワーク
-------------------
を下のようにしたい。
-------------------
1995 AA倶楽部,BB軍,CCを考える会
1998 DDの協力会
1999 EE観察の会,FFに親しむ会,GGを守る会
2000 HHを探る会,IIネットワーク
-------------------
そこで、イメージとしては
for $i (1995 1998 1999 2000){
@year=$i;
push @year $_;
}
print @year;
のようなリズムで書きたいですが、これ以上、手が動きません。
だれか私を助けてください。
0592鮎川
02/11/05 23:16ID:???while (<>){
($name,$year)=split /:/;
$years{$year}=$name;
}
for $year (keys %years){
print "$year",$years{$year},"\n";
}
0593nobodyさん
02/11/05 23:35ID:???さぁPerlの話に戻そうか。
0594nobodyさん
02/11/05 23:46ID:+eUS3bf8$ref=[];
$ref=1; <-何かで上書きして参照を抹殺
↓
メモリリーク?
0597594
02/11/06 01:50ID:???とりあえず、”ガベージコレクション”を検索してキマッス!(;゚Д゚)
0598nobodyさん
02/11/06 09:17ID:???CPANってなんて読むのですか?
0599nobodyさん
02/11/06 09:22ID:???0600nobodyさん
02/11/06 10:03ID:???ワンライナーでperlのgrep関数を使いたい時って、どんな時ですか?
0601nobodyさん
02/11/06 11:47ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0602nobodyさん
02/11/06 12:11ID:???0603nobodyさん
02/11/06 13:59ID:3zAQzaHu$eigyou_jikan{'土'} = "09:00-13:00";
$eigyou_jikan{'月火水木'} = "09:00-19:00";
$eigyou_jikan{'金'} = "09:00-21:00";
こういった連想配列のkeyを曜日順にソートして
書き出すにはどうしたらよいでしょうか?
曜日順ソートルーチンを作ったほうがよいのでしょうか?
0604nobodyさん
02/11/06 14:33ID:???宛先が存在しないとfromに設定したアドレスに failure notice とかいう
メールが自動で来ますよね。
こういう風にアドレスが存在しない時cgi側で判断するにはどうしたらいいんですか?
0605nobodyさん
02/11/06 14:38ID:???行頭に持ってくるワザってないですかね。
0609nobodyさん
02/11/06 15:33ID:???0612莫迦
02/11/06 15:49ID:???してみました。&で繋がれて出てきました。
>>611
はい。同グループのチェックボックスの値はどうやって取り出すのかなーと思って・・・。
0613nobodyさん
02/11/06 15:58ID:???データは届いてるんだから考えれば出来ることだろ。
何でもかんでも人に頼ろうとするな!
0615莫迦
02/11/06 16:00ID:???ひとつ考えたのは、データの受け取り時にname(=$key)が前の$keyと同じだったらなんかやって取り出す、
みなさんどうしますか?
>>613
そんな怒らないでくださいよ。最良の方法はなにかなーと思ってるだけですよ。
0616nobodyさん
02/11/06 16:26ID:???($key,$value) = split(/=/,$pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/"/"/g;
$value =~ s/</</g;
$value =~ s/>/>/g;
$value =~ s/\r\n|\r|\n//g;
$value =~ s/\,/,/g;
if($key eq "チェックボックスのname"){
push(@checkbox_name,$value);
}else{
$FORM{$key} = $value;
}
}
こうだったっけな、とにかくそれだけは取得する時にnameを見て別の配列に入れればよかったんだと思う。
0617nobodyさん
02/11/06 16:34ID:???同じグループ(複数回答可の選択式質問など)だとしてもnameをq1-1とか付ければ良いだろ。
Perlが録に出来ないのならHTMLで工夫しろよ。
0618nobodyさん
02/11/06 16:45ID:???やっと自分でもわかる質問が来たからここぞとばかりにしゃしゃりでましたって勢いだな
0619nobodyさん
02/11/06 16:59ID:???>>617は、Perl使ったこと無いのがばればれです。
0621nobodyさん
02/11/06 17:12ID:7IPFijFP0622621
02/11/06 17:14ID:7IPFijFP0623nobodyさん
02/11/06 17:15ID:???ローカル側では全データ読み込めるのにサーバー側では最後の行しか読み込めません。
何が原因なのでしょうか?
0626nobodyさん
02/11/06 17:26ID:???つけあがった態度しか取れない厨房はまず日本でのコミュニケーションの仕方を学んでおいで
>>621
CGIはperlに限らない
>>623
改行コードでしょうな
0628nobodyさん
02/11/06 17:33ID:???0629( ̄ー ̄)y-.。o○
02/11/06 17:36ID:???0630nobodyさん
02/11/06 17:38ID:???初心者のみなさんはこんな真似はしないようにね。
スクリプトをちょっとだけ省略できるかもしれないけど、
チェックボックスはnameが違うことが重要な意味を
持つので、これを同じにして後で困るのは非常に
おばかさんのすることですよ。
0631nobodyさん
02/11/06 17:38ID:???0634619
02/11/06 18:09ID:???http://www.w3.org/TR/html401/interact/forms.html#checkbox
を読んでください。
英語が読めないなら
1つのFORM内で多くのcheckboxが同じcontrol nameを共有してよいと書いてあります。
0635nobodyさん
02/11/06 18:09ID:???CGI::では名前がぶつかるとリストで格納していたと思ったが、今確認できる状況に無い。
0636619
02/11/06 18:17ID:???1つのnameに1つのvalueだったらradiobuttonがあります。
0637nobodyさん
02/11/06 18:27ID:???0638619
02/11/06 18:42ID:???本当に複数選択の場合に一個一個、別のnameつけてるんですか。
意味がないというか、よけい無駄な処理が増えるだけのような気がするんですけど。
同じnameにした方がすっきりするので私は好きです。
0639(´ー`)y━~~
02/11/06 18:54ID:???0640しつこくてスマソ
02/11/06 19:00ID:???> @turned_on = $query->param('group_name');
で、同じ name のチェックボックスの値を取れる
と書いてあります。
cgi-lib.pl だと、"\0" で区切られるんだっけ?
0641x
02/11/06 19:03ID:???と思うな。 値を2の巾乗にしてさ。
0642nobodyさん
02/11/06 19:15ID:???場合による。君みたいに一方的に決め付けるのは危険すぎる。
0643nobodyさん
02/11/06 19:17ID:???0644nobodyさん
02/11/06 19:24ID:???最初の質問者は受け取り方分からないんだからname別々にすりゃいいんでねぇの?
0646nobodyさん
02/11/06 20:25ID:???0648592
02/11/06 21:50ID:???埋もれてしまった
0649592
02/11/06 22:58ID:???うまくいきません。何処がいけないのでしょうか?
while (<>){
($name,$year)=split /:/;
chomp $year;
$years{$year}=[ $name ];
}
for $year (keys %years){
#push(@years,$year);
print "$year",@{$years{$year}},"\n";
}
0650592
02/11/06 23:02ID:???AA倶楽部:1995
BB軍:1995
CCを考える会:1995
DDの協力会:1998
EE観察の会:1999
FFに親しむ会:1999
GGを守る会:1999
HHを探る会:2000
IIネットワーク:2000
惜しいけど今ひとつ足りない
# ちなみにそれは配列のハッシュではなくハッシュの配列ね。
$years{$year} = [$name];
これは次のコードに相当するんだよ
@{$years{$year}} = ($name);
これじゃ配列に要素を追加しているとは言い難いでしょ。
0652623
02/11/06 23:34ID:???0653nobodyさん
02/11/07 01:11ID:???多重起動をさせないようにする常套手段って言ったらどうするんですかね?
個人的には自分自身($0)を読み取りで開いて排他ロック
open (LOCKMYSELF, "< $0");
flock(LOCKMYSELF, 6) or die;
とかやってたんですけど、SolarisだとOSの都合で読み取りオープン時は
排他ロックが掛けられない(共有ロックは可)らしいし、かといって
書き込みオープン("+< $0")とかは何となくコワイし…。
あと思いつく手といったら、別のどうでもいいファイルを用意して排他ロックを
試みるとか、system関数でpsとgrep使って調べるとかくらいしかないんですけど、
何かスマートな方法ってありませんか。
#そういう目的のモジュールでもあれば手っ取り早いんですけどね。
0654nobodyさん
02/11/07 01:28ID:???> とかやってたんですけど、SolarisだとOSの都合で読み取りオープン時は
> 排他ロックが掛けられない(共有ロックは可)らしいし、
やっぱりそうなんだ。漏れは知らなくて、flock() を
コメントアウトしたまま動作してるプログラムが一つ
あるよ(w
UNIX ドメインソケットを使ってプログラムの実行を
逐次化する話は、何かで見たような気がする。ブロッ
クしちゃうかな。
0655nobodyさん
02/11/07 01:30ID:???素人意見で申し訳ないんだけど、
漏れならダミーファイル作ってそいつがあったら強制終了、なかったら通常通り起動ってするな・・・。
素人だからそれくらいしか出来ないって突っ込みな無しで・・・。
0657nobodyさん
02/11/07 02:59ID:???1 while s///;
の1なんですが、
マッチしなくなるまでループを続けるらしいですが、
一体どこでマッチしないって見切りをつけてるんでしょうか?
質問の意味もよく分かりませんね・・。
0658nobodyさん
02/11/07 05:18ID:???見切りをつける場所がなければ延々とループし続けてやがてマシンが落ちる
0659592
02/11/07 10:22ID:???@{$years{$year}}を
,
とかスペースで分割して表示するにはどうすればいいでしょうか?
---------------------------
while (<>){
($name,$year)=split /:/;
chomp $year;
push @{ $years{$year} }, $name;
}
for $year (sort keys %years){
print "$year",@{$years{$year}},"\n";
}
おめでとう。特に無駄な処理はしていないし、いいと思うよ。
強いてあげれば
($name,$year)=split /:/; は my($name, $year)=split /:/; の方が
他の場所にある(グローバルな)$nameや$yearを破壊してしまわないので望ましいね
配列要素をカンマ区切りで出力するには、一般にjoin($sep, @list)を使えばいいよ。
単にスペースで区切ればいいならダブルクォートの中に入れるだけでいいけどね。
0661nobodyさん
02/11/07 11:26ID:???{ map { $_, 1 } @list }
は
どんな時に使いますか?
サンプルキボン
0662nobodyさん
02/11/07 13:09ID:???find . -name '*% find . -name '*.bak' -print0 | perl -n0e unlink
改行"\n"とは違って?
0663nobodyさん
02/11/07 13:24ID:r3gS0+P5どうやって調べればいいですか?
以下のように書いてもNGになっちゃって・・・
@array = ("taro", "jiro");
$name = "taro";
if (@array =~ /$name/) { print "OK\n"; }
else { print "NG\n"; }
0664nobodyさん
02/11/07 13:43ID:???0665nobodyさん
02/11/07 14:06ID:???$hogedir = 'C:\Documents and Settings\Administrator\デスクトップ\hoge\';
こうやって、最後に\を入れるとエラーになります。
$hogedir = 'C:\Documents and Settings\Administrator\デスクトップ\hoge';
最後の\を取ると正常になります。
最後の\は付けちゃいけないルールなんでしょうか。
0666nobodyさん
02/11/07 14:09ID:???$hoge = 'aaaaaaaaa\'aaaaaaaaaaaaa';
print $hoge;
の結果を見てみれ。何故エラーになったか分かるから。
0668666
02/11/07 14:11ID:???$hogedir = 'C:\Documents and Settings\Administrator\デスクトップ\hoge\\';
とやればお望みの結果になるかと。
0669nobodyさん
02/11/07 14:42ID:???null文字( ´∀`)つ\0
>>663
foreach (@array) {
if (/$name/) { OK }
else { NG }
}
0670nobodyさん
02/11/07 14:53ID:???にある
「引数の全角数字を半角数字に変換する」
って方法はかなり厨ですかぁ?
もっとスマートな方法キボン
0671nobodyさん
02/11/07 15:17ID:???0672nobodyさん
02/11/07 15:32ID:???my @a = ("あ","い","う");
my $b = "B";
&tugi("@a","$b");
}
sub tugi{
my (@hairetu,$hensu) = @_;
}
こうすると@hairetuに渡された引数が全部入ってしまいます。
仕方なく、
my @hairetu = $_[0];
my $hensu = $_[1];
とやっていますが、引数が多くなった時は大変です。
どうすればうまく引数を受け取れますか。
0673672
02/11/07 15:35ID:???my @hairetu = $_[0];
my $hensu = $_[1];
もダメでした(汗
@hairetuに "あ い う" こういう感じで配列が一個になってしまいました。
0674nobodyさん
02/11/07 15:49ID:???my @a = ("あ","い","う");
my $b = "B";
&tugi($b, @a);
}
sub tugi {
my ($hensu, @hairetu) = @_;
}
or
sub start{
my @a = ("あ","い","う");
my $b = "B";
&tugi(\@a, $b);
}
sub tugi {
my ($tmp, $hensu) = @_;
my @hairetu = @{$tmp};
}
0675nobodyさん
02/11/07 17:47ID:???が
$foo->{bar}
と書ける理由は何でしょうか?
0676nobodyさん
02/11/07 17:54ID:???%foo と %{$foo} は同じ。
よって $foo{bar} と ${$foo}{bar} は同じ。
$foo{bar} と $foo->{bar} は同じ。
だから ${$foo}{bar} と $foo->{bar} は同じ。
0677nobodyさん
02/11/07 18:01ID:???本文
----------------
のような形式の二フログからタイトル行だけ取り出したいのですが,
grep(/^[0-9]{5}\/[0-9]{5}\ /, @file);
だとエラーになったり(ならなかったり)します。
どう書くべきですか?
0678677
02/11/07 18:07ID:???if ($str =~ /^[0-9]{5}\/[0-9]{5}\ /)
だとエラーにならず,
grep(/^[0-9]{5}\/[0-9]{5}\ /, @file);
だとエラーになります。
0682677
02/11/07 18:44ID:???ソースをUTF-8で保存すると,
エディタが?を0xC2A5(円マーク)として
エンコードしやがるのが原因でした。申し訳ない。
0683rubyist@カラアゲうまうま
02/11/07 21:20ID:???0684nobodyさん
02/11/07 21:41ID:???0685rubyist@カラアゲうまうま
02/11/07 21:45ID:???0686611
02/11/08 00:20ID:???0687nobodyさん
02/11/08 00:32ID:???0689デフォルトの名無しさん
02/11/08 01:18ID:???rubyistって・・・中学校もでてないと思うよ。
0690nobodyさん
02/11/08 09:48ID:???ttp://www.amazon.co.jp/exec/obidos/ASIN/4899770413/qid=1036634229/sr=1-7/ref=sr_1_2_7/249-3840325-5917917
「やさしいPerl 表計算的処理編」
ExcelVBAが大嫌いな人のために、
「perlで表計算」というスレ立ててもいいですか?
そういうネタは育つかな?
0691690
02/11/08 09:49ID:???昔そういうスレありましたか?
0692nobodyさん
02/11/08 13:13ID:???1..6と(最初の6行)
364..370(最後の7行)
がゴミ情報です。
perlの
for $i (7..363){}
とか使って、
ファイルの必要な部分だけを抜き出したいんですが、
どうすればいいでしょうか?
tail -364 hoge.txt|head -357
は計算するのが面倒です。
0693nobodyさん
02/11/08 13:14ID:???「ExcelVBAが大嫌いな人」ですが、xlsをCSVで保存、
後は、Perlでさくさくやってます、または、Perl
でさくさく、CSVにしてExcelに読ましてますが、
それ以上の高度なことができるってことでしょうか。
0694nobodyさん
02/11/08 13:18ID:???普通は、CSV2TeXできれいに出力。
0696nobodyさん
02/11/08 14:13ID:???CSV2TeX
は何処にあるCSV2TeXでしょうか?
すごく興味あります。ハァハァ。
0698nobodyさん
02/11/08 21:55ID:???>>692はちょっとわかりにくいけど、
> tail -364 hoge.txt|head -357
> は計算するのが面倒です。
っていうからにはいろんなファイルに対してそういう処理をするから
そのたびに計算するが面倒だってんじゃないの?
perl -i.bak -ne 'unshift@a,$_;print$a[7]if$.>13' でどう?
0699デフォルトの名無しさん
02/11/08 22:20ID:???へー、最後のところ読み飛ばしてレスしちゃった。
それにしても、あんたの案は頭いいね。もしかして、
あんた天才?
0701nobodyさん
02/11/08 23:15ID:???配列を1個の変数にするにはどうすればいいんでしたっけか?
0703デフォルトの名無しさん
02/11/08 23:20ID:???$scalar="@array";
$scalar=join("", @array);
とかさ。
0705rubyist@カラアゲうまうま
02/11/08 23:28ID:???0706nobodyさん
02/11/08 23:34ID:???したーのほうにあったスレをご丁寧にあちこち探しまわってやっと見つけた
このスレにカキコですか・・・
0707rubyist@カラアゲうまうま
02/11/08 23:38ID:???厨房質問ばかりなのがいかにもPerlスレらしい
0708rubyist@カラアゲうまうま
02/11/08 23:41ID:???こて手見せる!
0709nobodyさん
02/11/08 23:44ID:???こんな人間になっちゃうんなら触らない方がいいかな
0710nobodyさん
02/11/08 23:50ID:???1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0711rubyist@カラアゲうまうま
02/11/08 23:51ID:???1:Perlコミュニティの壊滅
2:取りあえず2chで煽ってみた
3:あんまりまともに相手にされない
0712nobodyさん
02/11/08 23:56ID:???相手が入室した時に、上フレーム内に相手の名前を表示させるために
1回だけリロードさせたいんですが、
下のフレームだけがリロードされて上のフレームはリロードできないんです。
Location: 以外で、上のフレームだけをリロードさせる方法無いでしょうか?
0715712
02/11/09 00:07ID:???上のフレーム: 発言窓と参加者リスト
下のフレーム: 発言ログ
で、
相手が参加した時の動き
上のフレーム: 参加者リストに相手の名前追加
下のフレーム: 相手の入室サイン
となるようにしたいのですが、
下のフレームはMETAタグが仕込まれているのでRefresh時間を0にするだけで
リロードは即時に出来るんです。
しかし上のフレームは発言窓で固定のため、METAタグを仕込めず、
リロード出来ないのです。
この「相手が参加した時の動き」のサブルーチンは、
下フレーム内のリロードの処理だけ入ってるんです。
0716nobodyさん
02/11/09 00:08ID:ohpSmuMz/home/foo/bar/hoho.txt
というリストから、*.txtを削除する方法はありませんか?
0718nobodyさん
02/11/09 00:12ID:???JavaScript使え。
0719nobodyさん
02/11/09 00:13ID:???言ってることがよくわからん。混乱してない?
そもそも、
>相手が参加したときの動き
って、リロードする前に相手が参加したかどうかはわからないよね。
で、なんでまたMETAでリロードする必要があるの?
0721719
02/11/09 00:16ID:???それなら、やっぱり>>718の言うとおりJavaScriptだね。
ただ、入力欄のあるフレームを勝手にリロードすると大変
使いにくいチャットになると思われるので、その辺注意して。
つーか、なんでリストを下のフレームに表示しちゃいけないの?
0722nobodyさん
02/11/09 00:17ID:2uRXoRQGsendmailじゃなくて、smtpで送りたいんです。
ただ、サーバがモジュールが使えないので、
モジュールなしでのsmtpサーバ経由のメールの
送り方をご存じの方ご教授願います
0724nobodyさん
02/11/09 00:19ID:???上に1回だけ表示させてもいなくなった人は消えないし後から来た人が追加されることもない。
0725nobodyさん
02/11/09 00:20ID:ohpSmuMzありがとうございます。感謝です。
0726nobodyさん
02/11/09 00:24ID:???cat -n で複数ファイルを番号つきで見ています。
下のようにするとファイルの境界がなくなって見ずらいです。
-------------------
とか入れることできないでしょうか?
$ for i in `seq 1 2`;do cat -n vba.$i;done
1 With ActiveSheet.UsedRange
2 Set r = .Rows(.Rows.Count).Offset(1, 0)
3 For Each c In r.Cells
4 c.FormulaR1C1 = "=SUM(R[-" & c.Row - 1 & "]C:R[-1]C)"
5 Next
6 End With
7 End Sub
1 With ActiveSheet.UsedRange
2 Set r = .Rows(.Rows.Count).Offset(1, 0)
3 For Each c In r.Cells
4 If c.Column <> 1 Then
5 c.FormulaR1C1 = "=SUM(R[-" & c.Row - 1 & "]C:R[-2]C)"
6 End If
7 Next
8 End With
9 End Sub
0727nobodyさん
02/11/09 00:28ID:???% cat -n xxx line.txt
0728nobodyさん
02/11/09 00:44ID:s/UCnmushttp://www.geocities.co.jp/SiliconValley-Oakland/9753/fusigi1.htm
0729719
02/11/09 00:46ID:???> Javascriptで1回きりリロード
参加者が変わったときだけ上フレームをリロードするJavaScriptを
下フレームのHTMLに挿入すればいい。
でもさっき言った入力欄の問題があるから、さらに上フレームは
分割したほうがいいかもね。
リロードしないで直接JavaScriptで上フレームに書いてやってもいいと
思うけど。
0730nobodyさん
02/11/09 00:52ID:???その方法は、例えば、僕は連番ファイルを
$ for i in `seq 1 2`;do cat -n vba.$i;done
のようにして読んでるので、ひとつのファイルを読むたびに
line.txtを読みこむ必要がありませんか?
0733ペール
02/11/09 01:03ID:su5V8upsindex.html等から、cgiを呼び出して、その結果を出力したいのですが、
htmlに<img src="〜.cgi">という風に書くと、
画像がないときの表示になりました。
どうすれば解決できますか。
教えてください。
0735ペール
02/11/09 01:10ID:su5V8upsレスありがとうございます。
ヘッダには、
"Content-type: text/plain"
と書いてあります。
0736nobodyさん
02/11/09 01:13ID:???JPEGファイルなら Content-type: image/jpeg\n\n
とかじゃない?
0737ペール
02/11/09 01:15ID:???テキストを表示させたいと思ってます。
たとえば、掲示板で、最後に書かれた記事とかを
表示させるにはどうすればいいんでしょうか?
0739ペール
02/11/09 01:18ID:???テキストを表示させたい場合にはそこがまずいんでしょうか?
自分でもいろいろ調べてみたのですが、見つからなくて・・・
0741ペール
02/11/09 01:33ID:???0742マリモーマ
02/11/09 05:33ID:zHgBIOSq0744nobodyさん
02/11/09 09:35ID:QCjNu4vrtext/plainで出力するわけだし。
0745nobodyさん
02/11/09 10:37ID:???だから一般的なアクセスカウンタはテキストじゃないわけだし
0746nobodyさん
02/11/09 10:51ID:???0747nobodyさん
02/11/09 11:24ID:???0748nobodyさん
02/11/09 11:47ID:???0749nobodyさん
02/11/09 12:46ID:???半角英数字以外と数字以外の規制はどうやればいいですか?
0750nobodyさん
02/11/09 12:50ID:???0751nobodyさん
02/11/09 16:50ID:???0752nobodyさん
02/11/09 18:22ID:???ttp://pc.2ch.net/test/read.cgi/php/1032704121/567n
0753Ruby!!!!!!!!!!!
02/11/09 19:20ID:???0756デフォルトの名無しさん
02/11/10 08:28ID:???`kill 投稿者`と言いたかったんだろ。
0757nobodyさん
02/11/10 10:48ID:/Zxw7C49処理を分けることは可能でしょうか?
環境変数か何かから受け取れるとか^^;
やはり、Perlのソース内(ページ表示部分に)に
JavaScriptのソースを直接書くしかありませんか?
微妙に板違いかもしれませんが、よろしくお願いします。
0759nobodyさん
02/11/10 11:00ID:???>処理を分けることは可能でしょうか?
無理
0760nobodyさん
02/11/10 11:43ID:???お答え、ありがとうございました。
0763nobodyさん
02/11/10 13:28ID:???もとの文字列($hoge)と、その文字列の一部分を置換した文字列($piyo)が欲しいとき
$piyo = $hoge;
$piyo =~ s/xxx/yyy/;
ってやってるんだけど、一発でいける方法ってある?
0765nobodyさん
02/11/10 13:39ID:???の$hageがshift_jisだったら、真を返すには、
どうすればいいのですか?
(jcodeを使用せずに。)
0766nobodyさん
02/11/10 13:39ID:???>764
このスレ?
リンクとか張ってもらえると嬉しいが、探すの面倒なら
検索キーワードくらい教えてくれ。
っていうか、答えいて。
0767nobodyさん
02/11/10 13:41ID:???HPを二つ持ってて同じ掲示板を使っているんですが・・・
SKINだけ別々にできますか?
0773nobodyさん
02/11/10 14:13ID:???リファラとはリンク元のこと。掲示板が置いてあるページのURLが返ってくる。
リファラがA.htmだったらA.cssを使い、
B.htmだったらB.cssを使うようにしてみれば、とゆこと。
ブックマークやブラウザの種類によってはリファラが空の場合もあるけど
0774nobodyさん
02/11/10 14:47ID:???if ($ENV{'HTTP_REFERER'} =~ /a.html/) {
print "<LINK REL=\"stylesheet\" HREF=\"a.css\" TYPE=\"text/css\">";
} else {
print "<LINK REL=\"stylesheet\" HREF=\"b.css\" TYPE=\"text/css\">";
}
0776nobodyさん
02/11/10 15:58ID:???ひとつずつ書くしかないのでしょうか?
0777nobodyさん
02/11/10 16:29ID:???use strict;して変数はmyで宣言する
0781nobodyさん
02/11/10 17:38ID:???スクリプト全体は一つの大きなサブルーチンとして呼び出されます。
そのため、
0782nobodyさん
02/11/10 19:09ID:gP4L1IC3perlとDBIを使ってoracleデータベースに接続してselect等の結果をHTMLで表示
したいのですが行き詰まってしまいました。
ActivePerlのPPMを使って
ppm
install DBI
ppm
install DBD-oracle
と入力したのですが
install_driver(oracle) failed: Can't load 'C:/usr/local/site/lib/auto/DBD/Oracle
/Oracle.dll' for module DBD::Oracle: load_file:このアプリケーションの実行に必要
なライブラリ ファイルのうちの 1 つが見つかりません。 at C:/usr/local/lib/DynaLoa
der.pm line 206.
Compilation failed in require at (eval 1) line 3.
Perhaps a required shared library or dll isn't installed where expected
上記のようなエラーが出てしまいます。
何が問題なのでしょうか?よろしければご教授お願いします。
0783782
02/11/10 19:12ID:gP4L1IC3ppm
install......
の後oracleデータベースに接続できるようなプログラムを作って
そのプラグラムをコマンドラインから実行すると上記のエラーが出ます
0785nobodyさん
02/11/11 22:36ID:???Ambiguous call resolved as CORE::exit(), qualify as such or use & at hogehoge.cgi line 975.
っという警告を吐かれて、どうすれば修正できるのかわかりません( ´Д⊂
他の個所でexitとか使ってても警告吐かれないのになんでだろう…
あと、外部設定ファイル(require "setting.cgi")に、色々変数に放り込んで設定が書いてあるんですけど
myとかでローカル変数にしてしまうとmainから読み込めなくて困ってます
かといってmyつけないとガンガン警告吐かれるし( ´Д⊂
すみませんが、解決方を御教授いただきたく思います、お願いします
0786nobodyさん
02/11/11 23:21ID:v+DAnj2A内部形式に変換することができません。お助けを・・
use Encode;
$fname = "euc.txt";
open(FILE, "<$fname") or die;
$euc = <FILE>;
close FILE;
$str = decode('euc-jp', $euc);
print $euc."\n".$str;
0787_gunzip ◆eiH/XdoCNg
02/11/12 02:06ID:???前者: おんなじパッケージに自分で定義したサブルーチンexitがあるので、exit()と
書かれた場合どちらを呼び出すのか曖昧だけど、組み込みの方を呼ぶことにしたよ、という意味(だいたい)
自分で定義した方を呼び出したければ、前にアンパサンドを付けて&exit()のように呼び出せばいい。
そうでなければCORE::exit()とすれば警告は出ない。
詳しくはuse diagnostice;して調べて。
後者: >Perl5.6 ならばourを用いて宣言する。
それ以外の場合は use vars qw[$foo @bar] とする。
----------------
>>786 v5.8.0(built for i686-linux-thread-multi)では普通に動くよ。
変換できない、とはどのように出来ない?
open my $infile, "<:encoding(euc-jp)", $filename or die $!;
で勝手に変換してくれるし楽になったなぁ。
0788_gunzip ◆eiH/XdoCNg
02/11/12 05:44ID:???>>787では、Encodeモジュールが動かないのだと勝手に勘違いして「動くやん」と書いてしまった。
VC++6でコンパイルしたPerl5.8.0(built for MSWin32-x86-multi-thread)で試してみた。
それで思ったのだが、
use encoding "shiftjis";
とか、
use encoding "utf8", STDOUT => "shiftjis";
とするか、
binmode(STDOUT, ":encoding(shiftjis)");
が必要なのだなぁ。取りあえず報告までに
0789nobodyさん
02/11/12 11:29ID:???CGI可とかPerl可とか曖昧にしか書いてないところが多いのですが。
0791786
02/11/12 12:49ID:ucbSPxI8ヒントに色々やってたらできました。using encode("shiftjis")
で内部の使用形式を変えているのですね。ただ、shiftjisの
問題は解決されていないようでしたので、eucかutf8で処理して
コンソール出力時にshiftjisにするように書くことにしました(汗。
内部形式に変換するにはEncode::decode("euc-jp", $euc)と
書けばできました。ありがとうございました。
0792nobodyさん
02/11/12 15:43ID:kFsoQdfXよろしくおながいします。
掲示板などの書き込み欄で
平仮名だけを入力したい時ってどう書けばいいんでしょうか?
例えばメール欄にアルファベットか数字のみしか入力させたくない場合
if ($in{'email'}){
if ($in{'email'} !~ /[\w\.\-]+\@[\w\.\-]+\.[a-zA-Z]{2,3}/){
&error("不正な入力です");
}
}
こんな処理を、平仮名でやりたいんです。
リファレンスサイトで調べても未記入の際のエラーはあっても
「○○以外の入力は不正」とする処理で、平仮名を対象にしたものを
見つける事ができませんでした。
perlはまるっきり分からないので、とんちんかんな事言ってたらすみません。
(自分なりにやってはみたんですが、案の定internet server error...)
0793nobodyさん
02/11/12 15:57ID:???まずはひらがなをどうやって判定するかを考える。
文字コードの勉強からはじめよう。
0794nobodyさん
02/11/12 16:02ID:???正規表現が先では?
0795nobodyさん
02/11/12 16:34ID:???後半について。その外部設定ファイルの先頭でuse strict; せずに、
package Set;
などとして適当なパッケージにして、mainで参照するときに
$Set::var
などとパッケージ名をつければ読めます。
パッケージに隔離すれば、その中で宣言された変数はグローバルにはならず、
パッケージ変数になりますので安心して使用できます。
0796792
02/11/12 18:15ID:kFsoQdfXレスありがとうございます。
if ($in{'msg'}){
if ($in{'msg'} !~ /\x82[\x9F-\xF1]/){
&error(不正な入力です);}
else {
$msg = '';
$errmsg = "不正な入力です\n";
} }
このようにしてみたところ、ひらがなは入力できるのですが
カタカナや漢字をいれると、エラーメッセージ(不正な入力です)ではなく
Internet server errorになってしまいます。
else以下は、書き込み後の確認画面でメッセージが出せるのでもいいかと思い
見よう見真似でやってみたんですが &error の部分で失敗してるっぽいですね...
平仮名部分は
if ($in{'msg'}){
if ($in{'msg'} !~ /\x82[\x9F-\xF1]/)
を使うとして、これに加えてカタカナで入力するとエラーが出る風に
書くとするとどう書けばよいのでしょうか。
全角カタカナの文字コードは \x83[\x40-\x96] ですよね?
こっちの方がやりにくいのかな…
0797nobodyさん
02/11/12 18:35ID:???&error('不正な入力です');
if ($in{'msg'} !~ /\x82[\x9F-\xF1]/ or $in{'msg'} !~ /\x83[\x40-\x96]/)
これではダメなの?
0798792
02/11/12 19:18ID:kFsoQdfXそれでやってみたんですが
ファイルを呼び出した時点でinternet server errorになりました...
if ($in{'msg'}){
if ($in{'msg'} !~ /\x82[\x9F-\xF1]/){
&error(不正な入力です);}
}
だと、平仮名入力なら実行できます。
平仮名以外を入力すると500エラーになります。
平仮名 ならば そのまま実行
平仮名以外 ならば エラーメッセージを出しましょう
……という風にできればベストなんですが。
0800785
02/11/12 20:06ID:???レス有り難うございます、たしかにサブルーチンexitって作りました(藁
でもCOREってなんじゃらほいとかuse diagnostics;ってなんだー、とか
our?use vars qw[$foo @bar]?ってな感じで…
たまに解説サイトででくる$fooとかってなんなんだろう…とか…
貴方の教えを胸に色々調べてがんがってみます、ありがとうございました
>>795
御教授有り難うございます
パッケージ宣言とかして名前空間移しちゃう攻撃とかは思いついたんですが
既に1500行くらい書いちゃって直すの面倒だなぁ、とか思ってる横着な私です(藁
>>792
手持ちの学校の図書室に侵入してコソーリ購入リストに紛れ込ませておいた本に書いてあるんですけど
平仮名は[ぁ-ん]で引っかかるそうな…?
0801792
02/11/12 20:28ID:kFsoQdfXすみません、いじってる方のファイルには " 入れてました。
perl -cTw・・ぐぐってみたのですが分かりませんでした・・・
ローカルテストは出来ない環境なんです
>>800
[ぁ-ん]やってみたんですけど、だめですた。鯖の関係かも?
今気付いたんですが、同じスクリプトのメール不正入力の処理が
こうなってます。同じようにしたいんだけど...
if ($in{'mail'}) {
if ($in{'mail'} =~ /^[\w\.\-]+\@[\w\.\-]+$/) {
$mail = $in{'mail'};
} else {
$mail = '';
$errmsg1 = "■メールアドレスが正しく記入されていませんでした、未記入扱いにさせて頂きます。<BR>\n";
}
}
0802nobodyさん
02/11/12 21:27ID:9jFBTK95s/,a,/,b,/g;
とすると/,a,/は大丈夫なんですが/,b,/でエラーになります。
/\,b\,/としてもだめでした。
s/a/b/g;だとよけいなところまで変わっちゃいます。
どう書けばよいのでしょう?
0804nobodyさん
02/11/12 22:07ID:???ちなみにそのやり方だと、,a,a,a,が,b,a,b,にならないか?
0805785
02/11/12 22:09ID:???今一度御教授ください、おながいします
色々自分で調べてみて、Perl5.6で実行してる(はず…)ので、ourで宣言しても
Global symbol "$log_dir" requires explicit package name at 2ch.cgi line 1340.
とかガソガソ警告吐かれました( ´Д⊂
use vars qw[$log_dir];と、もう片方の御教授いただいたやり方だと
引っ張ってきた変数に関しては警告吐かれなくなりました… なんでだ…
でも20も30もあるのに全部引っ張ってくるなんてわかりにくすぎー…、と
ちなみにCORE::の方はわかんなかったのでとりあえず呪文みたいなもんだと思っておきます(藁
>>801
-cスイッチ スクリプトの構文チェックだけして終了する(スクリプトを実行しない
-Tスイッチ 汚染チェック(データセキュリティチェック)を有効にする
-wスイッチ 警告を出力する
本よりコピペ …本にCtrl+Fとかやりたくなったりしません?
0806795
02/11/12 22:21ID:???1500行でpackage分けされていないとは、物凄いコードをつかまされてしまいました
ね。ご愁傷様です。
さて...まずですね、myをつけると、別の変数から移し換えない限り、スコープの外
からは読めません。別のファイルはスコープの外なんで読めません。
従いまして、settingの変数はグローバル変数かパッケージ変数にするしかありませ
ん。よって、settingのuse strict; を外すか、>>787さんが書いているように明示的
なグローバル宣言をしなければなりません。mainでuse strict; していないなら、
シンボルのエクスポート/インポートという手もありますが、名前空間を汚染するの
で、グローバル変数にするのと何ら変わりません。
名前空間を汚染しないようにするには、おそらく私の書いた方法しかないはずです。
納期が迫っているなど、修羅場な場合は、settingをmainの先頭にべちょっと貼りつ
けるという手もあります(これならmyでも読めます)が、非推奨です。
0807795
02/11/12 22:26ID:???スコープの外では参照できません。
例えば、同じサブルーチンを何回も通る時に、前の値を記憶しておいて使いまわし
たい時とかに使います。
私も過去に誤解して苦しんだ経験があるのを忘れていましたよ。ヤレヤレ。
0808nobodyさん
02/11/12 22:34ID:???>&error の部分で失敗してるっぽいですね...
&error でコケてるの?
コケてるのが &error なのか正規表現なのかの切り分けが先では?
0809785
02/11/12 22:59ID:???つかまされたと言うかなんというか…
すみません本から得た付け焼き刃の知識なので効率とか可読性とかその他モロモロダメダメです( ´Д⊂
いまだにどういう記述をしたらのちのち楽できるかとか分かってないリアルに初心者なもので…
えと、スコープってまだよくわかんないんですけどスコープ≒個別の名前空間みたいな認識でいいのでしょうか(汗
あと、use strict;の方はmainの方でしてますです、そのあとにsetting.cgiの方を引っ張ってくる、とゆー流れです
えーと、それでourで宣言してもレキシカル(?)で局地的だよ、>>787さんの言ってたuse vars略で
引っ張ってくる、と言う手もあるけど名前空間が汚染される(意図しない変更が加えられる?)ので
よろしくない、パッケージにしちゃった方がよい、という意味だと思ってよいのでしょうか…
…がんがります
0810nobodyさん
02/11/13 00:57ID:???0811nobodyさん
02/11/13 09:43ID:4S21F8gNこれってDBMによる恩恵はあるんでしょうか?
とりあえず勉強目的で作ってみたのですが。。。
0812795
02/11/13 11:35ID:???まぁまぁ。慌てない慌てない。マターリと落ちついていきましょうや。
my変数のスコープは、宣言してあるところを囲んでいる一番内側のブロック、
サブルーチン、ファイル、eval(これは分からなくてもいい)です。
よって、setting.cgiというファイルの外は、「スコープの外」になりますので参照
不可能です。
グローバル変数のスコープはありません。どこからでも参照できて変更できる、
地獄への片道切符です。package Pak; と指定することによって、package宣言のス
コープ(これはmy変数と同じです)の範囲に書いてあるグローバル変数が、パッケージ
変数となります。だから、ファイルの先頭でpackage Pak; とやると、そのファイル
に書いてあるグローバル変数すべてが、Pakに属するパッケージ変数になります。
要するに、スコープとネームスペースは別ものです。
パッケージ変数はグローバル変数の一種ですが、レキシカル変数(my)はそれらとは別
ものです。
0813795
02/11/13 11:48ID:???それで、our宣言した変数のスコープはmyと同じですから、settingの外では参照不可能
です。our => グローバルではありません。
main で use strict; しているということですから、settingから変数を読む仕様に
なっていると、それはグローバル変数なので(myだと読めませんよ)、警告が出ます。
use vars qw(var ...)は、use strict; した時にグローバル変数を使うぞ、と宣言する
ものですから、これをやっておけば警告は出ません。しかしながら、これをやると
いうことは、setting を main の先頭に書いているのと同じことになります。つまり
setting で使ったシンボル(変数とかの名前)だけ、mainのネームスペースが汚染され
ることになります。ネームスペース汚染の恐ろしさは、exitの件でお分かりでしょう。
以上の理由からパッケージ分けをおすすめしているわけです。
というか、納期が迫っているんでなければ、settingをクラス化、そこで宣言されて
いる変数をクラスのメンバにしてアクセスメソッドを実装してそれでアクセスする
ようにし、ついでにmainでそれらのデータをいじくっている部分をクラスに放り込む
といったことをするといいんじゃないかと思います。
0815792
02/11/13 15:51ID:???結局、別の項目の処理で出るエラーページを流用する事にして
(不正な入力の項目があります、平仮名にしてくださいと一文足して)
こうなりました
if ($in{'msg'}){
if ($in{'msg'} !~ /\x82[\x9F-\xF1]/){
&error1();}
}
レス下さった方々ありがとうございました。
0816785
02/11/13 18:41ID:???ありがとうございます 本とかネットとかもそーゆーふーに簡潔に書いてもらいたいもんです(藁
>>812-813
毎度親切にありがとうございます( ´Д⊂ がんがります
スコープは>>810さんともあわせて分かったような気がします
今までもmyで宣言した変数が使える範囲はなんとなく分かってたんですけど、それがスコープだったのですね
んで、パッケージ内でグローバル変数っぽく振る舞ってるヤシがパッケージ変数、と…
スコープと名前空間は別物だということも多分わかりました
ourで宣言した変数の扱いのほうも自分なりに調べてみますた
tp://books-support.softbank.co.jp/pn/special04-1.html
↑のより、"宣言した時の名前空間に所属する変数だけど同じスコープ内だったら別の名前空間のトコでも明示しなくても扱えるよ"
て感じなのですかね?
また、名前空間の汚染の方のお教えも、大体分かった気がします
(´-`).。oO( いまだに名前空間の汚染、というののハッキリした意味が分かっていないのですけれども(藁 )
とりあえずスクリプト全体を見直しながら、設定ファイルの方をパッケージにして書き直してみようと思います
最後の4行は全然分かりませんでしたが( ´Д⊂ オブジェクト指向…? 勉強不足です…
ちなみに工房の道楽(不真面目にやってるわけでもないですけど)ですので納期とかはありません(藁
(´-`).。oO( 大人は大変なんだろうなぁ… 現在BlackBookのPerl&CGI言語リファレンス読んでます 今までに読んだ3冊とはレベルが…(トオイメ )
0817nobodyさん
02/11/14 22:14ID:???MFCガリガリ弄ってるリア厨も居る訳だから
分かった気になったもん勝ち
0818785
02/11/14 23:15ID:???工房だもーん、会社勤めなんかしてないもーん、と
つーか分かった"気になった"もん勝ちですか(藁
とりあえず本読み終わって>>813で御教授いただいたヤツの最後4行もほんのりとわかりますた
でもそういう管理の仕方にする利点がいまだにわかりません(藁
あとクラスとかの宣言がどうとか、とかも(藁
perlobjの日本語化されたヤツとか探して彷徨ったり、と( ´ー`)y-~~
(´-`).。oO( 正直もうごちゃごちゃしちゃって大変ですたい )
0819nobodyさん
02/11/14 23:45ID:WsA3gc/pフリーの掲示板をカスタマイズするコトすらままならない者です。
バカなわたくしめに御教授お願いします。
※HTMLタグは分かります。
わたしがダウンロードした掲示板はタグ禁止タイプです。
しかし、メッセージ・フォーム($body)に「http://」で始まる文字列には<a href="">でリンクを
はりたいのですが、どうしたらよいのでしょうか。
すみませんがよろしくお願いします。
0823nobodyさん
02/11/15 09:01ID:Vx/BDeum今CGIの猛勉強中なのですが、分らない事があったので教えてください。
「-=」 マイナスイコール
この演算子は、どういう意味のものなのでしょうか?
そもそも演算子なのでしょうか;;
検索を書けても-=ではヒットせず、色々調べてみても情報が見当たりませんでした。
知ってる方、是非教えてください〜〜。
0824nobodyさん
02/11/15 09:31ID:???$hoge -= 10; $hoge = $hoge - 10;
$hoge += 10; $hoge = $hoge + 10;
$hoge *= 10; $hoge = $hoge * 10;
$hoge /= 10; $hoge = $hoge / 10;
ほとんどのプログラム言語で使える
http://216.127.90.232/scripts.html
0827nobodyさん
02/11/15 10:16ID:???s/(s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/<A HREF="$1">$1<\/A>/g;
が略解。
by perlメモ
0828nobodyさん
02/11/15 11:03ID:???0829nobodyさん
02/11/15 13:41ID:???0830nobodyさん
02/11/15 15:26ID:???あるよ。CGI.pm
0832nobodyさん
02/11/15 16:13ID:???0834nobodyさん
02/11/15 17:14ID:???829と830は僕じゃないデスヨ。そして書くのにルールがあるのをいま知りますた。
初心者コーナー、よしここだ! ズザー!! て感じで書いてしまいますた。反省。
1、Perlのおべんきょに一つ掲示板でも、と(`・ω・´)
2、とりあえずフォームから何か入力して表示させて見よう
3、
まだまだ右も左もわからないので、他所様のソースをじろじろ見ながらまずはデコード、と思ったわけですが。
人によって色々と違ったり何かしてみちゃったりしてよく分からなくて。
お約束事?みたいなのはあるようなのでつが…そこでーデコードと言えば、まあ普通こう書くよ。
みたいなのはあるのかなぁ、とか思った次第であります!(`・ω・´)
CGI.pmは調べて舐めたり触ったり眺めたりしますたが、よく分かりませんでした(´・ω・`)
(´・ω・`)ショボーン
0835nobodyさん
02/11/15 17:20ID:???cgi-lib.pl
0836nobodyさん
02/11/15 18:01ID:???0837nobodyさん
02/11/15 18:55ID:???0838(* ・ω・)萌えー
02/11/15 19:08ID:???0839rubyist@カラアゲうまうま
02/11/15 20:30ID:???まあ、君たちのような低学歴どもは円周率3でいいんじゃない?
(大爆笑)
0840rubyist@カラアゲうまうま
02/11/15 20:37ID:???0841nobodyさん
02/11/15 21:04ID:???if(time-60 >= (stat('比較するファイル.txt'))[9]){
とゆーやり方はやっぱ無理がありますか?
0842nobodyさん
02/11/15 21:12ID:Mv79oNNwそれで出来たんならいいんじゃねーの?
0843nobodyさん
02/11/15 21:43ID:???<input type=text name=$hoge>
というテキストボックスに数字を入力してもらい、
その数の回数、$hogeに対する処理を行いたいのです。
たとえば、$hogeをブラウザに出力するとして、
$cou=$form{"$hoge"};
for($i=0; $i<$cou+1; $i++)
{print "$hoge";}
で良いだろうと思いサンプルを作ってテストしてみましたが、
エラーこそ出ないものの{print "$hoge";}の処理を行ってくれません。
何か悪いところがあったらご指摘いただけますでしょうか。
よろしくお願いします。
0844nobodyさん
02/11/15 21:48ID:???name属性に文字$を用いる必然性と、
use CGI;
my $query = CGI->new();
$query->param("hoge");
とやらない理由を補足せよ。
0845843
02/11/15 22:40ID:???すみません、説明が足りませんでした。
<input type=text name=$hoge>
の$hogeですが、事前に外部ファイルから読み込んだデータを
任意の検索条件によって抽出した文字列が入るようになっています。
商品番号のようなものだと思っていただければ良いかと思います。
後者の方ですが、純粋に当方の勉強不足により
矢印演算子の用法に自信が無いというのでは駄目でしょうか。
844さんの挙げた例も、リファレンス片手に解読を試みましたが
今ひとつピンと来ておりません。
いかにも初心者の書いたループ文でお恥ずかしい限りですが
よろしくお願いします。
0846nobodyさん
02/11/15 22:57ID:???0847nobodyさん
02/11/15 23:45ID:R8gc4u8S初心者にも入らないおヴァカなわたしに御教授下さいまして。
勇気出して投稿してヨカッタ。。。
0848(* ・ω・)萌えー
02/11/16 00:46ID:???0849nobodyさん
02/11/16 00:53ID:???フォームの name をURLデコードしてないなら、$hoge の $ は %24 でおくられてくるからネ。
もしや name=$hoge の $hoge がそのまま Perl のスカラー変数として扱われると勘違いしてたりして・・?(んなことないか ・ω・;)
0850nobodyさん
02/11/16 12:12ID:???0851nobodyさん
02/11/16 12:59ID:???なんで英語のドキュメントしか見つからないんだヽ(*`Д´)ノ
だれか使えるメソッドとか色々書いてあるページ知ってましたら教えてください…
0852nobodyさん
02/11/16 13:02ID:???0854nobodyさん
02/11/16 19:31ID:y1C/hDJGCGIファイルのに渡し、ユーザ名ごとに表示されるページ(構成は同じ)を
変えたいのですが、CGIスクリプトで開くデータファイルをユーザごとに用意
しなければならないと考えデータファイルのパスのところに各ユーザ名に対応
した変数を用意したのですが、CGIスクリプトが上手く実行できません。
どういった理由が考えられますか?
0856nobodyさん
02/11/16 19:38ID:???君の脳に問題がある。<理由
もしくは君の言語能力に問題が。
0857854
02/11/16 19:41ID:y1C/hDJGかえたらオッケーだったんですけど、変数とかパスの中に使うとダメなんすか?
チョー初心者ですいませんがお願いします。
0859nobodyさん
02/11/16 20:18ID:meodONVA「書き込む」をクリックすると
CGIWrap Error: Execution of this script not permitted
Execution of (diaryh/diaryh.cgi) is not permitted for the following reason:
Script is not executable. Issue 'chmod 755 filename'
というエラー表示がでてしまいます。
エースにはサポート掲示板がないので、大変困っています。
お手数ですが、どうぞよろしくお願いします。
0861nobodyさん
02/11/16 20:44ID:IpoPd8nuやっぱりお金をはらってレンタルサーバーかりないと練習にならない
のでしょうか?
0862nobodyさん
02/11/16 20:56ID:???0863nobodyさん
02/11/16 21:01ID:???勉強するならまずローカル環境を用意しる!
ActivePerlとApacheをインスコすればオフラインでCGIテストできて(゚д゚)ウマー
レンタルサーバーで練習するのは他のユーザーの迷惑になるので止めよう。
0864nobodyさん
02/11/16 21:53ID:???それともずっとエラーメッセージをこのスレにコピペするの?
0865デフォルトの名無しさん
02/11/16 22:30ID:???0866nobodyさん
02/11/16 22:36ID:li3X+/+9たとえば $file の中身が userid.dat という文字列で
ここから userid を得たいので
$file =~ s/\.dat$//;
とかやれば、userid を得られると思うが、元の文字列をファイル名としても使いたいので
いつも
$file =~ s/\.dat$//;
$id = $file;
$file .= ".dat";
とやったり
$file =~ /(.*)(\.dat$)/;
$id = $1;
のようにしていますが、これを1行で書きたい。
0868nobodyさん
02/11/16 22:52ID:li3X+/+9うぉぉォォ、、鬱くしい。
さんくす。
0869nobodyさん
02/11/17 00:04ID:rKD6R3WV教えて下さい。あと、素材があったら貼っといて下さい。
0872rubyist@カラアゲうまうま
02/11/17 01:11ID:???それがPerlスレ
0875nobodyさん
02/11/17 01:41ID:???あほだね〜♪ あほだねえ〜♪ Perl厨がPHP本買ってる〜♪。
0876843
02/11/17 01:46ID:???相談に乗って頂き、ありがとうございます。
確認ということですが、$hogeを生成する方のスクリプトは以前動作確認済みだった為、
以下のような今回追加したい部分だけを抽出した
テスト用のスクリプトを作成し、生成される$hogeには
適当な数値をあらかじめ代入してテストしていたのです。
&decode;
$hoge="001";
$cou=$form{"$hoge"};
print "Content-type: text/html\n\n";
print "<html><head>";
print "<META HTTP-EQUIV=Content-type CONTENT=text/html; charset=euc-jp>";
print "<title>test</title>";
print "<body>";
for($i=0; $i<$cou+1; $i++){print "$hoge";}
print "<form action=sample.cgi method=post>";
print "<input type=text size=4 name=$hoge><input type=submit value=送信>";
print "</form></body></html>";
sub decode{省略}
これを実行した結果、name=001の属性を持つ
テキストボックスを表示するところまでは上手く行きましたが、
送信ボタンを押した後に入力した数の分だけ表示される筈の『001』が表示されないのです。
そもそも、値を最初から代入してテストするという思考自体が間違っていたのでしょうか。
(849さんのご指摘の『勘違い』が正しいのかも・・・)
至らない初心者で本当に申し訳ありませんが、
何とぞもう少しご教授いただけませんか。よろしくお願いします。
0877nobodyさん
02/11/17 02:09ID:???0879nobodyさん
02/11/17 04:24ID:???まさか君Perlを webで使うことしか考えてないのか?
ちょっとしたSystem管理みたいなことやらせるのに
PHPとかは向いてないでしょ (w
0880nobodyさん
02/11/17 04:34ID:???Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Perl
0881nobodyさん
02/11/17 05:35ID:???0882nobodyさん
02/11/17 08:12ID:???PerlEditorとかなんか挙動不審なんですけど…
(・∀・)イイ!エディタに乗り換えたいよ…
0883nobodyさん
02/11/17 12:27ID:???追いつめられた羊のような事を書かないで欲しいです。
PerlはWEB使うことが主流です。
そんな使い方をする人なんて極々わずかです。いや今は他の言語を使います。
あなたはWEBはPHPを使ってるんですか?Perlでしょ?
だったらもっとPerlを応援してください。
Perl最高! Perl最高! Perl最高!
0886nobodyさん
02/11/17 14:00ID:???0887nobodyさん
02/11/17 16:44ID:eZnGzPxh0888nobodyさん
02/11/17 16:48ID:???自分周辺の狭い世界だけで語るなボケ
0889nobodyさん
02/11/17 16:51ID:???0891887
02/11/17 16:55ID:eZnGzPxhwhile (<DATA>){
if (/set|SET/){
print "$line : $_<br>";}
$line++;
}
0892nobodyさん
02/11/17 17:12ID:???while (<DATA>){
if (/set|SET/){
print "$line : $_<br>";}
$line++;
print;
}
0893887
02/11/17 17:12ID:eZnGzPxhさっきのHTMLの中に埋め込むタグは<SET1></SET1>と対にさせて、その中身を取り出すってかんじです
0894nobodyさん
02/11/17 17:26ID:???>中身を取り出す
いったいどっちがやりたいの?
0895887
02/11/17 17:36ID:eZnGzPxhスマソ
まず、HTML内の<SET1>この文字を取り込む</SET1>から対象文字「この文字を取り込む」をを読み込む。
その後、「この文字を読み込む」を消し、別の文字列を代入
こんなかんじです。どうぞおながいします
0896nobodyさん
02/11/17 21:00ID:JxVm/eIS文字列の最後に改行コードが入ってる為か抜けられません。
chopで改行コードを取り除かずにEOF(改行)のまま認識させるためにはどうしたら良いでしょうか?
0897nobodyさん
02/11/17 22:33ID:???頭に書いてあるではないか。
print Jcode->new($str)->h2z->tr($from, $to)->utf8;
これが理解できないのなら、おそらく一般的なモジュールの使い方が理解できていない
ので、少し戻ることをお勧めする。
また、英語のマニュアルが読めないと、プログラミングにいちじるしい支障をきたすこ
とが多いので、あなたが職業プログラマなら即刻退職を、趣味のプログラマなら英語の
マニュアルに慣れることを勧告する。
>>895
HTML::Templateを使ってみることをお勧めする。
>>896
@hoge = ();
$i = 0;
while ($hoge[$i] = <STDIN>) {
print "$hoge[$i]", "\n";
$i++;
}
と書いてみたらC-dで抜けられたが、どういうコードを想定しているのか教えて欲しい。
それから、改行を削るのは通常chompで行なう。chopは削った残りを返り値として欲しい
場合などに使う。
0899test ◆wSaCDPDEl2
02/11/17 23:08ID:???挫折。
わかる方宜しくおねがいします
0900nobodyさん
02/11/17 23:11ID:???HTMLでは、独自に定義したタグを使うことはできない。
そのため、「完成品」からは、独自タグが消えていなければならない。
HTML::Templateでは、独自タグを残せないので>>895の用件を満たせないと指摘したい
のだと思われるが、もしそうなら用件がおかしい。
しかしながら、>>887を見ると独自タグ自体に意味はないものと考えられるため、上の
ような回答を行った。
0901nobodyさん
02/11/17 23:16ID:???どんな風に挑戦したかソース出してみ。
俺は意地悪だからアドバイスをする気はあっても、答えをそのまま載せる気はなくてね。
0902nobodyさん
02/11/17 23:16ID:???とりあえずこちらのスレへどうぞ
【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/
0905896
02/11/18 00:12ID:JyAtIJIy現在、Perlでキーボードから一行ずつ文字列を入力し、
その文字列を保存するスクリプトを組んでいるのですが、
文字列入力をするループから抜ける終了判定として文字列"EOF"が入力された時にしたいんです。
しかし、<STDIN>でキーボードから"EOF"と入力した場合、最後に改行コードが入ってしまって
while ($hoge[$i] ne "EOF")
だとEOF(改行)とEOFが一致しないんです。
改行コードを取り除けば可能ですが、それだと保存した際に一行になってしまいますよね?(多分
何か良い方法はありますでしょうか??
0907896
02/11/18 00:34ID:JyAtIJIyそのやりかたがわからないんです・・・
0908nobodyさん
02/11/18 00:37ID:Lol6CcQnPHP研究所?
0911rubyist@カラアゲうまうま
02/11/18 00:47ID:???0912nobodyさん
02/11/18 00:57ID:???print OUT substr(scalar(<STDIN>), 0, -1);
close(OUT);
0913896
02/11/18 01:12ID:JyAtIJIyぐぁ!?出来ました。ループ抜けられました。感動。
これは^以降から$の間の文字が一致すれば終了って意味かな。正規表現?
力不足でどのような処理か理解出来てませんけど、ありがとうございました。
>>910
キーボードから文字列EOFが入力されたときに、
EOFの後ろについてしまう改行コードを取り除くことなくEOFと比較したかったんです。
>>911
改行コードを取り除い、更に後からまた付け足すんですか?
まぁその方法もまだわからないんですが・・・。
0914nobodyさん
02/11/18 14:52ID:???でも、例えば格納データとかが多いとどうしても
配列を多く使わないといけない場合とかありますよね。
配列が多すぎて動かないとかいう事あるんですか?
0916nobodyさん
02/11/18 14:57ID:???「ただし、試すならローカルで」も付け加えといてね。
0917てすとさん
02/11/18 15:22ID:I0IdwfDh肝心のCGIで$FORM{'child'}を取り出そうとしても中身が空っぽになってしまいます。
どうしてでしょうか?
サーバーエラーが出るわけでもなく、フォームの中身が全て空なこと以外は正常動作します。
また、method="post"を削るとちゃんとデータが送信されていることがURLに出てきます。
フォームに書き込んだ情報をCGIで表示するだけなのに、てこずってしまっています…。
0918nobodyさん
02/11/18 15:37ID:???0919てすとさん
02/11/18 15:57ID:I0IdwfDhデコード忘れてた、鬱氏。
4時間くらいそれで詰まってた、マジで死にたい…
0921nobodyさん
02/11/18 19:09ID:19d2puZrログ保存部分までは出来たのですが
週別に新規ファイルを作成して保存うまくいきません
具体的には 月〜日曜 を一週間として
翌週には新しいログファイルを作成するというのを考えてます
しかし
・新しい週になったかどうか
という判定がうまくいきません
何か良い方法は無いでしょうか?
0922nobodyさん
02/11/18 19:25ID:???0923nobodyさん
02/11/18 19:41ID:19d2puZr翌週の月曜日まで新規ファイルにならないのです・・・
0924nobodyさん
02/11/18 19:45ID:ODy6L3pp0925nobodyさん
02/11/18 20:03ID:???毎起動ごとにログの保存チェックをしろ。
0926nobodyさん
02/11/18 20:54ID:19d2puZrそのアルゴリズムがうまくいかなくて悩んでます
0928rubyist@カラアゲうまうま
02/11/18 21:24ID:???0929nobodyさん
02/11/18 22:48ID:???http://pc.2ch.net/test/read.cgi/unix/1000303370/697
を書き込んだものです。
急いで、数を数える必要があるので、こっちでも聞きます。
awkで書こうと思ったのですが、perlでもできそうなので、
質問しますた。
スクリプト書いてくだされば、助かります。我がまますみません。
0930nobodyさん
02/11/18 22:55ID:???if文とかで、返り値を否定したい時はどうすればよいのでしょうか?
if(!(-d "存在するディレクトリ")){〜〜〜} とか
if(-d !"存在するディレクトリ"){〜〜〜} とかやってみたのですがダメでした
今現在、
unless(略){
if(略){〜〜}
}
ってカンジで書いてるのですが、なんとか一回ですませたいので…
if(!略 and 略){ ←みたくしたいのです…
どうか御教授ください
0931nobodyさん
02/11/18 23:04ID:???if (!(-d "存在するディレクトリ") and 略) {
!(-d "存在するディレクトリ") もしくは not -d "存在するディレクトリ" で「存在しない」になるはずだけど。
0932nobodyさん
02/11/18 23:09ID:???0933デフォルトの名無しさん
02/11/18 23:10ID:???>if(!(-d "存在するディレクトリ")){〜〜〜}
>if(-d !"存在するディレクトリ"){〜〜〜}
両方OKよ。
>unless(略){
> if(略){〜〜}
>}
略の部分が同じなら常に真。
>if(!略 and 略){
これもそう。
0934デフォルトの名無しさん
02/11/18 23:11ID:???0936843
02/11/18 23:31ID:???ありがとうございます。
まだこちらでは依然として動いてくれないのですが、
考え方自体は間違っていないのですね。
$i=1のところを$i=0にしてしまったようなケアレスミスが
こちらに残っているのだと思います。
もう少し自分で頑張ってみて、どうしてもできないようでしたら
また相談させていただきます。本当にありがとうございました。
0937935
02/11/18 23:37ID:???さらに「自然観察会」ってのも数えたいので、スクリプトの登場まってます!!
0939nobodyさん
02/11/18 23:41ID:???0941929
02/11/18 23:59ID:???スクリプトの登場まってます!!
0942930
02/11/19 00:02ID:???あれれー(;;´Д`) とりあえずnotが見た目わかりやすいし、それでできたのでそれで行きます
ありがとうございますた
>>932
自分で最初やってみた時はだめだったんですよぅ
>>933
もっかい実験してみたところif(!(〜略の方はおっけだったみたいです
-d !"存在する(略"はやっぱりだめぽでした
if(!"もうだめぽ" eq ""){print "ほんとにだめじゃん";}
とかやってみると"ほんとにだめじゃん"と出力されたり…
なんで空文字列?
ちなみに略部分は同じではないです、ありがとうございました
>>939
現れないに一票
0943929
02/11/19 00:04ID:???hyogo,ibaraki,ishikawa,iwate,kagawa,kagoshima,kanagawa,kouchi,kumamoto,kyoto,
mie,miyagi,miyazaki,nagano,nagasaki,nara,niigata,okayama,okinawa,osaka,saga,saitama,
shiga,shimane,shizuoka,tochigi,tokushima,tokyo,tottori,toyama,wakayama,yamagata,
yamaguchi,yamanashi
全国都道府県を落とす時のwget式で利用してください。
0944929
02/11/19 00:07ID:???0945nobodyさん
02/11/19 00:12ID:???0946nobodyさん
02/11/19 00:24ID:???CSVデータに , がふくまれてなさそうなので簡易に以下のようなものでできるんじゃ?
$key= 'ビオトープ';
open(IN, "hokkaido.csv");
while (<IN>){
$n= $1=~ tr/,// if !$n && /^(.*)[^,]*\Q$key\E/o;
print if /^(?:[^,]*,){$n}●/;
}
close(IN);
0947nobodyさん
02/11/19 00:33ID:???perl -i.bak -pe 's/(\n|<br>)//sgi'でもやっておいた方がよさげ。
少なくとも、北海道のを見る限り。
それからは、高知以外のCSVくっつけて、
perl -F, -nae '$a++if$F[4]eq q|●|;END{print$a}'
てな感じでどうかな。
4は自然観察会、9がビオトープ。
その後、高知の数字を数えて足す。
泥臭いけどね。
0948947
02/11/19 00:34ID:???↑これをやったあとでCSVにするってこと
0949947
02/11/19 01:08ID:???var fs = new ActiveXObject("Scripting.FileSystemObject");
var xl = new ActiveXObject("Excel.Application");
xl.DisplayAlerts = false;
for (var i = 0; i < array.length; ++i) {
var filename = fs.GetAbsolutePathName(array[i]+".html");
var savefile = fs.GetAbsolutePathName(array[i]+".csv");
var wbook = xl.Workbooks.Open(filename);
wbook.SaveAs(savefile, 6);
wbook.Close();
}
xl.Quit();
こうやってもCSV変換はできるな。(Excel2000)
つーか自分が勉強になった。
0950nobodyさん
02/11/19 01:30ID:???>if(-d !"存在するディレクトリ"){〜〜〜}
これがOK? マジで?
>>942
>if(!"もうだめぽ" eq ""){print "ほんとにだめじゃん";}
>とかやってみると"ほんとにだめじゃん"と出力されたり…
!"もうだめぽ" … 偽
"" … 空文字列は偽
なので全然不思議じゃない。
0951930
02/11/19 01:36ID:???えと、なんか分かるような分からないようななんですけど、
eqとかって真偽を比較するのですか? 文字列を比較した結果、値を返すものだと思ってたのですが…
0952nobodyさん
02/11/19 02:21ID:???0953nobodyさん
02/11/19 04:52ID:???unless("もうだめぽ" eq ""){print "ほんとにだめじゃん";}
0955nobodyさん
02/11/19 11:39ID:???0957てすと
02/11/19 18:00ID:a4uQLCBL外部Webサーバーのデータを読込みたいのですが、
$data = "http://......txt"
ではもちろんダメですよね…
どうすれば取得する事がでるんでしょうか?
もしわかる方がおりましたらお願いしますm(_ _;)m
0960nobodyさん
02/11/19 20:45ID:???相互リンク・・・・
0962nobodyさん
02/11/19 23:17ID:???0963nobodyさん
02/11/19 23:20ID:7H8zCiDSショッピングカートで注文確認メールを出しているのですが、
違う注文確認メールが届きました。
たとえば注文番号100番の人に100番の確認メールが届き(正常)
数時間後その人に98番の確認メールも届いた(異常)ってことなんです。
注文の終了時に行われるスクリプトの概要は
ユーザーがフォームに入力したメールアドレスを取得(cgi-lib.pl)
自分宛に注文メール送信
ユーザー宛に注文確認メール送信
ログに注文データ保存
送信しましたメッセージ表示
exit;
という具合なのですが、このプロセスで前の注文データが流れるって事は
あり得るのでしょうか?
ちなみにメール送信はそのままsendmailに渡しています。
よろしくお願いいたします。
0965963
02/11/20 00:56ID:???注文通りのデータのならびで前後したりはしてません。
1年以上同じ方法で今回初めてなりました。
0966nobodyさん
02/11/20 11:54ID:???分からないという状況でないと面白くも何ともない
0967nobodyさん
02/11/20 12:22ID:???0968nobodyさん
02/11/20 15:41ID:???open OUT, "hoge.txt";
print OUT "$hogehoge";
print "$hogehoge";
close OUT;
という何の変哲もない文が、設置場所によっては「画面に出力できるのに
ファイルに出力できない」という事態に悩まされています。このような状況が
発生するのは、この文が実行位置の後ろの方にあるときです。全く同じ物を
実行位置の先頭の方に置くと画面にもファイルにも出力できます。
この問題の対処法を教えて下さい。
0969nobodyさん
02/11/20 15:45ID:???読み込み専用で開いてよくファイルに出力できるね。
Content-type の位置じゃないの?
後ろの方とか言われても第三者にはさっぱりですが。
0970nobodyさん
02/11/20 16:00ID:???失敗、つまらんミスしてた…
open OUT,">>hoge.txt";
と読み替えて下さい。
で、「後ろの方」ってのは「1つのファイルを読み込んで、あれこれ操作をして、
最後に書き出す」という処理の後ろ、つまり最後の「書き出す」部分です。
これを「あれこれ操作をする」前に置くときちんと動作するのです。
あと、これはローカル環境で起きている問題なので、Content-typeは
たぶん関係ないと思います。
0971nobodyさん
02/11/20 16:08ID:???seek FP, 0, 0;
で先頭に戻さないと。
0973nobodyさん
02/11/20 16:24ID:???ファイルポインタを先頭に戻すと追記の意味がなくなってしまうんじゃないでしょうか…
と思いつつ試してみましたが、無理でした。
>972
それじゃあ、ちょっと長くなりますが。yomikomi.txtを処理して結果をhoge.txtに書き出します。
open FILE, "yomikomi.txt";
@line = <FILE>;
close FILE;
#1
foreach(@line){
処理あれこれ
}
#2
#1の場所に
open OUT, ">>hoge.txt";
print OUT "$hogehoge";
print "$hogehoge";
close OUT;
を入れると正常に動作しますが、#2に入れると動作しません(画面には出力される)。
これでご理解頂けますか?
0974nobodyさん
02/11/20 16:32ID:???0975nobodyさん
02/11/20 16:38ID:???「ちゃんと意味のある変数」として読み変えていただければ。
わかりにくければ$line[0]とでも。実際に$hogehogeを$line[0]に
変えても症状は変わりませんし。
0976nobodyさん
02/11/20 16:45ID:???「画面には出力される」てのは、foreachの中でprintかなんか
入れちゃってる。
に1票
0977nobodyさん
02/11/20 16:52ID:???0978nobodyさん
02/11/20 16:57ID:???関係ないけど、
@line = <FILE>;
foreach(@line){ 〜 }
は
while (<FILE>) { 〜 }
の方がよさげ。
0979nobodyさん
02/11/20 17:01ID:???画面への出力に使うprintは問題の文中にしかありません。心配になって、
問題の文の前後にprint "---\n";をつけて確かめたから確実です。
>977
(前略)
close OUT;
print $hogehoge;
ということでしょうか。正常に$hogehogeの内容が出力されますし、
closeの前にあったprint "$hogehoge";と同じ結果になります。
0980nobodyさん
02/11/20 17:03ID:???自分でも調べているのですが、なかなか…
foreachはwhileに変えておきます。有り難うございました。
0981nobodyさん
02/11/20 17:06ID:???foreachの中で$hogehogeに手を加えてるのかどうか。
人に物を聞くならこのくらい書け。
0982nobodyさん
02/11/20 17:35ID:???これは失礼。しかしながら、最初に読み込んだきり何も手を付けていない
$line[0]を$hogehogeと置き換えても同じ現象が発生しているため、定義云々は
関係ないと思います。
0983nobodyさん
02/11/20 17:43ID:???$line[0]って何だかしってんのか。
yomikomi.txtの1行目だぞ。おまえはそれを処理して
hoge.txtに書き込もうとしてるって書いてるよな。
なぜ、「読み込んだきり何も手を付けていない」なんて
いえるんだよ。
0985nobodyさん
02/11/20 17:49ID:???特定の文字列が出るまでは何もしないで次の行に移るようになっています。
そして1行目には絶対その文字列が出てきません。従って、$line[0]には
手を加えることはありません。
0986nobodyさん
02/11/20 17:50ID:???0987nobodyさん
02/11/20 18:29ID:???open OUT, ">> hoge.txt" or die $!;
これでどうなる?
0988nobodyさん
02/11/20 21:38ID:???ソースがスパゲッティになってたので、いくつかのサブルーチンを
別ファイルに移し、requireで呼べるようにしたんですが…
そしたら何故か解決しました。何で?(´Д`;
>986
700行あるので…守秘義務ってのもありますし(うるさいんですよ…)。
>987
試してみたところ、>973の#1では問題なくopenしていて、ファイルが
生成されてちゃんと書き込みも出来ているのですが、#2では
「No such file or directory …」と言われました(でも#1でファイルは
出来てます)。
0989nobodyさん
02/11/20 21:43ID:???×ソースがスパゲッティになってたので、いくつかの…
○ソースがスパゲッティになってたので、多少なりとも見やすくするためにいくつかの…
で、「No such file or directory…」と言われたのは
サブルーチンを別ファイルに移す前の話です。
原因はわかりませんでしたが、とりあえず解決出来ました。
ご協力ありがとうございました。
0990nobodyさん
02/11/20 21:46ID:???946を和訳してください。
せっかく書いていただいたのに、
実行してもなーんにも起こらず、
修正しようとも意味が判らず
さっぱりです。
とてーも困っています。
0991nobodyさん
02/11/20 21:50ID:2IcSyXEFopen IN,"datafile.dat";
while(<IN>){ 〜〜中略〜〜}
close IN;
これで読み込めますよね。
これと同じ要領で、ファイルではなくWEBページを読み込みたいのですが可能でしょうか?
例えば、yahooのトップページのソースを読み込んでdataファイルに出力する・・
といった類いのことがしたいのです。
ヒントだけでも構いませんのでよろしくお願いします。
0992nobodyさん
02/11/20 21:55ID:???とすると表示されますが、
perl -F, -ane 'print @F[4];' kyoto.html.csv
……
perl -F, -ane 'print @F[10];' kyoto.html.csv
は表示されません。perlってコマンドラインの●を認識するのでしょうか?
0993nobodyさん
02/11/20 21:57ID:???0994nobodyさん
02/11/20 21:57ID:???0995nobodyさん
02/11/20 21:58ID:???0996nobodyさん
02/11/20 21:59ID:???0997nobodyさん
02/11/20 21:58ID:???0998nobodyさん
02/11/20 22:00ID:???0999nobodyさん
02/11/20 21:59ID:???1000nobodyさん
02/11/20 22:00ID:2IcSyXEF10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。