【Perl】初心者コーナー Part13

このエントリーをはてなブックマークに追加
1nobodyさん
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。

1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

CGIの質問は【CGIだけど、なんか質問ある? part 6】
http://pc.2ch.net/test/read.cgi/php/1019561283/
参考書籍の話題は【【Perl,CGI】参考書籍 第2版】
http://pc.2ch.net/test/read.cgi/php/988809842/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
スクリプトの改造依頼は 【スクリプト改造工房 Part4】
http://pc.2ch.net/test/read.cgi/php/1012839651/

過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
2nobodyさん:02/05/30 13:06 ID:???
3nobodyさん:02/05/30 13:07 ID:???
[総合]
 ・Perl Com: http://www.perl.com/pub/
 ・CPAN.com: http://search.cpan.org/
 ・ActivePerl: http://www.activestate.com/
 ・CGI-ML:http://forest.ne.jp/cgi-ml/

[お薦め]
 ・Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm ★読んどけ
 ・Perl Recipes: http://www.effectiveperl.com/recipes/
 ・Randal's WebTechniques columns: http://www.stonehenge.com/merlyn/WebTechniques/
 ・Perlの部屋: http://www.cc.rim.or.jp/~midorin/mad-p/perl/index.html
 ・Perl初心者の部屋:http://www.harukaze.net/~mishima/perl/
 ・Perlリファレンス:http://www.big.or.jp/~mio/ga/pl/plref/pl_ref.htm
 ・Perlのページ:http://homepage1.nifty.com/nomenclator/perl/
4nobodyさん:02/05/30 13:08 ID:???
[Document&Tutorial]
 ・Perl News: http://www.news.perl.org/
 ・Perl Monks: http://www.perlmonks.org/
 ・use Perl; : http://use.perl.org/
 ・Learn Perl - Perl Education: http://www.devdaily.com/perl/edu/index.shtml
 ・Perldoc.com: http://www.perldoc.com/
 ・Using Perl5 in Web: http://docs.rinet.ru/Using_Perl5_in_Web/
 ・Rex Swain's Home Page: http://www.rexswain.com/
 ・Robert's Perl Tutorial: http://www.netcat.co.uk/rob/perl/win32perltut.html
 ・Perl Tuts: http://savage.net.au/Perl-tutorials.html
 ・Beginning Perl Tutorials: http://www.pageresource.com/cgirec/index2.htm
 ・jcode.pl の私的な解説書: http://www.mikeneko.ne.jp/~lab/kcode/jcode.html
 ・Logical Choice Software, Home Page: http://www.logsoft.com/perltips/
 ・Perlfect Solutions: http://perlfect.com/
 ・The Perl Archive : http://www.perlarchive.com/
 ・Perl6 & Parrot VM についての情報: http://dev.perl.org/perl6/
 ・use Object; : http://perl.infoware.ne.jp/

[Module]
 ・Perl Module Reference: http://www.bekknet.ad.jp/~bero/docj/module_/
 ・PPMPackages: http://www.activestate.com/PPMPackages/
 ・河馬屋二千年堂's Page: http://member.nifty.ne.jp/hippo2000/index.htm

[Security]
 ・安全なプログラミングのためのガイドライン:http://www.FreeBSD.org/ja/security/#spg
 ・Perl security:http://www.perldoc.com/perl5.6/pod/perlsec.html
 ・Perl security和訳:http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlsec.html
 ・CGI and Security http://www.ansi.co.jp/tech/cgi/security/
 ・The Unofficial Web Hack FAQ:http://www.nmrc.org/faqs/www/
 ・How to Write Secure Code:http://www.shmoo.com/securecode/
 ・Safe CGI Programming :http://www.improving.org/paulp/cgi-security/safe-cgi.txt

[OS]
 ・Linux日本語マニュアル:http://www.linux.or.jp/JM/
 ・FreeBSD日本語マニュアル:http://www.jp.freebsd.org/man-jp/
5 :02/05/30 19:51 ID:???
いまさらながら、乙>>1
しかしホント人いねーな。前スレ996でとまってるよ・・・1000ゲッターすらおらんのか
6nobodyさん:02/05/30 19:55 ID:???
>5
悩める初心者がいないのは喜ばしい事と思おうじゃないか。

>1
おつ。
7nobodyさん:02/05/31 02:41 ID:RZM1Qpf7
http://cgi2.osk.3web.ne.jp/~xxx/C-TALK/BOARD/SYNC-THINK/index.html
これってどっからみても2ch型掲示板なんだけど「he-ch_BBS Ver 0.51 (C)shun-K」
ってなっています。この人の自作なのでしょうか??
8nobodyさん:02/05/31 02:42 ID:???
>>6
悩める初心者はいるが、それがperl(CGI/SSI)の分野とすら
判っていないという罠
9nobodyさん:02/05/31 11:17 ID:/ptz9nSf
すみません duの出力をハッシュに格納する例で、
親ディレクトリ名キーに、子ディレクトリ名の配列のリファレンスを入れようとしています。
本中の例を見ていますが、どうしても一行解りません。

du hoge
1425 hoge/hoo
19 hoge/hoo/bee
58 hoge/raa

------プログラム途中より-------
($size, $name) = split;
$dirsize{$name} = $size;
($parent = $name) =~ s#/[^/]+$##; ←これ
push @{ $kids{$parent} }, $name;

矢印行は、どのような処理を行っているのでしょうか。
ヒントでも構いませんのでご指南いただけないでしょうか。
よろしくお願いいたします。
10nobodyさん:02/05/31 11:23 ID:???
>>9
ヒント:

($parent = $name) =~ s#/[^/]+$##;

これは以下のコードとほぼ同じ

$parent = $name;
$patent =~ s/[^\/]+$//;
11nobodyさん:02/05/31 12:23 ID:JMT5UavW
ActivePerlで、再帰的にすべてのフォルダにあるファイルを取り出す
ということをするために

use File::Find;

$dir = "C:\\windows";

find(\&print_dir, $dir);

sub print_dir {
  print $File::Find::name, "\n";
}

というrecurse.jplを実行すると、

syntax error at C:\Perl\lib/File/Find.pm line 2, near "use 5.005_64"
BEGIN failed--compilation aborted at recurse.jpl line 1.

というエラーが出ます。これはどういうことなんでしょうか。
↓はFind.pmの1行めから4行めまでです。

package File::Find;
use 5.005_64;
require Exporter;
require Cwd;

モジュールを使うのは初めてです。
どうぞよろしくお願いします。
12nobodyさん:02/05/31 13:22 ID:???
Perlのバージョンが古いってことだす。
新鮮なPerlをインストールしてけろ。
1311:02/05/31 13:40 ID:JMT5UavW
>>12
どうもありがとうございます!
JperlじゃなくてPerlでやったら動きました。(Jperlが古いってことですよね。)
ホント助かりました。
14nobodyさん:02/05/31 13:55 ID:9bWUYmPc
Accessで作成したデータベースファイルをLinuxサーバーに置いてWebからperlを使って操作ってことは可能でしょうか。
いろいろそういうモジュールがないかと探したんですけど見つけることができませんでした。何か方法があるんでしたら教えて下さい。
159:02/05/31 15:20 ID:/ptz9nSf
>>10
うをー 
速やかなレスありがとうございました。感涙;;
16nobodyさん:02/05/31 15:50 ID:n686HjoS
最近Perlでプログラムを始めてみました。
引数に文字列を入れたら、それぞれの文字のASCIIコードを足して、
10で割ったあまりを返すサブルーチンを作ったんですが、

#呼び出し
$moji = "ABC";
$number = &getid($moji);
print $number;

#ルーチン
sub getid{
 local($tmp) = @_;
 $id = 0;
 @data = split //,$tmp;
 $num = grep //,@data;

 for($i=0;$i<$num;$i++){
  $tmp = ord($data[$i]);
  $id += $tmp;
 }
 return $id %= 10 ;
}

ってやると、返り値が0の時のみ正常に動いて
それ以外の値になる時はこのルーチンの中でプログラムが終わってるようです。
何かヘンなところあるでしょうか?
1716:02/05/31 16:09 ID:???
すいません、他のルーチンに問題があったようです…
これで得た数値を、jcode.plを用いてSJISに変換しようとしたところで止まってたようです。
板を汚してしまい、申し訳ないです。
18nobodyさん:02/05/31 21:04 ID:???
@list 内の $i 番目の要素を抜いて、一番最初にいれたいです。
どうすればいいか教えてください。

例:
$i = 2

●,◆,★,■,▲,▼
  ↓
★,●,◆,■,▲,▼
19nobodyさん:02/05/31 21:11 ID:???
>>18
$i = 2;
unshift(@list,splice(@list,$i,1));
20nobodyさん:02/05/31 22:30 ID:???
>>19
どうもありがとうございます。
21nobodyさん:02/06/01 05:07 ID:???
PerlのTipsがたくさんおいてある、有名なHP教えてください。
よろしく
22nobodyさん:02/06/01 08:08 ID:???
>21
>>3
23:02/06/01 23:23 ID:A+zARsIN
foreach $line (@qq) {
($a,$b,$c) = split(/<>/, $line);
if($a eq "abc") { ???????????? }
}
foreachで配列を処理します。$aが、abcだった場合、現在処理中の
配列のセット($a,$b,$c)ごと削除したいんです。
説明わかりにくくてすみませんが、どうすればいいですか?
24nobodyさん:02/06/01 23:29 ID:???
>14
これ使って自分でモジュールを作れ。
http://www.vector.co.jp/soft/win95/util/se032901.html
25nobodyさん:02/06/01 23:58 ID:???
>>23
delete
26nobodyさん:02/06/02 01:10 ID:???
>>25
赤らくだ本によると、それだと連想配列が対象になるんじゃ?

splice とかは?
27nobodyさん:02/06/02 04:53 ID:???
連想配列…久しい名だ。
そもそも、23ってwhileの方が…
それか
foreach(@qq){
($a,$b,$c) = split(/<>/, $line{$_});
~~~
28nobodyさん:02/06/02 05:50 ID:???
>>27連想配列なら keys は要らないの?
29もじら:02/06/02 10:42 ID:???
w2k + httpd + cgi_perl + DBI + posgre7.2 の質問です

DBIをどのように設定したらいいかわかりません
30nobodyさん:02/06/02 11:45 ID:???
>>29
こんな投げ遣りな質問久しぶりだ。
君を第一級教えて君に認定しよう!
31 :02/06/02 11:48 ID:???
>>29
どのように答えたらいいかわかりません
32nobodyさん:02/06/02 12:18 ID:???
>>30-31
まぁまぁ。それが win 厨の特徴だから(藁
33もじら:02/06/02 14:24 ID:???
自分でも把握してないので、やはり厨房ですケテー

接続ID = pg_connect("","","DB名");
これはPHPの中の記述です
この書き方は何に依存しているかは不明ですが
それでこの関数でエラーがでました

httpd とポスグレの状態は起動しています
どのように起動していればいいかは不明です
テーブルも作りました

ほんとに質問の仕方もわかりません
34もじら:02/06/02 14:30 ID:???
仕組みがわからないのは、CGIとデータベースの間でのやりとりです
おそらくPERLからDB関数でカーソルを得てるとおもうのですが
DB関数はナニに依存しているのか、どこに組み込めばよいのか不明です
VBはOCXとODBCドライバを記述すればよかったのですが

VBでADOをさわったことはあるのですがカーソルは使えます

PERLがカーソル機能をもっているなら、関数を書けばいいだけなのか
不明です。

35nobodyさん:02/06/02 14:35 ID:???
誰か>>33-34の翻訳キボン。このままじゃ読めん。
36nobodyさん:02/06/02 14:54 ID:???
>>35
PHPだと>>33のようにすればできたけどPerlでDBとのやりとりを行うにはどうすればいいの
他の言語だと>>34のようにできたけど。
やるための準備はできているからPerlでの記述の仕方を教えて。

きっとこんな感じだろ。
37もじら:02/06/02 15:16 ID:???
use DBI; # DBIモジュールを読込む
この書き方でDBIの関数を使える

これは正しいですか?

もし正しいなら、DBIモジュールはどこに組み込めばいいのかわかりません
DBIの概要は読みましたが、どこから入手してどこに組み込むのかわかりません

決してソースのキボンヌではないです
でもINSERT文のひとつが実行できたらミッション完了です

よろしくおねがいします
38nobodyさん:02/06/02 15:21 ID:???
C compilerとmakeツールを用意してCPANへGO!
つーか「モジュールとはなにか」すら理解せずにDBIを使おうとするのは間違ってます。
39nobodyさん:02/06/02 17:14 ID:QCpBS98O
全角文字を半角文字に変換したいのですが、過去ログを参考に
require 'jcode.pl';
jcode::convert(\$value, 'euc');
jcode::tr(\$value, '0-9A-Za-z', '0-9A-Za-z');
としてみたんですがsjisにしないと文字化けするため、上記のあとの行に
&jcode'convert(*value,'sjis');
をいれてみました。ですが全然変換されない状態です。
アドバイスあればお願いします。
40nobodyさん:02/06/02 17:23 ID:QdZB4aXd
trとsはどこが違うんでしょうか?
4139:02/06/02 17:31 ID:QCpBS98O
ファイル文字コードをEUCで保存したらうまく変換されました。。
EUC以外の方法はないんでしょうか?
42nobodyさん:02/06/02 18:04 ID:DhpOMnbM
質問です!!

リンクのCGIで入力項目を一つ増やしたのですが
ログに記録されません!
どこがおかしいのでしょうか?
http://nyanyanya.hoops.ne.jp/link.txt
増やした項目は bun ってゆーのです。
よろしくお願いします!!
43もじら:02/06/02 19:07 ID:???
>>39
だからウィンユーザにmakeは不要なのです

私はウィンソック担当だからCGIのインタフェースを理解して
テスト環境を構築してるのです

手順だけわかればOKですので誰かつついてくれませんか?
44nobodyさん:02/06/02 19:28 ID:???
>>39
シフトJISだとこうかなあ。
$_ = 'TBC個人情報3万件流出';
my @zenkaku = qw(
0 1 2 3 4 5 6 7 8 9
A B C D E F G H I J K L M
N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m
n o p q r s t u v w x y z);
my @hankaku = ("\x30".."\x39","\x41".."\x5A","\x61".."\x7A");
my %table;
@table{@zenkaku} = @hankaku;
s/(\x82[\x4F-\x9A])/$table{$1}/g;
print;

>>40
trは文字単位の置き換え。
$str1 = $str2 = 'abc abz';
$str1 =~ tr/abc/ABC/d;
$str2 =~ s/abc/ABC/g;
print "str1: ",$str1,"\n"; # ABC ABz
print "str2: ",$str2,"\n"; # ABC abz

>>43
帰れ。
4539:02/06/02 19:42 ID:QCpBS98O
>>44 ありがとうございます。感謝です!
しかしすごいですねー。
46nobodyさん:02/06/02 21:18 ID:???
もじらのコミニュケーション能力すげーな。採用担当者を尊敬するぞ。
47nobodyさん:02/06/02 21:25 ID:???
my @hankaku = (0..9,'A'..'Z','a'..'z');
こうでよかったね。>>44のは関係ないのと混ぜちゃった。

4839:02/06/02 21:49 ID:QCpBS98O
わかったつもりだったんですがダメだぁコードの意味がわからないです。
>>44のTBCがRABに変換される仕組みを作ってるのは
s/(\x82[\x4F-\x9A])/$table{$1}/g; この一行だと思うんですが
どうしてこれだけで変な変換されるのかわからないです。
まともに変換するためにはどうすれば良いのでしょうか?
また、このコードはどうやって調べてるのでしょうか?
49ぎもじら:02/06/02 21:54 ID:???
>>45
社会人やったらこんな質問氏ねーよ

なんてか、質問かえます、Perlにソケット関数備えてますか?

ヨロシコ

50nobodyさん:02/06/02 22:02 ID:???
一番下のCGIの部分が、うまく表示できません。
http://www.bh.wakwak.com/~min/cgi-bin/monoceros.cgi
何がいけないんでしょうか・・・
お教えいただければ幸いです。
51nobodyさん:02/06/02 22:09 ID:???
もしかしてスレ違い・・・申し訳ありません。間違えますた。
52nobodyさん:02/06/02 22:10 ID:???
>49
ttp://tohoho.wakusei.ne.jp/wwwperl2.htm#socket

>50
配布CGIは配布元で聞くべし。
53nobodyさん:02/06/02 22:11 ID:vJY+ySFU
フォームから数値を入れたPOST送信しました。
そのときのcgiが受け取った数値は文字列として受け取るの?
54!:02/06/02 22:23 ID:0rr9HH/y
55nobodyさん:02/06/02 22:28 ID:???
>>48
うちだと上のままで動くから原因がわからん。
BCがABにずれるんなら、一文字ずれてるのかな。
コードは16進に変えてるだけ。検索すれ。

>>49
なんでさっきから一つズレてるの?
56nobodyさん:02/06/02 22:30 ID:xW341CtX
>>53
YES
57nobodyさん:02/06/02 22:30 ID:???
58ぎもじら:02/06/02 22:37 ID:???
ごめんね、マルチで

でもわかりやすいHP情報助かりました
5939:02/06/02 22:46 ID:QCpBS98O
>>55 何度もありがとうございます。ようやくできました(TДT)
>>44のをコピペしたときに my @zenkaku = qw(のあとにつづく部分の
改行をとったんですが、そのときに半角スペースを削ってしまってました。
その影響でTBCがRABに変換されていたようで、うちの地元のTVニュース番組で
RABてのがあって、これはいったいどういうことだろう?と思い。。。
関係なくてすみません。とにかくありがとうございました。
60nobodyさん:02/06/02 23:32 ID:???
なんにしろ解決したならいいさ。
61nobodyさん:02/06/03 00:08 ID:450OcSEV
perl5.6で、perlmodを参考にモジュール(Mymod)を作ってテストしてます。
それで、10000行の入力でdprofppを使ってプロファイルを取ってみると、
Mymod::BEGINが10000-20000回の間で呼び出されていて、
定義していないはずのmain::BEGINも10000回前後呼ばれています。
perlmodには「BEGINは1回だけ呼ばれる」と書いてあったと思うんですが。
62nobodyさん:02/06/03 00:49 ID:???

みなさん、
タカラ(およびコナミ)との『聖戦』が始まりました! これをコピペすれ!

コナミがタカラを買収! 黒幕はコナミか?
http://www.mainichi.co.jp/life/hobby/game/news/news/past/200004/20000427_03.html

株式会社タカラが、「ギコ猫」を商標出願中。 (,,?Д?) 我らのギコ猫を救え!
http://www2.ipdl.jpo.go.jp/BE0/index.html の商標検索から「ギコ猫」入力
=============開始==============
・広報コピペ部隊 できる限り各地にのニュースを伝える 例)タカラの株式スレなど
・テンプレ部隊 関連スレ・抗議文などのテンプレを作る
・法律部隊 法的に議論、打開策を考える
・誘導部隊 各地で出てくるであろう新参にいろいろ教えてあげる
・不買運動部隊 不買運動を広めよ
・株主・IR対策部隊 株価・株主・企業活動としてのPRやIRに対する対策

F5や単なる中傷は控えめに。正々堂々と戦うのだ。
63nobodyさん:02/06/03 04:44 ID:zPDyt+6k
>>61
ソースみんとわからんけど。
BEGINブロックが複数あると、その数だけDProfはカウントするぞ。
あと「use Hoge;」は「BEGIN {require Hoge; import Hoge;}」に等しいから
useを使うごとにBEGINブロックが一個追加されることになる。
しかしカウント数が1万回にもなる理由はわからぬ。
64nobodyさん:02/06/03 10:16 ID:9MQeJRCJ
log.datには5行データが書かれています。
cgiでデータを更新し、一番上(1行目)にデータを追加するのですが問題があります。
5行目のデータ(文字数)が長い場合、更新して新しいデータを追加したとき
古い五行目の余分なデータが新しい5行目のデータの最後に付いてしまっています。

open(FILE,"+<$filepath");
#処理は省略
pop @data;#6個目は削除
seek(FILE,0,0);
print FILE @data;
こんな感じでやってるのですが、最後のデータが大きいとデータが残ってしまいます。
どうやればいいのでしょうか。
65nobodyさん:02/06/03 11:12 ID:???
>>64
seekする前にtruncate(FILE, 0);すれ。
6664:02/06/03 11:27 ID:???
ありがと!
できました。
そんな関数truncateがあったとは。
67nobodyさん:02/06/03 15:53 ID:UUcyKeQx
$ほが=~ s/x/x\/g;
この方法で文字化けを回避しようするとエラーがでます。
エラーをださないようにするにはどうすれば?
68nobodyさん:02/06/03 15:56 ID:???
>67
最初からeucを使う。
69nobodyさん:02/06/03 16:04 ID:???
>>67
消えろ。
70nobodyさん:02/06/03 16:05 ID:???
>>68
消えなさい。
71nobodyさん:02/06/03 17:27 ID:???
Perlで質問なんですが、
@letters 内の、重複した要素を削除する方法を教えてください。
よろしくお願いします。
72nobodyさん:02/06/03 17:53 ID:???
>>71
perldoc -q "remove duplicate"
で定石が出てくる
73nobodyさん:02/06/03 18:48 ID:???
>72
すいません、よく意味が分かりません・・
もう少し詳しく教えていただけませんか?
74nobodyさん:02/06/03 19:00 ID:???
>>71
%mita = ();
foreach $youso (@letters) {
push(@newletters, $youso) unless $mita{$youso}++;
}
75プロのグラマー:02/06/03 19:09 ID:???
perlはsjisで書けよ。これ鉄則。
76nobodyさん:02/06/03 19:14 ID:???
>>73
perlに必ず付いてくるperldocコマンドつーのがあってな。
シェルとかDOS窓のコマンドラインから>>72みたいのを入力するわけ。
すると-qの後に指定したキーワードに関するFAQが出てくる。

ただしキーワードは英語のみ。だから「重複した要素を削除」の
方法を知りたいなら「remove duplicate elements」で検索する。
77nobodyさん:02/06/03 20:16 ID:???
>>75
鉄則というより、なにかの罰則ですねソレ。
78nobodyさん:02/06/03 21:58 ID:wD1usRut
>>75
よく本を見ると、perlはeucで書けと書いてありますが、これはどういうことなのでしょうか。
私は秀丸で書いてるんですが、eucで保存すると、後で開いたときにすべて文字化けしてます。
「eucで書く」という行為自体がどうすることなのかよくわかりません。
みなさんeucで書かれてるんですか?
79nobodyさん:02/06/03 22:22 ID:???
>>78
その他→動作環境→編集→文字コードの自動認識をする

サクラエディタでも使ってればぁ?(゚Д゚)
80nobodyさん:02/06/03 22:29 ID:???
>>65,66
seek前にtruncateすると、printする前に異常終了した場合データが
吹っ飛ぶんで、print後にtruncateした方が良いと思う。
Cookbookのサンプルもそうなってるし。
seek(FILE,0,0);
print FILE @data;
truncate (FILE, tell(FILE));
close(FILE);
81ぎもじら:02/06/03 23:47 ID:???
質問です

ポスグレのDBIいれようとしたら
c:\>ppm install DBI
でインストできちゃった

なんで?
どんな仕組みになってるのかわかりません

ヨロシコ
82nobodyさん:02/06/04 00:13 ID:???
http://www.google.co.jp/search?q=%70%70%6D%82%C6%82%CD&hl=ja&lr=
分からない事があったらとりあえず検索するクセつければぁ?(゚Д゚)
83ぎもじら:02/06/04 01:04 ID:???
>>82
すばらしい

ようやくPerlからポスグレ操作できるようになりました
あとはC言語から操作汁予定です

84nobodyさん:02/06/04 01:22 ID:???
truncateってPerl4で使えないのかよっ!
85nobodyさん:02/06/04 08:43 ID:???
奇怪な動作が起こってしまい、困っています。
Perlのバージョンは5.6.1です。
Text::Templateのバージョンは1.43です。

use Text::Template;
$NaviView = 'SHOW';
my $template = new Text::Template (
  'type' => 'FILE',
  'source' => 'test.html'
  ) or die;
print $template -> fill_in();

デスクトップでテストするとHTMLファイル内の{$NaviView}が展開されて表示されます。
しかし、cgi-bin/step8/フォルダ内だと、何故か{$NaviView}の部分が表示されません。
ソースは同じなので、原因がわからずに困っています。
どうか助けてください。
8666:02/06/04 09:27 ID:b8OuO/Ji
>>80
自分も調べてみたけど、そっちの方が安全性が高いみたいですね。
なんか、処理速度も速いみたいです。どうもです。
87nobodyさん:02/06/04 11:32 ID:V54BnlXw
変数$Aの中に、$NO1.$NO2,$NO3・・・ という風に順番に数字を入れて処理を
繰り返したいのですがうまくいきません。どうか助けてください。変数の中に
変数というのは無理なんでしょうか?

for($m=1 ;$m <= 9 ; ++$m){
&print($m);
}
====================
sub print {
my ($i) = @_ ;
$A = "$NO$i";   #←この部分がやりたいことです
print = $A;
}

若輩者ですが、宜しくお願いします。
88nobodyさん:02/06/04 12:45 ID:???
>>87
$A = "\$NO$i"; でいいのでは。って、こういうことじゃないのか?
ちなみにforの部分は、漏れはforeach(1..9)と書くのが好き。

89nobodyさん:02/06/04 12:49 ID:???
>>87
ソフトリファレンスで $A = ${"NO$i"};
つーかハッシュ使えよ…
9061:02/06/04 13:01 ID:???
>>63
レスどうもでした。それと遅レスすいませんです。
tmon.outにはBEGINが数万回記録されていたのに、
BEGINにprint文を入れてみたら1回しか出力されなかったので、
DProfのバグということで落ちついてみます。
本当のところは知らないですが。
9187:02/06/04 13:09 ID:V54BnlXw
>>88さん >>89さん
どうも有難うございました。まだまだ勉強不足ですので頑張ります!
92nobodyさん:02/06/04 13:13 ID:???
>88
過去スレで出たんだけど、foreachよりもforの方がいいらしい。
foreach(1..9)だと、@_ = (1,2.3,4,5,6,7,8,9);みたいな一時配列を作ってから処理をするからメモリを食うんだと。
まぁ、この程度の数値なら差はないだろうけど、
for($i=0;$i<10000;$i++)
foreach(0 .. 10000)
くらいになると差が出るんじゃないかな?
9361:02/06/04 13:14 ID:???
ちょっと追加。。。
#!/usr/bin/perl -w
use strict;
sub LIMIT { 10000 }
for (my $i = 0; $i < LIMIT; $i++) {
}
print "end\n";

このソースで下の測定結果になります。
Total Elapsed Time = 0.019991 Seconds
 User+System Time = 0.019991 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
150.  0.030 0.025 10002  0.0000 0.0000 main::BEGIN
0.00  0.000 -0.000   1  0.0000   - strict::import
0.00  0.000 -0.000   1  0.0000   - strict::bits
94nobodyさん:02/06/04 13:42 ID:???
>>92
過去のバージョンでは確かにそうだったが、
5.005の時点で最適化されたため、今や foreach(n .. m) の方が早い。
あやふやな知識は試してみてから外に出そうな。
95nobodyさん:02/06/04 13:52 ID:???
>>92
それはPerl4とかの話でしょ。
今はもう一時配列作っていないから心配ないよ。
ちなみに0 .. 10000のほうが速い。ってperlsynに書いてある。
96nobodyさん:02/06/04 13:53 ID:???
10分も経っているのにかぶった。スマソ。
97nobodyさん:02/06/04 13:54 ID:???
>>93
すまんがわからん。さっぱりわからん。
俺も幾つか試してみたけど、まるで納得いかない結果になったよ。
多分どこかにバグがあるのは間違いないと思う。
98nobodyさん:02/06/04 14:12 ID:???
>>93
5.6.0では

Total Elapsed Time = -0.85246 Seconds
User+System Time = 0 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
0.00 0.575 0.105 10001 0.0001 0.0000 main::LIMIT
0.00 0.008 0.008 1 0.0077 0.0076 main::BEGIN
0.00 0.000 -0.000 1 0.0000 - strict::import
0.00 0.000 -0.000 1 0.0000 - strict::bits
Elapsed以外は正しく見えるが...

perltocにdprofpp(utility change)と書いてあるから古いの使ってるんじゃないのか?
9997:02/06/04 14:22 ID:???
>>98
俺のはPerl5.6.1(ActivePerl631) Devel::Dprof 20000000.00_00 だ。

このコードはどうだろう。
俺の環境では、なぜか use ...; をコメントアウトするとまともに動くのだが。

#!perl -w
use less; # strictとかでも同様。lessを選択したのは何の効果も無いプラグマだから

sub limit{ 100 }
sub LIMIT{ &limit }
for(my $i = 0; $i < LIMIT; $i++){}
100nobodyさん:02/06/04 14:30 ID:???
>>97-98
レスどうもです。
ええと、perl -versionは5.6.1だったです。dprofppのバージョンは分かりませんでした。
SerioWare GNU/Linux 0.35A附属のものを使っています。

で、この環境では>>99と少し違って、
ちょうど>>94とかぶってたので、forとforeachを調べてみたら、
#!/usr/bin/perl -w
use strict;
for (my $i = 0; $i < 1000000; $i++) {
}
これだとBEGINは1回呼ばれるだけだったです。
101nobodyさん:02/06/04 14:45 ID:???
>94-95
それは知らなかった、サンクス。

もっとも、漏れのプロバのスペースはいまだにPerl4なんだけどな。(涙ッシュ
10298:02/06/04 14:50 ID:???
>>99
ActivePerl 5.6.1でやってみた。結果は異常。

>>98はFreeBSD上の5.6.0。こいつのdprofppにActivePerlで作ったtmon.outを
食わせてみると、ActivePerlと結果同じ。 Devel::DProfのバグっぽい。
103nobodyさん:02/06/04 16:38 ID:???
文字コードがs-jisになっている掲示板はCGIもs-jisで書かれてるんですか?
出力だけs-jisに変換してるんですか?
104nobodyさん:02/06/04 16:44 ID:???
105nobodyさん:02/06/04 17:06 ID:???
>>101 そんなISPやめてしまえ。きっとsuidperlの穴放置で特権取れる。
106nobodyさん:02/06/04 20:32 ID:???
>>92
しかもfor(my $x; $x < $limit; $x++ ) は本当はwhileだという罠

perl -MO=Deparse,-x3 -e 'for(my $x; $x < 100; $x++){ print "barf\n" }'
my $x;
while( $x < 100 ) {
print "barf\n";
}
continue {
++$x;
}
-e syntax OK
107nobodyさん:02/06/04 20:50 ID:???
おまけ。両方ともレキシカル$xを持つようにしてみました:

use Benchmark qw/ cmpthese /;

sub cstyle
{
my $a = 0;
for( my $x = 0; $x < 1000; $x++ ) {
$a++;
}
}

sub pstyle
{
my $a = 0;
for my $x ( 0..999 ) {
$a++;
}
}

cmpthese(
100000,
{
cstyle => \&cstyle,
pstyle => \&pstyle
}
);

Benchmark: timing 100000 iterations of cstyle, pstyle...
cstyle: 95 wallclock secs (94.13 usr + 0.01 sys = 94.14 CPU) @ 1062.25/s (n=100000)
pstyle: 72 wallclock secs (71.58 usr + 0.02 sys = 71.60 CPU) @ 1396.65/s (n=100000)
Rate cstyle pstyle
cstyle 1062/s -- -24%
pstyle 1397/s 31% --
10885:02/06/05 09:40 ID:???
自己解決しました。
myで宣言してたのがいけなかったようです。
use strictをコメントアウトしたらうまくいきました。
109nobodyさん:02/06/05 09:47 ID:???
>>108
おい、どこが"ソースは同じ"だよ…
それじゃ誰もアドバイスできなくて当然だろ!
110nobodyさん:02/06/05 10:03 ID:???
perlで、パスワードを入力してログイン、ログアウトする機能は作れますか?クッキー使うんですか?
111nobodyさん:02/06/05 11:42 ID:???
>>110
当然作れる。クッキーは使用してもしなくても作れる。
112nobodyさん:02/06/05 13:09 ID:???
>>111
ん、じゃあどうやって、その人がログインしているのかどうかを判定するんだろ。。。。
んーーーーーーーー。
113nobodyさん:02/06/05 13:10 ID:???
>>112
HTTPベースの技術でログオン、ログアウトの概念って非常に難しいと思われ。
114nobodyさん:02/06/05 14:12 ID:O06am5wh
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数:105420人 発行日:2002/05/030
どもども、風薫る5月ワキガも香るひろゆきですー。

今日はどうしても報告したいことがあるですよー。
東京地裁の顔になりつつある今日この頃ですが、最近裁判官がおいらを露骨に馬鹿にするですよー。
裁判を傍聴している人は既にご存知でしょうが、ついこの前は、おいらのことを
「あなたは売春クラブの経営者みたいな言い訳をしますね」
なんて言いやがったですよー。
どうやら売春クラブの経営者は警察に捕まると必ず
「出会いの場を提供しただけだ」
と、見苦しい言い訳をするらしいですよー。。。
そんなセコイ奴等とおいらを並べて語るとは悔しいけど、ストライクですー。。。えぇえぇ、、、

確かにおいらは企業や公人の誹謗中傷を禁止していませんし、削除もしません。
その上、「発信元は判らない」を看板とし、悪質な書き込みをし易い環境を提供し、いやむしろそれを売りにしようと目論んでいますが、そんなことはおいらのクチビルの厚さとは関係ないですよー。。。

ところで、中央大卒のおいらの同級生達がおいらのことを「宅八郎みたいな奴」と罵っているって本当ですか?。。。うぅうぅ、、、

んじゃ!
115nobodyさん:02/06/05 16:42 ID:???
jcode.plのコードをコピペして組み込んでもいいですか?
116nobodyさん:02/06/05 16:44 ID:???
>>115
ダウンロードする奴の80%に失笑を買われると思うけどね。
117 :02/06/05 19:54 ID:???
>>112
中途半端な質問だから一般的な回答をもらったのに、脳内変換するなよ。
ユーザ個別にという前提で聞いてないじゃないだろ。
その場合はユニークなIDとセットで行うのが普通だし、判定なんて
簡単な話じゃないの。
118nobodyさん:02/06/05 21:36 ID:6v6pwQwJ
あほな質問かもしれませんが、任意の名前でファイルを作成する
コマンドを教えてもらえないでしょうか?
私の調べた範囲ではわからなかったのでお願いします。
119 :02/06/05 22:02 ID:???
open
120nobodyさん:02/06/05 22:02 ID:???
>>118
open関数
121nobodyさん:02/06/05 22:03 ID:???
ahya.
122nobodyさん:02/06/05 22:16 ID:6v6pwQwJ
ついでといってはなんですがidを???にする方法教えてください。
123nobodyさん:02/06/05 22:17 ID:???
>>117
もっとわかりやすく言え!
124nobodyさん:02/06/05 22:19 ID:???
>122
メール欄にsage
125nobodyさん:02/06/05 22:57 ID:???
cgiのソ−スを見られないようにする方法は?
126nobodyさん:02/06/05 23:03 ID:???
>>125
見られたの?どうやって?
あまり無駄な心配しないほうがいいですよ。
127nobodyさん:02/06/05 23:06 ID:???
128 :02/06/05 23:27 ID:???
このたび身の程もわきまえずNTサーバを立ち上げました。
内容は当方のデータベース内にある情報の中で、各人に必要なものを検索し、
見ていただくというものです。
データはCSVファイルになっております。

そこで質問なのですが、たとえばCSVファイルが
1列目はお店の名前
2列目は「とんこつ」または「しょうゆ」または「しお」
3列目はお店の所在地(都道府県)
という具合に記述されているとします。

このとき当サイトを見た人が、チェックボックスの「東京」「とんこつ」
にチェックを入れて検索をかければ該当するお店がHTMLファイルに出力
されるようにしたいのです。

私はまず何から手を付ければよいでしょう?
ちなみに恥ずかしながらプログラミングの知識はほとんどありません。
「そういうプログラムあるよ」とか「まずこの本買って勉強しなさい」とか
何でもいいですから情報をいただけるとありがたいです。
129nobodyさん:02/06/05 23:58 ID:???
>>128
レスキューの簡易データベースでも使っちょれ
http://www.rescue.ne.jp/cgi/database/
130イニシャルN ◆kys8mAGw :02/06/06 00:01 ID:???


http://pc.2ch.net/test/read.cgi/prog/1023283683/

から来ました。板違いという指摘があってコチラに誘導させてもらいました。
ここのスレで勉強させてください。
よろしくお願いします。
131nobodyさん:02/06/06 04:26 ID:???
>>130
HPBにMe…
キタ━━━━(゚∀゚)━━━━ !!!
で、何を御所望?
まさか、この辺鄙な板の真っ当なスレまでネタスレに!?
132イニシャルN ◆kys8mAGw :02/06/06 06:41 ID:???
>>131 ん・・・
133イニシャルN ◆kys8mAGw :02/06/06 06:59 ID:???
>>131 ビルダーもMeでもないです。
あれは使いまわしなので古い内容ですね。

今はタグ打ち、XPプロフェッショナル/2000/NTの3機の環境です。
あ、自宅はMeですが、、、、

ネタスレ、ネタスレと言いますがネタじゃないです。
まじめに勉強しようと思ってますよ。
今、スレ一覧とかみてよいCGIサイトとか
お気に入りにいれました。参考にさせてもらいました。
ありがとうございます。
頑張って調べてそれでもわからなかったら力添えよろしくお願いします。
失礼します。
134nobodyさん:02/06/06 08:56 ID:dEIJexyI
>>125
心配なら、ScriptAliasでdocumentrootの外に置くといいでしょう。
135nobodyさん:02/06/06 15:10 ID:???
$a =~ /$b/
↑こんな時、$b をリテラルとして扱う方法ってある?
136nobodyさん:02/06/06 18:08 ID:???
>>133
ネタスレと言われるのは、単発で立てたからだろ。
まじめに勉強したいならしばらくは2ch外でお勉強した方がいいと思う。

質問するなら>>1の内容を5回くらい声に出してからしてくれな
137nobodyさん:02/06/06 18:59 ID:???
>>135
ハァ?
まさか
$a =~ m'$b';
とか
$a =~ /\$b/;
とかしたいって意味じゃないよな。
そんなのどんなクソな参考書でも絶対載ってるもんな。
もっとちゃんと説明しねーとワケわかんねーよヴォケ、とだけ逝っておく。
138nobodyさん:02/06/06 20:06 ID:???
>>136 ハッキリ言って、>>137 みたいな質の低い解答者の答えしか載っていない過去ログなんて価値ねぇよ
139分かりやすいな。:02/06/06 20:48 ID:???
140138:02/06/06 21:23 ID:???
>>139 俺は >>135 じゃないけど?

俺が言いたかったのは、たまたま見た >>137 の様な人間がなってないような
解答者しかいねぇなって皮肉ったって事。
141nobodyさん:02/06/06 21:36 ID:???
>>140
つまり貴方は
  >>135の方が>>138より人として優れている
と、こういいたいわけだ。
142nobodyさん:02/06/06 21:42 ID:???
まぁ、あれだ。井の中の蛙、五十歩百歩
143nobodyさん:02/06/06 21:48 ID:???
と、収まったところで次の方どうぞ〜
以下の要点を抑えないとまともに答えてもらえないので注意ですよ。

>>1
> 1:自分はこう言う事がしたい。
> 2:それでこんな風にやってみたが・・・
> 3:それだとこんなエラーが出て上手く行かなかった。

144nobodyさん:02/06/06 22:29 ID:???
めちゃめちゃアホくさい質問ですいませーん。

if ($a == 1) { &b }
if ($a == 2) { &b }
if ($a == 4) { &b }

これを短くするにはどうすればいいですか??m(__)m
145nobodyさん:02/06/06 22:38 ID:???
>>144
悪いことは言わない、良書買って勉強しろ。

&b if ($a == 1 or $a == 2 or $a == 4);

146144:02/06/06 22:42 ID:???
>>145さんありがとう!
がんばって勉強しまーす。m(__)m
147nobodyさん:02/06/07 02:26 ID:AfwvfL8+
あが
148nobodyさん:02/06/07 04:15 ID:IzDclSQv
投稿内容に適度に改行が含まれているかどうか判定する
サブルーチンを作りたいんですが今の知識では書けませんです。
ちなみに仕様上、tableで囲うとかしたくないのです。
ちなみに改行は\rでやっております(どうでもいいですか)。

投稿内容のバイト数をチェックして
その中の\rの数を出して
何文字か毎に割ればいいように思うんですが…
もし良ければ教えてくらさい
149nobodyさん:02/06/07 05:06 ID:???
>>148
>適度に改行が含まれている
んなファジーに「適度」いわれてもわからんのじゃゴルア。

tableで囲いたくないつーと、1行の文字数は不定つーことかな?
1行の文字数ってか横幅を固定せずに「適度な改行」を判定するなんてこた、
おそらく不可能だと思うが。もすこし詳しく条件を述べたまへ。
150148:02/06/07 05:35 ID:IzDclSQv
えと、想定してるイメージなんだけど
改行符(\r)無しで○○文字以上文字が続いていたらエラー、という
式を書きたいわけです。

ちなみにたったいま

$comment =~ s/(.*)\r/$1\r/ig;
$oneline = $1;

return $oneline;

で、$onelineが>100だったらエラー、というのを書いてみたんだけど
上手く機能しませんでした

この100って数字は適当なんでどうでもいいです。
要はこの数字がtableで言うところのwidthの役割にはなるかなと
思ったんですが駄目かなぁ
151nobodyさん:02/06/07 05:43 ID:kAPIF1KY
以下の処理を見ていて論理演算子が分からなくなってしまったので教えて下さい。

前提:
4年に一度は閏年
でも100年毎は閏年ではない
ただし400年毎は閏年

@months = ("0", "31", "28", "31", "30", "31", "30", "31", "31", "30", "31", "30", "31");
if (($year%4) == "0" || ($year%100) != "0" && ($year%400) == "0") { $months[2] = "20"; }

三つの式が『||』と『&&』の二つの論理演算子でifの条件文が作られているわけ
ですが、『($year%4) == "0"』と『($year%100) != "0"』と『($year%400) == "0"』の関
係と、その中での『||』と『&&』の関係が知りたいです。

上述のif条件文だとうまく処理されないのに、条件文を
(($year%4) == "0" || ($year%100) != "0" and ($year%400) == "0")
もしくは
((($year%4) == "0" || ($year%100)) != "0" && ($year%400) == "0")

にするとうまくいくんです…。

参考書に書いてある優先順位の意味も分からないし…。

宜しくお願いします。
152nobodyさん:02/06/07 06:04 ID:???
>>150
100文字ごとにbr要素ぶちこんで改行するとかでどうじゃろ?
それならPerlメモ(>>3見れ)にある
日本語を特定の長さで折り返す方法が参考になった記憶あり。

>>151
おなじアンド演算でも、
&& と || だったら、&&をに計算、次に||を計算する。
and と || だたら、||が先で、次にandを計算する。
こういうふうに、どっちが先に計算されるかってのが優先順位だよ。
わからなかったらカッコ使え。
153nobodyさん:02/06/07 06:38 ID:???
言葉の使い方解らない質問者&解答者多過ぎ。なんで、part13 建ったのか不思議だな。
154nobodyさん:02/06/07 07:17 ID:???
>>150
>改行符(\r)無しで○○文字以上文字が続いていたらエラー
簡単に○○バイトで。
print "Error\n" if $comment =~ /[^\r]{10,}/;

嫌なら152の人の示したリンクに飛んでみるとか。
155nobodyさん:02/06/07 09:47 ID:???
>>151
もし使えるのだったらDate::Calcを使うべし。もうすでに誰かが
書いてあるものならば素直にそれを使うべし。

使えないのだったらもう少しキレイに書けば問題も自然となくなります。

## 多分 $month, $yearをもってきてその月の日数を出したいのだろう
## と仮定・・・

our @MONTHS = qw/ 0 31 28 31 30 31 30 31 31 30 31 30 31 /;
sub get_max_days
{
my( $year, $month ) = @_;
if( $month == 2 && is_leap_year($year, $month) ) {
return 29;
} else {
return $MONTHS[ $month ];
}
}

sub is_leap_year
{
my( $year, $month ) = @_;

if( $month == 2 && $year % 4 == 0 ) {
if( $year % 100 == 0 ) {
return $year % 400 == 0;
}
return 1;
}
return 0;
}
156nobodyさん:02/06/07 09:54 ID:5iJQJUx6
>>154
まあ凝るならchasenを使って文節のきりのいいところで
改行するということで。
157nobodyさん:02/06/07 10:06 ID:???
>>151
あと文字列と==を混ぜるのはやめとき。

print "equal!\n" if "a" == "0";

==は数値、eqは文字列。まぁ151のコードだととりあえず関係ないけど。
158nobodyさん:02/06/07 10:55 ID:???
>>155
些細なことだが、"閏年かどうか"は
引数の月が二月であるかどうかとは無関係だろ?

ついでだからもっと単純に実装してみる

これは
"yearが4で割り切れる、かつ、$yearが100で割り切れない
 または、$yearが400で割り切れる場合、真を返す"
と読む

sub leap_year
{
my $year = shift;
return $year % 4 == 0 && $year % 100 != 0 || $year % 400 == 0;
}
159nobodyさん:02/06/07 12:47 ID:???
>>158
ああ、そういえばそうだった(笑)
160nobodyさん:02/06/07 13:15 ID:???
PerlMagickを使ってGIF画像のリサイズをしたいのですが、
コマンドプロンプトからは動作するのに、ブラウザからは
動作しません。

#### ソース ####
sub ImageProcessing {
local($infilename,$outfilename,$width,$height) = @_;

$image = Image::Magick->new;
$image->Read($infilename);
$image->Scale(width=>$width,height=>$height);
$image->Write($outfilename);
}
ソースに問題はないと思いますが、
$image->Read($infilename);
でファイルが読めてないようです。このcgiファイルと同じディレクトリに
読み込む画像があるのですが、エラーでは画像がないと返ってきます。
この問題が分かる方、是非ご教授お願いいたします。

//// 環境 ////
Windows2k
Apache1.3.24
ActivePerl
PerlMagick
161nobodyさん:02/06/07 13:16 ID:JHi9xs8B
質問なんですが。
フォームの内容を、フォームとsubmit ボタンを2つづつ使って、
別々のcgiに選んで渡すことはできるんでしょうか?

form1
form2
内容
submit 1
submit 2

みたいな感じで、できるとうれしいのですが。
162nobodyさん:02/06/07 13:19 ID:O+HWTyLI
>>161
できるでしょう
163nobodyさん:02/06/07 13:23 ID:JHi9xs8B
>>162
name 属性をそれぞれそろえても駄目ですよね?
具体的な方法を教えてもらえると、とてもうれしいです
164nobodyさん:02/06/07 13:26 ID:O+HWTyLI
あ、ネストしてるんですね。ごめんなさい、できないっす。
165nobodyさん:02/06/07 13:33 ID:???
>161
JavaScript使え。
166nobodyさん:02/06/07 13:36 ID:???
>>165
具体的な方法っていってんじゃんよ
167165ではない:02/06/07 13:39 ID:???
>>166
何だ、その態度は。
JavaScript なら板違いだ。
168161:02/06/07 13:46 ID:JHi9xs8B
>>167
いちお言っておきますが。166は私ではありません。念のため・・・。
169nobodyさん:02/06/07 13:54 ID:???
>166
>163では>162に対するレスとしてその方法を聞いてるように見えたから>165では>161へのレスとしてああ書いた。
そして>167の言うように板違いだから詳細には触れなかった。
170nobodyさん:02/06/07 13:57 ID:???
解答者は人間やり直せ。
171nobodyさん:02/06/07 14:06 ID:???
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。

1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

172nobodyさん:02/06/07 14:07 ID:???
>>161 こんな感じ。
確かに板違いだが、今後同じ疑問をもつ人もいるだろうし
ぐちぐちいうぐらいなら、やり方教えてやったほうが早い。

<HTML LANG="ja">
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>

<FORM ACTION="" NAME="MyForm">
<INPUT TYPE="BUTTON" VALUE="送信1" onClick="MyForm.action='hoge.cgi';MyForm.submit();">
<INPUT TYPE="BUTTON" VALUE="送信2" onClick="MyForm.action='fuga.cgi';MyForm.submit();">
</FORM>

</BODY>
</HTML>
173166:02/06/07 14:36 ID:???
>>167
板の事忘れてたスマソ

でも、それなら質問自体がイタチ害でわ?
174nobodyさん:02/06/07 14:39 ID:???
すべての1バイト文字と2バイト文字を配列にしたいんだけどどうすればいいの?
175nobodyさん:02/06/07 15:14 ID:???
>173
「Perlでできますか?」と聞いてるから問題はない。
「JavaScriptならできるから、そっちで聞け」と答えているなら、それも間違いではない。
「Perlではできない」とだけ答えるよりむしろ親切。
176nobodyさん:02/06/07 15:17 ID:???
>>172 無駄。どうせ、質問者は過去ログなんて見ない。
177nobodyさん:02/06/07 20:59 ID:???
>>174

$EUC_JP_ = '[\x00-\x7F]|[\xA1-\xFE][\xA1-\xFE]|\x8E[\xA1-\xFE]|\x8F[\xA1-\xFE][\xA1-\xFE]';
@chars = ($str =~ /($EUC_JP_)/g);

よくわからんがこういうことかな?
178nobodyさん:02/06/07 21:02 ID:???
>>174
質問が意味不明です。
だが、とりあえずここ逝け
http://www.din.or.jp/~ohzaki/perl.htm
179nobodyさん:02/06/07 23:13 ID:VaB1Xovq
perlのデバッグはどうすればいいんでしょうか・・・
Delphiのような総合開発環境がないので、どこが悪いのか探すのだけで直ぐ数時間ふっとびます・・・
効率のいい手法などあるのでしょうか?
180nobodyさん:02/06/07 23:28 ID:zKprkcjg
>>179
古典的だがprintデバグ(wara
dieとか使えばデバグが楽になるらしいよ。
181nobodyさん:02/06/07 23:31 ID:???
>>179
まずは
perldoc perldebug

当然-wスイッチとuse strictは必須

で、デバッグ機能としては…

perl -d script.pl # ビルトインCUIデバッガ
perl -d:ptkdb # GUIデバッガ Devel::ptkdbをインストールする必要あり
perl -d:Dprof script.pl ; dprofpp # Devel::Dprof プロファイラ
perl -MO=Deparse script.pl # オプティマイズの様子を見る ただしかなり不完全


ざっと見てこんなもんかな。
182nobodyさん:02/06/07 23:47 ID:???
>>179 emacs de perldb
183nobodyさん:02/06/08 00:24 ID:???
open() or die の定番処理で、dieのところで複数の処理を入れた
かったんで実験したら、コンマで繋ぐと上手く行くことがわかった。
例:open() or print "エラーしますた\n", return;
このコンマの意味って、Perl的にどういう意味?
184nobodyさん:02/06/08 00:35 ID:???
>>183
コンマ演算子は式を左から順に評価し、最も右の式の値を返す。
voidコンテキストだと単に左から順に式を評価するだけ。
print("a"), print("b")
これはprint("a")を実行した後、print("b")を実行せよ、ということ。

ただし>>183は少し違う。
この場合はprintを"エラーしますた\n"とreturnの返り値の二つの引数で呼び出している。
ただしreturnは値を返さず呼び出し元に戻るから、"上手く行く"はずはないんだが…

185age:02/06/08 00:49 ID:???
10ずつ上げるカウンターを作ってるんですが
$count++;
の時は1ずつ上がっていたのに
$count+10;
にすると10ずつ上がるどころか全くカウンターが変わりません、
何かやりかたあるのでしょうか?
186nobodyさん:02/06/08 00:57 ID:???
>>184
即レスどうもです。ラクダ本のコンマ演算子は読んだんですが、
左から順に評価し、は、実行すると言う意味なのね。
ちなみに、昨日の事を記憶で書いたので、今見直したら return
じゃなくて print, redo LABEL;でした。return は実験したか
記憶に無い。鬱
187nobodyさん:02/06/08 01:06 ID:???
>>185
$count += 10;
188age:02/06/08 02:15 ID:???
>>187
ありがとうございます!
189nobodyさん:02/06/08 11:45 ID:R0Gdpaab
掲示板スクリプトでリモートホストを取得したいのですが
何をやってもIPアドレスの方が取得されてしまいます。

$host = $ENV{'REMOTE_HOST};
これ一行だけにすると、何も取得出来ず・・・。

サーバがそういう設定にしているのか・・・。
どうすればいいのでしょうか?
190nobodyさん:02/06/08 11:46 ID:???
>189
サーバーの設定によっては使えない。
191nobodyさん:02/06/08 11:48 ID:R0Gdpaab
>>190
返答ありがとうごさいます。

今使っているところは米tripod、あそこはダメか・・・
192nobodyさん:02/06/08 11:48 ID:???
>>189
if ( $ENV{'REMOTE_HOST'} ne '' ) {
 $host = $ENV{'REMOTE_HOST'};
}
else {
 $host = $ENV{'REMOTE_ADDR'};
}
193nobodyさん:02/06/08 11:58 ID:R0Gdpaab
>>192
そのように設定して、自分のリモホを見たら
10.10.17.178とか表示されました・・・。
どこのIPだ。しかも表示させたいのはリモートホストだし。

tripod逝ってよし
194nobodyさん:02/06/08 12:03 ID:R0Gdpaab
KENTさんの掲示板で試してみても同じ結果だ。
これはサーバの設定だな。
tripodは諦めます。
195pear ◆FRUIT8pk :02/06/08 14:31 ID:???
iswebとかトクトクでもダメだった記憶が。。
XREAなら gethostbyaddr 関数でホストが取れたと思う。
196nobodyさん:02/06/08 14:41 ID:???
掲示板の検索部分を改造しようと思い半角カナ−>全角カナはjcode.plで出来たのですが
全角カナ−>ひらがなへの変換は出来ないのでしょうか?だれか教えて下さい。
197nobodyさん:02/06/08 14:43 ID:JsVHaVnY
$host = $ENV{'REMOTE_HOST'};
$addr = $ENV{'REMOTE_ADDR'};
if ($host eq "" || $host eq "$addr") {
$host = gethostbyaddr(pack("C4", split(/\./, $addr)), 2);
}
if ($host eq "") { $host = $addr; }
198nobodyさん:02/06/08 15:27 ID:???
>>196
jcode.plならtr関数が使えたと思う。
jcode::tr(\$str, 'ァ-ン', 'ぁ-ん');

もしかしてShift_JISには未対応だったかも。
だめだったら自分で変換用のハッシュでも定義して変換しる。
199196:02/06/08 16:52 ID:???
>>198
返答ありがとうございます。
jcode.plのソースには「Code must be JIS or EUC」とあったので
&jcode'sjis2euc(*ss);
&jcode'tr(*ss, 'ァ-ン','ぁ-ん');
&jcode'euc2sjis(*ss);
こう記述したのですが無理でした。
もしかしてとんちんかんな事を書いてますか?
200nobodyさん:02/06/08 17:40 ID:???
>>199
'ァ-ン', ぁ-ん'の部分もEUC-JPであるとしたら、正直お手上げです。
201nobodyさん:02/06/08 18:11 ID:???
>>196
199+200の考えでいいと思いますよ。
'ァ-ン', 'ぁ-ん'をEUC-JPの文字コードで書けばいいんじゃない?
&jcode'tr(*s, "\xHH\xHH-\xHH\xHH", "\xHH\xHH-\xHH\xHH");
HHのとこは16進の文字コードで。
202nobodyさん:02/06/08 19:18 ID:Z1wnMQCd
if (($sec eq "1")or($sec eq "2")or($sec eq "3")){

上の"1" "2" "3"を一つの()内にまとめる書き方ありますか?
203nobodyさん:02/06/08 19:44 ID:???
>>202
簡単な方法は、無い。
1,2,3...が多い場合は、ハッシュを使えば若干パフォーマンスは上がるかもね。

use constant true => 1;
%tbl = (
1 => true,
2 => true,
3 => true,
);

if($tbl{$x}){ ... }
204196:02/06/08 19:51 ID:???
>>201
有り難うございます。早速やってみたところ
カタカナとひらがなを相互に変換してしまいます。
カタカナはひらがなへ、ひらがなはそのままにしたいのですが…

&jcode'sjis2euc(*ss);
&jcode'tr(*ss, "\xa5\xa1-\xa5\xf3", "\xa4\xa1-\xa4\xf3");
&jcode'euc2sjis(*ss);
205nobodyさん:02/06/08 22:37 ID:???
月に2回定刻に起こる条件をifで表したいのですが
第2土曜7時、みたいな感じで・・・
206 :02/06/08 23:21 ID:???
$sec =~ m/^[123]$/
207nobodyさん:02/06/08 23:23 ID:???
>>205
…月1回じゃん
208nobodyさん:02/06/09 00:27 ID:???
なんであーんあーん逝ってるんですか?
悶えてるんですか?
ハァハァ・・・・
209151:02/06/09 00:47 ID:???
遅くなりました。

>>152
>>155
>>157
>>158
ありがとうございました。
210nobodyさん:02/06/09 00:57 ID:???
モジュールなどは使用しないで、ファイルをアップロード出来るフォームを作りたくて、
サンプルなどを見て研究していたのですが、仕組みがよくわかりません。
ファイルを指定する→送信ボタンを押す→指定したフォルダにファイルが保存される
という一番シンプルなソースコードを、どなたか示していただけませんでしょうか。
211nobodyさん:02/06/09 01:11 ID:???
>210
ttp://tohoho.wakusei.ne.jp/lng/199808/98080055.htm
これが参考になるかな?
212Darkness Tester:02/06/09 10:17 ID:???
質問なんですが、CGIの置き方自体が判らないのです
DL・解凍したのはいいのですが、どうすればいいのでしょうか?
213nobodyさん:02/06/09 10:43 ID:???
コマンド上から"a.exe start"と入力すると
"3 + 5 は?"などと返し、
続いて"8"を入力すると"正解"と返すa.exeがあるとします。
このa.exeをPerlスクリプトから
実行するにはどのようにするのでしょうか?
214nobodyさん:02/06/09 11:21 ID:???
>>213
use IPC::Open2
215nobodyさん:02/06/09 11:28 ID:???
>212
配布元サイトで聞く。
大体は配布場所に書いてあるだろう。
少なくともこのスレで聞くのは間違い。
216nobodyさん:02/06/09 21:05 ID:TDG2uPpc
>>212
板違い。初心者板池
217nobodyさん:02/06/10 17:07 ID:???
始めの一歩と思いカウンターを作って見たんですが、おかしな所が2箇所程あります。

1.ロック処理
  カウントファイルを参照できない場合ロックしたまま解除しない。
2."$count_file"を、うまく参照しない。
例)$count_file = "./count.dat";  OK
$count_file = "dat/count.dat"; NG

###################################################
sub count {
#-日時
&form_decord;
#-ホスト
&get_HostAgent;
#-バックアップ用のファイルを開く
open(IN,"$count_file") || &error("カウントファイルエラー");
$ac_data = <IN>;
close(IN);
($ac_count,$ac_ip,$ac_today,$ac_yes,$ac_day) = split(/\t/, $ac_data);

#今日/昨日のアクセス数の設定
if ($mday ne $ac_day) {
$ac_yes = $ac_today;
$ac_today = 0;
}
#-ロック開始
&lock1;
218nobodyさん:02/06/10 17:08 ID:???
続き

#-2重カウント許可
if ($bak_ip){
$ac_count = $ac_count + 1;
$ac_today = $ac_today + 1;
}
#-不許可(IPアドレスで判断)
elsif ($ac_ip ne $Addr) {
$ac_count = $ac_count + 1;
$ac_today = $ac_today + 1;
}

#-ファイルに書き込む
open(IN,">$count_file") || &error("カウントファイルに書き込むことができません。");
print IN "$ac_count\t$Addr\t$ac_today\t$ac_yes\t$mday";
close(IN);
#-ロック解除
&lock2;
}

どこがおかしいでしょうか??
219nobodyさん:02/06/10 17:42 ID:???
>217-218
ロックに問題があるのに、その部分のサブルーチンは出さないわけ?
220nobodyさん:02/06/10 18:02 ID:???
まず、これがオカシイな…
【リテラル】で指定しよう

$count_file = './count.dat';  OK
$count_file = 'dat/count.dat'; OK
221nobodyさん:02/06/10 18:39 ID:???
>>217-218

>#-日時
>&form_decord;
カウンタにデコードはいりませんよね・・?(しかもdecodeのつづりがまちがってる)
おそらくBBSかどっかからのコピペでしょうか。

自作の前にまずはKENTさんのソースをよく読みましょう(Perl神ですので)
http://www.kent-web.com/count/index.html
222nobodyさん:02/06/10 18:45 ID:???
>219-220

$count_file = './count.dat'; 
これが原因でした。参照できない場合でもerror後ロック解除できました。
アリガトウございます
223nobodyさん:02/06/10 18:58 ID:???
>>221
勉強してきます
224pear ◆FRUIT8pk :02/06/10 22:05 ID:???
今までファイルロックなんてしなくてもファイル壊れたことないんですけど、
壊れることってどれくらいあるんですか?
225nobodyさん:02/06/10 22:30 ID:???
>224
運次第。
あと、人気次第。
要するに「同時アクセスが発生するか否か」の問題だから、運が悪ければ
たった二人の来客でもファイルが壊れるし、運がよければ数兆のアクセスが
あっても壊れない。
しかし、アクセスが多ければ確率的にその事故は起こりやすくなる。

ついでに言うと、コーディングの話じゃないからスレ違い。
226151:02/06/11 03:57 ID:zdO5gL3p

>>155さんや>>158さんが新しい問題をくださいまして、またどうしても分からな
くなったので質問です。
今回は『return』についてです。

$year = "2000";
$month = "2";
@MONTHS = qw/0 31 28 31 30 31 30 31 31 30 31 30 31/;
$MONTHS[$month] = &feb($year, $month);
print "$MONTHS[$month]\n";

sub feb {
my ($year, $month) = @_;
if ($month == "2" and &rule($year, $month)) { return 29; }
else { $MONTHS[$month]; }
}

sub rule {
my $year = shift;
return (($year%4) == "0" || ($year%100) != "0" and ($year%400) == "0");
}


サブルーチンからのreturn返り値はどこに戻るのでしょうか。
とりあえず出力するために$MONTHS[$month]に代入することにしましたが、もっ
とシンプルな方法はあるんですか?つまり3行目に示したように代入する先を
$MONTHS[$month]と指定しなくてもよい$_のような特殊変数があるとか…。
また、>>155さんは以下のようにreturnを三つも使っておられますが、この文だ
と結局閏年であってもそうではなくても返り値は0、すなわちこの処理の場合は
常に『偽』が返ると思うのですが、間違ってますか?

sub leap_year {
my( $year, $month ) = @_;
if( $month == 2 && $year % 4 == 0 ) {
if( $year % 100 == 0 ) { return $year % 400 == 0;}
return 1;
}
return 0;
}
227nobodyさん:02/06/11 05:28 ID:???
>>226
> 常に『偽』が返ると思うのですが、間違ってますか?

return $year % 400 == 0; は、まぁ置いといても、
return 1; を無視するのはなぜ?
228nobodyさん:02/06/11 05:48 ID:???
なんで、文字列比較に == 比較演算子使ってるの?
229nobodyさん:02/06/11 06:10 ID:???
>>226
>return返り値はどこに
&feb($year, $month); と &rule($year, $month)のトコ
>シンプルな方法
print feb($year, $month);
>returnを三つも
returnで返した時点でサブルーチンはオシマイ
230pear ◆FRUIT8pk :02/06/11 07:13 ID:???
>225
丁寧にどうもありがとうございます。。
スレ違い。。確かにそうですね、今後気をつけます。。
231nobodyさん:02/06/11 09:29 ID:???
>>151
間違ってます。
前に書かれたけど、月の値は意味がないからそれさえ省けば
ちゃんと閏年を返すよ。

## まず月を抜かして・・・
sub leap_year
{
if( $year % 4 == 0 ) {
if( $year % 100 == 0 ) {
return $year % 400 == 0;
}
return 1;
}
return 0;
}

foreach my $year ( qw/ 1900 1940 1980 1995 2000 2002 2004 / ) {
print "$year = ";
print leap_year($year) ? "leap year\n" : "NOT leap year\n";
}
232nobodyさん:02/06/11 09:30 ID:???
あー、くそ。
>>151じゃなくて>>226だった
233nobodyさん:02/06/12 07:36 ID:???
$ENV{'REMOTE_ADDR'} = $env{'remote_addr'} としても使えますか?
234nobodyさん:02/06/12 07:55 ID:???
>>233
使えません。
235nobodyさん:02/06/12 09:13 ID:???
>>234
試してみれば一発だろうに…
236 :02/06/12 11:39 ID:R7g7sR2X
jperl5+IIS5.0+SSLな環境でファイルを
アップロードさせたいのですが、
6KBぐらいの小さいファイルだとアップ
できるのですがそれ以上大きいのだと
アップロードできず、IEだと「ファイルが
見つかりません」のエラーになります。

# ちなみにSSLでなくても120KBまでしか
# だめなようです。

同じような問題にあたった方いらっしゃいますか?
237nobodyさん:02/06/12 16:38 ID:NJerhR65
perlについて質問です。

月の最後の日が簡単に分かる関数がありますでしょうか?
ありましたら教えて頂きないでしょうか?
また、ない場合は、一番サーバーに負荷を掛けずに(軽い)同じ動作を
させるにはどうすればよいか教えて頂けないでしょうか?

自分なりにも考えてみました。
for ( $i = $mday ; ; $i++ ) {
( $k_sec , $k_min , $k_hour , $k_mday , $k_mon , $k_year , $k_day ) = localtime( time + $i * 24 * 3600 );
if ( $k_mon != $mon ){
last;
}
}
238237:02/06/12 16:40 ID:NJerhR65
追加です。

うるう年は、考えることとします。
そうでなければ、31日の月と30日の月、28日の月と3つに分けてしまえば
簡単にできてしまいます。

よろしくお願いします。
239nobodyさん:02/06/12 16:41 ID:???
>237
まず、うるう年をどうするか。
はっきり言って、配列にでも月ごとの日数を入れるのが一番軽い。
@monthday = (0,31,28,31,30,31,30,31,31,30,31,30,31);
これにうるう年の処理を加えるだけ。
わざわざスクリプトに計算させる必要性はあるのか?
宿題とか?
240nobodyさん:02/06/12 16:42 ID:???
>238
じゃあ、うるう年をどう考えるのか。
今年の2月の日数で求めるのか。
去年の2月の日数を求めるのか。
指定した年の2月の日数を見るのか。
241237:02/06/12 16:43 ID:NJerhR65
>>239
どうもです。
その月の最後の日(日数)を知ることができる関数が知りたかったです。
それがあれば、一番簡単ですから・・・。
でも、ないようですので、 >>239の方法が一番よいようですね。
242237:02/06/12 16:45 ID:NJerhR65
>>240
「今」の月の日数を知りたいです。

あと、用途は、プログラムを組んでいて、月の最後の日の23時〜24時だけは
違う画面を表示させるというものです。
243nobodyさん:02/06/12 16:49 ID:???
@monthday = (0,31,28,31,30,31,30,31,31,30,31,30,31);
$day = $monthday[$mon];
if($mon == 2 && $year % 4 == 0 && ($year % 100 != 0 || $year % 400 == 0)){
  $day = 29;
}
print qq($year $mon/$day<br>\n);

関数はないからこれが一番簡単かな?

しかし、>242のいうのならもっと簡単。
( $k_sec , $k_min , $k_hour , $k_mday , $k_mon , $k_year , $k_day ) = localtime(time);
@localtime = localtime(time+3600);
if($localtime[4] != $k_mon){
  print qq(違う画面);
}

月の最後の1時間を判定するだけなら、これで十分じゃない?
244237:02/06/12 17:09 ID:NJerhR65
>>243
どうもありがとうございました。
245 :02/06/13 00:15 ID:N23nK9SF
あるメールマガジン発行CGIをダウンロードして設置してみました。
ところが、デフォルトの登録ユーザーファイルが、usr.datという名前になっていて、そのファイルを決め打ちでアクセスすると、登録している人のemailアドレスが見れてしまうのです。
外部から見れないようにしたいのですが、そのCGIの説明書では、パーミッションは666にしろ、と書いてあります。
660ではだめなのでしょうか。
それか、ファイル名をaoeriuyba8.datとか、暗号のような名前にすればいいかもしれませんが、探検君とかで見つかりそうな気がします。
246nobodyさん:02/06/13 00:25 ID:???
>245
拡張子を.cgiにしとけ。
247nobodyさん:02/06/13 00:29 ID:???
いや、そもそも Perl の話題じゃないんだYO!

とりあえず設置鯖の仕様(.htaccess可?)を確認しろや
続きは適切なスレでやれ
248151:02/06/13 04:13 ID:???
151です。
ヒントを下さった>>227
『exit』と同じようなものと教えてくれた>>229
例を示してくださった>>231

returnの機能のついでに、評価式の作りかた、それによる分岐のさせかたまで勉
強できました。

後は閏年の数字の関係です…。
400が絡むということは必ず100で割り切れるということだから…
うーん。
この辺は自分で解決します。

ありがとうございました。
249nobodyさん:02/06/13 10:39 ID:???
質問です。
一時ファイル(./tmp/*.tmp)を全削除するのに、
opendir(DIR, "./tmp/");
while ($filename = readdir(DIR)) {
 if ($filename =~ /\.tmp$/) {
  unlink("./tmp/$filename");
 }
}
としてみたが、同じ事を Taintモード下で実現する方法ってありますか?
250nobodyさん:02/06/13 10:58 ID:???
詳しくしらないのだが$filenameを正規表現でキャプチャすれば
いいんじゃないの?

if( $filename =~ /^([^.]+\.tmp)$/ ) {
unlink( "./tmp/$1" );
}
251249:02/06/13 11:36 ID:???
>>250
ありがとうございます!勉強になりました。
252nobodyさん:02/06/13 23:27 ID:gf2d6vJq
$s =~ s/[^\.-z]/\./go;



$s =~ tr/:;<=>?@[\\]^_`/ABCDEFGabcdef/;

って、どういうことをしているんですか?
教えてください。
253 ◆hRKFl5jU :02/06/13 23:32 ID:gf2d6vJq
254レス:02/06/14 00:21 ID:nWmgmUzW
すみません。cgiMLの方で質問していたのですが。
よく分からないのでここでも質問させてください。
掲示板のレス機能のアルゴリズムについて考えていました。
レスをスレに追加して、そのスレをトップに持っていく処理です。
最適な方法やスマートな方法がありましたら教えてください。

・以下、現在考えているアルゴリズムです。
#ターゲット親記事番号
$targetnum = 1;
#テスト用書き込みレス記事 [記事通し番号,レス件数]
$value = "9,0\n";

my @lines = <DATA>;
#レスを書き込み後スレッドをトップに持っていく
$linecnt = 0;
foreach(@lines)
{
($num,$resnum) = split( /\,/, $_ );
if ( $targetnum == $num ){
@sure = splice( @lines, $cnt+1, $resnum ); $resnum++;
unshift( @sure, "$num,$resnum\n" ); push( @sure, $value );
unshift( @newlog, @sure );
$linecnt = $linecnt+@sure;
}else{
push(@newlog,$_); $linecnt++;
}
}
print @newlog;
__DATA__
3,2
6,0
8,0
1,2
4,0
7,0
2,1
5,0
255レス:02/06/14 00:22 ID:nWmgmUzW
ごめんなさい、長すぎました。
256nobodyさん:02/06/14 06:21 ID:???
>>254
すべてのレスを1次元配列@linesに入れてガリガリ処理すると
面倒だし、スクリプトも読みにくいと思う。
レスの配列=スレッド、スレッドの配列=掲示板全体
というデータ構造に直すといいんじゃないか。ちょっと書いてみた。

use strict;
my $targetnum = 1;
my $value = "9,0\n";

# ログを読む
my @threadarray;
my %index_of;
while (my $line = <DATA>) {
  my ($num, $resnum) = split(/,/, $line);
  $index_of{$num} = scalar(@threadarray);
  my $thread = [$line];
  push(@$thread, scalar(<DATA>)) while (--$resnum >= 0);
  push(@threadarray, $thread);
}

#目的のスレッドを切り出し、レスを追加し、配列の先頭に移動
my $thread = splice(@threadarray, $index_of{$targetnum}, 1);
push(@$thread, $value);
my $resnum = (split(/,/, $thread->[0]))[1] + 1;
$thread->[0] = "$targetnum,$resnum\n";
unshift(@threadarray, $thread);

# 出力
foreach my $thread (@threadarray) {
  print "-----\n";
  foreach my $res (@$thread) {
    print $res;
  }
}
257254:02/06/14 07:35 ID:nWmgmUzW
>>256
さっそくありがとうございます。
ソースまで示してくれて感謝。
早速、トレースして理解してみます。

ところで、ログを変更してもいいとしてもこの方法がいいと思いますか?
掲示板には全然手をつけていないので、今ならログ変更はいくらでもOKです。
258nobodyさん:02/06/14 08:44 ID:???
>>257
そのログ形式(>>255)だと、「レスのない親記事」と「レス」は
どっちも$resnumが0になるような気がするが
どうやって区別すんの?
259レス:02/06/14 09:31 ID:AMkrWmqx
>>258
おっ指摘してくれてありがとう。
確かに、区別できないですね。

じゃあ resnamは、親記事自体の番号も含めてってことでおねがいします。
260nobodyさん:02/06/15 00:42 ID:???
>>257
とりあえずその方法で突き進んで、問題あったら変更すればいいんでないの。
そのためにはログフォーマットに依存するコードは極力書かないようにしる。
行をsplitする生のコードをそこら中にちりばめたりすると、後で泣くこと必至。
261nobodyさん:02/06/15 01:14 ID:4GLBjH4I
↓にある「レス付き画像掲示板 imgboard」
ttp://www.big.or.jp/~talk/t-club/soft/mini_r6/index.cgi
をTripodに設置したいんですが、Tripodのcgi規定に
「なお、画像は、セキュリティー上の理由から、cgi-bin以下におくと表示されませんので、
必ずTripod内のcgi-bin以外におくようにしてください。」
とあって、画像保存用ディレクトリimg-boxをcgiと同じ場所に置くことができません。
↓参考のページ
ttp://www.ba.wakwak.com/~chikura/050mypaso14gazoukeijiban.html
も見たんですがうまくいきません。
どうか解決法を教えてください。
262nobodyさん:02/06/15 01:28 ID:???
>261
設置場所のディレクトリ構造は?
263261:02/06/15 01:39 ID:4GLBjH4I
>>262
ttp://www.ba.wakwak.com/~chikura/050mypaso14gazoukeijiban.html
を参考にして、

(url)http://cgi.tripod.co.jp/ユーザー名/cgi-bin/imgboard.cgi
cgi-binフォルダの中は
imgboard.cgi,file.dat,fileback.dat,icon.dat,jcode_sj.pl,imgsize.pl,index.html
の7つのファイルが入ってて、
cgi-binフォルダと同階層にpublic_htmlフォルダを置いて、
その中に画像保存用ディレクトリimg-boxを置いてます。
264nobodyさん:02/06/15 01:52 ID:???
>263
なるほど、、、。
まず、cgi-bin 以下には CGI および データファイルを置くようにしてみてください。
それ以外は、public_html にすべていれるという形態になるのが普通です。
265261:02/06/15 01:58 ID:4GLBjH4I
>>264
cgi-binフォルダの中にはimgboard.cgi,file.dat,fileback.dat,icon.dat、
public_htmlフォルダの中にはjcode_sj.pl,imgsize.pl,index.htmlおよび画像保存用ディレクトリimg-boxフォルダを
置くというかたちになるんですか?

266264:02/06/15 02:02 ID:???
たった今、落として確認してみたら、この index.html ってのは
ディレクトリインデックスの隠し用だったようなので すべて cgi-bin
の中で問題ないようです。
267261:02/06/15 02:11 ID:4GLBjH4I
どうやらTripodがくせもので、
>>264
「なお、画像は、セキュリティー上の理由から、cgi-bin以下におくと表示されませんので、
必ずTripod内のcgi-bin以外におくようにしてください。」
ということで、画像保存用ディレクトリimg-boxをcgiと同じ場所に置かず、
投稿画像の格納ディレクトリ($img_dir = './img-box'; # デフォルト位置)を変更しなきゃならないようなんで、
($img_dir = '/public_html/img-box'; # デフォルト位置)に変更したんですがうまくいきません。
cgiは機能してるんですが、画像がアップロードできません。
img-boxフォルダの中をのぞいても何も入ってませんでした。
268264:02/06/15 02:20 ID:???
ざっとスクリプトに目を通してみましたが、たったこれだけの掲示板で
6300 ステップもあったのでゲンナリしました。

まず、画像の表示は単純に imgタグに直接画像パスを書く方法を採っている
ので HTML と CGI の置き場所が別になっているタイプのサーバではこのまま
では動きません。
269261:02/06/15 02:25 ID:4GLBjH4I
>>264
Tripodはcgiを使う場合のURLが
http://cgi.tripod.co.jp/ユーザー名/cgi-bin/imgboard.cgi
普通のhtmlは
http://members.tripod.co.jp/ユーザー名/
だからHTMLとCGIの置き場所が別になっている訳ですね。
別のサーバー探すしかないか…。
270264:02/06/15 02:26 ID:???
おそらく 167行目を以下に書き替えればいけると思います。

$img_dir = '/ユーザ名/public_html/img-box';
271261:02/06/15 02:43 ID:4GLBjH4I
>>264
だめでした(爆)。サーバー側の問題?
配布されたcgiに「場所の指定方法は通常は相対パスで指定して下さい」とあったので、
ユーザー名は必要ないのかな?
272261:02/06/15 02:45 ID:4GLBjH4I
>>264
絶対パスで正解でした。スマソ。

<以下配布されたcgiより>
あなたのプロバイダが、cgiとデータファイルを同じ場所に置くことが出来ない
特殊なプロバイダ(hi-ho等)で、cgiと同じディレクトリやcgi直下に保存
用ディレクトリを作れない場合、絶対パスによる指定が必要となる場合があります。
この場合、5行ほど前にある$img_dirを絶対パス*指定に書換えて下さい。
273nobodyさん:02/06/15 02:48 ID:mydlqxE+
GD.pmなどのモジュールをインストールするっていうのは、そのサーバの管理者じゃなきゃできないんでしょうか?
それともディレクトリにアップロードするだけでいいの?
274264:02/06/15 02:55 ID:???
そしたらダメもとで以下を試してみては?

おそらく imgタグで .. がNGになる可能性あり。
$img_dir = '../public_html/img-box';

または

ソース内で img-box の存在チェックをしているのでWWWサーバのマウントポイント
からの相対パスを使えないのでダメもとでサーバのディレクトリ構造を推測して以下
のように書けばOKかも。
$img_dir = '/home/ユーザ名/public_html/img-box';
275264:02/06/15 03:02 ID:???
>273
モジュールって使ったことないけど以下を書いてもダメ?

BEGIN{ unshift(@INC, '.'); };
276261:02/06/15 03:07 ID:4GLBjH4I
>>264
ダメでした…。
HTMLとCGIの置き場所が同じサーバー探します。
夜遅くまでご親切に、こんな初心者にお付き合いいただきありがとうございました。
すごく勉強になりました。
277nobodyさん:02/06/15 03:34 ID:???
>>273
*.pmだけで完結してるモジュールは、275の方法でいけるんすけどね。
GD.pmの場合はバイナリコードを作らなきゃあかんかったり、
サーバにないかもしれないライブラリ(libjpeg.soとかlibpng.soとか)を
いろいろ必要とするから、モジュールだけアップロードしても99%駄目。
278レス:02/06/15 07:31 ID:/CDsyhKP
>>260
うんありがとう。
そうですね、splitを多発すると変更がめんどくさいので出来るだけ少なく作ります。
ログの変更を簡単に出来るように考えてつくろう。
また、質問することがあるかもしれません、その時はよろしくおねがいします。
279nobodyさん:02/06/16 08:10 ID:z5KHLw2y
掲示板ぽいものを作ってるんですが、
にちゃんねるみたいに「Shift_jis使ってちょ」ってやりたいんです
で、何も考えずにjcode.plのgetcodeを使ったら、
「(´・ω・`)ショボーン」をeucと認識してしまいました・・・(´・ω・`)ショボーン

半角カナが混じってても、きちんとShift_jisと認識してやるにはどうすればいいでしょうか?
Shift_jisかどうかが分かればいいです。
EUCで書かれた「汐涙維」をShift_jisと誤認識してもいいです。
# '汐涙維'(EUC) eq 'ショボーン'(SJIS)
よろしくおながいします
280nobodyさん:02/06/16 08:59 ID:???
>>279
おれはjcode.plのgetcode関数をちょっと書き換えて
Shift_JISの文字数カウントに半角カナも含めてるよ。

$sjis += length($1) while /(($re_sjis_c)+)/go; #オリジナルのjcode.pl

$sjis += length($1) while /(($re_sjis_c|$re_sjis_kana)+)/go; #修正版

EUC-JPをはねずに通す確率がめたくそ増えるけど気にしない。
あえてShift_JISを使う代償だと思ってあきらめてる。
281nobodyさん:02/06/16 10:16 ID:z5KHLw2y
>>280
なるほど、これはいいですね。
助かりました。
どうもアリガトウ
282nobodyさん:02/06/16 22:36 ID:Us0jeEkd
#!/usr/local/bin/perl
print "Content-type:text/html\n\n";

$xx = "abc";
$yy = "def";

if ( あ eq あ ) {
print $xx
} else {
print &yy
}

このようにしても$xxは表示されないのですが、
あ と あ を比べる方法ってありますか?
283nobodyさん:02/06/16 22:42 ID:???
>>282
ネタですか?
284nobodyさん:02/06/16 22:43 ID:Us0jeEkd
いや、マジやねん
285nobodyさん:02/06/16 22:51 ID:???
>>284
#!/usr/local/bin/perl
print "Content-type:text/html\n\n";

$xx = "abc";
$yy = "def";

if ( 'あ' eq 'あ' ) {
print $xx;
} else {
print $yy;
}

abc って出ましたが。
286nobodyさん:02/06/16 23:01 ID:Us0jeEkd
>>285
あぁ〜文字列はシングルクォーテーションで囲ったらイイんですね??
ありがとうございます!
でも あ を a に変えると囲まなくてもいけるみたいですがなぜでしょう??
aも文字列のはず、、、、
287nobodyさん:02/06/16 23:31 ID:z5KHLw2y
>>284
''か""で囲まないと文字列じゃないぞ・・・
288nobodyさん:02/06/17 00:35 ID:9jM4ZJCT
http://www.mbay.net/~mpeppler/Sybperl/sybperl.html#sybase::dblib

この
NO_MORE_RESULTS
って、どうしてクォーテーションがいらないのでしょう?

289nobodyさん:02/06/17 01:01 ID:rACyARGq
>>288
開けない
290hoge:02/06/17 04:03 ID:aKd0pgn8
sub MOE { "sakura" }
print MOE, "\n";
291nobodyさん:02/06/17 05:46 ID:???
>>286
ぐーぐるさんに聞いて見れば?キーワードはbarewordとperl。
ていうかおれもPerlのbarewordの扱いについてはよくわからn。
292nobodyさん:02/06/17 08:51 ID:???
Perlは「自分の知らない識別子」をクォートされていると解釈するんだよ。

$foo = bar;
$baz = bar::bax;
print $foo, $bar;

だが"sub bar;"やsubsなどで前方宣言されているとこれらはサブルーチンと見なされる。
use strict 'subs'を使うとこのような裸のワードに対して致命的エラーを発生させられるよ。
293nobodyさん:02/06/17 09:06 ID:???
>>292 にもう少し足すとuse strictしててもハッシュキーと=>は特別:

use strict;
my %hash = ( foo => 'bar', baz => 'gad' );
print $hash{ foo }, "\n";
$hash{ baz } = 'boo';

ハッシュキーは基本的に[a-z0-9_]を使ってる限りクオートする
必要はない。また => を使うと、左側のbarewordは自動的に
文字列に変換される。
294nobodyさん:02/06/17 10:21 ID:???
Perl6では>>292的なベアワードの自動クォートは撤廃されるもよう。
(ただし>>293はPerl6でもオーケーっぽい)
ラリーヲールの黙示録2を見よ。
http://dev.perl.org/perl6/apocalypse/2#bareword%20policy

#どこかに黙示録の和訳ってねーですか?あったら教えてください。おながいします。
295nobodyさん:02/06/17 13:21 ID:???
Perl6で撤廃か。まぁ妥当だね。
296nobodyさん:02/06/17 21:33 ID:8ZfnaOKh
簡単なスクリプトでテストしてみても読み書き両用でファイルが開けません。なぜでしょう?
Windows上では使えないのでしょうか?

        ↓
open(FILE, "+>$file");

環境はWin2000+Apache1.3.24です。
297nobodyさん:02/06/17 21:38 ID:???
>296
なにが上手くいかないの?
同じ環境できちんと動くけど。
まさか保存されてるファイルが読み出せないとかじゃないよね?
だって最初に初期化してから書き読みモードで開いているんだから。
読み書きモードじゃなくて。
開けないって言ってるから、openが失敗してるんだよね?
ファイルの作成もできないんだよね?
そうだよね?
298nobodyさん:02/06/17 21:46 ID:???
>>297
いぢめすぎ(w
299296:02/06/17 21:49 ID:8ZfnaOKh
たとえばこんな感じにしてもファイルは作成されるのに空のファイルなんです・・。
A
A  予想ではAが縦にならぶはずだと思うんですけど・・
A

open(IN, "+>$file");
@data = <IN>;
$data = "A\n";
unshift(@data, "$data");
print IN @data;
close(IN);
300a:02/06/17 22:28 ID:???
ある某ゲーム(バトルロワイアル)を自分のホムペに乗せたいのですが...
初心者なので何をしてよいのかまったくわかりません。
教えてください。お願いします
301nobodyさん:02/06/17 22:37 ID:???
ゲーム厨房消えろお願いするな乗せるな氏ね。
302nobodyさん:02/06/17 22:46 ID:???
>299
書き読みモードと読み書きモードの違いってわかる?

書き読みモードの手順
空ファイル作成>ファイル読み書き

読み書きモードの手順
ファイル読み書き

それと、ファイルポインタの変更しないと色々問題出るぞ。
わからないなら無理に読み書きモードは使わない方がいいかも。
303296:02/06/17 23:12 ID:???
>>302
>書き読みモードと読み書きモードの違いってわかる?
ありがとうございます。分かってなかったですね。。
それでいろいろやってみて

open(IN, "+<$file");
@data = <IN>;
$data = "A\n";
unshift(@data, "$data");
seek(IN, 0, 0);
print IN @data;
close(IN);

これで動くようになりました。「+<」←これ手持ちの本に載ってなかった・・(´Д`;)
304nobodyさん:02/06/17 23:41 ID:/p2D1YQW
Perlとちょっと関係ないですが、
全ての環境変数を表示した際、他人に見られるとマズイ情報ってありますか?
305お頼み申す:02/06/18 02:03 ID:giO2VPVu
掲示板に関して一つアドバイスを願いたいんです。

普段は掲示板のタイトルが見られる。
でも書き込み(新規スレ立て、レス共に)はログイン/認証しないと
できないというような物はありますか?
探し続けて見あたらず無理なのかなと諦め気味。
いかがでしょうか?
306nobodyさん:02/06/18 02:23 ID:zmbvlCMy
探すより作った方が遥かに早い罠
というか100%すれ違いです。
307nobodyさん:02/06/18 03:40 ID:7mI4OrKx
aska(http://www.kent-web.com/bbs/aska.html)の
i-mode版(http://red.tomato.nu/desperado/software/)に、
i-PADv2(http://www.kent-web.com/bbs/ipad/ipad2.cgi)みたいに
返信がいくつ返ってきてるかわかる表示を加えたいんですが・・・
308nobodyさん:02/06/18 04:28 ID:???
>>307
で?どこまで自分でやったんだい?
309nobodyさん:02/06/18 04:45 ID:???
>>307
一日中掲示板に張り付いて誰かが返信する度にキミが書き換える。
310nobodyさん:02/06/18 08:36 ID:???
>>307
マルチ氏ね
311nobodyさん:02/06/18 10:45 ID:???
お前ら、【Perl】と関係ない質問は放置してください。
312nobodyさん:02/06/18 13:03 ID:???
あほな質問で済みませんが
Jcode.pmってActiveperlにはインストールできないんでしょうか?
313nobodyさん:02/06/18 15:36 ID:???
>>312
出来ます。オフィシャル嫁。
314nobodyさん:02/06/18 16:38 ID:OAKwZ56o
Win+Apache環境で ScriptInterpreterSource registry でスクリプトを実行する場合、
#!/usr/bin/perl -w のオプションは機能しませんよね?(実際機能してないようなので。)
315314:02/06/18 16:44 ID:???
#!/usr/bin/perl ←これ自体なくても動くようなのでコメントアウトされてるみたいですね。
316nobodyさん:02/06/18 18:21 ID:???
質問です。

use strict;

my ($a, $b);
local $c;

$a = 2;
$b = 3;
$c = $a + $b;

print "Content-type: text/html; charset=EUC-JP\n\n";
print $c;

こうすると
Global symbol "$c" requires explicit package name at (eval 1) line 6.
Global symbol "$c" requires explicit package name at (eval 1) line 10.
Global symbol "$c" requires explicit package name at (eval 1) line 13.
こういうエラーが出るのですが、すべてレキシカル変数にすると動きます。
なぜローカル変数だとuse strictでエラーが出るのでしょうか?
実際のスクリプトは複雑でどうしても$cをローカル変数で使いたいのです。
どうすればグローバル変数を使わずに正常に動かすことができるでしょうか?
317nobodyさん:02/06/18 21:52 ID:???
>>316
なぜエラーになるかは、perldoc strict を読むべし。
「variable suicide問題を避けるため」らしい。よくわからんけど。

どうしてもlocal変数を使わなくてはいけない場合は、
use vars ('$c', '@array', '%hash'); # perl5.0
または
our ($c, @array, %hash); # perl5.6
みたいに、最初に変数名を宣言(というかシンボルテーブルに登録)しておく。

以上、経験則のみで答えますた。詳しくは識者の登場を待て。
318nobodyさん:02/06/18 22:39 ID:???
>>317
ありがとうございます。

>use vars ('$c', '@array', '%hash'); # perl5.0
>または
>our ($c, @array, %hash); # perl5.6
これでいけました。恥ずかしながら今まで知らなかったので(汗)、これを機に勉強してみます。
319nobodyさん:02/06/19 01:44 ID:nhdfxt0t
モジュールのインストールをしようとして、
make testをすると、『Test/More.pmが見つかりません』というようなことを言
われます。More.pmは何かのファイルに同梱されてるのでしょうか?
一応以下のURLを探してみたのですが、見つかりません…。
http://www.cpan.org/modules/by-module/

どなたかMore.pmがある場所を教えて下さい。
320nobodyさん:02/06/19 02:03 ID:???
321nobodyさん:02/06/19 02:32 ID:???
>>320
解決しました。
Test-Moreはもう古く、入れるならTest-Simpleでやってくれと
言われて、Test-Simple-0.44.tar.gzを入れました。
うまくいきました。

ありがとうございました。
322nobodyさん:02/06/19 19:05 ID:oqQh34R0
<img src ="test.cgi">でCGIを呼び出して
画像を表示させたいのですが上手くいきません

print "Content-type: image/gif\n\n";
open(IMG,"test.gif");
binmode(IMG);
binmode(STDOUT);
print <IMG>;
close(IMG);

KENTカウンタからそれらしい部分を
抜き出してみましたが動きません
画像はとほほカウンタのを使ってテストしてるので
変なヘッダーが入ってるということはないと思います。

http://www.angelfire.com/ak5/2ch-web-program/kako/957208980.htmlの
600も試してみましたが動きません…。
誰か助けてください…。(;´д`)

#画像表示すらできない自分が情けない(´Д⊂
323:02/06/19 19:28 ID:???
直接その test.cgi をURLリクエストして確認してみては?

みたところおかしな部分はないようです。他の部分ってことない?
324nobodyさん:02/06/19 19:29 ID:???
>>322

> print <IMG>

↑この部分を↓こう変えてみそ

while ( $cb = read( IMG, $data, 2048 ) ) {
 print $data;
}
325LWPを使ってみたいのですが:02/06/19 21:29 ID:FGMnMj5W
>>273-277を読みました。

LWPをダウンロードしてきたけど、なんかひとつのpmファイルになってないようで
そのまま使えそうにありません。

使用してるのはwakwakのCGIなので使用条件が載っているページを見てみたのですが
perl5.6で標準ライブラリ?は利用できるようです。
で、標準ライブラリにあるか
試しにuse LWP::Simple;でCGIを動かしてみたのですが、内部エラーになりました。

LWPは、この環境では使うことはできないのでしょうか?

・インストールする方法(できないと思うが)
・インストールせずにデレクトリに配置して動かす方法
・他のCGI可無料HPですでにLWPがインストールされてるのでそこを使うといい
等々、なにか良い方法はないのでしょうか?

使うのは多分LWP::SimpleでHTMLドキュメントを引っ張ってくるだけです。
326322:02/06/19 21:51 ID:???
>>323-324
ありがとうございます。
原因はわかりませんが、両方の方法を試してみて
ダメだったので元に戻したら表示されました (´∀`;)意味わかんねス

327nobodyさん:02/06/19 22:33 ID:???
>>325
LWPはperlコードだけで構成されてるから、自分で入れることも可能だと思う。
ただしLWPが入ってないサーバつーのは、そもそもソケットの使用を禁止してる場合も多い。
そんときはLWPを入れても無意味。
328LWPを使ってみたいのですが:02/06/20 00:34 ID:XCYMLnG6
>>327

use Socket; 自体は動作しますが、Socketで通信を許しているのは localhostへのsmtp/tcpのみとなります。
だそうです。

これって望み薄ですか?
ちなみにやり方間違ってるっていうチョンボはしてませんよね?(僕)
ただuse LWP::Simple;としているだけなのですが・・・
329LWPを使ってみたいのですが:02/06/20 01:43 ID:+cy8aoAH
イチかバチか入れてみました。
自作CGIのでバック設定というのができるみたいで
それを使ってやってみました。

最初は、HTTP/Statusのパスがうまく行っていなかったようなので
@INC追加したら、そこはクリアできました。

ただ
unless(defined($content = get $url)){
のところで
Can't call method "get" on an undefined value
が出てしまいました。これは無理と言うことでしょうか?
330nobodyさん:02/06/20 07:49 ID:???
>>328-329
>Socketで通信を許しているのは localhostへのsmtp/tcp
駄目ジャン。
smtp/tcpってメール送信用のポートだし。localhostのみだし。
331LWPを使ってみたいのですが:02/06/20 15:27 ID:zhAJDQeR
そうですか(トホホ

どっか、CGI可無料HPでできそうなところないですかね。
332nobodyさん:02/06/20 19:54 ID:???
自鯖たてろ
333nobodyさん:02/06/21 03:04 ID:???
ActivePerl 5.6.1 build 633
334nobodyさん:02/06/21 03:40 ID:ovOj5UMI
PERLでBEEPの制御ってできますか?できないっすよね。。
335nobodyさん:02/06/21 06:01 ID:???
もっと自信を持って発言しろよ。
できないYO!!
336nobodyさん:02/06/21 06:03 ID:???
っていうかBEEPって知らないYO!!!
337nobodyさん:02/06/21 06:26 ID:???
>>334
print "\a";
こういうことじゃなくて?
338nobodyさん:02/06/21 09:43 ID:???
>>333
ActivePerlの(マイナーチェンジの)変更履歴ってどこにあるんだろ…。
英語ワカラソ
339nobodyさん:02/06/21 11:37 ID:Qqq2SOCG
単語をどうやって発音したらよいかがわかるサイトってどっかありませんか?

Array→アレイ とか
$→スカラー とかいうふうに。

require ってどう発音していいかわからないんですよ(汗)。
340nobodyさん:02/06/21 11:41 ID:???
辞書で発音記号見ましょう $→スカラーって読むわけじゃないし
341nobodyさん:02/06/21 12:10 ID:???
その発音記号が読めないんです。あうう。
342nobodyさん:02/06/21 12:19 ID:???
>341
発音記号の読み方を勉強しましょう。
343nobodyさん:02/06/21 13:39 ID:???
う。マジメに発音記号の読み方を勉強しはじめてしまいました。

普通、発音記号の読み方って授業でやるもんですか?
うちんとこやらなかったんですよ。
商業科だったんで。

parentsとかも、その<p>で始まるやつ!親っていう意味だ! と、いう覚え方してるもんなあ……簡単なのは読めるんですが。
344nobodyさん:02/06/21 13:43 ID:???
どうやってよむんだ? っていう続きで、
chdirとか。
Change Directoryの略でええんかい? とか。
まあ、いろいろと疑問があったんで、そういうの解説してるようなサイトとかないかなーって前から思ってたんですよ。
345nobodyさん:02/06/21 13:48 ID:???
>343
商業化の中学校なんてあるのか。

>344
その単語で検索をかけるとかしてみた?
ttp://www.google.com/search?as_q=chdir+change+directory&num=100&hl=ja&ie=UTF-8&oe=UTF8&btnG=Google+%E6%A4%9C%E7%B4%A2&as_epq=&as_oq=&as_eq=&lr=lang_ja&as_ft=i&as_filetype=&as_qdr=all&as_occt=any&as_dt=i&as_sitesearch=
1520件もひっかかるんだけど。
346nobodyさん:02/06/21 13:50 ID:???
>345 =~ s/商業化/商業科/;
小学校からやり直してきまつ。
347nobodyさん:02/06/21 16:22 ID:???
>>345
chdir、
意味は知ってるんですけど。
音の発音が。

直でよむとチヂラ(藁<ソレハイカンダロウト
348nobodyさん:02/06/21 16:24 ID:???
>>345
引っかかりはするんですが、大量に引っかかりすぎてみつけられなかったのですわ(苦藁
349nobodyさん:02/06/21 16:45 ID:???
>347
発音記号は英和辞典に載ってる。
読め。

>348
一番上にひっかかるサイトにかなり載ってる。
読め。

じゃなければ検索用語に他のコマンドも入れてみろ。
頭使え。
350nobodyさん:02/06/21 17:26 ID:???
chdirなんかを口に出して言う機会はほとんどないが、
脳内では「しーえっちでぃあ」って言ってる・・・(w
351nobodyさん:02/06/21 20:55 ID:???
何故か脳内では"チディル"だな。
口に出すときは"チェンジディレクトリ"だけど。
352nobodyさん:02/06/21 20:59 ID:YFodOum0

英語圏ではちだーですね
353nobodyさん:02/06/21 21:20 ID:???
英語圏だけど「しーえいちでぃあ(←うーん、微妙に違うな)」だな。
354nobodyさん:02/06/21 21:52 ID:???
自分で書いたモジュールで
Makefile.plっていうのは自分で書かなきゃきけないんですか?
自動で生成するツールはないでしょうか?
355nobodyさん:02/06/21 22:11 ID:???
>>354
一応h2xsっつーユーティリティがPerlについてくるが、
Makefile.PLなんてそんな面倒なモンでもないだろ。
356354:02/06/21 22:35 ID:???
>>355
ありがとんヽ(´ー`)ノ 
357nobodyさん:02/06/22 00:31 ID:???
ActivePerl-5.6.1.633-MSWin32-x86.msi
挿れようとしたらインストールが完走しない…鬱
358nobodyさん:02/06/22 00:38 ID:???
>>357
ペッティングが足りないんだよ
359nobodyさん:02/06/22 00:42 ID:???
>>358
完走しました?
360 :02/06/22 01:03 ID:???
>>357
俺はできたぜ
361nobodyさん:02/06/22 01:15 ID:???
わけわからんっ音符
362nobodyさん:02/06/22 01:58 ID:???
>>360
激しく感謝!!

よく見たらHDD残量が150MBしかなかったので、足りない悪寒でした。
(−_−)ウツダシノウ
嗚呼、10MBもあるドキュメン入れたくねぇ…
363nobodyさん:02/06/22 09:50 ID:???
ちょい質問。
ActivePerlって下の環境残したまま上書きインストール出来るっけ?
最新版にしたくてもそれがほそろしくて試せない…
364nobodyさん:02/06/22 10:40 ID:KPuvG/sZ
「Web クライアント プログラム」(オライリー・ジャパン)の 例題 hcat.pl
use LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;

my $ua = new LWP::UserAgent;
my $request = new HTTP::Request('GET', $ARGV[0]);
my $response = $ua->request($request);

if ($response->is_success) {
print $response->content;
} else {
print $response->error_as_HTML;
}
で、
hcat.pl http://www.hyuki.com/dp/dp.jpg > dp.jpg
とすして、dp.jpgを見ると、ちゃんとした画像になりません。
どうしてでしょうか。教えてください。
環境は、ActivePerl v5.6.1 built for MSWin32-x86-multi-thread、
windows2000 professional です。
365xx:02/06/22 10:49 ID:???
ちゃんとした画像にならないということは、ぐだぐだな画像になってしまうのか、
開けないけど容量はあるってことだろうから、ファイルハンドルを binmode
すれば?
366 :02/06/22 12:03 ID:???
>>363
できるけどオススメしない。
367nobodyさん:02/06/22 12:11 ID:???
>>363
旧Ver.に戻すのは簡単
ttp://downloads.activestate.com/
368べっくあむ:02/06/22 12:16 ID:9y/Dp6Qo
PerlのDBIを使って、MySQLを操作しようとしています。
書籍やインターネットでやり方を調べていく中で、次のような
注意事項が記載しているものを見つけました。

1:$dbh = DBI->connect(****);
2:$sth = $dbh->prepare(*****);
3:$sth->execute();
4:$sth->finish();
5:$sth = $dbh->prepare(*****);
6:$sth->execute();
7:$sth->finish();
8:$dbh->disconnect();
の様に一回のDBコネクション中で2回のコマンド発行を
するときは、一回目(上記2〜4)と二回目(上記5〜7)で
ハンドル変数名を変えなければならない(例えば5〜7は
$sthではなく、$sth2にする)というものです。

自分の環境下の簡単なプログラム中では問題なく
動いているのですが、本当に注意すべき内容なのでしょうか?
369nobodyさん:02/06/22 14:04 ID:fNvTUaUi
                           __
..⌒ヽ           ' ⌒ヽ          /.|:::::::::::|
乂乂||          |乂乂||        |  |:::::::::::|
乂乂||          |乂乂||        |  |:::::::::::|
乂乂||          |乂乂||   ___|_|:::::::::::|____
乂乂||          |乂乂||  /|::::::::::::::::::::::::::::::::::::::::::::::::::::::::|
 ̄ ̄            ̄ ̄  i  |::::::::::::::::::::::::::::::::::::::::::::::::::::::::|
      _____         .|/ ̄ ̄ ̄../|:::::::::::| ̄ ̄ ̄/
     ||L L | L L ||        ̄ ̄ ̄ ̄|  |:::::::::::| ̄ ̄ ̄
     ||L L | L L ||               |  |:::::::::::|
     ||L L | L L ||_________ .|  |:::::::::::|
===========l| L L l================= i  |:::::::::::|
二二二二二二ヽ   iヽ二二二二二二二二i  |:::::::::::|
:::::::::::::::::::::::::::::::::::i   ヽ|     _____.i  |:::::::::::|
 ̄ ̄ ̄ ̄ ̄ ̄ ̄\  ((( )))_______|  |:::::::::::|
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|......( ´Д`)._____|  |:::::::::::|__
::::::::::::::::::::::::::::::::::::::::: |  /  (S)::::::i\  ....|  |:::::::::::|  \
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| .\ ....\|:::::::::::|    \
      ____/|____  .|   .\    ̄ ̄
     /
     | Perlスクリプトから、2ちゃんに書き込める方法を教えてください。
     \_______________
370永久会員パスが書き込みするだけで当たる:02/06/22 14:12 ID:E0ppwG7L
http://s1p.net/rvvvvh

 http://s1p.net/tyyopp

わりきり出会い
   
   UG-S的出会い

   PCのみ受付中  
男性、女性書き込み
キャンペ-ン中
 おかげさまで5000HT
ラッキナンバー
(111,333,555,777,999)
男性、女性書き込み するだけ
当選者には永久会員パスワード
と1万円プレゼント!!
371nobodyさん:02/06/22 14:57 ID:???
>>368
別に変えなければ動かないということはないけど違う用途の
(ハンドル|オブジェクト|数|文字列|・・・)を同じ変数に代入して
変数を使いまわすのは間違いをおかしやすかったりとあまり良い
スタイルとは言えないかも。

(同様に$sth1、$sth2という名前もお勧めできない)
372nobodyさん:02/06/22 19:01 ID:PwKD5Bpr

$dir = ディレクトリ 、 $file = 数字

open(DATAOUT, "+< $dir . $file . '.dat'") || die &Error;

えっとこういう処理があるんですが、読み書きモードでファイルを開けないんです。
というかファイル名を認識してくれないみたいです。

open(DATAOUT, $dir . $thismonth . '.data') || die &Error;

↑このように読み込みモードだとちゃんと認識してくれるんですが、読み書きモードでちゃんと
認識するようにするにはどうすればよいでしょうか?

いろいろ "" を '' にしたり、. を \. にしてみたりしたんですがうまくいきません・・。
お願いします。
373nobodyさん:02/06/22 19:36 ID:???
>372
もうちょっとダブルクォーテーションについて考えてみた方がいいぞ。

open(DATAOUT, "+<$dir$file\.dat") || die &Error;
374372:02/06/22 19:42 ID:???
>>373
おぉ〜〜〜できましたっ!! ありがとうございます!

>もうちょっとダブルクォーテーションについて考えてみた方がいいぞ。
はい考えてみます (´Д`;;)

ありがとう。
375アルバムモナ:02/06/22 19:57 ID:sE7wyej0
JPEGの縦横サイズを吐き出すライブラリがほしいのですが下記で見つけたものでは
Exif形式に対応してなくて困っています。
下記のものを改造してExif形式にも対応させたいのですがどのようにしたらいいでしょうか
教えてください。
http://www.aleph.co.jp/~fujiwara/perl/get_imgsize.pl
376べっくあむ:02/06/22 21:20 ID:9y/Dp6Qo
>>371
ありがとうございます。
動作上は問題ないと言うことですね。

>変数を使いまわすのは間違いをおかしやすかったりとあまり良い
>スタイルとは言えないかも。
確かにこんな変数名では、ちょっとしたタイプミスで、
見つけ難いバグを自らの手で作ってしまいますよね。
気をつけてみます。
377nobodyさん:02/06/22 21:20 ID:???
>>375
そんな3年も前の化石なんか使うなよ。
これじゃだめなのか。
http://search.cpan.org/search?dist=Image-Size
378nobodyさん:02/06/22 22:37 ID:???
掲示板で、半角カナが文字化けしてしまうことがあるんですが、対策とかないですか?
半角カナを全角に変換とかはしたくないんですけど。。
379xx:02/06/22 23:26 ID:???
>378
サーバの環境および現在のフォーム出力文字コードぐらいは書いてもらわないと、、、、
380nobodyさん:02/06/23 18:26 ID:izD8oNpG
win2kのCドライブにapache1.3.26、ActivePerl-5.6.1ビルド631をインストールしました。
Dドライブにある下記のようなCGIスクリプトをapache経由で実行したら、
. のみでした。

そこで、コマンドプロント上で「perl inc.cgi」と実行したら、
ちゃっんと
C:/usr/local/lib
C:/usr/local/site/lib
.
とでます。

apache経由でも
C:/usr/local/lib
C:/usr/local/site/lib
.
になるようにできますか?

-----
#!/usr/bin/perl
print "Content-type:text/html\n\n<xmp>";
for(@INC){
print $_,"\n";
}
exit;
------
381nobodyさん:02/06/23 18:30 ID:jOy7H3G4
>>380
原因はよくしらないがperl -Iでどうかね。
それか@INCに対しpushするか。
382nobodyさん:02/06/23 18:38 ID:???
>>380
まったく同じ環境でちゃんと表示されますが。
383380:02/06/23 19:00 ID:???
原因がわかりました。
perlをc:/usr/local にインストールしたのですが、
/usr/bin/perl のスクリプトでも使えるように、
C:/usr/local/binをc:/usr にコピーしてたのが原因だったようです。


#前まではできてたのになぁ。。。
384nobodyさん:02/06/24 01:51 ID:???
while(<>){
$n=pack "h*", "$_";
print $n;
}
で読み込んだテキストを元にもどす方法ってどうやるんですか?
while(<>){
$n=unpack "h*", "$_";
print $n;
}

じゃだめなんですけど
385nobodyさん:02/06/24 03:26 ID:???
>>384
それpackとunpackの使い方が逆でない?
while (<>) { print unpack("h*", $_); } # テキスト→16進
while (<>) { print pack("h*", $_); } # 16進→テキスト
386nobodyさん:02/06/24 18:03 ID:pso5a6KF
perlのファイル書き込み時にわたしはいつも
open(DATA, ">$cdata")|| &write_error;
flock(DATA, 2);
print DATA @newdata;
flock(DATA, 8);
close(KDATA);
などとしています。
このflockは排他処理には役に立たないような事がよく
書かれていますが全く役立たないのでしょうか?
なにも処理しないよりはマシという程度ですか?
387nobodyさん:02/06/24 18:21 ID:???
>flock ってのは「このファイルは俺が使うから誰も触るなよ」
>って宣言するだけです。礼儀正しい人は「もう触ってもいいよ」って言われるまでは触りません。礼儀正しくない人は構わず触っちゃいます。ただそれだけです。つまり、単なる紳士協定。OK?
># これ以上簡単な説明は出来ないよ。

過去スレのJAPUさんのセリフより。
388nobodyさん:02/06/24 18:41 ID:kznFdEhQ
>>386
flock(DATA,8);は別にいらん
389nobodyさん:02/06/24 19:35 ID:???
>>386
全体を見ないと確かなことは言えないけど、
書き込みのときだけロックしてもだめ。
データの読み出しから書き込みまで、
ずっとロックし続けないと排他処理にならない。
390nobodyさん:02/06/24 21:50 ID:???
ロック厨が多いな。集まれ〜♪
【Perl】ファイルロック(排他処理)について語ろう
http://pc.2ch.net/test/read.cgi/php/1024795138/
391386:02/06/24 21:52 ID:pso5a6KF
>>387-389 皆さんのご意見とてもためになりました。
ありがとうございます。
>>388さん そうなんですか、知りませんでした。
>>389さん これも驚きました。読み込みの時はflock使ってませんでした。
本に書いてあるものをそのまま参考にしていました。
わたしの使い方は問題あるんですね。もう少し調べてみようと思います。
392nobodyさん:02/06/24 22:32 ID:???
おいおいマジでレベルが下がったな。
>>386のロックが役に立たないってのは
open HANDLE, ">file"; # まずfileの中身を空にして開く、と…
flock HANDLE, 2; # ロックするかな

このopen & truncateが問題だろ。
正しくは

open HANDLE "+<file"; # 読み書きモードで開く、と…

>>386の方法でも何もしないよりはマシかもしれんが、
確実に効果がある、とは程遠かろう。
393nobodyさん:02/06/24 22:49 ID:???
flockはやっぱダミーのファイル用意して、
それをopen(&flock)してる間に処理、っていうのがいいんじゃないかな。
394nobodyさん:02/06/25 13:52 ID:???
http://pc.2ch.net/test/read.cgi/php/1019561283/850 へ。

そういう場合は、やはりgrepでしょう。
@URI = grep { s/^Location_URL=(.*)/$1/ } @list;
395あっちの850:02/06/25 15:42 ID:???
>>394
なるほど。どうもありがとうございます。
396nobodyさん:02/06/25 15:48 ID:???
>>394
grepで元の配列を壊すのはいかがなものかと。
@URI = grep { /^Location_URL=(.*)/ } @list;
397396:02/06/25 16:00 ID:???
スマソ、396は忘れて。
ところで元の配列を壊さずに一部を取り出す一番効率の良い方法ってどんなんだっけ…。

@URI = map { substr $_, 13 } grep { /^Location_URL=(.*)/ } @list; # じゃないよな…
398394:02/06/25 16:24 ID:PBYsCZmL
う。ソウダネ>破壊マズー
元を壊さずにそれ(>>397)より効率のいい方法ってあるんかいな。
399fusianasan:02/06/25 16:51 ID:???
>397
59点ってとこだな。
400nobodyさん:02/06/25 17:02 ID:???
実はmapはgrepとしても使える罠
@URI = map{ /^Location_URL=(.*)/ ? $1 : () } @list;
401nobodyさん:02/06/25 17:11 ID:???
>>400
それ知らなかったよー。兄ちゃんありがと。
402perl5.6.1:02/06/25 21:24 ID:???
このままだとtruncate()が絶対に失敗するんですが。
失敗しなくするにはどうすればいいですか?
#!/usr/bin/perl -w
use strict;

sub t($);

open(F, "+<in.txt");  # aが30個くらい並んだだけのファイル
t(*F{IO});
close(F);

sub t($)
{
  my $f = shift;
  truncate($f, 10) || warn("error");
}
403nobodyさん:02/06/25 22:16 ID:???
>>402
*F{IO}は型グロブではなく、リファレンスだから、
デリファレンスする必要がある。
truncate(*$f, 10)
404nobodyさん:02/06/25 23:21 ID:???
>>403
402じゃないけど質問させてください。

open F, ">file.txt" or die;
my $fh = *F{IO};
print {$fh} "test\n" or die;
truncate *$fh, 10 or die;
close $fh or die;

このコードで、printやcloseは$fhでも*$fhでもオーケーなのに
truncateだけは*$fhしか指定できないんですが、どういうこと?
405nobodyさん:02/06/25 23:25 ID:???
>>404
Perlのバグっぽい気が。
尤も、生のIOオブジェクトを使うと、Tieによるオーバーロードが効かなくなるんで素人には(略
406404:02/06/25 23:35 ID:???
うわ。すばやいレスありがとうございます。
実は402を見てからperlrefとか読んでいろいろ実験してたので、
まだIOオブジェクトがよくわかってないのですが、
これがバグとわかれば安心して眠れます。
407nobodyさん:02/06/26 03:05 ID:???
>>402 >>404
なんでそんなわかりにくいもん使うの?オブジェクト使いたかったら
素直にIO::Fileとか使えばいいのに・・・
408perl5.6.1:02/06/26 07:02 ID:???
>>404
printに*$fhって渡せました?
おれの環境では下のコードはsyntax errorになるんです。
#!/usr/bin/perl -w
use strict;
my $stdout = *STDOUT{IO};
print *$stdout "test\n";   # print $stdout "test\n";なら大丈夫

>>407
モジュールの使い方を調べたり覚えたりするのが面倒だっただけです。
*FOO{THING}自体はそんなに分かりにくいものでもないし。

関係ないけど、sort { $a <=> $b } @f;の方が分かりにくいです。
use strict;なのに$aと$bは宣言しなくていいのは何、みたいな。
409nobodyさん:02/06/26 09:25 ID:???
>>408
use IO::File;

my $fh = IO::File->new( $filename ); ## open()と基本的に同じ
print $fh "foobar\n";

のどこが面倒くさいのだろうか。少なくともグロブがなんちゃらとか
考えるよりかはるかにシンプルだと思うんだけどな。大体perldoc perlref
を読んでる暇があるのにperldoc IO::Fileが面倒くさいのもわからんし。

まぁ使いたくなかったらそれはそれでいいんだけど。素直に使ったほうが
楽だし、そのほうがPerl コミュニティのカルチャーにそってると思う。
410404:02/06/26 09:37 ID:???
>>408
print関数の第1引数は、シンボルでもスカラ変数でもない場合は
ブロックに入れないと構文エラーになるよ。(昨日覚えた)
print {*$stdout} "test\n";

>>409
ほっといてくれー。こういう瑣末なことを調べるのが趣味なんだよー。
たぶん408の人も、おれと同じタイプ。
あ、もちろん実際にスクリプト書くときは素直にIO::File使います。
411nobodyさん:02/06/26 12:14 ID:???
>>410
ああまぁ趣味のスクリプトとかならいいんですけどね。
プロダクションコードでそういうのを見たくないのでとりあえず
牽制した、ということで。
412nobodyさん:02/06/26 15:38 ID:1ADBKX33
自分でちまちま作ったCGIを公開しようと思ってるんですが
(公開といっても使うのはネットの仲間だけ)これだけはしちゃイカン!って
処理とかあるんでしょうか?cgiのバグでunixコマンドを打てるとかっていうのが
気になるんですけど。
413 :02/06/26 15:49 ID:???
>>412
>cgiのバグでunixコマンドを打てる
とんでもないのがあるじゃねーか!
414nobodyさん:02/06/26 15:50 ID:???
>>412
-Tスイッチをつけないで実行しちゃいかん。

何をすべきでないのかわからないなら、これは必須。
415nobodyさん:02/06/26 16:55 ID:???
#!/usr/bin/perl -UX
416nobodyさん:02/06/26 17:29 ID:ZfGn23SZ
>>414
>>412じゃないんですが -T スイッチってどんなものなんでしょう?

-wスイッチはつけるようにしてるんですけど -T スイッチは見たことがありませんでした・・。
417416:02/06/26 17:36 ID:ZfGn23SZ
あっ調べてみたらありました。
http://tech-web.net/perlmania/perlrun2.html
汚染チェックをオンにするとか書いてますけど、なんだろう・・?
つけておいたほうがいいのかな。
418nobodyさん:02/06/26 17:39 ID:???
罵倒覚悟で聞きます
Perlで2chのDAT直読みは無理なんでしょうか?
User-Agent: Monazilla/1.00 (toolname/ver) ←こうゆう風にしても
無理なんですけど、、。
419nobodyさん:02/06/26 18:17 ID:???
Accept-Encoding: gzip
は?
420nobodyさん:02/06/26 18:26 ID:???
別に罵倒するつもりはありませんが、普通に取得できましたが・・・
URLが間違ってるとかそこら変チェックした方がいいかと思います。

#!/usr/bin/perl
use LWP::UserAgent;

my $ua = new LWP::UserAgent;
my $request = new HTTP::Request('GET', 'http://pc.2ch.net/php/dat/1022731565.dat');

$ua->agent('Monazilla/1.00 (libwww-perl/5.65)');
$response = $ua->request($request);
print $response->as_string;
421418:02/06/26 18:37 ID:???
>>420
謝謝、
URLが間違ってたみたいです。
Perlでは規制がかかってると思ってあきらめてたんですが、、よかった。
422412:02/06/26 18:50 ID:1ADBKX33
>>414
1行目を#!/usr/bin/perl -T にするって事でしょうか?
unixコマンドを打てる、というバグを発生させないためにはどうすれば
どんな点に注意すればいいんでしょう?
バグというか、何も対策してないcgiだとアドレスのcgi-bin/xx.cgi?の後ろに
いろいろへんなのを入力するとunixコマンドを打てるとかいうバグがある話を
聞いたんですが。
423nobodyさん:02/06/26 18:58 ID:???
>>422
あなたきもい
424nobodyさん:02/06/26 19:25 ID:???
>>422
いっぱい情報あるから検索すれ。キーワードは「脆弱性」「CGI」等。
425fusianasan:02/06/26 19:28 ID:???
>422
要は、ブラウザ側で入力された値をチェックしないでそのまま以下のような
関数に渡さなければいいだけ。

open
exec
system
qx//
eval
``
426nobodyさん:02/06/26 19:47 ID:CyvQGqzW
grepもマズーじゃねーの?
427nobodyさん:02/06/26 20:55 ID:???
>>422
そのほか、クロスサイトスクリプティングにも注意。
たとえば、User-agentを内容をチェックせずにそのまま出力しちゃだめ。
ttp://www.ipa.go.jp/security/awareness/vendor/programming/a01_02.html
428nobodyさん:02/06/26 23:02 ID:???
バグじゃないだろ…
429nobodyさん:02/06/26 23:13 ID:???
>Unixコマンド実行
それがバグだったら世界中のPerlUserが嘆くことになるな。
430nobodyさん:02/06/27 01:16 ID:riwIozkn
質問です。

$a = '&xyzあいうえお<A href="http://www.xxx.com">リンク</A>';

$a =~ s/&[^lt;|^gt;]/&/g;

こんな感じで文字列の < と > 以外の & を & に置換したいのですが、
上のようにすると & の次の文字(ここでは x)が消えてしまいます。
どうすれば &xyz とすることができるでしょうか?
431429:02/06/27 01:19 ID:riwIozkn
あぁ・・失敗したのでもう一度かかせてください・・

$a = '&amp;xyzあいうえお&<A href="http://www.xxx.com"&>リンク&</A&>';

こんな感じで文字列の &< と &> 以外の & を &amp; に置換したいのですが、
上のようにすると & の次の文字(ここでは x)が消えてしまいます。
どうすれば &amp;xyz とすることができるでしょうか?
432nobodyさん:02/06/27 01:19 ID:???
$a =~ s/&([^lt;|^gt;])/&amp;$1/g;
433nobodyさん:02/06/27 01:21 ID:???
ちなみに、どっちにしろこれじゃあ思う通りの効果はえられないと思う。
434430と431:02/06/27 01:22 ID:???
>>432
うわ〜〜〜もうお答えいただきました(´∀` )ノワーイ!
ありがとうございます。ちゃんとできました。
435nobodyさん:02/06/27 10:09 ID:???
>>432
それって違うと思うけど・・・

$a =~ s/&(?!=lt;|gt;)/&/g;

じゃないの?[]で囲んだらcharacter classになっちゃうじゃん。
432の正規表現では&のあとの文字がg,l,t,;,|,^だったら&
に変換されないぞ(例:&lz; &gxcv; &;;; )
436nobodyさん:02/06/27 10:15 ID:???
あ、すげー間違った。すまぬ。

s/&(?!lt;|gt;)/&/g;
437nobodyさん:02/06/27 10:16 ID:???
ありゃ?あ、そうか。&amp;amp;ってかかなきゃいけないのか・・・
438430と431:02/06/27 16:35 ID:???
>>436
それで完璧にできました。ありがとうございます。

正規表現勉強しないと(°_°;A)アセ
439nobodyさん:02/06/27 17:36 ID:???
すみません。消費者を騙し、クレームをつけると強烈な脅しで黙らせる位の
ひどいサイトがあります。思いきってサイト(HDD)をクラッシュさせたいのですが、
何かいい方法はあるのでしょうか?
こちらのIPとか所在がわからないようにしたいのです。
こう言う質問にお答えとなると問題がある場合、こういった専門サイトとかがあれば
お教え頂けないでしょうか。
440nobodyさん:02/06/27 17:43 ID:???







???
縦読みじゃないのか
441nobodyさん:02/06/27 17:58 ID:???
>>439 
俺はここの一流ハッカーに頼んでHDDを爆発させてもらったよ
http://www.qudsway.com/Links/Doctor/4/Html_Doctor4/4hdo9.htm
442nobodyさん:02/06/27 19:54 ID:???
特殊変数 $# はどのように利用するのでしょうか?
「出力時の数値形式」ということまでは分かったのですが...。
443nobodyさん:02/06/27 20:11 ID:???
>>442
-wスイッチの元で警告されるように、$#の使用はお勧めできない。
Cレベルでの内部操作だから簡単にDLLエラー(Unixだとコア吐くのかな?)を出せるしな。
それでも使いたければ:

$# = '%.3g';
print 8/9;
444trrh:02/06/27 23:55 ID:mvLF/G5v
while (<file1>){
$file1++;
}
close(file1);


while (<file2>){
$file2++;
}
close(file2);

while (<file3>){
$file3++;
}
close(file3);


while (<file4>){
$file4++;
}
close(file4);

上記のソースを短く出来ませんか?
445nobodyさん:02/06/28 00:03 ID:???
446nobodyさん:02/06/28 00:26 ID:???
447nobodyさん:02/06/28 17:06 ID:???
$mes = '787+8787';
$paturn = '787+8787';
quotemeta $paturn;

if ($mes =~ /$paturn/){
print "Match!\n";
} else {
print "Oops!\n";
}

これだとマッチしないのですが、どうすればエスケープ出来るでしょうか
quotemetaの使い方を間違えてんのかなあ・・
448nobodyさん:02/06/28 17:09 ID:???
でけますた
\Q\E だた・・
perlは忘れ易いよ
449japh ◆J.5V8ta6 :02/06/28 20:48 ID:???
>>447
quotemeta()の使い方間違えてるよ。

$quoted = quotemeta $string;

chop(), chomp()等と違って元の文字列は置き換えないからね。
450nobodyさん:02/06/28 21:59 ID:???
>>447
わざとなのかもしれないけど、paturn はちょっと恥ずかしいね。
451nobodyさん:02/06/28 22:43 ID:ZifxuKsx
foreach $mon(@logs) {
 @mon = split(/,/,$mon);
 $mon{$mon[1]}++;
}

3行目では何が起こっているのでしょうか?
452&r:02/06/28 22:51 ID:???
ハッシュ%mon を利用して、配列 @logs の第2フィールド値の出現回数を
取得しているといったところでしょうか。
453451:02/06/28 23:30 ID:???
>>452さん

出現回数ですか。
どうもありがとうございます。
454nobodyさん:02/06/29 00:03 ID:kfva2Nvg
質問です。
ppmでsearchを実行しても全く反応がないのです・・・

PPM> search
PPM>

のように、なってしまうのです・・・DBIをインストールしたいがために四苦八苦しているのですが、
どうしても上手いこと行きません・・・もちろんdbi.zipを直接DLして
ppm install dbi.ppd
等も試してみましたが
Could not locate a PPM binary of 'dbi.ppd' for this platform
とエラーが出てしまいます(涙

どうにか対処法を教えて貰えないでしょうか・・?
環境はwin2k perl-v5.6.0 for MSWin32-x86-multi-thred ppm(2.1.2)です
455nobodyさん:02/06/29 02:19 ID:???
>>454
install DBI
でいけないか?
456こここ:02/06/29 02:20 ID:8vz7q6tH
kentwebのCOSMO GATE-EXをエクスリアで設置したけど、
説明の通りに設置して、チェックモードでもOKとでたんだけど

Authorization Required
This server could not verify that you are authorized to access
the document you requested. Either you supplied the wrong creden
tials (e.g., bad password), or your browser doesn't understand
how to supply the credentials required.

ってでる。
何が悪いのかわかります?
457nobodyさん:02/06/29 02:24 ID:kfva2Nvg
>>455
ダメです・・・
Installing package 'DBI'...
Error installing package 'DBI':Could not locate a PPD file for package DBI
となります・・・
ネットは常時接続なので、当然繋がったまま実行しているのですが・・・
(。´Д⊂)゜。・ こまった
458nobodyさん:02/06/29 02:27 ID:???
>>456
認証でもかけてるの?
459こここ:02/06/29 02:28 ID:8vz7q6tH
>>458
そうです
460nobodyさん:02/06/29 02:31 ID:???
>>457
えーなんでだろう。じゃあppm使わずに
perl -MCPAN -e shell
って打ってから
install DBI
461nobodyさん:02/06/29 02:40 ID:???
>>457
わかった。常時接続ならプロバイダかどっかのPROXY通してるでしょ。
それ一時的に外してみて。
462nobodyさん:02/06/29 02:46 ID:???
>>459
認証を通過できなかっただけじゃん
463補足:02/06/29 02:52 ID:???
http://aspn.activestate.com/ASPN/Downloads/ActivePerl/PPM/
> PPM doesn't work through a proxy/firewall.
> This can be remedied by setting the environment variable 'HTTP_proxy' to the name and port of your Internet proxy, e.g.:
> C:\> set HTTP_proxy=http://proxy:8080
> If your proxy or firewall requires a username and password, you will also need to set the environment variables 'HTTP_proxy_user' and 'HTTP_proxy_pass'.

多分これね
464こここ:02/06/29 02:52 ID:8vz7q6tH
げげげっ!?
本当だ。
今まであると思ってたIDとパスがなかった・・・
とにかく今やったら出来た。
nobodyさんありがとう!!!
465nobodyさん:02/06/29 03:21 ID:???
nobody さん?(w
466nobodyさん:02/06/29 07:00 ID:???
         ここかが引き篭もりの巣ニダか!!
               ∧∧
     |\       <ヽ`∀´>         /|
     ヾ  ̄ ̄ ̄ ̄ ̄    ̄ ̄ ̄ ̄ ̄ ̄ ̄ /
       ̄ ̄ ̄ ̄ ̄ ̄|  | ̄ ̄ ̄ ̄ ̄ ̄ ̄
               |   |
        / ̄ ̄ ̄ ̄\/ ̄ ̄ ̄ ̄ ̄\
       __/ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\ .\__  ドドン!!
___<__)__________ (__>___

467nobodyさん:02/06/29 12:54 ID:xVhrnBTO
CGIでメインの掲示板やゲームのサブルーチンが入ってるサブのCGIファイルで
こいつらの属性を変えてやれば処理を軽くすることはできますか?
初心者なもんで質問が意味不明かもしれません…(汗)
468&r:02/06/29 12:57 ID:???
>467
ほんとに意味不明だからびっくりしたYO!
469あSD:02/06/29 13:16 ID:IbvPgwu5
470nobodyさん:02/06/29 13:19 ID:???
>>467
うん、意味不明だ
471nobodyさん:02/06/29 16:51 ID:???
Perlの事で質問です。
初歩的な事で申し訳ございません。
name1<>host1<>ip1<>111<>
name2<>host2<>ip2<>222<>
name3<>host3<>ip3<>220<>
name2<>host2<>ip2<>200<>
name2<>host2<>ip2<>222<>
name3<>host3<>ip3<>220<>
とログファイルに保存をしてありまして、
それぞれの一番右の数の合計を出すにはどうすれば宜しいのでしょうか?
472nobodyさん:02/06/29 17:01 ID:???
ホストごとにまとめたい、ということ?
473471:02/06/29 17:03 ID:???
>>472
はい。そうです。
出来ますでしょうか?
474nobodyさん:02/06/29 17:05 ID:???
>473
>451が参考になるよ。
あれをちょっといじればいい。
475&r:02/06/29 17:07 ID:???
>471
こんな感じでしょうか?

$sum+= (split(/<>/))[$[+3] for <DATA>;
__DATA__
name1<>host1<>ip1<>111<>
name2<>host2<>ip2<>222<>
name3<>host3<>ip3<>220<>
name2<>host2<>ip2<>200<>
name2<>host2<>ip2<>222<>
name3<>host3<>ip3<>220<>
476471:02/06/29 17:25 ID:???
>>474
それは、その感じでまる2日ぐらい悩んだんですが出来ませんでした。
>>475
今、試してみましたが一番右の数の全部の合計した数が出てきました。
477nobodyさん:02/06/29 17:36 ID:???
>476

> 1:自分はこう言う事がしたい。
> 2:それでこんな風にやってみたが・・・
> 3:それだとこんなエラーが出て上手く行かなかった。
>
> 1と3が無いと誰も答えられないよ。
> 良い回答は良い質問から。一緒に勉強しましょう。

1はあるけど2と3がないな。
478nobodyさん:02/06/29 17:39 ID:???
結論出すと、

while(<IN>) {
 @host = split(/<>/,$_);
 $host{$host[0]} += $host[3];
}

かな?
479nobodyさん:02/06/29 17:45 ID:???
>>477
おいおい。まる2日分のなんや事を書けっていうのかちみは?
480&r:02/06/29 17:52 ID:???
>478
そうだね。うっかりホスト毎ってのを見逃してた。修行してくる。
481471:02/06/29 17:55 ID:???
>>479
んーと別に大丈夫ですよ。質問の仕方が悪いのは僕の方です。
>>477
今まで答えて頂けたことは全て一通りやってます。
エラーは出ませんでした。出たとしても;を:と間違えた等その位です。
482471:02/06/29 17:59 ID:???
>>478
出来ませんでした。
483471:02/06/29 18:02 ID:???
>>478
host3の合計しか出ませんでした。
484&r:02/06/29 18:04 ID:???
>482
ハッシュの参照のしかたわかる?
ファイルハンドルが478ではINになっているから統一しているか確認して、
とりあえず以下のようにして出力して確認されない?
for ( keys %host ){
    print $_,': ',$host{$_},"\n";
}
485471:02/06/29 18:04 ID:???
野郎℃も出来たぜ!!
Thanks!!!!!!!!!!!!!!!!!!!!!!!!
黄金帽と呼んでくれ!!!
486nobodyさん:02/06/29 18:06 ID:???
@host1 = grep { /^name1<>.*<>.*<>.*<>/ } @_;
@host2 = grep { /^name1<>.*<>.*<>.*<>/ } @_;
@host3 = grep { /^name1<>.*<>.*<>.*<>/ } @_;

foreach(@host1){
m/^name1<>.*<>.*<>(.*)<>/;
$count1 += $1;
}

これじゃ非現実的だな。スマソ
487471:02/06/29 18:07 ID:???
>>485
??
>>484
出来ました。ご丁寧に説明をして頂きありがとうございました。
488nobodyさん:02/06/29 20:03 ID:A6ruKh9P
B83W59H86(14歳)セルフヌード衝撃うp祭り開催中!!
http://tmp.2ch.net/test/read.cgi/mog2/1022943102/l50
489nobodyさん:02/06/29 20:32 ID:YfnrInm/
perlからcの関数(*.aとかlibの)を使用する方法を教えてください。


490nobodyさん:02/06/29 20:40 ID:???
>>489
ム板とWebProg板にマルチポストか。おめでてーな。
491nobodyさん:02/06/29 20:47 ID:???
うるせえよ

>46 :デフォルトの名無しさん :02/06/29 19:00
>>>1
>だいたいPerl関連はWebProg板でやるきまりなんだよ
>そっちへ逝け
492nobodyさん:02/06/29 21:30 ID:???
うがー。ム板のほうにレスつけちゃったよ。
じゃ490はマルチした罰として↓の48に答えること。命令。
http://pc.2ch.net/test/read.cgi/php/997829243/n48-
493490:02/06/29 21:37 ID:???
何故俺が罰を受けねばならんのだ…ウワァァァァン(`Д´)
494492:02/06/29 21:41 ID:???
ス、スマソ…。>>493
495nobodyさん:02/06/30 06:36 ID:???
open関数が失敗するときは、
・ファイルが存在しない
・パーミッションがおかしい

以外にありえるのでしょうか、おねがいします
496495:02/06/30 06:36 ID:wtzA9nm5
あげときます
497nobodyさん:02/06/30 09:04 ID:???
>>495
・メモリが足りない
・opcodeの実行が禁止されている
498nobodyさん:02/06/30 11:08 ID:???
>>497
ファイルを開きすぎとかは?
499nobodyさん:02/06/30 11:54 ID:???
>>498
そういえばそれもあるか
500nobodyさん:02/06/30 12:37 ID:???

今だ!200番ゲットォォォッ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
     ∧∧   )      (´⌒(´
  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
        ̄ ̄  (´⌒(´⌒;;
      ズザーーーーーッ

501nobodyさん:02/06/30 12:38 ID:???
欝…番号間違えた(泣

>>495
あと、既にファイルが排他モードで開かれてるってのは?
502nobodyたん:02/06/30 14:21 ID:???
排他モードで開くなんてのはあるのかな?
排他モードでロックしているというのはあるが。(その場合でも open は可能)
503nobodyさん:02/06/30 14:41 ID:???
>>495
【Perl】ファイルロック(排他処理)について語ろう
http://pc.2ch.net/test/read.cgi/php/1024795138/
も参照してみては?
504nobodyさん:02/06/30 15:34 ID:???
ここにいる人は>>492の質問には答えられないレヴェルなのですね。
ファイルロックなんてどうせ巷の解説サイトみればすむことなのに、、。
505nobodyさん:02/06/30 15:58 ID:???
>504
492は質問ではなく誘導ですが…。
巷の解説サイトにあるファイルロックできみは納得して満足してるんだろうね。
そのサイト教えて。
506nobodyさん:02/06/30 16:50 ID:???
>>505
>>3-4 ぐらい読め。バーカ
507nobodyさん:02/06/30 16:59 ID:???
504=506?
だから、きみが納得して満足してるであろう巷の解説サイトを教えて。
どこ?
508505 ◆EPPSxEpw :02/06/30 17:18 ID:???
http://www.bayashi.net/st/pdmemo/filelock.html
↑適当にグーぐるしてください
 ファイルロックは専用のスレもあります
 >>504の解説してください。
509nobodyさん:02/06/30 17:36 ID:???
>508
そのリンクってはじめて見させてもらったけど大崎さんのスクリプトに
なんで余計なプロセス番号($$)付けてあるの?積算秒を付ける意味を
理解できてないの?
これがきみの言う「巷の解説サイトみればすむ」ってこと?

504の解説:
>ここにいる人は>>492の質問には答えられないレヴェルなのですね。
505に書いたとおり、「492は質問ではなく誘導です」
510nobodyさん:02/06/30 17:46 ID:???
> 付加する数字文字列がtime関数だと秒単位なので、
> まだ完全ではないのではないかという疑問が残ります。

何が疑問なのかが疑問です。
511nobodyさん:02/06/30 18:08 ID:???
>510
この板でこのレスの速さは508さん自身のサイトだったってことかな?

ロックできるかどうかのテストと実際にロックする操作を同時に行なう
ことができる atomic な関数 を使っているからロックが成功するのは
1プロセスであり、そういう意味では同じ名前にロックファイル名に
リネームしてもよいということ。
ここで、なぜ積算秒を付け足したロックファイル名にリネームするかと
いうと、もしデッドロックが残っても作成してから60秒よりも経過して
いるかどうかを確認するからです。

つまりプロセス番号($$)を付ける意味がまったくわたしには理解できません。
512nobodyさん:02/06/30 18:19 ID:???
>510
付け足すけどよく見たらさ。
ロック中ファイル名って、$lfh{path} . time . $$ だから
/^$lfh{basename}(\d+)/でマッチさせた $1 って time . $$ の値になる
可能性が大きいよね。(Windows系だと$$は-nnnnnnみたいな形式だったりする
けどさ)
でもその直後に平気で積算秒から $1 の値を引いてタイムアウト値と比較してる
からデッドロックをこれじゃ回避できないんでは?
513508 ◆EPPSxEpw :02/06/30 18:49 ID:???
あーわかったからファイルロックはあっちでやれ。
http://pc.2ch.net/test/read.cgi/php/1024795138/
どうせカウンターにしかつかっとらんのやろ。
ほかになんにファイルロックつかっとるのか知りたいDBとか?
>>508のサイトはgoogleでファイルロックで検索したら一番手前にあったから貼った。
------------------------------------------------
俺はXSについて聞いてんだ。
514nobodyさん:02/06/30 19:14 ID:???
>513
カウンタ程度ならむしろ使わないほうがいいだろう。うっとうしい。
まぁ、使うとしたら電子商取引システムを構築するときに使うかもな。
さっきのアドレス、きみのサイトだったらなおしとけよ。はずかしいから。

きみの検索でほんとにさっきのサイトがトップでヒットしたんなら、検索能力を
養ってから吠えるこったな。まずこれでも見ておれ。

%perldoc -m perlxs
515508 ◆EPPSxEpw :02/06/30 19:40 ID:???
まぁ言い争いはよそうや(*゚ω^)ノ
この板に電子商取引システムを構築したりする人間がいるなら
XSぐらい楽勝だろ。
516nobodyさん:02/06/30 19:52 ID:???
ロックスレの存在意義が今わかった。隔離病棟なんだね。。。

>>515
で、なに質問してるんだっけ。ていうかあなた質問者本人?
perlxstutの説明に沿ってHello Worldとか作ってみた?
517508 ◆EPPSxEpw :02/06/30 20:00 ID:???
>>516
見てもいまいち分からんとです。
解説サイトみても解説のみでサンプル載ってないし
518japh ◆J.5V8ta6 :02/06/30 20:56 ID:???
>>517
perlxstutのサンプルじゃ不満だと?
http://www.kt.rim.or.jp/~kbk/perl5.005/

もっと突っ込んだサンプルが欲しいなら、
CPANから適当なXSモジュール落として参考にすれ
519nobodyさん:02/06/30 22:15 ID:???
508はネタ荒らしか?天然か?
http://members.tripod.co.jp/ms_mzn/
520pear ◆FRUIT8pk :02/07/01 05:54 ID:???
$ENV{REMOTE_HOST} が返ってこないサーバーがあって、
問い合わせたら、「そんなことはない、ソース見直せ」って
言われたんですけど、このソースで表示されなかったらおかしいですよね?

#!/usr/bin/perl

print "Content-type: text/html;\n\n";

print "<html><body>";

foreach (sort keys %ENV){
print "\$ENV{$_}:$ENV{$_}<br>\n"
}

print "</body></html>";

exit;

これは何かこちらのソースに問題があるのでしょうか
よろしくお願いします。
521nobodyさん:02/07/01 08:04 ID:???
>>520
HostnameLookups off
最近はデフォルトでオフだしね。
http://httpd.apache.org/docs/mod/core.html#hostnamelookups

CGIスレの方が良かったかも。
522&r:02/07/01 11:41 ID:???
>520
なんでキーを出力させてないの? たしかにREMOTE_HOSTがない場合もありうる
だろうけど

print "$_: $ENV{$_}<br>\n"
523pear ◆FRUIT8pk :02/07/01 12:27 ID:???
>521
最近のapacheではホスト名は取得できないということでしょうか。。
>522
一応、キーは \$ENV{$_} で、表示されています。
524nobodyさん:02/07/01 15:00 ID:???
特定の座標を中心とした5x5のマップを表示させたいのですが。
マップの情報が
123456789
123456789
123456789
123456789
123456789
123456789
123456789
とあってたとえば5,3だとしたら
34567
34567
34567
34567
34567
みたいな感じに表示させたいです。
でも、存在しない座標が含まれていたら表示しないようにしたいです。
参考になるようなページでもいいのでお願いします。
525nobodyさん:02/07/01 16:15 ID:???
>>524
マップの外周に2マス分の余白を持たせるのはどうすかね。
余白は0とか-1とかの特別な値で埋めておく。
526nobodyさん:02/07/01 17:34 ID:???
>>524
なんか宿題っぽいよなぁ・・・
まぁまずこういう構造体があったとして・・・

my @foo;
for my $idx1 ( 0..9 ) {
$foo[$idx1] = [];
for my $idx2 ( 0..9 ) {
$foo[$idx1][$idx2] = "$idx1$idx2";
}
}

で、まぁそしたらこんな感じか

sub print_matrix_range
{
my $matrix = shift;
my( $x, $y, $range ) = @_ ? @_ : (0,0,$#{$matrix});

my $xstart = $x - $range >= 0 ? $x - $range : 0;
my $ystart = $y - $range >= 0 ? $y - $range : 0;
my $xend = $x + $range <= $#{$matrix} ? $x + $range : $#{$matrix};
my $yend = $y + $range <= $#{$matrix} ? $y + $range : $#{$matrix};

for( my $curx = $xstart; $curx <= $xend; $curx++ ) {
for( my $cury = $ystart; $cury <= $yend; $cury++ ) {
print $matrix->[$curx][$cury],
$cury == $yend ? "\n" : ' ';
}
}
}

print_matrix_range( \@foo, 5, 3, 2 ); # 5=両方向に2マスだから

書き写しに失敗してないといいんだが。
527質問です。:02/07/01 21:51 ID:X3MphqPi
今、HP作っているのですが、
この下のメタタグはどうゆう役割をするのですか?
御答えくださいませ。

<META NAME=robots CONTENT="http://**************/">
528nobodyさん:02/07/01 21:52 ID:???
>>527
スレ違い板違い検索しろそして死ね
529nobodyさん:02/07/01 21:53 ID:YKfyV+9J
同意
530名無し募集中。。。:02/07/01 21:55 ID:POquGnWB
はじめまして。質問です。

perlを使って、Submitボタンを押さずにデータをcgiに受け渡すことって
可能でしょうか?
531nobodyさん:02/07/01 21:57 ID:???
xxx.cgi?530=dqn&1=sine
これで出来るじゃん。
532名無し募集中。。。:02/07/01 21:57 ID:POquGnWB
>>531

レスどうもです。
すいません、getじゃなくて、postっていうの忘れてました。
533名無し募集中。。。:02/07/01 22:03 ID:POquGnWB
ムリなんかなぁ。。。
534nobodyさん:02/07/01 22:03 ID:???
無理だと思われ。
535名無し募集中。。。:02/07/01 22:08 ID:POquGnWB
>>574

マジっすか。さんくすこ。
あと、折角きたんでもう少し知恵貸して頂いていいっすか?
536nobodyさん:02/07/01 22:09 ID:???
うむ。
537名無し募集中。。。:02/07/01 22:11 ID:POquGnWB
やろうとしてるのは、シタラバで板の変更に際してスレッドを移動させたいんで
旧板のスレから名前とレス抜き出して、外部から新板にカキコ。

とりあえず、gabri dukeと外部のhtmlでsubmitおしての投稿は成功したんで
なんとかperlで自動的に書き込みって可能にならないっすかね?
538名無し募集中。。。:02/07/01 22:12 ID:POquGnWB
>>536

どもです。537っす。読みにくい文章でスマソ。
539名無し募集中。。。:02/07/01 22:19 ID:POquGnWB
ムリポでしょうか?
540nobodyさん:02/07/01 22:21 ID:???
漏れにはわからないけど、ほかの人はわかるかも。
またーり待たれることを推奨する。
541名無し募集中。。。:02/07/01 22:23 ID:POquGnWB
>>540
マターリ待ってみまふ。どもっす。
542nobodyさん:02/07/01 22:40 ID:133+Yg1+
>>537
logファイルを移動するだけじゃダメなの。
543nobodyさん:02/07/01 22:42 ID:???
手軽にPOSTするなら毎度おなじみLWP::UserAgentかな…。
perldoc lwpcook読んでみなはれ。
544名無し募集中。。。:02/07/01 22:43 ID:POquGnWB
>>542
管理人が板放棄したんで糞スレ乱立、勝手に板移転するんす。。。

>>543
さんくす、調べてみるっす。
545名無し募集中。。。:02/07/01 23:09 ID:POquGnWB

むずい、、、。postのcgi間のデータ受け渡しとLWP::UserAgentを
説明してるページ教えていただけると助かりまふ。おながいします。
546nobodyさん?:02/07/01 23:34 ID:???
547nobodyさん:02/07/02 05:39 ID:???
>526
なんかうまく言ってない気がします。

マップのデータを1行づつ配列につっこんでやればできるのだろうか…
548nobodyさん:02/07/02 07:25 ID:???
>>545

自分のBBSに移すなら直接LOG弄ってアプ出来ないの?
つーか連続投稿如きでLWP使わなくて良いと思うけど
LixyとかChannnelとかの厨房ツール拾って来てそれ弄れば良いじゃん?
549nobodyさん:02/07/02 11:37 ID:???
>547
「なんかうまくいってません」←コレ典型的な厨の応答だよ?
そんだけじゃ、読んでるこっちには何もわかんないのよ。
バカが直るまでお前は発言禁止。
550nobodyさん:02/07/02 12:05 ID:uXcHDU9t
>>547
「だろうか…」 ←これもな。独り言を書くな。
551nobodyさん:02/07/02 12:54 ID:???
>>547
それに加えて526のソースも厨だからしょうがないか。
552nobodyさん:02/07/02 14:32 ID:???
>>544
ふつーLWPでGETしてログ再生成、んでもってうpだろうが。
553nobodyさん:02/07/02 15:50 ID:???
>>549-550
すいません厨丸出しでした。
ちょっと質問の仕方を変えてみます。(526さんのだと特定の組み合わせしかだめっぽかったので)
マップデータが(例えばです。)
@map = (
'0000000000',
'1111111111',
'2222222222',
'3333333333',
'4444444444',
);
と入っている場合に>>524のようなことがしたいです。
554nobodyさん:02/07/02 17:11 ID:???
>>553
部分マップを別配列に切り出す方向で考えてみた。

my $map_width = length($map[0]);
my $map_height = scalar(@map);

sub max { $_[$_[0] < $_[1]]; }
sub min { $_[$_[0] > $_[1]]; }

sub trim_map {
 my ($x, $y) = @_;
 my $x1 = max(0, $x - 2);
 my $x2 = min($map_width, $x + 2);
 my $y1 = max(0, $y - 2);
 my $y2 = min($map_height, $y + 2);
 return map { substr($_, $x1, $x2 - $x1 + 1) } @map[$y1 .. $y2];
}

my @mini_map = trim_map(5, 3);
print "$_\n" foreach @mini_map;
555553:02/07/02 17:53 ID:???
>>554
うまく動いてるみたいです。ありがとうございました。
556nobodyさん:02/07/02 18:08 ID:???
みたい?(w
557526:02/07/02 20:12 ID:???
結局何がうごいてなかったんだ・・・だいたい一緒に見えるんだがなぁ。
558nobodyさん:02/07/02 20:46 ID:???
初心者です。よろしくお願いします。

$host = $ENV{'REMOTE_HOST'};

で取得したホスト名$hostがaaa.bbb.ccc.dddとなっている場合に
bbb.ccc.dddの部分だけを表示する方法を教えてください。
559nobodyさん:02/07/02 21:20 ID:???
=~ s/.*\.(.*\..*\..*)/$1/;
560558:02/07/02 23:20 ID:???
>559 さん

ありがとうございました。
561nobodyさん:02/07/02 23:33 ID:???
($host)= $ENV{'REMOTE_HOST'}=~ /^[^\.]+\.(.*)$/;
562nobodyさん:02/07/03 05:04 ID:???
1.更新履歴のページを作成しましたが、HTMLにして、更新の度に手を加えるのは面倒なので、cgiにしました。
第三者からは見れない入力ページから文章を打ち込み、公になるのはcgiが吐き出した更新履歴ページのみ。

2.で、スクールに通った時作成した、掲示板を改良したが、タグが禁止なのと、<br>が吐き出されて改行位置がおかしくなるので、
以下の処理を丸ごと削除しました。

foreach($text1,$cont){
s/&/&/g;
s/"/"/g;
s/</</g;
s/>/>/g;
s/\r\n/<br>/g;
s/\n/<br>/g;
s/\r/<br>/g;
s/,/、/g;
}

3.構文エラーはなく、動作はしますが、一行置きに改行が入ったり、更新する度に一番新しい記事が何度も表示されたり
と言った具合でお手上げです。超初心者ですみません。この部分だけでは判断できないものでしょうか?
何か解決策ありましたらよろしくお願いします。
563nobodyさん:02/07/03 05:36 ID:???
それだけじゃ、良く解らないよ。取り敢えず、<br>の置き換えだけ残せや
それと、君の質問内容だと perl がほとんど解ってないように見受けられるし、
基本的な所から勉強しようという姿勢も見られないから、まともな解答を
得るのは難しいと思われ
564nobodyさん:02/07/03 12:09 ID:???
>>562

s/**/**/g;
↑は確かに置き換えだが、置き換えられた結果がどこに行っちゃうのだろう。
565nobodyさん:02/07/03 12:18 ID:???
$_
566nobodyさん:02/07/03 12:35 ID:6OBUBtca
クエリーで送られてきた複数のvalueの値だけを切り出したいですが
うまくいきません。どうすればよいですか?

$buffer = $ENV{'QUERY_STRING'};
@buf = split( /&/ , $buffer );
foreach $data ( @buf ){
( $name , $value ) = split( /=/ , $data );
};
567nobodyさん:02/07/03 12:45 ID:???
>>566
なんで初心者に限って自分でやろうとするのかね。
素直にCGI.pmかcgi-lib.plあたり使え!
568nobodyさん:02/07/03 12:45 ID:???
$buffer = $ENV{'QUERY_STRING'};
@buf = split( /&/ , $buffer );
foreach $data ( @buf ){
( $name , $value ) = split( /=/ , $data );
$FORM{$name} = $value;
};
569nobodyさん:02/07/03 12:51 ID:???
@list = values %FORM
570nobodyさん:02/07/03 13:02 ID:???
cgi-lib.plのコードって効率悪いな。
もう過去の遺物か?
571nobodyさん:02/07/03 13:20 ID:???
>>570
じらすためにわざと効率悪くつくってあることもしらないの?
572566:02/07/03 13:20 ID:6OBUBtca
>>567
なんと便利なものが・・・知りませんでした
勉強してみます。
>>568-569
それで漏れのヴァージン作品がやっと動きました。感激

Thanx ALL
573562:02/07/03 15:37 ID:???
>>563-564
どうもすいませんでした。
perlは確かに初心者ですが、何ぶん急いでたもので、、。
御指摘もっともです、すみません。もうちょっと初歩から勉強してみます。
ちなみに改行の件はperlの方ではなくhtmlの
<textarea>タグ内のwrap="hard"をとったら、解決しました。
出直してきます。
574nobodyさん:02/07/03 18:21 ID:???
>>570

最適化してうpキボン










できればの話だけどね

575nobodyさん:02/07/03 20:49 ID:???
>できればの話だけどね

( ´,_ゝ`)プッ
576nobodyさん:02/07/03 21:51 ID:???
最適化なんかしないでそれくらい自分で書けよ。
書き方わかんなきゃ検索でもしてみろ。2510件ヒットしたぞ。

まぁ、ほとんどはたいしたこと書いてないページだが比較的ましなページが
3つほどあるだろう。
577 ◆qXAQxUxI :02/07/03 22:59 ID:???
578nobodyさん:02/07/04 06:54 ID:wzRa2QN/
i-modeで動くCGIでリンク元へ戻るボタンを付けたいのですが
JavaScriptのrefferが使えないので困っています
他にはどんな方法がありますか?
教えて下さいおながいします。
579578:02/07/04 06:58 ID:wzRa2QN/
付けたし説明です
どのページに戻るかは、そのときによって違いますので
<a herf="リンク元のURL">は使えません
580nobodyさん:02/07/04 07:17 ID:M5QBoHcZ
WindowsXP HomeEdition に
ActivePerl-5.6.1.633-MSWin32-x86.msi
をインストールして
start ppm3 install http://www.activestate.com/PPMPackages/5.6plus/DBI.ppd
とすると
Can't call method "name" without a package or object reference at D:/ActivePerl/561/site/lib/PPM/UI.pm line 984.
と言うメッセージが出てモジュールのインストールが出来ません。
 ActivePerl-5.6.1.633のppm3に何か欠陥があるのでしょうか?
 何か私が大間違いをしているのでしょうか?
 情報あれば教えてください。
581 :02/07/04 07:42 ID:???
>>579
戻るページの数だけ同じCGIを置く
582nobodyさん:02/07/04 08:15 ID:???
>>578
こういうこと?ちょっと意味がわかりません
<A href="javascript:history.back()">
583578:02/07/04 08:19 ID:wzRa2QN/
>>581 レスありがとうございます
リンクフリーのcgiなので
何ページからリンクされるのか、
どこからリンクされるのかもわからないんです
584nobodyさん:02/07/04 08:26 ID:???
>>583
REFERER取れないんだからどこから来てるかはわからんよ。仕方ない。
BACKボタンで戻ってくれとかいう説明を書いといたら?
585nobodyさん:02/07/04 10:01 ID:n+YIWuSL
file.txt
000
111
<!---->
222
333
<!---->
444
555

<!---->で区切っている部分を3つに効率よく
切り分けるにはどうしたら良いですか?

元のデータは後で利用しない
分けた変数は$,@どちらでも良い

3パターンあるのですが、より効率のよい
コーディングを教えてください
586nobodyさん:02/07/04 10:01 ID:n+YIWuSL
open(FH,file.txt);
$line = join('',<FH>);
colse(FH);
($top,$middle,$buttom) = split /<!---->/,$line;

open(FH,file.txt);
$/ = '<!---->';
while(<FH>){
$i++
$top = $_ if $i == 1;
$middle = $_ if $i == 2;
$bottom = $_ if $i == 3;
}
colse(FH);

open(FH,file.txt);
$j = \@top;
while(<FH>){
if (/<!---->/) {
$i++;
if ($i == 1) { $j = \@middle; next; }
if ($i == 2) { $j = \@bottom; next; }
}
push(@$j,$_);
}
colse(FH);
587nobodyさん:02/07/04 10:27 ID:???
>>586

line 4 ...
588nobodyさん:02/07/04 10:29 ID:???
>>583
HTTP_REFERER
589578=583:02/07/04 13:21 ID:???
>>582
i-modeではJavaScriptが使えないんです

>>584
漏れのスキルでは妥当な線ですね

>>588
なんだか使えそうな・・・それ調べてみます

みなさん有難うございます
590nobodyさん:02/07/04 13:43 ID:???
いやだからi-modeとかJ-SkyWebは基本的にHTTP_REFERER吐かないってば。
吐く端末もあるけど少数だし。Ezwebはやろうと思えば出来たような気が
しないでもない。携帯端末で普通にREFERER吐くのはドットiだけだった
と思う。
591578=583 =589:02/07/04 14:30 ID:???
>>590
なるほど、HTTP_REFERERも無理ですか、
「バックボタンで戻ってください」と書く方向にします。
592nobodyさん:02/07/04 14:33 ID:???
>>591
やりかたあるじゃねーか。気づけよ!
593nobodyさん:02/07/04 14:35 ID:???
>>585-586
おれだったら3番目を選びます。
しかし>>587が気になる。なんだろう…。そういや"..."演算子ってあるのよね。
594nobodyさん:02/07/04 19:27 ID:???
>>593
..演算子はありますが、...はなんだろう?
>>597
>line 4 ...
意味が読めないよ。
595nobodyさん:02/07/04 19:38 ID:???
>>594
そこまでわかっててなぜ気づかない?
596585:02/07/04 20:34 ID:???
>>587
すいませんがもっと詳しく書いていただけると
ありがたいです。

>>592
この中では3番目が一番効率よさそうですが
人のソースのもろコピペになってしまうので
あんまり使いたく有りません

別の方法があったらぜひ教えてください
597nobodyさん:02/07/04 21:18 ID:???
>>596
こんなのはどうすか。586の最後のやつと同じだけど、ややすっきり。

my @arrays = (\@top, \@middle, \@bottom);
my $i = 0;
while (<FH>) {
  $i++ if /<!---->/;
  push @{$arrays[$i]}, $_;
}
598japh ◆J.5V8ta6 :02/07/04 21:42 ID:???
>>596
笑った。
別の方法を教えてもらっても、ソースのもろコピペには変わりないんじゃないのか?

599nobodyさん:02/07/04 21:42 ID:gX+umWUs
$name が りんごなら$imgにappleを入れたいのですが、これであってますか?

if ($name eq "りんご") {$img = apple ;}
600nobodyさん:02/07/04 21:46 ID:zS7n4jKK
>>599
if ($name eq "りんご") {$img = "apple" ;}
601nobodyさん:02/07/04 21:58 ID:gX+umWUs
>>600
ありがとうございました。
602585:02/07/04 22:05 ID:???
>>598
同じことをするプログラムで
処理まで一緒だとパクリになるので
別の方法は無いかと思って

同じカテゴリーのプログラムが
少ないので同じものを使うと
すぐ分かってしまいます
この処理のやり方が肝になっているので
603585:02/07/04 22:12 ID:???
>>597
だいぶスマートに出来ていますね
ありがとうございます
604nobodyさん:02/07/04 22:16 ID:???
>>602
書き方変えても処理同じにするんだからきみの嫌うパクリになるんじゃないか?

パクリが嫌ならソースを教えてもらう前に自分で勉強しろ。
605nobodyさん:02/07/04 22:37 ID:ru7/Ktro
データをhtml化してログに残すやり方を教えて下さい。
すみません、うまく説明できないのですが宜しくお願いします。
606nobodyさん:02/07/04 22:38 ID:???
データを読み込んで、HTMLを付加して、ファイルに出力。
607585:02/07/04 22:49 ID:???
>>604
603は考えて下さった御礼という意味です
ちなみに私は
出てくるものは同じでも、実装方法がちがったら良いのじゃないか
と思っています。
全く同じものを作っても面白みが無いので、+αはしますが
(商業関係は別です特許が絡んでくるし)




608nobodyさん:02/07/04 22:52 ID:???
>パクリが嫌ならソースを教えてもらう前に自分で勉強しろ。

>>604 の勝ち
609nobodyさん:02/07/04 22:53 ID:gX+umWUs
秀丸などの改行を取りたいのですが、どうやって取ったらいいのでしょうか?
610nobodyさん:02/07/04 22:55 ID:???
秀丸の改行ってなんだ?
611nobodyさん:02/07/04 22:56 ID:gX+umWUs
秀丸だったら文の最後の↓です。
612nobodyさん:02/07/04 22:57 ID:GRf17RXg
<A HREF="$url">$url</A> と
<A HREF="tel:$tel">$tel</A> があるんですが、

Phone to機能のない方だけに、cgiをくっつけたいんですが、

$myd = "http://www.○○○.co.jp/";
if ($myd =~ /<A HREF=\"/) {
$myd =~ s/(\<A HREF=\")(tel:)/moji($1.$2)/eg;
}
moji($1.$2) {
if (!$2) {
$myd =~ s/(\<A HREF=\")/$1test0701_2.cgi?$query/ g;
}
}
print $myd;


うまく切り分けられません 泣)
613nobodyさん:02/07/04 23:01 ID:???
>秀丸だったら文の最後の↓

Ans ↓の前にカーソルを移動させ[Delete]キーで改行が外れます
614nobodyさん:02/07/04 23:02 ID:gX+umWUs
>>613
そうじゃなくて、プログラムの中で実行したいのですが・・・。
615nobodyさん:02/07/04 23:07 ID:???
>>614 質問の仕方をまず覚えれ

秀丸などの → テキストファイルの


616nobodyさん:02/07/04 23:08 ID:gX+umWUs
>>615
すみません
617nobodyさん:02/07/04 23:13 ID:???
>> 616 s/\n//
618nobodyさん:02/07/04 23:14 ID:???
>>617
改行が全部なくならないか?
619nobodyさん:02/07/04 23:18 ID:gX+umWUs
$nameが千葉か神奈川か東京ってこれでいいんですか?

if ($name eq "千葉" or "神奈川" or "東京")
620578=583 =589:02/07/04 23:19 ID:???
>>592
すみません、気付けません(鬱
教えて下さい
621nobodyさん:02/07/04 23:19 ID:???
if (($name eq "千葉") or ($name eq "神奈川") or ($name eq "東京"))
622nobodyさん:02/07/04 23:23 ID:gX+umWUs
>>621
何度もすみません。ありがとうございました。
623nobodyさん:02/07/04 23:27 ID:???
マウスが乗ると音が鳴るタグを教えてもらえませんか
624nobodyさん:02/07/04 23:29 ID:???
>>623
スレ違いだとは思わないか?
625nobodyさん:02/07/04 23:30 ID:???
626nobodyさん:02/07/04 23:46 ID:???
>>623
+ JavaScript の質問用スレッド vol.10 +
http://pc.2ch.net/test/read.cgi/hp/1022077876/l50
「何」にマウスが乗ると音がなるのかも言って聞いてみて・・・
「タグ」と言っている時点で怒られる怖れもあるから
1>>をよく読んでから質問してね。
627nobodyさん:02/07/05 01:00 ID:???
>>619
もう解決してるみたいだけど、orと||の優先順位に違いを考慮して
if ($name eq "千葉" || "神奈川" || "東京")
こうだと大丈夫だと思うよ。
628nobodyさん:02/07/05 01:59 ID:???
>>627
それはだめだろ
629nobodyさん:02/07/05 03:08 ID:???
>>628
試した上で言ってるの?
630nobodyさん:02/07/05 03:44 ID:???
>>627=629?
Perlを理解していない典型だね。
631 ◆qXAQxUxI :02/07/05 03:56 ID:???
>>627

ヴァカ
632629:02/07/05 04:12 ID:???
すまん、>>627と書いたつもりが>>628になっていた。
633長文:02/07/05 06:14 ID:xwCvs6jw
1:自分はこう言う事がしたい。
フォルダの中に、
「番号」「単語」「単語の解説」の入ったデータファイルがいくつかあります。
そのデータファイルをまとめる親データを作りたいです。
親データには、
単語に対応する番号を単語を辞書的にソートしたものを入れたいです。

具体的には
ファイル1→01 モナー 「オマエモナー」
ファイル2→02 ギコ 「逝ってよし」
ファイル3→03 ジサクジエン 「イイ!」
親データ→02 03 01

みたいな感じです。分かりづらいでしょうか、、

長文すぎたようなので分割します;
634長文2:02/07/05 06:15 ID:xwCvs6jw
2:それでこんな風にやってみたが・・・
$cufld = './';
opendir(DIR, $cufld) or die;
@file1 = sort readdir(DIR);
closedir(DIR);
で、フォルダの中のファイルをリストアップして

foreach (@files) {
で、ファイルをひとつひとつ開いて
open(IN,"$_");
$data = <IN>;
close (IN);
($ind,$word) = split(/\t/, $data);
push (@word , $word);
$NO{$word} = $ind;
}
foreach (sort { $a cmp $b } @word){
print "$NO{$_}\t";
}
という風に出力したかったんですが、

3:それだとこんなエラーが出て上手く行かなかった。
なんだかopendir〜の所で止まってしまいます。
ディレクトリのパーミッションは777にしてるんですが
他にこうやった方が、とか根本的にここが間違ってる、とか
いうところがあったら指摘お願いします。
635nobodyさん:02/07/05 06:21 ID:???
>>634
@file1を表示してみれば分かるんだけど、opendir() は実際のファイルのほかに
「. (カレントディレクトリ)」「.. (ひとつ上のディレクトリ)」も含まれる。
なのでgrepでもかけて実際のファイルだけ取り出してやらないといけない。

っていうか @file1 と @files って・・書き間違い? (@file1 = @files ?)
636nobodyさん:02/07/05 06:25 ID:???
あと $cufld = './'; だと、このCGI自体も含まれると思うんだけど。
637長文:02/07/05 07:22 ID:xwCvs6jw
>>635
@file1は写し間違いでした。すみません
grep、調べてみました。頭に入れときます。

>>636
そうですね、自身も含まれちゃうんで
ファイル名ではじこうと思います。

でも、@filesを表示する以前に
opendir()でdieしてるみたいなんですが……
ローカルでも、アップした状態でもやってみましたが
結果は同じでした。
環境によっては使えないとか、そういうことってあるんでしょうか。
サーバはxreaを使ってます。ローカルではMacのWEB共有です。
638長文:02/07/05 07:24 ID:xwCvs6jw
なんだか連続で質問になってしまってすみません
こんな時間にありがとうございますです。
639nobodyさん:02/07/05 07:26 ID:q2MOJvqj
質問です
$line = join('',@lines);
$line = s/***/****/g;

for (0 .. $#lines) {
  my($tmp) = $lines[$_];
  $tmp = s/***/****/g;
  $line .= $tmp;
}
どちらが最適か教えて下さい。
(元のデータは残しておく)
640japh ◆J.5V8ta6 :02/07/05 08:30 ID:???
>>639
Benchmark使ってみろ。
そうすればどっちを使うべきかは一目瞭然。

#!/usr/bin/perl -w

use Benchmark;
use IO::File;
my @lines = IO::File->new(__FILE__)->getlines;
timethese 100000 => {
1 => sub{
my $line;
$line = join('',@lines);
$line =~ s/$/:/g;
},
2 => sub{
my $line;
for (0 .. $#lines) {
my($tmp) = $lines[$_];
$tmp = s/$/:/g;
$line .= $tmp;
}
},
};
641 :02/07/05 12:27 ID:L0bSs9Ak
mod_perlで掲示板を動かしていますが、mod_perl用のディレクトリにある画像を利用出来なくて悩んでいます。
mod_perl用のディレクトリ以下にあるファイルは全てCGIとして使われちゃうと聞きました。
他のディレクトリに画像を移そうかとも考えましたが、スクリプトの修正個所が多くて大変なんです。
Apacheのhttpd.confの設定とかで利用できる用に出来ませんか?
642nobodyさん:02/07/05 14:44 ID:???
>>641
できるよ。perldoc cgi_to_mod_perl読め。

あとは下記スレで。
[mod_perlを使おう!]
http://pc.2ch.net/test/read.cgi/php/1005122528/l50
643nobodyさん:02/07/05 19:28 ID:???
質問ですが、指定したディレクトリ内にあるファイル名を全部配列に格納したいです。
できるならやり方を教えて下さい。
644nobodyさん:02/07/05 19:35 ID:???
>643
opendirとreaddirを使う。
使い方は自分で調べてみよう。
645nobodyさん:02/07/05 19:36 ID:???
opendir(DIR, dir);
@readlist = readdir(DIR);
closedir(DIR);

ただ、 . と .. も入るから注意。って、他にもあったな、やりかた。
646nobodyさん:02/07/05 20:25 ID:???
opendir(DIR,$dir);
@readlist = grep ! /^\.\.?$/, readdir(DIR);
closedir(DIR);
647nobodyさん:02/07/05 21:05 ID:???
sub filescan
{
my @dir;

opendir( DIR, $_[0] ) || return 0;
@dir = grep( !/^\.\.?$/, readdir( DIR ) );
closedir( DIR );

foreach ( @dir ) {
if ( -d "$_[0]$_\/" ) {
push( @all, "$_[0]$_\/" );
&filescan( "$_[0]$_\/" );
}
else {
push( @all, "$_[0]$_" );
#print "$_[0]$_\n";
}
}
return 1;
}
648nobodyさん:02/07/05 23:25 ID:St7kmpIx
sub function
{
}
とかくバカは死ね
649nobodyさん:02/07/05 23:26 ID:???
opendir(DIR, $dir);
@readlist = readdir(DIR);
closedir(DIR);
splice(@readlist, 0, 2);
650nobodyさん:02/07/05 23:49 ID:???
効率を気にしなくていいときは
@readlist = <*>;
を愛用してる。こっちは逆にドットファイルが出てこないけど。
651nobodyさん:02/07/06 01:52 ID:???
>>648ジサクジエン(・∀・)デシタ!!
http://pc.2ch.net/test/read.cgi/php/1024741312/71-
652nobodyさん:02/07/06 05:36 ID:???
おまえ邪魔。
653nobodyさん:02/07/06 10:20 ID:???

アナル → <*>
654643:02/07/06 13:09 ID:???
ありがとうございます。
ファイルの取得ができました。

さらに、この配列を、最終更新日時順にソートする、、なんてことはできますか?
よろしくお願いします。。
655nobodyさん:02/07/06 13:16 ID:???
>>654


  少  し  は  勉  強  し  よ  う  っ  て  気  は  な  い  の  か


656Saru:02/07/06 13:21 ID:CFBQ9es6
Perlでテキスト処理に関して、2桁の数字だけを削除したい場合は
どのようにかいたらいいんでしょうか?
今は
s/[0-9]{2}//g;と書いてます。
1桁の数字は残しておきたいんですが…。
どなたかヒントでもよいので教えてください。お願いします。
657nobodyさん:02/07/06 14:01 ID:???
s/^[0-9]([0-9])$/$1/g;
658Saru:02/07/06 14:16 ID:CFBQ9es6
>657さん
困っていたのでとても助かりました。
どうもありがとうございます!
659nobodyさん:02/07/06 14:32 ID:???
s/(\D)\d{2}(\D)/$1$2/g;
660nobodyさん:02/07/06 14:54 ID:???

今クリック数をカウントするCGIを作ってるのですが、
クライアントから送られてくるデータが

id=1&url=http://www.***.com/

だったばあい、

$idの中身を1に
$urlの中身をhttp://www.***.com/

にしたいのですが、今は

$data = $ENV{'QUERY_STRING'};
@data = split(/\&/,$data);
$id = $data[0];
$url = $data[1];
%id = split(/\=/,$id);
%url = split(/\=/,$url);

となんとも効率が悪いやり方なのですが自分の知識ではこのようにしか
やり方が分からないのですがもっといいやり方は無いでしょうか?

それともし$dataに「&と=」が無かった場合はexitで終了させたいのですが
どのように調べればいいのでしょうか?

よろしくお願いします。
661nobodyさん:02/07/06 15:02 ID:???


$buffer = $ENV{'QUERY_STRING'};
if (($buffer !~/&/ )&&($buffer !~/=/){exit;}
local(@pairs) = split(/&/,$buffer);
foreach $pair(@pairs){
local($name,$value) = split(/=/,$pair);
$FORM{$name} = $value;
}
662nobodyさん:02/07/06 15:03 ID:???
 ) がひとつ足りなかった。
663nobodyさん:02/07/06 15:12 ID:???
&と=が正規表現で調べることが出来ることは分かったのですが、

$FORM{$name} = $value;

これは%FORMというハッシュの中にkeyが$nameでvalueが$valueというのを
代入してる処理なんでしょうか?

664nobodyさん:02/07/06 15:17 ID:???
local(@pairs) = split(/&/,$buffer);
この処理で、
id=1&url=http://www.***.com/ を
id=1 url=http://www.***.com/ に分割し(@pairsに)
foreach $pair(@pairs){
local($name,$value) = split(/=/,$pair);
$FORM{$name} = $value;
}
で それらをさらに分ける。
$FORM{$name} = $value;

$FORM{id} = 1;
$FORM{url} = http://www.***.com/;
になるから%FORMに入れられる。あとはこれらを自由に処理するだけ。
665nobodyさん:02/07/06 15:20 ID:???
>>664

なるほど。理解できました。ありがとうございます。

ちなみにローカル変数はサブルーチン内で使うものでわなかったでしょうか?
サブルーチン化したほうがいいのでしょうか?
666Saru:02/07/06 15:21 ID:CFBQ9es6
>659さん
こちらは2桁ともに削除できるんですね。
勉強になります…!ありがとうございます。
667nobodyさん:02/07/06 15:22 ID:???
ちなみに

split(/=/,$pair);

これは

=の前に\を入れてエスケープするんですよね?
668nobodyさん:02/07/06 15:31 ID:???
エスケープしないで使ってる人が多いな。
たいていはサブルーチン化して、GETもPOSTも対応してる。

local($pair,$buffer);
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else {
$buffer = $ENV{'QUERY_STRING'};
}
local(@pairs) = split(/&/,$buffer);
foreach $pair (@pairs) {
local($name,$value) = split(/=/,$pair);
$FORM{$name} = $value;
}
669nobodyさん:02/07/06 16:42 ID:up0NZwlm
open(FILE, "./log.log") で作成したログのパーミッションが 644 で生成されるんですが、
これを 600 で生成されるようにするにはどうすればよいでしょうか?
CGIはユーザー権限で動いています。
おながいします。
670nobodyさん:02/07/06 16:45 ID:???
まちがった・・ open(FILE, ">./log.log") でした
671nobodyさん:02/07/06 16:48 ID:???
>>670
umask
672nobodyさん:02/07/06 16:51 ID:up0NZwlm
>>671
umask関数ですね。検索して調べてみます。
673669:02/07/06 17:06 ID:???
umask 066; でできました。 >>671 さんありがとうございました。
674nobodyさん:02/07/06 17:42 ID:stglrVc7
open,umaskとするよりsysopen使うのがおすすめだぞ。
openよりはセキュアかもだしな。
675669:02/07/06 18:30 ID:???
>>674
もうできたからいいよ。っつーか書くのがおせーよ!
氏ね!
676nobodyさん:02/07/06 18:33 ID:???
>>675

偽者ケテーイ
677nobodyさん :02/07/06 21:50 ID:pjFxin79
perl初心者です。Activeperlのプログラムを動かしてInternetExplorerを起動したいんですが
どのようにすればよいでしょうか?
678nobodyさん:02/07/06 21:53 ID:???
exec(C:\Program Files\Internet Explorer\IEXPLORE.EXE);

`C:\Program Files\Internet Explorer\IEXPLORE.EXE`
679nobodyさん:02/07/06 23:30 ID:Jm7Ff5yb
レンタルサーバーでsendmailが使えない場合、ほかにメールを送る方法ってありますか?
680nobodyさん:02/07/06 23:31 ID:???
Net::SMTP
681nobodyさん:02/07/07 01:52 ID:iHDNP1fk
JavaScriptをperlに書き換えたいのですが
★の部分の書き方がわかりません。(ぺこり)
他も間違いありましたら教えて下さい。
-------------------------------------
functuon myfun{
P=document.F.E1.value+document.F.E2.value+document.F.E3.value;
T=0;
for(i=0;i<P.length;i++){T=T+eval(P.charAt(i))}
if((T==11)||(T==22)){document.F.E4.value=hoge[T]}
else{while(T>=10){T=T-9;}
document.write(hoge[T])
}
-----------------------------------------
foreach $data ( @buf ){
( $name , $value ) = split( /=/ , $data );
$FORM{$name} = $value;
@list = values %FORM
};

$P = $list[0]+$list[1]+$list[2];
$T = 0;
for($i=0; $i<★; $i++){$T=$T+★($i)};
if(($T==11) || ($T==22)){$list[4]=hoge[$T];}
else{while($T>=10){$T=$T-9;}}
print "hoge[$T]";
682nobodyさん:02/07/07 02:06 ID:???
>>681
せめて変数が何あらわしてるかぐらい書け。
683681:02/07/07 02:18 ID:iHDNP1fk
>>683
整数
document.F.E1.value
document.F.E2.value
document.F.E3.value

計算をするための作業用の変数
P
T

Pのlengthを取得するためのカウンター用の変数
i

他のはformに入力された値を取得するための変数です
684nobodyさん:02/07/07 02:32 ID:???
とりあえずこんな感じ

for($i=0; $i<★; $i++){$T=$T+★($i)};

for($i=0;$i<length($P);$i++){$T=$T+substr($P,$i,1)}
685681:02/07/07 08:45 ID:???
>>684さん
おはようございますっ♪
あ〜感謝!うれしいです。

686nobodyさん:02/07/07 12:56 ID:xpVArwn6
http://サーバー名/CGIスクリプト名?データ」で実行し、
データの受け渡しをするプログラムを作っているんですが、
他のURLへジャンプさせるときに、
<A HREF="http://***/CGIスクリプト名?ジャンプ先URL">ジャンプ</A>
としたいんですが、ジャンプ先URLをフルパスで出せるようにするには
どうしたらいいですか?以下がつくった内容です。
my($encoding) = @_;
my($method) = $ENV{'REQUEST_METHOD'};
if ($method eq 'GET') { $query = $ENV{'QUERY_STRING'}; }
elsif ($method eq 'POST') { read(STDIN, $query,
$ENV{'CONTENT_LENGTH'}); }
local(@query) = split(/&/, $query);
foreach (@query) {
tr/+/ /;
($key, $val) = split(/=/);
$key =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c", hex($1))/ge;
$val =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c", hex($1))/ge;
$val =~ s/\r\n/\n/g;
$in{$key} = $val;
}
my $req = new HTTP::Request POST => $val;
$req->content_type('application/x-www-form-urlencoded');
$req->content('match=www&errors=0');
my $res = $ua->request($req);
if ($res->is_success) {
$myd = $res->content;
$myd =~ s/(\<A HREF=\")/$1test.cgi?/g;
print $myd;
} else {
print "No!";
}

今の状態ですと、
$myd =~ s/(\<A HREF=\")/$1test.cgi?/g;
をやると、
<A HREF=test.cgi?test/index.html> というような感じになって
<A HREF=test.cgi?http://www.***.co.jp/test/index.html>
というような形になりません。
687nobodyさん:02/07/07 16:41 ID:???
入力データをハッキリと明示しないと答えようがないだろ。
入力データをハッキリさせたら正規表現スレで質問すべき問題だろ。
688nobodyさん:02/07/07 20:52 ID:ZrDEUCOM
> 687
686です。
<A HREF="http://www.test.co.jp/test.cgi?http://www.test.co.jp/next.html">ジャンプする</A>
正規表現スレでやればいいんですか?
それ以前のヴァカなもので、初心者スレで書き込んだんですが、
それも場違い?
答えも見つからず、困っていたのに(泣)
689nobodyさん:02/07/07 21:33 ID:???
リンクを表示させるだけなら
$link= qq(<A href="CGIのURL?$ENV{'QUERY_STRING'}">XXXへのリンク</A>);
690nobodyさん:02/07/08 16:37 ID:???
フォームから入力された文字の最大数を制限するとか、
半角数字以外が入力されたらエラーメッセージを返すとか

どう呼ぶのかわからないのですが、
よく使われる処理のモジュールというかライブラリーと言うのか
そんな感じのものを探すにはどうしたら良いですか?
googleしてみましたがキーワードが甘いらしく見つかりませんでした

691nobodyさん:02/07/08 16:38 ID:ZsVGz1/q
age忘れました
692nobodyさん:02/07/08 16:41 ID:???
文字数を制限するなら、$ENV{'CONTENT_LENGTH'}の値を見るとか。
 送られてきたデータが /[^0-9a-zA-Z}/ 以外なら die とか。
693nobodyさん:02/07/08 16:45 ID:ZsVGz1/q
超即レス thank you!です。
694nobodyさん:02/07/08 17:12 ID:E09xqBbE
たとえば(3,3,10,6,1)という配列があって、コレをソートすると
1 3 6 10と返ってきてしまうのを、どうにかして
1 3 3 6 10にできないものでしょうか・・・?
695nobodyさん:02/07/08 17:31 ID:???
>>694

@data = (3,3,10,6,1);

@sort_data = sort
{
$a <=> $b;
} @data;
696nobodyさん:02/07/08 22:12 ID:Hy1uHDxp
> 689
それだと、受け取ったURLそのまま出ちゃうんじゃないかい?
697nobodyさん:02/07/08 23:54 ID:HDd0iUwW
ARGVって何?どうやって読むの?アーグブイ?
698nobodyさん:02/07/09 00:04 ID:???
ARGment Value
699nobodyさん:02/07/09 00:05 ID:???
argument だた。。。
700nobodyさん:02/07/09 00:06 ID:???
麻酔をせずに歯を削られているような気分で、
「アァァァーグヴィ!」

じゃなかったっけ?
701nobodyさん:02/07/09 00:11 ID:???
なるほど納得!
702 :02/07/09 00:21 ID:???
SOCKET使って外部のCGIにPOSTしてみたいのですがなかなかうまくいきません。

FORMを取得して
$post_mes="[email protected]&wcomment=test";
って感じにして(多分ここが違う?)

# POST
print SOCKET "POST $check_host HTTP/1.1\r\n";
#HTTP_REFERERを送信
print SOCKET "REFERER: $referer \r\n";
#User-Agentを送信
print SOCKET "User-Agent: $agent \r\n";
print SOCKET "X_FORWARDED_FOR: $xfor \r\n";
print SOCKET "Accept: */* \r\n";
print SOCKET "Accept-Language: ja \r\n";
print SOCKET "Accept-Encoding: gzip \r\n";
print SOCKET "\r\n";
print SOCKET "Content-Type: application/x-www-form-urlencoded\r\n";
print SOCKET "Content-Length: $length\r\n";
print SOCKET "\r\n";

print SOCKET "$post_mes\r\n";

みたいな感じでやってみたんですが駄目でした。
なんの反応もないみたいです。

なお、いたずら目的ではありません。Perlも自分のPCで動かしてます。
703 :02/07/09 00:23 ID:???
>>702
犯罪の悪寒・・・
704nobodyさん:02/07/09 00:25 ID:???
>>703に禿げ同
705702:02/07/09 00:27 ID:???
ひょっとして外部からPOSTしては駄目なのでしょうか?
すいません。よく知らなくて・・・
706nobodyさん:02/07/09 00:31 ID:???
>>702
lwp 使った方が楽だと思われ。使えない環境?
707702:02/07/09 00:39 ID:???
>>706
lpwってのはよくわからないです・・・
環境はWinでPerl5です。
708.:02/07/09 00:41 ID:???
掲示板荒氏用のスクリプトでも参考にしなさい。
709.:02/07/09 00:42 ID:???
>>707
検索ぐらい汁。
もっとも、"lpw" ではないが。
710702:02/07/09 00:45 ID:???
>>708
dukeとか言うのですよね。探してみます
>>709
すいません。
lpwで検索してもよくわかんないと思ったらlwpだったんですね・・
711nobodyさん:02/07/09 01:01 ID:???
何の反応も無いじゃ解らん
print while(<SOCK>);

ってして、どんなレスポンス帰って来てるのか読んでみ
712702:02/07/09 04:02 ID:???
教えて下さった方、ヒント下さった方、ありがとうございました。
なんとかPOSTできました。
713nobodyさん:02/07/09 04:31 ID:???
>>698違う

ARGV = ARGuments Variable

だろ。

Value = 値
Variable = 変数

少しは勉強しろ
714nobodyさん:02/07/09 04:50 ID:???
>>713
..... argument vector
715121:02/07/09 21:35 ID:7t2WvFst
ココ最高でした。サンプルとかタダだし、ネタとしては使えると思います。
ちなみに僕はロリです、同士な人はいってください。
http://muke.up.to
716nobodyさん:02/07/09 22:15 ID:jsAirJtA
@data=(1,2,3,11,34)の様な配列が、あった場合
0〜99の数字で(1,2,3,11,34)を含まない、配列を得るにはどうしたら良いのでしょうか?
例えば、(4、5、12)
717nobodyさん:02/07/09 22:19 ID:lugOGira
GETかPOSTかメソッドを判別し、
& と = をsplitして文字コードを変換したんですが、

local(@query) = split(/&/, $query);
foreach (@query) {
tr/+/ /;
($key, $val) = split(/=/);
$key =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c", hex($1))/ge;
$val =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c", hex($1))/ge;
$val =~ s/\r\n/\n/g;
$in{$key} = $val;
}

送られてくるデータの引数が複数ある場合は、このほかに
何かつけ加えなければならない?

718nobodyさん:02/07/09 22:22 ID:???
local($pair,$buffer);
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else {
$buffer = $ENV{'QUERY_STRING'};
}
local(@pairs) = split(/&/,$buffer);
foreach $pair (@pairs) {
local($name,$value) = split(/=/,$pair);
$FORM{$name} = $value;
}
719nobodyさん:02/07/09 22:25 ID:???
=~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("H2", $1 )/eg;
720nobodyさん:02/07/09 22:34 ID:???
>>716答え教えるの面白くないからヒントね


@data = (1, 2, 3, 11, 34);

for ( 0..99 )
{
 foreach ( @data )
 {
  push
 }
}
721nobodyさん:02/07/09 22:38 ID:???
>>716
4, 5, 12を除いてみた.

%exclude = (4 => 1, 5 => 1, 12 => 1);
@data = grep { !$exclude{$_} } 0 .. 99;
722721:02/07/09 22:39 ID:???
>>720
スマソ…
723nobodyさん:02/07/09 22:40 ID:lugOGira
> 719
それってどういうこと?
よくわかんない…、スマソ

724nobodyさん:02/07/09 22:45 ID:???
=~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c", hex($1))/ge;
より、
=~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("H2", $1 )/eg;
の方が早いって言いたいんじゃない?
725716:02/07/09 22:51 ID:???
>>720
>>721
 こんなに、すぐレスくれるなんて思っていませんでした。
有り難う御座います。

これから、考えてみます。なにせ初心者な物でチンプンカンプンです。
726ヽ(`Д´)ノ  ウワァァン:02/07/09 23:29 ID:gcNlx8b2
Win2000pro上でwwwサーバーを起動するところまではできたのに
CGIファイルをエクスプローラーで見ようとすると文字化け! ヽ(`Д´)ノ  ウワァァン
レンタルサーバー上にアップしたら文字化けしないのに! ヽ(`Д´)ノ  ウワァァン
727nobodyさん:02/07/09 23:45 ID:???
>>726
print "Content-type: text/html; charset=Shift_JIS\n\n"; ヽ(´∀` )ノ
728 :02/07/10 00:48 ID:Q4ccJnsM
パールって、
$a = 10;
だと
$a2 で 20 になるのですか?
729 :02/07/10 00:51 ID:???
>>728
するどいな。だれにおそわった?
730 .:02/07/10 01:09 ID:???
ソース見てたらなんとなくそう思ったのです。

本当なの?
$a2 って変数は使えないの?
731nobodyさん:02/07/10 01:13 ID:fQbDc9qZ
パスワード入力みたいのでさ
入力した文字を****と表示して
さらにクッキーにも****と記録するにはどうすればいいの?

…別に使う訳じゃないんだけど興味。
732nobodyさん:02/07/10 01:13 ID:???
$a + 2 足し算
$a - 2 引き算
$a * 2 掛け算
$a / 2 割り算
733nobodyさん:02/07/10 01:15 ID:???
>>731
crypt関数で暗号化してから記録
734nobodyさん:02/07/10 01:15 ID:fQbDc9qZ
>>733
さんきゅ。
後は調べる
735nobodyさん:02/07/10 06:44 ID:???
おもったけどさ、削除パスを暗号化する前にいったん別ファイルに記録しとけばそいつがのホームページの掲示板の管理パスとかフリーメールにログインできたりするよな
737nobodyさん:02/07/10 07:43 ID:???
>>728
さんは凄腕になれますね、、
738nobodyさん:02/07/10 09:20 ID:???
>735
全てのパスワードを同じ物にするようなマヌケな奴相手ならな。
まぁ、マヌケが多いのは確かだが。
739nobodyさん:02/07/10 09:41 ID:???
>>738
ユーザは性アフォ説で接していかないと・・・。
740nobodyさん:02/07/10 10:21 ID:9iF/zPMp
数字以外が入力されたらエラーメッセージを出したいのですが
うまくいきませんでした
どうすれば良いですか?

#入力されたのが数字かどうかチェック
if($P eq /[^0-9]/){print "数字を入力してください。";}
else{

if($P == /[^0-9]/){print "数字を入力してください。";}
else{

741nobodyさん:02/07/10 10:24 ID:???
正規表現使うときは、

  =~ //

だろ。
742740:02/07/10 14:18 ID:lBfYsgML
>>714
できましたーーー!!
ありがとうございます
743nobodyさん:02/07/10 14:23 ID:???
>>742
誰に御礼を言ってるんだか。
744740:02/07/10 16:33 ID:???
>>741さんでした(汗
ありがとうございます
745nobodyさん:02/07/10 16:58 ID:???
(≧∇≦)
746nobodyさん:02/07/10 17:04 ID:???
404とかのエラーコードを吐き出させるのってどうやるのですか?
747746:02/07/10 17:14 ID:???
あ、分かりました。
748nobodyさん:02/07/10 19:02 ID:???
>>740
/[^0-9]/ → /^[0-9]+/
749nobodyさん:02/07/10 19:25 ID:???
>748
それだと意味が変わるぞ。
>740の書き込みとif文の構成をよく見ろ。
750nobodyさん:02/07/10 19:28 ID:???
>>748
それやるなら、
if ( $P !~ /^[0-9]+/ ) { }

unless ( $P =~ /^[0-9]+/ ) { }
じゃないと。
751 ◆adminSE. :02/07/10 19:59 ID:???
>>746

.htaacessでやるんじゃなかったっけ?

752japh ◆J.5V8ta6 :02/07/10 20:43 ID:???
>>751
うわっ、何てカコイイトリップなんだ!
753 ◆adminSE. :02/07/10 20:48 ID:???
>>752

トリッパー使って3時間ほどadminで検索してたら偶然SE付きのがHITしますた
754nobodyさん:02/07/10 22:02 ID:???
$fied[1]にはいってるすべての文字列【日本語含む】を@にしたいとき
$fied[1]=~tr/a-zA-Z_0-9\/.\n?-!"#$%&'()\=~|\{\`\+\*}_?><,\/\\\];@\[\\^-/@/cs;
↑このように書くしかないんですかね?
[a-zA-Z_0-9]以外の文字ぜんぶをあらわす特殊変数みたいなのありませんか。
755nobodyさん:02/07/10 22:03 ID:01h+ntYo
[a-zA-Z_0-9]以外って、
[^0-9a-zA-z\_]じゃだめなの?
756nobodyさん:02/07/10 22:18 ID:???
\W
757nobodyさん:02/07/10 23:13 ID:???
>>750
!~ /^[0-9]+$/ のほうがさらに

758nobodyさん:02/07/10 23:23 ID:???
=~ /\D/
じゃだめなの?
759nobodyさん:02/07/10 23:26 ID:PCSWC5jP
CGIにデータを渡すときに、URLエンコードをしようとして

$arg =~ s/(\W)/'%'.unpack("H2", $1)/ego;

のunpack関数を使ってみたんですが、これだと、
最初の文字1文字しかエンコードされないですよね? 
例えば、
$arg=test.html?list=リスト&name=名前 
なんかだと、最初の「リ」だけじゃなく、
「リスト」と「名前」の該当する文字全部が
変換されるようにするには、どうしたらいいですか?
760nobodyさん:02/07/10 23:30 ID:???
o が余計。
761 ◆s/lF/2/o :02/07/11 00:24 ID:???
一度だけコンパイルか
762 :02/07/11 00:28 ID:???
>>759
おまいのegoがでてるよ。
763nobodyさん:02/07/11 00:48 ID:???
>>762
ワラ・・・いかけた
764nobodyさん:02/07/11 01:10 ID:???
(・w・)ブハッ! ワラテシマタ
765nobodyさん:02/07/11 02:32 ID:???
(・∀・)ニヤニヤ
766nobodyさん:02/07/11 05:54 ID:???
>>760, >>761
君たちは勘違いをしている。s/foo/bar/という構文の中で正規表現は
"foo"の部分だけなので例え"o"オプションをつけたからといって"bar"
のほうにはなんら意味がない。"o"は「正規表現」を一回だけコンパイル
するオプションであって置換内容をコンパイルするものではないという
事だす。

my $target = "AAAcccAAA";
for my $replacement ( qw/ bbb ddd / ) {
my $tmp = $target;
$tmp =~ s/ccc/$string/go;
print $tmp, "\n";
}
767nobodyさん:02/07/11 07:05 ID:???
ヘッダとボディの区切りがもう出力されたかどうかどうやって調べるの?
768nobodyさん:02/07/11 07:13 ID:???
↑こいつは一体何を言いたいのかさっぱり解らない

こっちから、また尋ねないと解らないような質問ヤメテくれ
769nobodyさん:02/07/11 07:21 ID:???
>>768
説明がおかしかったですか。。例えば、

print "Content-type: text/html;\n\n";

こうゆうのが出力された後ならCookieに書くとかできないじゃないですか
だから、ヘッダが出力されているかどうか調べたいのですが。。
こういたことはできますか?
770nobodyさん:02/07/11 07:43 ID:???
ソース追ってるのか
>print "Content-type: text/html;\n\n";
こう言うのを探せば良いんじゃ無いの?
端末側で吐いてる事確認したいのなら
オミトロンとかで吐き出せる
771nobodyさん:02/07/11 09:21 ID:???
>>769
ヘッダとボディの区切りは改行

print "Content-type: text/html;\n";
print "Set-Cookie: name=value;\n";

〜〜〜 ↑ヘッダ 〜〜〜

print "\n";

〜〜〜 ↓ボディ 〜〜〜

print 〜〜〜
772nobodyさん:02/07/11 10:38 ID:???
>>754
$fied[1] = '@' x length($fied[1]);
773nobodyさん:02/07/11 14:06 ID:???
>>770
ソース追ってるってことではないです。。
>>771
それは分かっています。
区切りの改行が出力されたらもうヘッダに書き込めなくなるじゃないですか
だから、区切りの改行が出力されたかどうかPerlで調べたいです

こういったことはできないのでしょうか。
774nobodyさん:02/07/11 14:19 ID:???
>>773
判断する必要性がない。
775nobodyさん:02/07/11 14:20 ID:???
>>774
無理ってことですか?
776nobodyさん:02/07/11 14:26 ID:???
ヘッダとボディの区別は一応あるが、perl内部ではprintで吐き出された結果に過ぎない。
perlではそんなことをいちいち区別してない。
777nobodyさん:02/07/11 15:13 ID:/kd92Z8G
>773 perlはHTTPDのエクステンションじゃ無い、ただ標準出力に
printの内容を送るだけ、そのあとはhttpdの仕事
判断するなら771の言うように改行を調べれば良い。
778 ◆JAPH9PWA :02/07/11 16:29 ID:???
>>出力を見張る

our $headers_end;
sub myprint
{
$headers_end = 1 if /^$/;
print @_;
}

とか、どう?。
printをオーバーライドしてもいいかも。


# >>753 トリップ変えました。ありがとう
779 ◆R7.pelK2 :02/07/11 18:33 ID:???
test
780 ◆adminSE. :02/07/11 18:34 ID:???
>>778

どういたしますて
781nobodyさん:02/07/12 02:47 ID:???
http://pc.2ch.net/test/read.cgi/php/1026141215/ から

> GDモジュール、どうしても使えない。。
>
> 1 :nobodyさん :02/07/09 00:13 ID:k+y90VS+
> サーバはWebARENA Suite、
> GD.pmを使おうと
> サーバにコンパイル済みのGD1.27をアップするがどうしても
> うまく動かない。
>
> perl: error in loading shared libraries: ./auto/GD/GD.so: undefined symbol: gdImageJpegPtr
>
> こんなエラーが出る。。
> どうすればいいのか。。
> WebARENAはPerlは5.0.503だから、その環境でコンパイルしたものを選んだ。
> なぜだ、、何が、、いったい。。
782781:02/07/12 02:47 ID:0osVMAyz
>>781 続き

例によって親切には説明するつもりはないのでそのつもりで。

1. とりあえず telnet.cgi をまともに動かして。
2. gd-1.8.4.tar.gz(libgdのソース)というふぁいるをGETして。
3. CPANよりGDモジュールのソースふぁいるをGETして。
4. 二つのファイルをtelnet.cgiと同じdirにUPして。
5. 二つのファイルをtarで解凍して。
6. インストール先dirをcgi-bin以下にlib,include,bin,man作成
7. gd-1.8.4/Makefileを編集(インストール場所を6で作成したdirに設定)
8. gd-1.8.4をmake; make install
9. GD-1.40/Makefile.PLの
  $DEFINES .= ' -DHAVE_XPM' if $XPM;
  をコメントにする。
10. GD-1.40のDIRで[ perl Makefile.PL LIB=/virtual/おまえのIP/cgi-bin/lib/perl5 INSTALLMAN3DIR=/virtual/おまえのIP/cgi-bin/man/man.3 ]実行
11. 10で出来たMakefileに8でインストールしたgdへのLIBパスとINCパスを追加して,X関連のリンク(だっけ?-lx11とか)を削除
12. make; make install
13. GD使うスクリプトの冒頭で #!/usr/local/bin/perl -I../lib/perl5/i386-linux とでもしてくれ。
15. あとはてめぇでがんばれ。
16. 意味がわからん?ってか,わからんならやらないでくれ。他に迷惑がかかるかもしれんし。

とりあえず,demo/gd_example.cgi は動いたぞ。
# /usr/libにlibgdがあるのにヘッダがない罠…。

いくらわからんからって単発スレは立てないでくれ。
あなたのスレ立てのために他のスレがdat落ちするじゃね〜かよぉ〜。
783nobodyさん:02/07/12 04:33 ID:???
>>781
なんだか偉そうだな。
とりあえず、共有サーバでコンパイルするのはやめてほしい気分。
784nobodyさん:02/07/12 12:08 ID:???
素朴な質問です。
if($name eq ''){print "hoge";}

print "hoge" if(!$name);
は処理的には同じに思うんですが
書き方以外に何か違う意味とかってあるんですか?
785 ◆JAPH9PWA :02/07/12 12:45 ID:???
>>784
それは処理的に同じではないよ。
$nameが単なる文字列なら結果としては同じことだけど、
もし$nameがオーバーロードされた文字列なら、全く違う結果になることはありえる。

まぁそんなことを聞きたいんじゃないと思うけど、
質問する場合はその辺を簡略化してよ。

で、
if(foo){ bar }

bar if foo;
は同じこと。ちなみに
foo and bar;
も同じ。
書き方意外に違う意味は「読みやすさ」だね。
自分が文脈に合う、読みやすい、と思う構文を使えばいいよ。
786nobodyさん:02/07/12 12:47 ID:???
>784
$name = "0";
の時に変わるな。
787 ◆JAPH9PWA :02/07/12 12:57 ID:???
>>786
あう、そういえばそうだ。
単なる文字列だとしても別の意味をもつ文だね。
788784:02/07/12 14:42 ID:???
>>785
なるほど。勉強になりました。
ありがとうございました。
>>786
そういえばそうでした。
鋭いご回答ありがとうざました。
789nobodyさん:02/07/12 17:48 ID:???
# 排他処理をしたいです。
# ローカル環境(WindowsMe+Apache+Cygwin付属のPerl)では成功するのですが、
# サーバで実行するときには、必ず失敗します。
# コーディング上の落ち度がありましたらご教授ください。
sub create_lock {
  my ($lockfile, $retry) = @_;
  while (!mkdir($lockfile, 0755)) {
    if (--$retry <= 0) {
      return undef;
    }
    sleep(1);
  }
  return 1;
}

sub remove_lock {
  my ($lockfile) = @_;
  rmdir($lockfile);
}

#上記関数の利用例
my $lock_handle = &create_lock($dir_lock, $lock_retry);
if (not $lock_handle) {
  &print_error($resource{writedatafailed});
}
#ここで処理する
&remove_lock($dir_lock);
790789:02/07/12 17:48 ID:uV0iCTit
あげわすれました。すみません。
791nobodyさん:02/07/12 17:53 ID:???
排他処理は専門スレがあるよ。
ttp://pc.2ch.net/test/read.cgi/php/1024795138/
792789:02/07/12 18:03 ID:???
>>791さん、ありがとうございます。そっちにいきます。
793nobodyさん:02/07/12 19:41 ID:mbAMx/DL
すいません、質問させてください。

タブ区切りの表から、一行ずつ取得し、grepで検索をかけ、
マッチしたものとマッチしなかったものの一覧を作成したいのですが

・条件に、検索キーワードは複数。(or形式)
・行末に、ヒットしたキーワードのみ挿入(複数のうち、該当した物だけ)

というものがあります。
その時

if(grep /$kw{$key}/,@line){#配列の中にキーワードが入っているなら
chomp @line;
if($check_flag == 0){
push(@result,@line);
push(@result,$kw{$key});#resultに追加
$check_flag = 1;#別のところでフラグに使っている
$flag = $line[0];#別のところでフラグに使っている
$no_count = 1;#一回目かそうで無いかのフラグ
push(@result,"\n");#行末にキーワードをつける
}elsif($check_flag == 1){#二回目からはキーワードのみを最後につける
push(@result,$kw{$key});
$no_count = 1;

とした時、配列の最後に$kw{$key}をpushで押し込むと、強制的に改行が入ってしまいます。
かといってchompをすると、全部改行が消えてしまい、全部のデータで一行扱いになってしまいます。
どうにか最後の改行のみ消す方法はありませんでしょうか?


取得した行+キーワードx個
取得した行+キーワードx個



というような表を、上記のスクリプトに手を加える程度で
作成することは可能でしょうか?

すいませんが、わかる方がいらっしゃいましたらご教授ください。
794nobodyさん:02/07/13 00:01 ID:???
>>793
とりあえず突っ込んでおこう。↓は何ですか?
push(@result,"\n");#行末にキーワードをつける

あと$kw{$key} に改行が含まれる可能性は?
つーかそもそも if (grep /$kw{$key}/, @line) { 〜でやりたい事が出来るのかねぇ。疑問だよ。
795nobodyさん:02/07/13 01:13 ID:???
Perlのスクリプトの試用版を配布するときに、ソースを見られなくするには、
どうすればよいでしょうか。

バイナリ化して、プロテクトをかけると聞いて調べたところ、
バイナリエディタというものを見つけましたが、
プロテクトの仕方がどうしても解かりません。

プロテクトするほどのソースは書けませんが、
どうかよろしくお願いします。
796nobodyさん:02/07/13 08:29 ID:???
>>795
コンパイルしてしまうか、Perl2EXEなどを使うしかないと思われ。
797nobodyさん:02/07/13 22:35 ID:xEQW3A4y
名前:年齢
A  :22
B  :31
C  :13

上記のような二次配列を連想配列をつかって作成したのですが、
これをソートするのはどのようにすればいいのでしょう・・?
知人の考えで、年齢をハッシュのキーにしてソートすると言う案があったのですが、
同じ年齢の場合には、上書きされてしまうのでその案は使えませんでした。
どのようにすればいいでしょう・・?
798nobodyさん:02/07/13 22:49 ID:???
foreach(sort {$hash{$a} <=> $has{$b}} keys %hash){
print qq($_ : $hash{$_}\n);
}
799nobodyさん:02/07/13 22:49 ID:???
タイプミススマソ。
適宜修正して。
800nobodyさん:02/07/13 23:28 ID:???
795>>796さん、お答えありがとうございます。
今、ラクダ本で、コンパイルについて見ています。

しかし、use Protect ;とファイルにはあるのですが、
この Protectの部分について書かれていません。

use Protect ; は、どうやればできるのでしょうか。

801 ◆JAPH9PWA :02/07/14 00:45 ID:???
>>800
ラクダ本のどこだかわからないが、
それは「自分でプロテクトモジュールを作成してね」という意味だと思う。
とりあえずそれを実装するには、
・Perlに構文の理解
・CPANのFilterライブラリの使用法
・暗号化ライブラリの使用法
が最低限必要だと思うよ。
802お酢カル ◆myMazZ7Y :02/07/14 01:07 ID:???
>>801
説明できないオナニー野郎は(・∀・)ウセロ!!

まぁ>>800は馬鹿だからこれでいいかと
------------encode-------------------
while(<>){
$n= unpack "h*", "$_";
$n=~y/123456789fedcba/abcdef987654321/;
$e= pack "h*" , "$n";
print $e;
}
803nobodyさん:02/07/14 01:08 ID:???
800>>801さん、ありがとうございます。

googleで、検索していたのですが、use MD5; というのは、
見つけました。
私には、まだ敷居が高そうです。

e-shoppyというSHOPスクリプトの試用版にバイナリエディタを
使うようにあったので、試用版って、こんな感じで配布しているんだと
思い、気になるので調べていました。

スクリプトを売る前に、試用版として、こんな感じで配布すれば、
ソースがプロテクトできるので、有用だなと興味を持ちました。

804nobodyさん:02/07/14 02:43 ID:vNhQYRiQ
質問させてください。
今、perlでBBSを書いているのですが、
大体できて知り合いの所に入れてもらったりして
動作確認しました。

色んな環境の人のところで正しく動作したのですが、
(perlのバージョンが5.5or5.6,実行権限がnobody,オーナー等)
一人だけ動作がおかしい人がいるんです。

何がおかしいのか調べてみたら、
サブルーチンでseekさせてメインのルーチンに戻ってくると
seekさせたのが無かったことに?なってるんです。
サブルーチンでどんなにseekさせても
メインのルーチンで続行するとなぜか次の一行は空行、
その次の一行はファイルの一行目を読み込みます。

そのおかしくなる人の環境は
OS NAME = freebsd
PROCESS ID = 5854
PERL EXECUTABLE = /usr/local/bin/perl
PERL VERSION = 5.00503
ってな感じです。権限はオーナー権限です。
他の、perlのバージョンが5.5の人のところではちゃんと動いてます。
この人の環境になにか特別なものがあるとは思えないので、、、
ただ、他の人はみんなlinuxなんですけどそれって関係ありますか?

コーディングの問題かとも思っていろいろ試行錯誤してるのですけど
もう分からないんです・・・
805nobodyさん:02/07/14 02:51 ID:CbCEC3kH
>>804
ソースもどこかにアップしてみてよ。
806nobodyさん:02/07/14 03:15 ID:???
804です。
UPしてみました。なにぶん、perlでの初めてまともな作成物なので
見るのも辛いところもあると思いますが、よろしくお願いします。
ttp://naha.cool.ne.jp/b3b3b/styx.zip
807 :02/07/14 03:23 ID:???
アーカイブじゃなくtxtだとすぐ見られるのだが・・・
808nobodyさん:02/07/14 03:25 ID:???
ライブラリに分割してあって txt だときっついです。。。
もうしわけないです;;
809nobodyさん:02/07/14 03:42 ID:CbCEC3kH
1つおもいあったったのが、たとえばサブルーチン delete_art などにおいて、
sysread関数と他の方法による読み込みの混用が存在しています。

これは、わたしの手元のラクダ本に書いてあることですが、これらの混用は、
あなたがウィザード級の腕前の持ち主でないかぎり推奨できないとあります。
810nobodyさん:02/07/14 04:04 ID:???
804です。アドバイス有難うございます。
どっかのサイトで行数を数える一番効率の良い方法ってのが出ていまして、
sysread使ってましたので、行数を数えるのにsysread使ってます。

sysread使わないで書き直してもみます。
いまおかしくなってる環境の当人に連絡が取れないので
今すぐには無理だと思いますが。

ただ、殆どの人のとこでは正常に動いていて
その人のとこでだけ動かないっていうのが気になります。
環境に依存するような問題があるのでしょうか?
(ファイルを扱う関数の、実装の違いとか)

らくだ本欲しいですけど
貧乏なので本屋で眺めるだけです;;
perl は立ち読みと WEB と皆さんの素晴らしい作品で勉強中です。
811nobodyさん:02/07/14 04:15 ID:CbCEC3kH
>>810
恐らくではありますが、FreeBSD環境では sysread関数と他の読み込みの混用の
面倒をみてくれないということでしょう。
sysread関数というのは、直接システムコールを呼び出しているので混用した
場合に処理に見合った動きが期待できなっかったりするようです。
まぁ、単純に sysread関数を read関数に書きかえるだけで恐らくうまくいくで
しょう。

それから、効率よく行数を数えるのなら以下をやってみてはどうでしょう。

while (<FILEHANDLE>){}
print "全行数は: $.\n";
close(FILEHANDLE);
812nobodyさん:02/07/14 04:24 ID:???
while (<FILEHANDLE>){}
最初はこういう方法とっていたのですが、速度が良くないようです。
ベンチとりまくってみましたが、
バッファにsysreadで読んでtrするほうが圧倒的に早かったです。
1000レスとかになるログだともろに差が出てきたので、、、

read で書き直して、ベンチマークと相談して
当人にためさせてみますね。

あと、問題の出ている個所の本元は、&std::pick だと思います。
ここでもsysreadで行数数えているので、ご指摘の問題があるのだと思います。

でもおかしいんですよね、、、
このpickルーチンだけ抜き出した簡単なテスト用cgi作って
彼にためさせたらちゃんと動作してたんですよね。
(任意の行にseekちゃんとしてる)

パッケージとか絡むとなんか違うのかなぁ〜
813nobodyさん:02/07/14 04:29 ID:CbCEC3kH
>>812
速度の差なんて人間の感覚では気づかない程度のミリ秒単位だからそう
気にすることないと思います。 もしこれが遅いのならC言語などで書く
ようにすることを考えるべきです。
814nobodyさん:02/07/14 04:44 ID:???
ミリ秒の差だと思ってベンチとって見たら
0.数秒の差だったです・・・

テストケースのログで、
(BBSのトップに○○スレのそれぞれ最新の○件を表示みたいな)
そのスレが1000レスとかあると、一行目からたとえば950行目を探すのに
while (<FILEHANDLE>)式とtr式で物凄い差が出ました。
それが20スレとかあるともう体感できそうなくらいの差だったので。

ベンチマーク用のルーチン作って2000行のログのうち**行目をサーチする、
というのを1000回まわすのを自宅でやってみたところ
tr式の方が15倍くらい早くて、
従来の方法だと固まったんじゃないかってくらい遅かったです(もう一分位;;)

BBSで使う場合1000回も回さないですけど
それでも標準的表示数で0.15秒くらいの差が出てました。

私はもともと最初にプログラムを触った時
みんなマシンパワーがなくてなんでも高速化高速化があたりまえの頃だったので
なんか貧乏癖がついてるのかもしれません。
perlで久しぶりにプログラミングってのを再開してます。

もうちょっとおおらかにプログラミングしてみます。
いろいろ有難うございました。
815nobodyさん:02/07/14 04:48 ID:CbCEC3kH
>>814
0.1秒でも速くしたいのなら別ファイルに常に行数のみを保存しておく
などの方法もありますが、そこまでしてもPerlで速く処理させたい?
816nobodyさん:02/07/14 05:02 ID:???
別ファイルに行数保存してますよ〜
でも任意の行数にシークするってのはできないですよね。
(関数としてはない)ユーザーが工夫しないと。

書き込みがあったとき、削除のとき、だけは再度行数を取得してます。
もし、別ファイルが不慮の事故でいかれてたら一生ずれたまんまになるので。

perlでそこまでして、とは思ってないです。
生意気そうなこと言って申し訳ありません。
でも出来るだけ早く出来るならそのほうがいいかな〜ってだけです。

c-boardのソースとかみたらなんかすごくてブルーなっちゃって
高速化しないとだれも相手にしてくれないかな、って囚われていました。
早くしなきゃ、早くしなきゃって。
でも殆どの人はそんなこと気にしてないんですよね。

それと単純にベンチで段々確実に改良ごとに早くなってくのが
楽しかった、ってのもあります(笑

まだまだ勉強中の身ですので努力して良い物作れるようにがんばります〜
817高速化遊戯:02/07/14 05:46 ID:Iun5VHk7
別ファイルに、行頭のファイルポインタの一覧を保存する
というはダメですかね?
任意の行に飛ぶ時はこっちをループでまわして
得られたファイルポインタの所にseek、と。
余計なデータが無い分、ループまわすのも早そうだし。
試してないからなんとも言えないけど。
818nobodyさん:02/07/14 12:11 ID:???
804です。
大して技術も基礎もなってないのに
しかもperlで高速化とか言ってるのは
よく思われないみたいなので、もう言うのやめようと思ったのですが
高速化遊戯さんがレス下さってるので、書きます。

別ファイルだと、結局そのファイルを何らかの形で取り込まないといけないです。
while (<FILEHANDLE>){}が遅いのってベンチとってないから
断言できないですけど、ファイルの大きさうんぬんより
perlの持ってるファイルから一行取り出すための作業が
遅いんじゃないかと思ってます。(憶測で物言ってすみません)

それだったら、もとのファイルの各行にインデックスつけた
データ形式にして、
もしそれが数千行とかあるファイルだったらですけど
いくらかずつseekさせて、インデックスを拾い読みして
目次見たいの作って、任意の行を拾うときは、
その目次見て近そうなとこから探すほうがいいかと思いました。

つづく、、
819nobodyさん:02/07/14 12:19 ID:???
俺はデータファイルの頭に、100行毎にファイルポインタ記録してるよ
ここみたいなBBSで、一応10000レスをリミットにしてるから
9桁(ファイルポインタ)×100 = 1KB程度がインデックスに使われてる

その代わり読み込み時の落ち込みは少ない
レス5850を読む、なら5800行目のfpを探してseek
そこから普通に行処理するだけだから。

後はファイルのお尻〜行を読むtailみたいメソッドを書いてる位。
perlで低レベルの関数使うのは面倒だから、どうしても行読み出しで
グルグルしがちだけど
工夫すれば極端なパフォーマンス低下は防げると思うよ
820nobodyさん:02/07/14 12:22 ID:???
お、今書いてるのか ⊂(´ー`⊂⌒ヽつ

>perlの持ってるファイルから一行取り出すための作業が
>遅いんじゃないかと思ってます。(憶測で物言ってすみません)

俺もそう思う。テストした訳じゃ無いけど
sysreadでバイト読みする方がずっと早いと思うよ。
だからと言って、Cでもperlでも低レベルの関数はそれなりに
使い辛い訳で・・・
821nobodyさん:02/07/14 12:23 ID:vNhQYRiQ
最初、そういうのを考えたのですが
もうログの形式を変えたくなかったのでやめました。

それにせいぜい1000行前後なので直接改行の数を数えることにしました。
それで書いたルーチンが次のようなものです。
(勉強中なのでおかしいとこあると思いますけど、、、)

sub pick {
  my $fh = shift;
  my $hit = shift;
  my $bufsize = 4096;
  my ( $per, $buf, $line, $prev );
  seek( $fh, 0, 0 );
  binmode $fh;
  while ( sysread $fh, $buf, $bufsize ) {
    $prev = $line;
    $line += ( $buf =~ tr/\n// );
    last if $line >= $hit;
    $per++;
  }
  my $over = $hit - $prev;
  $buf =~ /(^([^\x0D\x0A]*\x0D?\x0A?){$over})/;
  seek( $fh, $per * $bufsize + length($1), 0 );
}

これでベンチとってみたらびっくりするくらい早かったです。
一行ずつかぞえるのの、15倍くらいの速さでした。
数千行あるようなファイルをいくつもまわす場合は明らかに
体感できるくらいの差がでました。
それで嬉しくて調子のって使っちゃったです・・・

でも良くないようなので、他の方法探してみます。
(FreeBSDだけなのかな?、ダメなのは)
822nobodyさん:02/07/14 12:32 ID:???
>>821
最近コード書いてないんで殆ど忘れちゃったんだけど
俺も>>809さんの言うとおりだと思う
Cで速度を求めてfgetsからreadにした時に、そう言う問題に嵌った事有るよ
良く覚えて無いんだけど、結局は低レベルと高レベルの読み込み関数を
併用したのが間違いだったと思う
823nobodyさん:02/07/14 12:38 ID:vNhQYRiQ
>俺はデータファイルの頭に、100行毎にファイルポインタ記録してるよ

うわぁ、それスマートです;;
とても勉強になります。
今作ってるのはもう固まってきちゃってるので
大きいバージョンUPの時にでもそういう手法でやってみます。
いぱーいレスつけられますもんね〜

>perlで低レベルの関数使うのは面倒だから、どうしても行読み出しで
>グルグルしがちだけど

うんうん。地が貧乏性なので、配列にごっそりとかぐるぐるとか
なんか疑問に思っちゃって。

いろんなBBSのスクリプト見たりあさったりしたんですけど
意外と、みんなぐるぐるで、グルグルでいいんかよ〜って思ってたんです。
だからこういう具体的な工夫例聞けてとてもやる気でました。
824nobodyさん:02/07/14 12:40 ID:???
と言う訳で819の方法は我ながらお勧めなんだけどなあ(w
ログのコンバータ書いた方が後々苦労しない気もしないでもない。
これだとシステムよりの関数は一切使ってないから
つーか1000行程度ならぶん回しても問題無いんじゃない?
825nobodyさん:02/07/14 12:41 ID:???
優良スレ認定
826nobodyさん:02/07/14 12:42 ID:vNhQYRiQ
問題の解決の糸口については、皆さんのアドバイスのおかげで
つかめてきたのでこれから色々その線でしらべて見ようと思います。
827nobodyさん:02/07/14 12:45 ID:???
わはは頑張って下さい、
〜〜する清原みたいなバカスレが再現出来ると結構嬉しいもんです(・∀・)
828nobodyさん:02/07/14 14:31 ID:ZiG6NcZV
perl初心者ですが、よろしくお願いしますです。
現在、赤帽7.2の上にRPMとして乗っかっているPerlのバージョンは、5.6なのですが、
ある既製のPerlスクリプトを使いたいのです。
そのPerlスクリプトは、Linux上でJperlを必要としているのですが、
私が探した範囲では、Linux用のJperlのパッチは、5.005ベースのものしかありません。
パッチをあてようとしてもうまくあたりません。

この、Jperlを必要としているPerlスクリプトをLinux上で動かすには、
どのような解決策があるのでしょうか。どなたか、よろしくお願いしますです。
829nobodyさん:02/07/14 14:33 ID:???
なぜjperlが必要なのか調べ、jcode,pl、Jcode.pmにその個所を置き換える。
830nobodyさん:02/07/14 15:00 ID:xUfIRkak
>>828
Jperlを必要とする既製スクリプトってたいしたことなさそうだから、
一から自分でコーディングしてみては?
831nobodyさん:02/07/14 15:29 ID:ZiG6NcZV
>>829
>>830さん
レスありがとうございます。確かに、その通りなんですが、
1>そのスクリプトが200KBほどある
2>日本語の文章の構造解析のスクリプトなので、日本語処理がチョット複雑
3>あくまでもテストとして、ちょっと動かしてみたいだけなので、できるだけ手間を
かけたくない
という理由で、Perl5.005のソースをDLして、それにパッチを当てようと思っていた
のですが、Perl5.005のソースがなんか見当たらないのです。
832nobodyさん:02/07/14 15:52 ID:???
> Perl5.005のソースがなんか見当たらないのです。

簡単に見つかる予感。
833831:02/07/14 16:00 ID:ZiG6NcZV
>>832
ググルで、"perl5.005 src"で見つけました。
すんませぬ。"perl5.005 source"とか”rpm"とかで検索していたオラが
間抜けでした。逝ってきます。
Perl暦2日なんで、許してやってくだされ。
834nobodyさん:02/07/14 19:04 ID:???
sysopenに使うパラメータとかなんだけど、

O_RDONLY = 0
O_WRONLY = 1
O_O_RDWR = 2

とかは分かってるけど

O_APPENDとかは?
検索してもヒットせず…
おしえてくらはい
835nobodyさん:02/07/14 20:53 ID:???
>>834 追記以上の説明が必要なん?
http://www.linux.or.jp/JM/html/LDP_man-pages/man2/open.2.html
大体こんな所でしょ
836nobodyさん:02/07/14 21:01 ID:???
ああ、割り当てられてる番号か
それって歴史的に環境依存だから0.1位しか信用出来ないよ?
837二つ目のお気に入りとして使って:02/07/14 23:31 ID:gWk8eFjt
今までに無かったrink集です。ナビ
ゲーションリンク機能を使って右フ
レームにリンク先をさくさく表示。
今までのリンク集のようにいちいち
戻らなければならないなんてことは
ありません。

http://home9.highway.ne.jp/cym10262/
838nobodyさん:02/07/15 00:06 ID:???
ファイルのコピーってどうやれば出来ますか?
元ファイル開いてメモリに読み込んで別ファイルに書き出すじゃメンドイし
どの環境でも使える方法でなんか一発でする方法ないですか?
839 :02/07/15 00:09 ID:???
>>838
copy a b
840nobodyさん:02/07/15 00:18 ID:???
>>838
Perl5なら以下で出来る。

use File::Copy;
copy("file1", "file2");
841838:02/07/15 00:24 ID:???
>>840
有難うございます、上手く出来ました。

>>439
やってないけどそれだと多分エラーです。
842 :02/07/15 00:25 ID:???
>>841>>439のなにがエラーなんだ?
843838:02/07/15 00:32 ID:???
>>842
やってみたらやっぱりエラーが出ました。

String found where operator expected at test.cgi line 1, near
(Do you need to predeclare copy?)
syntax error at test.cgi line 1, near "copy "a.txt""
String found where operator expected at test.cgi line 1, near
(Missing operator before "b.txt"?)
Execution of test.cgi aborted due to compilation errors.
844 :02/07/15 00:36 ID:???
>>843

>>439は絶対やっちゃダメだぞ。
犯罪だからな。エラー云々以前の話だ。
がんがれよ。
845nobodyさん:02/07/15 00:41 ID:???
>>843 通報すますた
846838:02/07/15 00:54 ID:???
>>844
マジですか、っても明らかにおかしいのでローカルでしかやってませんが。
今後気をつけます。
847nobodyさん:02/07/15 07:25 ID:???
もし$dataに&もしくは=のどちらか一方でも含まれていなかった場合は終了する
という場合は

if(($data !~ /&/) || ($data !~ /=/)) {exit;}

こうでいいんでしょうか?
848nobodyさん:02/07/15 07:59 ID:Gdw1y7VE
exit unless $data =~ /[&=]/;

私も初心者だから違うかもしれないけど
849nobodyさん:02/07/15 09:00 ID:AMXAGLXX
>>847
聞くより試した方が早いだろうに。

exit if(index($data,'&') == -1 || index($data,'=') == -1);
こっちのが数倍軽い。美しくは無いが。
850nobodyさん:02/07/15 09:42 ID:???
>>847
exit unless $data =~ tr/&=//;

851nobodyさん:02/07/15 12:21 ID:???
Active Perl 5.6.1.633 きたね。
852nobodyさん:02/07/15 12:44 ID:???
htmlファイル上のフォームからCGIへ値を送信して、その結果を新しいウィンドウを開いて表示させたいんですが、
全くもってうまく動きません。
具体的にもうしますと、最近サイトのトップページでよく見かけるようなミニアンケートを作りたいんですが、
ラジオボタンで選択した値などが、まったく送信されてないみたいなんですが、
htmlファイル上のフォームから、別ファイルのCGIへ値を送信する場合なにか特別なことが必要なのでしょうか?
853nobodyさん:02/07/15 13:03 ID:???
フォーム の html : これに送信するパラメータの名前や値がかいてある

送信ボタン押す

ブラウザが、指定されたメソッドに従ってパラメータの名前や値をまとめる
そして cgi に送信

cgi でそれを受け取る

受け取ったのはまとまらさってるので
パラメータの名前や値に分解しなければなりません

分解した

色んな処理

処理が終わったから新しい画面を表示させよう、
表示させるにはブラウザにhtmlを送ります(正確には他にも必要)

cgi からおくらさってきた〜〜

ブラウザに表示

どこでコケてる?
854nobodyさん:02/07/15 13:18 ID:???
>>853
たぶん、

ブラウザが、指定されたメソッドに従ってパラメータの名前や値をまとめる
そして cgi に送信

cgi でそれを受け取る

あたりでこけてる気がするのですが、
<input type="hidden" name="mode" value="vote">
をフォーム内に記述して、
if($param{mode} eq 'vote'){
 簡単な処理
}
としてみても、「簡単な処理」を一切してくれないので、値を送信しないでCGIを起動だけしてる感じです。
$param{mode}が空の時は、投票結果表示の処理をさせてるので、新規ウィンドウに投票結果が反映されていない
グラフがむなしく表示されています。

なにがいけないんだろ。。。。。。
855nobodyさん:02/07/15 13:29 ID:???
データ受け取ってねーよ(^^;
この処理がやってないぞ。定型。

local($pair,$buffer);
if($ENV{'REQUEST_METHOD'} eq 'POST'){
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}elsif($ENV{'REQUEST_METHOD'} eq 'GET'){
$buffer = $ENV{'QUERY_STRING'};
}
local(@pairs) = split(/&/,$buffer);
foreach $pair(@pairs){
local($name,$value) = split(/=/,$pair);
$FORM{$name} = $value;
}
856nobodyさん:02/07/15 13:30 ID:???
その $param{mode} はどやって取得してるんです?
857nobodyさん:02/07/15 13:50 ID:???
>>855
すいません、書き忘れてましたが、データを受け取る処理も書き記しております。
頂いたレスを見ますかぎり、CGI→同じCGIのデータの受け渡しと、特に変わらない処理でデータを受け取れる
ということなのでしょうか。
858nobodyさん:02/07/15 14:02 ID:???
データ受け取りはPOSTかGETが主流だから特に変わりはないはずだよ。
859nobodyさん:02/07/15 14:25 ID:???
>854
$param{'mode'}にしたら直ったりは?
860nobodyさん:02/07/15 14:31 ID:???
>>859
俺もいつも ' とか省いてるけど性情に動く
861nobodyさん:02/07/15 14:33 ID:???
$param{mode}
$param{'mode'}
$param{"mode"}

どれでも変わらんよ。
862nobodyさん:02/07/15 14:51 ID:???
>860-861
Perlのバージョンに影響されない?
863 ◆JAPH9PWA :02/07/15 15:29 ID:???
>>862
Perl4ならクォートは必須だけど、今更4との互換性を考える必要は無いと思う。

864nobodyさん:02/07/15 15:59 ID:???
>863
悪かったな!
漏れのプロバのスペースがPerl4なんだYo!(涙ッシュ
865nobodyさん:02/07/15 17:20 ID:???
Tripodでエンドレスバトルやりたいんだけど設置した後404エラーが出てできない・・・
設置方法が悪いのかな?それとも対応してないとか?
866nobodyさん:02/07/15 17:20 ID:???
URL間違えているだけ。
867865:02/07/15 17:21 ID:XqyW9sRL
>>866
俺?
868865:02/07/15 17:22 ID:XqyW9sRL
404じゃなかった403だ
869865:02/07/15 17:27 ID:XqyW9sRL
URLは間違えてないと思うんだけど
870nobodyさん:02/07/15 17:29 ID:???
403 アクセス不可
871nobodyさん:02/07/15 17:30 ID:Zf9qVko0
872865:02/07/15 17:59 ID:XqyW9sRL
indexけしてからcgi-binはいってみたけどそれすら403ではいれん
873nobodyさん:02/07/15 18:13 ID:???
PerlスクリプdをEXEに変換する、Perl2EXEっての落としたけどどうやって使うの?
874すいません。。。:02/07/15 19:01 ID:GXUWDI7H
自作Perlのテストをローカルでやるために
Quid Pro Quo 2.1.2が欲しいんです。
http://www.socialeng.com/html/download.html
で落とせると聞いたのですが、一向につながらない・・・
ここ以外では配付とかされていないんでしょうか??
よろしくおながいします。
ちなみにMacintosh用です。 
875nobodyさん:02/07/15 19:06 ID:???
Mac板のこんなソフト探してます、
とかのスレの方がふさわしくない?
876nobodyさん:02/07/15 19:25 ID:/pkMmlTE
クエリーで送信された値が、エレメントの順番どおりに
配列に入らないのですけれど、どこが変か教えて下さい。
htmlの部分↓
ーーーーーーーーーーーーーーーーーー
<form method="get" action="hoge.cgi">
<input type="text" name="E0" size="4" istyle="4" maxlength="4">年</input><br>
<input type="text" name="E1" size="2" istyle="4" maxlength="2">月</input><br>
<input type="text" name="E2" size="2" istyle="4" maxlength="2">日</input><br>
<input type=radio name="E3" value=1 CHECKED>男<br>
<input type=radio name="E3" value=2>女<br>
<input type="submit" value="押す">
<hr>
</form>

cgiの部分↓
ーーーーーーーーーーーーーーーーーー
$buffer = $ENV{"QUERY_STRING"};
@buf = split( /&/ , $buffer );

foreach $data ( @buf ){
( $name , $value ) = split( /=/ , $data );
$FORM{$name} = $value;
@list = values %FORM;
};

print"list[0] $list[0]<br>\n";
print"list[1] $list[1]<br>\n";
print"list[2] $list[2]<br>\n";
print"list[3] $list[3]<br>\n";

これをやってみるとこんなふう↓になります
ーーーーーーーーーーーーーーーーーーー
list[0] E3の値
list[1] E0の値
list[2] E1の値
list[3] E2の値
877nobodyさん:02/07/15 19:27 ID:???
受け取ったデータをなぜ
@list = values %FORM;
するのかわからん。
878すいません。。。:02/07/15 19:43 ID:GXUWDI7H
>>875
逝って来ま。
879876:02/07/15 19:46 ID:???
>>877さん←神
分かりました〜♪ありがとうございます。

$buffer = $ENV{"QUERY_STRING"};
@buf = split( /&/ , $buffer );

foreach $data ( @buf ){
( $name , $value ) = split( /=/ , $data );
$FORM{$name} = $value;
};
print"FORM[0] $FORM{E0}<br>\n";
print"FORM[1] $FORM{E1}<br>\n";
print"EORM[2] $FORM{E2}<br>\n";
print"FORM[3] $FORM{E3}<br>\n";
880nobodyさん:02/07/15 21:25 ID:???
見栄えをよくするために行頭にはタブを入れてるんですが

     print <<"HTML"

     <html><body>〜略〜</body></html>

     HTML

とやりたいんですがこれだとエラーになります。
タブを入れたまま動くようにするにはどうしたらいいでしょうか?

あとタブを入れてないと動くのですがその中に<a href="mailto:[email protected]">xxx</a>

があるとエラーになります。どうしてなのでしょうか?
881nobodyさん:02/07/15 21:28 ID:???
>print <<"HTML"
 ; が入ってないけど、動くの?

>href="mailto:[email protected]">xxx</a>
\でエスケープしたら?
href=\"mailto:aaaa\@hotmail.com\">xxx</a>
882 ◆Smt8k/ss :02/07/15 21:29 ID:wkNqkF1j
    print <<"    HTML";
    <html><body>〜略〜</body></html>
    HTML
883nobodyさん:02/07/15 22:32 ID:h7+zOLje
>>882

一応動いたんですがもうちょっと見栄えがいいやり方無いでしょうか?
884nobodyさん:02/07/16 00:48 ID:???
print qq~
<html><body>〜略〜</body></html>
~;

@はエスケープしる
885nobodyさん:02/07/16 02:17 ID:???
質問よろしいでしょうか?
ダイス機能付きのチャットを作っているのですが、どうにもrand関数の値が偏ります。
3D6(6面ダイス3個の判定)の場合、1個目の数字が連続で同じ数字になります。
試しにWeb上にアップして試した所、そっちでは3個目の数字が連続で同じ数字になりました。
これはrand関数において仕方のないことなのでしょうか?
もし解決策などがあるのでしたらご教授いただけると嬉しく思います。

以下はダイスロール部分のソースです。

# $in{'dice_any'}にダイスの数、$in{'dice'}に何面ダイスかの情報が入ってくる。

srand(time);
$dice_roll = qq(<br><b><font color=0000FF>$in{'dice_any'}D$in{'dice'} ダイス判定</font></b> <font color=0066FF>);
$dice_all = 0; # ダイスの出目の合計用の変数
$plus = "";
while($in{'dice_any'} > 0){# ダイスの数が尽きるまで
  $dice = int(rand($in{'dice'})) + 1;
  $dice_roll .= qq($plus$dice );
  $dice_all += $dice;
  $in{'dice_any'}--;
  $plus = "+ ";
}
if($dice != $dice_all){# ダイスが2個以上なら
  $dice_roll .= qq( = <b>$dice_all</b>); # 合計値表示
}
$dice_roll .= qq(</font> );

# この後$dice_rollをログに保存

どなたかよろしくお願いします。
886nobodyさん:02/07/16 03:00 ID:???
srandするな
887885:02/07/16 03:07 ID:???
使うサーバーがPerl4なんです・・・。
888nobodyさん:02/07/16 03:09 ID:1NQx5kwR
root--test.pl
|
|-folder1
|-main.cgi

このようなファイル構造なんですが
main.cgiからtest.plを参照することは可能なんですか・・?
889887:02/07/16 03:13 ID:1NQx5kwR
>>888
ずれてる自己レス・・・
root にtest.plが有って
folder1にmain.cgiが有る状態です

つまり下位のファイルに参照できるかどうかと言うのが疑問なのです・・・
890nobodyさん:02/07/16 04:53 ID:???
絶対パスで指定しませう。
require '/home/mona/public_html/test.pl';
大体こんな感じ。鯖でちがう。
891nobodyさん:02/07/16 06:01 ID:???
PerlとかでWEBページを所得する
ソケットプログラム書くときサーバからのレスポンス(OK 200とか)がうざいんですが
これを消す方法ってないんですか?
892887:02/07/16 06:35 ID:1NQx5kwR
>>890
winだと相対パス行けるのですが
いざUPするとできません・・・
相対的にはこんな感じで
../member/data/point.pl
絶対的には
/home/as***/public_html/*****/cgi-bin/member/data/point.pl
こんな風なのですが・・・
893 ◆JAPH9PWA :02/07/16 08:49 ID:???
>>891
HTTPを使う限り、それを消す方法は無いよ。
単に無視するだけなら可能だけどね。
その場合は最初の空行までを読み飛ばせば良い。

>>892
パーミッションがあれば、相対でも絶対でもいけると思うけど。
894nobodyさん:02/07/16 08:49 ID:???
相対パスのときカレントより上のディレクトリは指定できない設定なんでしょ。
895852:02/07/16 09:20 ID:mWVjtM4S
未だに同じ問題で悩んでいる852です。

送信ボタンに、onMouseUPで新規ウィンドウを開き、そこにデータを受け取った後の結果を表示させるようにCGIにリンクさせてるんですが、
そのjavascriptをいれてると、データが送信されてないみたいです。

試しに投票フォームと同じウィンドウ上で結果を表示させると、うまくいきました。

submitボタンにビヘイビアを仕込むとダメなんでしょうか?
896ぽよぽようんこ(本物):02/07/16 13:47 ID:???
悩んでる内容も内容なら、説明も下手、キミには向いてないそれだけのこと。
897chmod:02/07/16 14:34 ID:2idpGCxq
chmod 0755, $filename;
でファイルがブラウザから見られるのに

$de="0755";
chmod $de, $filename;
でにするとファイルが見られなくなります。

chmod($de, $filename);
もダメです。
どなたか変数で指定する方法を教えて下さい。
898chmod:02/07/16 14:36 ID:2idpGCxq
>>897
あれ文字化け?してるけど、
コロンでなくカンマです。
899ぽよぽようんこ(本物):02/07/16 14:43 ID:???
そんな基本的なこと参考書に書いてあるだろ。キミも向いてないね。
900chmod:02/07/16 14:46 ID:2idpGCxq
$de="0751";
chmod($de,$filename);と755を751にしたらでできました。

しかしFTPプログラムでこのファイルを見るとなぜか
-wxr-xrwxになっています。どうしてでしょう。
901nobodyさん:02/07/16 14:52 ID:???
>>900
$de = 0755;
ダブルクォーテーション不要。
リテラルについてさらっと勉強し直しましょう。
902nobodyさん:02/07/16 15:11 ID:???
umaskは?
903nobodyさん:02/07/16 15:12 ID:???
スカラー変数の意味がわかっていない馬鹿がいるな…
904nobodyさん:02/07/16 15:37 ID:2idpGCxq
>>902
umask(0)です。
$de=0755;とかにするとその時点で正しく数字が入りません。
やはり変数を使って設定をするとパーミッションがぼろぼろになります。
Perlの仕様ということで考えます。
905nobodyさん:02/07/16 15:46 ID:???
だからperldoc嫁ってのに、どんな仕様だよ

$de_octet = oct($de);

perldoc dhmod
906885:02/07/16 15:52 ID:???
らくだ本を参考にsrandの種を以下のようにしたら乱数がばらけてくれました。
ありがとうございました。

srand(time() ^ ($$ + ($$<<15)));
907nobodyさん:02/07/16 16:01 ID:???
>>904
どうしようもないアフォですね。
908nobodyさん:02/07/16 16:07 ID:???
バカハケーン!
909852:02/07/16 16:53 ID:???
ようやく解決できました。どうもお世話になりました!はーこんな単純なことで長時間費やすとは・・・
910nobodyさん:02/07/16 18:06 ID:AR5JuM+5
新感覚のポータルコミュニティサイトが遂に出来ました!!
今までの出会い系サイトとは一味もニ味も違うサイトです。バーチャルタウンを実際に体験できます!!!
詳しくは下記UELをクリックして、確かめて!!
http://www.e-mansion.co.jp/co/ac.html
911nobodyさん:02/07/16 18:13 ID:XozL7fM5
>>907 >>908

■■■バカ名言■■■

バカって言うだけの奴ほど役に立たないものはない。
助けるか、無視するかをしなさい。

バカというだけというのは、助けもせず、無視もせず、
レスを余計に増やし、雰囲気を悪くする。
そういうのに限って突っ込まれれば適当にごまかしたり、逃げていく。

■■■どうせ六でもない奴だろうが■■■
912nobodyさん:02/07/16 21:41 ID:???
>>911
陸でもない/碌でもない
バカって言っていいですよね?

  ■■■どうせ六でもない奴だろうが■■■
  ■■■どうせ六でもない奴だろうが■■■
  ■■■どうせ六でもない奴だろうが■■■
  ■■■どうせ六でもない奴だろうが■■■
  ■■■どうせ六でもない奴だろうが■■■

バカハケ━━━━━(゚∀゚≡゚∀゚)━━━━━━ソ!!!!
913nobodyさん:02/07/16 23:36 ID:???
楽しいスレですね(微小
914nobodyさん:02/07/17 00:13 ID:???
>>912
ネタに乗ったハカ
どう見ても厨房
でもあんまりおいたしていると痛い目合わすよ。
915nobodyさん:02/07/17 00:24 ID:???
916nobodyさん:02/07/17 06:20 ID:???
おまえら、いい馬鹿っぷりでお兄さん感激だ(w
917nobodyさん:02/07/17 07:08 ID:???
タグを削除したいのですが、

$x = qq{<a href="http://www.yahoo.co.jp/">Yahoo! Japan</a>};
$x =~ s/<.+>//g;

のようにすると、最初の < と最後の > で全部消えてしまいそうな気がします。
最短マッチとかを使えばいいんでしょうか、使い方がわからないので教えてください。

(Perlメモを読んだところEUCしかできない方法らしいので
SJISでもやりたいので質問です)
918nobodyさん:02/07/17 07:41 ID:???
2002/07/17 07:41:20 を、time関数形式になおしたいけどどうするの?
919nobodyさん:02/07/17 07:52 ID:SEvMu7le
>>917
$x =~ s/<[^>]*>//g;

>>918
年月日時秒を分解して
(年は-1900してから)全て秒に直して足せば良いんじゃないの?
920nobodyさん:02/07/17 07:53 ID:???
>915
timelocal();
921nobodyさん:02/07/17 07:53 ID:???
>920 =~ s/>915/>918/;
922919:02/07/17 08:08 ID:???
馬鹿だ俺…
923nobodyさん:02/07/17 08:08 ID:???
>>917
HTML::Parserという手もある。
924nobodyさん:02/07/17 12:49 ID:???
rename("onefile","pict/$hensuu");
ってやるとunix/perlでは成功するんですが
ActivePerlじゃ成功しないんです。
rename("onefile","pict\$hensuu");
うえのようにしてもだめでした。たすけてちょんまげ
925 ◆JAPH9PWA :02/07/17 13:41 ID:???
>>924
…普通に成功してるけど?

というか、失敗したら$!を見る癖をつけよう。

rename(...) or die $!;
926nobodyさん:02/07/17 14:25 ID:tZJ3+xnS
>>924
エスケープしなきゃ駄目だよ
pict\$hensuu
 ↓
pict\\$hensuu
927nobodyさん:02/07/17 14:52 ID:tZJ3+xnS
と言うか、rename("onefile","pict/$hensuu");このまま
でも動く所がActiveperlさんの偉い所だったり
MACだとこうは行かないそうで
928nobodyさん:02/07/17 16:15 ID:???
>>927
MACのPerlってどんなんなんですか?
OSXで動くならまぁわかるんですが。
PerlでIriaみたいなの作ったら需要ありますかね?
Macでダウソマネージャーってありましたっけ?
929nobodyさん:02/07/17 16:28 ID:???
MacPerl
WWWcp

両方で検索してみれ。ただWWWcp最後にいつ使ったか
忘れたけど俺が使ったバージョンではマルチホーミングに
対応してなかった気がする。
つーか需要も何も難しくないからめずらしくも無い。
930924:02/07/17 17:45 ID:???
ActivePerlおかしくないですか?
perl -e 'print $^O;'とかできないんですけど、、
ほかにもいろいろ違うのかな?
931nobodyさん:02/07/17 17:48 ID:???
C:\>perl -e "print $^O;"
MSWin32
C:\>

ちゃんとなるよ。
932nobodyさん:02/07/17 17:49 ID:???
webプログラマーになりたいんですが、
linuxの使い方は必須で覚えないとダメですか?
933nobodyさん:02/07/17 17:50 ID:???
サァ?
934924:02/07/17 17:53 ID:???
>>931
さんくす。
DOSではダブルクォートがうんぬんってのはこれだったのか。
935nobodyさん:02/07/17 18:02 ID:0WM/CdU+
Cだとプリプロセッサだけ動かしてその出力を得ることができるんですが、
Perlでこれは可能ですか?

あるソースの保守をやっているんですが、ファイル名をパスの階層ごとに変数にしてて
もうわけがわかりません。変数展開したソースがホスィのです。

こんな感じ
open ("< /foo/bar/giko");
を、わざわざ
$FOO_dir = '/foo';
$BAR_dir = "$FOO_dir/bar";
$GIKO_file = "$BAR_dir/giko";
open ("< $GIKO_file");
としている。こんなのが何十個もある。
936 ◆JAPH9PWA :02/07/17 23:07 ID:???
>>935
残念だけど、プリプロセッサは無いよ。
その目的なら、デバッガが適当かなぁ。
perldoc perldebug
日本語ドキュメントなら、不完全だけど河馬屋のがあるよ。
http://member.nifty.ne.jp/hippo2000/perltips/perldbg.htm
937nobodyさん:02/07/17 23:14 ID:0q/AG7/8
はじめまして。
超初心者的質問ですが、探しても答えが見つからなかったので質問させてください。

flockでロックしたファイルは、他のcgiからの書き込みに対しても有効ですか?
あるCGIスクリプトでflock中のファイルについて、他のCGIスクリプトからの書き込みも防ぐことができるのでしょうか。
flockは、ファイルハンドルを指定して行うので、1つのCGIスクリプトでしか効果がないのかも知れないと心配になりました。

申し訳ありませんが、どなたかご存じの方、ご回答いただければ幸いです。
938コギャル&中高生:02/07/17 23:23 ID:q1y9WZog
http://go.iclub.to/ddiooc/

お役立ちリンク集
必ず役立ちます

コギャルとH出来るサイトはここ
ヌキヌキ部屋へ直行便

http://kado7.ug.to/wowo/

http://kado7.ug.to/wowo/-a.htm
939nobodyさん:02/07/17 23:37 ID:/oUfi8FN
新感覚のポータルコミュニティサイトが遂に出来ました!!
今までの出会い系サイトとは一味もニ味も違うサイトです。バーチャルタウンを実際に体験できます!!!
詳しくは下記UELをクリックして、確かめて!!
http://www.e-mansion.co.jp/co/ac.html
940 ◆JAPH9PWA :02/07/17 23:41 ID:???
>>937
一つのスクリプトでしか効果ないとしたら、
全く同じ二つのスクリプトがあったらどうなると思う?
1バイトだけ違って他は同じスクリプトがあるとしたら?
そんなんじゃ困るでしょ。

当然だけど、他のあらゆるスクリプト、プロセスに対して有効だよ。
ただし、flockの仕様上「書き込みを防ぐ」ことは出来ないから注意してね。
941nobodyさん:02/07/17 23:47 ID:???
>>937
全部のスクリプトが正しくflockしてれば排他処理はうまくいく。
flockは紳士協定だから、flockせずにいきなり書き込むような無法者がいると破綻する。
そのファイルにアクセスするのが自作CGIのみなら大丈夫だろ。
942937:02/07/17 23:48 ID:NR9AAdwq
親切な回答ありがとうございました。
また、flockは書き込みを防ぐのではなく、オープンを防ぐのですよね。
こちらもご指摘ありがとうございました。
943937:02/07/17 23:51 ID:NR9AAdwq
上の書き込みは>>940さんへのものでした。
>>942さんもありがとうございました。
自作スクリプトだけなので、大丈夫そうです。
安心しました。

本当にありがとうございました。

・・・あ、もちろん、ファイルハンドルは毎回違っても大丈夫ですよね?
>>940さんがあらゆるプロセスに対して有効って言ってくださっているので、
そういうことですよね。

では、頑張ってつくります!
ありがとうございました!!
944937:02/07/17 23:52 ID:NR9AAdwq
すみません。
>>941さんでした。

本当にありがとうございました。
945nobodyさん:02/07/18 00:00 ID:???
>>942
> また、flockは書き込みを防ぐのではなく、オープンを防ぐのですよね。

これは違う
946nobodyさん:02/07/18 00:21 ID:???
ファイルアクセスを防ぐのかな?
947 ◆JAPH9PWA :02/07/18 00:28 ID:???
いや、何も防ぎはしないよ。

flockの仕組みってのは信号機みたいなもんなんだよ。
"赤だったらちょいと立ち止まってくれ"という合図に過ぎない。
だから、無視しようと思えば無視できるんだよ。
無論、そんなことをしていればいつか事故が起こるのは必至だけど。

…てな説明を何処かで読んだよ。
948nobodyさん:02/07/18 00:46 ID:???
>946
>>387
949nobodyさん:02/07/18 03:09 ID:ES5M+zj/
flockを使わない別スクリプトがあったら危険だってこと?
950nobodyさん:02/07/18 03:19 ID:???
>>all

これ完璧だと思うけど、違うの?

open(OUT, "+< outfile.txt");
flock(OUT, 2);
truncate(OUT, 0);
seek(OUT, 0, 0);
print OUT "........";
close(OUT);
951nobodyさん:02/07/18 03:24 ID:???
>950
それのどこが完璧なのか聞きたい。
tu-ka,ファイルロックスレに逝って叩かれてこい。
952nobodyさん:02/07/18 09:30 ID:???
>>950
openとlockの間に他プロセスからのopenが来たらどうするつもりなんだろう・・・。
953 ◆JAPH9PWA :02/07/18 09:42 ID:???
>>165
別に問題ないのでは?

>openとlockの間に他プロセスからのopenが来たらどうするつもりなんだろう・・・。

とのことだけど、ファイルを破壊しているわけじゃないので無問題でしょ。
「他プロセスからのopen」がファイルを破壊したりflockを伴わなかったりしたら
そりゃ問題だけど、そんな赤信号を無視して突っ込んでくるヤツを止めることは出来ないし。
954バカです:02/07/18 11:38 ID:w/uBOa7p
 教えてください。
mySQLとPerl使っているのですが,ハッシュのことがよく分かりません。
 while(@res = $st->fetchrow_array) {
           $data{$res[0]}=1;
           }
こうすると、ハッシュdataに何も入って無いのですが、↓の様にすると
ちゃんと、ハッシュに格納されます。何故ですか?

 $i=0;
 while(@res = $st->fetchrow_array) {
           $data[$i]=$res[0];
           $i++;
           }
       foreach(@data){$data{$_}=1}
955nobodyさん:02/07/18 13:17 ID:pqv4qZv6
質問です。
sub A{
$a = "aaa";
&B;
}
sub B{
print $a;
}
&A;

サブルーチンAの中にサブルーチンBがある時、
Bの始めに引数の取得をしなくてもBの中で$aって使えるんでしょうか。
というか、今やったら出来たんですけど、どうしですか?
引数は必ず受け取らないとダメなんですよね?
956nobodyさん:02/07/18 13:19 ID:pqv4qZv6
訂正。
>Bの始めに引数の取得をしなくてもBの中で$aって使えるんでしょうか。

Bの呼び出しの時に引数を与えなくてもBの中で$aって使えるんでしょうか。
957nobodyさん:02/07/18 13:20 ID:???
>>955
だって、$aはmyなりlocalなりしてないのでスコープがグローバル。
もっともやってはいけないコーディング法の一つです。
958nobodyさん:02/07/18 13:21 ID:???
>955
Perlはデフォでグローバル変数扱いになるから使える。
959nobodyさん:02/07/18 13:25 ID:pqv4qZv6
やっぱり上のは違いました。質問し直します。

sub A{
&B;
}
sub B{
@array = @_;
print $array[0];
}
$a = "aaa";
&A($a);

この時、Aで引数を取得しないで飛ばしてBで取得しちゃってもいいんでしょうか。
960nobodyさん:02/07/18 13:26 ID:???
@_ってローカルでは?
961ぽよぽようんこ(本物):02/07/18 13:27 ID:???
>>957
おいっ! my と local の違いを勉強せいっ!
この場合、local でも使えるだろ!
962nobodyさん:02/07/18 13:37 ID:Rz8eDFr/
>>960
グローバルな特殊変数。
963nobodyさん:02/07/18 13:40 ID:???
>>962
なかなか不便だね。
とにかく、彼はもうちょっと構造化プログラミングについて勉強した方が未来のためかと。
964nobodyさん:02/07/18 13:42 ID:pqv4qZv6
謎はすべて解けた!
グローバル変数は引数を与えたり取得なんかしなくても
どこでも関係なく使えるってことだ!!
965nobodyさん:02/07/18 13:42 ID:???
>>957
ネタ?
グローバルが最悪というが、状況次第だろ
それにこれはローカルが要求される程
莫大な規模ではないし
>>960
ダネ
Bが@_ではなく、$aで取得すれば問題ない
966nobodyさん:02/07/18 13:43 ID:???
>>964
うん。まぁ・・・・・正解か。
967nobodyさん:02/07/18 13:43 ID:???
>>965
>グローバルが最悪というが、状況次第だろ
こんな小規模なプログラムかつ引数で渡せるものをわざわざグローバルにすべきではない。
968nobodyさん:02/07/18 13:44 ID:???
俺いまだに、myとlocalの違いがわからねえ。
969nobodyさん:02/07/18 13:45 ID:gTYoTB/P
>>964
どこでも使える=グローバル
局所でしか使えない=ローカル
970nobodyさん:02/07/18 13:45 ID:???
>>965
@_がローカルだと?
971nobodyさん:02/07/18 13:46 ID:???
>>961=>>965

かまってもらえなかったので自作自演で大暴れ。
972nobodyさん:02/07/18 13:46 ID:gTYoTB/P
>>968
localだとそこから呼んだサブルーチンでも有効。
>>955だとlocalにしても使えるがmyだと引き渡されない。
973nobodyさん:02/07/18 13:49 ID:???
なんとなく理解できたよ。
974ぽよぽようんこ(本物):02/07/18 13:49 ID:HgQ+L8cQ
>>971
ははん、オマエか、>>957のようなとんちんかんなこと書いたのは。
975nobodyさん:02/07/18 13:49 ID:???
>>972
じゃあさ、

sub a
{
local($x);

&c();
}

sub b
{
&c();
}

sub c
{
print $x
}

ってした場合はどうなるの?
976nobodyさん:02/07/18 13:52 ID:pqv4qZv6
bはどこで呼んでいるのだ?
977nobodyさん:02/07/18 13:53 ID:???
>>976
どこかで読んだ場合よ。

localが呼び出しサブルーチンでも有効なら
場合によっては動かない組み合わせが出てくるだろうという話。
978nobodyさん:02/07/18 13:58 ID:So56onuk
>>977
だから一般的にはmyを使って、サブルーチンは引数使って呼ぶのがお勧めです。
979nobodyさん:02/07/18 14:17 ID:???
my $a;
$a = "aaa";

&a($a);

sub a{
&b;
}

sub b{
print $a;
}

これで、bの中の$aがちゃんと表示されちゃうんだけどなぜ。
980nobodyさん:02/07/18 14:30 ID:???
$main::a だから
つーかaはやめれ
981nobodyさん:02/07/18 14:40 ID:???
>>979
ネタでやっているなら、ごめんね
あまりにも、ウザイので↓みて、調べてね♀

ttp://www5a.biglobe.ne.jp/~n_rieko/perl/9.htm
982nobodyさん:02/07/18 14:59 ID:???
>>981
読んだけど聞きたいことが書いてなかったです。
983nobodyさん:02/07/18 15:04 ID:???
>>982
それは、読んだだけでしょ?理解したの?
理解できたら解決できるよ〜
984nobodyさん:02/07/18 15:14 ID:???
今まではサブルーチンに行く時は
必ず使う変数を渡すして受け取って使うものだと思っていたのに
そんなことしなくても使えることがわかったので混乱しています。

で、myを使えば他のサブルーチンでは使えないはずなのに
使えるからさらに混乱しています。
985nobodyさん:02/07/18 15:23 ID:???
説明が悪すぎです。ここの人。混乱しています。
986nobodyさん:02/07/18 15:48 ID:???
>979
ラクダ本p217より
このようなプライベート変数のスコープ内から呼び出されるサブルーチンからは
テキスト上で、サブルーチンがその変数のスコープ内で定義されている場合を除き
プライベート変数を見ることができない。

サブルーチンaおよびbがmy $aのスコープ内で定義されていますので、
表示されます。要するに仕様です。

>980
myで修飾された変数はパッケージ変数とは関係ありません。嘘は駄目です。
987nobodyさん:02/07/18 15:50 ID:???
>>986
そこだけだと日本語として成立しない。
988nobodyさん:02/07/18 16:05 ID:???
>>955 についてはまず基本を:
- use strict を使わないで使用した(宣言しなくても使用するだけでいい)Perlの変数は全て現在のパッケージのパッケージ変数になる。
- パッケージ変数は同パッケージ内ならどこからでも呼び出せる

以上を踏まえた上で元のコード(にちょっと手を加えたやつ)を
説明すると:

sub OUTER {
## この時点で$VARIABLEはパッケージ変数として宣言される
$VARIABLE = "aaa";
INNER();
}
sub INNER {
## OUTER()と同一パッケージ内なのでこの$VARIABLEもOUTER()で
## 宣言された$VARIABLEと同じ物を指す。よって"aaa"とプリントされる。
print $VARIABLE;
}
OUTER()

===

でも以上は悪いコードの見本みたいなもん。ちゃんとuse strictとmyを
使えば混乱しない:

use strict;
our $PACKAGE_VARIABLE = "foo";
sub INNER
{
my $inner_lexical_variable = shift;
print "PACKAGE_VARIABLE => $PACKAGE_VARIABLE\n";
print "LEXICAL_VARIABLE => $inner_lexical_variable\n";
}

sub OUTER
{
my $outer_lexical_variable = shift;
INNER( $outer_lexical_variable );
}

OUTER( "aaa" );
989nobodyさん:02/07/18 16:06 ID:???
>>959
これは&SUBROUTINE;という表記がちょっと特殊だから起こる。
サブルーチン内で&SUBROUTINE;という表記でさらにサブルーチンを呼ぶと、
現在の@_の値をそのままそっくりSUBROUTINE()に渡す。

sub OUTER{ &INNER }



sub OUTER{ INNER(@_) }

と同じ事になるわけ。だから外側で呼んだサブルーチンの引数がそのまま
内側のサブルーチンで使えるわけ。これも特殊な状況でない限り使用は
お勧めしない。
990nobodyさん:02/07/18 16:07 ID:???
>>975
これは実際に代入をしてみると差がでてわかる。

use strict;
my $GLOBAL = "ORIGINAL";
sub print_global
{
print "\$GLOBAL is $GLOBAL\n";
}

sub WITH_LOCAL
{
print "OUTSIDE of BLOCK\n";
print_global();
{
local $GLOBAL = "NEW VALUE";
print "local()ized \$GLOBAL\n";
print_global();
}
print "OUTSIDE of BLOCK (again)\n";
print_global();
}
991nobodyさん:02/07/18 16:07 ID:???
>>988
うん、もめてるのはそれ以降。
992 ◆JAPH9PWA :02/07/18 16:35 ID:???
新スレ立てました。

【Perl】初心者コーナー Part14
http://pc.2ch.net/test/read.cgi/php/1026977659/
993nobodyさん:02/07/18 16:35 ID:???
>>954
>>  while(@res = $st->fetchrow_array) {
>>            $data{$res[0]}=1;
>>            }
>> こうすると、ハッシュdataに何も入って無いのですが、

$st->fetchrow_arrayが、
(2ch, mona, giko)
というリストを返したとします。
2行目で
%dataの、key: 2chのvalueを1にしていますが、それ以外に何もしていません。
よって、2ch => '1' となるだけで、(それ以前に空なら)%dataには何も入りません。

>>  $i=0;
>>  while(@res = $st->fetchrow_array) {
>>            $data[$i]=$res[0];
>>            $i++;
>>            }
>>        foreach(@data){$data{$_}=1}

この場合は、カウントアップして繰り返しをやっていますので、配列dataの要素に順
番に格納されていきます。
2つめのブロックで、dataの要素をキーとした値をすべて1にしていますので、dataの
要素に格納された分だけ%dataに値が入ります。

しかしながら、上記のコードはまったく意味不明です。
fetchrow_arrayメソッドの仕様をお願いします。
994バカです:02/07/18 18:04 ID:eilzvUxc
>>993
レスありがとうございます。
う〜ん、私にとっては、難しいいですね。基本的なこと分かってないみたいで、精進したします。
変な質問して申し訳ありませんでした。

fetchrow_arrayメソッドは、数字列が入っているだけです。
grep関数でこの数字列以外の配列を、取り出そうとしていた、だけなのですが
途中だけ経過だけ書いてしまいました。

すいませんでした。
995名無し孫:02/07/18 18:36 ID:nyw/MMTK
http://www.apple.com/quicktime/download/
↑この自動インストールプログラムを
作成するには何言語を習得すればいいのですか?
996こっそり1000ゲッター:02/07/18 18:42 ID:???
996
997こっそり1000ゲッター:02/07/18 18:42 ID:???
997!
998こっそり1000ゲッター:02/07/18 18:42 ID:???
998!!
999こっそり1000ゲッター:02/07/18 18:43 ID:???
999!!!
1000nobodyさん:02/07/18 18:43 ID:oI8Joy39
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。