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

【Perl 】初心者コーナーPart7

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001名無しさん@お腹いっぱい01/09/12 13:04ID:???
いらっしゃーい、perlのコーディングで困ってる人のスレです。

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

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

参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://corn.2ch.net/test/read.cgi?bbs=php&key=988809842&ls=50
CGIの質問はこちら【CGIだけど、なんか質問ある?part3】
http://corn.2ch.net/test/read.cgi?bbs=php&key=988727833&ls=50

過去ログ、その他の役立ち情報は>>2-5を見よう。
0886名無しさん@お腹いっぱい。01/10/21 01:49ID:???
>>883さん
有難う御座います。
スライスの添え字はリストコンテキストですよね、でも
@dummy[@aray] では駄目なんですよね、これは左辺に有るからですよね。
それで、何故か連装配列になってる!
んー、難解ですぅ、、perldocかなぁ、、、
0887名無しさん@お腹いっぱい。01/10/21 01:49ID:???
>884
jcode.pl置いてるだけで使ってないじゃん・・・
0888名無しさん@お腹いっぱい。01/10/21 01:53ID:???
>884
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
&jcode'convert($name,"sjis");

これを$i=0;の上くらいに置こうね。
0889REN01/10/21 01:53ID:T+S0eZYV
>>887
require './jcode.pl';
これじゃダメなんですか....?
0890名無しさん@お腹いっぱい。01/10/21 01:54ID:???
あ、分かりましたです。。>>883さん (^_^ ;)
ハッシュスライスって言うのかぁ、、{}でハッシュスライスである事を
明示するんですね、なるほど〜
0891名無しさん@お腹いっぱい。01/10/21 01:55ID:???
ダメって言われても、、、、取り合えず>>2のリンク一周しといで
0892REN01/10/21 01:56ID:T+S0eZYV
>>891
今からいってきます...。
0893REN01/10/21 02:12ID:T+S0eZYV
>>888
やってみましたが、どうもダメみたいです.....。
0894REN01/10/21 02:17ID:T+S0eZYV
>>893
すいません、うまくいきました。
これからいろんなスレ読んで勉強してきます。
ありがとうございました。
0895名無しさん@お腹いっぱい。01/10/21 14:02ID:yRzQNOPj
連想配列の keyの部分を正規表現で指定することって
できるのでそしょうか?

イメージとしては
$HASH = ( '20010930'=>'9/30', '20011001'=>'10/1', '20011002'=>'10/2');
delete $HASH{/^200110/};

