トップページ⇒php
1001コメント313KB

【Perl】初心者コーナー Part19

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん03/02/09 00:24ID:s0tpWWxg
初めに→「perl」その物のスレです。

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

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


CGIだけど、なんか質問ある? Part 9
http://pc.2ch.net/test/read.cgi/php/1041530204/
参考書籍の話題は【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。
0809nobodyさん03/03/12 14:13ID:???
>>808
ActivePerl-5.6.1.635 を使って下さい
0810nobodyさん03/03/12 15:54ID:eDO5fFOY
$n の値が $i の倍数だったら真。
という正規表現を書こうとしたんですが
どうも書き方が解らず for 文になってしまいます。

どなたかお手本を見せてもらえないでしょうか。
お願いします。
0811nobodyさん03/03/12 15:57ID:NGPUyx9R
>>810
数値だよね?
($n % $i == 0)
081281003/03/12 16:16ID:???
>>811
数値です。
なるほど、割り切れるかどうかを見ればよかったんですか。
有難う御座いました。

頭悪くてスミマセンです。
0813nobodyさん03/03/12 17:56ID:bplOKqH9
ぐちゃぐちゃと書き込んだコメントをすべて取ってしまおうと
思い立ち、エイヤっと全部まるまる取ってしまったら、なんか
すごくスクリプトがスッキリ見えて、前よりも理解しやすくなっ
た。。。。という経験ないすか?
0814nobodyさん03/03/12 18:05ID:???
>>813
俺のプログラムのコメントを書く人は寡黙な方なので数日後に開いてパニックになったりします。
0815nobodyさん03/03/12 21:54ID:???
現在自動メール返信のルーチンを考えています。
スクリプト内で取得したメールアドレスを$mailという変数に
格納し、メールのテンプレートを外部ファイルから読み込んで
送信したいのですが、ヘッダ部分にTo: "$mail"と記述していても
変数展開が行われません。
外部ファイル内にある変数は展開できないのでしょうか?
0816nobodyさん03/03/12 22:03ID:???
>>815
evalれ。
0817nobodyさん03/03/12 22:11ID:???
>>815
$mailがどんな形で宣言されているのか不明なんで、わかりません。
081881503/03/12 22:32ID:???
>>817
メインルーチンの中で、$mail="[email protected]";
となっています。で、外部ファイルでは
To: $mail
From: [email protected]
Subject: hoge
<以下メール本文>

という構造です。このテンプレートファイル名が$fileに格納されているとき、
open (BODY,"$file");
@mail_body=<BODY>;
close (BODY);
としています。
0819nobodyさん03/03/12 22:44ID:???
>>818
@mail_body =~ s/\$mail/$mail/gs;
0820nobodyさん03/03/12 23:09ID:???
@mail_body = map{ s/\$mail/$mail/g; $_; } <BODY>;
s///はスカラのみが対象になるかと。

スマートにやるなら、HTML::Templateをお勧め。
0821815=81803/03/12 23:27ID:???
>>819-820
返答ありがとうございます。
最初、s///で自力でやってみたのですが、$をエスケープするのを
忘れていたり、818さんのように配列ごとs///を作用させてしまい
エラーが出っ放しだとか、いろいろありましたが、現在は以下のように
しました。
$body="@mail_body";
$body=~ s/\$mail/$mail/gs;
スマートな方法ではないですが、一応動きました。
Perlは自由度が高くてうれしいのですが、反面そのおかげで、
結構悩んでしまいますね。。。
0822nobodyさん03/03/13 00:54ID:???
>>821
もうちょっと基礎(コンテキスト、リテラル)から勉強せい
$body="@mail_body";とかかなりむちゃくちゃ(わかってあえてやってるならいいけど)
0823nobodyさん03/03/13 12:33ID:Am3iEG5g
>>815

open FI, 外部ファイル;
foreach(<FI>) {
s/%_(\w+)_%/${$1}/eg;
$mail_txt .= $_;
}
close FI;

