Perl 初心者コーナー Part24
■ このスレッドは過去ログ倉庫に格納されています
0001 ◆fBgbHI04bQ
03/06/07 22:30ID:GbQKLcPE【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 10
http://pc2.2ch.net/test/read.cgi/php/1048686475/
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
CGIに依存しないPerlの話題一般/Part2
http://pc2.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は、【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
過去ログやお勧めサイトは >>2-10
0452nobodyさん
03/06/16 19:47ID:???REMOTE_ADDRを記録して、それが同じだったということはREMOTE_ADDRが同じだったということではないですか?
>>451
CGIは全部実行した後出力するんだよ。たしか。
0453nobodyさん
03/06/16 19:51ID:???0455nobodyさん
03/06/16 19:56ID:???俺にもよく分からんけど、この辺とか
ttp://www.google.co.jp/search?q=cache:yNlP1fhIQ48J:tohoho.wakusei.ne.jp/lng/199802/98020500.htm+%E3%83%90%E3%83%83%E3%83%95%E3%82%A1%E3%83%AA%E3%83%B3%E3%82%B0+cgi&hl=ja&lr=lang_ja&ie=UTF-8
0456nobodyさん
03/06/16 20:40ID:???スクリプトで、mt-load.cgiを実行したときに1行ずつ表示されてたんだけどなぁ。
nphでもなさそうだし・・・
0458nobodyさん
03/06/16 21:34ID:???ほんとだ、localついてて見落としてた。。。
でも、sleepもないし、nph-*.cgiでもないのに・・・
どういう仕組みなんでしょうか?
0459nobodyさん
03/06/16 21:38ID:???イイナァ
0461nobodyさん
03/06/16 22:06ID:???あああ鬱。
0462458
03/06/16 22:08ID:???どうやったらできるんでしょ。。
ネタとか言わないで・・・
0463nobodyさん
03/06/16 22:26ID:???0464nobodyさん
03/06/16 23:52ID:???いろんな串さしてみて試せば?
0465nobodyさん
03/06/16 23:55ID:???$| = 1;
@data = ("あ","い","う","え","お","か","き","く","け","こ");
print "Content-Type: text/plain\n\n";
for($i=0; $i<=$#data; $i++){
print "$data[$i]<br>\n";
sleep(1);
}
exit;
これでやってみれ。
0467nobodyさん
03/06/17 00:02ID:???0470nobodyさん
03/06/17 00:14ID:???htmlについてもよく考えてみれ。
ブラウザがソースを受け取り、解釈してからレイアウトを決めて
どの時点でどういう順番で表示するか保証はないんだぞ?
0471458
03/06/17 00:14ID:???IEだと無理です。
0472458
03/06/17 00:17ID:???1行ずつ表示する文字をdatなりに保存して読み出したいので、cgiがいいんですけどね〜。。
javaはソース見え見えなのがいやだなぁ。。
0474458
03/06/17 00:20ID:???え???
俺、ローカル(Win)でやると、
あ<br>
い<br>
ってのが一気に表示されて、
レンタルサーバ(linux)だと、
ファイルのダウンロードになった
0475nobodyさん
03/06/17 00:31ID:???とりあえずJavaとJavaScriptは別モンだゴルァ!とお約束の突っ込み。
CGIでは、表示するぶんだけの文字列とそれを表示するためのJavaScriptを出力して
実際の表示はJavaScriptに委ねる、って意味なんだけど。
まあ、可能かどうかは分からんが。
0476nobodyさん
03/06/17 00:39ID:fNA5EU9/foreach文の中で次のループに移るコマンド(for文のcontinueみたいなやつ)
はあるのでしょうか?
御教授くださいませ。
0477nobodyさん
03/06/17 00:40ID:???0481nobodyさん
03/06/17 01:02ID:???まさか、CGIで よ う こ そ とか、下らない事やりたい訳じゃないよね。
JavascriptやFlashが無難だと思うけど・・・。
0482nobodyさん
03/06/17 01:06ID:???見るほうはさっさと表示されたほうがありがたいだろうに
自分のセンスでおもしろいカッコイイと思ってもみんながそうとは
0483nobodyさん
03/06/17 01:08ID:3tOJ9ih6SSIでCGIを呼び出そうとして失敗したときに
[an error occurred while processing this directive]
というエラー文が.sthmlファイルの中に出てくるんですが、
この文章を自由な文面に変更したり出来るんでしょうか?
出来ればリンクタグに変えたいんですが・・・
0486nobodyさん
03/06/17 01:13ID:QhMbf/ikmy $file = '/dir/*';
my @list = glob("$file");
このようなイメージでglob内ワイルドカードを
変数化することは可能でしょうか。
0488nobodyさん
03/06/17 01:22ID:???そのやり方じゃダメなの?
それより、何でスカラー変数をいちいち "" で囲むんだろう。
たまにリストでそれやってハマってる人がいるけど、なんかそういう参考書があるのだろうか。
0490486
03/06/17 02:09ID:???$file = '/dir/*';
my @list = <$file>;
はいかないのに
$file = 'dir/*';
my @list = </$file>;
はいったので、すごい疑問に感じ、ここでglobについて
質問させていただきました。
雰囲気を壊してしまいすみませんでした。
0491nobodyさん
03/06/17 06:23ID:???<$file>と書いた場合は、$fileがファイルハンドルと解釈されてるだけだよ。
<>演算子は、中身によって行入力になったりグロブ演算子になったりと、紛らわしい。
だからPerl5以降では、glob()を使ったほうがいい。
0492nobodyさん
03/06/17 07:06ID:???ファイルを開き、記録された記事番号とパスワードを取りだし
入力されたパスワードと選択された記事をそれぞれ比較して
該当した記事以外を記録しなおすという処理を作ったんですが
いろいろいじってるうちになんだか変な動作するようになりました。
入力したパスワードが正しいとなぜが一番違いの記事のパスワードと比較します。
入力されたパスワードが間違ってると、その記事のパスワードと比較します。
何が悪いんでしょう?
0493nobodyさん
03/06/17 07:07ID:???$del = 0;
local($no,$key) = split(/,/,$line);
if( ( $FORM{'delete'} eq $key ) ){
if ( $no eq $FORM{'target'} ) {
$del = 1;
}
if ( $del == 0 ) {
push (@line2,$line);
}
}
else {
&error("キーが違います。");
}
}
0494492
03/06/17 07:08ID:???0495nobodyさん
03/06/17 09:48ID:???ものを作っています。その際、ファイルハンドルなどはインスタンスごとに
違うものにしたいのですが、どのようにすればよいのでしょうか?
滅茶苦茶な例なのですがC&Perlで言うと下のようなイメージでやりたいと思っています
my $seif = shift;
$self->{handle} = fopen( …
0497>>492
03/06/17 13:30ID:XeNVFdef{
$del = 0;
local($no,$key) = split(/,/,$line);
if( ( $FORM{'delete'} eq $key ) ){
if ( $no eq $FORM{'target'} ) {
$del = 1;
}
if ( $del == 0 ) {
push (@line2,$line);
}
}
else {
&error("キーが違います。");
}
}
字下げくらいしろ。
見易さが違うだろうが。
っといいつつ、俺はPerlに関しては初心者だからまだ分からんがな。
今アクセスログやってんねや。んじゃ
0498nobodyさん
03/06/17 13:36ID:???その書き方はおかしいだろう。
記事番号$noはユニークだろうが、パスワード$keyは同じ値が
ありえるはず。
評価の順番が逆だ。
これでどうだ?
foreach $line (@lines) {
local($no, $key) = split(/,/,$line);
if ( $FORM{'target'} eq $no) {
if ( $FORM{'delete'} ne $key ) { &error("キーが違います。"); }
} else {
push (@line2, $line);
}
}
書き直しただけで、上記は再考の余地あり。
最初のほうで一致しても最後までループ処理が続いてしまって無駄。
0499新着
03/06/17 14:12ID:nJC3WMH60500nobodyさん
03/06/17 14:23ID:???cryptの暗号化についてです。
cryptによる暗号化は、サーバーによって結果が異なるのでしょうか?
自分のローカル環境とinfoseekの鯖では同じ結果になったのに、
友人のFreeBSDの鯖では結果が異なりました。
ラクダ本も見てみたのですが、詳しく載ってないみたいで。
以下がソースです。
#!/usr/local/bin/perl
$salt = 'sa';
$key = 'hogehage';
$crypt = crypt($key,$salt);
print "Content-type: text/plain\r\n\r\n";
print "salt=$salt\n";
print "key=$key\n";
print "crypt=$crypt\n";
ローカルの結果が、
salt=sa
key=hogehage
crypt=saaqOoONNsWPU
友人の鯖での結果が、
salt=sa
key=hogehage
crypt=$1$sa$YaIYjBa3kyQD6Oqo6pfMi.
でした。
もし可能なら、暗号化した後の結果が同じにしたいのですが、
どなたか方法をご存知ないでしょうか?
0501nobodyさん
03/06/17 14:34ID:???0502nobodyさん
03/06/17 14:37ID:???0503nobodyさん
03/06/17 14:40ID:???cryptはOSによって暗号化のアルゴリズムが異なることがある
ttp://hasunuma.pobox.ne.jp/support/cyclamen.cgi?log=perl&tree=r18
こんなのを使う手もあるし
ttp://www.mikeneko.ne.jp/~lab/perl/des/
0504500
03/06/17 14:56ID:???どうやら友人の鯖ではMD5がなにか関係しているようですね。
ライブラリの紹介もありがとうございました。
試してみたところ、これを利用すれば同じ結果になりました。
ありがとうございました。
0505nobodyさん
03/06/17 15:37ID:in7oUIeX$LOCATION[$values[0]] = {
"locationname" => $values[1],
としているのですが、
@locationlist = split(/_AND_/,$in{'locationid'});
#($in{'locationid'}は「1_AND_3_AND_7」のカタチで入ってきます。)
for($i = 0; $i <= $#locationlist; $i++){
$HtmlLocationList .= $LOCATION[$locationlist[$i]]->{locationname} . "***":
}
で、表示されるのでが「***」の部分だけで、
$LOCATION[$locationlist[$i]]->{locationname}の部分が表示されません。
なぜなのでしょうか?
0506nobodyさん
03/06/17 16:03ID:???というものから、「<font color="#FF9900">◆</font>リニューアルオープンいたしました!」を取り出したいのですが、
$JSAll =~ m/document\.write\(\"(.*)\"\)\;)/;
で。$1を得ようとすると、
/document\.write\("(.*)"\);)/: unmatched () in regexp at index.cgi line 34.
といわれてしまいます。
どうしたらちゃんと動くのでしょう?
そもそも、 unmatched ()ってどういう意味なのでしょう?
0507nobodyさん
03/06/17 16:37ID:???()の数があってない。
板違いだが、1行目のJSすらエラーだな。
0508nobodyさん
03/06/17 16:37ID:AMyzcYWt$str =~ s/^\w+\.\w+\(\"(.*)\"\)$/$1/;
0509nobodyさん
03/06/17 16:38ID:???↓↓↓
http://www.dvd-yuis.com/
0510nobodyさん
03/06/17 16:41ID:vHbufOUB@array = split(/\t/, $str);
foreach $value (@array){
$flag = 0;
foreach (@result){
if($_ eq $value){ $flag = 1; }
}
if($flag == 0){
push(@result,$value);
}
}
重複した要素を除く処理を作ったんですけど無駄はありますか?
0511nobodyさん
03/06/17 16:49ID:???ツッコミどころが多すぎてどこからつっこんでいいかわからん。
無駄以前に、思い通りの動作しないだろ。
0513_
03/06/17 16:51ID:???0515nobodyさん
03/06/17 16:52ID:???漏れもそんなに詳しいわけじゃないが、こんなんは駄目か?
$str = "abcdabcdef";
@array = split(/\t/, $str);
foreach $value (@array){
$hoge{$value} = '';
}
foreach $value(keys(%hoge)){
push(@data,$value);
}
0516nobodyさん
03/06/17 17:19ID:???@a = split(//,$a);
for (@a) {
$a{$_} += 1;
}
@a = sort keys %a;
0518nobodyさん
03/06/17 17:33ID:???@resultはどこから沸いて出たんだ?
$strにタブがないのにタブで区切ってどうするんだ?
0519nobodyさん
03/06/17 17:33ID:???0520nobodyさん
03/06/17 17:34ID:UJvendEvその処理が、全体のパフォーマンスに影響するのかな?
影響しないなら、考えるのが無駄。
0521nobodyさん
03/06/17 17:50ID:vHbufOUB@resultは宣言してないだけ、
タブが勝手に消えるのは2ちゃんねるの掲示板の仕様
>520
パフォーマンスのこともあるけど、
もっといい方法があるならそれを見て勉強になるし。
0522nobodyさん
03/06/17 17:53ID:GIfprx1bサブルーチンのなかで、サブルーチン書くのはなんか悪いことありますか?
グローバル変数つかうのと、一連の処理をすべて、同じブロックに入れるのはどれがいいでしょうか?
0523nobodyさん
03/06/17 18:16ID:vgoejlvM正規表現で使う「=~」の「~」つまりチルダですが、これってチルダでいいですか?
というのは私の持っている本ではこの波が真ん中に来ていて、チルダに見えないんですよ。
実際これはチルダで委員ですか?
0524nobodyさん
03/06/17 18:27ID:???サブルーチンの中にあるサブルーチンを
どこか別のサブルーチンから呼び出す時に
面倒だ罠。
0527506
03/06/17 18:31ID:???ありがとうございます。
ところで、
$srt = 'document.write("<font color=#FF9900>◆</font>ホームページがリニューアルオープンいたしました!")';
$str =~ s/^\w+\.\w+\(\"(.*)\"\)$/$1/;
print $str;
とやったのですが、
なんにもprintされません。確かに正規表現はあってるかと思うのですが・・・・・
わかるかたいらっしゃいますか?
0530523
03/06/17 18:59ID:SJassQej動きました。
別のところでエラってました。スマソ
0531nobodyさん
03/06/17 19:00ID:???ここの掲示板のソースみてみれ・・・ワラタ
0532nobodyさん
03/06/17 19:24ID:???0533nobodyさん
03/06/17 19:48ID:???っていうエラーを見るんですが。
BEGIN not safe after errorsってどういう意味ですか?
0536nobodyさん
03/06/17 20:39ID:???0537525
03/06/17 21:58ID:???10回*30秒くらいみたのですが、わかりませんでした・・・
どうみても正しいようにしか見えないのですが、
どうしてこんな結果になるのでしょう・・・
どうか教えてください。。。
0538nobodyさん
03/06/17 22:13ID:???--- test.p ---
$srt = 'document.write("<font color=#FF9900>◆</font>ホームページがリニューアルオープンいたしました!")';
$str =~ s/^\w+\.\w+\(\"(.*)\"\)$/$1/;
print $str;
---
> perl -wc test.p
Name "main::srt" used only once: possible typo at test.p line 1.
test.p syntax OK
>
0539nobodyさん
03/06/17 22:24ID:???http://www.kt.rim.or.jp/~kbk/perl5.doc/perldiag.html
0540458
03/06/17 23:41ID:???おっしゃられたとおり、私の環境がおかしいにしても、mt-load.cgiのは正常に表示されるんです。。
だれか、教えてくださいまし・・・・
0541nobodyさん
03/06/17 23:48ID:???そのしつこさを別の方向に向ければいいのに。
正常に動くスクリプトがあるなら、いらない部分をガンガン削って、どの部分でそれを表現してるか調べてみるとかあるだろ。
レス遡るのもマンドクセ。
0543座敷荒氏
03/06/17 23:50ID:NkO+IDyDShellに結果を渡すようにしたいのです。
Perlでtestコマンドを実行してから結果を
どうやってShellに引き渡せばいいのでしょうか?
最終的には1ではなく100や255エラーを返すようにしたいのですが。
0544525
03/06/18 00:00ID:???それは、たぶんですが、
文法は間違いないということですよね?
なぜ、$strが空になってしまうのか、教えていただけませんか?
(それともデバッガになれてないので勘違いしてるのかしら)
0545nobodyさん
03/06/18 00:05ID:???あってもない自分の脳内知識をお互いに自慢してる。
横から見てるとハライテーヨ
0547nobodyさん
03/06/18 00:24ID:???Name "main::srt" used only once: possible typo at test.p line 1.
(main パッケージの srt という名前の変数は一度しか使われていません。
誤字の可能性があります。(test.p の 1 行目))
0550nobodyさん
03/06/18 00:41ID:???(・∀・)ノ" またあとで見に来るよん
0551506
03/06/18 01:07ID:???しかし、デバッガって便利なんですね。使ってみよう。
いままでKCatchしか使ってなかった。
■ このスレッドは過去ログ倉庫に格納されています