みたいにまとめて消せればなぁと思いまして。
foreach $key( keys %HASH ){
 delete $HASH{$key} if $key =~ /^200110/;
}
ってやるしかないでしょうか?
089689501/10/21 14:04ID:yRzQNOPj
もうひとつ。
%HASHB = %HASH{/^200110/};
みたいな。感じのことができればいいかなと。
さすがに無理ですか?
0897名無しさん@お腹いっぱい。01/10/21 15:15ID:???
>>896
CPANのTie::RegexpHashやTie::Hash::Regexがいいかモナー。
普通のハッシュより圧倒的に遅くはなるがな。
0898名無しさん@お腹いっぱい。01/10/21 15:29ID:???
>>895
deleteは引数にハッシュスライスも指定できるよ。
delete @HASH{grep {/^200110/} keys %HASH};
0899名無しさん@お腹いっぱい。01/10/21 16:39ID:???
>>896
必要なキーをgrepで出して,mapでそのハッシュ渡せばできる。
簡単な文でやるならforeachで一つづつ追加,かな。
0900名無しさん@お腹いっぱい。01/10/21 17:01ID:MXQ9p/0K
CGI自身のローカルパスと、URLを獲得する方法ってありますか?
0901名無しさん@お腹いっぱい。01/10/21 17:15ID:???
SCRIPT_FILENAME=
SCRIPT_NAME=
SCRIPT_URI=
SCRIPT_URL=
あたり。
0902名無しさん@お腹いっぱい。01/10/21 17:17ID:???
>900
foreach (sort keys %ENV) { print "\$ENV{$_}: $ENV{$_}\n"; }を実行してそれらしいのを探す。
print __FILE__;
も参考に。
090390001/10/22 00:14ID:???
ありがとうございます。ばっちり獲得出来ました。
0904 01/10/22 01:28ID:???
正規表現で[0-9]のように、[あ-ん]のようなことをやるには
どうすればいいのでしょう?
090589601/10/22 02:26ID:???
>>898-899 ありがとうございます。
mapは今まで使ったことなかったのでこれを機会に
詳しく調べてみようと思います。
0906名無しさん@お腹いっぱい。01/10/22 02:28ID:???
>>904
&jcode::tr()かな。↓が詳しいよ。
http://www.mikeneko.ne.jp/~lab/kcode/jcode.html#h2-10
0907名無しさん@お腹いっぱい。01/10/22 11:33ID:VtVoe4OW
ORACLEのデータベースから何十万件のデータを読み込み、
そのデータを貯めて、次ページ、前ページでリスト表示したいのですが、
次ページで再度、同じCGIを呼ぶときに、前に読みこんだデータを保持できないのですが、
なにか方法はあるのでしょうか?
データ数が多いのと、レスポンスの関係上、ページ切替毎にDB読みこみは裂けたいという状況なのですが、
もし、何か策があったら、手ほどきをお願い致します。
0908名無しさん@お腹いっぱい。01/10/22 12:18ID:???
何十万件もあるデータをメモリに貯めとく方がよっぽど負荷高い。
ファイルの書き出してもORACLEから再度取り出した方が早い。
0909名無しさん@お腹いっぱい。01/10/22 21:01ID:VtVoe4OW
apacche::sessionとか、cgi::persistent等、
永続的オブジェクトの詳しいことはどこかに、書いてないですか?
永続的に保持できるとはいうものの、実際どのようにして保持するのかが、
まったくもってわかりません。どなたか、分かる方、教えてください。お願いします。
0910名無しさん@お腹いっぱい。01/10/22 21:10ID:???
無名配列って何に使うんですか?
て言うかnewって何?、blessって何?
全然分かんないよぅ。。。。ウワァ〜〜ン ε===((((((;´Д`)
0911名無しさん@お腹いっぱい。01/10/22 21:17ID:jrHSHu0Z
パスワードをいれないと絶対に見ることができないページって作れますか?
今は
認証.cgi→本体.cgiにして
本体でrefererをチェック認証.cgiと本体.cgi以外からだと蹴ってます。
が、キャッシュは残るし、referer偽造で軽く見られるし…
なんかいい方法ないですか?
0912名無しさん@お腹いっぱい。01/10/22 21:38ID:???
>911
./htpasswordを使う。

CGIだけでどうにかするなら、有効期限を10分とか短い時間にしたcookieを食わせる手もある。
ただし利用者がcookieオフにしていたら入れなくなるけどな。
他には認証.cgiでIPを記録してそのIPでのアクセスを許可する手もあるけど、これは串利用者の場合通ってしまう可能性もある。

tu-ka,本体.cgiで認証もすればいいだけじゃ?
0913名無しさん@お腹いっぱい。01/10/22 21:39ID:???
$pass = 'hogehoge';
if($hoge eq $pass){HTML表示}

これを先頭にぶち込めばいいんでないの?
0914名無しさん@お腹いっぱい。01/10/22 21:40ID:???
あっラグで被ったし。。
0915あのー01/10/22 21:43ID:0plXJa9e
家のWindows98で動作する
フリーウェアのDBを探してるんですが、
MySQLがベストなんでしょうか?
これよりいいのがあったらぜひ教えてください
0916名無しさん@お腹いっぱい。01/10/23 01:12ID:???
PostgreSQL というのもあるが、
MySQL の方が扱いやすいと思う。

↓Linux 向けの記事だけど DB に関する部分は OS に関係ないので参考までに。
http://www.atmarkit.co.jp/flinux/index/indexfiles/index-linux.html#postgres
0917名無しさん@お腹いっぱい。01/10/23 01:49ID:???
perlccを試してるんですが、linux+v5.005_03、Cygwin+5.6
WIN+Activeperl5.6 どの組み合わせでもa.outが実行出来ません(´Д`;)ウゥ..
Activeperl5.6 → ライブラリを探しに行ってあぼーん
Cygwin+5.6 → 実行するとコアダンプしてしぼーん
linux → コアダンプしてしぼーん
と言う感じです、どれも簡単なプリント文なんですが
ボクの環境は呪われているのでしょうか?
良いWeb等がありましたらご教授くださいませ。
0918名無しさん@お腹いっぱい。01/10/23 01:57ID:???
因みに試したのはこんなのです...
#!/usr/bin/perl
$mes = 'This is test message';
@array = qw(dog monkey cat cow rabit);
@array = sort{$a cmp $b}@array;
print "$_\n" foreach @array;
print "$mes\n";
exit(0);
0919名無しさん@お腹いっぱい。01/10/23 02:13ID:???
>>918
Perlcc でまともなバイナリを作るのは難しいみたい。
google ってみても(日本語のページでは)成功例は見ないね。
0920名無しさん@お腹いっぱい。01/10/23 02:31ID:???
>>919
ありがとです(・∀・)
まだまだみたいですね>perlcc、高速化に期待してる訳では無くて
ちょっと秘匿性が上がるのと、pmをスタティックにリンクしてバイナリ化出来る?
らしいので期待してたんですが・・・ どうも5.6系は駄目みたいです
とあるWebで、何気に入れたら何気に動いたんでCGIに使ったらこれも動いた!
って書いてたんで結構枯れてるのかなと思ったんですが
色んなヴァージョン入れてみようかな・・・・とほほ
引き続き安定Ver情報が有りましたらお願い致します。。
0921名無しさん@お腹いっぱい。01/10/23 06:34ID:???
5.8入れた人居ますか?
どんな感じかなぁ・・・
0922名無しさん@お腹いっぱい。01/10/23 08:35ID:???
>>921
リリースされたなんて聞いてない。
0923名無しさん@お腹いっぱい。01/10/23 09:08ID:???
いやアンタが聞いてなくてもさ。。。
0924名無しさん@お腹いっぱい。01/10/23 09:23ID:???
Perl Versions:Stable is 5.6.1. Devel is 5.7.2.

何処に5.8があるんだよ、ボケ。Perlじゃないなら何の5.8かぐらい書こうな。
0925名無しさん@お腹いっぱい。01/10/23 10:07ID:FWFaOvc8
Develって何ですか?
0926JAPU ◆JAPUTeX. 01/10/23 10:57ID:???
>>925
開発版。FreeBSD で言う current みたいなものです。普通の人は使いません。

>>910
多分、「プログラミングPerl (Programming Perl) 改訂版」「実用Perlプログラミング (Advanced Perl Programming)」を読むのが吉。
とりあえず端折った説明。

普通の配列は
@moe = ("motoko", "kanako");
のように変数名が付くけど、無名配列は変数名が付きません。なので、リファ
レンスを使ったアクセスのみ可能です。[...] は無名配列生成子で、無名配列
を生成してそこへのリファレンスを返します。
$ref = ["motoko", "kanako"];

で、これがどう役立つかと言えば、
@moe = (["sakura", "tomoyo"], ["motoko", "kanako"]);
のように使用して、$moe[0][1] ($moe[0]->[1] と等価) のようにアクセスし
ます。$moe[0] は ["sakura", "tomoyo"] という無名配列を差すハッシュです。
(print ref($moe[0]), "\n"; とすれば ARRAY と表示されます。) {...} とい
う無名ハッシュ生成子もあるので、同じように使えます。
0927JAPU ◆JAPUTeX. 01/10/23 11:00ID:???
(続き)

Bless はリファレンスを、あるパッケージのオブジェクトにします。($obj =
new HoeHoe; で HoeHoe オブジェクトを作って $obj->hoge(...) のように使
えますが、new の内部で使われます。)
下の例では HoeHoe::new が無名ハッシュへのリファレンスを返していますが、
これは bless されて HoeHoe パッケージのオブジェクトになっているので、
$hoe->value()という呼び出しが可能になっています。
ここではハッシュへのリファレンスを渡しているけど、スカラとか配列へのリ
ファレンスでもOKだよ。

#! /usr/bin/perl

$hoe = new HoeHoe("puni");
print $hoe->value(), "\n";
$hoe->value("hage");
print $hoe->value(), "\n";

package HoeHoe;
use Exporter;
use vars qw[@ISA];
@ISA = "Exporter";

sub new {
my $pkg = shift;
my $value = shift;
bless {value => $value}, $pkg;
}

sub value
{
my $obj = shift;
if(@_) {
$obj->{value} = shift;
} else {
$obj->{value};
}
}

__END__
0928トリップガ(・∀・)イイ!!01/10/23 12:18ID:???
>>JAPUさん ありがたぅです

なるほぢ、Cの構造体のような感じになるんですね。
>$moe[0][1] ($moe[0]->[1] と等価)
$moe[0]->[1]の方が参照外しが分かり易そうでよかったので
これで行こうと思います。

>Bless はリファレンスを、あるパッケージのオブジェクトにします
まさにperlobjの説明にある関連付けをblessで行うんですね。
今書いて頂いたサンプルを見て色々考えてますです。
上手に使うと、参照渡しより柔軟に変数を操作出来るのかな?
OO童貞の厨房にはチト難しいです  ((汁;
取り合えずpackageを沢山作りながら勉強します。
使い方は後からにしよう!
本は金欠マンなんで再来月位になりそうですが。。。汗

実用Perlプログラミングを買おうと思います。
ありがとうです
092991101/10/23 14:43ID:ROBN75GS
レスどうもです。
もとからあった日記のCGIを
If pass eq pass {もとからあったCGIそのまま}
else えらーめっせーじ;
にしたんですが、日記の閲覧ページから書き込みページに移動しようとすると
とっぷのパスワードチェックに戻って今います。
どうしたらいいのでしょうか?
if節の中だとサブルーチンに入れないのでしょうか?
0930名無しさん@お腹いっぱい。01/10/23 14:53ID:???
>929
んなこたない。
もう一度よく確認してみろ。
おそらく閲覧ページから書き込みページに移る際にパスワードを渡してないだけだろ。
パスワードが入っていないと元のCGIに辿り着けないんだろ?
だとしたらきっとパスワードを渡してないだけだ。
093191101/10/23 15:46ID:ROBN75GS
もとからあったCGIにはまったく手を加えてないのでパスワードはちゃんと渡ってるはずです。
0932名無しさん@お腹いっぱい。01/10/23 15:59ID:2S5ZWxco
Perlを始めたばかりでコードの丸写しをして勉強中なんですが、
「’」と「”」を使い分ける理由を教えていただけませんか?
Perlは文字リテラルと数値リテラルなど区別がないらしいのに、
どうして・・・
単純な質問ですいません。
0933名無しさん@お腹いっぱい。 01/10/23 16:03ID:???
$var = 'hoe'; print '$var';
これは貴方のの予想どうりに動きますか?
0934名無しさん@お腹いっぱい。01/10/23 16:07ID:???
あー何か不親切だ
ヒアドキュメントで"_HTM_"; とかして @ を使うと死ぬのは
覚えといて下さい、今後の為に。
0935名無しさん@お腹いっぱい。01/10/23 16:17ID:???
>>929
>If pass eq pass {もとからあったCGIそのまま}
>else えらーめっせーじ;

perl?
if を If と書いてるとかやってたら殺すよ?

出来るだけ正確に書けよ。

# だからと言って全部引用するなよ。
093693201/10/23 16:20ID:QI3yZ/4i
>933-934
うーん変数にシングルクォーテーションはいらないのは今試してわかりました。
ですが、他の人の書いたコードを見ると文字変数の値を代入する際に「’」や「”」
が入っていますよね?
この違いを教えていただけたらうれしいのですが・・・
933さんの簡単な例題にも時間を取られるような素人ですいませんが
よろしくお願いします。
0937名無しさん@お腹いっぱい。01/10/23 16:21ID:???
>931
ちゃんと渡ってるかどうか、printして確認してみろ。
エラーが出た時の調査の一番簡単な方法だ。
「そんなはずはない」って思っている部分があったら、きっとそこが間違ってる。
思い込みをしたらエラーは見つけられない。
しらみつぶしに原因を探せ。

if(条件){書き込みフォーム}
else{パスチェック}
とあったら、その直前で条件を全部表示させてみろ。
それで9割がた解決する。
書き込みフォームの入口を調べろ。
0938名無しさん@お腹いっぱい。01/10/23 16:24ID:???
>936
http://tohoho.wakusei.ne.jp/wwwperl1.htm#String
この辺。
0939名無しさん@お腹いっぱい。01/10/23 16:25ID:???
>>936
$foo = 'bar';
と
$foo = "bar";
なら大抵どちらでも同じ。
0940名無しさん@お腹いっぱい。01/10/23 16:35ID:???
>>936
んー、そんなに丁寧に聞かれると漏れも・・・(薄っぺらっ!
本家のドキュメントの何処かには、$var = "$foo"; とか return("$bar");
こう言うのは実際良く無いと書かれてます。この辺が>>936さんの悩み所?
ただ$var = "$fooさんハロー"; とかになった時に便利なんでやっぱりこの書き方
をしてしまう人が多いと思います。$var = 'ハロー'; が $var = '$fooさんハロー'
とか。結局初めのうちに色々考えながらやってる分には"で括ってエスケープ
しまくるのが手っ取り早いんだと  w
後、変数展開のコスト(' と ")に付いて良く議論されてますが、個人的には屁でも無いです
ガンガン " を使いましょう、
後初めの頃に気を付けるべきなのは、print "@array"; とprint @array; は決定的に違います
それとさっき書いたヒアドキュソメントの@、くらいかなぁ漏れが嵌ったのは

C使うなら qq とか qw も調べてみると吉かもしれませぬ。
0941名無しさん@お腹いっぱい。01/10/23 16:38ID:???
print "表示";
print '表示';
前者は文字化けします。(s-jis限定)
変数がないのならなるべく'がいいと思ってます。
その前にeucを使えと言われそうですが。
0942名無しさん@お腹いっぱい。01/10/23 16:41ID:???
あったあった、ココの
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlfaq4.html
What's wrong with always quoting "$vars"? 辺り

データ型は必読ですよん
0943名無しさん@お腹いっぱい。01/10/23 16:50ID:???
かなり勝手な想像...
何でもqq、でエスケープしまくり     ハヂメテノパール
 ↓
エスケプウザー(゚Д゚)、で q も使ってみる   ←この段階の配布コードが何故か多い
 ↓
qq、q とヒアドキュで良いじゃん(・∀・)♪
 ↓
ソースキレー(゚Д゚)
0944名無しさん@お腹いっぱい。01/10/23 16:51ID:???
ああ化けた、、詩嚢、、
0945 01/10/23 16:58ID:jinEtdTY
CGIがNN6.1の場合にのみ2重起動されます。
なにか原因にこころあたりがあるかたいますか?

初回起動のあと5秒くらいで2度目の起動がかかってしまいます。
094693601/10/23 17:14ID:???
みなさんありがとうございました。
今現在ではまだ詳しい事が全然理解できていないので、
みなさんのおっしゃった事を纏めて
変数代入時は「”」
変数に代入しない2byte文字列を使うときは「’」
を使ってみようと思います。
その他色々教えていただいた事は今から調べてみます。
本当にありがとうございました。
0947名無しさん@お腹いっぱい。01/10/23 20:23ID:6sXZfXmj
http://www3.ocn.ne.jp/~ayausa/webgame/DQ.html
↑みたいな風なプログラムを作るんだったら
C言語じゃできない?なにだったらいいかな?
0948名無しさん@ほっとぞぬ01/10/24 00:48ID:???
多次元配列でスライスって使えますか?
以下のような場合ダメだったので

@kkk = @fff[0][3 .. 6];
0949名無しさん@お腹いっぱい。01/10/24 00:53ID:???
>>948
使えるよ
@kkk = @{$fff[0]}[3..6];
0950名無しさん@ほっとぞぬ01/10/24 01:04ID:???
>949
高速レス、サンクスです。
@{$fff[0]} = (2, 3, 4, 5, 6, 7, 8, 9, 0);
という代入もできるんですね。

もう一つ聞いてもいいでしょうか?
多次元配列にまとめて代入できますか?
@kkk = ((3, 4, 5), (2, 3, 4), (6, 7, 8));
だとだめでした。
0951名無しさん@お腹いっぱい。01/10/24 01:06ID:???
@kkk = ([3, 4, 5], [2, 3, 4], [6, 7, 8]);
0952名無しさん@お腹いっぱい。01/10/24 01:07ID:???
>>950
@kkk = ([3,4,5],[2,3,4],[6,7,8]);
ではなく?
0953名無しさん@ほっとぞぬ 01/10/24 01:10ID:???
>> 951、952
1次元で () で囲むので多次元でもそうだと思い込んでいました。
有難うございました。
0954名無しさん@お腹いっぱい。01/10/24 02:11ID:Haoaz9Y7
$foo{bar}->[0] = 'あ';
$foo{bar}->[1] = 'い';
$foo{bar}->[2] = 'う';

というのがある状態で

foreach $hoe ( $foo{bar} )
もしくは
foreach $i ( 0 .. $#foo{bar} )

みたいな取り出し方ってできないのでしょうか?
0955名無しさん@お腹いっぱい。01/10/24 02:20ID:???
取り合えずperllol辺りを良く読んだ方がいいかと・・・
0956つーか。。01/10/24 02:47ID:???
>>949
のレス貰って分からないとマズイですよ
配列であれハッシュであれ、デリファレンスしたものに対して操作しましょ
0957名無しさん@お腹いっぱい。01/10/24 04:48ID:6Q3D2kbA
#!/usr/local/bin/perl
print "content-type: text/html\n\n";

$g=25425425124%241;
print "$g\n";

これ実行すると0が返ってくる・・・別のサーバーに置くと14が・・意味不明。
わかる人いますか?
0958名無しさん@お腹いっぱい。01/10/24 04:55ID:???
マルチポストはやめれ。
http://piza2.2ch.net/test/read.cgi/tech/991994996/505-
0959名無しさん@お腹いっぱい。01/10/24 05:51ID:???
変数の初期化って特に必要無いんでしょうか?
どうもPERLの作法に慣れなくて・・・・
0960名無しさん@お腹いっぱい。01/10/24 06:02ID:???
>>957
再現しないぞー て当たり前か(´Д`;)
0961  01/10/24 07:20ID:WMwwHA4O
目か頭が壊れてる可能性が高いですね
0962名無しさん@お腹いっぱい。01/10/24 07:26ID:???
#!/usr/bin/perl -wT

require japu;
0963名無しさん@お腹いっぱい。01/10/24 07:32ID:???
>>959 その感じだとCからかい?、だとしたらPerlは不定では無い
0又は空文字列って感じ(C#って良いよね)
今の君は白百合女学園からフリースクールに転校してきたような状態なんだよ へへ

他に嵌るパターンて言うと、ループ、再帰、mod_perl環境、undumpした実行ファイル
位かな、どれも前のウンコが入っててシボーンて奴だからそんなに凶悪じゃ無いし。
勿論慣れなきゃ全部初期化してもOK、コストがどうとか言う奴はホットケ(w
書いてればそのうち慣れてくるもんだし。

**もし**宣言の事言ってるんだったら、こっちはちゃんとしよう。
常時strict縛りがお勧め
096495401/10/24 09:57ID:???
>>955
PerlLoL読みました。
参照ではなく実体で渡す必要があるから

foreach $hoe ( @{$foo{bar}} ){
foreach $hoe ( $#{$foo{bar}} ){

とやればいいのですね!
無事解決しました。ありがとうございます。
0965名無しさん@お腹いっぱい。01/10/24 09:59ID:???
なんかここが「かちゅ〜しゃ」で読めなくなってる。
なぜに?
0966名無しさん@お腹いっぱい。01/10/24 10:00ID:???
my $ref = func();
print $$ref;

sub func{
 my $hoge;
 $hoge = "hoge";
 return \$hoge;
}

Cでこれやると駄目だよねえ。PerlでOkな理由がわかんない・・・。
0967名無しさん@お腹いっぱい。01/10/24 11:30ID:???
>>967
Perlのmy変数はCのauto変数と違い、
・スタックには積まれるわけではない。
・参照がなくなるまで実体も消えない。
と考えればよいでしょう。
096891101/10/24 11:41ID:EX0y50So
まずページを開いた時に

sub login {

if ($FORM{'pass'} ne "$pass") {
&header;
エラーメッセージ表示。
exit;
}
else{ 日記のCGIそのまま }
exit;
}

でパスをチェックして、つぎに日記CGIないのパスチェックで管理モードに移行させたいのです。
日記CGI単体での動作確認は取れてます。
どこがいけないのでしょうか?
0969ぽ01/10/24 11:49ID:1tmsVagU
use strict している状態で eval() をした場合
strict がエラーになっても $@ になにも設定されません(T_T
Known Bug でしょうか?

use strict;
eval(<<'EOF;');
$X = 1;
EOF;
if(defiend($@)){
print "[$@]\n";
}
0970名無しさん@お腹いっぱい。01/10/24 12:13ID:???
>>911
次のページに移動するとき
hoe.cgi?pass=password
みたいに渡してる?
0971名無しさん@お腹いっぱい。01/10/24 12:16ID:???
@fff[0..1][2]
のようなスライスをすることは出来ますか?
(スライスとは言わないのかも)
0972JAPU ◆JAPUTeX. 01/10/24 12:28ID:???
>>969
"Bug" かどうかは分かりませんが、Perl 5.6 では $@ に "Global symbol ..."
が格納されます。
0973ぽ01/10/24 12:31ID:1tmsVagU
>>972
ありがとうございます。
こちらは Perl5.005_03 です。
ふーむ どうしようかなぁ
STDERR には "Global symbol ..." が出力されるので
こいつを捕まえるのがいいのかな。
0974ぽ01/10/24 12:34ID:1tmsVagU
STDERR, STDOUT を上書きして文字列として取得したり
はたまた 文字コード変換を追加したりできるモジュールとか
ありませんでしょうか?
&hogehoge(STDERR, \&buffering);
&hogehoge(STDOUT, sub { new Jcode(@_)->sjis(); });
みたいな感じで。
CPAN検索中....でも探すのヘタなんですよ(TT
0975名無しさん@お腹いっぱい。01/10/24 12:38ID:???
まんまのがありますね。
http://search.cpan.org/search?dist=Tie-STDERR
0976名無しさん@お腹いっぱい。01/10/24 12:41ID:VLOxIr/R
use CGI;
$cgi = new CGI;
%FORM = $cgi->Vars;

をやろうとしています。Win32上の Perl 5.6.1では出来るのですが
プロバイダにある 5.005_03 では
Undefined subroutine CGI::Vars
と言われてしまいます。

古いバージョンの CGI.pmではどのように要素を取り出したら
よいのでしょうか?
0977名無しさん@お腹いっぱい。01/10/24 12:47ID:???
そろそろ次スレだな。
0978名無しさん@お腹いっぱい。01/10/24 13:09ID:???
>>976
%FORM = map{ $_, $cgi->param($_) } $cgi->param();
0979名無しさん@お腹いっぱい。01/10/24 13:15ID:???
$logfile
---
2
1<>dataA<>dataB<>dataC<>
2<>dataA<>dataB<>dataC<>
EOF

処理
open(NUM, "< $logfile");
@log = <NUM>;
close(NUM);
$num = shift(@log);
chomp($num);
$num++;
$data = "$num<>$a<>$b<>$c<>";
unshift(@log, "$num\n");
push(@log,"$data\n");
open(ADD, "> $logfile");
print ADD "@log";

$logfile
---
3
1<>dataA<>dataB<>dataC<>
2<>dataA<>dataB<>dataC<>
3<>dataA<>dataB<>dataC<>
EOF

という風に
unshift(@log, "$num\n");
では行頭に半角スペースが入らなかったのに
push(@log,"$data\n");
open(ADD, "> $logfile");
としたら各行の行頭に半角スペースが入ってしまいました。
全く分からないのですが、どこで半角スペースが入ってしまっているのでしょうか?
098097901/10/24 13:18ID:???
あわわ。。
半角スペース失敗。全角で書きます。
処理後の$logfile
---
3 #ここには入ってない。
 1<>dataA<>dataB<>dataC<> #ここの行頭
 2<>dataA<>dataB<>dataC<> #ここの行頭
 3<>dataA<>dataB<>dataC<> #ここの行頭
EOF
0981名無しさん@お腹いっぱい。01/10/24 13:23ID:???
>>979 過去ログ見ようね
http://corn.2ch.net/php/kako/996/996075607.html の409-415
098296601/10/24 13:24ID:???
>>967
参照カウンタ持ってるのか。なるほどさんくすありが�d
098397901/10/24 13:33ID:???
>>981
う…。失礼しました。
逝ってきます。

過去ログ全部取得して保存しておこう…。
0984名無しさん@お腹いっぱい。01/10/24 14:03ID:???
my 新スレ立てるよー;
0985名無しさん@お腹いっぱい。01/10/24 14:14ID:???
お願いします。
ってもう立ってるね。
コピペ中っぽいのでまだリンクは張らず。
レス数が950を超えています。1000を超えると書き込みができなくなります。