で、どだろう。
0824nobodyさん03/03/13 15:56ID:???
KENTのsunbbsを改造しているんですが
タイトル($sub)をhtmlに書き出す時だけ
**文字以上だったら2バイト切って、"…"を付ける
ってことをやりたいんですが
どこにどう付け加えればいいでしょうか?
ご教授お願いします。
0825nobodyさん03/03/13 16:23ID:???
>>824
if ( length ( $sub ) >= ** ) {
 $sub = substr ( $sub, 0, length ( $sub ) - 2 ) . '…';
}

** は文字数ではなくバイトで指定
0826nobodyさん03/03/13 16:33ID:???
>>825
2バイト文字が化けないことを祈る。
0827nobodyさん03/03/13 16:34ID:???
2「バイト」切るって言ってるんだからいいでしょ
0828nobodyさん03/03/13 16:37ID:???
>>827
あほか?

の後ろ2byteを切ってみて下さい。
0829山崎渉03/03/13 16:55ID:???
(^^)
083082403/03/13 17:07ID:???
>>826
タイトルは半角で書く予定なので文字化けは大丈夫です。

>>825
どこに記述すればいいんでしょうか?
投稿処理の時点で$subではなくsubに置き換えて…無理ですね。
0831nobodyさん03/03/13 17:27ID:???
>>830
HTMLを吐き出す前あたりでいいんじゃない?
0832nobodyさん03/03/13 21:45ID:PyTQVFy/
$aaa = $FORM{'mode'};
$bbb = '123';
$ccc = '456';
   ・
   ・
   ・
$datafile = "ddd.txt";
open (dataf,">>$datafile");
flock(dataf,2);
   ・
   ・
   ・
print dataf "〜$aaa,$bbb,$ccc〜\n";
   ・
   ・
   ・
close (dataf);

というスクリプトを作りました。(abc.cgiとします)
このスクリプトを実行させる際に、modeにabcdeを与え、
テキストファイルに「abcde,123,456」と書かせたいのですが、
http://www.hogehoge.com/abc.cgi?mode=abcde
という呼び出し方じゃダメなのでしょうか?
どうしても「,123,456」と書かれてしまうんです。
どこがいけないのでしょう?
0833nobodyさん03/03/13 21:54ID:???
>>832
フォームのデータをエンコして%FORMに入れる処理(またはそれに相当する
サブルーチン等の呼び出し)はもちろんやってるよね?
083483303/03/13 21:55ID:???
エンコじゃなかった、デコードだ。
逝け>俺
0835nobodyさん03/03/13 21:56ID:???
>>832
$FORM{'mode'}の中身を調べる。
# ちゃんとどっかで$form{'mode'}に代入してる?
0836nobodyさん03/03/13 22:05ID:???
HTML::TemplateってHTMLっぽい文法でなんかどんくさい感じがするんだけど、
みんなはこれで満足してますか?

特に、何かの要素の値(?) <a href="(ここ)"></a>に何かを入れるとき、テンプレート
が、ちゃんとしたHTMLじゃなくなるのが痛い。

で、CGI::FastTemplateっていうかっこいいやつを発見したんだけど、使ってる人はいますか?
0837nobodyさん03/03/13 22:48ID:???
>>832
もう少し解りやすく説明できる?
083883203/03/13 22:57ID:???
すみません。解決しました。
デコードもやってないし、$FORM{'mode'}にも値を代入してないという、
初歩的な問題でした。
お騒がせしました。
0839nobodyさん03/03/13 23:48ID:???
>>818
亀ですが漏れはこうやってます
最後の出力のときに使って
open TMPL, "<$file";
while(<TMPL>){
  s/\$([_\w]+)/${$1}/eg;
  (HTMLエンコード処理)
  print;
}
close TMPL;
0840nobodyさん03/03/14 01:12ID:???
>>836
使ってみたけど、ちょっと扱いづらいね。
単機能化されているみたいだから、
HTML::Templateより速くなるみたいだけど。
0841nobodyさん03/03/14 02:29ID:???
見た通りのサブルーチンなのですが、ローカルで使用しても
かなりの時間がかかってしまいます。
通常、実装するとしたらこれで大丈夫なのでしょうか?

my @port = ( 80, 8000, 8080, 8888 );

my $remote = $ENV{"REMOTE_ADDR"};
my $iaddr = inet_aton($remote)or die "Unknown host : $remote";
my $proto = getprotobyname('tcp');

