トップページ⇒php
984コメント309KB

【Perl】初心者コーナーPart11

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん02/03/27 12:53ID:wAXxxOxP
 
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

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

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

参考書籍はこちら【【Perl,CGI】参考書籍 第2版 】
http://pc.2ch.net/test/read.cgi/php/988809842/
CGIの質問はこちら【CGIだけどなんか質問ある Pert 5.01 】
http://pc.2ch.net/test/read.cgi/php/1015127347/l50
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/

過去ログ、その他の役立ち情報は>>2-10を見よう。
015712902/04/02 23:35ID:???
>>153
レスありがとう御座います。助かりました。
URLも参考になりました。
とりあえず、このような形で解決できました。
ありがとうございました。

$aa->{ 'aa' } = 'aa' ;
$Data::Dumper::Terse = 1 ;
print '$aaa = ' . Dumper( $aa ) ;

結果:
$aaa = {
aa => "aa"
}
0158nobodyさん02/04/03 00:09ID:???
package manco ;
$manco='manco';

こんなふうにして、staitc?な変数置きたいんだけど、
駄目?
015915802/04/03 00:18ID:???
>>158
use strict ;
してたからだた
でも、どして?
0160nobodyさん02/04/03 00:24ID:???
>>159
ourしる
016115802/04/03 00:56ID:???
use strict ;
package manco ;
my $manco='manco';
だったぁ〜
0162nobodyさん02/04/03 01:03ID:???
use strict;
package system;
$system::logfile = 'bbs.log';
package main;
my $filename = $system::logfile;

こういう事じゃなくて?
0163nobodyさん02/04/03 01:23ID:???
>161
わざわざそんなことしてなんになるのか?
ただのアホだな! アホのくせに書き込むんじゃねーよ!

0164nobodyさん02/04/03 02:53ID:Hn4nUBfc
cgiファイルの中にアクセス解析のCGIを組み込みたいんですが
そういうのって可能ですか?

例えば、htmlの場合
<html>
<!--#exec cgi="cgi-bin/accesskaiseki/accesskaiseki.cgi"-->
</html>
みたいに記述すればOKですが、同じ文章を
CGIファイルの中に付け足しても無理ですよね。
アホな質問かもしれませんがわかる方いたら教えてください。
0165nobodyさん02/04/03 02:59ID:???
>>156
>やっと関数・処理の切り分け、流用・設計を考慮し出したトコなのです。
>main ではデータの流れだけを担当し、細かい処理は各関数に
>任せた結果が例の処理でした。
>で、各関数には @ で渡さず $ で統一したかった、という感じ。
なるほど、意図が判った。
そういうときは、私はファイル名、もしくはファイルハンドルを関数に渡します。
0166nobodyさん02/04/03 03:19ID:???
>>164
CGIの中から、LWPでアクセス解析CGIをGETするのがいいかな。
0167nobodyさん02/04/03 03:47ID:???
>>164
動いてるそのCGIで解析するべきだと思うが。。。
0168nobody02/04/03 04:15ID:???
>>164
具体的に何のCGIに入れるのか分からないが、
掲示板みたいのなら上の方の設定部分に
$honyarara='<!--#exec cgi="cgi-bin/accesskaiseki/accesskaiseki.cgi"-->\n';
とやっておいてhtml表示部分に
print "$honyarara";
を足す。多分だけどな。
うまく行ったら私の幸せでも祈ってください。
016916602/04/03 04:28ID:???
>>168
少なくとも以前apacheで試した時は、CGI出力に対してSSIは
適用されなかったなり。
017016802/04/03 04:41ID:???
そうでしたか。

