■過去ログ倉庫めにゅーに戻る■
【Perl 】初心者コーナーPart3
- 1 名前:_gunzip 投稿日:2001/01/19(金) 17:55
-
初めて来た方、初心者はまずこのスレッドから始めよう。
尋ねる前に同じ質問がないかこのスレや旧スレ、及び下のリンクを一通り見てみよう。
案外答えはもう書かれているかもしれない。
[関連スレッド]
Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087
【Perl,CGI】参考書籍 http://tako.2ch.net/test/read.cgi?bbs=perl&key=970166109
[総合]
□入手先&総本山
・Perl Com http://www.perl.com/
・CPAN http://www.cpan.org/
・ActiveState http://www.activestate.com/
□神の御姿
・Larry Wall's Very Own Home Page http://www.wall.org/~larry/
[FAQ&過去ログ検索]
・Search CPAN org http://search.cpan.org/
・Perl初心者 検索の部屋 http://www.harukaze.net/namazu/
・とほほほ http://www.wakusei.ne.jp/twn/wwwlng.cgi
・CGI-ML内 http://forest.ne.jp/cgi-ml/
[モジュール]
□モジュールの解説(日本語)
・河馬屋二千年堂's Page http://member.nifty.ne.jp/hippo2000/index.htm
・use Object http://perl.infoware.ne.jp/
・いろいろ http://www.bekknet.ad.jp/~bero/docj/module/
□モジュール入手先
・ActivePerl http://www.activestate.com/PPMPackages/
[情報源&参考リンク]
□メールマガジン
・Perlニュースレター http://www.context.co.jp/
・OOP http://perl-oop.hoops.ne.jp/
・まぐまぐ内 http://search.mag2.com/reader/Magsearch
□メーリングリスト
・CGI-ML http://forest.ne.jp/cgi-ml/
・Free-ML内 http://www.freeml.com/search_ml.php?page=1&key=Perl
□参考リソース
・Perl初心者の部屋 http://www.harukaze.net/~mishima/perl/index.html
・Perl Journal http://www.itknowledge.com/tpj/
・WDVL Perl http://wdvl.com/Authoring/Languages/Perl/
・Effective Perl http://www.effectiveperl.com/
・The Web Techniques Perl Columns (by Randal Schwertz)
http://www.stonehenge.com/merlyn/WebTechniques/
・Beginning Perl Tutorials http://www.pageresource.com/cgirec/index.html
・HotScripts http://www.hotscripts.com/Perl/
・Perl Month http://www.perlmonth.com/index.html
- 2 名前:_gunzip 投稿日:2001/01/19(金) 17:58
- 。 _ 。 ┌────────────────
/ ̄\\ < 長すぎるって何度も怒られたよ.........
。 / ミ. \| └────────────────
> l≪ ###\/| 〜
\_____/\| 〜
。 _ 。 。
// ̄\ 。
|/ ; イヽ ゜ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜 |\/### ≫l < < と言うことで、【Perl】初心者コーナーPart3 です。
〜 |/\_____/ \_________________
- 3 名前:名無しさん 投稿日:2001/01/19(金) 22:52
- OSを判別する方法ってありますか?
組み込みのものでは無いようなので、何かモジュールでもあったら教えてください
- 4 名前:名無しさん 投稿日:2001/01/19(金) 23:03
- >>3
激しくがいしゅつです。
- 5 名前:_gunzip 投稿日:2001/01/19(金) 23:28
- >>3
参考までに
perl -MConfig -e "print $config{osname}"
または、
perl -e "print $^O";
こんな方法もあるそうです(分かりにくい)
#!/usr/bin/perl
print -e "/.\\.\\NUL" ? "Windows/DOS" : "Not Windows/DOS";
- 6 名前:名無しさん 投稿日:2001/01/19(金) 23:29
- >>3
何のOS?
- 7 名前:_gunzip 投稿日:2001/01/19(金) 23:37
- >>5の一番目は、$Config{osname}です。(大文字)
^
(三番目はあまり信用しないで。)
- 8 名前:名無しさん 投稿日:2001/01/20(土) 01:04
- >>1
コテハンで継続スレ建てるな。売名厨房か。
- 9 名前:名無しさん 投稿日:2001/01/20(土) 08:16
- だったらなに?
- 10 名前:名無しさん 投稿日:2001/01/20(土) 09:33
- >>8
いじゃん売名でもサー
暇な人が教えてあげると、初心者君には
助かるだろうし。
頑張ってくれたまえ。(ただし、間違えて教えないように)
- 11 名前:名無しさん 投稿日:2001/01/20(土) 14:46
- >頑張ってくれたまえ。(ただし、間違えて教えないように)
なんか偉そうだね
- 12 名前:名無しさん 投稿日:2001/01/20(土) 17:44
- だからなに?
- 13 名前:名無しさん 投稿日:2001/01/20(土) 17:48
- 同じDBMモジュールを使ってればOSなんて関係ないよね?
ActivePerl(Windows98)のSDBMで作成したデータファイルを
レンタルサーバ(FreeBSD)上のデータ検索スクリプト(自作)で参照できますよね?
もちろんレンタルサーバにSDBMモジュールが組み込まれている場合に限定して
- 14 名前:_gunzip@病院 投稿日:2001/01/20(土) 22:31
- >>13
おそらく関係ないと思います。
ただ、昔 Netscape::Cache をインストールした際に、DB_File(Berkley DB)
のバージョンが高すぎる(2.xxから1.85にダウングレードしろ)と怒られた経験があるので、
バージョン周りにも気を付けられると良いかと思います。
(殆ど関係ないと思いますが......)
>>8
すまん。以後気を付ける。(いや、本当に)
- 15 名前:13 投稿日:2001/01/20(土) 23:11
- あ。バージョンも気をつけねば・・・
とりあえずサンクス>>14
- 16 名前:名無しさん 投稿日:2001/01/21(日) 00:11
- $name名の変数に値、$valueを代入したいのですが
$$name = $value だと動きません。いい方法を教えてください。
- 17 名前:ん? 投稿日:2001/01/21(日) 00:24
- $name = "$value";
ではいかんの?
- 18 名前:名無しさん 投稿日:2001/01/21(日) 00:33
- >>17
それだと、
$name = "giko"、$value = "mona"、だったとすると、
$name内のデータ、「giko」を「mona」で上書きするだけなんですね。
変数名が「$name」の値、「$giko」に「mona」を代入したいのです。
よろしくおねがいします。
- 19 名前:名無しさん 投稿日:2001/01/21(日) 00:41
- >>16
$DAT{'$name'} = $value;
ではどうですか?
- 20 名前:名無しさん 投稿日:2001/01/21(日) 00:52
- そうですね。連想配列使えばシンプルにすむ話でしたね。失礼しました〜。
>>17様、>>19様、どもどもです。
- 21 名前:名無しさん 投稿日:2001/01/21(日) 01:11
- 検索ヒット数が知りたくて、下のような質問を「初心者コーナー Part2 」
で書き込んだのですが、回答を頂けませんでした。
そもそも、質問が初心者以前だからでしょうか…。
それだけでも教えて下さい。調べたつもりなのですが分からなくて。
http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087&st=772&to=772&nofirst=true
- 22 名前:名無しちん、ぴんち 投稿日:2001/01/21(日) 01:19
- >>16
${$name} = $value で。
- 23 名前:名無しさん 投稿日:2001/01/21(日) 01:38
- >>21
これは画像をアップロードしたいのかい?概要説明プリズ
- 24 名前:7c 投稿日:2001/01/21(日) 01:41
- もう終わったけど、16はmy変数を使っていたのでは?
(それでハマった経験あり…)
$name = 'giko';
{
my $giko = 'giko';
$$name = 'mona';
print "my giko = $giko\n";
}
print "global giko = $giko\n";
をテストすると動作がわかるかも…。
- 25 名前:名無しさん 投稿日:2001/01/21(日) 01:42
- 画像アップがしたいのなら
ttp://www3.mahoroba.ne.jp/~yuugeki/cgi_lab/index.html
のdecoder.plでも使うといい。
ただし無駄な部分がかなり重いので削るように。
- 26 名前:7c 投稿日:2001/01/21(日) 01:50
- >>21
@hit = $target =~ /PATTERN/g;
$number_of_hit = @hit;
ではダメですか?
- 27 名前:21 投稿日:2001/01/21(日) 02:28
- >23
画像アップではないです。検索の各値ではなくマッチした数だけ調べてくて。
>26
今はその方法で調べています。
でも、ひょっとして$#arrayの様な方法を知らないだけかも?と思いお聞きしました。
方法の有無が分かれば気持ちもスッキリです。ありがとうございました。
- 28 名前:名無しさん 投稿日:2001/01/21(日) 02:45
- if($xxxx =~ /hoge/i) の後ろのiって何ですか?
- 29 名前:名無しさん 投稿日:2001/01/21(日) 03:00
- >28
大文字と小文字を区別しないというオプションです。
iが無いと書かれたとおり(小文字のhogeだけ)になるみたい。
iはinsensitive…だったかな。
- 30 名前:名無しさん 投稿日:2001/01/21(日) 03:00
- >>28
すみません、小文字と大文字を区別しないですね。
マニュアル調べたらすぐ出ました。
- 31 名前:28 投稿日:2001/01/21(日) 13:21
- >>29
どもどもですー。
- 32 名前:名無しさん 投稿日:2001/01/21(日) 23:18
- あの、テスト用cgiを作ったのですが
なんかエラーになってしますんです。
間違い等あったらご指摘ください。
おねがいします。
#!/usr/bin/perl
print "Content-type: text/html";
require 'jcode.pl';
read (STDIN,$str,$ENV{"CONTENT_LENGTH"});
($name,$memo)=split(/&/,$str);
($nn,$nm)=split(/=/,$name);
($mn,$mm)=split(/=/,$memo);
$mm =~ tr/+/ /;
$mm =~ s/%(..)/pack "C", hex $1/eg;
&jcode::convert(*mm,'sjis');
open (FILE,"ita.htm");
@old=<FILE>;
close FILE;
open (FILE,">ita.htm");
print FILE "<hr>name<b>$nm</b>";
print FILE ":$mm<br>";
print FILE "@old";
close FILE;
- 33 名前:名無しさん 投稿日:2001/01/21(日) 23:42
- HTTPヘッダのあとに改行2つが無い。
perl -cw で文法チェックはやったんだよね?
- 34 名前:名無しさん 投稿日:2001/01/21(日) 23:42
- >>32
エラーメッセージぐらい書いてよ
- 35 名前:名無しさん 投稿日:2001/01/21(日) 23:56
- ヘッダーの後に改行を入れろ改行を。>32
- 36 名前:名無しさん 投稿日:2001/01/22(月) 00:30
- $sage(内容unko) と $sageage(内容chinchin) がある場合、
unkoage と表示させるには
print "$sage"."age";
でいいのでしょうか?
print "$sageage";だとchinchinが出てきそうなんですが・・・
- 37 名前:japu(AyuMoe) 投稿日:2001/01/22(月) 00:51
- 試せば分かります。"${sage}age" でも可。
*** 調べること・試すことは重要です ***
- 38 名前:名無しさん 投稿日:2001/01/22(月) 15:09
- >>34-35
有り難う御座います。
簡単なトコロを見落としてたみたいです。
- 39 名前:名無しさん 投稿日:2001/01/22(月) 15:14
- あの、勉強始めたばかりです。
PerlってBasicみたいに、グラフ書けないんですか?
よろしくお願いします。
- 40 名前:名無しさん 投稿日:2001/01/22(月) 15:20
- すみません。初心者です。ちょこっと質問させてください。
%hash('a'=>'1','b'=>'2','c'=>'3');というハッシュがあって
再帰的呼び出しで3回繰り返しその結果が
a=1,b=2,c=3
a=11,b=22,c=33
a=111,b=222,c=333
となるようなサブルーチンを作ってるんですが、
どうしてもうまくいかないので教えてほしいのですがよろしくおねがいします。
- 41 名前:むぎ茶 投稿日:2001/01/22(月) 15:53
- どうしたいのかがわからん。
最初が a=1,b=2,c=3
で1回呼び出しても値が変わらず
a=1,b=2,c=3
2回呼び出して a=11
3回呼び出して a=111
ってわけじゃないでしょ?
あと 再帰ってのも関係ないんじゃない?
n回よばれると 長さnになるってだけ?
- 42 名前:32 投稿日:2001/01/22(月) 16:25
- とりあえずエラーはなくなったのですが、
また問題が発生してしまいました。
$nmと$mmがファイル出力されてなくて
どうしたらいいのかわからのでご指導お願いします。
- 43 名前:名無しさん 投稿日:2001/01/22(月) 16:27
- さっそくレスありがとうございます。
そうです。n回呼び出すとa=n個みたいな風です。
初心者なもんでうまく理解してないんで、うまく質問できないんですが、
すみません。
- 44 名前:名無しさん 投稿日:2001/01/22(月) 16:33
- はじめまして。
社内ツールをWebで作っているのですが、Perlでエラー処理を書く
場合、ファイルオープン時しか書かないものでしょうか?
Open(LOG,">>logfile") || die "cannot append: $!;
はよく見掛けるのですが・・・。これだと、ログファイルを
開く時に失敗すると、die関数のエラーメッセージが表示され、
それ以外に何かエラーがあると、Apacheのエラーメッセージが
表示されておしまいですよね。VBのように、エラーが起きたら
OSがエラーを拾い、無条件にエラールーチンへジャンプという
書き方はないのでしょうか。Perlではそういう書き方をしない
ものでしょうか?
- 45 名前:名無しさん 投稿日:2001/01/22(月) 16:58
- >むぎ茶
自己解決できました。x使ってできました。
こんな簡単なものなんですぐにわからなかったんだろう?
あっ!!初心物だったからだ・・・
がんがん育って逝きます。
- 46 名前:_gunzip 投稿日:2001/01/22(月) 17:14
- >>44
例外処理は
eval{
#実行したいコード
};
if(defined $@){
#エラールーチン
}
エラーメッセージは特殊変数$@に入っているよ。
(ちなみに、;を忘れないように)
参照
-------
http://www.harukaze.net/~mishima/perl/faq/faq4j.html#4-8
http://www.harukaze.net/~mishima/perl/cgi-debug-env/deb-tech.html
- 47 名前:だぼ 投稿日:2001/01/22(月) 17:48
- ちくしょーNTのばかやろー。なんでうごかねーんだこのダボ!!
テスト時には動いたくせに本番でふぁいるおーぷんえらーじゃ
ねんだよゴルァ!!
なんででしょうね。
- 48 名前:名無しさん 投稿日:2001/01/22(月) 17:50
- さあ
- 49 名前:名無しさん 投稿日:2001/01/22(月) 18:20
- >>46
こんな書き方があったのですか!URLまで丁寧にありがとう
ございます。もう少し読んでみて、頑張ってみます!!
$@をこうやって使うのですね〜なるほど。地道にdieを書く
なんて〜と思っていたのでうれしいです。
- 50 名前:名無しさん 投稿日:2001/01/23(火) 13:08
- >>46
エラートラップを書いてみました。
関数内に書く場合、こつがあるのでしょうか?
sub check {
my $str;
〜何か処理〜
return;
}
を
sub check {
eval{
my $str;
〜何か処理〜
return;
};
if(defined($@)){
エラーを表示
}
}
にするとき、evalの位置は、
>sub check {
か
>my $str;
のどちらがいいのでしょうか。また、
>if(defined($@))
だとなぜかうまく行かず、
>if ($@ ne ""){
だと成功します。これは理由があるのでしょうか?
- 51 名前:_gunzip@病院食堂 投稿日:2001/01/23(火) 13:30
- あーミスでした。
>>50
>>if(defined($@))
>だとなぜかうまく行かず、
>>if ($@ ne ""){
>だと成功します。これは理由があるのでしょうか?
$@に入るのは最後に実行されたevalのエラーメッセージですから、
これが空文字列ならばOK、何か入っていればNG。
ということで、
if($@ ne "")
の方が正しいです。(これはミスでしたね.......すんません)
>evalの位置は、
>>sub check {
>か
>>my $str;
>のどちらがいいのでしょうか。
前者はちょっとよく分かりません
eval{
sub check{
}
}
ってことですか?(これは意味がない.....)
- 52 名前:名無しさん 投稿日:2001/01/23(火) 13:56
- >>51
失礼しました。evalの位置は、
>sub check {
の直後か
>my $str;
の直後のどちらがいいのでしょうか。
が正しかったです。
試してみると、どちらでも変化無しですが、それ以前にeval{〜
の書き方が悪いせい(私がです)か、この関数が実行時点でエラー
になってしまいます。具体的にいうと、
sub fp_saveParam {
eval{
my ($str_chrCode, $str_form_method, $str_dataString, @str_data, $var_each,$str_property, $var_value);
(ここから処理〜)
(処理の終了部分から)
if(!$bln_judge) {
return 0;
} else
return 1;
}
};
if($@ ne ''){
&fp_systemError("fp_saveParam",$@);
}
}
fp_systemErrorはエラー結果を出力するもので、これば問題ないです。
どこかすごい勘違いをしているのでしょうか?
if($@ ne "") の件は分かりました。空文字列が入るのですね。
#ご入院中でしょうか?
- 53 名前:名無しさん 投稿日:2001/01/23(火) 13:57
- ↑長すぎました・・・・・
- 54 名前:_gunzip@病院食堂 投稿日:2001/01/23(火) 14:07
- そのー、どんなエラーメッセージが出ているのでしょう?
それと、
} else
return 1;
}
は、
} else {
return 1;
}
ですよね。(ブラケットが一つ抜けていますが)
>#ご入院中でしょうか?
いえ、逆です。
- 55 名前:_gunzip@病院 投稿日:2001/01/23(火) 14:28
- たびたび済みません。
これは推測ですが、もしかして、
fp_saveParam から値を返そうとして、何も返ってこないため
他の部分でエラーになっているのではないですか?
eval BLOCK 内から値を返しても(return しても)、それは
evalコードの戻り値になってしまいますよ?
(evalがサブルーチンの最後にあれば、同時にサブルーチンからも
evalから返された値が返されますけど)
ですから、このように書いた方が
my $ret; #戻り値
eval{
$ret = &fp_saveParam();
#$retの値ごとの処理
if($ret == 1){
#いろいろ
}
#その他の処理
.........
};
if($@ ne ""){
#エラー処理
}
sub fp_saveParam{
#処理
reuturn 0; #値を返す(別に0にかぎらんが)
}
- 56 名前:名無しさん 投稿日:2001/01/23(火) 14:45
- >>55
その通りですっ!!
eval{〜を入れた関数が値を返していない(0か1ですね)ため、
あちこちで戻り値がおかしくなり、エラー表示関数が出ていたの
でした。Apacheのログファイルに出ているエラーではないため、
どのようにご説明したらいいだろうと考えて、テストをしていたら
先にご返答を頂きましたね。結果は成功です。
(ちなみに{が足りない部分は、コピペミスでした。ご指摘ありがとう
ございます)
周りにPerlが分かる方がいなく(ASPでしたらいるのですが)、今の
時期に恥ずかしいですが先行開発なので(涙)、このスレッドが頼り
なんです。いつか皆さんに成果を返せるように頑張りますので、もう
しばらくよろしくお願いします。ああでも、本当にお礼したいぐらい
感謝しています > gunzip様および皆様。
- 57 名前:_gunzip@病院 投稿日:2001/01/23(火) 15:14
- >>56
うまくいってよかったですね。ハイ
>>39
恐らく GD::Graph で間に合うと思います。
インストールは、(窓なら)コマンドラインから
ppm install GD::Graph
それ以外ならCPANモジュールでインストール
使用法は、下記参照
http://member.nifty.ne.jp/hippo2000/perltips/ggmemo.htm
- 58 名前:_gunzip@鬱 投稿日:2001/01/23(火) 15:22
- ごめんなさい。間違えました。(何度も性懲りもなく)
http://member.nifty.ne.jp/hippo2000/perltips/ggmemo.htm
これは違うものでした。
これからは気を付けます。
- 59 名前:名無しさん 投稿日:2001/01/23(火) 15:55
- 基本的な質問なんですけど
ファイルを「読むだけ」ならファイルロックは不要ですよね?
- 60 名前:名無しさん 投稿日:2001/01/23(火) 16:02
- >>59
書き込み処理が無いならね。。
他のプロセスorスレッドが書き込み中に読むと
読みにミスるから、それを書き込む危険性がある。
読んだ値をその後書き込むなら、そのミスをしないように
普通はロックする必要あり。
- 61 名前:59 投稿日:2001/01/23(火) 16:56
- >60
ありがとう
ローカルマシンで作成したデータベースをネット上で検索するだけのCGIなんだけど
利用者の性質上、ある時間帯のアクセスが1万回以上/時間になりそうなので
とりあえずデータファイルが破損しないか質問してみました
書き込み処理は全く無いからたぶんOKですよね
- 62 名前:名無しさん 投稿日:2001/01/24(水) 00:07
- すごく初心者な質問なのだろうとおもうのですが
(ローカル鯖&他のCGIの動作確認は出来てます)
ローカルで動かそうとすると、「ここから実行しますか云々」の
例のダイアログが出てしまうのです。
んで、TEXTでHTMLソースが出てくる・・・
これはどうしたらいいのですか?
- 63 名前:名無しさん 投稿日:2001/01/24(水) 00:30
- >>62
ヘッダがおかしそう。
- 64 名前:名無しさん 投稿日:2001/01/24(水) 00:32
- parlに関する質問ではないのですが、
他に質問できるような掲示板がなかったので、ここで聞きます。
(すんません)
ftpソフトでcgiを入れてあるフォルダに移動しようとしたら、
そのフォルダごとftpソフトで表示されないというのが時々あるのですが、
これって、表示を復活させることはできるのでしょうか。
まったく別のサーバーで同じような症状が起きているので、
サーバー固定の問題ではないようです。
ちなみに、削除されているわけではなく、
しっかりcgiは動いています。
- 65 名前:名無しさん 投稿日:2001/01/24(水) 02:24
- FTPクライアントのバグ。
- 66 名前:名無しさん 投稿日:2001/01/24(水) 07:39
- 視力低下
- 67 名前:名無しさん 投稿日:2001/01/24(水) 08:16
- 共有レンタルサーバって何?
専用レンタルサーバって何?
- 68 名前:名無しさん 投稿日:2001/01/24(水) 09:36
- >>62ですが・・・
鯖へFTPしてみたら動きました。
ローカル鯖テストでは(前述のように)動かなかったのに・・・
なんででしょう?
- 69 名前:名無しさん 投稿日:2001/01/24(水) 10:29
- そのフォルダ、なんかディレクトリ構成がおかしいとか。
再帰的にsymbolic linkされていたり・・・
- 70 名前:Perl2日目 投稿日:2001/01/24(水) 20:45
- WebページからIDを入力すると該当者の学生番号を出力する
Perlスクリプトを作りたいと思っています
-----------------------------------------
#!/usr/local/bin/perl
$DBM= "ID_CODE";#データファイル
require "cgi-lib.pl";
require "jcode.pl";
&ReadParse;
$id = $in{"id"};#フォームから送信された検索ID
&jcode'convert(*id,"sjis");
use DB_File;
tie %DAT,DB_File,$DBM;
print "Content-type: text/html\n\n";
print "<HTML>\n<HEAD>\n</HEAD>\n<BODY>\n";
print "$idさんの学生番号は$val{$key{$id}}です";
print "</BODY>\n</HTML>\n";
untie %DAT;
-----------------------------------------
一応表示されるのですが何かおかしいでしょうか?
不要な部分、より良い書き方などありましたら教えてください
- 71 名前:名無しさん 投稿日:2001/01/24(水) 21:04
- あの、perlのファイルをexeに変換する
プログラムってないんですか?
- 72 名前:_gunzip 投稿日:2001/01/24(水) 22:45
- >>71
perlcc
参考
perldoc perlcc
Perl2Exeというものもがあるようですが、使ったことはありません。
(シェアウェアで49ドル、試用期間30日)
http://www.indigostar.com/
参考
http://www.google.com/search?q=perl2exe&hl=ja&safe=off&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
- 73 名前:>70 投稿日:2001/01/25(木) 09:32
- perl -wc test.pl で文法チェックすると
Name "main::key" used only once: possible typo at test.pl line 16.
Name "main::in" used only once: possible typo at test.pl line 9.
Name "main::val" used only once: possible typo at test.pl line 16.
test.pl syntax OK
って表示されるよ〜
俺も初心者だから理解できないけど、syntax OKだからいいのかい?
>詳しい人
print "$idさんの学生番号は$val{$key{$id}}です";
↑
こういう使い方でいいの?
- 74 名前:名無しさん 投稿日:2001/01/25(木) 10:43
- >73
print "$idさんの学生番号は$DAT{'$id'}です";
だと思う
- 75 名前:名無しさん 投稿日:2001/01/25(木) 13:01
- デコードもしてないし修正点ありすぎやん
- 76 名前:_gunzip 投稿日:2001/01/25(木) 16:07
- >>70
>一応表示されるのですが何かおかしいでしょうか?
「一応表示される」とは、どのように?
ちゃんと「モナーさんの学生番号は0000です」のように表示されますか?
- 77 名前:名無しさん 投稿日:2001/01/25(木) 17:05
- jcode.pl でJISにコンバートすると株式会社
という文字が文字化けしてしまうのですが何故ですか?
jcode.pl は 2.13 です。
- 78 名前:名無しさん 投稿日:2001/01/25(木) 17:40
- 他の文字をsjisかeucで出力してる,に一票〜
状況知らないから適当だけどな
- 79 名前:77 投稿日:2001/01/25(木) 18:41
- 訂正です。
cgi 自体は euc 、フォームからデータを受け取って
まとめて &jcode'convert( $**, "jis") でコンバート。
他でコンバートは行っていません。
としているのですが、なぜか株式会社の式と社だけが文字化け
してしまいます。他の文字は大丈夫です。
- 80 名前:名無しさん 投稿日:2001/01/25(木) 18:59
- >>76
はい。そのように表示されます
だたperl -wcで理解不能なコメントが表示されるし
デコードや配列の使い方がわかりません
- 81 名前:名無しさん 投稿日:2001/01/25(木) 19:09
- どうしてもReferrerが取れません。
症状としては、http://www.domain.com/test.htmlに
透明GIFなどで、CGIを呼び出してReferrerを取ると
http://www.domain.com/と記録されるのです。
なんででしょうか??
「オレは取れてる!」と言う人がいたら、
やりかたを教えて下さい。
お願いします。
- 82 名前:サゲ茶漬け 投稿日:2001/01/25(木) 20:33
- >>81
ここかどこかにソースを載せましょう。
- 83 名前:名無しさん 投稿日:2001/01/25(木) 21:14
- >>82
# リファの取得
$referrer = $ENV{"HTTP_REFERER"};
# 書きこみデータを変数に入れる
$da[0]="$referrer\n";
# データをログファイルに書きこむ
$logfile = "ref.txt";
$i=1; open(IN,"$logfile"); while(<IN>){$da[$i++]=$_;} close(IN);
$j=0;
open(OUT,">$logfile");
# 10000件まで記録できる
while($j < $i){print OUT $da[$j++]; if ($j==10000){last;}}
close(OUT);
ソースはこれです。
全く取れないで空の場合もあります。
全く別の方法で取るって事も出来るんでしょうか??
もし、あれば教えて下さい。
お願いします。
- 84 名前:EPSOM 投稿日:2001/01/25(木) 22:06
- >>81
これでいけると思いますが
JavaScriptを使って
<script language="JavaScript">
&lt;!--
document.write("<img src=***.cgi?refe=" +document.referrer + ">");
// --&gt;
</script>
$referrer = $FORM{'refe'};
>>82 ソースを載せるほどのことかぁ?
- 85 名前:EPSOM 投稿日:2001/01/25(木) 22:13
- ところでCGIのネタを思いついたので彼女のパソコンを借りた所、
「いって」を打った時、始めの変換で「逝って」となった。
ん?と思い、「うつ」を変換するといきなり「鬱」となった。
ええ!?まさか、うそだろ!?と思い「はぁ」を変換した。
すると「(゚Д゚)ハァ?」となった・・・。
- 86 名前:名無しさん 投稿日:2001/01/25(木) 22:32
- 掲示板で、レスのマーク(>)をつけた行の文字色が
変わるようにしたいのですが、いかがいたしたらよろしいですか。
ちなみにstlfbbsです。
- 87 名前:サゲ茶漬け 投稿日:2001/01/25(木) 22:55
- >どうしてもReferrerが取れません。
>症状としては、http://www.domain.com/test.htmlに
>透明GIFなどで、CGIを呼び出してReferrerを取ると
>http://www.domain.com/と記録されるのです。
ソース見ましたけど、refererが中途半端になる原因はわからないですねぇ。
取得&ログには問題なさそうなので。
- 88 名前:サゲ茶漬け 投稿日:2001/01/25(木) 22:57
- >>84 EPSOMさん
え、原因わかったのですか?
- 89 名前:_gunzip@鬱 投稿日:2001/01/25(木) 23:04
- >>80
>73 のエラーメッセージは、
「変数名(mainパッケージの)keyは一回しか使われてないぞ。タイプミスとちゃうか?」
ということです。
エラーメッセージが出たら、取りあえず辞書でも引くか、ラクダ本の第九章「診断メッセージ」
で探す、又は以下のようなサイトを検索して調べる、といったことをする方が早いかと。
http://wakusei.cplaza.ne.jp/twn/wwwcgi7.htm
http://www.harukaze.net/~mishima/perl/cgi-debug-env/deb-tech.html
>デコードや配列の使い方がわかりません
デコードはcgi-libのReadParse()がやってくれます。
その他、「配列の使い方」などについては、やはり参考書を読むのが
一番早く、効果的だと思います。
【Perl,CGI】参考書籍
http://tako.2ch.net/test/read.cgi?bbs=perl&key=970166109
それと、スクリプトですが、
>&ReadParse;
は、&ReadParse(*in);の方がいいです。(どっちでもかまいませんが)
>print "$idさんの学生番号は$val{$key{$id}}です";
は、
print "$idさんの学生番号は$DAT{$id}です";
ではないのですか?
(というより、こうでないと動きませんでしたよ)
- 90 名前:_gunzip@鬱鬱 投稿日:2001/01/25(木) 23:10
- それと
&jcode'convert(*id,"sjis");
ですが、Perl5ではパッケージデリミタは::(コロン x 2)の方を使う方が
推奨されている(たぶん)ので、
&jcode::convert(*id,"sjis");
こちらの方がよろしいかと。
- 91 名前:名無しさん 投稿日:2001/01/25(木) 23:12
- >>90
>&jcode::convert(*id,"sjis");
&jcode::convert(\$id,"sjis");
リファレンスの方が概して速いです。
- 92 名前:_gunzip 投稿日:2001/01/25(木) 23:15
- >>91
有り難う。
ちょうど下を見て「あー」とか思ったら......
http://www.mikeneko.ne.jp/~lab/kcode/jcode.html
- 93 名前:名無しさん 投稿日:2001/01/25(木) 23:22
- すみません。Perl初心者なのですが、自分のサイトの
ディレクトリの階層をエクスプローラのようなツリー形式で出力するCGIを
書きたいのですが、どのようにすればいいでしょうか
File::Findを使うといいと友人に教えてもらったのですが、そこから先に進みません
どなたか教えてください。
- 94 名前:_gunzip@病院 投稿日:2001/01/25(木) 23:31
- >>93
MSのサイトのようなDHTMLを駆使したやつのこと?
それともtreeコマンドの出力ようなもの?
- 95 名前:名無しさん 投稿日:2001/01/25(木) 23:40
- >>94
テキストで簡単に階層をあらわすようなものです
簡単でいいので教えてください
ところでtreeコマンドってなんでしょうか?PERLのマニュアルにはありませんでした
- 96 名前:_gunzip@もう寝ます 投稿日:2001/01/25(木) 23:47
- >>94
かなり前に作ったやつ。見つかったからはっ付けるよ
いい加減な作りだから、自分で適当に改造して。
ローカルテストしかしてないから、後はしらんよ
#!/usr/bin/perl -w
$dir = shift || die "usage: perl walkdown.pl dirname";
print "$dir\n";
&walkdown($dir,"");
sub walkdown{
my($dir,$header) = @_;
my(@dir);
#local(*DIR);
opendir(DIR,$dir) or die "Can't open $dir!";
foreach(readdir(DIR)){
next if $_ eq '.' or $_ eq '..';
push(@dir,$_) if -d "$dir/$_";
}
closedir(DIR);
while($_ = shift @dir){
if(@dir){#最後かどうか
print $header , "├─$_\n";
&walkdown("$dir/$_",$header . "│ ");
}else{
print $header , "└─$_\n";
&walkdown("$dir/$_",$header . " ");
}
}
}
- 97 名前:_gunzip@もう寝ます 投稿日:2001/01/25(木) 23:49
- あーあ ずれた もう知らん
それと、>>94じゃなくて>>95
寝る
- 98 名前:名無しさん 投稿日:2001/01/25(木) 23:50
- treeというのは昔MS-DOSに・・・
と思ってDOS窓でやってみたらコマンドまたはファイル名が・・
って言われてしまった。
気のせいだったかな。DOSのコマンドに有ったと思ったが・・鬱だ
- 99 名前:名無しさん 投稿日:2001/01/26(金) 00:58
- >>96
95じゃないけど・・・凄い、これ。
再帰関数のサンプルみたいなもんだなあ。
- 100 名前:電動ナナシ 投稿日:2001/01/26(金) 05:21
- >>98
tree/deltree あったよ。DOS5/6 じゃないとついてないはず。
Windows95 から廃止。
- 101 名前:_gunzip 投稿日:2001/01/26(金) 09:19
- 半角スペースがdじゃった
>&walkdown("$dir/$_",$header . "│ ");
の"| "は"|" + 半角スペース x 2
&walkdown("$dir/$_",$header . " ");
の" "は半角スペース x 4
ちなみに出力例
~/java/src/javax/
├─accessibility
├─naming
│ ├─directory
│ ├─event
│ ├─ldap
│ └─spi
└─swing
├─border
├─colorchooser
├─event
├─filechooser
├─plaf
│ ├─basic
│ ├─metal
│ └─multi
├─table
├─text
│ ├─html
│ │ └─parser
│ └─rtf
├─tree
└─undo
- 102 名前:81=83 投稿日:2001/01/26(金) 10:57
- >>84
ありがとうございます!
出来ました!!
ついでと言っては何ですが、
JavaScriptを使わない方法もあるんでしょうか??
もしあるなら、教えて下さい!
お願いします。
- 103 名前:70(Perl4日目) 投稿日:2001/01/26(金) 14:22
- ありがとう!
無事に解決しました
----------------------------------------
#!/usr/local/bin/perl
$DBM= "ID_CODE";#データファイル
require "cgi-lib.pl";
require "jcode.pl";
&ReadParse(*in);
$id = $in{"id"};#フォームから送信された検索ID
&jcode::convert(\$id,"sjis");
use DB_File;
tie %DAT,DB_File,$DBM;
print "Content-type: text/html\n\n";
print "<HTML>\n<HEAD>\n</HEAD>\n<BODY>\n";
print "$idさんの学生番号は$DAT{$id}です";
print "</BODY>\n</HTML>\n";
untie %DAT;
----------------------------------------
- 104 名前:95じゃないが 投稿日:2001/01/26(金) 15:05
- >>101
Perlでクリップボードを操作するにはどうすればいいの?
こういったのを自動的にクリップボードに張り付けられると
便利なんだけどさ
右クリックから「ディレクトリツリーをテキストでクリップボードに出力」
っていうふうにできない?
- 105 名前:名無しさん 投稿日:2001/01/26(金) 15:37
- 質問です。
サーバの容量が10Mという場合、10Mを少しでもすぎたら送れないのですか?
また送れる場合、どの程度までのオーバーが許されるのですか?
- 106 名前:_gunzip 投稿日:2001/01/26(金) 15:54
- >>104
下のように改造すればいいと思う。(たぶんずれるから、修正してから使ってくれ)
>Perlでクリップボードを操作するにはどうすればいいの?
Win32::Clipboard モジュールを使えばいいと思うよ。
#!/usr/bin/perl -w
use Win32::Clipboard;
$clip = Win32::Clipboard() or die "もうしらん"; #クリップボードオブジェクトの取得
$dir = shift || die "usage: perl walkdown.pl dirname";
$output = ""; #global
$output .= "$dir\n";
&walkdown($dir,"");
$clip->Set($output); #出力をセット
sub walkdown{
my($dir,$header) = @_;
my(@dir);
#local(*DIR);
opendir(DIR,$dir) or die "Can't open $dir!";
foreach(readdir(DIR)){
next if $_ eq '.' or $_ eq '..';
push(@dir,$_) if -d "$dir/$_";
}
closedir(DIR);
while($_ = shift @dir){
if(@dir){#最後かどうか
$output = join("",$output , $header , "├─$_\n");
&walkdown("$dir/$_",$header . "│ ");
}else{
$output = join("",$output , $header , "└─$_\n");
&walkdown("$dir/$_",$header . " ");
}
}
}
- 107 名前:_gunzip 投稿日:2001/01/26(金) 16:07
- 右クリックへの追加方法はよく分からないよ.......
たぶん、下のやり方でいいと思う。(うちのWindows98の場合)
レジストリエディタで
HKEY_CLASSES_ROOT\Directory\shell\
以下に好きな名前(仮に"tree"とする)のキーを作って、
その「デフォルト値」にラベル名を(仮に"dtree"とする)設定、
次に
HKEY_CLASSES_ROOT\Directory\shell\tree(上の場合)
に今度はcommandというキーを作り、その「デフォルト値」に以下のように記述する
(Perlのパス) (スクリプトのパス) %1
例(うちの場合)
C:\Perl\bin\perl.exe D:\usr\my_commands\walkdown.pl %1
これでいいと思う。(すくなくともこれでうちの窓では動作した)
もし間違った点とかあったら教えてほしいなあ。>>104
(レジストリをいじって、どうなっても*絶対*責任はとれないが.....
まあ、道義的責任は感じるが、だからどう、というものでもないしな。)
- 108 名前:_gunzip@鬱 投稿日:2001/01/26(金) 16:17
- #こりゃ、Vector辺りにあるものでも使った方がいいと思う。
DOS窓が出て、なんかいやだあ...
しかも遅いし
#うーん。あんまりお役に立てないみたい>>104
- 109 名前:名無しさん 投稿日:2001/01/26(金) 19:49
- バイナリファイルをPerlから扱うにはどうすればいいのですか
- 110 名前:電動ナナシ 投稿日:2001/01/26(金) 19:53
- ツリーを textarea 内に書き出して、全選択 (Ctrl+A) で右クリック - コピーじゃダメ?
全部 Perl で自動化する必然性が良く分からない・・・。
- 111 名前:104 投稿日:2001/01/26(金) 20:22
- >>106-108
ありがとうございます。
ちゃんと動きました。(Win95)
>>110
んー確かに。そちらの方が楽みたいです。
いろいろどうもすみませんでした
- 112 名前:_gunzip@病院 投稿日:2001/01/26(金) 22:37
- >>109
どういった処理がやりたいのでしょうか?
- 113 名前:名無しさん 投稿日:2001/01/27(土) 07:17
- 掲示板をつくってるのですが
そのままノーマルに拡張子cgiよりHTMLファイルに出力する方が
軽いのでしょうか?
- 114 名前:109 投稿日:2001/01/27(土) 09:16
- バイナリファイルのサイズを取得する際、ちゃんとbinmodeにしなくてはいけないのですか?
- 115 名前:JAPU(AyuMoe) 投稿日:2001/01/27(土) 10:03
- >>113 yes (CGIの起動や実行にはコストがかかります。)
>>114 no (モードに関わらず、-s or stat で問題なく取得可能です。)
- 116 名前:109 投稿日:2001/01/27(土) 13:31
- >>115
ありがとうございます。
(しかし、試せばすぐ分かることでした.... すみません)
- 117 名前:名無しさん 投稿日:2001/01/27(土) 14:16
- 皆さんPerlをどのように活用しているのでしょう?
掲示板とかゲストブックとかCGI用途以外で......
#昔スレがあったような気がするのですが.....あげるのも何なので。
- 118 名前:今夜は酢豚 投稿日:2001/01/27(土) 14:40
- 未ソートで重複レコードを含むデータファイル(before.txt)を
を重複レコードを削除してソートする方法を教えてください
--------------------
ccccc@mona.com
aaaaa@hige.com
bbbbb@hage.com
aaaaa@hige.com
--------------------
↓↓↓↓↓↓↓↓↓↓↓
--------------------
aaaaa@hige.com
bbbbb@hage.com
ccccc@mona.com
--------------------
#!/usr/local/bin/perl
print sort { $a <=> $b } <>;
↑これじゃだめみたいです
- 119 名前:_gunzip 投稿日:2001/01/27(土) 14:50
- >>118
#!/usr/bin/perl
my %seen = ();
print @array = sort grep(!$seen{$_}++,<>);
# chomp
- 120 名前:偽名無しさん 投稿日:2001/01/27(土) 14:50
- cat hoge.txt|sort|uniq >muha.txt
- 121 名前:名無しさん 投稿日:2001/01/27(土) 14:52
- >> 118
この例を見る限りSPAMの前準備にしか思えないんだが・・・・。
- 122 名前:JAPU(AyuMoe) 投稿日:2001/01/27(土) 15:02
- お好きなのをどうぞ。
#! /usr/bin/perl -w
@kanon = qw[Ayu Nayuki Ayu Makoto Shiori Ayu Mai
Mai Sayuri Akiko Sayuri Mishio];
sub uniq(&@)
{
my $fref = shift;
my %X;
sort grep { not $X{$fref->()}++ } @_;
}
# さくせんその1
undef %X;
@uniq = sort grep { not $X{$_}++ } @kanon;
print "@kanon\n => @uniq\n";
# さくせんその2
@uniq = sort keys %{ { map { ($_ => "moe") } @kanon } };
print "@kanon\n => @uniq\n";
# さくせんその3
@uniq = uniq { $_ } @kanon;
print "@kanon\n => @uniq\n";
__END__
- 123 名前:今夜は酢豚(=118) 投稿日:2001/01/27(土) 15:24
- >>119と>>120さんありがとうございます
無事にソートしてくれました
>>121
考えすぎですよ〜
同人誌の会員リストを作成してただけです
- 124 名前:塩 投稿日:2001/01/27(土) 15:49
- >>123
本当に動いた?
つーか俺だけ変態なのかな
#!/usr/bin/perl
#データファイル指定
$datafile = "mail.txt";
#読み込み
open(IN,"$datafile");
@lines = <IN>;
close(IN);
#ソートしてから重複データを削除する
my %count;
@lines = sort { $a cmp $b } grep ( !$count{$_}++, @lines );
#書き込み
open(OUT,">$datafile");
print OUT @lines;
close(OUT);
- 125 名前:名無しさん 投稿日:2001/01/27(土) 16:41
- あの、教えて欲しいんですけども、
例えば118さんの書いた様なファイルがあって、
それに一行ずつ書き足していくCGIがあったとします。
何かが原因でそのファイルのある部分(1行)だけ抜け落ちる、
って事は起こり得るんでしょうか?
- 126 名前:名無しさん 投稿日:2001/01/27(土) 17:13
- はい。起こり得ます
- 127 名前: