【Perl】初心者コーナー Part17
■ このスレッドは過去ログ倉庫に格納されています
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 8
http://pc.2ch.net/test/read.cgi/php/1032704121/
参考書籍の話題は【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は 【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/
過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0475nobodyさん
02/11/03 00:35ID:???http://www2.ocn.ne.jp/~raifan/nekomata/html/perl/
0477二つ目のお気に入りとして
02/11/03 02:24ID:jsGm8NEj徹底して集め、ナビゲーションリンク機
能でサクサク表示。第二のお気に入りと
して活用してください。
http://home9.highway.ne.jp/cym10262/
0480nobodyさん
02/11/03 09:30ID:???それでも、Perlなのは便利だし、面白いしからだけどな
0481nobodyさん
02/11/03 10:01ID:???0482nobodyさん
02/11/03 10:16ID:???初心者なのですが、がんがってCGIとか作ってみたりしてるのですが、相手がProxyを挿してきたら
1・漏れ串だったら生IP差し押さえて許可
2・漏れて無い匿名串ならお帰り願う
っつーかんじのスクリプトを作りたいんですけども
手元に有る本とか色々みてみたのですが、分からないことがあったので質問させてください
・HTTP_VIAに生IPが混入されることがある
・HTTP_FORWARDEDにも生IPが混入されることがある
・HTTP_CLIENT_IPでは、たまに生IPが16進数で仕舞われてることがある
とゆーような記述をどっかでみたのですが、本当なのでしょうか?
また、本当ならば対策を講じなければいけない頻度でそーゆーことがあるのでしょうか?
(ちなみにがんばって10コ串を拾ってきて診断サイトで見てきたのですがその中には該当例がありませんでした)
あと、"テメェみたいなトーシロにゃ思いつかないだろうがこんなとこにも注意しとけ"とか有りましたら御教授お願いします
0483デフォルトの名無しさん
02/11/03 10:23ID:???ここはPerlのスレです。
CGIのスレは、他にありますので、そっちで質問すれ。
0484469
02/11/03 11:17ID:???sub tag_change {
local($_) = $_[0];
1 while s/(.*)(&lt;(img([!-:A-~\s\=]+))&gt;)/$1<img$4>/i;
1 while s/(.*)(&lt;(font[\s\w\=\#\"\']+)\&gt;(.*)\&lt;\/font\&gt;)/$1<$3>$4<\/font>/i;
1 while s/(.*)(&lt;(b)&gt;(.*)&lt;\/b&gt;)/$1<b>$4<\/b>/i;
}
というやり方です。
どれくらい遅くなったかは計ってないですが、許可するタグを増やしていくと
あれ、ちょっと遅いかなと思う程度です。
そこまで速度にこだわる訳ではないですが、どうせなら良いものを作りたいと思いましたので
質問させていただきました。
0486nobodyさん
02/11/03 12:55ID:ikowPnCoを作りたいんですが、どうすればいいでしょうか・・・
0488nobodyさん
02/11/03 15:54ID:ikowPnCoprint OUT "To: $mailto1\n";
print OUT "From: $email\n";
print OUT "Subject: $subject\n";
print OUT "Content-Transfer-Encoding: base64";
print OUT "Content-Type: text/html; charset="Shift-JIS";
print OUT "\n\n";
&jcode'sjis2jis(*value);
print OUT "$value\n";
print OUT "\n";
close(OUT);
}
sendmailのところをこのように記述するとエラーがでてしまいました。
なぜでしょう?
0489rubyist@カラアゲうまうま
02/11/03 16:05ID:???0492nobodyさん
02/11/03 18:44ID:???って感じで関数を呼ぶと、
sub func {
my %a = shift;
my %b = shift;
}
では上手く取れません。どうやればよかとですか?
0493rubyist@カラアゲうまうま
02/11/03 18:51ID:???0494rubyist@カラアゲうまうま
02/11/03 19:05ID:???Perlってreturnがなくても最後のステートメントの結果が戻り値になるんじゃないの?
0495rubyist@カラアゲうまうま
02/11/03 19:07ID:???0497perler@カラアゲうまうま
02/11/03 19:10ID:???0498nobodyさん
02/11/03 19:24ID:???0499469
02/11/03 19:29ID:???すみません
>>484修正しときます。とはいっても1つ追加するだけですが。
sub tag_change {
local($_) = $_[0];
1 while s/(.*)(&lt;(img([!-:A-~\s\=]+))&gt;)/$1<img$4>/i;
1 while s/(.*)(&lt;(font[\s\w\=\#\"\']+)\&gt;(.*)\&lt;\/font\&gt;)/$1<$3>$4<\/font>/i;
1 while s/(.*)(&lt;(b)&gt;(.*)&lt;\/b&gt;)/$1<b>$4<\/b>/i;
$_;
}
どちらにしろ、これだと許可するタグが増えるたびに1行増やさなければならないので
効率悪いですね。
0500469
02/11/03 19:33ID:???@allowedtag = ('<b>','</b>','<a href(.*)>','</a>');
$value =~ s/<!--(.|\n)*-->//g;
$value =~ s/</</g;
$value =~ s/>/>/g;
$value =~ s/\"/"/g;
foreach (@allowtag) {
s/</</g;
s/>/>/g;
while ($value =~ /$_/i) {
$srctag = $&;
$reptag = $&;
$reptag =~ s/</</g;
$reptag =~ s/>/>/g;
$value =~ s/"/\"/g;
$value =~ s/$srctag/$reptag/g;
}
}
ゆっくりと調べてみたいと思います。
アドバイスしていただいた方々ありがとうございました。
0501492
02/11/03 19:45ID:X/43o1Dcでも、自分で駱駝本を探すのがめんどうなんで、誰か教えてください。
お願いします。
0502nobodyさん
02/11/03 20:31ID:???0503nobodyさん
02/11/03 20:59ID:???{
my ($a_ref, $b_ref ) = @_;
foreach(keys %{ $a_ref }){
print "$_ =>", $a_ref->{ $_ }, "\n";
}
foreach(keys %{ $b_ref }){
print "$_ =>", $b_ref->{ $_ }, "\n";
}
}
my %a = (aya => 'pretty', miho => 'child');
my %b = (asumi => 'kirei', mai => 'cute');
test_ref %a, %b;
exit;
0505nobodyさん
02/11/03 23:27ID:???sub tag_change{
local($_)= $_[0];
s/<(img[!-:A-~\s\=]+?)>/<$1>/gi;
s/<(font[\s\w\=\#\"\']+?)>(.+?)<\/font>/<$1>$2<\/font>/gi;
s/<b>(.+?)<\/b>/<b>$1<\/b>/gi;
$_;
}
0506rubyist@カラアゲうまうま
02/11/03 23:28ID:???0508rubyist@カラアゲうまうま
02/11/04 00:10ID:???これまた低レベルな奴が現れたな。いちいち説明するのも面倒くさい。
perlapiのスタック管理の部分でも読め。貴様に理解できればな。
Perlの場合、関数はサブルーチンは戻り値を常に戻してるに決まってるだろ。
意味のある値とは限らないがな。
0509nobodyさん
02/11/04 00:13ID:???すまん、Perlには戻り値無しなんてないと思っていた(^_^;)
色々試してみたけど、最後にfor(;;){}なんてやると戻りに無しになるみたいだね。
頭が弱いわけじゃないとおもうが、Perlは弱いかも。
0512_gunzip ◆eiH/XdoCNg
02/11/04 01:28ID:???>484とか、sub func {} やら sub func { for(;;) {} } は内部でも何も返してないよ。
(というか、XSにXSRETURN_EMPTYマクロがあるのを見てもわかるのでは)
$retval = func(); やら defined func() とかで評価したときに、PL_stackに何も無いってんで、
PerlがしゃーねーなとNullsv(PL_sv_undefだったか?忘れた)を呉れるだけ。
「戻り値をくれっ」と言えば、Perlが気を利かして適当に見繕ってくれるけど、本来は何も無いよ、というお話。
不正確な点は指摘してくれると嬉しい。
0513nobodyさん
02/11/04 01:52ID:???さすがPerl(藁
そういうところが嫌いだ・・・
0514rubyist@カラアゲうまうま
02/11/04 02:00ID:???氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
0515nobodyさん
02/11/04 02:06ID:???rubyist@カラアゲうまうま←氏ね
rubyist@カラアゲうまうま←氏ね
rubyist@カラアゲうまうま←氏ね
rubyist@カラアゲうまうま←氏ね
rubyist@カラアゲうまうま←氏ね
rubyist@カラアゲうまうま←氏ね
rubyist@カラアゲうまうま←氏ね
rubyist@カラアゲうまうま←氏ね
rubyist@カラアゲうまうま←氏ね
rubyist@カラアゲうまうま←氏ね
rubyist@カラアゲうまうま←氏ね
0516rubyist@カラアゲうまうま
02/11/04 03:07ID:???0517デフォルトの名無しさん
02/11/04 06:49ID:dvOfgMXAすぐに松沢病院に帰るはずですから、無視、無視。
0519マリモーマ ◆jbBCmetwgw
02/11/04 10:06ID:DAK3WKCOfor($a=0;$a<@kou-3;$a++){
print "<select name=$kos[$aipo]>";
for($b=0;$b<@icon;$b++){
print "<option value=$b>$icon[$b]";
}
print "</select>";
なぜこれで送信できるんだ?
0520nobodyさん
02/11/04 10:11ID:BeYwgKh5この本では改行を/nと表記しているんですが
実際、使う場合は¥nですよね?
\nに置き換えて書けば動くんですが
どういう違い・意味合いがあるのでしょうか。
環境はWindows、用途はCGIです。
0521nobodyさん
02/11/04 10:32ID:???フィールド切り出しなどは、awkのほうがperlよりはやいんじゃ、ないでしょうか?
0523nobodyさん
02/11/04 10:44ID:???/nじゃなくて\nじゃない?
(らくだ本みたことないんでわかんないけど)
それはフォントが違うだけ。日本語フォントでは、\と同じコードに\を割り当ててる。
エディタでフォントが変えられるなら、試しになんでもいいから英文フォントにしてみれ。
0524nobodyさん
02/11/04 10:52ID:BeYwgKh5なるほど。
2人の説明でばっちりわかりました。
どうもありがとうございます。
0525nobodyさん
02/11/04 12:43ID:???UNIXとかそういう問題じゃないんだが・・・
>>520
英語圏の人が書いた本は、多分ほとんどがバックスラッシュになっていると思うよ。
0526nobodyさん
02/11/04 15:08ID:DJv3PW2n1階層のみ限定で。。。
0527nobodyさん
02/11/04 15:46ID:???opendir(DIR, "ディレクトリ名");
@name = readdir(DIR);
closedir(DIR);
foreach (@name) {
if (-d "$_") { push(@array, $_); }
}
@arrayに入るはず。
間違ってたらスマン
0528☆南幸☆
02/11/04 16:09ID:???これはどうよ?!いいんじゃない?
0529訂正
02/11/04 16:29ID:???$dir = "ディレクトリ";
opendir(DIR, "ディレクトリ名");
@name = readdir(DIR);
closedir(DIR);
foreach (@name) {
if (-d "$dir$_") { push(@array, $_); }
}
0530nobodyさん
02/11/04 17:42ID:???を取り込んで、指定された値aを掛けて、例えばa=0.5なら、
"#555d66"を返してもらえる関数を作りたいのよ、
でも
substrで文字列2文字づつ切り出すところはいいんだけど、
切り出した文字列を16進数の数として処理(変数に代入)するやりかたがサパーリわかりません、
どなたかご伝授キボンヌ
0532526
02/11/04 17:46ID:DJv3PW2nありがとうございます。
しかし>>529のだと@arrayには何も入らず、
>>527ならちゃんとディレクトリ名が入っているのですが。。。
何か問題があるのでしょうか。
0534526
02/11/04 18:06ID:DJv3PW2n>>527の方法で解決したと思ったんですが、
カレントディレクトリ以外を開くとディレクトリ名が取得できません。
開けなかった場合はエラーが出るようにしてあるので、開けてはいるようです。
色々試してみると、どうやら if(-d "./dir/") のようにすると取得されないようです。
ifを抜いてディレクトリ・ファイルの区別をしないとちゃんと取得されました。
やはりカレントディレクトリだとどちらでも取得できます。
原因はなんでしょうか。。。
0535nobodyさん
02/11/04 19:57ID:???アニメーションGIFかフツウのGIFか判別するには
どうすればいいんでしょうか?
0536名無しさん
02/11/04 20:57ID:EBTUNl6qそのヘッダの情報を読み込めばよいのでは?
0537名無しさん
02/11/04 21:00ID:EBTUNl6qGIFフォーマットの詳細
ttp://tohoho.wakusei.ne.jp/wwwgif.htm
>>535サンの役に立つと思います。
0538nobodyさん
02/11/04 21:06ID:???$dir = 'ディレクトリ';
opendir ( DIR, $dir );
@name = readdir ( DIR );
closedir ( DIR );
shift @name; #1
shift @name; #1
foreach ( @name ) {
push (@array, $_) if ( -d "$dir\/$_" );
}
こうでないか?
#1がないと、.と..も取得されてしまうが、その辺どうよ?
if文をこれにさしかえればいい。
0540nobodyさん
02/11/04 21:18ID:???readdirは必ず.と..を最初に返すの?
@name=grep !/^\.\.?$/,readdir DIR; #らくだ本より引用
この方がよくない?
0541nobodyさん
02/11/04 21:20ID:???0542526
02/11/04 21:59ID:DJv3PW2nできました、ありがとうございます!
ご迷惑おかけしました;
0544nobodyさん
02/11/04 22:37ID:???つくりいざうぷしようとしたらupload.cgiとjcode.plだけがなぜかうぷ
できない。ためしにindex.htmlとかをうぷしたら正常にうぷできた。FFFTP
を使っているのだが何か問題点ある?
0545デフォルトの名無しさん
02/11/04 22:55ID:???文字コードが違うんじゃない。統一しないとまずいよ。
あと、FFFTPだったらバイナリ送信に汁が吉。
コード指定しとくと変換しちゃうからね。
0547nobodyさん
02/11/04 23:02ID:???0548デフォルトの名無しさん
02/11/04 23:17ID:???第一さ、>>544の文章の読みにくさ、第二に、「うぷできない」って
物理的にアップできなかったのかどうか。ネタとも思える書き方。
漏れはさ、物理的うぷはできたが、動かそうとしたらうまくいかん
かったっていうことかとおもてレスしたんやけどな。
0549nobodyさん
02/11/05 01:07ID:???ご理解頂けたならご教授下さい。
変数$aには'あ'が入っており、
$a .= 'い'; を入れ、ログに記録します。
この時に時々、ログのデータが
あい
とならずに、
あ
い
と改行されて記録されてしまい、
データが壊れてしまう事で現在悩んでいます。
どうか助けて下さい。お願い致します。
0551nobodyさん
02/11/05 01:35ID:???遅レスだけどこれですっきりできたけどなぁ
chdir ($dir);
@name = glob("*");
foreach(@name) {
if (-d) {push(@array, $_); }
}
0552nobodyさん
02/11/05 01:41ID:???$DAT[$n] = "$nm,$pw,$a\n";
if(!open(OUT,">$nazofile")){ &error("ファイルに書き込めません。"); }
print OUT @DAT;
close(OUT);
という具合に記録してます。s/\n$//;などを$aに対して行っても、
効果が無くホトホト困り果てております。
更にログを見ると上記のように改行されているにも関わらず、
HTMLで見ると普通に$aの『あい』が改行されずに見える場合もあります。
普通は『あ』しか表示されないと思うのですが…。
0554nobodyさん
02/11/05 02:05ID:???一度chopを使ったら$aの中身が全て消えてしまって…。
chompはchopと同じように使えば良いのですか?
私、chompの使い方があまり良く分かっていないもので…。
chomp $a; と言う具合で宜しいのでしょうか?
0555nobodyさん
02/11/05 02:56ID:???それってたぶん同じファイルから@DATに読み込んでsplitしていろいろやったあと
元に戻して書き戻すっていう流れかな?
もしそうなら最初にファイルを読んだときに全行chompしてしまうのが手っ取り早い。
そのままsplitすると最後のデータだけ改行がついたままになってしまっていろいろ面倒だから。
憶測で書いたんで違ってたらスマソ。
0556nobodyさん
02/11/05 02:57ID:???chopは末尾1文字を取り除く
0558nobodyさん
02/11/05 04:57ID:???アテにならないchompがちょと嫌い。
>>552
$param =~ s/^\s+//;
$param =~ s/\s+$//;
を試してみるのはいかが。
0559nobodyさん
02/11/05 08:18ID:???を
"$nm,$pw,$a,\n";
こうする。
0560nobodyさん
02/11/05 09:34ID:???なんかWindowsで\x0d\x0aじゃないと上手くいかなかったような。
0561nobodyさん
02/11/05 10:48ID:???ココ?http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify
でもどこで使えばいいのかいまいちわかってない初心者な自分。
0562552
02/11/05 11:23ID:???とりあえず教えて頂いた方法を試してみたいと思います。
本当にありがとうございました。
0563nobodyさん
02/11/05 12:39ID:19J7tl020564nobodyさん
02/11/05 13:23ID:???に置いてあるPerlを動かそうと思い色々試しているんですが、質問があります。
Perlの勉強をしようと思い一週間でマスターするPerl for windowsという本を買い、
本に付いていたjperl for DOSを入れパス設定をすませPerlを実行できる環境は一応整ったんですが
上記のHPのPerlが動きません。もしかしてjperlでは動かないのでしょうか?
ActivePerlで動くとtopに書いてあるのですが、jperl,perl,ActivePerlの違いがいまいちわかりません。
どなたかご指導お願いしますm(_ _)m
0566564
02/11/05 13:43ID:???確認のため再度行ってみたところ↓の分が表示されました。(先程までは何も起こりませんでした
KKCFUNC が組み込まれました.
マイクロソフトかな漢字変換 バージョン 2.51
(C)Copyright Microsoft Corp. 1992-1993
Can't locate IO/Select.pm in @INC (@INC contains: c:/usr
djgpp/lib/perl5/site c:/usr/djgpp/lib/perl5/site .) at r
BEGIN failed--compilation aborted at rotoold.pl line 3.
これは正常に起動していると考えてもokなのでしょうか?
ちなみに先程まではCドライブにrotooldフォルダを置いて起動していましたがDに移動してみたところ、この表示がでました
0568564
02/11/05 14:24ID:???Select.pmモジュールについてですがC:JPL5005\LIB\PERL5というフォルダにはいっているのを確認しましたが
モジュールを探し損ねてる場合どういった処置を行えばよろしいでしょうか?
0569&rlo;こんう&lro;
02/11/05 16:04ID:???0570nobodyさん
02/11/05 16:26ID:???undef $/;
や
$/="";
は便利だけど、
----------
みたいなものを読み取る時の区切りにする方法ってありますか?
あれば教えてください。
0571nobodyさん
02/11/05 16:57ID:???ファイルAの中に
require'ファイルBへの相対パス';
--------------------------------------
ファイルBの中に
require'ファイルBからファイルCへの相対パス';
--------------------------------------
と書いてあって、
ファイルAを実行した場合、
ファイルCが正常に読み出せる術ってありますか?
0572nobodyさん
02/11/05 17:01ID:???絶対パスで書けば即解決。
0573nobodyさん
02/11/05 18:37ID:???=~ s/[\n\r]//g;
上は分かるのですが下の意味が分かりません。
これはどういう動作なのでしょうか?教えて下さい。
■ このスレッドは過去ログ倉庫に格納されています