しかも間違えてたよ。
$honyarara='<!--#exec cgi="cgi-bin/accesskaiseki/accesskaiseki.cgi"-->';
print "$honyarara\n";
だよ。(鬱
逝ってきます。

164は166の方法が難しいときはSSIでなくCGIのアクセス解析にしてimgタグを上記方法で埋め込んで下さい。
0171nobodyさん02/04/03 11:21ID:???
print $file{ 'fh' } $str ;
こんな感じで、ファイルハンドルをハッシュの中にいれて使おうと思ったんだけど、
うまくいかんかったのだけど、どして?
0172nobodyさん02/04/03 11:28ID:???
最近、煽ってるやついっけど、
そういう奴は、すっこんでろよ。
ここは、【Perl】初心者コーナーだ。
質問する訳でもなく、答える気も無い奴は、
しゃべるなってこった。わかったか?
0173nobodyさん02/04/03 11:41ID:???
>172
初心者に質問の仕方を教えてますがなにか?
まずは質問の仕方を覚えるのが大事。
質問の仕方がわかるようになれば、問題の解決法を調べる方法もわかるようになってくる。
そうすれば他人に聞かずとも自分で調べる事もできるようになるしな。
回答を教えるだけが親切ではない。
0174nobodyさん02/04/03 12:00ID:???
>>173
漏れが、いいたいのはさ、
「そんな事もしらねぇ〜書き込むんじゃねぇ〜よ」
みたいな事いってるのよ、

あんたの、その上から人を見るような、口調は、正直気に入らないが、
教えて欲しい人には、利益になるから、いんじゃねか
0175nobodyさん02/04/03 12:58ID:???
あまり素直に答えて居座られても困ります。
129みたいなのに常駐されると特に厄介だし。
「2:それでこんな風にやってみたが・・・ 」を書いてあると、
間違いを指摘するのが容易で答えやすいのではないでしょうか。
なんの努力もなしに、教えてくれと助けを求める人の中には、
初心者というより、ただ単に頭が悪い人という場合があるので、
適当にあしらってしまうのも理解できます。
FAQのような事はgoogleや適当なWebサイトに誘導するのはアリだと思うし、
調べ方を教えるのが、質問者に対してもっとも利益になると思います。
過度の煽りには賛同しかねますが、
Perlに関する初心者向けの本で解決することを質問されていてはきりがないので、
適度に追い返して欲しいというのが本音です。

と172の煽りに乗ってしまう俺がいる。

ほとんどの方は、努力する姿勢をみせている質問者には、
煽らずに答えてあげていると思います。一部の方は・・・(省略)
172さんのような口調の方がおられると余計に荒れてしまうので、
自身も多少の自粛をお願いします。(気持ちは理解してますけど。)
0176春虫02/04/03 13:18ID:???
@args = split(/&/, $query);
foreach $i (@args) {
($name, $val) = split(/=/, $i);
#$val =~ tr/+/ /;
#$val =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack('C', hex($1))/eg;
#$cgi{$name} = $val;

if ( $name eq 'data1' ){
$data1 = $val;
} elsif ( $name eq 'data2' ){
$data2 = $val;
}
}

これだとフォームが増えるとif〜のがズラズラ増えちゃうよね?
なんかスマ〜トにやるにはどー書いたらいいでしょか?w
0177nobodyさん02/04/03 13:18ID:???
>>171
そういう構文が許されていないから。
0178nobodyさん02/04/03 13:19ID:???
>>176
> どー書いたらいいでしょか?w
幸せそうですね。何か愉快な事でもあったのですか?

0179nobodyさん02/04/03 13:23ID:???
>>176
>$cgi{$name} = $val;
素直に↑を使ったらいいと思うけどダメな理由でもあるの?
018017902/04/03 13:27ID:???
ネタだったのか。まじめに答えてしまった。鬱だ氏脳。さようなら。
0181nobodyさん02/04/03 13:48ID:???
>>177
とりあえず、
print $file{ 'fh' } $str ;
を
$fh = $file{ 'fh' } ;
print $fh $str ;
って対処してはいるんだけど、
なんかスマートじゃないなーって思って質問したんやけど、
これで、あってるのかしら?
0182nobodyさん02/04/03 13:59ID:???
use strict ;
use warnings ;
皆さん使ってます?
0183 02/04/03 15:35ID:7cQZbwjH
Perlはじめたばかりの初心者なのですが
フォームで取得した情報を、テーブル内に表示しようとすると
並び順がめちゃくちゃになってこまっています。これを順番に表示するにはどうしたら
よいでしょうか?

名前 → 本文
メールアドレス → 名前
本文 → メールアドレス

#フォームデータの復元
foreach $pair (split(/&/, $query)) {
($key, $value) = split(/=/, $pair);

# 文字のデコード
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg;

$FORM{$key} = $value;
0184nobodyさん02/04/03 16:05ID:???
>>181
>>1から引用
> 1:自分はこう言う事がしたい。
> 2:それでこんな風にやってみたが・・・
> 3:それだとこんなエラーが出て上手く行かなかった。

肝心の「何がしたいか」を書かないでまともな返事を期待するなよ。

アンタのやりたいことは多分これだと思うが。
-- begin code --
print { $file{fh} } $str
-- end code --
0185nobodyさん02/04/03 16:06ID:???
>>183
Hashってのはそういう仕様なんだよ。
順番に表示したきゃsort keys %hashやTie::IxHash、DB_FileのDB_BTREEでも使えや。
018618302/04/03 16:18ID:7cQZbwjH
>>185
どうも有難うございました。そういう仕様なのですね。納得です。
勉強してまた、出直してきます。
0187nobodyさん02/04/03 16:29ID:???
>183
sortを使ってハッシュの中身を整列してから表示するという手もある。
018818302/04/03 16:38ID:???
なるほど〜。sortを使う方法ならできそうですね。
ところで、hash は順番めちゃくちゃに表示っていうのは
毎回ランダムに順番が代わるのでしょうか?それとも何か規則性あるんですか?
018918102/04/03 16:42ID:???
>>184
>肝心の「何がしたいか」を書かないでまともな返事を期待するなよ。
そうだね、申し訳ない。
ありがと
0190nobodyさん02/04/03 16:54ID:???
>>188
順番は変化します。
基本的には恐らくハッシュ値の順とかだろうけど、同じハッシュ値の場合は
格納した順によって変化するはずなので、同じ順番に並ぶことを
期待しない方がいいと思う。
以上適当な解答なので、どうしても気になるならPerlのソースコードでも
見て確かめてください。
ハッシュについてはC言語のアルゴリズムの本をみればよく分かると思う。
0191nobodyさん02/04/03 17:09ID:???
>188
モジュールで整列できる物がある。
・・・以前JAPUさんに教えてもらったのにログが見つからない。(涙
0192 02/04/03 18:02ID:???
掲示板とかで入力された内容を確認画面を1ページはさんで
次のページにデータを渡すには、どうすればいいのでしょうか・・・。

0193nobodyさん02/04/03 18:34ID:???
>192
<input type=hidden〜〜〜>
で渡す。
0194nobodyさん02/04/03 18:39ID:???
確認画面に書き出すリンクのurlを
〜〜.cgi?comment=sage
ってするか、フォームボタン作って
<input type="hidden" name="comment" value="sage">
ってする。もしくはjavascript使って併用することもできる。
あとはクッキー使う方法もある。削除パスワードとか。
019519202/04/03 18:44ID:???
どうも有難うございました!!!!!!!
<input type="hidden" 〜
で解決しました。皆様方に感謝です。
0196nobodyさん02/04/03 21:56ID:???
メソッドから、メンバーのメソッドを呼ぶときの引数について
なんですけど

package test ;
sub new {改行多すぎて省略}

sub a
{
my ( $self ) = shift ;
my ( $str ) = @_ ;
print "$self->{test} ### $str\n" ;
}

sub b
{
my ( $self ) = shift ;
my ( $str ) = @_ ;
# a( $str ) ;
a( $self , $str ) ;
#ここの引数の数と
}

package main ;
my $test = new test() ;
$test->a( "call a" ) ;
#ここの引数の数
$test->b( "call b" ) ;
exit ;

メインから呼ぶとき、
$test->a( "call a" ) ;
だけど、メソッドbから、呼ぶときは、
a( $self , "call a" ) ;
と、なっちゃったんだけど、できれば引数の数が変わるのは、避けたいいんだけど、
これは、言語仕様すか?
それとも、記述の仕方間違ってます?
0197nobodyさん02/04/03 22:05ID:???
>>196
何が言いたいのかよくわからんな。
もう少し纏めてから再度質問されたし。
0198nobodyさん02/04/03 22:16ID:???
メソッドBから呼ぶときは
$self→a("call a");
ってやりなされ。
0199nobodyさん02/04/04 00:06ID:???
>>198
なるほどぉ〜〜〜〜〜〜〜〜!!!
そっかぁ〜、
ありがとう!!!!!!
0200nobodyさん02/04/04 01:44ID:???
>>183
漏れは、
$FORM{$key} = $value;
push(@FORM_ORDER,$key);
てな感じでキーの順序を覚えておいて、
foreach(@FORM_ORDER) {...}
で回すだす。
0201nobodyさん02/04/04 10:04ID:???
フォームのキーの並び順に依存するのは止めた方が…。
0202春虫02/04/04 15:04ID:???
open(TMP, ">$tmp") || &error("$tmpが変!");
print TMP "$no<>$data1<>$data2<>$date\n";

open(DATA,"$file") || &error("$fileが変!");
while (<DATA>) {
print TMP $_;

記事に$noを振りたいんだけど$noを1づつ増やして
いきたいのですが・・・どうも上手くいきません。
Perlの先輩方々よいアドバイスをください・・・

感じとしては$fileの1行目を読み込んで
$noに+1をする感じでいいのでしょうか。。。
0203nobodyさん02/04/04 15:16ID:???
>202
もう少しわかりやすく。
何をやりたいかよくわからない。
020420202/04/04 15:22ID:???
えと・・・

書き込みにNoをつけたいんです;−;
1番目記事,2番目の記事って感じに。
0205nobodyさん02/04/04 15:23ID:???
>>202
どのみちそれじゃ上書きになってるから1個しか表示されないよ。
0206nobodyさん02/04/04 15:25ID:???
>204
ログにナンバーを振るのでなく、表示の際にナンバーを振っていく方がいいと思うが
それじゃダメなのかな?
020720202/04/04 15:35ID:???
LogにNoが欲しいかも・・・
0208誰かもっとスマートな方法教えて02/04/04 16:00ID:???
open(DATA,"$file") || &error("$fileが変!");
open(TMP, ">$tmp") || &error("$tmpが変!");
$tmp = <DATA>;
$tmp =~ /^(\d+)<>/;
print TMP ($1+1) . "<>$data1<>$data2<>$date\n$tmp";
while (<DATA>) {
print TMP $_;
0209nobodyさん02/04/04 16:00ID:???
>>202
http://www.nn.iij4u.or.jp/~nabe/osietekunn.html
君はなかなかの教えてクンだ。
だが今一歩足りないな。

もっと無意味な情報をこれ見よがしに提示し、
自分の考えを捻じ曲げて喚き散らし、
狂ったように答えを催促すれば誰しも認める第一級教えてクンになれるゾ!
021020202/04/04 16:04ID:???
>>209

了解!第一級教えてクンになれるように頑張ります。

では逝って来ます。
0211fdg02/04/04 19:45ID:ggon4ynD
■■ 出会いサイト開業システムレンタル ■■

儲かる出会い系ビジネス

月収100万円オーバー!!

HP作成できない初心者でも安心して運営

出会いサイトシステムをサーバーごとレンタルします

運営者様には無料で宣伝ソフトもお付けします

1.携帯メール自動生成一括送信ソフト
2.高性能メールアドレス収集ソフト
3.サーチエンジン・掲示板一括自動ソフト

http://www.voo.to/2ch/


0212 ◆Ihiuc0j. 02/04/04 23:14ID:zyOMuMfg
サブルーチンへの引数で「配列と普通の変数」を渡したいのですがどうも上手くいきません。
例えば

--------------------------------------------------------
test(@DATA1,$data,@DATA2);

sub test{
local(@DATA,$data,@DATA2) = @_;
}
--------------------------------------------------------

のようなソースの場合local(@DATA)に全てのデータが入ってしまいます。
色々試行錯誤したのですが、なかなか望む結果は得られませんでした。

で、ポインタ(リファレンス)渡しでやったみたのですが
ポインタ自体は受け渡せたのですが、そこから配列を丸ごと参照する方法がわかりません。
($data->[x]のように一個一個要素を取り出せば上手くいきました)

何かスマートな方法はないでしょうか?
0213nobodyさん02/04/04 23:19ID:???
>>212
参照使うのがトレンドのようです。
0214nobodyさん02/04/04 23:19ID:???
@$array_ref
0215nobodyさん02/04/04 23:35ID:???
まだかなまだかな・・・(いつものプロトタイプさんが来るのを待っている)
0216 ◆Ihiuc0j. 02/04/04 23:37ID:zyOMuMfg
>>213
うお、あっさり出来たΣ(゜っ゜
サンクス!
0217nobodyさん02/04/04 23:49ID:???
あっさりできちゃったのか。プロトタイプ漫才見たかったのにー!
0218nobodyさん02/04/05 00:24ID:???
>>212

sub test(\@\$\@);

test(@data, $data, @data2);

sub test(\@\$\@){
local(*ary, *scl, *ary2) = @_;
# ...
}
0219nobodyさん02/04/05 01:24ID:zs6TJzXI
Perlのサブルーチンの引数はPerl内部では参照渡しされてるらしいのですが
returnで値を返すときも内部では参照を返しているのでしょうか?
0220nobodyさん02/04/05 01:30ID:9ypevpef
だれかまたプロトタイプがらみの質問して。
プロトタイプ野郎を見たいので。
0221nobodyさん02/04/05 01:39ID:???
>219
サブルーチン内でmy宣言した変数をreturnできることを考えればわかるだろ!
このうすらハゲが!
0222nobodyさん02/04/05 01:54ID:???
>このうすらハゲが!
バレタ!?(;゚д゚|||
0223 02/04/05 03:00ID:don7TGy+
ヒアドキュメントの終わりの文をインデントすると違う文字列として認識されてしまいますよね?
ヒアドキュメントを含む部分をサブルーチンにしたい場合、どうしてますか?
0224nobodyさん02/04/05 03:37ID:???
>>223
意味がよくわからないけど,こういう事?

&foo(<<"    HERE-DOC");
        here-document
    HERE-DOC

インデントに使用した文字(タブとか)も判定に使われる.
perldataのScalar value constructorsを読むと参考になると思う.
0225 02/04/05 04:11ID:don7TGy+
ありがとうございますー。
英文は読みませんでしたけど、コードの例見たらわかりました。
英文って読む気がしないんですけど、
やっぱり読むほうが普通なんでしょうかね。
0226nobodyさん02/04/05 04:22ID:???
>>221
おまえ、いつも一言よけいだよ、
部外者だが、見るとムカツク
0227nobodyさん02/04/05 04:24ID:???
>>225
英語が読めると(Perlに限らず)世界は確実に広がる.
読もうとしなければいつまでも読めないまま.
読むスピードはそのうち速くなるから,頑張り過ぎない程度に気軽に読むのが良いかと.

知っている内容が多いperldocは読み易かったよ,おれの場合.
0228nobodyさん02/04/05 07:21ID:???
>227
お前に能書き垂れられる筋合いじゃネーヨ
何様だオマエ???(゚Д゚)
0229Dream ★02/04/05 07:27ID:???
>>227
わかっていてもなかなかね。
英語の読解力付けたいんじゃなくて、Perlで目的の
処理が出来たらいいわけなんで、ついつい。。。
0230nobodyさん02/04/05 07:52ID:???
>>229
漏れの場合、UNIXのmanを読むうち、いつのまにか
マニュアル英語だけは読めるようになってたよ。
構文が単純だからかねぇ。
もちろん日本語訳があれば、そっちを先に見ます。
0231nobodyさん02/04/05 08:07ID:???
http://learn.perl.org/で英語のメーリングリストにでも入れば
少しは英語に慣れるんじゃない?
たまにRandal L. Schwartzが答えるね。
0232nobodyさん02/04/05 15:16ID:cQRjW2rJ
Perl cookbookはどうですか?
effective perlはなかなか評判は良いようですが、こちらのほうはどうでしょう?
近くの本屋に売っていないもので、具体的内容が確かめられません。
0233nobodyさん02/04/05 15:18ID:???
参考書籍スレと間違えた、、、
023472702/04/05 16:11ID:Oqnvheag
参考書籍の727ですが、呼びました?

けっこう高額だそうですね。
0235nobodyさん02/04/05 16:38ID:7CGZnUtF
Apr 5 16:33:08 router 544364: 17w5d: %SEC-6-IPACCESSLOGP: list 101 denied udp xxx.xxx.xxx.xxx(139) -> xxx.xxx.xxx.xxx(139), 1 packet
このようなログがtail -fで流しているのですが
Apr 5 16:33:08 udp xxx.xxx.xxx.xxx(139) -> xxx.xxx.xxx.xxx(139)
だけ表示させるperlスクリプトを作りたいと思っています。
初めてperlでスクリプトを作るのでヒントいただけたら助かります。
何かヒントになるスクリプトないでしょうか?
拡張としてはxxx.xxx.xxx.xxxのIPアドレスをgethostbyaddrつかって
ホスト名に出来るようにしていきたいと思っています。
0236nobodyさん02/04/05 16:39ID:???
>>235
Perlじゃなくてもawkで事足りる気もするけどね。
0237nobodyさん02/04/05 16:44ID:???
>>235
とりあえず、どこまで分かってて、どこでつまずいてるの?
023823502/04/05 16:53ID:7CGZnUtF
#!/usr/bin/perl
while(<STDIN>){
print;
}

まずなにからやっていけばいいのかが解ってないレベルです。
もうしわけないです。
配列にデータを入れていかないといけないのか?とか
基本的な所から解ってないです。
発想ができてない状況なのでとりあえずこういうのをやってみろとか
ありましたら是非ともよろしくお願いします。
0239nobodyさん02/04/05 17:09ID:???
>238
#!/usr/bin/perl

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

まずここから。
0240nobodyさん02/04/05 17:13ID:???
>239
なんでCGIになってるんだ?
0241nobodyさん02/04/05 17:14ID:???
すみません、ついクセで・・・
0242nobodyさん02/04/05 17:30ID:???
use strict;

open(TAIL, "tail -f tmp.log |") or die;
while(<TAIL>) {
    if (/^(\w+ \d+ \d+:\d+:\d+ ).+(udp )(\d+\.\d+\.\d+\.\d+)(\(\d+\)) -> (\d+\.\d+\.\d+\.\d+)(\(\d+\))/) {
        print "$1$2$3@{[host($3)]}$4 -> $5@{[host($5)]}$6\n";
    }
    else {
        print $_;
    }
}

sub host {
    my $host = gethostbyaddr(pack("C4", split(/\./, $_[0])), 2);
    return $host ? "[$host]" : '';
}
024323502/04/05 18:11ID:7CGZnUtF
>>242様
ありがとうございます。
ゆっくり勉強していくつもりだったんですがいきなり答えが。

でもこのままだと少し問題があったので多少いじりました。
#!/usr/bin/perl
use strict;

open(TAIL, "tail -f /var/log/filter.log |");
while(<TAIL>) {
if (/^(\w+ \d+ \d+:\d+:\d+ ).+(denied )(\w+ )(\d+\.\d+\.\d+\.\d+)(\(\d+\)) -> (\d+\.\d+\.\d+\.\d+)(\(\d+\))/) {
print "$1$2$3$4@{[host($4)]}$5 -> $6@{[host($6)]}$7\n";
# print $3;
}
else {
print $_;
# print $3;
}
}

sub host {
my $host = gethostbyaddr(pack("C4", split(/\./, $_[0])), 2);
return $host ? "[$host]" : '';
}

正直use strict や (pack("C4", split(/\./, $_[0])), 2);のあたりが
まったくわからないのですが勉強させていただきます。

本当にありがとうございました。
024423502/04/05 18:15ID:7CGZnUtF
うわ。print $3とかめちゃはずかし。
0245nobodyさん02/04/05 20:32ID:???
日本語文字列から日本語を検索したいんですが、
/$keyword/
のようにすると、$keyword の内容が2バイト文字で、その中の一文字に
「\」とか「|」が混じってると普通に検索できません。
なにかいい方法ありませんか?
0246nobodyさん02/04/05 20:42ID:???
/\Q$keyword\E/
0247nobodyさん02/04/05 21:53ID:???
>>246
245です。うまくいきました。ありがとう
0248 02/04/06 21:23ID:???
DBMの仕組みを覚えようと思って、練習ということで無理やり
アクセスカウンタをDBMつくろうとしているのですが、↓みたいな方法にしたら
うまく表示されませんでした、どの部分に問題があるのかもしわかりましたら
教えて頂けると助かります。宜しくお願いします。

$dat = './dat/dbm_counter';

#ファイルを開いて変数に代入
if (!tie %COUNT, SDBM_File, $COUNT, O_CREAT|O_RDWR, 0666) {&error('File Not Open');}
$COUNT('now') = ++$COUNT('now');
$now = $COUNT('now');
untie %COUNT;
0249nobodyさん02/04/06 21:30ID:???
>248
DBMなんぞよりPerlの勉強をしたほうがいいね。
0250nobodyさん02/04/06 21:39ID:???
ヽ(`Д´)ノ perl -c [programfile]
 -c  check syntax only (runs BEGIN and CHECK blocks)

syntax error at - line 5, near "$COUNT("
syntax error at - line 6, near "$COUNT("
- had compilation errors.
0251Dream ★02/04/06 21:48ID:???
>>248
$COUNT['now'}に変えてみそ?
0252nobodyさん02/04/06 21:54ID:???
>>251
あんたもどうかと思うよ。

>>248
そもそも$datはどこいった。
0253nobodyさん02/04/06 21:58ID:???
つーか、CGI::Carp使えYO…
025424802/04/06 22:03ID:???
修正したんですが、これで大丈夫ですか?

if (!tie %COUNT, SDBM_File, $dat ,$COUNT, O_CREAT|O_RDWR, 0666) {&error('File Not Open');}
$COUNT{'now'} = ++$COUNT{'now'};
$now = $COUNT{'now'};
untie %COUNT;

>>250
そのsyntax error っていうのが、今使っているサーバだとでてくれないので
間違いを見つけるのが大変なのですが、何をすれば表示されるのですか?
0255nobodyさん02/04/06 22:06ID:???
>>254
use CGI::Carp qw(fatalsToBrowser);

つか、大丈夫ですか、と質問する前に試したらどうだよ。
だがもちろん共用サーバではやるなよ。
025624802/04/06 22:07ID:???
>>255
実は全然動いてくれませんでした・・・(泣
0257nobodyさん02/04/06 22:17ID:???
>>256
自分の情報を出し惜しみするな。

で、CGI::Carpを使った結果はどうなんだ?
■ このスレッドは過去ログ倉庫に格納されています