socket (SOCK, AF_INET, SOCK_STREAM, $proto) or return 0;

foreach my $port ( @port )
{
my $paddr = sockaddr_in($port, $iaddr) or return 0;

if (connect(SOCK, $paddr))
{
return 1;
}
}

return 0;
0842nobodyさん03/03/14 04:09ID:???
>>841
これ動かないだろ
0843nobodyさん03/03/14 12:10ID:???
コマンド(引数は外部からの値)の実行結果を@_に格納したいのですが、

バッククウォートで
`コマンド $xxx`
↑このようにやると危険なので

system "コマンド","引数"
↑こんな感じでやりたいのですが
systemを使ってリスト@_に格納する事はできないんでしょうか。
できないのであればどういう方法が一番bestでしょう?

汚染チェックはやりますが、少しでも危険な要素を取り除きたいので・・。
0844nobodyさん03/03/14 12:27ID:???
>>843
system関数だけでは無理だと思う。

俺ならシェルスクリプトを作るかな。
で、必要な引数のほかにファイル名を引数にとって
そのファイルに全てを出力させる。
perl側からは、systemで呼んだ後にそのファイルを
読みに行けばいい。

windows環境ならバッチファイルでもいいかと。
0845nobodyさん03/03/14 15:26ID:???
>>843
汚染チェックをしっかりやっていれば
open FOO, join(' ', $cmd, @arg, '|') or error;
@_ = <FOO>;
でいい気がする。
0846nobodyさん03/03/14 15:48ID:???
それならバッククォートでも変わらないような
0847nobodyさん03/03/14 17:19ID:???
すみません。
厨房質問なのですが、

main.cgiがあり、使用するライブラリが複数ある。
とうぜん「require」を書いてあるのはmain.cgi。

この時、ライブラリAから直接ライブラリBに含まれるサブルーチンに飛ばしてなんら問題ないんでしょうか?
なんか作ってて微妙に怖くなってきました。

とある解説サイトでライブラリとはCGIにサブルーチンが埋め込まれたのと全く同じ動きをするって書いてあったけど本当でしょうか?
メインファイルを直接経由しないライブラリ間でのやり取りって支障ないですよね?

084884303/03/14 20:31ID:???
>>844>>845
ありがとうございます。
ファイルに吐くのも考えましたがいちいちやっていたら大変なので・・。
汚染チェックだけに頼るのが一般的なんですかね?
perl始めて数週間なのでいまいち常識がわからなくて・・
0849nobodyさん03/03/14 20:57ID:???
>>843
open(FOO, "-|") or exec 'command', $param;
print <FOO>; # 何か処理
close(FOO);

perldoc perlsec参照。
Perlクックブックレシピ19.6に詳しい方法が載ってます。
0850nobodyさん03/03/14 21:00ID:???
>>848
これが常識

$pid = open(PIPE, '-|');
die unless(defined($pid));
if ($pid) {
local $/ = '';
@_=<PIPE>;
} elsif ($pid) {
exec 'command', 'arg';
}
0851nobodyさん03/03/14 21:14ID:???
>>847
requireは実行時に評価される点に注意して、
(requireを書く場所を間違えなければ)
可能です。
085285003/03/14 21:47ID:???
切り貼り失敗

>>848
これが常識

$pid = open(PIPE, '-|');
die unless(defined($pid));
if ($pid) {
local $/ = '';
@_=<PIPE>;
} else {
exec 'command', 'arg';
}
0853nobodyさん03/03/14 22:21ID:???
[cXYZ]
# X,Y,Zは数字。Xには0〜3、Yには0〜4、Zには0〜3が入ります。
という文字列を
S● B●●●● O●●
# ●の数はそれぞれX,Y,Zの数値。0の場合は●はなし。
に変換したいのですが

$test = "[c222]";
if ( $test =~ m/\[c([0-3])([0-4])([0-3])\]/i ){
$count ="S"."●" x $1." B"."●" x $2." O"."●" x $3;
$test =~ s/\[c([0-3])([0-4])([0-3])\]/$count/i;
}

ない知恵絞って上記のようなものを書いて見ました。
もっとよい方法がありましたら教えてください。

あと $test に [cXYZ] が複数あった場合、すべて変換にするには
if の代わりに while を使う方法になりますか?
0854nobodyさん03/03/14 22:34ID:???
$test =~ s/\[c([0-3])([0-4])([0-3])\]/'S' . '●' x $1 . ' B' . '●' x $2 . ' O' . '●' x $3/ge;
085585303/03/14 22:46ID:???
( ゚д゚)ポカーン
漏れは何をまわりくどいことをやってたんだ。

s/\[c([0-3])([0-4])([0-3])\]/S●x$1 B●x$2 O●x$3/
最初こんな感じでやってみて無理だったので、上のになりました(^^;
勉強になりました。ありがとうございます。
085684103/03/15 00:24ID:???
>>841のサブルーチンは動かないでしょうか?
こちらのスクリプトを改造したのですが、一応
オープンとクローズは遅いながらも判別できました。

#!/usr/local/bin/perl -w

use strict;
use sigtrap;
use Socket;

my ($remote, $port, $iaddr, $paddr, $proto);
$remote = $ARGV[0] || "127.0.0.1";
$port = $ARGV[1] || 0;
print "REMOTE : $remote\n";
print "PORT : $port\n";
$iaddr = inet_aton($remote)or die "Unknown host : $remote";
$proto = getprotobyname('tcp');
socket (SOCK, AF_INET, SOCK_STREAM, $proto) or die "socket : $!";
while ($port < 65536) {
$paddr = sockaddr_in($port, $iaddr) or die "$!";
if (connect(SOCK, $paddr)) {
print "PORT : $port OPEN\n";
socket (SOCK, AF_INET, SOCK_STREAM, $proto)or die "socket: $!";
}
else {
print "PORT : $port CLOSE\n";
}
$port++;
}
0857nobodyさん03/03/15 00:57ID:???
>>841の

>my $remote = $ENV{"REMOTE_ADDR"};
>my $iaddr = inet_aton($remote)or die "Unknown host : $remote";

inet_atonはホスト名をIPアドレスに変換でしょ。
無意味な正引きするより$ENV{"REMOTE_ADDR"}をpackしたほうが
早いんじゃないの?
0858nobodyさん03/03/15 01:04ID:???
教えようと思ったけど、ポートスキャナじゃん。。
しかも65536って、あーた。
0859nobodyさん03/03/15 01:34ID:???
iswebのモバイル用フォルダにお絵描き掲示板を設置したところ
pooアプレットの方は問題なく動いたのですが、しぃアプレットの方は
画像が2重に投稿され投稿失敗のメッセージが表示されてしまいました。

それまで普通のcgi-binフォルダではどちらも正常に動作していたので
多分ページに挿入される広告が悪さをしてるんじゃないかとは思うんですが
どう直せばいいのか私にはサッパリわかりません。
どなたかわかる人がいたら教えてください。お願いします。

ちなみに今まではこのスクリプトを使わせてもらってました。
ttp://mrdc.hp.infoseek.co.jp/compati.zip
086085903/03/15 01:40ID:3fqyLgHG
一応、BBSNoteではしぃアプレットも正常に動作したのですが
今ダウンロードできるバージョンはもうpooをサポートしてないので、、
0861841,85603/03/15 01:41ID:???
>>857
確かにその通りでした。削っているうちにちんぷんかんぷんになっていたようです。
有難うございました。

>>858
アホな目的に使うつもりはないので65536はさすがにやっていません(^^;
0862nobodyさん03/03/15 02:22ID:???
このような感じでやってみました。突っ込み所がありましたらよろしくお願いします。
依然として非常に遅いのですが、2chなどのプロキシ弾きはCでこのようにやっているものなのでしょうか?

my @port = ( 8000, 8080, 8888 );

$ENV{"REMOTE_ADDR"} =~ /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
my $iaddr = pack("C4", $1, $2, $3, $4);
my $proto = getprotobyname('tcp');

socket(SOCK, AF_INET, SOCK_STREAM, $proto) or return 0;

foreach my $port ( @port )
{
my $paddr = sockaddr_in($port, $iaddr) or return 0;
return 1 if(connect(SOCK, $paddr));
}

return 0;
0863nobodyさん03/03/15 02:28ID:???
my $iaddr = pack('C*', split(/\./, $ip));
0864nobodyさん03/03/15 02:29ID:???
$iaddr = pack('C*', split(/\./, $ENV{"REMOTE_ADDR"}));
0865Name_Not_Found03/03/15 04:55ID:???
KENTさんの掲示板
http://www.kent-web.com/bbs/fantasy.html?
に、”タイトル”を入力する項目を追加したいのですが
いざやってみたら、上手くいきませんでした。
この場合、どこをどういじればいいのでしょうか?
0866nobodyさん03/03/15 06:05ID:???
>>865
スレ違い。
0867nobodyさん03/03/15 09:19ID:Uli+0qKe
/cgi-binでしかperlを実行できず、
/cgi-binではhtml、jpgを閲覧できません。

現在のフォルダ
/www/
  html/
  cgi-bin/

これを/www/html/ 配下すべてでperlもhtmlも動作できるようにしたいのですが、
どうすればいいんでしょうか?
0868nobodyさん03/03/15 10:23ID:???
>>867
apacheの設定を弄るか.htaccessで設定を変更する必要があるのだが権限あるの?
キーワードはScriptAlias,ExecCGI。
スレ違いになるので後は自分で調べてください
0869nobodyさん03/03/15 10:27ID:???
>>862
close(SOCK);
0870nobodyさん03/03/15 10:27ID:Uli+0qKe
>>868
スレ違いですか。
http://x68000.startshop.co.jp/~68user/webcgi/server-config.html
の通り、
httpd.confを弄ってみたんですが、うまくいかなかったんで。

当然root権限はあります

0871nobodyさん03/03/15 10:36ID:???
# AddHandler cgi-script .cgi
のコメントは外した?
ドキュメントルートを移動させてれば、そっちもOptionsの設定がいるよ。
つか、サーバルートの設定を変えるってのはヤバイ。
これ以上はすれ(略。
087286703/03/15 10:55ID:???
ごめんサパーリ。
もっと勉強が必要か。

CGI設置フォルダの下にhtmlを置くやつが使いたかったから・・・。
0873nobodyさん03/03/15 12:12ID:???
>870
>当然root権限はあります

こんなやつがroot権限を持つなんて・・・、しかも当然だって・・・(w
087486703/03/15 12:35ID:???
>>873
となりのPC(ry

root権限なかったら、こういう質問しませんよ。
共用なら、たいていどこの階層でもperl使えるし、
cgi-bin限定でもhtmlや画像、映像も置ける。
ISPのサーバーなら、できないならできないと初めから書いてるしね。

ま、踏み台にされないように頑張りますw
087586703/03/15 12:37ID:???
というか、板違いですかねぇ。
0876nobodyさん03/03/15 12:40ID:???
この程度のことを質問しているようじゃ、踏み台にされないように頑張ります
っていっても期待はできないな。気持ちで防げるものではないから。あはは・・
087786703/03/15 13:55ID:???
出来た・・・。
そんなに難しいことじゃなかったらしい。
876にバカにされるのもいさ仕方ないのかも。
サーバーの電源落として寝ますわ。
0878nobodyさん03/03/15 14:07ID:???
二度と電源を入れないのを切に願う
0879nobodyさん03/03/15 17:45ID:5hlN9xGB
$tmp = `/usr/bin/whois -h $server $name.$domain |grep -i '$msg'`;
このような処理で万が一タイムアウトになった場合、次の処理に移り
たいのですが、実行しっぱなしになってしまいます。
通常どういった処理を行うのが良いのでしょうか。
0880nobodyさん03/03/15 17:51ID:???
>>849>>850
ありがとうございました。
ただ私の環境はActivePerl-5.6.1.635なので
どうもできないようです。(forkできないから?)

execも引数を2個使うとなぜか機能しません。
○exec "コマンド 引数"
×exec "コマンド","引数"
もうさっぱりわかりません。

open FOO,"コマンド 引数|"
これだとFOOに結果が格納されたんですが
引数が外部の場合危ないですよね。
0881nobodyさん03/03/15 18:45ID:???
恥ずかしい話だが。。。
漏れって「引数」をずっと「いんすう」って読んでたよ。
088284503/03/15 19:28ID:???
>>879
alarmでどうよ。

>>880
> 引数が外部の場合危ないですよね。

だから「チェックをしっかり」と書いてるんだけど…。
"$cmd $arg"と書かずに$cmd,@argと書いた意図を汲んでほしいな。
そもそも使いたいコマンドは何?引数はそんなに複雑なの?

引数が2つ以上のexecは引数が1つの時と挙動が変わるし、
第一システムコール使う関数は9x系とNT系で実装具合が違う。
駱駝本なりperldoc -f execなり読んでね。
0883nobodyさん03/03/15 20:20ID:???
>881
私も昔そう呼んでたよ。気にするな。
0884nobodyさん03/03/15 20:52ID:???
>>881
98SEが出るあたりまでずっとそう呼んでたよ。
0885nobodyさん03/03/15 21:18ID:???
>>880
汚染チェックだけしっかりやっとけ
>>882
$cmd,@argでも' 'でjoinしている時点で
意図を汲みようがないと思われ
0886nobodyさん03/03/15 21:42ID:???
>>879
$SIG{'ALRM'} = sub{ die 'timeout' };

eval{
alarm($timeout); # $timeout秒
$tmp = `/usr/bin/whois -h $server $name.$domain |grep -i '$msg'`;
alarm(0);
};
if ($@){
alarm(0);
($@ =~ /timeout/) or die;
# timeout!
}
# windowsではalarmが使えません。

>>880
windowsでは "-|"が使えません。
0887nobodyさん03/03/15 22:26ID:5hlN9xGB
>>882,886

どうもありがとうございます。
うまくいきました!
0888nobodyさん03/03/16 04:48ID:???
cgiからcgiを呼び出すとき、GETなら$ENV{'QUERY_STRING'}に
文字列いれてやればいいんだけどPOSTはどうやればいいですか?
途中まで書いて調べてみたんだけど。


$ENV{'SCRIPT_NAME'}="/cgi-bin/test.cgi";
$ENV{'REQUEST_METHOD'}="POST";
$ENV{'CONTENT_LENGTH'}="24";
open FH,"-l", or exec "perl","test2.cgi";
0889Name_Not_Found03/03/16 05:06ID:???
>>888
LWP(libwww)使うと幸せになれるかと。
0890nobodyさん03/03/16 08:50ID:???
>>889
thx
調べてないけどモジュールですね?
やてみます
089189003/03/16 11:19ID:???
>>889
できました。ありがとうございます。
一応こんな風になりました。ってコピペですが。

use HTTP::Request::Common qw(POST);
use LWP::UserAgent;
$ua = LWP::UserAgent->new;
my $req = POST 'http://www.xxx/yyy.cgi',
[ namae => "bbb",
name2 => "aaaa" ];
@aaa= split ( /<BR>/,$ua->request($req)->as_string);
0892nobodyさん03/03/16 13:18ID:???
標準入力で渡せばいい。つまり、、FHに書き込む。
0893nobodyさん03/03/16 20:10ID:HMSF0mo0
#トリップ使用/非使用(0=非使用 1=使用)
$trip = 1;

#トリップ変換文字列
$tripsalt = XX;

#---------------------#
# トリップ #
#---------------------#
sub tripping {

if ($trip == 0) {
}

if ($trip == 1) {
# トリップ機能有効なら◆は◇に置き換える
$name =~ s/◆/◇/;

if ($name =~ /(#|#)(.*)$/) {
$string = crypt("$2", $tripsalt);
$tripstr = substr($string,2,8);
$name =~ s/(#|#)(.*)$/◆$tripstr/;
}

}


掲示板にトリップ機能を付けようと思っています。
上の設定でon/offを切り替えれるように設定しようと思っているのですが、
これでいいのでしょうか?
0894nobodyさん03/03/16 20:13ID:???
>>893
実験の結果はどうでした?
089589303/03/16 20:15ID:HMSF0mo0
これを掲示板CGIの書き込み処理の前にサブルーチンで呼び出しても、
動いてくれませんでした。
有効にしたはずだけど無効でした。
0896nobodyさん03/03/16 20:15ID:MtdvS7v9
Perlでフォームの内容を判断させるにはどういう命令を使ったらいいんでしょうか。
「あほ」 が含まれてるだとか、判断したいんです。
0897nobodyさん03/03/16 20:18ID:???
>>893
どう動かなかったのか?



$tripsalt = XX;

一応クオートで囲って下さいな。

if ($trip == 0) {
}

いらないです。

後、スコープという物をもうちょっと意識した方が良いかと思います。
089889303/03/16 20:28ID:HMSF0mo0
>>897
レスありがとうございます。
動かなかったというのは無効設定というか、
加える前と何も変わりませんでした。

on off機能を無くしてスクリプトに直接埋め込んだ(こういう表現で良いのでしょうか?)
場合、有効になりました。

>>$tripsalt = XX;
>>一応クオートで囲って下さいな。
これですが直接埋め込んだときは囲わなくて動いたので大丈夫だったのですが、
やはり囲った方がいいのでしょうか?

直接埋め込んだときは書き込み処理の前に
$name =~ s/◆/◇/;
if ($name =~ /(#|#)(.*)$/) {
$string = crypt("$2", $tripsalt);
$tripstr = substr($string,2,8);
$name =~ s/(#|#)(.*)$/◆$tripstr/;
}
を埋め込みました。

まだクッキー部分の始末もしないといけないし、まだまだ時間がかかりそうです。
0899nobodyさん03/03/16 21:48ID:???
>>898
HTMLじゃないんだから、文字列のクオートは省略しちゃいかんよ。
「文字列ではない何か」とみなされることがある。

プログラムの別の場所で$tripという変数を使ってたりしない?
>>897の言う「スコープ」を意識しないと、こういう単純ミスをしがちなので。
0900nobodyさん03/03/16 21:52ID:???
>>901
正規表現を勉強して、パターンマッチで対応する。
090189303/03/16 22:10ID:HMSF0mo0
>>899
レスありがとうございます。
試行錯誤でなんとか出来ました。
あとはクッキーにトリップ変換後の物が記録されるのを修正です。

Perlは最近自分で勉強しだしたので、スコープが何か全く分かりません。
勉強してきます。

レス付けてくださった方ありがとうございました。
0902nobodyさん03/03/16 22:18ID:???
?
0903nobodyさん03/03/16 22:24ID:04Nbdlpl
1 名前:未来人 投稿日:03/03/16 22:05 ID:6xjzUOeH
今、試験的に2008年、2ちゃんねるUNIX板で開発された『タイムアクセス』を使って
2003年3月16日の「2ちゃんねる」に書き込んでいます。


2008年から(´∀` )オマエモナー
http://comic2.2ch.net/test/read.cgi/ymag/1047479574/
0904nobodyさん03/03/16 22:40ID:WBb98oow
★男はココを見るべし★女と金と???★
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
http://www.pink-angel.jp/betu/linkvp2/linkvp.html
0905nobodyさん03/03/16 22:57ID:???
  ∋8ノノハ.∩
   川o・-・)ノ <先生!こんなのがありました!
__/ /    /   
\(_ノ ̄ ̄ ̄\
||ヽ|| ̄ ̄ ̄ ̄||
 ...|| ̄ ̄ ̄ ̄||
http://saitama.gasuki.com/shinagawa/
0906nobodyさん03/03/17 06:24ID:???
おはようございます。
while (<FH>) {
だと 内容が $_ に格納されますが
}
foreach my $x (@x) {
のように、初期で変数に格納する方法はないでしょうか?
}
説明がへたくそですみません・・。
while (<FH>) {
$x=$_;
とするしかないのでしょうか・・
}
0907nobodyさん03/03/17 07:04ID:???
>>906
while (my $x = <FH>) {
  ...
}
0908nobodyさん03/03/17 07:35ID:???
>907
有難うございますー
一度、($x = <FH>) でやったところエラーが出たので
出来ないのかと思い込んでいたら、 myが抜けていたのですね・・。Strictで書いていたもので;
これで次に進めそうです(^^
レス数が900を超えています。1000を超えると表示できなくなるよ。