Site hosted by Angelfire.com: Build your free website today!
■過去ログ倉庫めにゅーに戻る■

【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 名前:名無しさん 投稿日:2001/01/27(土) 17:22
>125
起こり得ます。
が、その"何か"っていうのはプログラム上の問題点(バグ)
だと思われます。

128 名前:サゲ茶漬け 投稿日:2001/01/27(土) 18:01
>>125
起こり得ないように出来るかもしれない。

きっちりプログラムを書けば、
(マシンが逝かない限り)
データ追記(書き足し)ではミスらないでしょう☆

129 名前:名無しさん 投稿日:2001/01/27(土) 18:01
>>123
> 考えすぎですよ〜
> 同人誌の会員リストを作成してただけです
ワラタ

130 名前:Perl初心者 投稿日:2001/01/27(土) 23:24
Perl初心者なのですが現在板を作っています。
bord.cgiからHTMLファイルに出力させたいのです。
出力までは普通に出来ました。
unshiftを使って処理させたいのですがうまく動きません。
どなたかご教授お願いします。

#!/usr/local/bin/perl

$homonsya = $ENV{'QUERY_STRING'};

@group = split(/&/, $homonsya);
foreach $ans (@group)
{($name, $value) = split(/=/, $ans);
$value =~ tr/+/ /;
$value =~ s/%(..)/pack("c", hex($1))/ge;
$ok_homonsya{$name} = $value;}

$name = $ok_homonsya{'myName'};
$mail = $ok_homonsya{'email'};
$Honbun = $ok_homonsya{'honbun'};

open(FILE,"bord.html");
@allbody=<FILE>;
close(FILE);
$full="名前:$name e-mail:$mail<br>本文:$Honbun\n<hr>";
unshift (@allbody,$full);
open (FILE,">bord.html");
print FILE @allbody;
close (FILE);
print "Location:
http://wawawa.e-chome.net/cgi/bord.html\n\n";

131 名前:名無しさん 投稿日:2001/01/27(土) 23:30
http://wawawa.e-chome.net/cgi/bord.html

132 名前:_gunzip@おやすみ 投稿日:2001/01/27(土) 23:44
>unshiftを使って処理させたいのですがうまく動きません
ちょっと意味が...分からないのですが、
ローカルでは、どんなエラーメッセージが出ていますか?

unshiftを使わなくても、書き出すときに
print FILE @allbody , $full;
とすればうまくいくような気がします。

#....大きく.はずしている気が。

133 名前:130 投稿日:2001/01/27(土) 23:51
>>132

すいません。わかりずらい説明で。
えーっと新しい投稿ほど上に来るようにしたいのです。
unshiftで出来るみたいだったので...
ローカルでは実験してないのです。

134 名前:名無しさん 投稿日:2001/01/28(日) 00:04
>>130
> $full="名前:$name e-mail:$mail<br>本文:$Honbun\n<hr>";

ここがぁゃιぃ。

135 名前:_gunzip 投稿日:2001/01/28(日) 13:20
>>133
>unshift (@allbody,$full);
このようにすると、こんな事になりませんか?
-----(元)
<HTML><HEAD>(省略)</HEAD><BODY>
名前:name1 e-mail:mail1<br>本文:Honbun1\n<hr>
名前:name2 e-mail:mail2<br>本文:Honbun2\n<hr>
</BODY></HTML>
-----
”名前:name3 e-mail:mail3<br>本文:Honbun3\n<hr>”を追加すると、
-----(後)
名前:name3 e-mail:mail3<br>本文:Honbun3\n<hr>
<HTML><HEAD>(省略)</HEAD><BODY>
名前:name1 e-mail:mail1<br>本文:Honbun1\n<hr>
名前:name2 e-mail:mail2<br>本文:Honbun2\n<hr>
</BODY></HTML>
-----
ですから、「名前」と「メールアドレス」と「本文」を格納した
データファイルでも作っておいて、"<HTML><HEAD></HEAD><BODY>"に続けて、
まず新しく投稿されたデータを書き出し、その後にファイルから読み込んで
書くのが簡単だ思いますが。



136 名前:名無しさん 投稿日:2001/01/28(日) 13:58
漠然とした話で申し訳ないがDB_Fileのメリットを教えてください
同じデータを格納しても他のDBMよりデータファイルが大きいですよね


137 名前:>136 投稿日:2001/01/28(日) 14:01
これ読んで好きなDBMを採用してください
http://www.perldoc.com/perl5.6/lib/AnyDBM_File.html#DBM%20Comparisons

138 名前:_gunzip 投稿日:2001/01/28(日) 14:10
>>136
他のものに比べて早いらしいね。
http://www.sleepycat.com/
ソースも付いてるから、読んでみよう


139 名前:136 投稿日:2001/01/28(日) 16:09
>>137-138
ファイルサイズは大きいけど検索するスピードは速いみたいですね
ありがとう

140 名前:名無しさんの野望++ 投稿日:2001/01/29(月) 05:36
open関数で
open(IN,"DIR |") or die "";
としたとき、エラー出力を得たいのですがどうすればいいかわかりません
厨房な質問でスマソですが、誰か答えてください。


141 名前:_gunzip@ホットスパー艦長 投稿日:2001/01/29(月) 06:02
>>140
open(IN,"any_command 2>&1 |") or die "";
これでは駄目ですか?
(窓では駄目だったかな)

IPC::Open3で
use IPC::Open3;
my $pid = open3(\*WTRFH, \*RDRFH, \*ERRFH,'ls -la') or die "アヒャ";
としてERRFHから読めばいいような気が

#んー朝で頭ぼけてるからこんなとこ


142 名前:ぷっか 投稿日:2001/01/29(月) 09:53
ええと、質問なのでぷが、CGI掲示板ってありまぷよね、
それのCGI出力の物(bbs.cgi)とHTML出力の物(bbs.html)は、
どう違うんでぷか?2ちゃんもHTMLなのかな?教えてくらぷい。

143 名前:名無しさん 投稿日:2001/01/29(月) 13:02
>>142
HTML出力ならば、表示する時にCGIを使わない為
CGIによるサーバへの負荷が激減します。

144 名前:名無しさん 投稿日:2001/01/29(月) 13:06
perlスクリプトを1日1回とか定期的に動作させたいんですけど
いい方法ありませんか?
普通サーバの方で細工するのかも知れないけど
よく分からないし・・。


145 名前:名無しさん 投稿日:2001/01/29(月) 13:19
print "$obj->Test";
でオブジェクトを変数展開したいんですけど
->Testがテキストになっちゃいます。
どうしたらよいのですか?

146 名前:名無しさん 投稿日:2001/01/29(月) 13:34
$ENV{'REMOTE_HOST'}として、IPアドレスを取得したいのですが、何故かできません。
私のテスト環境は、Linuxをサーバーとして使用し、Windows2000をクライアントとして、
ローカルネットワークでテストしています。
IPアドレスはグローバルIPじゃないと取得できないのでしょうか?
ご教授、よろしくお願いします。

147 名前:名無しさん 投稿日:2001/01/29(月) 13:53
>>144
分からん・・。俺もコレ教えてほしぃ。

>>145
print $obj->Test;
じゃ駄目なの?
勘違いしてたらゴメン。

>>146
$ENV{'REMOTE_HOST'}
ローカルでもローカルIPを取得できます。
なにか間違えているのでしょう。

148 名前:146 投稿日:2001/01/29(月) 14:04
>>147さん
レスありがとうございます。解決いたしました。
$ENV{'REMOTE_ADDR'}としたら、IPアドレスを取得できました。
その他のコードは、やはり間違っていません。
この二つを使い分けないといけないのでしょうか?
使い分けるポイントとは、一体どこなんでしょうか?

149 名前:名無しさん 投稿日:2001/01/29(月) 14:06
>>148
$host=$ENV{'REMOTE_HOST'} || $ENV{'REMOTE_ADDR'};
こんな感じ。

150 名前:偽名無しさん 投稿日:2001/01/29(月) 14:57
>>144 普通はcronしかないね。

>>146 最近は重くなるので逆引きを行わないサーバが多い。
そのためREMOTE_HOSTには何も入らない。

151 名前:偽名無しさん 投稿日:2001/01/29(月) 15:01
ちょっと考えたけど
while(1){
 unless(fork){
  処理
  exit;
 }
 sleep $n;
}
みたいにしたらできないかな?

152 名前:名無しさん 投稿日:2001/01/29(月) 15:07
cronってのをもう少し詳しく教えてください。
もしくは、詳しい解説のあるページとかありませんでしょうか?

153 名前:名無しさん 投稿日:2001/01/29(月) 15:15
perlスクリプトから別のperlスクリプトを実行するには
どうしたらよいのでしょう??

154 名前:名無しさん 投稿日:2001/01/29(月) 15:26
>>153
system '/usr/bin/perl','aaa.cgi';

155 名前:146 投稿日:2001/01/29(月) 17:07
>>150さん
なるほど、そうだったのですね。私が持っている本が古いのでしょうかね?
でも、理由が分かって安心しました。今度からはIPアドレスを取得する時は
REMOTE_ADDRを使用します。

みなさん、ありがとうございました。

156 名前:145 投稿日:2001/01/29(月) 17:49
>>147さん
print "$a->{key}\n";とか、ハッシュへの指定だと
ちゃんと展開されるんですけど
メソッドに対しては展開されないのでしょうか。

157 名前:名無しさん 投稿日:2001/01/29(月) 18:53
print "@{[$moe->method()]}\n";

158 名前:名無しさん 投稿日:2001/01/29(月) 21:42
>>153
do "hogehoge.cgi"

159 名前:名無しさん 投稿日:2001/01/29(月) 22:03
米のサーバーに設置するときの時間設定は
(,$min,$hour,$day,$mon,$year,$wday) = localtime(time);

(,$min,$hour,$day,$mon,$year,$wday) = localtime(time + 9*60);
と変えればいいんでしょうか?

160 名前:サゲ茶漬け 投稿日:2001/01/29(月) 22:05
$ENV{'TZ'} = 'JST-9';
とかすればいいんじゃないかな?
↑は思いつきで書いたから正しいかは不明。

161 名前:名無しさん 投稿日:2001/01/29(月) 22:31
>>157
できました!ありがとうございます!

162 名前:名無しさん。 投稿日:2001/01/29(月) 23:06
ファイルの中身をソートしたいのですが、どうしても巧く行きません。

$file = 'file.txt'; #ソートするファイル名
$sortfile = "sort -t '<>' -k4 -k5 -k6 $file>sortfile"; #<>:デリミタ k4〜k6:ソートするキー番号
$sf = system $sortfile;
$sortfile = "cat sortfile>$file";
$sf = system $sortfile;

一応、このプログラムで、
100<>200<>300<>40<>50<>300<>40<>50
110<>240<>350<>80<>50<>400<>40<>50
110<>260<>300<>40<>50<>100<>40<>50
こういったデータのソートはできます。

しかし、サーバによって何故か動きません。
たぶん、systemでコマンドがキックできないせいだと
思いますが。

ということで、perlだけでソートを行う方法をどなたご教授頂けませんか。
どうかよろしくお願いします。

163 名前:_gunzip@寝る 投稿日:2001/01/29(月) 23:34
>>162
sort -k4,6だから、
@array =
map {$_->[0]}
sort {$a->[4] <=> $b->[4] or $a->[5] <=> $b->[5] or $a->[6] <=> $b->[6]}
map {[$_, split /<>/]} <>;

print join("\n",@array);

-------
参考
http://www.effectiveperl.com/ (Eng)
http://www.din.or.jp/~ohzaki/perl.htm#SortMulti (日本語)

164 名前:_gunzip@寝る 投稿日:2001/01/29(月) 23:37
訂正
>sort -k4,6だから
sort -k4,5,6だから

165 名前:ぷっか 投稿日:2001/01/29(月) 23:42
>>143 ありがぷう

166 名前:名無しさん 投稿日:2001/01/30(火) 03:02
>>159
世界中どこの鯖でも
gmtime(time+9*3600)
で日本時間は手に入る

167 名前:名無しさん 投稿日:2001/01/30(火) 10:02
$ENV{'TZ'} = 'JST-9'; って環境変数をいじるのは
やめた方がいいって聞いたんだけど??

168 名前:名無しさん 投稿日:2001/01/30(火) 10:28
やめた方がいい理由と情報ソースを書いてくれ

169 名前:サゲ茶漬け 投稿日:2001/01/30(火) 10:33
>>167
あれ、そうなの?
是非情報源を教えて下さい☆

170 名前:サゲ茶漬け 投稿日:2001/01/30(火) 10:40
さっき、ハック板とプログラム板みたけど、程度が低すぎるね(藁
このCGIレンサバ板の方がよっぽどマシだわ・・・。

まぁ、このスレには関係ないけど。

171 名前:名無しさん 投稿日:2001/01/30(火) 10:43
>>169
http://www2.kiwi-us.com/~j_n/perl/#localtime

ん〜何が良くないのかよく分からんけど
環境変数変えると、その後も変わったままなのでは?
だとしたら、同じサーバの人に迷惑が掛かる可能性が・・。
俺の勘違い??

172 名前:162 投稿日:2001/01/30(火) 11:02
>>163-164
動きました!
参考urlも大変勉強になりました。
今後とも精進させていただきます。
ありがとうございました!!

173 名前:名無しさん 投稿日:2001/01/30(火) 11:20
>>170
医療関係者と学生が荒らしてるんだよ(涙

174 名前:名無しさん 投稿日:2001/01/30(火) 11:27
スカラー値に上書きせずに徐々にスカラーの長さを伸ばす方法ってありますか?
たとえば$a="ありがとう";っていれて次に$a="さようなら";って入れると結果的に
$aは"さようなら"になるじゃないですか?それを"ありがとうさようなら"ってまた何か入ってきたら
さようならの後ろにと徐々に伸ばしていく方法がありましたら教えてください

初心物で質問のしかたが下手なのですみません。

175 名前:サゲ茶漬け 投稿日:2001/01/30(火) 11:38
>>174
$a = "ありがとう";
$a .= "さようなら";
こんなんでどうかな?

176 名前:サゲ茶漬け 投稿日:2001/01/30(火) 11:40
>>171
ありがとう。
理由が「後に影響を残さないように」って書いてありますね・・・。
影響が残ったらまずいことでもあるのかなぁ☆

>>173
医療関係者と学生・・・ウゼェ

177 名前:unko 投稿日:2001/01/30(火) 11:51
環境変数変えてそのままになるわけねーよ。
UNIX鯖でスクリプト動かすならUNIXの基礎知識くらいおぼえとけ!

178 名前:名無しさん 投稿日:2001/01/30(火) 11:55
初心者コーナーで威張るな(ウケケ

179 名前:名無しさん 投稿日:2001/01/30(火) 11:57
>>176
学生はわからんでもないが、医療関係者って思いつかん(見つからん)な。
どんな奴?

180 名前:名無しさん 投稿日:2001/01/30(火) 11:57
>>176
どんな影響を残したくないのか不明だが
同じサーバ利用者の時刻表示まで変わることはないですよ

せいぜいチャットやBBSで表示する時刻を日本時間にする程度です

181 名前:サゲ茶漬け 投稿日:2001/01/30(火) 12:20
>>179
俺に聞かないで。>>173に聞いて。

182 名前:サゲ茶漬け 投稿日:2001/01/30(火) 12:21
>>177
それぐらいのことはみんな当然として知っているでしょ?
例のページの真相を探ろうって話で☆

183 名前:サゲ茶漬け 投稿日:2001/01/30(火) 12:22
>>178
俺のこと?いや違うな・・・。
俺は威張れるほどのこと書いてないし(藁

184 名前:173 投稿日:2001/01/30(火) 12:27
>>179
純情恋愛板のコテハン「薬剤師」。最近は鳴りを潜めたけど…
プログラマ板になんでこんなスレを立てたんだ?
おまけに個人は特定されたらしい。去ね!
http://mentai.2ch.net/test/read.cgi?bbs=prog&key=980095465

185 名前:173 投稿日:2001/01/30(火) 12:30
間違いっす。すいません
個人は→個人名は

186 名前:名無しさん 投稿日:2001/01/30(火) 12:36
UNIXの基礎知識・・・
ココperl初心者のスレだって。。ワラ

187 名前:179 投稿日:2001/01/30(火) 12:52
にゃるほどね。 ども。 >>184

188 名前:名無しさん 投稿日:2001/01/30(火) 13:03
>サゲ茶漬けさん
あぅ〜(T-T)できました。。簡単に・・・・ありがとうございます。
脳みそ不足でした。

189 名前:Oo。(^。^)y-゜ 投稿日:2001/01/30(火) 13:07
Oo。(^。^)y-゜ またーり いきましょうや。みなさん

190 名前:名無しさん 投稿日:2001/01/31(水) 15:21
Cookieがわからなくて困ってます。
index.cgiで$testと$test2という変数をCookieに指定して、
print "Set-Cookie: NAME=$test; NAME2=$test2; \n";

next.cgiで
# cookie取り出し
foreach (split(/; /,$ENV{'HTTP-COOKIE'})){
    ($key,$value)=split(/=/);
    $cookieJar{$key}=$value;
}
$cookieJar{'NAME'}=$test;
$cookieJar{'NAME2'}=$test2;

# htmlで表示
print "Content-type: text/html\n\n";
print <<EOF;
<HTML><HEAD><TITLE>Cookieテスト</TITLE><BODY>
$test<br>
$test2<br>
EOF

と書いたのですが、$test、$test2の変数が画面に出ません。
Cookie取り出しの部分が間違ってるのでしょうか?

191 名前:名無しさん 投稿日:2001/01/31(水) 15:27
$test = $cookieJar{'NAME'};
$test2 = $cookieJar{'NAME2'};

ちゃんと</HTML>まで書いても駄目ですか?

192 名前:名無しさん 投稿日:2001/01/31(水) 15:45
>>191
ありがとうございます。最後、</BODY></HTML>付け忘れてました。
直してやってみたんですがやっぱり変数が表示されません。

193 名前:サゲ茶漬け 投稿日:2001/01/31(水) 16:59
print $ENV{'HTTP_COOKIE'};
とすると何が表示されますか?

194 名前:名無しさん 投稿日:2001/01/31(水) 17:05
サゲ茶漬けさん、ありがとうございます。↓のように
記入してみたんですが、何も表示されません。Cookieの取得が
間違ってるんでしょうか?テストはAnhttpdで行ってます。

print <<EOF;
<HTML><HEAD><TITLE>Cookieテスト</TITLE><BODY>
$ENV{'HTTP_COOKIE'}; <br>
</BODY>
</HTML>
EOF
exit;



195 名前:194 投稿日:2001/01/31(水) 17:14
print "Set-Cookie: NANE=VALUE; 以下省略 ";

ちゃんと宣言してますか?


196 名前:195 投稿日:2001/01/31(水) 17:15
ごめん
>>194宛です

197 名前:名無しさん 投稿日:2001/01/31(水) 18:57
>>194
何も表示されないなら、取得以前に
クッキーがセットできてないんだよ。

198 名前:名無しさん 投稿日:2001/01/31(水) 19:11
米塩入れねー。
どのくらいでもとに戻るの?

199 名前:サゲ茶漬け 投稿日:2001/01/31(水) 23:20
>>194
「AnHTTPDはHTTP_COOKIEをセットしてくれる」という前提で書きますが、
>>197の人の言うようにクッキーをセットできていないだけだと思います。

expires=を指定しない場合の挙動がどうなるかを知っている人、フォローして下さい。

200 名前:7c 投稿日:2001/02/01(木) 00:01
expiresを指定しないと、ブラウザ終了時(窓閉じたときかも?)に
クッキーは破棄されます。

201 名前:名無しさん 投稿日:2001/02/01(木) 01:10
少し抽象的になるんですが、Perlってどんな処理をしたときにサーバーに負担かけるんですか?
なるべく軽いCGI作ろうと思ってるので、(負担をかける、かけないという意味で)Perlが得意な処理、苦手な処理の例を教えてください。

202 名前:名無しさん 投稿日:2001/02/01(木) 01:23
Perlに限らないけどファイルアクセスはなるべく減らしたほうがいい。

203 名前:サゲ茶漬け 投稿日:2001/02/01(木) 01:46
>>200 ありがとう

>>194
Expiresを試しに指定して、やり直してみましょう。
何か変化あるかもしれませんよ。

204 名前:名無しさん 投稿日:2001/02/01(木) 10:51
つまり別に保存したCSVファイルを参照するより
Perlスクリプト内部に配列として格納した方が
サーバに負担がかからないんですか?
利便性は度外視した場合、どうなんでしょうか

205 名前:名無しさん 投稿日:2001/02/01(木) 14:32
>>201
CGIならば、出力送信が処理的にきついらしい。
だから表示部を2chの掲示板みたいにhtmlファイルを作成して表示させる方が
全然軽い。

型宣言がない分perlでの計算処理は、Cに比べてかなり遅いのでは?

ファイルの読み書きの負担が大きいってのは
メモリに格納して処理する方が無駄にメモリを食うので
負担がデカイって聞きましたけど。。



206 名前:名無しさん 投稿日:2001/02/01(木) 14:47
メール送信スクリプトに関する質問です

フォーム上で訪問者がメールアドレスを入力すると
そのアドレスに私が描いたCGの場所(URL)を
連絡するようにしたいと思っています

もし存在しないメールアドレスに送信した場合
そのエラーログを見ることはできるのでしょうか?

私は普通のプロバイダを利用しているので
sendmailのログなどは見れないと思います


207 名前:名無しさん 投稿日:2001/02/01(木) 17:27
ttp://www.isn.ne.jp/~nayuki/cgi-sample/upload.cgi
↑のコメント部分を複数行にしたいのですが、分かる方いたら教えてくださいm(._.)m オネガイ。
過去ログは呼んだんですが、自作PC板やその他の板と違って書いてあることがさっぱり分からなかったり(^^;。
親切な方いたらよろしくです。


208 名前:ほういち 投稿日:2001/02/01(木) 17:52
>206
あまり詳しくないですが・・・
open(MAIL,"| $sendmail -t");
などとやって送る場合は、送信相手を確認して
送る事ができないのでsendmailのログを見ない事には
エラーはわからないです。
SMTP通信で送信する場合はいちいち相手を確認するので
相手が存在しなければエラーが帰ってくるのでわかります。


209 名前:JAPU(AyuMoe) 投稿日:2001/02/01(木) 18:44
>>208
> SMTP通信で送信する場合はいちいち相手を確認するので相手が存在しなければエラーが帰ってくる
とは限らない。

210 名前:名無しさん 投稿日:2001/02/01(木) 18:58
>>207
一からperlなりCGIなりを勉強してください。
さっぱり分からない人に教えるのは非常に困難です。


211 名前:ほういち 投稿日:2001/02/01(木) 19:43
>>209
すみません・・・

212 名前:名無しさん 投稿日:2001/02/01(木) 19:45
AnHTTPD+ActivePerlなのですがこれって
perlの標準のSDBM使えますよね?
実は今使えてるのは使えてるのですが、
データが100バイト程度を超えるとその
レコードが消えてしまうようなのです。
先日まで、ID:PASSみたいな短いデータしか扱って
なかったので気がつきませんでした。
何か原因がありましたらアドバイスをお願いします。

213 名前:206 投稿日:2001/02/01(木) 21:06
>>208
回答ありがとうございます
とりあえずエラーを確認できないと気持ち悪いので
別の方法を考えようと思います

>>209
とは限らない・・・と言うことは
基本的にはOKなんでしょうか?

>>212
その環境ならSDBMは標準搭載してます
レコードの上限は1Kなので容量には問題ありません
原因はスクリプトを見ないとわからないと思います

214 名前: 投稿日:2001/02/01(木) 21:40
perlにてpop3のメール受ける事は出来るんですが
jis(?)を変換出来ません。
perlだけでいい方法ないですかね?

処理の流れ
接続→パスワード認証→listしてretrする→受け取ってテキストに吐き出す

吐き出したデーターを次の処理に受け渡したいんですが...

215 名前:名無しさん 投稿日:2001/02/01(木) 22:00
http://www.geocities.com/dvqlpx/index.txt
エラーがでて動きません。
エラー内容を見て自分なりにやってみたんですがだめでした。
どなたかお願いします。

216 名前:名無しさん 投稿日:2001/02/01(木) 23:02
>>215
俺が修正してもキミの意図するものとは違う可能性が大きいです
何をどうしたいのか明確に書いてください

アーメン2号をどんな風に改造したいの?
デフォルトでは設置できたの?

217 名前:名無しさん 投稿日:2001/02/01(木) 23:11
ジオのことだし、module利用できないとか。。。

218 名前:名無しさん 投稿日:2001/02/01(木) 23:13
>>214
use Jcode;

219 名前:215 投稿日:2001/02/01(木) 23:16
>>216
ひとまず手を加えていなかったときのアーメンは動いてました。
トップページにコンテンツ等と一緒に環境変数を表示させたかったので
アーメンが出力するIPアドレス等の位置を変えてみればいいかなと思ってやってみたんですが
最初自分が修正したときはホストが表示されなかったので
も一回いじってみたら、それからは幾度変更してみても動かなくなりました。

220 名前:212 投稿日:2001/02/02(金) 08:03
>>213
そうなんですよね。1kbまでいけると思うのですが・・・
この問題2日以上悩んでるのです。もういい加減諦めようと思うのですが、
なんとも気持ち悪くて。いろいろ試した結果、どうも1つのレコードは
1KBまでいけるようなのですが、連続して処理しようとすると累積で
1kbを越えたところでおかしくなるようです。(短いデータでも100個
位やると、数個落ちたりします。)
コードは凝縮すると以下のようなものです。データのとこばかりデカイの
でここに書くのもどうかと思ったのですが、イライラしちゃってるので
書きます。(ループでデータを作ったりした場合は正常に動作します)
このコードでwin+anhttpd+activeperlではデータが表示されません。
linux+apache+perlでは何の問題もなく動作します。

221 名前:212 投稿日:2001/02/02(金) 08:03
#!/usr/bin/perl

dbmopen( %dbhash, 'db' ,0666) ;
while (<DATA>) {
($time,$message) = split(/<>/);
$dbhash{$time} = "$message";
}

print "Content-type: text/html\n\n";
foreach ( keys %dbhash ) {
print "$_<BR>\n";
}
dbmclose ( %dbhash );

__END__
98111111<>テストデータ1。テストデータ1。テストデータ1。テストデータ1。テストデータ1。テストデータ1。テストデータ1。テストデータ1。テストデータ1。テストデータ1。テストデータ1。テストデータ1。テストデータ1。テストデータ1。テストデータ1。テストデータ1。テストデータ1。テストデータ1。テストデータ1。
98222222<>テストデータ2。テストデータ2。テストデータ2。テストデータ2。テストデータ2。テストデータ2。テストデータ2。テストデータ2。テストデータ2。テストデータ2。テストデータ2。テストデータ2。テストデータ2。テストデータ2。テストデータ2。テストデータ2。テストデータ2。テストデータ2。テストデータ2。
98333333<>テストデータ3。テストデータ3。テストデータ3。テストデータ3。テストデータ3。テストデータ3。テストデータ3。テストデータ3。テストデータ3。テストデータ3。テストデータ3。テストデータ3。テストデータ3。テストデータ3。テストデータ3。テストデータ3。テストデータ3。テストデータ3。テストデータ3。
98444444<>テストデータ4。テストデータ4。テストデータ4。テストデータ4。テストデータ4。テストデータ4。テストデータ4。テストデータ4。テストデータ4。テストデータ4。テストデータ4。テストデータ4。テストデータ4。テストデータ4。テストデータ4。テストデータ4。テストデータ4。テストデータ4。テストデータ4。


222 名前:_gunzip 投稿日:2001/02/02(金) 08:39
>>220
今試してみたけれど、anHttpd1.32f+Win98+ActivePerl5.6で
OKだったよ。(データを増やしたりしてテストしたけれど。)

いくつか欠けるということは、もしかしてキーが重複してない?
print "$time はすでに定義されとるよ" if defined $dbhash{$time};

223 名前:212 投稿日:2001/02/02(金) 12:41
>222
ありがとうございます。うちも全く同じ環境なのですが・・・
キーの重複の件は一番疑ったのでdbはまっさらな状態でテストしてます。
上に書いた明らかに重複していないデータでもアウトなんです。
で・・いろいろ調べた結果・・・結論らしきものが見えてきました。
キーの値がtime値のような9桁の実数だと挙動がおかしくなるんです。
キーの値を8桁にしたり10桁にしたりするとちゃんと動作します。
嘘みたいな話ですが・・本当なんです。
http://homepage1.nifty.com/yito/namazu/gbook/20000728.2352.html
ここにも似たような話があるのでどうも自分のミスではないような
気がしてきました。

224 名前:名無しさん 投稿日:2001/02/02(金) 14:12
>>215
sub html の最後に } がない
if (($host eq $addr) || ($host eq '')) {
にも } がない。
これperl -wc でエラーでない?

225 名前:名無しさん 投稿日:2001/02/02(金) 15:34
遅レスですみません。
Cookieについて質問した者です。
色々試していて、あまり理解してないのですがexpiresは
指定しなくてもうまくCookieを指定することが出来ました。
---
index.cgiで、以下のようにSet-Cookieをして、
print "Set-Cookie: NAME=$test1; \n";
print "Set-Cookie: NAME2=$test2; \n";
---
next.cgiで、
$cookie=$ENV{'HTTP_COOKIE'};
($cookie, $test1,$test2)=split('=',$cookie);
・・・とすると、HTML表示で変数をそのまま書くだけでCookieの内容を見れました。
しかし、$test2は正常に表示されるのに、$test1は『○○○; NAME2』と$test2に付けた
Set-Cookie時の名前が付いてしまいます。どうす%EAば良いでしょうか%8

226 名前:ど素人 投稿日:2001/02/02(金) 16:07
$ENV{HTTP_COOKIE}には

NAME1=hoge; NAME2=foo; NAME3=moe

というふうに入ってますので
フォームのデコードとおなじようにやれば
うまく逝くと思います

227 名前:名無しさん 投稿日:2001/02/02(金) 16:38
226さん、ありがとうございます。
デコード処理は本の通りに以下のように行ってみました。
---
foreach (split(/; /,$ENV{'HTTP-COOKIE'})){
    ($key,$value)=split(/=/);
    $cookieJar{$key}=$value;
}
$cookieJar{'NAME'}=$test1;
$cookieJar{'NAME2'}=$test2;
---
これだとHTMLで何も表示されなくなります。
フォームと同じようにデコードというとこんな感じで良いのでしょうか?
これも間違っているようで全く表示されないです。
---
$length = $ENV{'HTTP_COOKIE'};
read(STDIN,$buffer,$length);
($test1,$test2)=split( /&/ $buffer );
($data1,$test1)=split( /=/ , $test1 );
($data2,$test2)=split( /=/ , $test2 );
$test1 =~ tr/+/ /;
$test2 =~ tr/+/ /;
$test1 =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
$test2 =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;

228 名前:名無しさん 投稿日:2001/02/02(金) 18:16
非常に厨房な質問です
perlでフォームから入力をしたいんですが
selectタグを使って選ばせたところのvalueにアドレスをいれて
選択したらそのページに飛ばしたいのですが。。。
とりあえずselectからのデータが取れません。。。
通常のテキストからだと取れるんですが。。。
そこら中のページを見てものってないっす、どなたかヒントだけでも
教えてください。

229 名前:名無しさん 投稿日:2001/02/02(金) 18:24
>>228
そんなのどこかのスクリプトの中にあるでしょ
ってゆうかJAVAスクリプトではだめなのか?

230 名前:名無しさん 投稿日:2001/02/02(金) 18:27
どーせCGI串とかつくるんだろう?
つーかCGI串さがして勉強しろ

231 名前:228 投稿日:2001/02/02(金) 18:32
iモード対応にしたいのでJAVAスクリプトではだめなんです
JAVAスクリプトであれば簡単なんですけどね。。。

232 名前:名無しさん 投稿日:2001/02/02(金) 18:43
>>231
iモード対応ならselect部分は実際のURLじゃなくて識別コードにした方が軽いよ
受信パケット量が減るからね

CGI側でURLを配列に格納した方がいいみたい
selectを採用するくらいなんだからジャンプ先の数は少ないんでしょ


233 名前:名無しさん 投稿日:2001/02/02(金) 18:50
>>228
テキストで取れたんなら原理は一緒だよ
もうちょっとがんばってみそ

234 名前:ど素人 投稿日:2001/02/02(金) 18:58
>227

foreach (split(/; */, $ENV{'HTTP_COOKIE'})){
    ($key, $value) = split(/=/);
    $value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg;
    $cookieJar{$key} = $value;
}

$test1 = $cookieJar{'NAME1'};
$test2 = $cookieJar{'NAME2'};

これでうまく逝くはずです。

235 名前:228 投稿日:2001/02/03(土) 11:27
みなさんご迷惑をおかけしました、なんとかできました

>>232さん、ご参考にさせていただきます。アドバイスありがとう
ございます

236 名前:_gunzip 投稿日:2001/02/03(土) 11:52
>>223
-----
http://faqchest.dynhost.com/prgm/perlu-l/perl-00/perl-0006/perl-000600/perl00060318_26308.html

You should note that SDBM won't work reliably on FAT or FAT32 file
systems (a percentage of records written are not retrievable). That
means you'll have to use DB_File on Windows 9x if you want it to work
reliably. Besides, it saves four characters when typing the program:

らしいです。
------
また、ActivePerl5.6 bug report にも
http://bugs.activestate.com/ActivePerl/modules?id=495;expression=dbm;user=guest;prio00=1;prio01=2;prio02=4;prio03=8;stat00=1;stat01=2;stat02=4;stat03=8;stat04=16;stat05=32;stat06=64;assigntype=-1;assignuser=0
ここにも同様に。

#うちでは再現しないです。ん〜なぜだろう。


237 名前:223 投稿日:2001/02/03(土) 15:26
>_gunzipさん
ありがとうございます。やっぱり本家のサイト見たほうが早いんですね。
英語あんまり得意じゃないので・・・
だいたいわかったのですが、ここに書いてる事を見ると・・・
>FAT or FAT32上ではSDBMは正常に動作しないことに気をつけなさい。
>それはwin9x上ではDB_Fileを使用しなければならない事を意味する。
って事でいいと思うのですが・・・
最後の
>Besides, it saves four characters when typing the program
これがよくわからないです。・・
それはプログラムをタイプする時に4文字を救う????
全然違うんでしょうねえ・・・誰か教えてください。
で、DB_FileってBerkeleyDBを使うモジュールですよね。
今サイト見てきたけど・・・ソースファイルでの配布しかない
のでコンパイルできません。うぅ。
>> #うちでは再現しないです。ん〜なぜだろう。
こちらのOSはWIN98SEです。これに関連してるのかな?
あと・・まさかと思いますがCPUがAMD K6-3です。
関係ないとは思うのですがちょっと特殊なので少しだけ気になります。


238 名前:名無しさん 投稿日:2001/02/03(土) 16:17
jcode.plっていろいろありますけど、どれ使ってもたいして変わりませんよね?
複数のCGIで一つのjcode.pl使おうと思うんですけど問題はないもんですか?

239 名前:名無しさん 投稿日:2001/02/03(土) 16:38
>>237
DOSプロンプトから「ppm install DB_File」と入力すれば
インストール完了です
Windows用だとVer1.75かな?(未確認)

>>238
複数のCGIで使っても問題ありません
質問のレベルを考えると最新版を使えば特に問題ないと思います

240 名前:239 投稿日:2001/02/03(土) 16:40
補足です
>>237
インターネットに接続した状態で入力してください

241 名前:名無しさん 投稿日:2001/02/03(土) 20:34
CGIを勉強したいんですがいいwebサイトありませんか?

242 名前:名無しさん 投稿日:2001/02/03(土) 20:58
http://hoohoo.ncsa.uiuc.edu/cgi/interface.html

243 名前:名無しさん 投稿日:2001/02/03(土) 21:56
>241
とりあえず本買った方がいいよ。


244 名前:_gunzip 投稿日:2001/02/03(土) 23:30
>>237
DB_Fileについては、コマンドラインから
ppm install DB_File
でインストール出来ます。(下のサイト参照)

>>Besides, it saves four characters when typing the program
>これがよくわからないです。・・
おそらく、
「それに、プログラムを打ち込む際、四文字分だけ打たなくて済むよ」
云々は、その上に例として挙げられているスクリプトについて
use SDBM_File;
が、
use DB_File;
に、(二文字分)
tie(%h,'SDBM_File','junk136',O_RDWR|O_CREAT,0640) or die "Oops, $!\n";
が、
tie(%h,'DB_File','junk136',O_RDWR|O_CREAT,0640) or die "Oops, $!\n";
に(二文字分)なるので、(2+2=)四文字分タイプ量が少なくなるから、
DB_Fileの方がお奨めだよ、ということを(半ば冗談めかして)書いただけでしょう。
(間違ってたら恥ずかしいな〜)

うちはWin98(SEではない)+Celeron366Mhzですが、上の二つ目に書いてある
方は何度やっても再現しませんね。(いや、そちらの方がいいのですが)
どうもあんまり関係ないような気が。

-----
参考:
PPMの使い方
http://member.nifty.ne.jp/hippo2000/perltips/ppm.htm
モジュールのzipアーカイブ
http://www.activestate.com/PPMPackages/
Berkley DBについていろいろ
http://www.sleepycat.com/

245 名前:名無しさん 投稿日:2001/02/04(日) 00:27
@list = $file =~ m/<a +href.+<\/a>/
とやってリンクを取り出したいのですが、
どうも".+"が最後の値までマッチしてしまいます。
だから返ってくる値も一つだけです。

どうすれば複数リンクを取り出せるでしょうか?

246 名前:名無しさん 投稿日:2001/02/04(日) 00:32
間違えました。
@list = $file =~ m/<a +href.+<\/a>/gi;
です


247 名前:名無しさん 投稿日:2001/02/04(日) 00:40
あともう一つ。誰か頼みます。
否定文字クラス[^...]で囲った文字の順番は無視されますが、
順番を保つ為には(...)で括ればいいのでしょうか?

でも[^...]は改行コードにはマッチしてしまうし。。。

248 名前:名無しさん 投稿日:2001/02/04(日) 01:27
とりあえず、解決しました。
@list = $file =~ m/<a +href.*?<\/a>/gi;
「*?」とすることで最短マッチするようになりました。
答えは正規表現本のP91にありました。

#あの本ほんとに役にたつなぁ

249 名前:>246 投稿日:2001/02/04(日) 01:30
m|<a.*?href="(.+?)".*?>.*?</a>|gi;
こんなんでどうよ?
247は…すまん、質問の意図がよくわからん。

250 名前:249 投稿日:2001/02/04(日) 01:31
すでに解決済みか…鬱だ逝こう。

251 名前:名無しさん 投稿日:2001/02/04(日) 03:30
>249 サンキュ
ところで.*?のところにコメントが入っていたらどうするの?
&lt;!--<a href ></a>--&gt; ←こんな感じにね。
これはじぶんでは解決不可能な気がする。
正規表現本のCのコメント削除をよく理解しないとだめだね。

252 名前:名無しさん 投稿日:2001/02/04(日) 08:54
>>251
行頭からのパターンマッチじゃないんだから
そのままでOKじゃん


253 名前:プログラム未経験者だけど。 投稿日:2001/02/04(日) 10:50
やべー、perlやってみようかと本買ったが進まんうちに
飽きてきた。なんか、息抜きに面白い事(プログラム)教えて。

254 名前:名無しさん 投稿日:2001/02/04(日) 11:31
>>253
お断りします
自分で探してください
あるいは>>1にリンクされたサイトを訪問してみたら?

255 名前:名無しさん 投稿日:2001/02/04(日) 14:16
>>253
俺はお前みたいな面白いやつを見つけたよ(わら

256 名前:253 投稿日:2001/02/04(日) 15:20
PCしかできん奴に聞いた俺が間違っていたな。
話しには聞いていたが、やっぱ本当のクソなんだな。クソレスもするし(w
”特に”255、おまえだよー(w
頑張ってその腐った人間性直してねー。じゃないとお前みたいなクソみたいな友達や彼女しか出来ないよー。
つってもマジいねーか(わらいー

ま、せいぜい頑張れ、たーこ(笑)


257 名前:名無しさん 投稿日:2001/02/04(日) 15:44
>>255
激しく同意
こんな面白いのに飽きるなんて信じらんねーな(ワラ

258 名前:名無しさん 投稿日:2001/02/04(日) 16:25
安西先生、Perlの話がしたいです・・・

259 名前:名無しさん 投稿日:2001/02/04(日) 18:52
ちょっと質問です

$mdayで1から9までの数値の前に0をつけたいんですがどうやれば
いいんでしょうか?

単純に
if ($mday < 10){$dday = "0"+$mday ;}
などとすると単なる足し算ですよね?


260 名前:名無しさん 投稿日:2001/02/04(日) 19:08
>>259
$dday = sprintf("%02d",$mday);
・・・どうよ?

261 名前:名無しさん 投稿日:2001/02/04(日) 19:19
>>259
文字列を足すのは ドット。
$dday = "0".$mday;

しかし、なるべく
$dday = sprintf "%02d", $mday;
を使おう。
$date = sprintf "%02d/%02d/%02d", $year-100, $mon, $mday;
のようにまとめて出来るからね。


262 名前:名無しさん 投稿日:2001/02/04(日) 20:58
Perlの構文もBNFで定義されてるの?

263 名前:227 投稿日:2001/02/04(日) 21:58
遅レスですみません。
234様、ありがとうございました
望んだ動きが!本当に感謝です。

264 名前:名無しさん 投稿日:2001/02/04(日) 23:27
ファイルのコピーってバッククオート使わずにどうやるの?
今、NT上のapacheでやってるからどうやるのかさっぱりわかりません。
もしかして、Winのcopyコマンドが使えるとか?(w

一回やってみます。

265 名前:名無しさん 投稿日:2001/02/04(日) 23:34
コンパイルすら通らず(w


266 名前:_gunzip@おやすみ 投稿日:2001/02/04(日) 23:39
>>264
use File::Copy;
copy($oldfile,$newfile);

-----
参照:
http://www.harukaze.net/~mishima/perl/faq/newbiefaqpgm.html
のQ10
http://www.bekknet.ad.jp/~bero/docj/module/10/File_Copy.html


267 名前:AyuMoe(JAPU) 投稿日:2001/02/04(日) 23:41
File::Copy

or

$bufsiz = 2048;
$from = "/etc/rc";
$to = "/tmp/rc";
open IN, "< $from" or die;
open OUT, "> $to" or die;
print OUT $buf while(read IN, $buf, $bufsiz);


268 名前:259 投稿日:2001/02/04(日) 23:48
>>260さん
>>261さん

早速のお返事ありがとうございます
なるほど。。。勉強になりました

269 名前:名無しさん 投稿日:2001/02/05(月) 01:19
コピーできないへたれです。
ありがとう。
やっぱり関数としては提供されてないんですね。
File::Copyですか。やっぱりパッケージの知識も必須ですね。

270 名前:名無しさん 投稿日:2001/02/05(月) 03:01
パッケージじゃなくてモジュールね >>269
Perl自体も高機能だけど、モジュール使えるようになると
もっと幸せになれます


271 名前:223 投稿日:2001/02/05(月) 03:16
>_gunzipさん
SDBMの件いろいろありがとうございます。
4文字の件はそういう事だったのですね・・・
最初、「4文字分タイプを節約できる」って意味かとも
思ったのですが、どう考えても差が2文字なんで・・・
違うよなあーーって思ってしまいました。
2文字*2回なんですね・・・修行が足りませんです。
それとppmも成功しました。
あのたぐいのインストール方はunix系の専売特許かと
思ってましたがWin(しかもDOSプロンプトから)できるなんて
おどろきました。
まだ、テストはしていませんが大丈夫だと思います。
それとどういう条件でSDBMが正常に動作しないのかはよく
わかってないですが、例のAnHTTPDのサイトで悩んでいた方に
メールしたところ、彼もいろいろ調べたが結局わからないまま
だったそうです。
彼のところではK-6では正常動作していたらしいのでCPUより
メモリー周りが怪しいのでは?とも書かれてました。
どうでしょうねえ。
ともかくありがとうございました。

272 名前:名無しさん 投稿日:2001/02/05(月) 12:40
use Socket;
で、ソケット通信したいんですけど
通信が出来ない場合のタイムアウト処理って
どんな感じでやればいいんですか??
その辺のサンプル見ても、そんな処理してないので
長時間固まるんですよね・・。

273 名前:名無しさん 投稿日:2001/02/05(月) 14:03
質問です。FORMからファイルのアップロードをしようとしています。
受け取るCGI側が標準入力から受け取ったデータは以下のとうりです。

-----------------------------11241214169042
Content-Disposition: form-data; name="upfile1"; filename="C:\send.txt"
Content-Type: text/plain

これは送信ファイルの中身だよ
-----------------------------11241214169042--

この場合、送信ファイルがテキストファイルなのでセパレータ(-----------------------------11241214169042)を
見て判断すればファイルの中身を区別することが出来ますが
いろいろ実験してみると、バイナリファイルの時も空行から後は生データで送られてきているようです。
では、MIMEヘッダとバイナリファイルの区別はどこでつけるのですか?
空行から下はアップロードファイルだと認識しても最後にMIMEヘッダ(フッタ?)がはいっしまいますし。

あと、送信ファイル内にセパレータと同じ文字列が含まれている可能性がありますよね?
そのような場合、セパレータ文字列だけを見ていると誤動作が起こらないのでしょうか?


274 名前:名無しさん 投稿日:2001/02/05(月) 17:12
#! /usr/bin/perl
use Jcode;

$Test = 'テストテスト';
print Jcode->new($Test)->iso_2022_jp->mime_encode;

JcodeのMIMEデコード機能を使うべく、上のスクリプトを書いた
のですが、
Can't call method "mime_encode" without a package or object reference
と言われてしまいます。
MIME::Base64も入っています。

Jcode.pm - v0.68 2000/12/27

どうすれば、MIME機能を使えるでしょうか?
よろしくお願いします。

275 名前:274 投稿日:2001/02/05(月) 17:14
>>274
MIMEデコード機能→MIMEエンコード機能

間違えました。すみません。

276 名前:名無しさん 投稿日:2001/02/05(月) 20:03
>use Socket;
>で、ソケット通信したいんですけど
>通信が出来ない場合のタイムアウト処理って
>どんな感じでやればいいんですか??
>その辺のサンプル見ても、そんな処理してないので
>長時間固まるんですよね・・。

そうか・・アクセスできない時俺のスクリプト
どうなるんだろ?汗
通信処理は難しいなぁ・・。
俺そんな事考えてなかった(笑)

277 名前:_gunzip@二日酔い 投稿日:2001/02/05(月) 22:33
>>274

#!/usr/bin/perl -w
use Jcode;
$Test = 'テストテスト';
print jcode($Test)->mime_encode;

Jcode->new($Test)->iso_2022_jp->mime_encode;
・Jcode->new($Test)
はJcodeクラスにblessされたオブジェクトを返す。
・Jcode->new($Test)->iso_2022_jp
iso_2022_jp()がそのオブジェクトを第一パラメータにとって呼び出される。
そして、iso_2022_jp()は単なるスカラー値を返す。(たぶん)
・Jcode->new($Test)->iso_2022_jp->mime_encode
単なるスカラー相手にオブジェクトベースのサブルーチン呼び出しを
行おうとして失敗。

Jcode.pmの一部
sub mime_encode{
  my $self = shift;
(以下略)

#何時もnkf -jでやっていたから間違っているかも。(スマソ)
#間違っていたら教えてほしいです。(恥ずかしい)
-----
参照:
http://openlab.ring.gr.jp/Jcode/Jcode.html
http://openlab.ring.gr.jp/Jcode/index-j.html(下の方)

>>272
IO::Socketにtimeout()ってあった気がします。(うろ覚え)


278 名前:名無しさん 投稿日:2001/02/06(火) 01:35
掲示板などで、題名未記入の場合代替文字列を入れるヤツ。
2ちゃんのナナ資産とかもそうだけど、
あれのやりかたがわかんない精薄です。

if使わないでも全然出来ると思うんだけど
「未記入」をどうあらわせばいいかわかんないでゴワス

フェラチオするから教えてくれ!

279 名前:名無しさん 投稿日:2001/02/06(火) 01:45
$name ='$ENV{'REMOTE_ADDR'}' if $name eq '';

280 名前:名無しさん 投稿日:2001/02/06(火) 01:49
>>279
$name = $ENV{'REMOTE_ADDR'} if $name eq '';

281 名前:名無しさん 投稿日:2001/02/06(火) 02:10
>280

あ、ifあとにつければええんかわかった。
サンクヌ

282 名前:名無しさん 投稿日:2001/02/06(火) 03:01
>>278
ifを使わないなら、、、
$name =~ s/^$/名無しさん/;
ifを使わないちょっとひねくれた方法は、
$name = '名無しさん' unless(defined($name));

283 名前:AyuMoe(JAPU) 投稿日:2001/02/06(火) 03:13
$name ||= '名無しさん';
"0" って名前の場合は問題あるけどな。


284 名前:名無しさん 投稿日:2001/02/06(火) 03:36
$name = $name ? $name : '名無しさん';
'0'非対応。

285 名前:284 投稿日:2001/02/06(火) 03:42
>>278
フェラティオはいらない。

286 名前:ほういち 投稿日:2001/02/06(火) 04:51
282の
$name = '名無しさん' unless(defined($name));
は失敗する気がする。

287 名前:274 投稿日:2001/02/06(火) 08:31
>>277
それでうまくいきました。
_gunzipさん、ありがとうございました。

288 名前:名無しさん 投稿日:2001/02/06(火) 09:24
>>286
わかるけど、それなら添削してよ
今後のために

289 名前:名無しさん 投稿日:2001/02/06(火) 10:39
$name = '名無しさん' unless($name eq '');
こうすりゃいいのでは?(0対応)


290 名前:289 投稿日:2001/02/06(火) 10:40
がいしゅつでした。
すいません。

291 名前:ほういち 投稿日:2001/02/06(火) 11:28
>288
こでの$nameはフォームから送られてきた値なので
実際に動作させる時は
$FORM{'name'} = '名無しさん' unless(defined($FORM{'name'}));
という感じになると思います。
definedは定義されてるかどうかを判定するはずなので、
もしフォームの名前欄に記入がなかったとしても
フォームをデコードする時に$FORM{'name'}はNullと
定義される事になるのでdefined($FORM{'name'})は常に真に
なってしまうということです。
(あんまり自信ないのですが・・・)
だから289さんのようにunless($name eq ''); を
使ってます。

292 名前:名無しさん 投稿日:2001/02/06(火) 11:45
T-Cupの掲示板で書き込みフォームのHTMLでクッキー使えてるのはどういう仕組みっスか?


293 名前:名無しさん 投稿日:2001/02/06(火) 12:01
>>292
javaスクリプトorサーバ設定

>>ソケットの処理でタイムアウト
alarm()関数と、シグナルハンドラーを組み合わせて
タイムアウトすれば・・・。
ゴメン俺じゃわかんねぇ〜(笑)

294 名前:名無しさん 投稿日:2001/02/06(火) 14:51
本当に初心者な質問なんですが、
&&ってどういう意味なのですか?

僕の本には、

>&&は「かつ」という意味です。
>「条件1&&条件2」の場合、
>条件1か条件2のどちらかがあてはまれば良いのです。

と、あるのですが、そうなのでしょうか?
教えてくんですみません・・・・・

295 名前:AyuMoe- (JAPU) 投稿日:2001/02/06(火) 15:03
>>294
嘘です。

and または && はその両方を満たさなければだめ。
or または || は片方だけで良い。
だから、die if(1 and 0); は死ぬし、die if(1 or 0) は死なない。
# 1: 真, 0: 偽

>>293
IO::Socket 使えば、Timeout で指定できるはず。


296 名前:名無しさん 投稿日:2001/02/06(火) 15:09
>>295
お返事ありがとうございます!
しかも素早い!どうもありがとうございました。
m(_ _)m

297 名前:名無しさん 投稿日:2001/02/06(火) 15:18
>>296
なんつー本?

298 名前:サゲ茶漬け 投稿日:2001/02/06(火) 15:19
>だから、die if(1 and 0); は死ぬし、die if(1 or 0) は死なない。
># 1: 真, 0: 偽

へぇ〜。die if (1 or 0) は死なないんですか。
dieって面白いですね。極力「死にたくない」んですね☆

299 名前:サゲ茶漬け 投稿日:2001/02/06(火) 15:28
>だから、die if(1 and 0); は死ぬし、die if(1 or 0) は死なない。

やっぱ変だよね・・・?
die if (1 and 0); # 死ぬ
die if (1 or 0); # 死なない
違うかなぁ☆

300 名前:名無しさん 投稿日:2001/02/06(火) 16:07
die if 1;
die if 0;
死ぬのはどっち?

301 名前:名無しさん 投稿日:2001/02/06(火) 16:27
>>297
「掲示板・アンケートで覚えるPerlプログラミングforCGI」です。
すごくわかりやすくていい本でした。
でも&&のところで引っかかってもやもやしてました。
その点を除けば、初心者にもわかりやすいし、
けっこう僕は好きです。

302 名前:名無しさん 投稿日:2001/02/06(火) 16:29
die if (1 or 0); #死ぬかもしれない

ですか?

303 名前:初心者 投稿日:2001/02/06(火) 16:58
http://cgi.din.or.jp/~hagi3/Perl/Perf.htm に、
>配列 - 初期値の設定
>ローカル変数を使用する場合、初期値や定数を設定するケースがあります。
>見易く書く、単純に書く、色々とありそうですが、どれくらいの差があるでしょうか。
>No. 処理           時間
>1. my ($a,$b,$c)=($_,$_,$_); 3.3
>2. my $a=$_; $b=$_; $c=$_; 1.8
>どちらも似たようなものに見えますが、結果は結構違います。
とあったのですが、これって正しいでしょうか?
初心者なので、どうにも判断できないです。
(自分としては変だと思うのですが・・・)

304 名前:AyuMoe(JAPU) 投稿日:2001/02/06(火) 17:08
あ、すまん。逆だった。
die if(1 and 0); は死なない、die if(1 or 0) は死ぬ。

305 名前:_gunzip 投稿日:2001/02/06(火) 17:14
>>303
んー もしかして、これは、
>my $a=$_; $b=$_; $c=$_;

>my ($a,$b,$c)=($_,$_,$_);
と同じ事をしている、という前提なわけですか?
>my $a=$_; $b=$_; $c=$_;
この場合、$aはきちんとレキシカルスコープに
なりますが、$b,$cについてはmyが適用されずに(って、それ以前に)
グローバルスコープになってしまいます。
ですから、全く違うもの(の速度)を比較しているような気がします。

#!/usr/bin/perl -w
{
    my $a,$b; #$a(lexical),$b(global)
    $a = "(・∀・)";
    $b = "(T∀T)";
    my($c,$d); #$c(lexical),$d(lexical)
    $c = "(・∀・)";
    $d = "(・∀・)";
    print "\$a = $a , \$b = $b , \$c = $c , \$d = $d\n";
}
print "-----\n";
print "\$a = " , defined $a ? $a : "not defined!" , "\n";
print "\$b = " , defined $b ? $b : "not defined!" , "\n";
print "\$c = " , defined $c ? $c : "not defined!" , "\n";
print "\$d = " , defined $d ? $d : "not defined!" , "\n";
#test.pl

>>どちらも似たようなものに見えますが、結果は結構違います。
無論、やっていることが違いますし。
#myは、ちゃんと括弧にくくった方が。

306 名前:&&の質問した者 投稿日:2001/02/06(火) 18:34
先ほどは質問に答えていただいてありがとうございました。
あのぉ、2度目の質問で恐縮なんですが、
あるスクリプトを解読しようと奮起して読み始めたのはいいのですが、
=~ /文字/
の意味がわからず行き詰まっています。

=~ s///

=~ tr///
の変形バージョンかなとおもい、本を見てみましたが、
載っていませんでした。
高度な技か何かなのでしょうか。
ご存知の方がいましたら教えてください。m(_ _)m

307 名前:ほういち 投稿日:2001/02/06(火) 18:38
=~ s/// とか =~ tr/// は文字列(パターン)を置換するもの。
=~ /文字/ はその文字列(パターン)が含まれてるかどうか
検査するもの



308 名前:名無しさん 投稿日:2001/02/06(火) 18:39
tripod(アメリカ)とvirtualavenueでBBSを設置してみたんですが
何故かパーミッションの変更が出来ません。
steedftpとFFFTPの2つを試してみたんですが、上手く行きません
steedのログには"カスタムコマンドエラー"と出ています。
一応、両方のサーバーのFAQにも目を通してみた(英語なので自信ないです ^^;)
のですが、FAQには無いようです。
時間があれば、教えていただけませんでしょうか。

309 名前:308 投稿日:2001/02/06(火) 18:41
あああ、ちょっと初心者過ぎますね  (^_^;
スレ違いでした。
くだ質スレが有ればいいのですが。

310 名前:284 投稿日:2001/02/06(火) 18:45
>>306
$str1 = 'あいうえお';
$str2 = 'かきくけこ';

if($str1 =~ /あ/){
print "「あ」が含まれてますね( ̄ー ̄)\n"
}else{
print "「あ」が含まれてませんね( ̄ー ̄)\n"
}

if($str2 =~ /あ/){
print "「あ」が含まれてますね( ̄ー ̄)\n"
}else{
print "「あ」が含まれてませんね( ̄ー ̄)\n"
}

出力:
「あ」が含まれてますね( ̄ー ̄)
「あ」が含まれてませんね( ̄ー ̄)


311 名前:310 投稿日:2001/02/06(火) 18:47
あっ・・・名前の番号は関係ないデス。

312 名前:310 投稿日:2001/02/06(火) 18:48
しかもprint分にセミコロン忘れた。。。死のう。。。

313 名前:&&の人 投稿日:2001/02/06(火) 19:00
>>307
ほういちさん、どうもありがとうございます!
なるほど〜〜。意味がわかりました。すっきり。
if($アクセス者のホスト=~ /アクセス拒否ホスト/){
というのは、
「こいつはアクセス拒否するべき奴かな?どうかな?」
ってことなんですね。どうもありがとうございました。

314 名前:303 投稿日:2001/02/06(火) 19:06
>>305
やはり変ですかね。
my $a=$_; $b=$_; $c=$_;
これだと、$b,$c全然ローカルになってないし。


315 名前:&&の人 投稿日:2001/02/06(火) 19:06
>>310
310さん、実例、とても参考になりました。
しかもちょっとユーモラス(笑)( ̄ー ̄)
ありがとうございます!

316 名前:>>314 投稿日:2001/02/06(火) 19:27
カンマを行で読み替えればわかりやすいかも。
my $a=$_; $b=$_; $c=$_;
は、
my $a=$_;
b=$_;
c=$_;
・・・と、同義。
でも、303にあるようなタイムラグの原因は謎(教えてPerlの偉い人!)
スライスの処理で時間かかってるのか、レキシカル変数の作成で時間かかってるのか。。。

317 名前:316 投稿日:2001/02/06(火) 19:30
カンマじゃなくてセミコロンでした。。。


318 名前:ほういち 投稿日:2001/02/06(火) 20:51
303の件気になったのでベンチとってみました。
ついでに3番目にmy宣言を分けてやった例も入れてみました。
ついでにforとforeachもやってみました。
うちの環境では100万回やってこんなもんです。

#!usr/bin/perl

use Benchmark;
$time1 = Benchmark->new();
    foreach ( 1 .. 1000000 ) { my ($a,$b,$c)=($_,$_,$_); }
$time2 = Benchmark->new();
    foreach ( 1 .. 1000000 ) { my $a=$_; $b=$_; $c=$_; }
$time3 = Benchmark->new();
    foreach ( 1 .. 1000000 ) { my $a=$_; my $b=$_; my $c=$_; }
$time4 = Benchmark->new();
    for ( $i = 1 ; $i < 1000000 ; $i++ ) { my $a=$i; my $b=$i; my $c=$i; }
$time5 = Benchmark->new();


$difference1 = timediff($time2, $time1);
$difference2 = timediff($time3, $time2);
$difference3 = timediff($time4, $time3);
$difference4 = timediff($time5, $time4);

print timestr($difference1), " elapsed 1\n";
print timestr($difference2), " elapsed 2\n";
print timestr($difference3), " elapsed 3\n";
print timestr($difference3), " elapsed 4\n";

出力結果
4 wallclock secs ( 3.84 usr + 0.00 sys = 3.84 CPU) elapsed 1
3 wallclock secs ( 2.97 usr + 0.00 sys = 2.97 CPU) elapsed 2
3 wallclock secs ( 3.29 usr + 0.00 sys = 3.29 CPU) elapsed 3
3 wallclock secs ( 3.29 usr + 0.00 sys = 3.29 CPU) elapsed 4

319 名前:&&の人 投稿日:2001/02/06(火) 21:00
perlを入力したらその説明が出てくるという便利なサイトはないでしょうか?
辞書/検索のperl版のようなサイトがあれば、僕のくだらない質問で
何度もみなさんを煩わせてしまう回数もぐんと減るかと思いまして・・・・


320 名前:名無しさん 投稿日:2001/02/06(火) 21:06
>>319
そういうサイトはあるよ。
今googleで探したら、こういうのもあった(探せばもっといいやつがゴマンとある)。
http://www2u.biglobe.ne.jp/~MAS/perl/ref/index.html
http://www.paddie.com/perl-ref.html
http://www.cec.co.jp/usr/hasegawa/Docs/perl-jman/
でも、書籍が一番良いと思うので購入を検討されたし。
ちなみに僕はオライリーのクイックリファレンス使ってマス。

321 名前:&&の人 投稿日:2001/02/06(火) 21:16
>>320
わ、ありがとうございます。あるんですね。
さっそく利用してみます。
実は僕はこてこてにYahoo!で検索してみたんですが、ありませんでした(汗
これを機にgoogleもお気に入りにいれました。
オライリーのクイックリファレンス、探してみます。
ありがとうございました。


322 名前:320 投稿日:2001/02/06(火) 21:32
でも、クイックリファレンスはあまりお勧めできませぬ。
(題名ほどクイックじゃないから)
&&さんの場合は、プログラミングPerlあたりの網羅的な本がよいかもです。
↓参考書籍スレッドなどを参考にしてくださいませ。
http://tako.2ch.net/test/read.cgi?bbs=perl&key=970166109&ls=50

323 名前:_gunzip@二日酔い++ 投稿日:2001/02/06(火) 23:35
>>303 の速度比較は、二つの全く違う
(やって、後者は$b,$cがローカルになっとらへんから、
"ローカル変数を初期化する"っていう当初の目的から
外れたものやし。恐らく my $a,$b,$c; ってやりたかったんかも
しれんけど、これも$b,$c はグローバルスコープになってしまう事
には変わらへん。やっぱ、地道にmy()ってするしかないんかなあ)
働きをするコードを比べているわけですから、
んー比較自身に意味がないと思われるのですが。(T∀T)

ちなみに、myとlocalについては、こんな結果になりますね。
無論、myとlocalでは利用すべき場所が異なりますから
一概にはどちらがよいとは言えないのですけど。
----------
#!/usr/bin/perl
use Benchmark;
$_ = "お酒が飲みたいなあ";
$count = 1000000;
timethese($count,{
 'my' => sub {my($a,$b,$c) = ($_,$_,$_);},
 'local' => sub {local($a,$b,$c) = ($_,$_,$_);},
});
----------
Benchmark: timing 1000000 iterations of my, local...
my: 1 wallclock secs ( 1.54 usr + 0.00 sys = 1.54 CPU) @ 649350.65/s (n=1000000)
local: 4 wallclock secs ( 3.29 usr + 0.00 sys = 3.29 CPU) @ 303951.37/s (n=1000000)

>>318
なるほど。
my ($a,$b,$c)=($_,$_,$_);
より、
my $a=$i; my $b=$i; my $c=$i;
の方が早いのですね。(む〜何故だろう)
ともかくも、ありがとうございます。
>foreach ( 1 .. 1000000 )
こうすると、一気に要素数が1000000の配列が確保されてしまいますよ〜

#間違っていたら直しますので是非教えてくださいです。


324 名前:&&の人 投稿日:2001/02/07(水) 00:40
>>320-322
どうもありがとうございます。
じっくりと選んでみますね〜

325 名前:名無しさん 投稿日:2001/02/07(水) 00:47

if (1 .. /^$/)

ていうのを見つけたんですが
これってどゆ意味ですか?
改行だけの行を見つけたら??


326 名前:ほういち 投稿日:2001/02/07(水) 01:01
>gunzipさん
>こうすると、一気に要素数が1000000の配列が確保されてしまいますよ〜
そう聞いた事あるんで普段は使わないのですが、あのサイトに記載されてる
通り$_を代入するのにいい手が思いつかなかったので。
だもんでついでに速度も差が出るかと思ってforでも試してみました。
こっちは$a=$iとしてしまいましたが。
で、配列を確保する件ですが最近のバージョンのperlはそういう
動作にならないと聞いたような気もします。
まあ、気持ち悪いので使わないにこした事はないとは思いますが。



327 名前:JAPU(AyuMoe) 投稿日:2001/02/07(水) 01:01
数字の場合は $. (行番号) と比較される。
while(<>) { print if(1../^$/) }
は1行目から空行まで表示。

perldoc perlop "Range Operators" 参照。

328 名前:AyuMoe(JAPU) 投稿日:2001/02/07(水) 01:05
>こうすると、一気に要素数が1000000の配列が確保されてしまいますよ〜

少し前の常識ではそうですが、最近のperl (5.005 逝こう) では最適化されるので、そのようなことはありません。

perldoc perldelta (5.005):
foreach (1..1000000) optimized

foreach (1..1000000) is now optimized into a counting
loop. It does not try to allocate a 1000000-size list
anymore.


329 名前:325 投稿日:2001/02/07(水) 01:13
japuさんアリガトー。
まさにそのstdinからの入力部分で使われていました。

330 名前:_gunzip@酔いも醒めて もう朝か 投稿日:2001/02/07(水) 05:38
>>326 >>328
ほういちさん、japuさん すみません。
http://www.perl.com/pub/doc/manual/html/pod/perldelta.html#C_foreach_1_1000000_optimize
に*そのまま*載っていますね..... 知識不足でした。
(しかも、たしか5.005がリリースされたのは三年近く前のような・・・
う、ちゃんとperldelta読まないと。)

#今後気を付けます。ご迷惑をおかけしました。


331 名前:少し不安なのですが 投稿日:2001/02/07(水) 06:14
昨日ActivePerlをインストールしたのですが、さっき
http://wakusei.cplaza.ne.jp/twn/wwwcgi6.htm
を読んだところ、ActivePerlのセキュリティ問題とかいうのがかかれて
あったんですが、これって具体的に一体どんなものですか。


332 名前:_gunzip@あーあ朝になっちまった 投稿日:2001/02/07(水) 06:26
>>331
>■ ActivePerlのセキュリティ問題を改善しておく
というセクションの所?


333 名前:331 投稿日:2001/02/07(水) 06:32
>>332
そうです。

334 名前:_gunzip@そろそろ逝きますか 投稿日:2001/02/07(水) 07:53
>>333
PerlScriptというのは、IEのActiveXスクリプトエンジンで....
何に使われているのかは、自分はよく知りません。
(ASPとしても使われているそうだけど、あまり聞かない)
ActivePerlをインストールしたのならば、
\html\Components\Windows\PerlScript.htmlに説明がありますので、
読んでみられては?

試しに以下のソースをコピペして、*.html
という名前で保存して開いてみれば、大体どのようなものか分かるかと。
#予め言っておくと、勝手にメモ帳が起動します(IEのみ)
#勿論、ActivePerl必要
<HTML>
<HEAD>
<SCRIPT LANGUAGE="PerlScript">
$window->document->write("PerlScript test");
$window->alert("notepad");
system("notepad");
</SCRIPT>
</HEAD>
<TITLE>test</TITLE>
</HEAD>
<BODY></BODY>
</HTML>

これを見てもわかるとおり、なんかJavaScriptみたいなものです。
無論、Perlですからopen/print/closeでローカルに読み書きも行えます。

ところで、
1.ActivePerl を(PerlScriptオプションをオンで)ローカルにインストールしている。
2.何の因果か、レジストリのその値を0x0001等に変更している。
(デフォルトでは0x0010だからローカルのみ...の筈)
3.PerlScriptなんか使おう(使って悪いコトしよう)という人がいる。
(知名度はかなり低いような気がするのだが)
...という不幸な事態が重ならない限り、大丈夫だと思いますが。(たぶん)

#個人的にはPerlScriptかなり好きで、ちょこちょこ作って遊んでますけど。
-----
HKEY_LOCAL_MACHINE\SOFTWARE\ActiveState\PerlSE\1.0
DWORD: EnabledZones
0x0001 :うみはひろいなおおきいな(all)
0x0010 :うちだけ(local)
0x0020 :いんたーねっと(Internet)#IEオプション
0x0040 :しんじてるサイト(trusted)
0x0080 :せいげんつきサイト(restricted)

335 名前:名無しさん 投稿日:2001/02/07(水) 10:22
さっき、間違ってCGIスレに書いてしまいましたのが・・・
windows上のperlで外部コマンドを実行し、結果を取得したいのですが
現在はよくわからないので以下のようにして一時ファイルを読み込んでいます。
(rootじゃないとpingモジュールが使えないようなので外部コマンド使ってます)
$a= system "ping $hostn -n 1 >$temp_file";
なんかうまい方法はないでしょうか。一般のユーザー権限でpingが打てれば
この方法にはこだわらないのですが・・・。よろしくお願いいたします。

336 名前:_gunzip 投稿日:2001/02/07(水) 12:33
>>335
open(IN,"command |") or die "itteyosi";
            ^
とするか、
IPC::Open3モジュールを用いて、
use IPC::Open3;
$pid = open3(\*WTRFH, \*RDRFH, \*ERRFH,"ls -al");
でRDRFHから出力を読むと簡単でいいかと思います。
#簡単な説明で済みません。

337 名前:335 投稿日:2001/02/07(水) 16:37
>>336
うまくいきました。ありがとうございました。

338 名前:名無しさん 投稿日:2001/02/07(水) 17:28
Windows上では文法チェックOKなのにUNIXサーバ上にFTPでアップロードした後に
telnet上で文法チェックすると下記の様なエラーメッセージが表示されます

■エラーメッセージ
----------------------------------------
"use" may clash with future reserved word at dbtest.pl line 3syntax error in fil
e dbtest.pl at line 3, next 2 tokens "use strict"

"use" may clash with future reserved word at dbtest.pl line 4"use" may clash wit
h future reserved word at dbtest.pl line 5"tie" may clash with future reserved w
ord at dbtest.pl line 7"h" may clash with future reserved word at dbtest.pl line
7Illegal modulus of constant zero in file dbtest.pl at line 7, next 2 tokens "h
,"

syntax error in file dbtest.pl at line 7, next 2 tokens "$DB_HASH or"
"untie" may clash with future reserved word at dbtest.pl line 25"h" may clash wi
th future reserved word at dbtest.pl line 25Illegal modulus of constant zero in
file dbtest.pl at line 25, next 2 tokens "h ;"
dbtest.pl had compilation errors.
----------------------------------------

■ソースファイル
----------------------------------------
#!/usr/local/bin/perl

use strict ;
use DB_File ;
use vars qw( %h $k $v ) ;

tie %h, "DB_File", "fruit", O_RDWR|O_CREAT, 0666, $DB_HASH or die "Cannot open file 'fruit': $!\n";

# いくつかのキー/値の組をファイルに追加
$h{"apple"} = "red" ;
$h{"orange"} = "orange" ;
$h{"banana"} = "yellow" ;
$h{"tomato"} = "red" ;

# キーが存在するかチェック
print "Banana Exists\n\n" if $h{"banana"} ;

# キー/値の組を削除
delete $h{"apple"} ;

# ファイルの内容を出力する
while (($k, $v) = each %h)
    { print "$k -> $v\n" }

untie %h ;
----------------------------------------
ActivePerlは文法チェックが甘いなんてことは無いと思うのですが・・・

339 名前:_gunzip 投稿日:2001/02/07(水) 17:47
>>338
なんでだろう?
Kondaraペンギン君+Perl5.005でエラー無し。
まさか、Perl4なんて事はありませんよね。
perl -v はどうなります?

#はずしていたらごめんね。


340 名前:338 投稿日:2001/02/07(水) 18:05
ぎょえ〜 version 4.0だぁ!!
ちゃんとPerl5も導入済みって書いてあるのに>レンタルサーバ
これって利用者側じゃどうにもならないのかな・・・

>>339
ズバリ、大当たりでした(^^;

341 名前:338 投稿日:2001/02/07(水) 18:08
perl5 -wc dbtest.pl で解決しました


342 名前:_gunzip@おでかけ 投稿日:2001/02/07(水) 18:12
>>340-341
それはよかったです。
#こんな所でエラーが出るなんておかしいな〜って思ったので。


343 名前:名無しさん 投稿日:2001/02/07(水) 20:59
バナー表示つき自動登録型リンク集のスクリプトを改造しています。
大きいバナーを貼られてレイアウトが崩れると困るので、
バナーの横幅を取得して一定のサイズ以上だったらIMGタグで幅指定して
縮小表示をしたいのですが画像サイズ(pixel数)を調べる方法はありますか?

344 名前:343 投稿日:2001/02/07(水) 21:18
既出でしたすみません。逝ってきます…

345 名前:名無しさん 投稿日:2001/02/07(水) 23:25
WINDOWS me用のPerlが入手したくてリンクをいろいろ
見て回ったんですがそれらしきものが見つからないんです。
ひょっとしてme用のPerlって存在しないんですか?

346 名前:_gunzip 投稿日:2001/02/07(水) 23:31
>>345
http://www.activestate.com/Products/ActivePerl/Download.html
http://www.activestate.com/download/ActivePerl/Windows/5.6/ActivePerl-5.6.0.623-MSWin32-x86-multi-thread.zip
#Windows Me: No additional requirements


347 名前:名無しさん 投稿日:2001/02/08(木) 02:12
あらかじめキーが決まっていて、なおかつキー名は自由に決められるとき、
scalar %hash で出てくる x/y の x を大きく、y を小さくするよう
調整するのって、意味がありますか?


348 名前:名無しさん 投稿日:2001/02/08(木) 02:14
あ、キーが決まっていてというのはキーの数が一定という意味です。

349 名前:名無しさん 投稿日:2001/02/08(木) 04:16
意味不明

350 名前:名無しさん 投稿日:2001/02/08(木) 07:09
確かに意味不明

351 名前:名無しさん 投稿日:2001/02/08(木) 08:20
具体例を示せ!

352 名前:345 投稿日:2001/02/08(木) 11:27
>_gunzipさん
ありがとうございました。無事ダウンロードすることができました。
英語ばっかりで訳がわからないけどなんとかやってみます。




353 名前:名無しさん 投稿日:2001/02/08(木) 12:40
Perlで音を出すことって出来ないでしょうか。
処理が終了したときにちーんと鳴らしたいのですが。

354 名前:_gunzip 投稿日:2001/02/08(木) 13:49
>>353
-----
print "\a";
-----
use Tk;
MainWindow->new->bell;
-----
use Win32::Sound;
Win32::Sound::Volume('100%');
Win32::Sound::Play("itteyosi.wav");
Win32::Sound::Stop();
-----
まだあるかも。

355 名前:_gunzip 投稿日:2001/02/08(木) 13:57
http://www.bright.net/~dlphilp/linuxsound/one-page.html
この辺りを見ますと、Perl+音楽って結構ありますね。
関係ありませんのでsage

356 名前:352 投稿日:2001/02/08(木) 17:56
うがぁぁぁぁぁぁぁ!!!perlをダウンロードしたのに使い方が
さっぱりわかりません。
まず圧縮されてるから普通のフォルダにいれかえて圧縮をなくし
てからinstallのアイコンをいじったらDOSの画面になったので
適当にYESにしてたら最後にThank you for installing ActivePerl!
って表示されたんですがこれでいいんですか?
この後どうやって使えばいいんでしょうか?

357 名前:名無しさん 投稿日:2001/02/08(木) 18:19
>>356
あとは自分の書いたスクリプトの頭のperlの位置を指定するだけだ
#!/usr/local/bin/perl こういうやつな

358 名前:_gunzip 投稿日:2001/02/08(木) 18:27
>>356
コマンドラインからperl -v と叩いて
This is perl, v5.6.0
云々と表示されればインストールは成功して使える状態になっています。
表示されなければperl.exeのあるディレクトリにパスを通して再度トライ。
それが出来たら
perl myscript.pl
でperlにスクリプトを食わせてやればいいと思います。

あ、もしかして
http://www.activestate.com/download/ActivePerl/Windows/5.6/ActivePerl-5.6.0.623-MSWin32-x86-multi-thread.msi
の方がよかったかな。


359 名前:356 投稿日:2001/02/08(木) 19:11
ありがとうございます。
>357
DOSに#!/usr/local/bin/perlみたいなものを書いて打ち込むと
いうことでしょうか?
>コマンドラインというのはDOSのことでしょうか?

たびたびすいません。。

360 名前:名無しさん 投稿日:2001/02/08(木) 20:59
ごめん、説明不足だったか?
スクリプトの冒頭だよ、HELLO!!とか表示するスクリプト
ない?

ひょっとして自分のPCに入れてる?
http://www.kent-web.com/www/
で一通り解説してくれてます。

>>358さんのやつ落としてCドライブにでもc:\usr/localって
フォルダつくっといて解凍してやれば#!/usr/local/bin/perlで
OKだよ

361 名前:名無しさん 投稿日:2001/02/09(金) 09:30
Windows98上でPerlを動かしています。
今Perlを本を読みながら勉強しているのですが、
ファイルの情報を取得する所で行きづまっています。
指定したファイルがリードオンリーであるかどうかを調べて、
そうなら解除するようなサブルーチンを書きたいのですが
本を見るとstat()でよく分からない属性(?)はとれるようですが
どこにもそのようなことは書いてないのです。
なんか分かりにくい文で済みませんが、どなたか答えて
くれるとありがたいです・・・


362 名前:_gunzip@病院 投稿日:2001/02/09(金) 10:31
>>361
Win32::Fileモジュールを用いれば、ファイル/ディレクトリ
の属性情報を取得・設定することができます。
98とのことですので恐らくActivePerlでしょうし、それならば
Win32::Fileモジュールは既にインストールされていると思います。
#詳しくはドキュメントを参照されると良いかと。

363 名前:名無しさん 投稿日:2001/02/09(金) 17:30
親切な人が多くてイイスレだね

364 名前:361 投稿日:2001/02/09(金) 17:50
>>362
ありがとうございます。
GetAttributes()とSetAttributes()で出来そうなのでこれから試してみます。


365 名前:361 投稿日:2001/02/09(金) 19:22
やってみたのですが、
GetAttributes($file,$attrib);
で$attribには妙な数字しか入りません
これをどうすればよいのでしょうか。
どうも質問ばかりですみません。

366 名前:359 投稿日:2001/02/09(金) 19:28
>360
ありがとうございます。見てきます。。
明日一日かけて頑張ってみます。。。

367 名前:サゲ茶漬け 投稿日:2001/02/09(金) 20:00
>>365
やったこと無いから想像だけど、
$attribと何らかの定数の&を取って
属性が設定されているか調べたりするんじゃないかな☆

368 名前:_gunzip@病院 投稿日:2001/02/09(金) 20:04
>>365
Win32::Fileからは以下の定数がexportされています。
----------
ARCHIVE
COMPRESSED
DIRECTORY
HIDDEN
NORMAL
OFFLINE
READONLY
SYSTEM
TEMPORARY
----------
ですから、これを用いて
use Win32::File(GetAttributes,SetAttributes);
$target = "mona.txt";
GetAttributes($target,$attrib);

$directory = $attrib & DIRECTORY;
$archive = $attrib & ARCHIVE;
$compressed = $attrib & COMPRESSED;
$readonly = $attrib & READONLY;
$hidden = $attrib & HIDDEN;
$normal = $attrib & NORMAL;
$offline = $attrib & OFFLINE;
$temporary = $attrib & TEMPORARY;
$system = $attrib & SYSTEM;

で取得できます。

#中途半端だけれど、ちょっとここんとこまで
#NTならWin32::FileSecurityの方がいいのかな


369 名前:_gunzip@病院 投稿日:2001/02/09(金) 20:07
ん かぶった。
ちなみに & はビット毎の論理積を取る演算子ね。


370 名前:名無しさん 投稿日:2001/02/09(金) 21:14
//samp{
Login
Passwd
//}
//cmd{
●f tako
//}
//h

という中身のテキストファイルを

<b>
samp
Login
Passwd
</b>
<i>cmd
●f tako
</i>

に変換するのって

while(<>){
tr/\r\n//d:
if (m#^//cmd{(.*)//}}$#m){
print "<i>$1</i>\n";
}
else {
print "$_\n";
}
}


を改良してなんとかする方法はないものでしょうか?

371 名前:名無しさん 投稿日:2001/02/09(金) 21:26
それってフィルタってことか。ちょっと難しいなあ。
置換じゃダメなのか・・。

372 名前:_gunzip 投稿日:2001/02/09(金) 21:33
638訂正
use Win32::File;
$target = "mona.txt";
&Win32::File::GetAttributes($target,$attrib);
以下同じ

373 名前:名無しさん 投稿日:2001/02/09(金) 22:08
>>370
どんな風に変換するのか、もっと具体的に書いたほうがいい。
でないと、どうともとれるから書きようがない。


374 名前:名無しさん 投稿日:2001/02/09(金) 22:21
>>370
確かに、規則がわからん。
何かのバッチ処理用スクリプトかなんかか?

375 名前:370 投稿日:2001/02/09(金) 22:32
//samp{
Login
Passwd
//}
//cmd{
●f tako
//}
//h

のようなプレーンテキスト(?)をhtml化してその際、
//**{ や //}をhtmlタグに変換したいのですが、
//samp{

//cmd{
を別々のタグにしつつ、対応する}//を終了タグとして利用、
Login やPasswd を上手く間に入れるという
アイディアが浮かばなくって・・・。ヘンな質問ですみません。




376 名前:370 投稿日:2001/02/09(金) 22:36
すみません、書き込み間違ってました。
"対応する}//"ではなくて、”対応する//}”でした。

377 名前:名無しさん 投稿日:2001/02/09(金) 22:36
>>375
最後の//hってなに?

378 名前:名無しさん 投稿日:2001/02/09(金) 22:53
&nbsp;aaaaaaa&nbsp;aaaa&nbsp;&nbsp;&nbsp;aa

379 名前:_gunzip 投稿日:2001/02/09(金) 22:55
>>375
こんなのかなあ。
#三分ほどしか、時間をかけていないので汚い.......
#バグったりするかも。

#!/usr/bin/perl -w

%tag = (
&nbsp;&nbsp;"samp" => "b",
&nbsp;&nbsp;"cmd" => "i"
);

while(<>){
&nbsp;&nbsp;chomp;
&nbsp;&nbsp;if(m#^//(.+){$#){
&nbsp;&nbsp;&nbsp;&nbsp;my $cmd = $1;
&nbsp;&nbsp;&nbsp;&nbsp;die "unknown command: $cmd" if not defined $tag{$cmd};
&nbsp;&nbsp;&nbsp;&nbsp;print "<$tag{$cmd}>\n$cmd\n";
&nbsp;&nbsp;&nbsp;&nbsp;while(<>){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chomp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($_ eq "//}"){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print "</$tag{$cmd}>\n";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print $_ , "\n";
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;}else{
&nbsp;&nbsp;&nbsp;&nbsp;#error
&nbsp;&nbsp;}
}


380 名前:名無しさん 投稿日:2001/02/09(金) 23:37
↑大体それでいいんじゃないかなあ。
#ちょっと違うところがあるけど。

381 名前:_gunzip@おやすみ 投稿日:2001/02/09(金) 23:53
↑直して〜

372の訂正
誤 >638訂正
正 >368訂正

382 名前:名無しさん 投稿日:2001/02/10(土) 04:29
ここのスクリプトhttp://www.zero-web.net/とか
Carl氏のスクリプトがベースになってるスクリプトだと
ローカルで稼動実験できないんですけど何故でしょうか?
バーチャだと動くのに自分の立てた鯖だと動いてくれないんです。
HTTPdとActivePerl使って動かしてます。OSはWin98SEです。

383 名前:500_Internal_Server_Error 投稿日:2001/02/10(土) 05:31
>>382
最初の状態ではWinでは動きません(ってことはないけど)
動かすならとりあえずUNIX鯖へアップしてダウソしたものを
初期化して動かせばWinでも動いたよ。

ちょっと意味わからんかもしれんがね。

384 名前:名無しさん 投稿日:2001/02/10(土) 11:27
ローカルのWinマシンでPerlのCGI動作確認をする場合、
IISやPWSじゃなくて、ApacheやAn HTTPDを使うメリットって
何かあるんですか?

ApacheだとWinでも#!のperlパスを読んでくれるってきいたけど、
大抵ローカルとリモートではディレクトリ構成が違うから
かえって1行目の#!パスを書き換える手間がかかると思う。
どうなんでしょう。

385 名前:名無しさん 投稿日:2001/02/10(土) 12:12
書き込みをして「クッキーONにしてちょ」とエラーが出る板がありますが
これはどういう処理なんでしょうか?
ブラウザがクッキーを受け取らない設定にしているというのは、どうやって
判断していますか?
クッキーを渡す→すぐに読みとる→読みとれない→「クッキーONにしてちょ」?


386 名前:名無しさん 投稿日:2001/02/10(土) 12:59
>>385
ブラウザがcookieを背負って来ないから、食わず嫌いだと分かる。

ブラウザがあるドメイン(ということにしておこう)から投げられたcookieを
食べると、そのドメインにアクセスするとき、cookieの賞味有効期限内で
あれば、ブラウザはHTTP requestのヘッダにcookieの内容を入れてオーダーする。

サーバー側では、受け取ったリクエストのヘッダ中にcookie情報があるか
どうかでお馴染みさんか一見さんかを判断できる。


387 名前:365 投稿日:2001/02/10(土) 13:15
>>368-369 >>372
ありがとうございます。できました。
その誤自分でいじくっていると、
「ある属性が設定されていないとき、その属性を設定する」
という事は"|"で出来たのですが、ただ
「ある属性が設定されているとき、その属性を解除する」
ことができません。質問の丸投げのようで困ったことなのですが
知っている方がいましたら、教えてください。(すみません)


388 名前:387 投稿日:2001/02/10(土) 13:16
間違えました。
その誤 -> その後
>>367 さんもありがとうございます。

389 名前:_gunzip@起きた 投稿日:2001/02/10(土) 13:32
#>>387
#ビット毎の排他的論理和をとる^を用いてください。
#下に簡単な例を挙げますので、参考までに。

#----------#
#サンプル:attrib -r /s と同じ事を行うスクリプト
#エラーが出ても、保証はなーもございません。

#!/usr/bin/perl -w

use File::Find;
use Win32::File qw/SetAttributes GetAttributes READONLY/;

@ARGV == 0 and push(@ARGV,".");

&find(sub {
&nbsp;&nbsp;&nbsp;&nbsp;my $attrib = 0;
&nbsp;&nbsp;&nbsp;&nbsp;GetAttributes($_,$attrib) or die $!;
&nbsp;&nbsp;&nbsp;&nbsp;if($attrib & READONLY){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetAttributes($_, $attrib ^ READONLY) or die $!;
&nbsp;&nbsp;&nbsp;&nbsp;}
},@ARGV);
#attrib.pl


390 名前:385 投稿日:2001/02/10(土) 13:57
>>386
ありがとうございます。

>サーバー側では、受け取ったリクエストのヘッダ中にcookie情報があるか
>どうかでお馴染みさんか一見さんかを判断できる。

A.クッキー背負ったおなじみさん(cookie は有効の設定)
B.クッキー背負っていない一見さん(cookie は有効の設定)
C.クッキー背負っていない一見さん(cookie は無効の設定)
D.前回書き込みのcookieは持っているが、今回は無効の設定にしてあるおなじみさん

Aは、普通に書き込めるのは理解できます。
しかし、BとCとDの違いの判定は、どのようにやるのでしょうか?

391 名前:&&の人 投稿日:2001/02/10(土) 14:50
こんにちは。この前は質問に答えていただいてありがとうございました。
またしても初心者っぽい質問なのですが・・・・・

掲示板のコメントの長さ(改行数)を制限したいのですが、行き詰まってしまいました。
コメントは$FORM{'art'}の中に代入されています。
だから、$FORM{'art'}の中にある<BR>の数を数えればいいのかなぁ、
と、考えてみたりもしました。
そこでその方法を、乏しすぎる知識の中から強引にひねりだしてみようと思ったのですが、
残念ながらひねりだせませんでした。

改行の数をbrに代入しようとして、
    br=0;
    if($FORM{'art'}=~ /\n/){
    br=br+1;
    }

なんて考えてみたんですが、ダメダメですよね(汗
ていうか、<BR>って\nでいいのかわからないし、
もしよかったとしても、br=1にしかならないし・・・・・・・ 恥。
見当違い炸裂でダメダメなのはわかりますが、
どうしたら良いのかわかりません(TT)

どなたか、コメントの改行数を制限する方法をご存知でしょうか?
どうか教えてください。ヒントだけでもお願いします。

392 名前:&&の人 投稿日:2001/02/10(土) 14:52
訂正
br→&br
でした・・・・・・

393 名前:&&の人 投稿日:2001/02/10(土) 14:53
しまった・・・・・・
br→$br
ウツダシノウ

394 名前:AyuMoe(JAPU) 投稿日:2001/02/10(土) 16:00
$nlines = ($FORM{art} =~ tr/\n//);
# $FORM{art} 内にある改行コードの数を数える。

必要あれば、事前に
s/\r\n/\n/g;
tr/\r/\n/;
しておくように。

395 名前:&&の人 投稿日:2001/02/10(土) 16:45
>>394
ありがとうございます。やってみます。
それ!

396 名前:&&の人 投稿日:2001/02/10(土) 17:11
なんだか普通に何行でも書き込めてしまうのですが、
やり方は、

# コメントの改行数を制限するのさ!
    $FORM{'art'}=~ s/\r\n/\n/g;
    $FORM{'art'}=~ tr/\r/\n/;
    $nline=($FORM{'art'}=~ tr/\n//);
    if($nline>$art_kaigyousuu){
    &error($ERR_READ, 'コメントが長すぎます');
    exit;
    }
こんな感じであってるのでしょうか?
もうちょいいろいろやってみます。

397 名前:&&の人 投稿日:2001/02/10(土) 17:13
あ、書き忘れていましたが
$art_kaigyousuu は、事前に設定しています(汗


398 名前:IP抜きいやん。 投稿日:2001/02/10(土) 17:51
他プロコトルからのIP抜きCGI、これを防ぎたい!
http://www.tok2.com/home/pat/ipget.html

タイプ1は、ハイパーターミナルを移動させて避けました。

タイプ2では、タイプ1で表示されなかった
「FTPフォルダエラー」というウィンドウが開きます。
ftpがつながっているようなのですが、
どこをいじればIPが抜けないようになるんでしょうか?

またタイプ2のログにメアドは出ませんでしたが、
IPの他にPASSという値も表示されます。
これも防ぐことができますか?
000.000.000.000:PASS ***@

別プロトコルでIPを抜く
http://tako.2ch.net/test/read.cgi?bbs=perl&key=958649218
過去ログ発見、しかし見れません(×Д×)

Perlと関係無くて申し訳無いっす。

399 名前:&&の人 投稿日:2001/02/10(土) 18:15
試しに
$nline=($FORM{'art'}=~ tr/\n//);
ではなく、
$nline=($FORM{'art'}=~ tr/a//);
と変えて、
aの数で制限してみたら、制限できました。
なんか少しわかってきたかも。ささやかに嬉しい♪
でも、改行の数は数えられないのはなぜ・・・・
もうちょっと試行錯誤してみます。ありがとうございました!


400 名前:&&の人 投稿日:2001/02/10(土) 19:51
で、できない・・・・・・
とりあえず、飯食います。

401 名前:387 投稿日:2001/02/10(土) 22:52
>389
有り難うございます。出来ました。
いろいろな物があるものですね........

402 名前:◆☆◆ぴろぴとゆーげんちゅ◆☆◆ 投稿日:2001/02/10(土) 23:14
ヽ(´∇`)ノ<☆ここはみんなしんせつさんだね〜
        うれしいう〜

403 名前:名無しさん 投稿日:2001/02/11(日) 02:00
>400
数えられるハズ。
数える前に $FORM{'art'} =~ s/\n/<br>/g;
なんてやってなければ。

404 名前:名無しさん 投稿日:2001/02/11(日) 11:19
文字列形式のCSVの6番目の要素を1行で取り出したい。

@data = split(/,/, $str);
$five = $data[5];

を1行にするには?

405 名前:名無しさん 投稿日:2001/02/11(日) 11:22
掲示板CGIのHTML部分にSSIを利用した
アクセス解析を埋め込むのは可能でしょうか?
public_html
|
|-- index.html (対象ファイル)
|
|--/analyze/
|
|-- bar.gif
|-- blank.gif
|-- analyze.cgi <755> (ログを集計するCGIプログラム)
|-- log.pl <755> (ログを採るSSIプログラム)
|
|--/log/ <777> (ログフォルダ)

index.html (対象ファイル)の部分を、 **.cgiに
したいのです。**.cgiのHTML部分に埋め込む
SSIは、&lt;!--#exec cmd="./analyze/log.pl"--&gt;
じゃ駄目ですよね?いろいろ調べてみたけど判りませんでした。
ご存知の方がいらっしゃいましたら、どうかよろしくお願い致します。m(__)m





406 名前:_gunzip 投稿日:2001/02/11(日) 12:07
>>404
$five = (split(/,/,$str))[5];


407 名前:&&の人 投稿日:2001/02/11(日) 15:27
掲示板のコメントの改行数の数え方で悩んでいた者ですが、
みなさん本当にありがとうございました。

403さんのおっしゃる通り、ずっとはじめのほうに、
$FORM{'art'} =~ s/\n/<br>/g;
という行がありました。
そこで
# コメントの改行数を制限するのさ!
$nline=($FORM{'art'}=~ tr/<br>//);
if($nline>40){
&error($ERR_READ, 'コメントが長すぎます');
exit;
}
と、<br>の数を数えるようにしたらうまくいきました!

ただ、なぜか制限数が、指定した数の4分の1になるのは気になりますが。
例えば上の例だと、$nline>40なので、10行までしか書けない・・・・・

まあ、「\nではなく<br>を数えているから、こうなるんだろう」と、
強引に納得することにしています(汗

とにかく、自分ひとりで本を読んでいたのでは
絶対にわからなかったり気付かなかったことばかりでした。
みなさんに教えて頂けて本当によかったです。
挫折せずにがんばっていけそうです。
どうもありがとうございました。m(_ _)m



408 名前:_gunzip 投稿日:2001/02/11(日) 17:04
>>407
>まあ、「\nではなく<br>を数えているから、こうなるんだろう」と、
>強引に納得することにしています(汗
いや、そんな納得の仕方は良くないと思いますよ。
*----------*
何故4倍になるのかと言いますと、
>$nline=($FORM{'art'}=~ tr/<br>//);
これは、$FORM{'art'}に含まれる "<","b","r",">" を削除し、削除した数を
$nlineに格納しているからです。ですから、
----------
#!/usr/bin/perl -w
$text = "AAA<BR>AAA<BR>CCC";
$nline = ($text =~ tr/<BR>//);
print $nline;
----------
は2ではなく、8になります。
>指定した数の4分の1になるのは気になりますが
確かに、<BR>(2)の数の4倍ですね。このような場合は良いのですが、別の場合、例えば
----------
#!/usr/bin/perl -w
$text = "AAA<BR>BBB<BR>CCC";
$nline = ($text =~ tr/<BR>//);
print $nline;
----------
この場合、11になります。これでは4倍にしてもうまくいきません.
*-------------*
何故かと言いますと、tr///というのはs///とは違って、
tr/LIST/REPLACEMENT_LIST/
のように用いて、**LISTに含まれる文字全てをREPLACEMENT_LISTの対応する
文字列に変換するもの**だからです。
例を挙げますと、
tr/abc/ABC/
は、
"a" -> "A", "b" -> "B", "c" -> "C"
の変換を行っているわけです。
同じく、
tr/<BR>//
は、
"<" -> "", "B" -> "", "R" -> "" , ">" -> ""
で、"<","B","R",">"を削除しています。
従って、二番目の例でなぜ11となったかというと、"<BR>" x 2(8)に加えて
"BBB"(3)も削除されてしまったからです。(8+3=11)
**間違いの原因は、s///とtr///の違いを知らなかったこと**に依るのでしょう。
もっと詳しいことは、ラクダ本などを参照されたほうが理解が進むと思います。
(というか、忙しいんで。ごめん)
【Perl,CGI】参考書籍 http://tako.2ch.net/test/read.cgi?bbs=perl&key=970166109


409 名前:_gunzip 投稿日:2001/02/11(日) 17:05
*-------------*
この場合(つまり$FORM{'art'}の改行数を数え、改行を<BR>に変換する)、
以下のように改造すればいいと思います。
-------------
#前にある$nline=($FORM{'art'}=~ tr/<br>//); は削除すること。
$FORM{'art'} =~ s/\r\n/\n/g;
$FORM{'art'} =~ tr/\r/\n/;
$nline=($FORM{'art'}=~ s/\n/<BR>/g); #←ここ
if($nline>$art_kaigyousuu){
&error($ERR_READ, 'コメントが長すぎます');
exit;
}
-------------
#アホみたいに長くなった......割に内容がないなあ.
#間違ってたらつっこんで下さいです。


410 名前:名無しさん 投稿日:2001/02/11(日) 18:15
Windows環境で,Perlのデバッガは使えますか?


411 名前:&&の人 投稿日:2001/02/11(日) 22:56
>>_gunzip さん
おお!なんかすごい!
わかりやすく書いてくれてありがとうございます。
謎が解けていく感じで気持ちいいかも。
_gunzip さんの文をプリントアウトしてじっくり読んでみます。
どうもありがとうございます!
(ラクダ本とは、参考書というほどの意味だと思って良いのでしょうか?)

412 名前:tar 投稿日:2001/02/11(日) 22:58
>>410
使えます。っていうか、とりあえずインストールしてから訊けばいいのに。

413 名前:&&の人 投稿日:2001/02/11(日) 23:29
>>_gunzip さん
うまくいきました!
なるほど、ああやれば改行の数も数えられて、
さらに<br>にも変換できるんですね。
お忙しいのに、
あのようなわかりやすい説明をたっぷりと書いてくださって
本当にどうもありがとうございました!

414 名前:名無しさん 投稿日:2001/02/12(月) 05:10
フォームメールでブラウザ上から入力されたメルアドに
メールを送る方法があるそうですが、どうやればいいん
でしょう?
$mailto = '$FORM{'EMAIL'}';
としてもうまくいきませんでした。

ちなみに悪用防止の為実際使う時は<input type=hidden>
にします。

415 名前:むぎ茶 投稿日:2001/02/12(月) 05:45



<input type=hidden> にしてもイタズラできますが。ぷ

┐(´ー`)┌


┏━━━━━━━━━┓
┃('Д')y ─┛~~ ┃
┃むぎ茶      ┃
┃mugicha@360.cc  ┃
┗━━━━━━━━━┛
http://www.freeml.com/ml_info.php?ml=bitvalley


416 名前:AyuMoe(JAPU) 投稿日:2001/02/12(月) 05:53
'...' と "..." の違いを学習しよう。
あと、hiddenにしてもイタズラに使われるのは同じ。
外部から与えられた入力を信用してはいけない。

417 名前:名無しさん 投稿日:2001/02/12(月) 16:06
open(FILE,"+>file.txt");
print FILE "line1\n";
print FILE "line2\n";
seek(FILE,0,0);
while( <FILE> ){ print }
close(FILE);

とすると、どんな環境でもきちんと
line1
line2
と表示されるのでしょうか?
というか、Windowsではできたのですが、
やっぱり $| = 1 をしたほうがいいでしょうか。

なんか print しても実際ファイルに書き込まれるのは
ファイルを閉じた時、という話を聞いたもので…。


418 名前:名無しさん 投稿日:2001/02/12(月) 17:15
自分のところの会員ファイルで任意にメールアドレスをいれてもらって
いたんですが規則性のない羅列からメールアドレスだけをとりだすのに
いい方法はありませんか?
データファイルはCSV形式です

419 名前:名無しさん 投稿日:2001/02/12(月) 20:20
>>418 何か知らんが適当に/[-a-zA-Z0-9_]+@[-a-zA-Z0-9_]+/

420 名前:名無しさん 投稿日:2001/02/12(月) 21:41
バイトを雇って作業させる。

421 名前:414 投稿日:2001/02/12(月) 23:39
>416
とりあえずレスありがとうございます。
$mailto = '$FORM{"EMAIL"}';
としたら「送信」はできましたが、肝心のメールが届きません。
まだどこか間違ってるのでしょうか。あるいは他に書き換えなけ
ればいけない所があるんでしょうか?

それにしても送信されたメールはどこへ・・・

422 名前:名無しさん 投稿日:2001/02/12(月) 23:43
>>421
それだけでは何も分かりません。

423 名前:414 投稿日:2001/02/12(月) 23:43
あとイタズラ防止の為に<hidden>に加えてフレーム
使おうと思ってますがどうでしょう?

424 名前:名無しさん 投稿日:2001/02/12(月) 23:45
>>423
フレーム使うとどうなるの?

425 名前:414 投稿日:2001/02/13(火) 00:14
ここにスクリプト置いてあるんで、よければご覧に
なってアドバイス下さい。
http://users.goo.ne.jp/hiro-1977/a_cgi.htm

>424
タグ隠せるでしょう。
フォーム

426 名前:名無しさん 投稿日:2001/02/13(火) 01:17
>>425
416でjapuさんが仰っていることをよく読みましょう。


> タグ隠せるでしょう。
> フォーム

意味不明です。

427 名前:414 投稿日:2001/02/13(火) 01:28
なんとか成功しました。
厨房ですいません。\の使い方間違ってたようです。

>426
途中で送信しちゃいました。

逝ってきます。

428 名前:あき 投稿日:2001/02/13(火) 01:39
全角の"─"を取り除くため
$item =~ s/―――――//g;
とするとErrorになるんです。

$item =~ s/━━━━━//g;
は問題ないんですけど。

"─"ってどう記述すればいいんでしょう?
誰か教えてください。お願いします。


429 名前:AyuMoe(JAPU) 投稿日:2001/02/13(火) 01:52
>> 421
$moe = "ayu\n";
print '$moe';
print "$moe";
でシングルクオートとダブルクオートの違いを学びましょう。

>> 425
http://users.goo.ne.jp/hiro-1977/a_cgi.htm
このソース、とりあえずコンパイルエラーでるんだけど。
あと、注意しないと外部から任意のコマンド実行可能にできちゃうので注意。
せめて、先頭を #! /usr/local/bin/perl -wT にしよう。
# というか、goo.ne.jp (NTT-X) は逝ってよしなので使うなよ。:-)

>>428
1. それはShift_JISで記述している。
2. "―" の2バイト目は \ である。
3. 現在のPerlは、文字列はバイトごとに見る。
なので、エラーになる。さて、どうすれば良いかというと、
さくせんその1. EUC-JPで書く
さくせんその2. s/―\―\―\―\―\//g;
さくせんその3. s/\Q―――――//g;

430 名前:421 投稿日:2001/02/13(火) 02:15
AyuMoe(JAPU) さんありがとうございます。おかげでうまく行きました。

例のスクリプトは途中をはしょっちゃってるんでエラーが出たのだと
思います。わざわざ見て頂いて申し訳ありませんでした。

431 名前:あき 投稿日:2001/02/13(火) 03:01
>>429
i-mode用なのでEUCで書くわけには行かないです。
2番でやるとErrorにはならないけど"―"が置換できないみたい。
3はエラーになっちゃうな。
とりあえずありがとうございます。

432 名前:ayumoe 投稿日:2001/02/13(火) 03:21
>>431
あぁ。すまん。そりゃ、3. はエラーになるわな。

で、2. は問題なく動くぞ。
#! /usr/bin/perl -w

$_ = 'Ayu―――――Moe';
s/―\―\―\―\―\//g;
print;
print "\n";

__END__

i-mode だからって、内部コードをeuc-jpにしてはいけないということはない。
jcode / Jcode 使えば良いだけの話。

433 名前:名無しさん 投稿日:2001/02/13(火) 08:52
win95上でperldocをよく使うんですが、perldocでは逆スクロールが効かないんですね。
前の方を読み直そうと思うと、また起動しなくてはいけないのですけど、なんとかなりませんか。


434 名前:あき 投稿日:2001/02/13(火) 10:18
>>432
ありがとうございます。
調べてみると、
"─" と "―"
は見かけは同じだけど違うようですね。
16進のコードは、前者は "84 9F"、後者は"81 5C"。
"\"は"5C"ですね。

435 名前:名無しさん 投稿日:2001/02/13(火) 10:45
僕は最近ホームページを作ったんですが
投稿者とか投稿時間など表示や記録されない
一言伝言板みたいなものを設置したくて
参考書を見て勉強したんですが
入力フォームから受け取った日本語の文字を
処理するにはcgi-lib.pl、jcode.plが必要と
書いてあったんですがその本を最後まで
調べてみるとcgi-lib.plは使用の際に
著作者の表示などの他にクレジットの付加
って書いてあったのでお金をはらわないといけないと
思いましたのでjcode.plをまた違う本のサンプルCDから
入手したんですがjcode.plも有料ですか?
参考書によってはサンプルスクリプトを使用する際に
商用ページ使用可能で再配布もOKという本もありますし
個人で使用するのにもファイルに著作者表示必要とかいて
ある本もありますが各本の部分的なソースコードを
混ざって出来たスクリプトは誰の著作になるんでしょうか?
ファイルに各著作者の名前を入力する必要があるんでしょうか?
あと最後に改造したり一から書いたCGIが原因でプロパイダの
サーバーがダウンする可能性があるとプロパイダの説明ページで
見たんですが最低限サーバーがダウンしないようにする
安全策みたいなものはありますか?
長文大変失礼しました。
よろしくお願いします。

436 名前:名無しさん 投稿日:2001/02/13(火) 10:55
ですがですがですが…

落ち着け。

437 名前:_gunzip 投稿日:2001/02/13(火) 11:05
>>433
#perldoc.bat を何となく眺めただけやから、間違っとるかもしれへん
24: my @pagers = ();
25: push @pagers, "more /e" if -x "more /e";
490: push @pagers, qw( more< less notepad );
491: unshift @pagers, $ENV{PAGER} if $ENV{PAGER};
523: unshift @pagers, $ENV{PERLDOC_PAGER} if $ENV{PERLDOC_PAGER};
で、起動するページャのリストを作って、
page($tmp, $no_tty, @pagers);
で@pagersの中のものを
foreach my $pager (@pagers) {
last if system("$pager $tmp") == 0;
}
で一つずつ$temp(テンポラリファイル名)を食わせて試している
わけだから、moreの代わりにlessを呼びたいなら、490行目の
push @pagers, qw( more< less notepad );

push @pagers, qw( less もれ< notepad );
とするか、環境変数'PAGER'か'PERLDOC_PAGER'にlessをセットすればいいと思う。
(優先順位は、当然ながらPERLDOC_PAGER > PAGERやね)

#dosのmoreって、バックスクロールできなかったっけ(忘れた)


438 名前:_gunzip 投稿日:2001/02/13(火) 11:12
>>433
って、perldoc perldocを読んだら、
----------
C<perldoc> will use, in order of preference, the pager defined
in C<PERLDOC_PAGER>, C<MANPAGER>, or C<PAGER> before trying to
find a pager on its own. (C<MANPAGER> is not used if C<perldoc>
was told to display plain text or unformatted pod.)
One useful value for C<PERLDOC_PAGER> is C<less -+C -E>.
----------
ってはじめから書いてあるやん。結局、
SET PAGER=less か、
SET PERLDOC_PAGER=less
とすればlessで読めると思います。


439 名前:名無しさん 投稿日:2001/02/13(火) 12:23
既存のCGIの改造しようと思ってんだけど
何て本買ったらいい?

440 名前:名無しさん 投稿日:2001/02/13(火) 18:03
>>435
cgi-lib.plもjcode.plも、
勝手に使っていいんじゃないの?
おれ使ってたけど、まずいのかな?

441 名前:名無しさん 投稿日:2001/02/14(水) 01:18
>439
KENTと作ろう楽しいCGI

442 名前:439 投稿日:2001/02/14(水) 01:36
>441
KENTで配布してるCGIでなくても
改造に役立つん?

443 名前:名無しさん 投稿日:2001/02/14(水) 06:01
取りあえず聞くけど、こんなデータファイルがあって、
始めの名前でソートして、あと、kanriって名前のものだけ
先頭に持ってくるよなことはできっか?

-----data.txt-----
tomo,0,55,tomo@aaa.net
kanri,0,55,kanri@aaa.net
pumo,2,95,tomo@aaa.net
tomo,0,455,tomo@aaa.net
mm,5,55,mm@aaa.net
tomo,0,55,tomo@aaa.net
mo,0,55,mo@aaa.net
tomo,3,55,tomo@aaa.net
tomo,0,75,tomo@aaa.net
kanri,0,56,kanri@aaa.net
tomo,1,90,tomo@aaa.net
kanri,2,55,kanri@aaa.net
-----------------


444 名前:_gunzip 投稿日:2001/02/14(水) 06:12
>>443
@array = map{$_->[0]}
sort{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$a->[1] eq 'kanri' ? -1 : $b->[1] eq 'kanri' ? 1 : $a->[1] cmp $b->[1]
}
map{[$_,split(/,/)]} <>;


445 名前:443 投稿日:2001/02/14(水) 06:17
↑わけわからん。
誰かもっと答えろ(w

446 名前:名無しさん 投稿日:2001/02/14(水) 06:40
>>445
>444がちゃんと書いてくれてるだろ。
それで上手く動いたぞ。
コードが理解できないのはお前がアホだから。
消えさらせ


447 名前:_gunzip 投稿日:2001/02/14(水) 06:42
>>445
ん?まずかったか?
どの辺りが分からないのか言ってくれ。

448 名前:名無しさん 投稿日:2001/02/14(水) 06:54
>445=443
あとは読み手のレベルの問題だよ。

449 名前:名無しさん 投稿日:2001/02/14(水) 08:59
ほへ〜、こんな書き方もできるのか…さすがはPerl。
TIMTOWTDIってのかな?感服。
自分はPerl厨房だからか知らないけど、やっぱり違った流儀で
書いてしまうな。

open&nbsp;(IN,"<hoge.txt");
while&nbsp;(<IN>)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;push&nbsp;(@array,$_);
}
close&nbsp;IN;
@array=sort{&compsub($a,$b)}&nbsp;@array;

#ユーザ名比較サブルーチン
sub&nbsp;compsub
{
&nbsp;&nbsp;&nbsp;&nbsp;my&nbsp;($temp1,$temp2);
&nbsp;&nbsp;&nbsp;&nbsp;($temp1,)=split(/,/,$_[0],2);
&nbsp;&nbsp;&nbsp;&nbsp;($temp2,)=split(/,/,$_[1],2);
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($temp1&nbsp;eq&nbsp;'kanri')&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1;
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;elsif&nbsp;($temp2&nbsp;eq&nbsp;'kanri'){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;1;
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$temp1&nbsp;cmp&nbsp;$temp2;
&nbsp;&nbsp;&nbsp;&nbsp;}
}


450 名前: 投稿日:2001/02/14(水) 09:02
s/hoge/data/;ね。
ちなみに_gunzipさんのも理解できるようにしたほうが幸せになれるかも。
↑が理解できなければ逝ってよし(w

451 名前:名無しさん 投稿日:2001/02/14(水) 13:09
ここって、Perl/Tkもいいですか?
いま、「Perl/Tk Perlで簡単GUIプログラミング」という本を片手に
Perl/Tkをいろいろいじくっていますが、SwingのJWindowのような
タイトルバー等のない素のウィンドウって、どうすれば出来るのでしょう。
#いや、別に意図はないので、出来なくてもかまわないのですが。
#出来ないですますのもなんなんで。
#あんまり、ptkやってる人見かけないから、どこに聞けばいいのやら。



452 名前:_gunzip 投稿日:2001/02/14(水) 13:59
>>450
フォローどうも。
やっぱり、? - : - を二回使ったのが悪かったのかなあ。

>>451
overrideredirect(boolean)を使うと、一応の目的は達せられるかと。
>「Perl/Tk Perlで簡単GUIプログラミング」という本を片手に
この本には、p.272に記述があります。
----------
#!/usr/bin/perl -w

use Tk;
$mainWindow = new MainWindow();
$mainWindow->overrideredirect(1);
MainLoop;

----------
ただ、これですと当然ながらCTRL-Cで殺す以外に終了する
術がありませんので、
$mainWindow->Button(
-text => "Exit",
-command => sub {exit(0)}
)->pack();
なんかをつっこんでおくといいかも。
--------------------
参考:
perldoc -m Tk::Wm
--------------------


453 名前:451 投稿日:2001/02/14(水) 14:25
>>452
あ、なるほど。確かに書いてありますね(汗)
ありがとうございます。m(_ _ )m


454 名前:名無しさん 投稿日:2001/02/14(水) 14:49
Toolzはどこにある?

455 名前:水もみ 投稿日:2001/02/14(水) 16:25
はじめまして、よろしくおねがいします。
今いろいろスクリプトを改造してるんですが、掲示板で新規カキコが発生
した時にメールを送るって処理をしたいんですが、sendmailが使えないんです
こういう場合ってどうしたらいいんでしょうか?
socketとかは使えるって話なんで、そっち方面からはいけないのか?
って迷ってます。どんな風にプログラム書いていけばつまってしまったので
助言よろしくおねがいします。


456 名前:名無しさん 投稿日:2001/02/14(水) 18:59
>>455
Net::SMTP

http://member.nifty.ne.jp/hippo2000/

457 名前:名無しさん 投稿日:2001/02/15(木) 02:55
m//を使うときに
$_="ボクハーデンサイー";
$word="ボクハー";
$ret=m/$word/
とかしたとき"ー"が含まれるとエラーになるのはなぜ?
文字コードに戻したりしてからm//やって
回避してんだけどもっと楽な方法ないの?

458 名前:AyuMoe(JAPU) 投稿日:2001/02/15(木) 02:59
やっと某誌の原稿終わった。
で、本題。

>>457
1. "ー" (Shift_JIS) の文字コードを調べてみましょう。
2. 2バイト目が "[" です。
3. perlは1バイトづつ見るのでエラーになります。

# というわけで、/セーラーサターン/ は失敗するのでした。

>>456
Mail::Send 使うのもよいぞ。

459 名前:457 投稿日:2001/02/15(木) 03:24
458>
そうかわかった。ありがとう
S-JISを使う!って条件で
文字コードに一度変換したりする以外に楽な方法はないですかね?

460 名前:( ´ー`)y~~ 投稿日:2001/02/15(木) 03:43
>>459
$_&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;'ボクハーデンサイー';
$word&nbsp;=&nbsp;quotemeta&nbsp;'ボクハー';
$ret&nbsp;&nbsp;=&nbsp;/$word/;

quotemeta は関数名がなんかカコイイので好き…。

ただし2バイト目が \ の文字が最後に来る場合だけは、
陽に '芸能\' のようにやらんと失敗するので注意してね。


461 名前:457 投稿日:2001/02/15(木) 03:52
quotemeta はじめてみた。
芸能\にせないかんってことは、
フォームから送られてきたデータに\をくっつけなきゃいけないってことか。。。。
勉強になりました。
がんばろう

462 名前:ところで 投稿日:2001/02/15(木) 04:32
よくスクリプトをShift_JISで書くことにこだわる人がいるけど
どういう理由なんですか?
EUCで書けば面倒もなくていいのに。


463 名前:( ´ー`)y~~ 投稿日:2001/02/15(木) 04:35
>>461
余計なこと書いてごめん。別に最後に \ をつける必要はないです。
'芸能\' にしなきゃいけないのは、ソースの中に直接書くときだけです。
フォーム入力を取ったりして $word に 「芸能」という文字列がすでに入っている場合は quotemeta で十分。

ソースに直接 '芸能' と書くとエラーになるのはPerlのインタプリタがソースを解釈するときの問題なので、457のような正規表現のエラーとは別物です。


464 名前:名無しさん 投稿日:2001/02/15(木) 04:55
ezweb用のカウンタをレンタルしてくれる所はありませんか?
http://www.counta.com/i/index.html
このサイトのように。(これはimode用)
自分でUPして設置しようと思ったのですがいまいちよくわからなかったので・・・。

465 名前:名無しさん 投稿日:2001/02/15(木) 05:13
$_ = 'test0';
&ftest1;
print "$_\n";

sub ftest1 {
local($_) = 'test1';
&ftest2;
print "$_\n";
}
sub ftest2 {
local($_) = 'test2';
print "$_\n";
}

このスクリプトってやばいですか?
ローカル(Perl5)だと通ったのに
サーバの環境(Perl4)だと2度目のlocal($_)の時点でエラーになるのですが・・・。
ご教授ください。

サブルーチンを呼び出すときに$_を保持させたいけど
無理なんでしょうか?

#サーバとローカルでバージョンが違うのってけっこうむかつく

466 名前:水もみ 投稿日:2001/02/15(木) 10:43
>456さん458さんレスありがとうございます。
ただモジュールをインストールの仕方がわからいのでちんぷんかんぷんです。
サーバがLinuxなもので・・・どうやっていいものやら・・・・
Socketはインストールされているんで、よろしくえればSocketでメール送信
するようなプログラムのアドバイスもらえたらいいなぁ〜って考えてます。

467 名前:名無しさん 投稿日:2001/02/15(木) 12:54
クッキーについて教えてください
クッキーを受け取らなかった場合
他の値を得るようにしたいのですが以下の様にしてもうまくいきません

if (!print &setcookie($QUERY{mode},on)) { &error("クッキー受け取り拒否"); }

一度最初に発行してクッキーの有無を確認する方法を採らないと
無理なのでしょうか?

468 名前:名無しさん 投稿日:2001/02/15(木) 12:58
フリーで多機能で
windowsMEで動くtelnetソフトないですか?
win95とかNTならあるみたいなんですが。
頭のいい方、お願いします


469 名前:サゲ茶漬け 投稿日:2001/02/15(木) 13:49
>>465 サブルーチン

え?
サブルーチーンの間違いじゃ?

470 名前:仕様書無しさん 投稿日:2001/02/15(木) 14:30
Σ(;´д`)なにっ!?

471 名前:名無しさん 投稿日:2001/02/15(木) 15:46
>>469,470
どっちでもいいんだよ

472 名前:名無しさん 投稿日:2001/02/15(木) 16:44
>>462
EUCだとIEはよく文字化けを起こすからでしょ
googleのキャッシュでEUCで書かれたページとか
いちいちエンコードする必要があるでしょ

473 名前:名無しさんしさん 投稿日:2001/02/15(木) 17:14
おしえてください。
いま掲示板作ってて、
とりあえず動くようにはなったんだけど、
掲示板で一定量書き込みがあったら
次のページへってでるやつは
どうやってやればいいんでしょうか?

474 名前:470 投稿日:2001/02/15(木) 17:23
>>471
そういう意味じゃなくてね(^^;
>>465
469の言ってる当事者なら
ここに来ないほうが安全かと思うんだけど

475 名前:_gunzip 投稿日:2001/02/15(木) 18:19
>>466
「Perl モジュール活用ガイド」(翔泳社)3800円
という本のp.159〜183にいろいろ載っているので、後学のためにも
買って読んでみる事をお奨めするよ。
モジュールのインストールについても記載されているし。
#自分は殆どやった事がないから、本の紹介ぐらいしかできないよん。
#ごめんね

476 名前:名無しさん 投稿日:2001/02/15(木) 20:00
んん? >>474
まさか?

477 名前:387 投稿日:2001/02/15(木) 20:17
LWP::UserAgentで取得したHTMLファイルを、HTML::Parserのサブクラスを作ってメソッドをオーバーライドして加工しようと思い、
いろいろマニュアルを見ながらやってみたのですがうまくいきません。
start()やtext()が妙な振る舞いをして、思い通りの出力にならないです。
処理したいのは全て英文なので、漢字コードとかは関係ないような気がします。
何か考えられるようなことはないでしょうか。

478 名前:_gunzip 投稿日:2001/02/15(木) 20:34
>>477
>start()やtext()が妙な振る舞いをして、思い通りの出力にならないです。
具体的に、どのような点が奇妙なのですか?

479 名前:477 投稿日:2001/02/15(木) 22:23
>>478
うまく言えないのですが、ある特定のタグが出現した際に、それ以降を
加工して出力するのですが、明らかにマッチすべきなのにマッチしないのです。
なんか下手な言い方ですげ、すみません。
ソースはくそ長いので貼り付けるとまずそうです。


480 名前:名無しさん 投稿日:2001/02/15(木) 22:41
超初心者です。
if($mode eq 'edit') { &edit; } 〜〜sub edit{〜〜} 〜〜
で、CGIのURLのあとに「?mode=edit」をつけて移動してもうまく実行されません。
なぜ?

481 名前:_gunzip 投稿日:2001/02/15(木) 23:11
>>479
>.明らかにマッチすべきなのにマッチしないのです。
んん?その部分だけでも書いてくれないと、さっぱり分かりません。
あと、まさかと思うけれど、
sub start{
&nbsp&nbsp&nbsp&nbsp;my($tag, $attr, $attrseq, $origtext) = @_;
.......
}
と書いたりしていませんか?
#ところで、ファイルは存在しています?(-e $path)


482 名前:( ´ー`)y~~ 投稿日:2001/02/15(木) 23:16
>>480
foreach( split /&/, $ENV{QUERY_STRING} ){
&nbsp;&nbsp;&nbsp;&nbsp;my( $key, $value ) = split /=/;
&nbsp;&nbsp;&nbsp;&nbsp;*{$key} = \$value;
}

とやるとお望みの動作になります。
…ですがあまり一般的でないので、普通は下のようにします。

foreach( split /&/, $ENV{QUERY_STRING} ){
&nbsp;&nbsp;&nbsp;&nbsp;( $key, $value ) = split /=/;
&nbsp;&nbsp;&nbsp;&nbsp;$form{$key} = $value;
}

if( $form{mode} eq 'edit' ){
&nbsp;&nbsp;&nbsp;&nbsp;...
}


483 名前:名無しさん 投稿日:2001/02/15(木) 23:23
KENT-WEBのYYBBSで
名前の部分が記入されていない時、『名無しさん』と表示できるように
したいのですが、どうすればいいのかさっぱり分かりません。
変数を設定して
変数1 なら名無しさんで投稿
変数2 なら名前が記入されていません のエラーが表示され、投稿できない。
という具合にしたのですが・・・・
どうかお願いします。

484 名前:477 投稿日:2001/02/15(木) 23:26
>>481
あーすぐに解決しました。(有り難うございます_gunzipさん)
>あと、まさかと思うけれど、
>sub start{
> my($tag, $attr, $attrseq, $origtext) = @_;
>.......
>}
>と書いたりしていませんか?
このまさか、でした。ただ単に、オブジェクトへのリファレンスが
第一引数として渡されるのをど忘れしていたようです。
(なので、一つずつずれていました。)どうも、たびたび質問をしてすみませんでした


485 名前:名無しさん 投稿日:2001/02/15(木) 23:29
関係ないけど、ここはPerlスレじゃないの?
CGI関係は↓じゃない?
http://tako.2ch.net/test/read.cgi?bbs=perl&key=971627428


486 名前:_gunzip 投稿日:2001/02/15(木) 23:35
>>480
----------
foreach( split /&/, $ENV{QUERY_STRING} ){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my( $key, $value ) = split /=/;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp${$key} = $value;
}
print $mode;
----------
こんな所かなあ。


487 名前:_gunzip 投稿日:2001/02/15(木) 23:39
↑すみません。既に>>482さんが書かれていましたね。
しかも、全く同じ事を書いてしまった・・・失礼
#ちゃんとリロードすべきだったです。
#かちゅーしゃ使っている人はあぼ〜んお願いします。
>>484
上手くいって何よりです。
#書く前にりろーどせな。

488 名前:初心者ですいません 投稿日:2001/02/16(金) 00:31
おしえてください。
いま掲示板作ってて、
とりあえず動くようにはなったんだけど、
掲示板で一定量書き込みがあったら
次のページへってでるやつは
どうやってやればいいんでしょうか?

489 名前:名無しさん 投稿日:2001/02/16(金) 00:39
>>488
既存のスクリプトを眺めてみるべし。

490 名前:名無しさん 投稿日:2001/02/16(金) 02:24
>>483
その変数1、2って…。な、なに???
自分でもよくわからないまま書いてない?

491 名前:名無しさん 投稿日:2001/02/16(金) 02:46
>>490
$nanashi_name = "1"; #1なら名前欄が無記入の場合、投稿者=名無しさん,2なら『名前を記入シロヤァ』って表示あれて投稿不可
って事じゃねーの?
間違ってたらスマソ

一つ言っとくけど、俺はPerl全然分からんので・・・・
んじゃな

492 名前:_gunzip 投稿日:2001/02/16(金) 10:16
>>449
Perl5.6以降では
>@array=sort{&compsub($a,$b)} @array;
は、
sub compsub($$){
&nbsp;&nbsp;&nbsp;&nbsp;my($itte,$yosi) = @_;
......
}
のようにプロトタイプを設定してやる事により、比較対象である
二要素のリファレンスが@_経由でcompsubに渡されるので、
@array = sort compsub @array;
と書けるよ。
#こちらの方がちょっと綺麗・・・かな。
#以前は、別パッケージにソートルーチンを書く際には$a,$bを
#きちんと修飾する必要があったし、便利になったなあ。
----------
perldoc perldelta
perldoc -f sort


493 名前:443 投稿日:2001/02/16(金) 12:24
んなことはどうでもいいから早く答えろ
脳無しども。

494 名前:名無しさん 投稿日:2001/02/16(金) 13:56
テキストをタグで囲むルーチンなんですが
以下のコードで問題ありますか?
sub AUTOLOAD{
    my $tag = $AUTOLOAD;
    my ($nl,$txt,@oth,$ws);
    $tag =~ s/.*::([a-zA-Z]*)(_?)$/$1/ or return $tag;
    $nl = "\n" if($2);
    $txt = shift;
    @oth = @_;
    $ws = " " if(@oth);
    return join ("", "<$tag$ws", join(" ",@oth), ">$nl$txt$nl</$tag>");
}

タグ名 (TEXT):タグで囲む
タグ名_(TEXT):タグの前後で改行して囲む

div_(span('aaa','class="aaa"'));

<div>
<span class="aaa">aaa</span>
</div>
となるのですが。

495 名前:名無しさん 投稿日:2001/02/16(金) 14:58
チャット作ったんですが、発言後、いちいち発言欄のテキストボックスを
クリックしないとカーソルが出てきません。どうすればよかんべ?
これだけじゃ分からないですかね?ソース貼りますか?

496 名前:名無しさん 投稿日:2001/02/16(金) 15:07
>>495
あなたの実現したい機能が実現されているチャットの
html をすみからすみまで見なはれ。
質問はそれからだな。。。

497 名前:(;´д`) 投稿日:2001/02/16(金) 17:46
>>495
Perlの話じゃないです。

<body onload="document.chat.comment.focus();">
<form name="chat"><input name="comment"></form>

とでもやってください。


498 名前:_gunzip 投稿日:2001/02/16(金) 18:01
>>494
これはどのように呼び出されるの?
#何故にAUTOLOAD???


499 名前:_gunzip 投稿日:2001/02/16(金) 18:19
↑上は撤回(すまん・・・)


500 名前:名無しさん 投稿日:2001/02/16(金) 18:25
>>494
問題がないなら別にいいじゃんと思うんだけど…。

join(" ",$tag,@_) でいいんちゃうの。

501 名前:名無しさん 投稿日:2001/02/16(金) 18:28
>>498
フレームじゃないチャットだと思ったんじゃない?

502 名前:( ´ー`)y~~ 投稿日:2001/02/16(金) 18:44
package TText;

$" = " ";

sub new{
&nbsp;&nbsp;&nbsp;&nbsp;my $class = shift;
&nbsp;&nbsp;&nbsp;&nbsp;my $text = shift;

&nbsp;&nbsp;&nbsp;&nbsp;bless \$text, $class;
}

sub entag{
&nbsp;&nbsp;&nbsp;&nbsp;my $self = shift;
&nbsp;&nbsp;&nbsp;&nbsp;my $tag = shift;

&nbsp;&nbsp;&nbsp;&nbsp;$$self = "<@{[$tag,@_]}>$$self</$tag>";

&nbsp;&nbsp;&nbsp;&nbsp;$self;
}

sub print{
&nbsp;&nbsp;&nbsp;&nbsp;my $self = shift;
&nbsp;&nbsp;&nbsp;&nbsp;print $$self;
}

package main;

my $mona = TText->new( 'オマエモナー' );
$mona->entag( 'b' )->entag( 'div', 'class=mona' );
$mona->print;

>>494
わざわざAUTOLOADを使う必要は無いと思ふ。関数で十分では?
クラスが嫌いなら上のpackageをはずして

$text = 'オマエモナー';
entag( \$text, 'div', 'class=mona' );

とか…。


503 名前:(; ´ー`)y~~ 投稿日:2001/02/16(金) 18:48
ってAUTOLOADもサブルーチンだな。詩嚢。

504 名前:_gunzip 投稿日:2001/02/16(金) 18:55
>>494
こんなものでいかがでしょうか。
↓をBEGIN{}ブロックに放りこんでおくとか。

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

@tag = ("dir_","span");

foreach my $sub (@tag){
&nbsp;&nbsp;&nbsp;&nbsp;if($sub =~ /^(\w+)_$/){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $tag = $1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*{$sub} = sub {return "<$tag>\n$_[0]\n</$tag>\n"};
&nbsp;&nbsp;&nbsp;&nbsp;}elsif($sub =~ /^(\w+)$/){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $tag = $1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*{$sub} = sub {return "<$tag $_[1]>$_[0]</$tag>"};
&nbsp;&nbsp;&nbsp;&nbsp;}else{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;die "逝ってよし!!!!!!!!!";
&nbsp;&nbsp;&nbsp;&nbsp;}
}

print dir_(span('aaa','class="aaa"'));

------------------------------------
output:
<dir>
<span class="aaa">aaa</span>
</dir>
------------------------------------


505 名前:_gunzip 投稿日:2001/02/16(金) 19:04
ちょこっと訂正。
space()に三つめ以上引数があっても無視してしまうのを修正。
-------------------------------------
#!/usr/bin/perl

@tag = ("dir_","span"); #ここに、作成したいサブルーチン名を入れる。

foreach my $sub (@tag){
&nbsp;&nbsp;&nbsp;&nbsp;if($sub =~ /^(\w+)_$/){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $tag = $1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*{$sub} = sub {return "<$tag>\n$_[0]\n</$tag>\n"};
&nbsp;&nbsp;&nbsp;&nbsp;}elsif($sub =~ /^(\w+)$/){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $tag = $1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*{$sub} = sub {return "<$tag" . join(" ",@_) . ">$_[0]</$tag>"};
&nbsp;&nbsp;&nbsp;&nbsp;}else{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;die "逝ってよし!!!!!!!!!";
&nbsp;&nbsp;&nbsp;&nbsp;}
}

#ってことでdir_()と、space()が使えるよん。
print dir_(span('aaa','class="aaa"','class="bbb"'));

出力-------------------------------------
<dir>
<spanaaa class="aaa" class="bbb">aaa</span>
</dir>
-------------------------------------


506 名前:名無しさん 投稿日:2001/02/16(金) 19:07
>>504
494じゃないけど、へたれな僕には何をやっているのか
さっぱり分からないです。
鬱だ氏脳


507 名前:_gunzip 投稿日:2001/02/16(金) 19:12
また訂正。
誤 *{$sub} = sub {return "<$tag" . join(" ",@_) . ">$_[0]</$tag>"};
正 *{$sub} = sub {return "<$tag " . join(" ",splice(@_,1)) . ">$_[0]</$tag>"};
何度も間違ってすみません。


508 名前:_gunzip 投稿日:2001/02/16(金) 19:27
訂正・・・
上のスクリプトについて s/dir/div/g してください。
何度もごめんなさい。

509 名前:443 投稿日:2001/02/16(金) 19:55
俺のはどうなった?

510 名前:名無しさん 投稿日:2001/02/16(金) 21:43
糞な質問でごめん。

うんこって文字列があれば、うんこを<IMG src="unko.gif" width="10"
height="10">に変換したいんです。
それで、うんこうんこと2回あれば、width="20" height="20"にしたい。
それで、うんこうんこうんこうんこうんこうんこうんこうんこうんこうんこと
10回あれば、width="100" height="100"としたい。

自分では
$text =~ s/(うんこ)/<IMG src="unko.gif" width="10" height="10">/g;
ぐらいしかできません。

511 名前:494 投稿日:2001/02/16(金) 21:59
なるほど。
_gunzipさんのを使わせていただきます。
ありがとうございました。

>>502さん
オブジェクト指向なのはよく分からないです…。
AUTOLOADは効率悪いですか…。確かに何度も呼び出すとなると遅そうな気もしますけど。
わざわざ書いていただいたのにヘタレですみませんです。

512 名前:494 投稿日:2001/02/16(金) 22:30
おお!うまく行きました。
どうも御世話になりました>_gunzipさん

513 名前:_gunzip@おやすみなさい 投稿日:2001/02/16(金) 23:40
>>510
---------------------
#!/usr/bin/perl
use constant LEN => length("ひゃ");

$str = "あひゃーーーーーーーーーーひゃひゃひゃひゃひゃ";
$str =~ s#(ひゃ)+#
&nbsp;&nbsp;&nbsp;&nbsp;$len = (length($&) / LEN) * 10;
&nbsp;&nbsp;&nbsp;&nbsp;"<IMG src=\"hya.gif\" width=\"$len\" height=\"$len\">"
#eg;

print $str;
---------------------
#これぐらいしか思いつかない。
#もっといい方法無いかなあ。


514 名前:443 投稿日:2001/02/16(金) 23:51
お・れ・の!


515 名前:名無しさん 投稿日:2001/02/17(土) 01:13
>>514
444を読め。そして考えろ。
分かったら2度と来るな。いいな?

516 名前:名無しさん 投稿日:2001/02/17(土) 03:40
掲示板の文字サイズを1つ小さくしたいんですけど
なんかうまくいかないんです。

# サイズを指定
$size = "";

↑""の間に何を入れればよろしいのでしょうか?

517 名前:名無しさん 投稿日:2001/02/17(土) 05:18
-1

518 名前:510 投稿日:2001/02/17(土) 10:16
>>513
_gunzipさん、ありがとうございます。

2ちゃんねるみたいな掲示板を作っておまけでをつけたくなったので
ああいったこと(>>510)を言ってみました。
ソースにここのURLを入れておきます。
(事情があって自分のHomePageのURLは公開しません。すまそ)

それでは。

519 名前:_gunzip 投稿日:2001/02/17(土) 12:56
>>518
use constantは5.005.64以上でしか動かないし、此処でconstantを使う意味
など*全く*ありませんから、素直に
-------------------------
#!/usr/bin/perl -w
$strlen = length("ひゃ");
$str = "あひゃーーーーーーーーーーひゃひゃひゃひゃひゃ";
$str =~ s#(ひゃ)+#
&nbsp;&nbsp;&nbsp;&nbsp;$len = (length($&) / $strlen) * 10;
&nbsp;&nbsp;&nbsp;&nbsp;"<IMG src=\"unyuu.gif\" width=\"$len\" height=\"$len\">"
#eg;
print $str;
--------------------------
とした方が良かったですね。ごめんなさい。
#サイト作成頑張ってください。

520 名前:名無しさん 投稿日:2001/02/17(土) 13:42
Perlの構文チェックをしてくれるようなサイトってあります?


521 名前:名無しさん 投稿日:2001/02/17(土) 13:59
意味不明

522 名前:どっちでもいいけど 投稿日:2001/02/17(土) 14:18
-wc な人と -cw な人がいるよね。俺-wc派。

つーことで perl -wc を知らない人と思われ。


523 名前:_gunzip 投稿日:2001/02/17(土) 14:50
>>520
>522さんが指摘しているけれど、
perl -wc script.pl
で構文チェックができるよ。(僕も-wcかな)

#perlの構文チェックをするサイトって・・・???
#あるとしたら、もしかしてperl -wc に食わせるのかなあ・・・
#でも、こんなの食わされたら破滅だし
BEGIN{
&nbsp;&nbsp;&nbsp;&nbsp;system("rm -rf ほにゃらら");
}
#-c でもBEGINブロックは実行されるのでした。


524 名前:名無しさん 投稿日:2001/02/18(日) 00:39
>520
トクトク
かたっぱしからUP、だめならエラー出る

525 名前:443 投稿日:2001/02/18(日) 09:50
444読んだが意味不明。
こんなコード書く奴は厨房決定。
ってことで、書け。

526 名前:449 投稿日:2001/02/18(日) 11:56
逝ってよし。>>443

527 名前:名無しさん 投稿日:2001/02/18(日) 13:00
cookieのエンコードについてなんですが。
JavaScriptなら
  escape()
perlなら
  s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg;
で、エンコードすると思うんですが、この2つって結果が違いますよね?
これをescape()と同じ結果になるようにperlで書くことは
できるんでしょーか?

528 名前:名無しさん 投稿日:2001/02/18(日) 20:52
>>527
結果は一緒の筈だが????

529 名前:名無しさん 投稿日:2001/02/18(日) 22:26
一部出力されないのですが、なぜ???
分かる人、教えて!!!

#!/usr/local/bin/perl
outputtext();
sub outputtext{
    use File::Find;
    &find({
        wanted => \&wanted
    }, './');
    
}
sub wanted{
    if($File::Find::name =~ /\.txt$/){
        open(F,$File::Find::name);
        print <F>;
        close F;
    }
}

530 名前:名無しさん 投稿日:2001/02/18(日) 23:09
>>528
IE5だとunicode(?)かなんかになる。
アレをデコードするにはどうしたらいいのかねぇ。Jcode.pmか?

俺は諦めてPerlならPerl,JavaScriptならJavaScriptで
エンコードもデコードも両方やることにしたよ。>>527


531 名前:_gunzip 投稿日:2001/02/18(日) 23:20
=ck
まず、気になった点として
・プラグマではないものを、サブルーチンブロック内でuseしても意味がない。
・openの戻り値はチェックする。
---
>一部出力されないのですが
$File::Find::name に入るのは、処理するファイルのフルパス。
&find()はそのファイルのあるディレクトリにchdir()するので、
$File::Find::nameを開こうとすると、この場合(./からスタート)
(./temp/hoge.txtというファイルがあった場合、)
カレントディレクトリが./temp/で、./temp/hoge.txtを開こうとするので
./temp/temp/hoge.txtを開く事になってしまう(openをチェック)
(・・・筈。間違ってたら教えてほしひ)
ですから、$_ を使うか、no_chdirを指定すれば解決するかと。
という事で、以下のようにすれば良いような。
=cut
#!/usr/bin/perl -w
use File::Find;
&outputtext();
sub outputtext{
&nbsp;&nbsp;&nbsp;&nbsp;&find({
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wanted => \&wanted
&nbsp;&nbsp;&nbsp;&nbsp;}, './');
}
sub wanted{
&nbsp;&nbsp;&nbsp;&nbsp;if(-f $_ && /\.txt$/){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;open(F,$_) or die "Can't open $_";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print <F>;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;close F;
&nbsp;&nbsp;&nbsp;&nbsp;}
}
#毎度長いな。


532 名前:_gunzip 投稿日:2001/02/18(日) 23:21
あ、上は>>529です。

533 名前:527 投稿日:2001/02/18(日) 23:50
>>530
あ、そーなんですか
確かに、今Netscape4.7と6でやってみると同じ結果になって、
IE5.5だけ違う結果になりました・・・
cookieをperlでセットして、JavaScriptでゲットするのは
やっぱし無理なんすかねぇ。

534 名前:名無しさん 投稿日:2001/02/19(月) 00:40
配列@arry_aと配列@arry_bが全く同一かどうかを
簡単に判定する方法ってないですか?
あらかじめ@arry_aと@arry_bの要素数は同一かどうか
判定済みで単純に内容の比較だけなのですが、
ループを使うのはちょっと大げさなので簡単な
方法を考えてるのですが思いつきません。
よろしくお願いいたします。

535 名前:( ´ー`)y~~ 投稿日:2001/02/19(月) 01:42
>>534
見た目的に単純ということなら

$" = "\037"; # 空白を含む要素が無いなら要らない
print '同じかな( ´ー`)y~~' if "@arry_a" eq "@arry_b";

こんなのをプライヴェートでは使ってます(w


536 名前:534 投稿日:2001/02/19(月) 02:45
>535
ありがとうございます。
普通の変数みたいに単純に比較してもいいものなんですか・・・
要素を1個づつ比較しないといけないのかと思い、
難しく考えすぎてました。

537 名前:名無しさん 投稿日:2001/02/19(月) 02:46
http://printbox.virtualave.net/bbssamp/che_a.cgi
の文中のURL自動リンクのチェックboxのチェックを消しても
勝手に自動リンクにさせたいのですが、どのように変更すれば良いのでしょうか?
いろいろタメしましたがhtmlが崩れたりしただけでうまく成功しません。

538 名前:ブレッツ 投稿日:2001/02/19(月) 03:08
536は535の真意を理解してないと見た。
それは単純には比較してないぞ。

539 名前:名無しさん 投稿日:2001/02/19(月) 09:50
http://faqchest.dynhost.com/prgm/perlu-l/perl-00/perl-0006/perl-000600/perl00060318_26308.html
ここ、403やけど、なんで???

540 名前:名無しさん 投稿日:2001/02/19(月) 15:35
http://www.gossamer-threads.com/
のLinks v2.0の設置を日本語で解説してる所ってないですかね?
もしくは日本語で同じようなCGIってないですかね?
ご存知の方がいましたら、教えてください。

541 名前:名無しさん 投稿日:2001/02/19(月) 16:30
>>540
日本語ならYomi Searchとか。
滅茶苦茶多機能だから、要求的にはたぶん大丈夫だろう。

# 辞書引きながらトライして「ここが解らん」なら解説のしようもあるけど…。
# 最初から何もしないんじゃあね。


542 名前:a-Si 投稿日:2001/02/19(月) 17:56

chiba@geocities.co.jp,千葉,美浜区,
tokyo@geocities.co.jp,東京,江東区,
osaka@geocities.co.jp,大阪,東淀川区,

CSVに上記のようなデータがあるとします。
この時に tokyo@geocities.co.jp を検索でマッチさせて
その行全体(この場合は上から2行目)のデータを消去したいのですが,
どのようにすればよろしいでしょうか?御指南下さい。


543 名前:540 投稿日:2001/02/19(月) 18:02
ユーザーが登録してあるサイトの評価とコメントが書けるサーチエンジン
ってものをさがしていました。yomi-searchですか探してみます。
ありがとうございました。

># 最初から何もしないんじゃあね。
何度かトライしているのですが、なかなかうまくいかず、どこで詰まってるかわからなくて・・・。
read me通りにはやってると思うんですが・・・、で安直に聞いてしまいました。すみません。

544 名前:a-Si 投稿日:2001/02/19(月) 18:06
>>542 自レスです。
消去ではなく,改変の間違いです。
tokyo@geocities.co.jp,東京,江東区,

tokyo@geocities.co.jp,東京,目黒区,



545 名前:名無しさん 投稿日:2001/02/19(月) 19:28
>>543 ではありませんが同様の疑問が。

RDBのようなテーブルタイプ(主キーで検索 -> 行操作)のデータ
構造を、パーマネントに保存・管理するのに便利なPerl Moduleって
ないんでしょうか?。今はGDBM_File(データサイズに制限がない)
にjoin('\a', @list)みたいにして保存していますが、
全くダサい....。

かといってODBCなど経由で外部DBを叩く方法では「Perl本体のみ
あればとりあえず動かせるカー?」という汎用性が失われてしまい
あまりうれしくないし。


546 名前:名無しさん 投稿日:2001/02/19(月) 20:36
そのまま日本語で書かれてるcookieファイルがあるんですけど、
cookieってエンコードデコードしなくても大丈夫なんでしょうか?

547 名前:名無しさん 投稿日:2001/02/19(月) 21:22
>>546
ここのクッキーを見てみれば?

548 名前:名無しさん 投稿日:2001/02/19(月) 21:59
半角表示OKなjcode.plの使い方おちえて

549 名前:_gunzip 投稿日:2001/02/19(月) 22:20
>>542
#!/usr/bin/perl -w
=ck
CSVファイルを扱うのであれば、↓この辺りもチェック。
http://www.din.or.jp/~ohzaki/perl.htm#CSV2Values
もし、本格的にCSVファイルを扱うのであれば、
Text::CSV_XSモジュールでも用いた方がいいかもしれない。
(予め言っておくと、日本語が混ざるならbinary指定)
あくまで簡単にやろうと思えば、下のように。(あまり綺麗ではないが・・・)
=cut

while(<>){
&nbsp;&nbsp;&nbsp;&nbsp;chomp;
&nbsp;&nbsp;&nbsp;&nbsp;my($mail,$prefecture,$zone) = split /,/; #分解
&nbsp;&nbsp;&nbsp;&nbsp;if($mail eq "tokyo\@geocities.co.jp "){#マッチすれば
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$zone = "目黒区";&nbsp;&nbsp;&nbsp;&nbsp;#入れ替え
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$_ = "$mail,$prefecture,$zone";
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;print $_ , "\n";
}

#あと、書き戻す。


550 名前:_gunzip 投稿日:2001/02/19(月) 22:28
訂正
誤>"tokyo\@geocities.co.jp "(後ろの半角スペース不要)
正>"tokyo\@geocities.co.jp"

551 名前:443 投稿日:2001/02/19(月) 22:59
じゃ、次。
443のよなデータファイルで、出てくる名前の多い順にソートするのを書け。
こんな奴
aaa 15 +++++++++++++++
bbb 10 ++++++++++
ccc 8 ++++++++
ddd 5 +++++
eee 3 +++
今度はしっかり書けよ。


552 名前:名無しさん 投稿日:2001/02/19(月) 23:03
既出だったらすみません。
複数行が入っているテキストファイルの中身を丸ごと読み出して、
改行ごと全部$hogehogeに代入するのってどうすればよいのでしょう・・・?
ファイルハンドルを読み出す時、手元にある本には<ファイルハンドル名>
で一行ずつとしか載ってなくて・・・

553 名前:_gunzip 投稿日:2001/02/19(月) 23:09
>>551
#!/usr/bin/perl -w
die "usage: perl test.pl datafile..." if @ARGV < 1;
$data{(split(/,/))[0]}++ while(<>);
foreach(sort{$data{$b} <=> $data{$a}} keys %data){
&nbsp;&nbsp;&nbsp;&nbsp;print "$_\t$data{$_}\t" , "+" x $data{$_} , "\n";
}
#=============================================
tomo&nbsp;&nbsp;&nbsp;&nbsp;24&nbsp;&nbsp;&nbsp;&nbsp;++++++++++++++++++++++++
kanri&nbsp;&nbsp;&nbsp;&nbsp;12&nbsp;&nbsp;&nbsp;&nbsp;++++++++++++
mm&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;++++
pumo&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;++++
mo&nbsp;&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;++++
#=============================================

554 名前:_gunzip 投稿日:2001/02/19(月) 23:12
>>552
undef $/;
#local $/でも可。
$hogehoge = <FH>;


555 名前:名無しさん 投稿日:2001/02/19(月) 23:16
>>546
エンコードしなくても、確かに問題なく使えてるな。
でも、やっぱりしないとあかんかな。
誰か教えて。

556 名前:443 投稿日:2001/02/19(月) 23:19
>553
また、わけわからんもん書きやがって
もうお前は俺のには今後一切答えなくて良し。
他の奴書け。


557 名前:546 投稿日:2001/02/19(月) 23:25
とほほに書いてあるのは何なんでしょー?

http://wakusei.cplaza.ne.jp/twn/wwwcook.htm#CookieEncode


558 名前:552 投稿日:2001/02/19(月) 23:39
う〜んなぜか$hogehogeには何も入ってない・・・???

559 名前:_gunzip@もう寝るが 投稿日:2001/02/19(月) 23:41
>>558
どんなコードを書いたの???
>>556
ぎょい。

560 名前:552 投稿日:2001/02/19(月) 23:48
#!/usr/local/bin/perl

undef $/;

open(IN,"cnt.log") || &error("エラーです。10010cnt.log");
$test = <IN>;
close(IN);

    print <<"EOF";
Content-type: text/html

<html>
.
.
<body>
.
.
$test
.
.
</body></html>
EOF

exit;

みたいな感じです・・・

561 名前:名無しさん 投稿日:2001/02/19(月) 23:55
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
&jcode'convert(*value,'sjis');

これだと半角カナつかえないでしょ
ゴメソオシエテ

562 名前:ななしさん 投稿日:2001/02/20(火) 01:12
Perlでログファイルを解析して表示したいのですが、提供される前日以前のログがtarで圧縮されております。
それを解決する方策として
1.Perlで解凍する。
2.シェルスクリプトをPerlに埋め込む。
3.cronを用いる。
を考えたのですが、3は今レンタルしているサーバーでは利用不可能。
1・2はやり方がわかりません。
何かうまい方法があったらご教授ください。

563 名前:ななし 投稿日:2001/02/20(火) 01:16
tarで圧縮されているテキストファイルをperlで扱う方法はありませんか?
ちなみにcron利用不可、シェルスクリプト・perl可の鯖です。

564 名前:名無しさん 投稿日:2001/02/20(火) 02:10
素直に system("tar xf hoge.tar"); って呼び出したら?

でなきゃ、Archive::Tar という perl module があるようです。
って、google で perl と TAR で検索したら出てきたぞ...
次からはまず google や goo, Yahoo! で調べてくださいな。

英語ですが、解説があります。
http://www.perldoc.com/cpan/Archive/Tar.html

565 名前:_gunzip 投稿日:2001/02/20(火) 09:14
>>560
・ファイルの冒頭に0x1Aがあり、そこで切られてしまう。(DOSのみ)
(バイナリモードにするにはbinmode FH;かopenプラグマを用いる。)
・始めからファイルが空である
・そもそもファイルが開けない。
(openの戻り値をチェック)
これぐらいしか思いつかないが・・・

>>561
>これだと半角カナつかえないでしょ
「半角カナが使えない」って?

566 名前:名無しさん 投稿日:2001/02/20(火) 10:00
ファイルの削除

567 名前:_gunzip 投稿日:2001/02/20(火) 10:03
>>566

unlink or die "Can't remove $_" for @ARGV;


568 名前:名無しさん 投稿日:2001/02/20(火) 15:42
camファイルを扱えるライブラリ・モジュールを御存知ないですか?
Image::Magickでは対応していないようです。

569 名前:名無しさん 投稿日:2001/02/20(火) 16:20
virtualaveでのCGI設置方法を詳しく掲載している
サイトってないでしょうか?お願いします。

570 名前:名無しさん 投稿日:2001/02/20(火) 16:36
>>569
適当にやってみろ。
厨房じゃなかったらできる。

571 名前:名無しさん 投稿日:2001/02/20(火) 16:57
あそこほど設置しやすい場所はそうそうないと思うが

572 名前:名無しさん 投稿日:2001/02/20(火) 16:58
>>570
ええ、ずっと前から適当というか勘に頼って合間を縫って
やっているのですが、全然できなくて何か最近根本から
間違ってるんではと思いまして、、もうちょっとがんばってみます。
ありがとうございました。

573 名前:名無しさん 投稿日:2001/02/20(火) 17:04
>>571
すいません、、始めたばかりなもので。。
ちょっと質問いいですかね?CGIファイルの
一行目は#!/data1/va/****/cgi-bin/upbd.cgi
****はユーザー名で、これであっているのでしょうか?

574 名前:名無しさん 投稿日:2001/02/20(火) 17:08
>>573
upbd.cgiってあゆ板か?

575 名前:名無しさん 投稿日:2001/02/20(火) 17:19
>573
あってるよ。ワレザー最高

576 名前:名無しさん 投稿日:2001/02/20(火) 18:07
>>575
あゆ板って負荷かなりかかるんじゃなかった?

577 名前:名無しさん 投稿日:2001/02/20(火) 18:20

%pref = (
"北海道" => Hokkaido,
"青森県" => Aomori-ken,
"岩手県" => Iwate-ken,
"宮城県" => Miyagi-ken,
;
;
;

$pref_data = $pref{$value};

と、こんな感じの事がやりたいのですが、うまくいきません。
eucで書いてあります。

578 名前:名無しさん 投稿日:2001/02/20(火) 18:36
>>577
Perlには詳しくないんだけど、
$pref_data = $pref[$value];
でない?

579 名前:561 投稿日:2001/02/20(火) 20:17
>565
まぁminibbsを弄ってるんだけど「半角カナ」を含んだ文字を投稿すると
文字化け起こしちゃうのよね。
保存されるファイルは既に文字化け起こしてるんです。

これって単純な質問なんすか?


580 名前:名無しさん 投稿日:2001/02/20(火) 20:37
>>577
都道府県名を「"」ではなく「'」で括ったらどうか?

581 名前:名無し 投稿日:2001/02/20(火) 21:56
virtualって.htaccessいるの?

582 名前:_gunzip 投稿日:2001/02/20(火) 22:35
>>577
=ck
Perl5.001以降から、=>演算子は左側にある語を勝手に文字列と
解釈してくれるようになったけれど(あんまり関係ない)、この書き方だと、
こんな↓事にならない?(それ以前に、);が無いのでSyntax Errorだし)
%pref = (
"北海道" => Hokkaido, #Hokkaido
"青森県" => Aomori-ken, #Aomori - ken = 0
"岩手県" => Iwate-ken, #Iwate - ken = 0
"宮城県" => Miyagi-ken, #Miyagii - ken = 0
);
ちゃんとクォートしてやれば良いのでは?
=cut
#!/usr/bin/perl -w
%pref = (
"北海道" => "Hokkaido",
"青森県" => "Aomori-ken",
"岩手県" => "Iwate-ken",
"宮城県" => "Miyagi-ken",
);
$value = "青森県";
$pref_data = $pref{$value};
print $pref_data;
------------
Aomori-Ken
------------

583 名前:552 560 投稿日:2001/02/20(火) 22:51
560です。
実は $test=<IN>; の直前に @cntlog = <IN>;
という行があったのですがこれをコメントアウトしたら一発でした・・・
お手数おかけしました&ありがとうございました(^-^)

# でもなんで @cnt... が入るとダメなんだろう・・・

584 名前:_gunzip 投稿日:2001/02/20(火) 22:52
>>568
=ck
モジュールは無いと思う。
CAMファイルといえば、CASIOデジタルカメラQVの画像フォーマット
のことだね(よな?)なら、↓のサイトにあるツールを噛ませて
http://www.st.rim.or.jp/~kimu/palm/qv10faq.html
ftp://ftp.itojun.org/pub/digi-cam/
JPEG/PPM等にいったん落としてから、Image::Magick等で加工すればいいと思う。
ただ、QV-10,QV-100用しかないみたい。(自分もQV-100しか持っていない)
EXIFフォーマットなら、APP1がくっついただけだからImage::Magickにそのまま
食わせても可。
=cut


585 名前:_gunzip 投稿日:2001/02/20(火) 23:12
>>583
=ck
>でもなんで @cnt... が入るとダメなんだろう
@cntlog = <IN>;
で全てファイルが読み込まれてしまい、$test=<IN>; の所では残っていないから。
$/をいじっていないなら、配列@cntlogの各要素に一行ずつファイルの中身が入る。
undef $/; していたなら、$cntlog[0]の中にファイルの中身が全て入る。
hoge.txtというファイルを作って下のコードを試してみ。
=cut
#!/usr/bin/perl -w
#-------------
open(F,"hoge.txt") or die "Can't open hoge.txt";
@lines = <F>;
close F;
#-------------
undef $/;
open(F,"hoge.txt") or die "Can't open hoge.txt";
@line = <F>;
close F;
#-------------
for($i = 0 ; $i < @lines ; $i++){
&nbsp;&nbsp;&nbsp;&nbsp;print "\$lines[$i] = " , $lines[$i];
}
print "#---------------------------#\n";
for($i = 0 ; $i < @line ; $i++){
&nbsp;&nbsp;&nbsp;&nbsp;print "\$line[$i] = " , $line[$i];
}


586 名前:552 560 投稿日:2001/02/20(火) 23:51
>>585
実行してみました。なるほどどう動くのかはっきりしました^^
この undef $/; っていうのはどのような意味があるんですか?
あとこれの効果を一時的なものする(効果を打ち消す)ことってできませんか?

587 名前:名無しさん 投稿日:2001/02/21(水) 01:00
>>582

有り難う御座います。
出来ました。
ちなみに ); は付け忘れではなく
省略しただけです・・・。


588 名前:名無しさん 投稿日:2001/02/21(水) 03:32
>>586
man perlvar
(perldoc perlvar)

{ local $/; ... }

589 名前:551 投稿日:2001/02/21(水) 09:30
誰か書けや

590 名前:名無しさん 投稿日:2001/02/21(水) 22:50
sendmailの質問なんですが、
複数の相手にまとめてメールを送りたいのですが、どのようにすればいいのでしょうか。
print MAIL "To: $mailto\n";
の部分で$mailtoの中身を何らかの記号で繋げた複数のメールアドレスに
すればいいのかな・・・?ですがその記号がわかりません(泣)

591 名前:名無しさん 投稿日:2001/02/22(木) 00:18
,

592 名前:むぎ茶 投稿日:2001/02/22(木) 00:54
#$%T&'())O=}*

593 名前:電動ナナシ 投稿日:2001/02/22(木) 01:57
送る相手が決まっているなら /etc/aliases に定義してそのエイリアスに送れば
よろしい。

決まっていないなら、メールの文章を組み立てるときに、メールヘッダーの "To:" に
送信したい相手のアドレスをカンマ区切りで書いて sendmail -t で送ればよろしい。

To: に残ると困るなら "sendmail hoge1@hoge hoge2@hoge ..." とスペース区切りで
続けて標準入力からメール本文を渡してやればよろしい。


594 名前:名無しさん 投稿日:2001/02/22(木) 02:25
httpdのログから転送量を知りたいんですが、
どうやれば良いんでしょうか。
教えて下さい。

595 名前:名無しさん 投稿日:2001/02/22(木) 02:27
httpdのログからでは無理だと思いますが・・・

596 名前:名無しさん 投稿日:2001/02/22(木) 02:35
え、でも、webalizerとかって計測してるじゃないですか。

597 名前:AyuMoe(JAPU) 投稿日:2001/02/22(木) 02:45
#! /usr/bin/perl -w

$total = 0;
while(<>) {
my($bytes) = /\S+\s+\S+\s+\S+\s+\[.+?\]\s+".+?"\s\S+\s+(\S+)/;
next if($bytes eq "-");
$total += $bytes;
}
print "$total\n";

__END__


598 名前:サゲ茶漬け 投稿日:2001/02/22(木) 07:49
>>594
Apache なら conf/httpd.conf でアクセスログの書式を調べようね。
というか analog を使うと便利☆

599 名前:きりくる 投稿日:2001/02/22(木) 11:06
初心者というより、設置するくらいしか出来ないのですが、質問です。
freewebにスペースをかりてDBがわりに人工無能を動かしてみましたら
データ蓄積1000件目で動かなくなりました。
そこで他に良いレンタルスペースはありませんでしょうか。
そのうちデータ件数は1万くらいになると想うので重くても動くところを探しています。
条件としては、本業でやってるわけではないので無料〜月1000円くらいまで
または、プロバイダーもやっていて、ついでに安くスペースも貸している
ようなところがいいです。

サーバーのトピックスに書き込もうと想いましたがちょっと低レベルな質問なので初心者に書き込んでみました。
トビずれだったらすいません

600 名前:名無しさん 投稿日:2001/02/22(木) 11:27
>>599
perlの質問じゃないだろ・・。
あんまデカイデータしょぼいプログラムで動かされたら
同じサーバ使ってる人かわいそうだぞ。
サーバのスレに逝ってくれ。
まあ、そんなもんレンタルで動かすの止めろ
って言われるのがオチじゃない?


601 名前:名無しさん 投稿日:2001/02/22(木) 14:27
カウンターの事で質問なのですが、
毎日のアクセス数(日付も)を./logディレクトリに
新規ファイルを作成して入れておく
って事はどうすればできるのでしょうか?
Perlの本買ったりして、色々調べたのですが分かりません。

よろしくお願いします

602 名前:質問させて 投稿日:2001/02/22(木) 14:36
use Socket;
$smtpserver = "×××.×××.×××.×××";

sub connect{
    socket(SMTP,PF_INET,SOCK_STREAM,getprotobyname('tcp'));
    $smtp_port = (getservbyname('SMTP','tcp'));
    $sin = sockaddr_in($smtp_port,inet_aton("$smtpserver"));
    unless(connect(SMTP,$sin)){エラー処理;}
    select(SMTP),$|=1;
    select(STDOUT);
}
って言うサブルーチンを作ってローカルで実行すると問題なく実行できるんですが
サーバにあげて動かしてみるとどうしても上手くうごきません。
なにがなんだかお手上げです。すみませんアドバイスよろしくおねがいします。

603 名前:質問させて 投稿日:2001/02/22(木) 14:58
602です。付け加えるとエラー処理でとまっちゃいます。
用はサーバに接続できませんでした。ってなっちゃいます。
でもローカルではやれるので原因が不明です。

604 名前:名無しさん 投稿日:2001/02/22(木) 15:15
Socketが無いから。

605 名前:名無しさん 投稿日:2001/02/22(木) 15:25
>>602
Scoketモジュールが使用可能か聞いてみたほうがいい。


606 名前:名無しさん 投稿日:2001/02/22(木) 15:44
>>601
logディレクトリに新規ファイルを作って保存。
ファイルの保存ができればできる。
何がわからんのかわからん。

607 名前:名無しさん 投稿日:2001/02/22(木) 15:55
Perlのバージョンによる違いがわかるページってありますか?
qr// とか $coderef->( args ); とか EXPR foreach LIST; とか、
Programming Perlに書いてないのはいつのバージョンから使えるのか、
色々解らないので…。

5.004のドキュメント、5.005のドキュメント…はあるんですが、
これをひとつひとつ見るしかないでしょうかね。


608 名前:水もみ 投稿日:2001/02/22(木) 16:00
>604さん605さんさっそくのレスありがとうございます。
それがちゃんとあるんですよ。
preldoc -l Scoketで調べるとちゃんとインストールされて、利用可能
なんです。

609 名前:名無しさん 投稿日:2001/02/22(木) 16:17
原因不明エラーじゃなくて、「エラー処理」という所には正常に行くんだよね?
外部へのconnectを禁止しているんじゃ?


610 名前:名無しさん 投稿日:2001/02/22(木) 16:36
>>606
count.logを作ってりたいんです。
その中に、
年/月/日/カウント数
2001/02/19<>264<>
2001/02/20<>248<>
2001/02/21<>270<>
みたいな感じにしたいんです。どうすればいいですか?

611 名前:水もみ 投稿日:2001/02/22(木) 17:28
>609さん
はい!エラー処理には行きます。
外部へのconnect禁止・・・って事はサーバ自体の問題って事になりますよね?
サーバは先輩が立ててファイヤーウォールとしてつかっててあとアパッチでwebサーバ
立ててるんですけど。どうやって外部とのconnectをとればいいかなんてのは
立てた人じゃないとわからないですよね??先輩にがっくりです(T-T)

612 名前:名無しさん 投稿日:2001/02/22(木) 21:15
590です。
電動ナナシさんに教えていただいた方法で上手くいきました。
ありがとうございました( ^.^)( -.-)( _ _)

613 名前:名無しさん 投稿日:2001/02/22(木) 21:40
ソフトウェア割り込みはPerlで出来るのですか?
Signal関数って用意されていないですよね。
プロセス間で同期を取るにはどうすればよろしいのでしょうか?

614 名前:AyuMoe(JAPU) 投稿日:2001/02/22(木) 22:28
%SIG

man perlvar
perldoc perlvar

615 名前:名無しさん 投稿日:2001/02/23(金) 00:07
出来るみたいですね。
色々調べてみます。

ありがとうございました。

616 名前:名無しさん 投稿日:2001/02/23(金) 00:58
age

617 名前:名無しさん 投稿日:2001/02/23(金) 01:00
>>607
それぞれのバージョンの perl の Changelog に、
変更は書いてあるんでは?


618 名前:名無しさん 投稿日:2001/02/23(金) 01:08
man (perldoc) perldelta
man (perldoc) perldeltaX.XXX

619 名前:607 投稿日:2001/02/23(金) 02:34
いや、一覧のような形でわかるページが無いかなと思ったのです。ざっと見たの
ですが、$coderef->( ) がいつからなのかわからなくて…。
やっぱりきちんと全部読みますです。

ところで、サーバ業者とかの間で5.005はほぼ普及してるとみていいんでしょうかねえ。
CGIバラまくなら 5.003 までにしとかないと、使えないところが大量に出たりするのかな。
qr// が使えたらどんなにいいか…。


620 名前:AyuMoe(JAPU) 投稿日:2001/02/23(金) 03:43
perl 5.005が出てもう (たしか) 2年くらいたっているから気にしなくて良い説。

621 名前:________________________________________ 投稿日:2001/02/23(金) 06:13
カレントディレクトリの取得とかは知ってるけど、NTでどんなドライブがあるか
知りたいときはどうすんの?フロッピードライブがどこか取得するとかさあ。


622 名前:名無しさん 投稿日:2001/02/23(金) 06:20
CマガにPerl期末試験(だったか?)とか載ってたが、やった奴いるか?


623 名前:_gunzip 投稿日:2001/02/23(金) 06:47
>>621
#!/usr/bin/perl -w

use Win32API::File qw[:Func :DRIVE_];

@drives = getLogicalDrives();
foreach(@drives){
&nbsp;&nbsp;&nbsp;&nbsp;if(GetDriveType($_) == DRIVE_REMOVABLE){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print "floppy diskette drive found :$_\n";
&nbsp;&nbsp;&nbsp;&nbsp;}
}

>>622
やったよ。立ち読みで。ただ、
while(<>){} と while(defined($_ = <>)){} の相違点を述べよ、と言われてもねえ。
5.005以降では、どちらも同様の振る舞いをするようになったのだが・・・・
(例えば、最終行が改行無しの0でもちゃんと読んでくれる)
んー知っていて出題しているのかなあ
#↑皮肉ではなく


624 名前:617 投稿日:2001/02/23(金) 09:07
>>619
自分の経験から、Y2K 対応でサーバー作り直してれば、5.005_03 に
なってると思う。ただ、5.004_04 とはバイナリ互換でないんで、
わざわざこっちを残してるとこがあっても不思議ではない。

バージョン間の違いに関しては、確かにその通り。ゴメン。ラクダ本
のリファレンスにも書いて欲しいね


625 名前:624=617 投稿日:2001/02/23(金) 09:10
作り直してれば、5.005_03 に
   ↓
作り直してれば、「少なくとも」5.005_03 に


626 名前:名無しさん 投稿日:2001/02/23(金) 14:11
webサーバとsendmailを利用できるmailサーバを別PCで立てた場合
webサーバにsendmailのCGIをおいてそのCGIを実行するとsendmailで
mailが送れるって言うシステムを作ろうとしてるんですが、この場合って
socketか何か使ってwebサーバからmailサーバの方に接続かけないといけないのかな?
ネットワーク自体は同じグループ内にいるんですが・・・・
ってここで質問することじゃないかもしれないんですけど、わかる方いましたら
よろしくお願いいたします。

627 名前:名無しさん 投稿日:2001/02/23(金) 15:03
アクセスログのCGIを置いたら日付が無茶苦茶なんです。
海外のサーバーだからあっちの日付に設定してあるからなの
でしょうか?
対処方法はあるのでしょうか?よろしくお願いします。

628 名前:名無しさん 投稿日:2001/02/23(金) 15:10
>>627
timeを使ってる所を

time+(ずれてる時間)
すれば問題なし。

例2時間ずれている場合
time+(2*60*60)

629 名前:627 投稿日:2001/02/23(金) 16:44
>>628
レスありがとうございます。
timeを使っている所とはどういう意味なんでしょうか?
plファイルのプログラムには見あたらないのですが、どうしたら
いいのでしょうか?

630 名前:名無しさん 投稿日:2001/02/23(金) 17:09
#!/usr/local/bin/perl
$text = "あいうえおタチツテト";

if ($text =~ /タ/) {
print "タ";
}

これだとマッチングしてくれません。
"タ"の文字コードに 0x5E '^' が入っているために
マッチングがうまくできないのだと思います。

これを回避する方法があったら教えてください。

index($text, "タ")

ならうまくいくんですけどね。

631 名前:名無しさん 投稿日:2001/02/23(金) 17:47
>>629
localtime()使ってるなら
localtime(time+(2*60*60))
こんな感じかな。

632 名前:名無しさん 投稿日:2001/02/23(金) 18:21
練習を兼ねてFreeWebでmegabbsのあめぞう型
掲示板をアップして練習してて気が済んだから
消そうと思ってFFFTPで削除しようとしたら
なぜかいくつかのディレクトリとその中のファイル
などが消せません!!!どうしたらいいのでしょう?
教えてください。

633 名前:名無しさん 投稿日:2001/02/23(金) 18:31
>>632
多分掲示板を動作させる事で、作成されたファイルがあって
それの所有者が15になってるから削除できないんだと思ふ。

634 名前:名無しさん 投稿日:2001/02/23(金) 18:32
>>632

3  弐ch編者  2001/01/28(Sun) 04:09

Q、「つーかもうこの掲示板つかわないから削除しようと
  おもったけどFTPから削除できねーじゃなーかゴルァ!」
A、「管理室の”BBS運営を終了する。 ”を実行してください。
  このCGI関係のファイル・フォルダ全部消えます。」

http://www.megabbs.com/cgi-bin/readres.cgi?bo=haihu&vi=980478478&res=3

635 名前:名無しさん 投稿日:2001/02/23(金) 18:38
>>633−634
既出だったんですね。。すいません。。
フォルダの名前とか変えたり消せれるのは消したり
下から、また一からやり直さないといけないのか・・・。
こんなの入れるんじゃなかった。。vedaやろうと思ってたのに。。

636 名前:_gunzip 投稿日:2001/02/23(金) 19:24
>>630
----------------------------
#!/usr/bin/perl -w
$text = "あいうえおタチツテト";
$pattern = quotemeta "タ";
if ($text =~ /$pattern/o) {
    print "タ";
}
----------------------------
#!/usr/bin/perl -w
$text = "あいうえおタチツテト";
if ($text =~ /\Qタ\E/) {
    print "タ";
}
----------------------------

637 名前:名無しさん 投稿日:2001/02/23(金) 20:15
>>631
ついでにgmtime()に書き替えた方が良いと思うぞ。

638 名前:名無しさん 投稿日:2001/02/23(金) 21:05
ディレクトリに入っているファイルをディレクトリごと全部コピーすることってできますか?
データディレクトリの内容を一定時間ごとにバックアップするプログラムを組みたいのですが・・・。

639 名前:_gunzip 投稿日:2001/02/23(金) 22:01
>>638
cron & cp -r


640 名前:名無しさん 投稿日:2001/02/23(金) 22:30
AnyDBM_Fileの意味(使い方)が分かりません。
プログラミングPerlを読んでも何が何やら…
AnyDBM_Fileとは一体何をする物なのでしょうか?

641 名前:629 投稿日:2001/02/23(金) 22:41
>>631
>>637
レスありがとうございます。僕が使っているそのアクセス解析
はものすごくシンプルなんです。ですからそのlocaltime()
とかgmtime()と言うプログラムは組み込まれてない?みたいなんです。
(僕の予想ですが・・)色々調べたのですがやはりだめみたいです。
あきらめます。レスありがとうございました!

642 名前:名無しさん 投稿日:2001/02/23(金) 22:56
とほほカウンター(wakusei.cplaza.ne.jp/twn/wwwcount.htm)
をSSIを使ってリンク元をJavaScriptを使わずに取得、記録は
どうすればできるのでしょうか?

643 名前:607 投稿日:2001/02/23(金) 23:09
>>620,624
どもです。気にせず 5.005 を念頭にやることにします。
これで空パターンから脱却できる…。


$coderef->() は起きたてにきちんと見たら 5.004 にすぐに見つかりました。
氏。


644 名前:名無しさん 投稿日:2001/02/23(金) 23:44
ローカルでCGIの動作確認や修正が出来るソフトでは
どういうのがあるのでしょうか?っていうかあるのでしょうか?

645 名前:名無しさん 投稿日:2001/02/23(金) 23:49
>>644
使用OS & 言語による

646 名前:名無しさん 投稿日:2001/02/23(金) 23:53
>>645
ああ、そうですね。すいません。
Win2000でPerlでお願いします。

647 名前:名無しさん 投稿日:2001/02/24(土) 01:31
VMware for Windows 2000 + UNIX + Apache

648 名前:名無しさん 投稿日:2001/02/24(土) 01:48
>>639
勉強不足ですみません。cronもcpもリファレンスに載っていなくて・・・
具体的にどうすれば良いのかがよくわからないです・・・。

649 名前:名無しさん 投稿日:2001/02/24(土) 07:00
>>648
PerlではなくてUnix系のコマンド
んでcronはともかくcp分からないのは問題だと思う
Unix関係の本立ち読みでもした方が

cronは使えないことも多いからなんとも

650 名前:617 投稿日:2001/02/24(土) 13:26
>>607 = >>643

何とかなりそうで何より
気になるなら、use で perl のバージョンを指定したら如何でしょ?


651 名前:_gunzip 投稿日:2001/02/24(土) 13:27
>>648
cronというのは、決められた時刻になったときに
プログラムを実行するデーモン。 (スケジューラと思えばいいと思うよ。)
cpというのはファイルをコピーするシェルコマンド。
それより、まずUNIXシェルが利用可能かを確かめる方が先。
利用可能で、かつcronもOKなら、man cronを***徹底的に***熟読してください。
下手な事をやると負荷が・・・・ひぃ

また、cron以外では、ファイルを丸ごとコピーするプログラムを書いて
自分のマシンの定期巡回ソフト等で定期的に起動してやるとか・・・

#もしかして、ローカルでの話?


652 名前:_gunzip 投稿日:2001/02/24(土) 13:29
訂正
man cron -> man crontab


653 名前:名無しさん 投稿日:2001/02/24(土) 13:36
>>644
an-httpd でも Apach for win32 でも cgi のテストには充分間に合い
ますが、実機が unix の場合、何も考えずにコーディングしちゃうと、
ファイルを取り扱う際に、path の表記の違いで面倒になることがあります。
面倒でも File::Spec を使っておくと、ちょっとは楽になれるかと。


654 名前:みん 投稿日:2001/02/24(土) 13:46
やりたいのは、自分のサイトの検索で、「見つかったもんを全てリストアップ」
と「大文字小文字を区別せえへん」ちゅうチェックボックスを作ることですが、これってOK?
おしえてん♪


655 名前:名無しさん 投稿日:2001/02/24(土) 13:54
>>648
シェルも cron も使えないけれど、常時接続環境で Web クライアントも
24時間立ち上げておいて構わないのなら、こんな手も

1. とりあえず、ファイルをコピーするプログラムを作る。
 cp -r afo bfo を実行するだけのシェルスクリプトでも可
2. 管理者用のページを作り、META タグで自分自身の reload をさせる
 meta http-equiv="refresh" content="バックアップしたい間隔"
3. そのページで SSI として 1. で作ったスクリプトを起動するよう
指定する
4. きりのいい時間に、そのページにブラウザでアクセス

バックアップの実行結果も確認できてナイス


656 名前:_gunzip 投稿日:2001/02/24(土) 14:26
>>654
いまいち何を言いたいのか分からないが・・・
動的にパターンマッチのオプションを切り替えたいという事か?

#!/usr/bin/perl -w

$str = "Perl PERL perl pErL Perl PeRl";
$pattern = "Perl";
$case = 1;&nbsp;&nbsp;&nbsp;&nbsp;#ignore case?
$global = 1;&nbsp;&nbsp;&nbsp;&nbsp;#global match?

#1.(?imsx) ----&gt;>>> perldoc perlre /(?imsx-imsx) <<<<----
$pattern = join("","(?o" , $case ? "i" : "" , $global ? "g" : "" , ")" , $pattern);
@matched = $str =~ /($pattern)/;

#2.eval
$option = join("","o" , $case ? "i" : "" , $global ? "g" : "");
eval "\@matched = \$str =~ /\$pattern/$option;";

#2.if...elsif
if($case && $global){
&nbsp;&nbsp;&nbsp;&nbsp;@matched = $str =~ /$pattern/ogi;
}elsif($case){
&nbsp;&nbsp;&nbsp;&nbsp;@matched = $str =~ /$pattern/oi;
}elsif($global){
&nbsp;&nbsp;&nbsp;&nbsp;@matched = $str =~ /$pattern/og;
}else{
&nbsp;&nbsp;&nbsp;&nbsp;@matched = $str =~ /($pattern)/o;
}


657 名前:みん 投稿日:2001/02/24(土) 14:56
↑何がなんだかわかりませーん。
あはぁ

658 名前:名無しさん 投稿日:2001/02/24(土) 15:29
タグの書き方知りたいだけなんだろうが
使ってる鯖とかcgiとか検索エンジンの環境書けよ


659 名前:みん 投稿日:2001/02/24(土) 15:35
あーん。
いけずぅ

660 名前:名無しさん 投稿日:2001/02/24(土) 16:21
掲示板のログにxmlを使おうと思ったのですが、
一般的に使われているdtdはありますか?
もしあればuriを呈示して頂きたいのですが…

661 名前:名無しさん 投稿日:2001/02/24(土) 21:08
638です。
一定時間ごとの実現はできている(擬似的にですが)ので、
perlでのやり方をお願いしたいのですが・・・

662 名前:名無しさん 投稿日:2001/02/24(土) 22:33
>>656
へぇ、1みたいなやり方もあるのか。
しらなんだ。

663 名前:_gunzip 投稿日:2001/02/24(土) 22:55
>>661
>perlでのやり方
ファイルのコピーのやり方?
cpが利用できるなら、
$src = "src"; #コピー元
$target = "target"; #コピー先
system("cp -a $src $target") and die $!;
(-a が無いなら-dpR)が一番。
Perlのみで処理しようと思うのなら、File::Copy、File::NCopy
モジュールを調べるといいと思いますよ。
-----
http://www.harukaze.net/~mishima/perl/faq/newbiefaqpgm.html#cmp
http://www.bekknet.ad.jp/~bero/docj/module/10/File_Copy.html


664 名前:名無しさん 投稿日:2001/02/24(土) 23:04
3MBぐらいの容量がアップできるアップローダーって
ありませんでしょうか?音楽をアップしたいんですが
容量が足らなくて3時間くらい探してるんです。
あったら教えて頂けないでしょうか?

665 名前:ひろゆき@菅直ノ、 投稿日:2001/02/24(土) 23:47
ツッコンで見たい年頃なの。あんな所やこんな所に。ナニを。

666 名前:名無しさん 投稿日:2001/02/25(日) 06:35
Perlを勉強して数日の全くの素人なのです。
ええと、学校の宿題なのですが、
javax.swing.html.parser.parse
という文字列を与えられた時に、.で
javax
javax.swing
javax.swing.html
javax.swing.html.parser
javax.swing.html.parser.parse
という形にするサブルーチンを三種類以上で書けといわれたのですが、一種類は自分でできました。
あと二種類以上書かなくてはいけないのですが・・・・その、人が多そうなので
ここにかいたのですが、かまわないでしょうか?
明日までなのですが・・・・


667 名前:サゲ茶漬け 投稿日:2001/02/25(日) 06:41
>>666
書いてミソ。俺Perlは得意じゃないけど。

668 名前:_gunzip 投稿日:2001/02/25(日) 06:44
>>666
$str = "javax.swing.html.parser.parse";

print $` , "\n" while($str =~ /\.|$/g);

これはもう思いついたかな?
あと、javax.swing.html.parser.parseでなく、javax.swing.html.parser.Parserだとおもふ。


669 名前:666 投稿日:2001/02/25(日) 06:51
こんなやつですが、どうも変です。

#!/usr/bin/perl -w

$string = "javax.swing.html.parser.parse";
@array = split(/\./,$string);
for($i = 0 ; $i <= $#array ; $i++){
    for($j = 0 ; $j <= $i ; $j++){
        print $array[$j . "."];
    }
    print "\n";
}

670 名前:666 投稿日:2001/02/25(日) 06:52
あと、一行目の文字ってなんでしょう?
見よう見まねでつけているのですけど・・・・


671 名前:サゲ茶漬け 投稿日:2001/02/25(日) 06:56
>>669
print $array[$j . "."];
が、
print $array[$j], ".";
じゃないのかな?

672 名前:666 投稿日:2001/02/25(日) 06:58
>668
すみません。せっかく書いていただいたのですが、さっぱりです。(?_?)
あ、あとjavax.swing.html.parser.Parserです。ごめんなさい。
>671
そのとおりです。
ですが・・・妙な表示になってしまいます。
どこがおかしいのでしょう・・・

673 名前:サゲ茶漬け 投稿日:2001/02/25(日) 06:59
>>669
というか、命題に忠実に書くなら、
for($j = 0 ; $j < $i ; $j++){
print $array[$j], ".";
}
print $array[$j], "\n";
の方がいいかもね?

674 名前:_gunzip 投稿日:2001/02/25(日) 07:12
>>666
スライスを用いて、

$str = "javax.swing.html.parser.Parser";
@array = split(/\./,$str);
print join(".",@array[0..$i++]) , "\n" for @array;

こうも書けるけれど、分解→結合であまり好きじゃないなあ。
やっぱり、668に書いた

print $` , "\n" while($str =~ /\.|$/g);

これが良いと思う。


675 名前:666 投稿日:2001/02/25(日) 07:27
>>673
その通りです!ありがとうございます。
最後に妙な"."がつくので困っていたところでした!
>>674
そんな書き方もあるのですか〜
勉強不足で全然理解できないのですけど、勉強すればきっとそういったものが
すぐに書けるようになるのですね。

ええと、なんかあっというまに三つ揃ったので、これから本を読んでゆっくり勉強します。
本当にありがとうございました。m(_ _)m



676 名前:AyuMoe(JAPU) 投稿日:2001/02/25(日) 07:40
ほとんどパズルの世界だな。こりゃ。:-)

# その1
# $_ の中身を破壊します。
$_ = "javax.swing.html.parser.Parser";
s/(?=\.|\z)/print "$`\n"/eg;

# その2
$_ = "javax.swing.html.parser.Parser";
print "$`$1\n" while(/([^.]+)/g);


677 名前:AyuMoe(JAPU) 投稿日:2001/02/25(日) 07:42
あ、しまった。その1は s/\.|\z/print "$`\n"/eg; で十分だよな。

678 名前:666 投稿日:2001/02/25(日) 08:15
>676-677
本当にありがとうございます。
理解できるように頑張って勉強します。
青いラクダの絵の本を読んでいますがよく分からない記号ばっかりで大変です。


679 名前:&&の人 投稿日:2001/02/26(月) 14:34
毎回初心者な質問で恐縮です・・・・・

掲示板のコメント内のURLを自動リンクするようにしたくて、
KENTさんのASUKABBSのスクリプトを見ているのですが、

sub auto_link {
    $_[0] =~ s/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\=\@\;\#\:\%]+)/$1<a href=\"$2\" target='_top'>$2<\/a>/g;
}


なんだか、このサブルーチンがそうなんじゃないかと思います。
あってるでしょうか(;^_^A

これは
([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\=\@\;\#\:\%]+)
を、
$1<a href=\"$2\" target='_top'>$2<\/a>
に変えるよ!っていうことですよね?

この中の$1、$2というのを探してみてもどこで定義されてるのかわからなかったのですが、
これは、特に定義しなくても良い変数なのでしょうか?
つまり$_のような、常套句というか慣用句というか、そういうものなのでしょうか?

680 名前:&&の人 投稿日:2001/02/26(月) 15:01
$数字って予約語なんですね。

> $数字とは、最後に行ったパターンマッチの括弧の数に対応したサブパターン。

という説明がありましたが、
なんのことかわかりません ?(゜_。)?(。_゜)?
どういうことなのか、わかるかた教えていただけますか・・・・・


681 名前:/bin/名無しさん 投稿日:2001/02/26(月) 15:25
この例だと

(^=^\"|^)にマッチした部分が $1 に、
(http\:[\w\.\-\/\?\&\=\@\;\#\:\%]+) にマッチした部分が $2 に、
それぞれ入ります。

$str = '111aaa222bbb333';
$str =~ s/(aaa)(222)(bbb)/ $1 $2 $3 /;
print $str; # 結果は '111 aaa 222 bbb 333' になる。

# なんだかなぁ。


682 名前:/bin/名無しさん 投稿日:2001/02/26(月) 15:27
>(^=^\"|^)にマッチした部分が $1 に、

([^=^\"]|^) だった。鬱。


683 名前:/bin/名無しさん 投稿日:2001/02/26(月) 15:42
それにしてもこんなので動くのか・・・?


684 名前:名無しさん 投稿日:2001/02/26(月) 18:34
CGIを起動されたら、FTPサーバーにリダイレクトしたいんですが、
IEが上手くFTPモード(?)になってくれず、
接続できません。

Location:
ftp://...
ヘッダを返すだけではだめなのでしょうか。

685 名前:&&の人 投稿日:2001/02/26(月) 18:41
>>681-682
ああ、なんだか難しいんですね(そんなことないですか?)
お返事ありがとうございました。
とにかくいろいろやってみます。m(_ _)m

686 名前:名無しさん 投稿日:2001/02/26(月) 20:40
テキストファイルの行数を表示するCGIが欲しいです。
お願いします。

687 名前:AyuMoe(JAPU) 投稿日:2001/02/26(月) 21:53
#! /bin/sh

echo "Content-Type: text/plain"
echo ""
wc -l FILE

688 名前:686 投稿日:2001/02/26(月) 22:12
JAPUさんありがとう。出来ました。


689 名前:なんで君 投稿日:2001/02/26(月) 22:45
人が集まる掲示板が欲しいです。
お願いします。

690 名前:名無しさん 投稿日:2001/02/26(月) 23:35
>>689
ここに掲示板のURL書け。
たったそれだけでどんな掲示板でも
人が集まるようになります。
騙されたと思ってやってみ。

691 名前: 投稿日:2001/02/26(月) 23:57
騙されたと思ってやってみたら
案の定騙されます。

騙されたと思ってやってみ。

692 名前:すら 投稿日:2001/02/27(火) 00:19
オらのスライムブリーダーがマジでうごかねぇっ好けどどうすればいいんかいな


693 名前:なんで君 投稿日:2001/02/27(火) 00:21
http://village.infoweb.ne.jp/~wanwan/20001/1b/index.html

694 名前:名無しさん 投稿日:2001/02/27(火) 13:54
他人が書いたソースの仕様書を作りたいんですけど
いいソフトあります?

有料/無料は問いません

695 名前:波平 投稿日:2001/02/27(火) 13:56
http://eccentric.virtualave.net/cgi-bin/up2/data/180.txt
なぜかユーザーデータが重複して書き込まれ、データファイルが1晩で
10MBくらいになり、レンタルWebスペース先からアカウント停止を
食らう羽目になってます…(´Д`;)
http://www.area-s.com/main/pet.html
ここで配布してたものにほんのちょっとだけ手を加えただけなんですが…
この「重複して追加書き込み」をさせないようにするにはどうしたらいいんでしょうか?

696 名前:_gunzip 投稿日:2001/02/27(火) 14:49
>>695
んーっと、少し見ただけだが、
76c76
< $samename = 0;
---
> $samename = 1;
もしかして、この辺りが原因かも。
$samename = 0;
に戻したらどうなる?


697 名前:波平 投稿日:2001/02/27(火) 14:53
>>696
ちょっとやってみますですヽ(´ー`)ノ

698 名前:_gunzip 投稿日:2001/02/27(火) 14:54
84c84
< $voice = 1;
---
> $voice = 0;
88c88
< $playtime = 1;
---
> $playtime = 0;
90c90
< $playminute = 0; # 例:0分
---
> $playminute = 5; # 例:0分
93c93
< $comeback = 1; # ペットを一回外に出すと何時間したら戻ってくるか。
---
> $comeback = 0; # ペットを一回外に出すと何時間したら戻ってくるか。

とりあえず、この辺りを元に戻した方がいいような。
他の部分の変更は関係なし。

699 名前:_gunzip 投稿日:2001/02/27(火) 14:59
↑のうち、↓これはどう考えても関係なし。(スマソ)
84c84
< $voice = 1;
---
> $voice = 0;


700 名前:波平 投稿日:2001/02/27(火) 15:01
>>696
…アンマリ変わんなかったです(´Д`;)
どんどんデータ量が膨れ上がっていきました…

701 名前:波平 投稿日:2001/02/27(火) 15:04
>>698
やっぱりそこいじらないとダメですか(´Д`;)
最初30分ごとになっていて、それは長すぎるといわれたんです。
特に外出時間が長いので(最短で1時間)もっと短くしたいんですが…

702 名前:波平 投稿日:2001/02/27(火) 15:12
でもまぁ戻したら元通りになりましたですヽ(´ー`)ノ
ありがとうございましたヽ(´ー`)ノ

703 名前:_gunzip 投稿日:2001/02/27(火) 15:17
いや、えーと、本当に数分見ただけなので全貌がいまいちなのだが、
外出時間を変更したければ、
492 if ($out == 1 && (time - $outdate) < $dayhour[$comeback]) {
の$dayhour[$comeback]を、好きな時間(秒単位)に変更したらいいのでは?
$comeback = 0だと、$dayhour[$comeback] = 0 になるから、0秒で戻ってくる
事になるような気がするのだが・・・
で、例えば外出時間を10分にしたければ10*60 = 600をそこにセットすればいいのでは?
492 if ($out == 1 && (time - $outdate) < 600) {


704 名前:波平 投稿日:2001/02/27(火) 15:17
ええと何度もすいません。
・モナーが好きな人ベスト5
・モナーが嫌いな人ワースト5
だけをランキングで表示させるにはどうしたらいいですか?
全部読み込むから負荷がかかるのなら、ちょっとだけしか取らなきゃいいと思ったのですが…


705 名前:波平 投稿日:2001/02/27(火) 15:28
ああそっか…$dayhourで固定されてると思い込んでました(´Д`;)
元で指定してやれば何の問題もないですね(´Д`;)

706 名前:_gunzip 投稿日:2001/02/27(火) 15:31
とりあえず、>>703を試してみて。
$comebackは他所で使われていないから削除しても良し。
このCGIは全く使った事がないから、ランキングとかはパス。(・・・すまぬ)

# よく考えたら仕事中だし・・・ヽ(´ー`)ノ


707 名前:弐ch編者 投稿日:2001/02/27(火) 15:38
>>705
えへえへ
pet.cgiの764〜772

print "$font2$petnameがなついている人は</font><br>";
if ($lovenum == 0) { print "いません<br>"; }
else { foreach $owner (@lovelist) { if($likecount > 4){last }$likecount++;print "$likecount位$ownerさん<br>\n"; } }
print "<br>\n";

print "$font2$petnameが嫌いな人は</font><br>";
if ($hatenum == 0) { print "いません<br>";}
else { foreach $owner (@hatelist) { if($kiraicount >4){last} $kiraicount++;print "$kiraicount位$ownerさん<br>\n"; } }
print "<br>\n";
にかえたらどうでしょ?
つか動作確認してません(笑
これからしてみます。
あ、、っていうか記録するときに5人までにすればこんな
強引そうなことしなくていいのか。
そっちのほうもみてみよーっと。

708 名前:弐ch編者 投稿日:2001/02/27(火) 15:41
>>705
とゆーか
よくみたらこれランキングとかじゃないっすねー(^_^;
単に古い人から5人表示してるだけだ、、、
うーむ。
とゆーか値があるのかどうかも不明、、、
ちと探ってきます。。。。

709 名前:弐ch編者 投稿日:2001/02/27(火) 15:46
あー値らしきものはあったあった、、、

ああ<>1111<>983256003<>6<>
これでいう6な。
タブソ。
ふう、、、

710 名前:波平 投稿日:2001/02/27(火) 15:52
>>709
それそれヽ(´ー`)ノ

711 名前:波平 投稿日:2001/02/27(火) 15:53
>>706
ありがとうございます。どうやら上手く動いてる気配ですヽ(´ー`)ノ

712 名前:弐ch編者 投稿日:2001/02/27(火) 15:55
あーわかってきたかも。
999〜1012を

if ($_[0] eq 'ownerlist') {
if ($love >= $loved) {
@lovelist[$lovenum] = "$love_$name";
$lovenum++;
if ($bestlove < $love)
{ $bestowner = "$name"; $bestlove = $love; }
} elsif ($love <= $disliked) {
@hatelist[$hatenum] = "$love_$name";
$hatenum++;
} else {
@otherlist[$othernum] = "$name";
$othernum++;
}
}

のようにする
んでもってさっきもだした764〜772を
print "$font2$petnameがなついている人は</font><br>";
if ($lovenum == 0) { print "いません<br>"; }
else { foreach (sort {$b <=> $a} @lovelist) { if($likecount > 4){last }$owner=(split/<>/)[1];$likecount++;print "$likecount位$ownerさん<br>\n"; } }
print "<br>\n";

print "$font2$petnameが嫌いな人は</font><br>";
if ($hatenum == 0) { print "いません<br>";}
else { foreach (sort {$a <=> $b}@hatelist) { if($kiraicount
>4){last} $kiraicount++;$owner=(split/<>/)[1];print "$kiraicount位$ownerさん<br>\n"; } }
print "<br>\n";
にする
すこしだけ動作テストしました

713 名前:弐ch編者 投稿日:2001/02/27(火) 15:56
>>711
おれのもためせゴルァー!
仕事中にペットCGIなんぞ見てたおれの努力は、、、(;Д;
(ってそんな努力でもなかったが、、、

714 名前:弐ch編者 投稿日:2001/02/27(火) 15:57
>>711
結局まとめは>>712
行数とかもしかしたらイヂてるならかわってるかもだけど
だいたいわかるよね?(^_^;

715 名前:_gunzip 投稿日:2001/02/27(火) 15:57
実現しようとするなら、やはり、1000行目の
@lovelist[$lovenum] = "$name";
この辺りを、(@はxxx)
$lovelist[$lovenum] = [$name,$love];
とでもして、
foreach ((sort {$b->[1] <=> $a->[1] } @lovelist)[0..4]){
....
}
とするのがいいだろうな・・・

716 名前:弐ch編者 投稿日:2001/02/27(火) 15:57
>>131
えと、ちゃんとランキング式にしたのを
向こうにかいといたんで
みといてねー

717 名前:_gunzip 投稿日:2001/02/27(火) 15:59
ふにゃ
かぶったなあ。
しかし、"$love_$name"のような文字列をソートして良いのかなあ。


718 名前:弐ch編者 投稿日:2001/02/27(火) 15:59
>>715
あ、やぱそっちのほうがいいですか、、、
なんか707で先にあんなもんかいたんで
めんどくて(^_^;

>>716
スレ板違い(^_^;

719 名前:弐ch編者 投稿日:2001/02/27(火) 16:02
>>717
あ、あんなソートだめっすか?
とゆーか718もわけわかんないこといってますね。
なんか頭くるくるパーの
BBS管理者がいたと思っといてください(;Д;


P.S.
 なぜか$love_$nameのままになってる、、、
本当はすこしみればわかるだろうけど
$love<>$nameです>>波兵さん

720 名前:_gunzip 投稿日:2001/02/27(火) 16:09
998行目からのコードを見ると、(@をつけてスライスを使ってるし・・・ミスだろうが)
上位、下位5人ずつのランキングを実現しようとすると、
人数が10人以下の場合変になるから、少し大きく書き直さないといけないような・・・
(↑自分の言っているコト意味不明・・・)
#仕事仕事っと。


721 名前:弐ch編者 投稿日:2001/02/27(火) 16:14
とゆーかとゆーか
ランキングやっちゃったら
それ以外の人ってのは意味あるのかね

722 名前:弐ch編者 投稿日:2001/02/27(火) 16:15
とゆーかたしかにいろいろ問題はのこります。。。
同順の場合。10人以下の場合。
メンド、、、

723 名前:名無しさん 投稿日:2001/02/27(火) 16:21
Perlの質問ではなく文字コードの質問なのでスレ違いかもしれませんが、

シフトJISで書いたスクリプト(掲示板)を
そのままアップロードして使っていますが、
特に文字化けはしません。

EUCに変換しないとマズイという話を聞き、ちょっと不安になっています。

シフトJISのままでも文字化けしないというのは、
なにかが異常なのでしょうか?

724 名前:_gunzip 投稿日:2001/02/27(火) 16:23
998-1011を、
if($_[0] eq 'ownerlist'){
    push(@lovelist,[$name,$love]);
}

758-775を、
@lovelist = sort {$b->[1] <=> $a->[1] } @lovelist;

print "$font2$petnameがなついている人TOP5は</font><br>";
if($#lovelist < 1){
    print "いません<br>\n";
}else{
    my $i = 0;
    foreach(@lovelist){
        last if $i++ > 5;
        print $_->[0] , "さんです<br>\n";
    }
    print "<br>\n";
}

print "$font2$petnameが逝ってよしな人TOP5は</font><br>";
if($#lovelist < 1){
    print "いません<br>\n";
}else{
    my $i = 0;
    foreach(reverse @lovelist){#手抜き(笑)
        last if $i++ > 5;
        print $_->[0] , "さんです<br>\n";
    }
    print "<br>\n";
}

これでどう?(まったく確認していないが・・・)
試す前に***必ず***バックアップを取ってくれ。

725 名前:波平 投稿日:2001/02/27(火) 16:24
そのランキングをやってみましたがなんか変だったです(´Д`;)
自分でももうちょっと考えてみます…

726 名前:_gunzip 投稿日:2001/02/27(火) 16:24
訂正
$#lovelist < 1
は、
$#lovelist < 0
の間違い。(二カ所訂正してくれ。)

727 名前:波平 投稿日:2001/02/27(火) 16:26
あ、>>725はにへん君へのレスです(´Д`;)
でもありがとう。

>>724の方法で再チャレンジですヽ(´ー`)ノ
_gunzipさん、お世話かけます…

728 名前:弐ch編者 投稿日:2001/02/27(火) 16:29
>>727
ひでぇ(^_^;
ちゃんと $love<>$nameに修正したですか?(^_^;

まぁ_gunzipさんのほうがいいから
そっちにしてくれ(;Д;

729 名前:弐ch編者 投稿日:2001/02/27(火) 16:29
波兵さんとこ10人以上だし
一応はちゃんと動くはずなのにーーー(^_^;

730 名前:波平 投稿日:2001/02/27(火) 16:38
>>728
うん、なんか嫌いな人が1位って表示されるだけだったよ(´Д`;)
つーかモナーのデータ入れ替えると(新しい代のペットになると)
飼い主データもリセットされるから動かなかったのかも…

>>724の方法で上手くいったみたいですヽ(´ー`)ノヽ(´ー`)ノヽ(´ー`)ノ
お手数かけました。
今度から自分で組めるように努力いたします…。

731 名前:弐ch編者 投稿日:2001/02/27(火) 16:43
ちっ、、、
波平さんに恩を売ることはできなかったか

732 名前:_gunzip 投稿日:2001/02/27(火) 16:44
>>730
ああ、それは良かった。ヽ(´ー`)ノ
これからも頑張ってください。

#では、真面目に仕事します・・・


733 名前:名無しさん 投稿日:2001/02/28(水) 00:42
LWP::Simple
を使いたいがため、初めてモジュールをインストールしたんですが、

$ wget
http://www.cpan.org/authors/id/RSE/lcwa-1.0.0.tar.gz
$ tar xvfz lcwa-1.0.0.tar.gz
$ cd lcwa-1.0.0
$ ./configure
$ make
$ su
# make install

でインストールしたら、
/usr/local/lib/lcwa/perl/lib/site_perl/LWP
にインストールされました。
/usr/local/lib/perl5/site_perl/5.6.0/LWP

/usr/local/lib/perl5/site_perl/LWP

にインストールしたいのですが、どうすればいいでしょうか?
よろしくお願いします。


734 名前:名無しさん 投稿日:2001/02/28(水) 02:07
age

735 名前:名無しさん 投稿日:2001/02/28(水) 02:33
>>723
>EUCに変換しないとマズイという話を聞き、ちょっと不安になっています。

なんでマズイの?

736 名前:名無しさん 投稿日:2001/02/28(水) 03:34
638です。いろいろ教えていただいてありがとうございます。勉強になります。
で、ディレクトリのコピーを以下のように書いたのですが、

use File::Copy;
copydir("./basedir","./bakupdir");

なぜかサーバーエラーになってしまいます。これってどこが間違っているのでしょうか?
なお通常のファイルのcopy()はきちんと動作しました。

737 名前:名無しさん 投稿日:2001/02/28(水) 08:09
>>735
サーバーの文字コードがEUCだから、それに合わせないとマズイという話でした。


738 名前:_gunzip 投稿日:2001/02/28(水) 09:38
>>736
とりあえず、ローカルで
#!/usr/bin/perl -w
use File::Copy;
eval{
copydir("src","to");
}
print $@ if $@ ne "";
を実行して、出てくるエラーメッセージを確認した方がいいと思う。
自分の推測では
Undefined subroutine &main::copydir called at xxx line x.
だと思うがなあ。しかし、copydirはドキュメントにはあるが、
ソースを見ても何処にも定義されていないみたいだが・・・(妙だ)
(ActivePerl5.6 Build622)
ところであまり関係ないが、ログの入ったディレクトリはサブディレクトリを持つの?


739 名前:名無しさん 投稿日:2001/02/28(水) 10:59
>>733
とりあえず README とINSTALL は読んだ?
perl モジュールのインストールは普通
  % perl Makefile.PL
  % make
  % make test
  # make install
の順では無かったっけ?
LWP::Simple だけ違うのかもしれないけど...

740 名前:名無しさん 投稿日:2001/02/28(水) 12:53
二次元以上の連装配列を関数の返り値として受け取りたいんですが
$a{'bbb'}{'ccc'}
の返り値を
return %a とすれば問題なく渡せるのでしょうか?
仮に関数側で %a をローカルで宣言した場合にデータ構造
どうなってるのかわからないので心配なのです。
もしよろしければ教えてください。

->との違いもよくわかってませんで…

741 名前:/bin/名無しさん 投稿日:2001/02/28(水) 13:10
sub a {
my(%a);
$a{bbb}{ccc} = 'abc';
return %a;
}

sub b {
my($b);
$b->{bbb}{ccc} = '123';
return $b;
}

%x = &a;
$y = &b;
print "$x{bbb}{ccc}\n";
print "$y->{bbb}{ccc}\n";

# この例でいいのかどうかわからんけど、とりあえず試すことから。


742 名前:_gunzip 投稿日:2001/02/28(水) 13:17
>>733
$prefix/lib/perl5/site_perl/
以下にディレクトリ階層を保ったままコピー(移動)させてやるだけで良いのでは?
つまり、例えば
cp -a /usr/local/lib/lcwa/perl/lib/site_perl/ /usr/local/lib/perl5/site_perl/
で良いと思うのだが・・・

もし、どうやっても駄目なら、
1.環境変数"PERL5LIB"にパスを追加設定する。
export PERL5LIB=/usr/local/lib/lcwa/perl/lib/site_perl/

2.スクリプトに
use lib '/usr/local/lib/lcwa/perl/lib/site_perl/';
を記述する。

3.-Iオプションで@INCに追加
perl -I/usr/local/lib/lcwa/perl/lib/site_perl/ hoge.pl
or
スクリプトの冒頭を
#!/usr/local/bin/perl -I/usr/local/lib/lcwa/perl/lib/site_perl/

のような逃げ道もありますが。


743 名前:( ´ー`)y~~ 投稿日:2001/02/28(水) 13:35
>>740
返せます。
普通、 $a{'aaa'} が存在する %a を返すと

( 'aaa', $a{'aaa'} )

を返したのと同じですが、二次元の連想配列なので $a{'aaa'} の値が、

% = ( 'bbb' => (bbbに対応する値) );

という感じの連想配列へのリファレンスになっているだけの違いです。


744 名前:名無しさん 投稿日:2001/02/28(水) 15:09
>>738
レスありがとうございます。

>ログの入ったディレクトリはサブディレクトリを持つの?
持たないです。ファイルが入ってるだけです。
ただファイルの数が数百〜数千ある上動的に生成されるので、
まとめてコピーしたいんです。

エラーメッセージはこれでよいのかどうか分かりませんが一応、
syntax error at D:\...\test.pl line 6, near "print"
と出ました・・・。

745 名前:_gunzip 投稿日:2001/02/28(水) 15:15
>744
ごめん。それは僕のミスだ。
eval{}に;が抜けているからSyntax Errorになっているわけ。


746 名前:_gunzip 投稿日:2001/02/28(水) 15:21
サブディレクトリを含まないなら、こんな感じかな。

#!/usr/bin/perl -w

use File::Copy;

$from = "./basedir";
$to = "./backupdir";
opendir(F,$from) or die "Can't open $from";
foreach(readdir(F)){
&nbsp;&nbsp;&nbsp;&nbsp;next if "$_" eq "." or $_ eq "..";
&nbsp;&nbsp;&nbsp;&nbsp;if(-f "$from/$_"){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;copy("$from/$_","$to/$_") or die $!;
&nbsp;&nbsp;&nbsp;&nbsp;}
}
closedir(F);


747 名前:名無しさん 投稿日:2001/02/28(水) 15:55
度々すみませんm(__)m
今度はこんなエラーが・・・
No such file or directory at D:\...\backup.cgi line 11.
うーん。。。

748 名前:_gunzip 投稿日:2001/02/28(水) 15:59
それはただ単にコピー先のbackupdirという名のディレクトリがないだけでは・・・
予めバックアップ用のディレクトリは作っておいてくださいな。

749 名前:名無しさん 投稿日:2001/02/28(水) 16:00
すみません。コピー先ディレクトリを作ってないだけでした。
作ったらきちんと動きました。
いやー、動いた瞬間はほんと爽快でした(^_^;)
いろいろとありがとうございました。

750 名前:Perl で s-jis のカタカナをひらがなに 投稿日:2001/02/28(水) 17:01

したいのですが

$zero = '0';
$zero =~ /(.)./;
$x82 = $1;

while (1) {
    print "please KATAKANA Chr \n";
    chomp($chr = <STDIN>);
    
    if ($chr =~ /^[\x83]([\x40-\x93])$/) {
        local($temp) = $1;
        $temp =~ tr/[\x40-\x93]/[\x9F-\xF1]/;
        $chr = $x82 . $temp;
    }
    
    print "$chr \n\n";
}

↑こうやると、なぜか“ゼ”と“ム”だけは変換できません。
どこがまずいんでしょうか?

751 名前:733 投稿日:2001/02/28(水) 17:24
>>739
READMEにインストール方法かいてなかったし、
INSTALLはありませんでした。

Makefile.Plが無くて、configure があったため、
上記の方法でやりました。

>>742
cp -a /usr/local/lib/lcwa/perl/lib/site_perl/* /usr/local/lib/perl5/site_perl/
でうまくいきました。
ありがとうございました。

1〜3の方法は最終手段と考えていました。
せっかくrootがあるけん、どうせならと…

752 名前:750 投稿日:2001/02/28(水) 19:10
失礼しました。他にもうまくいかないのがありました。
で、こうすると“ゼ”以外はうまくいくみたいです。

$zero = '0';
$zero =~ /(.)./;
$x82 = $1;

while (1) {
    print "please KATAKANA Chr \n";
    chomp($chr = <STDIN>);
    
    if ($chr =~ /^[\x83]([\x40-\x93])$/) {
        local($temp) = $1;
        $temp =~ tr/[\x40-\x4F]/[\x9F-\xAE]/;
        $temp =~ tr/[\x50-\x7E]/[\xAF-\xDD]/;
        $temp =~ tr/[\x80-\x93]/[\xDE-\xF1]/;
        $chr = $x82 . $temp;
    }
    
    print "$chr \n\n";
}

でも相変わらず“ゼ”だけはダメです。

753 名前:nanashi 投稿日:2001/02/28(水) 19:14
初心者なので他の方のスクリプトを見て勉強させて頂きたい
と思っているのですが、この(人の)スクリプトはとても綺麗、参考にした
方が良いというのありましたら、いくつかご紹介頂けませんでしょうか。
お願い致します。

754 名前:名無しさん 投稿日:2001/02/28(水) 19:41
>>753
KENT(藁

755 名前:名無しさん 投稿日:2001/02/28(水) 20:04
ActivePerlですが、
\x0AでLFのみを出力しようとしてもCR+LFになってしまい
LFのみを出力する事が出来ません。何故でしょうか?
\x0DだとちゃんとCRのみになるようですが…。


756 名前:AyuMoe(JAPU) 投稿日:2001/02/28(水) 20:09
>>753
http://yasu.asuka.net/soft/tinybbs.html
これは?

>>755
binmode FILEHANDLE;


757 名前:名無しさん 投稿日:2001/02/28(水) 20:19
>>756
JAPUさん、FTP鯖に繋がらないよ(ρ_;)

758 名前:名無しさん 投稿日:2001/02/28(水) 20:21
>>757
俺は繋がってるが・・・・?

759 名前:AyuMoe(JAPU) 投稿日:2001/02/28(水) 20:50
* 適切に逆引きが設定されていない (IPアドレスを逆引き -> 正引きしてその正当性をチェックしています。)
* パスワードとして適切なメールアドレスが入力されていない (MX/A recordをチェックします。Mozilla@, IExxUSER@ は却下されます。)

760 名前:755 投稿日:2001/02/28(水) 21:28
>>JAPUさん
おお、なるほど…。
Win98はテキストファイルとバイナリファイルを区別するんですね。
助かりました。どうもありがとうございます。

761 名前:始めて数日の初心者です 投稿日:2001/02/28(水) 22:13
メールのヘッダって、(途中でちょん切っています)
Received: from aa.aa.aa.aa (aa.aa.aa.aa [0.0.0.0])
by a.a.a.a.a.a (0.0.0/0.0W) with aaaaa id aaaaa;
aaa, a a aaaa aa:aa:aa +0900 (JST)
Date: aaa, a aaa aaaa aa:aa:aa JST
From: aaaaa aaaaa <aaa@aaa.aaa.aa>
Subject: =?ISO-2022-JP?B?xxxxxxxxxxxxxxxxxxxxC?=
To: aaaa@aaa.aaa.aaa
Reply-To: aaa@aaa.aaa.aaa
Posted: aaa, aa aaa aaa aa:aa:aa +0900
こんな形になってますけど、これを
キー 値
Date => aaa, a aaa aaaa aa:aa:aa JST
To =>: aaaa@aaa.aaa.aaa
のような形のハッシュに入れるのは何を使えばいいのでしょう。
またどんな関数を使えばよいのでしょうか。
普通にsplitするとだと、2.3行目が変な具合に宙に浮いてしまうので
どーか教えてください。


762 名前:761 投稿日:2001/02/28(水) 22:21
すみません。761では2,3行目の冒頭にスペース?がはいっています。
よろしくお願いします。

763 名前:AyuMoe(JAPU) 投稿日:2001/02/28(水) 22:30
#! /usr/local/bin/perl -w

while(<>) {
if(1../^$/) {
    if(/^\s/) {
     $header{$last}[-1] .= $_;
    } elsif(my($n, $f) = /^(.+?):\s*(.*)/s) {
     $last = lc $n;
     push @{$header{$last}}, $f;
    }
} else {
    push @body, $_;
}
}

foreach $k (keys %header) {
print "*** $k:\n";
foreach (@{$header{$k}}) {
    print "$k: $_";
}
}

print "$header{subject}[0]";
print @body;

__END__

764 名前:_gunzip 投稿日:2001/02/28(水) 22:31
>>761-762

#!/usr/bin/perl -w

@header{/^(.+?):\s/} = $' for split /^(?![\t\s])/m, <<'HEADER';
Received: from aa.aa.aa.aa (aa.aa.aa.aa [0.0.0.0])
    by a.a.a.a.a.a (0.0.0/0.0W) with aaaaa id aaaaa;
    aaa, a a aaaa aa:aa:aa +0900 (JST)
Date: aaa, a aaa aaaa aa:aa:aa JST
From: aaaaa aaaaa <aaa@aaa.aaa.aa>
Subject: =?ISO-2022-JP?B?xxxxxxxxxxxxxxxxxxxxC?=
To: aaaa@aaa.aaa.aaa
Reply-To: aaa@aaa.aaa.aaa
Posted: aaa, aa aaa aaa aa:aa:aa +0900
HEADER

print "$_ => $header{$_}" for keys %header;

765 名前:_gunzip 投稿日:2001/02/28(水) 22:32
かぶった。ごめんなさい

766 名前:_gunzip 投稿日:2001/02/28(水) 22:37
う・・・しかもよく見たら汚い・・・・すんません。

767 名前:名無しさん 投稿日:2001/02/28(水) 22:46
>>764
761じゃないけど、これって、明らかにsyntax errorになりませんか?
怖くて試してませんが。
ハッシュなのに@つけてるし。

768 名前:767 投稿日:2001/02/28(水) 22:51
ありゃ、ちゃんと期待通り動くね。前言撤回。
でもかなりトリッキーだなあ。

769 名前:名無しさん 投稿日:2001/02/28(水) 23:11
>>767
スライスだょ

770 名前:767 投稿日:2001/02/28(水) 23:41
>>769
にゃるほどね。
あと、ヒアドキュメントってこんな使い道もあるのね。
print文専用かと思ってた。

771 名前:750 投稿日:2001/03/01(木) 00:07
げ、、。もしかしてやっちゃいましたかワタシ、、(^^;;;

772 名前:740 投稿日:2001/03/01(木) 00:53
>>743 これで安心して続けられます。ありがとうございました。

773 名前:名無しさん 投稿日:2001/03/01(木) 04:43
入力が 'a,b,c,d,e' のとき $hoge{a}{b}{c}{d} = 'e'
のような連想配列を動的に作るにはどうすればいいんでしょうか?

入力は複数来て、たとえば上に加えて 'a,b,f,g' と 'a,h,i' が来たら

%hoge = (
&nbsp;&nbsp;a => {
&nbsp;&nbsp;&nbsp;&nbsp;b => {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c => {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d => 'e',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f => 'g',
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;h => 'i',
&nbsp;&nbsp;}
);

になるようにしたいんですが…。


774 名前:名無しさん 投稿日:2001/03/01(木) 10:26
$in = 'a,b,c,d,e';
@in = split(/,/, $in);
$value = pop(@in);
$list = '$hoge{' . join('}{',@in) . '}=$value;';
eval($list);
print $hoge{a}{b}{c}{d};

# 力技だ。。。


775 名前:名無しさん 投稿日:2001/03/01(木) 10:43
$in = 'a,b,c,d,e';
@in = split(/,/);
$hoge = pop(@in);
foreach (reverse(@in)) {
$hoge = {$_ => $hoge};
}
print $hoge->{a}{b}{c}{d};

# こっちのほうがスマートか・・・


776 名前:名無しさん 投稿日:2001/03/01(木) 11:18
use constant K => 5;
として定数を宣言した場合、
print K;
は5でOKですけれど、
print K , "\n";
はファイルハンドルがどうの、というエラーになってしまいます。
どなたか回避法を教えてください。

777 名前:_gunzip 投稿日:2001/03/01(木) 11:24
>>776
#!/usr/bin/perl -w

use constant C => 2;

print "" , C , "\n";
or
print C() , "\n";

何故後者が可能であるかは、constantプラグマの
ソースコード85-98行目をご覧下さい・・・

778 名前:_gunzip 投稿日:2001/03/01(木) 12:00
","ではなく"."を使って
print C . "\n";
とする手もあるわな。

779 名前:名無しさん 投稿日:2001/03/01(木) 15:25
条件演算子について分からないことがあったので質問します。
というか書き方をもっとスマートにできないかなと・・・。
宜しくお願いします。
以下のものなんですけど、もっとスマートにできますかね?

#!/usr/bin/perl -w
print "Input the number: ";
$input = <STDIN>;
$value = ( (not $input == '') ? "Just!\n" : "NO!\n");
print $value;

それから、『not』を『!』に替えるとうまく実行してくれません。
どうしてでしょうか?あと、『数を入力してくれ』の段階でただリターン
を入力すると、意図した結果は得られるのですが以下のようなメッセージ
が出て来ます。どういう意味なのでしょうか?
Argument "" isn't numeric in eq at ./test01.pl line 4, <STDIN> chunk 1.

宜しくお願いします。

780 名前:名無しさん 投稿日:2001/03/01(木) 15:59
#!/usr/bin/perl -w
print "Input the number: ";
chomp ($input = <STDIN>);
$value = (($input != '') ? "Just!" : "NO!");
print $value,"\n";

あまり代わらないか…。

781 名前:780 投稿日:2001/03/01(木) 16:00
$input != '' ってなんだ。ウツダシノウ。
$input ne '' ね。

782 名前:780 投稿日:2001/03/01(木) 16:05
ゴメソ。!=で良いのか。初心者がでしゃばるものじゃないね。

783 名前:/bin/名無しさん 投稿日:2001/03/01(木) 16:11
>>779
not と ! の違い以前に、 == と eq の違いとか、$input の中身とか。

print "Input the number: ";
$_ = <STDIN>;
chomp;
$value = /^$|\D/ ? "NO!\n" : "Just!\n";
print $value;


784 名前:名無しさん 投稿日:2001/03/01(木) 19:22
>>773
これでどうだ!うまくいってるが!自分でもいまいち理解不能!

sub aaa {
    my ($hashref, $in) = @_;
    my @in = split(/,/, $in);
    my $val = pop(@in);
    my $ref = \$hashref;
    foreach (@in) {
        $ref = \${$$ref}{$_};
    }
    $$ref = $val;
}
&aaa(\%hoge, 'a,b,c,d,e');
&aaa(\%hoge, 'a,b,f,g');
&aaa(\%hoge, 'a,h,i');

785 名前:( ´ー`)y~~ 投稿日:2001/03/01(木) 19:44
>>779
数値じゃないか0ならNo、それ以外はJustってことでしょうか?

$value = ( $input+0 ) ? "Just!\n" : "NO!\n";

こういうインチキコードはwarning出るしなぁ…。

>『not』を『!』に替えるとうまく実行してくれません。
! $input == '' は ( not $input ) == '' と同じです。
$input の改行を取り除いていないので、not $input は必ず偽であり、
結局 '' == '' と同じことになってしまい、いつも"Just!" になります。

>意図した結果は得られるのですが以下のようなメッセージが出て来ます。
== は数値どうしを比較するものなのに ''(空の文字列)が右側にあるので
"" isn't numeric("" は数値じゃないよ)と警告してくれてます。お節介さん(;´д`)


786 名前:名無しさん 投稿日:2001/03/01(木) 22:31
すみません二つ質問させてください。
1.ハッシュに格納されているキーと値のペアの総数をもとめるにはどうするの?
2.変数をエイリアスするにはどうすればいいの?

2はどちらかというと単なる興味ですので。
ちゅうことでお願いします。__(_ _)__


787 名前:786 投稿日:2001/03/01(木) 22:33
しまった。さげてる〜あげ

788 名前:AyuMoe(JAPU) 投稿日:2001/03/01(木) 22:40
$n = scalar keys %hash;
単に
$n = keys %hash;
でも良いが。

$x = "mai";
*y = \$x;
print "$x $y\n";
$y = "ayu";
print "$x $y\n";

789 名前:_gunzip 投稿日:2001/03/01(木) 22:41
>>786
1.
$n = keys %hash;

2.
*a = \$b;
*c = \@d;
*e = \%f;

ex)
#!/usr/bin/perl -w

$hoge = "scalar hoge";
@hoge = ("array,"hoge"");
%hoge = ("hash" => "hoge");
$foo = "scalar foo";
@foo = ("array","foo"));
%foo = ("hash" => "foo");

*hoge = \@foo;

print "\$hoge, => $hoge\n";
print "\@hoge, => @hoge\n";
print "\$hoge{hash}, => $hoge{hash}\n";

#眠い・・・

790 名前:_gunzip 投稿日:2001/03/01(木) 22:42
>>786
何でこう、かぶるのかにゃあ。
あと、ラクダ本P.59を参考にされると良いと思います。

791 名前:_gunzip 投稿日:2001/03/01(木) 22:48
>>789のtypo修正
#!/usr/bin/perl -w

$hoge = "scalar hoge";
@hoge = ("array","hoge");
%hoge = ("hash" => "hoge");
$foo = "scalar foo";
@foo = ("array","foo");
%foo = ("hash" => "foo");

*hoge = \@foo; #@hogeを@fooのエイリアスに

print "\$hoge => $hoge\n";
print "\@hoge => @hoge\n";
print "\$hoge{hash} => $hoge{hash}\n";

↑結果をよく見て下さい。特に、@hogeが@fooのエイリアスになっているが
他の$hogeや%hogeは全く影響を受けていない、という点に注目してください。




792 名前:786 投稿日:2001/03/01(木) 23:16
>788-791
あっというまに・・・・ありがとう!二方の例を試してみたところよく分かりました!
ラクダ本は持ってませんが、こういう時のためにも必要っぽいですね!


793 名前:779 投稿日:2001/03/01(木) 23:50
>>780
いえ、初心者だからとおっしゃらずこれからもよろしくお
願いします。

>>783
>>$value = /^$|\D/ ? "NO!\n" : "Just!\n";
こういう書き方もあるんですね…。
…勉強してまた出直してきます…。

>>785
警告についての詳細、ありがとうございました。
お答えいただいたみなさんがchompを入れていたのは
そういうわけだったんですね。

ありがとうございました。


794 名前:( ´ー`)y~~ 投稿日:2001/03/02(金) 00:08
791で思い出したんですが、
*foo = *bar と *foo = \$bar では微妙に挙動が違うことがありますよね。

-----
$hoge = 'GLOBAL';
*assign_glob = *hoge;
*assign_ref = \$hoge;
*assign_gref = \*hoge;
&local_test();

sub local_test{
&nbsp;&nbsp;local $hoge = 'LOCAL';

&nbsp;&nbsp;print "assign_glob = $assign_glob\n";
&nbsp;&nbsp;print "assign_ref = $assign_ref\n";
&nbsp;&nbsp;print "assign_gref = $assign_gref\n";
}
-----
assign_glob = LOCAL
assign_ref = GLOBAL
assign_gref = LOCAL
-----
*foo = \$bar は完全なエイリアスと信じて苦労したことがあるんですが、
この違いって、どこかに書いてあることなんでしょうか。
ラクダ本しか知らない…

795 名前:名無しさん 投稿日:2001/03/02(金) 00:36
PerlでCみたいな関数の参照渡しってできる?

796 名前:AyuMoe(JAPU) 投稿日:2001/03/02(金) 02:05
sub moe { return "ayu" }
sub print_moe { my $sub = shift; print $sub->(), "\n" }
print_moe(\&moe);

ってこと?

797 名前:名無しさん 投稿日:2001/03/02(金) 21:30
正規表現で検索したいのです。
やりたいことは、各行頭から1つめのTABを検索したいのです。
具体的な記述方法を教えていただけないでしょうか。
お願いします。

798 名前:/bin/名無しさん 投稿日:2001/03/02(金) 21:39
$_ = "123\t456\t789\t0";
$_ =~ /\t/g;
print pos($_);

# 4 と表示される。4文字目が1つめのタブということ。
# なんか気になるがとりあえずほっとく。


799 名前:名無しさん 投稿日:2001/03/03(土) 11:51
こんにちは。
もうかなりお手上げです。どなたか教えてください。
チャットを作っています。
退出ボタンを押したら画面に「ばいばい」と出て終了するようにしたいのですが…

#退出ボタンの部分
print "<form method=POST action=\"chat.cgi\">\n";
print "<input type=hidden name=mode value=taisyutu>";
print "<br><input type=submit value='退出'></form><br><hr>";

(中略・・・・ReadParseで$mode=$in{'mode'};などなど・・・・・)

#退出ボタンを押されたときの処理
    if($mode eq taisyutu){
      print"ばいばい";
      exit;
    }

問題部分だけを書いてみました。どうしてもエラーが出てしまいます。
exit;を書くことがエラーの原因のようなのですが、
この書き方はexitのルールに違反しているのでしょうか?
掲示板を作ったときには
if($comment eq ""){
    print"コメントがありません";
    print"<a href='$cgi'>戻る</a>";
    exit;
}
というようにやってうまくいったので、今回もそうしたいのですが。
なぜうまくいかないのか、ぜんぜんわかりません。アドバイスをお願い致します。

800 名前:名無しさん 投稿日:2001/03/03(土) 12:43
$mode eq taisyutu
$mode eq "taisyutu"

801 名前:名無しさん 投稿日:2001/03/03(土) 13:20
すいませんがハッシュと配列の代入について教えてください。
一次元目がハッシュで、それが参照する先が配列という具合にして
$hash{'key'}[0] のように情報を保持しておいて、
必要に応じて他の一次元配列に代入したいんです。
$data = (
'key0'=>{'a','b','c'},
'key1'=>{'d,e,f}
);
もしくは 'key0'=>('a','b','c')として
@array = @{$hash{'key0'}}
等のように試してみましたがハッシュとして受け取ることはできましたが
配列として最初に代入した順番でそのまま受け取れませんでした。
多次元配列が可能なのでできるとは思うんですがここの記述方法で詰まってしまいました。
どなたかヒントだけでも教えていただけないでしょうか?

802 名前:名無しさん 投稿日:2001/03/03(土) 13:23
800さん、お返事ありがとう御座います。
ですが、ダメでした(TT)

    if($mode eq taisyutu){
      print"ばいばい";
      exit;
    }

この部分を、
    if($mode eq taisyutu){
      $bgcolor="#ffffff";
    }

こうしてみると、実際に背景色が変わります。
ですからエラーの原因はexitにあるような気がするのですが、ちんぷんかんぷんです。
なんでだろう〜〜
$bgcolor="#ffffff";
↑これがOKなのにexit;がエラーになるって、なんなんでしょう。。。


803 名前:名無しさん 投稿日:2001/03/03(土) 13:29
>802
ヘッダを吐く前にexitさせてるとか?

    if($mode eq 'taisyutu'){
      print "Content-type: text/plain\n\n";
      print"ばいばい";
      exit;
    }
ってしてもエラー出る?
出ないなら終わらせる場所を考えなおした方が良いですよ。

804 名前:799=802 投稿日:2001/03/03(土) 13:49
803さん、レスありがとうございます。
おっしゃるとおり、
print "Content-type: text/plain\n\n";
の前にexitを書いています。
まずいのでしょうか?(汗

そこで、
if($mode eq 'taisyutu'){
      print "Content-type: text/plain\n\n";
      print"ばいばい";
      exit;
}
としてみたところ、
このスクリプト自体(chat.cgi)を「ダウンロードするかい?」と聞かれてしまいました。
あまりに突飛な出来事に、混乱しています。どうなってるのでしょう・・・・
ちなみに、ローカルでアパッチをつかって実験しています。
ああ・・・・


805 名前:799=802 投稿日:2001/03/03(土) 13:55
試しに
  if($mode eq taisyutu){
   print "Content-type: text/plain\n\n";
   print"ばいばい";
#   exit;
}

このようにexitを消してみました。
そして退出ボタンを押してみました。(押すと$modeがtaisyutuになります)

すると、

ばいばいContent-type: text/html

と、表示されました。
「ばいばい」と「Content-type: text/html」の順番が逆ですよね?
どつもにはまっているのでしょうか?

806 名前:799=802 投稿日:2001/03/03(土) 13:56
どつも=ドツボ

807 名前:名無しさん 投稿日:2001/03/03(土) 14:13
>>801
無名配列は[]を使うのだ。

%data = (
'key0'=>['a','b','c'],
'key1'=>['d','e','f'],
);
@a = @{$data{'key0'}};


808 名前:799=802 投稿日:2001/03/03(土) 14:13
print "Content-type: text/plain\n\n";

を一つにまとめて、その直後に
  if($mode eq taisyutu){
   print "Content-type: text/plain\n\n";
   print"ばいばい";
   exit;
}

を持ってきたらうまくいきました。お騒がせして申し訳ありませんでした。
print "Content-type: text/plain\n\n";
について、あまり考えないで書いていましたが、
みなさんのアドバイスのおかげで勉強になりました。
レスくださった方々、どうもありがとうございました。


809 名前:名無しさん 投稿日:2001/03/03(土) 14:17
>799=802
明らかにヘッダを出す前にexitさせた為のエラーですね。
ダウンロードになるのは別に問題無いですよ。
エラーが出るか出ないか調べる為に入れてみただけなので。
ダウンロードしたものには「ばいばい」とだけなかったですか?

exitを消した場合の結果は

Content-type: text/plain
ばいばい
Content-type: text/html

の順で流れてるのでtext/plainのデータとして
「ばいばいContent-type:text/html」
と表示されたわけです。

Content-typeを出力する前に終了させるとエラー出します。

ばいばいと出したいだけなら
if($mode eq 'taisyutu'){
print "Content-type: text/html\n\n";
print '<html><body>ばいばい</body></html>';
exit;
}
で大丈夫では。

810 名前:809 投稿日:2001/03/03(土) 14:20
って、解決してるし(。。;;
頑張って下さいね。

811 名前:799=802 投稿日:2001/03/03(土) 14:56
>810さん

>Content-typeを出力する前に終了させるとエラー出します。

はい。勉強になりました。どうもありがとうございました!


812 名前:名無しさん 投稿日:2001/03/04(日) 01:33
受信したメールから相手のアドレスを変数$addressに読み込んで
挨拶を送る単純なプログラムを作ろうとしているのですが
変数に4294967294という数値が読み込まれてしまい困っています。
何が問題なのでしょうか。

#!/usr/bin/perl -w

$sendmail = "/usr/sbin/sendmail";
while(<STDIN>){
    if(/^From: /){
        $address = $_;
        $address = ~s/^From:\s//;
        chomp($address);
    }
}
open(MAIL,"|$sendmail \"$address\"") || die("cannot open");
print MAIL "To: $address\n";
print MAIL "From: xxx\@xxx.xx.xx\n";
print MAIL "Subject: Hello\n";
print MAIL "\n";
print MAIL "Hello\n";
close(MAIL);

813 名前:AyuMoe(JAPU) 投稿日:2001/03/04(日) 01:43
"= ~" ではなくて、"=~" です。
$address = ~s/^From:\s//;
だと、/^From:\s// (つまり、1) のビット反転をして、$address に代入する
ことになります。

あと、このままだと外部から任意のコマンドを実行可能です。
From: "| ls -lR > /tmp/ls-lR |"
という行がある場合を考えてみて下さい。

814 名前:名無しさん 投稿日:2001/03/04(日) 02:08
AyuMoeさん、ありがとうございます。
見やすいようにスペース入れて書く習慣があったので
気付きませんでした。
外部からのコマンド実行も考えてませんでした。
条件指定がかなり大雑把ですね。
本当にどうもありがとうございます。

815 名前:便乗名無しさん 投稿日:2001/03/04(日) 13:10
文字列中にメールアドレスやURLが入力されたものとして、
これの正当性をチェックするライブラリや関数はあるのでしょうか?

816 名前:801 投稿日:2001/03/05(月) 03:20
>>807
助かりました。これで先に進めます。
配列の添え字としては使うことがありますけどこういうのは気づきませんでした。
ありがとうございました。

>>815
http://www.din.or.jp/~ohzaki/perl.htm
ここの正規表現は参考になるかと。

817 名前:ABC 投稿日:2001/03/05(月) 07:37
こんにちは。

今本を読みながらperlを勉強しているものなんですが、このプログラムを見て思ったのですが、
@ARGVの値($ARGV[?])は文字列として$each_tallに代入されているんですか?
それとも数値として代入されているんでしょうか?実行したところ、文字列として代入されているようなのですが、
何故数値ではなく文字列として代入されるのでしょうか。お手数ですがどなたか教えて下さい。

818 名前:ABC 投稿日:2001/03/05(月) 07:59
すいません、これがプログラムです。

print "平均は" ;

unless ( @ARGV ) {


die "引数が0です" ;

}

foreach $each_tall (@ARGV) {

    $sum += $each_tall ;

}

print $sum / @ARGV ;

print "です。" ;




819 名前:ABC 投稿日:2001/03/05(月) 08:03
あれれ・・・少しおかしいですけど・・・すみません気にしないで下さい(^_^;
とりあえず817の質問の答えが頂ければ幸いです。何度もすみませんでした。


820 名前:名無しさん 投稿日:2001/03/05(月) 08:09
文字列 01 渡したいのに数値にされて 1 になっちゃったら
いやです。

821 名前:ABC 投稿日:2001/03/05(月) 08:35
すみませんが、もう少し詳しく説明していただけませんでしょうか。

822 名前:名無しさん 投稿日:2001/03/05(月) 10:43
何度かこちらでお世話になっているものです。
いつも質問ばかりですみません。。。。

掲示板で、クッキーを使い、前回入力してくれた名前を
次回からも自動的に名前欄に入るようにしたくて、
とりあえず、まず以下のように書いて、クッキーを設定しようとしたところ、

print "Content-type: text/html\n\n";
print"Set-Cookie: ";
print"NAME=$name; ";
print"expires=Monday, 31-Dec-2001 23:50:59 GMT; ";

実行すると、

Set-Cookie: NAME=; expires=Monday, 31-Dec-2001 23:50:59 GMT;

という文字が画面の上に出てきてしまいました。
これって失敗ですよね?
でも良く考えたら(初心者なりにではありますが…汗)、
print命令だし、そりゃ画面に出てくるよな〜、と行き詰まってしまいました。
でも本を見たら、こう書いてあるし・・・・・
どこか間違っているのでしょうか?アドバイスを宜しくお願い致します。



823 名前:>822 投稿日:2001/03/05(月) 11:03
最初のprintでヘッダ終わっちゃってますよ

824 名前:名無しさん 投稿日:2001/03/05(月) 13:51
822です。
823さん、ありがとうございます。
そうでした、
本の最初のほうを読み返したら、ヘッダのあとは1行あける(2回改行)で、
\n\nとするんでした・・・・。どうもありがとうございました。


825 名前:_gunzip 投稿日:2001/03/05(月) 22:20
>>794
なるほど。自分はそういった経験はありませんでした。
で、調べてみようと思い20分ほど Devel::Peek でいろいろDump()して、
$hoge の REFCNT や、それぞれの GV が持つGP の REFCNT,EGV を眺めた感想ですが、
$hoge = 'GLOBAL';
*assign_glob = *hoge;
*assign_ref = \$hoge;
ここまで実行された内部のイメージは、以下のように**なるような気が**します。
#AA書くのは結構面倒なので*かなり*端折ってます。

┌────┐
│ defstash├─┐
└────┘  │
stash(main)   │
┌──────┴────────────┐
│            main              │
├───┬───┬─────┬─────┤
│ main:: │ hoge │ assign_glob │ assign_ref │
└───┴─┬─┴──┬──┴──┬──┘
gv   ┌──┘ gv  ┌┘      gv │
┌──┴──┐┌──┴────┐┌┴──────┐
│main::hoge ││main::assign_glob ││main::assign_ref │
└──┬──┘└──┬────┘└──┬────┘
gp   ├──────┘         gp │
┌──┴─┐svpv┌─────┐    ┌─┴──┐
│ SV    ├─→│"GLOBAL" │←─┤SV    │
├────┤   └─────┘   ├────┤
│ HV    │     0x458290c      │HV    │
├────┤                 ├────┤
|.....以下略                  │.....以下略

(GV assign_glob とGV hoge は同一の GP(hogeのもの)を共有。
GV assign_ref のGPは新たに作られる。)



826 名前:_gunzip 投稿日:2001/03/05(月) 22:20
その後、
local $hoge = 'LOCAL';
によって、stash 内に存在するGV hoge のスカラー値が新たに"LOCAL"に書き変えられ、
以前から存在していた SV の方はフラグ、アドレスと共にsavestackにpushされるので、
┌────┐
│ defstash├─┐
└────┘  │
stash(main)   │
┌──────┴────────────┐
│            main              │
├───┬───┬─────┬─────┤
│ main:: │ hoge │ assign_glob │ assign_ref │
└───┴─┬─┴──┬──┴──┬──┘
gv   ┌──┘ gv  ┌┘      gv │
┌──┴──┐┌──┴────┐┌┴──────┐
│main::hoge ││main::assign_glob ││main::assign_ref │
└──┬──┘└──┬────┘└──┬────┘
gp   ├──────┘        gp  │
┌──┴─┐svpv┌─────┐    ┌─┴──┐
│ SV    ├┐  │"GLOBAL" │←─┤SV    │
├────┤│  └─────┘   ├────┤
│ HV    ││svpv┌─────┐  │HV    │
├────┤└─→│"LOCAL" │  ├────┤
|.....以下略      └─────┘  │.....以下略
               0x4582858

このスコープ内での$assign_globへのアクセスは、stash内のGV assign_glob のGP
(これはGV hogeのGPでもある)を経てSVへ、となるので、
$assign_glob = ${*assign_glob} = ${*hoge} = $main::hoge(localにより上書きされている) = "LOCAL"
(結果:"LOCAL")
一方、*assign_refの方は何ら影響を受けませんから、
$assign_ref = ${*assign_ref} = ${\$hoge} = $hoge = "GLOBAL"
(結果:"GLOBAL")

・・・となるからではないか、と思ったのですがこの推測は正しいでしょうか?
詳しい方に訂正して頂けると有り難いです・・・


827 名前:_gunzip 投稿日:2001/03/05(月) 22:24
#・・・後になって見てみると、間違ってるっぽいなあ。


828 名前:_gunzip 投稿日:2001/03/06(火) 05:13
>>617-619
>@ARGVの値($ARGV[?])は文字列として$each_tallに代入されているんですか?
取りあえずDevel::PeekでDump()してやるとSV値PV(PointerValue)型ですから、
文字列値として格納されていますね。

>何故数値ではなく文字列として代入されるのでしょうか。
すみません。これは分かりません。
ただ、Perlでは、コンテキストに応じてPerlインタプリタが勝手に状況を
判断して数値から文字列へ、又は逆に文字列から数値へと自動的に変換して
くれますので、この変数は文字列型なのか、それとも数値なのかといった事を
さほど気にする事はないと思います。
#*どうしても*気になるならば、0を加算する、一倍するなどの手もあります。
例えば、例のスクリプトについて、
foreach $each_tall (@ARGV) {
&nbsp;&nbsp;&nbsp;&nbsp;$sum += $each_tall;
}
この$each_tallは始め文字列ですが
$sum += $each_tall; #$sum = $sum + $each_tall;
加法演算子によって、$each_tallが文字列から数値へと変換された後、
加算が行われ、数値が返されるわけです。

うーん。なんというか、この辺りは使っているうちに慣れてくると思います。
(・・・と言いますか、あまり意識しないようになります)

#そういえば、かなり前のfj.lang.perlにも似たような記事があった気が・・・


829 名前:_gunzip 投稿日:2001/03/06(火) 05:18
ftp://ftp.jaist.ac.jp/pub/news-archive/fj.lang.perl/199403.tar.gz
の316辺りかな。

830 名前:ババゲ〜ニョ 投稿日:2001/03/06(火) 11:38
ファイルから読み込むには
while(<IN>){処理;}
が定番ですよね

これだと1行ずつ読み込んで処理するので
複数行にわたるパターンマッチはできないのでしょうか

すべてのデータをメモリ上に読み込んだ後で
複数行にわたるパターンマッチをするためにはどうすれば良いでしょうか

831 名前:_gunzip 投稿日:2001/03/06(火) 12:48
>>830
undef $/; #入力コードセパレータの$/をクリア
$data = <IN>; #ファイルの中身を一括して$dataの中に入れる
$data =~ /pattern/;
で良いと思います。


832 名前:_gunzip 投稿日:2001/03/06(火) 12:52
誤:入力コードセパレータ
正:入力レコードセパレータ
あと、パターンマッチオプションの/s,/m 等についても
調べると良いと思います。

833 名前:ババゲ〜ニョ 投稿日:2001/03/06(火) 12:56
>> gunzip
さんきゅう
試してみます

834 名前:/bin/名無しさん 投稿日:2001/03/06(火) 17:30
local $/ = undef;

というのも・・・


835 名前:初期不良 投稿日:2001/03/07(水) 05:23
外部コマンドを使わずに nslookup する方法ってあります?
いろいろ調べてみたら、hostbyaddr() とか言う関数を
使っている例や、Net::DNS を使うような話がありましたが、
私の環境では使えませんでした。
結局 `nslookup -q=$type $host` などとして取得していますが、
回数も多いのでプロセスがとても重そうです。
自前で Socket を使うしかないんでしょうか?

836 名前:ABC 投稿日:2001/03/07(水) 11:04
817-819>gunzipさん(828)

>取りあえずDevel::PeekでDump()してやるとSV値PV(PointerValue)型ですから、
>文字列値として格納されていますね。
すいません本読みはじめたばかりで、何を言っているのかさっぱりわかりません。
取り敢えず、代入をしているからリストコンテキストで文字列扱いされてると言う事はわかりました。
勝手な勘違いすみませんでした。

あと1つ質問しようと思っていたのですが、

>この$each_tallは始め文字列ですが
>$sum += $each_tall; #$sum = $sum + $each_tall;
>加法演算子によって、$each_tallが文字列から数値へと変換された後、
>加算が行われ、数値が返されるわけです。
でわかりました。少々配列の事で頭がこんがらがってました。

どうもありがとうございました。



837 名前:名無しさん 投稿日:2001/03/07(水) 12:44
>>835
素直に use Socket して gethostbyaddr でダメですか?
5.005_03 では確実に動いてますが

838 名前:初期不良 投稿日:2001/03/08(木) 00:22
>素直に use Socket して gethostbyaddr でダメですか?
げ、そういう関係だとはつゆ知らず...

839 名前:名無しさん 投稿日:2001/03/08(木) 07:05
perl5.004の鯖とperl5.00503の鯖借りてるんですけど
違いってなんですか?
前者だと動いて後者だと動かないperlがあるのですが...
そんな事考えられます?

840 名前:_gunzip 投稿日:2001/03/08(木) 09:43
>>839
Perlのバージョン間の違いを調べたい時は
perldelta
perl5005delta
perl5004delta
を読むと良いよ。

#でも、5.004で動いて5.00503で動かないというのは妙だなあ。

841 名前:名無しさん 投稿日:2001/03/08(木) 09:43
動かない機能ならあるかもな。
バージョン違うのは何らかの手が加えられてるってことなんだから。

そいやモジュール関連って5.004からだったっけ?

842 名前:839 投稿日:2001/03/08(木) 12:01
鯖の名前挙げるとkagoya(前者)とsakura(後者)なんですが
同じようにupして同じようにパーミッション変更しても
後者だけエラーが出ます・・・
パーミッションは、ディレクトリ・実行ファイルとも701、
記録ファイルは601にしています。
705・755・777、604,606,666でも試しましたが駄目です。

エラーログは「Premature end of script headers」と出てます。

843 名前:_gunzip 投稿日:2001/03/08(木) 13:30
>>842
>Premature end of script headers
必要なヘッダをちゃんと吐いていない、ってこと。
おそらく、ヘッダをはかないうちにプロセスが死んだのでは?
die()とか、exit()とかしている箇所を確認すべきだと思うな。

例えば、sendmailのパスが両者で異なっていて(本当に違うかどうかは知らない)
そこを変更しないままなので、
open(MAIL, "/usr/sbin/sendmail -tf hogehoge@galaxy.far.far.away") || die $!;
の辺りで死んでいる、とか。

#大抵/usr/lib/sendmailかな・・・

844 名前:666 投稿日:2001/03/08(木) 22:30
666です。この前は質問に答えていただいてありがとうございました。
あれからいろいろ勉強したのですが、
-----data.txt-----
00000000-Noguchi XXX-554-69
00000001-Nomura XXX-520-540
00000002-Tanaka XXX-984-213
00000003-WATARI XXX-24-654
00000004-WATARO XXX-595-456
00000005-PA XXX-554-998
00000006-AQUA XXX-156-1
....以下3万行ほど。
とういうようなデータファイルがあり、各行の-で区切られた2番目の
セクションについて、TanakaというのをHiguchiと置き換えるスクリプト
を書く事になったのですが、自分では下のように書いてみました。
なにか間違っている点や、こうしたらいいという点を指摘していただけると
嬉しいのですが・・・・

#!/usr/local/bin/perl
open(DAT,"data.txt");
while(<DAT>){
@data = split(/\-/,$_);
$data[1] =~ s/Tanaka/Higuchi/;
$str = join("",@data);
print $str;
}
close DAT;


845 名前:666 投稿日:2001/03/08(木) 22:33
あと、一応動きます。


846 名前:_gunzip 投稿日:2001/03/08(木) 22:40
>>844-845
僕なら、
perl -pe "substr($_,9) =~ s/^Tanaka/Higuchi/" data.txt >outfile
の一行で済ませるかな。(書き戻すなら-i)

あと、
>open(DAT,"data.txt");
ファイルのオープンに成功したかどうかちゃんとチェックする。
open(DAT,"data.txt") or die "Can't open data.txt";

>$str = join("",@data);
>print $str
は、
print @data;
で良い。(わざわざ連結する必要はないよ)
perldoc -f print ね。

うーん・・・これぐらいかなあ。


847 名前:666 投稿日:2001/03/08(木) 22:49
>846
おお、速い どうもありがとうございます!
>僕なら、
>perl -pe "substr($_,9) =~ s/^Tanaka/Higuchi/" data.txt >outfile
>の一行で済ませるかな。(書き戻すなら-i)
すみません・・・よく分からないです。m(_ _)m

>ファイルのオープンに成功したかどうかちゃんとチェックする。
>open(DAT,"data.txt") or die "Can't open data.txt";
分かりました。そうしますね。でも、or と || ってどう違うのでしょうか?
どちらもopen文の所で見かけるのですが・・・・

>print @data;
>で良い。(わざわざ連結する必要はないよ)
今やってみると、そうみたいですね。知らなかったです。

あと、何度も聞いて申し訳ないのですが、perldoc -f print って、なんでしょう?


848 名前:_gunzip 投稿日:2001/03/08(木) 23:09
>>847
>or と || ってどう違うのでしょうか?
優先順位が違います。(|| の方が優先順位が高いです。)
詳しくは本を読んでください。

ちなみに、以下のコードでファイルが開けない場合、
ちゃんと死んでくれるものはどれでしょう?(実際に試すのは反則)
open(F,"file") || die "Can't open";
open(F,"file") || (die "Can't open");
open(F,"file") || do {die "Can't open";
open(F,"file") or die "Can't open";

>perldoc -f print って、なんでしょう?
だまされたと思って、コマンドラインからそう打ち込んでみてください。


849 名前:_gunzip 投稿日:2001/03/08(木) 23:16
しまった〜>>848は、
open(F,"file") || die "Can't open";
open(F,"file") || (die "Can't open");
open F,"file" or die "Can't open";
open(F,"file") || do {die "Can't open}";
open F,"file" || die "Can't open";
open(F,"file") or die "Can't open";
の間違い。

850 名前:666 投稿日:2001/03/08(木) 23:31
どれも死んでくれそうですが・・・
open F,"file" || die "Can't open";
は死んでくれないのですか・・・なぜだろう

851 名前:名無しさん 投稿日:2001/03/08(木) 23:37
666じゃないけど、
>perl -pe "substr($_,9) =~ s/^Tanaka/Higuchi/" data.txt >outfile
の解説きぼーん

852 名前:666 投稿日:2001/03/08(木) 23:51
>848-849
あ。分かりました。(一応ですが・・・)
open F , "file" || die "Can't open";
は、
"file" || die "Can't open" → "file"
open(F,"file")
こんな感じ(ちょっと間違っているかも)に解釈されるわけですね。

perldocについては分かりました。(ただ・・・英語なんですね)


853 名前:初心者 投稿日:2001/03/09(金) 00:08
すみません、ほんとの初心者です。
CGIを勉強したいのですが、その前にJavaScriptぐらい
書けないとだめですか?

854 名前:名無しさん 投稿日:2001/03/09(金) 02:51
>>853
書けなくてもオーケー。というか、CGIを書くこととJavaScriptを
書くことって、思ってるほど関連ないですよ。
一方ができればもう片方も楽勝なんてこたあありません。
ただ、JavaScriptを楽しんで書けるようなら、性格的に
プログラミングに向いてるから、Perlでもなんでもいけるでしょう。

855 名前:名無しさん 投稿日:2001/03/09(金) 02:51
>>853
俺はJavaScriptは書けないがPerlなら書ける。

856 名前:名無しさん 投稿日:2001/03/09(金) 02:58
>>851
perl -pe ……
というコマンドラインがわからんのか、
substr($_,9) =~ s/…/…/
という置換がわからんのか、どっち?

857 名前:851 投稿日:2001/03/09(金) 09:03
>>856
いや、調べたら分かった。(すまん)
$str = substr($_,9);
のような文なら見た事があったのだが。右に置けるとはおもわなんだ。

858 名前:851 投稿日:2001/03/09(金) 09:03
はう
左だった。

859 名前:851@超初心者 投稿日:2001/03/09(金) 09:36
>>844-846見て思うが、>844は俺でもすぐ書けるけど、
なんで>846みたいなのを思いつく奴がいるんだ?俺にはさっぱりわからん。


860 名前:名無しさん 投稿日:2001/03/09(金) 13:26
Perlでファイルの読み込みについてですが、
1-
2-
3-
aaaa
bbb
cccc
ddd
eeee
fff
.....以下続く
こんなファイルがあるとき、@aに、
$a[0] = "aaaa-ddd-......."
$a[1] = "bbb-eeee-....."
$a[2] = "cccc-fff-....."
のように3行のサイクル(?)で入れるにはどうすればいいのでしょう?

861 名前:860 投稿日:2001/03/09(金) 13:27
すみません。初めの
1-
2-
3-
はいらないです。

862 名前:素人Perl 投稿日:2001/03/09(金) 13:57
>860

#! /usr/bin/perl

open (DAT, "./hogehoge.dat");
while (<DAT>) {
chomp;
$a[ ($.+2)%3 ].= $_ . '-';
}
close(LOG);
chop(@a);

print "Content-Type: text/plain\n\n";
print "\$a[0] = $a[0]\n";
print "\$a[1] = $a[1]\n";
print "\$a[2] = $a[2]\n";


863 名前:860 投稿日:2001/03/09(金) 14:25
>>862
どもどもです〜
動きました!ありがとう!

864 名前:853 投稿日:2001/03/10(土) 01:30
>>854-855さん
ありがとうございます!
頑張ってみます!

865 名前:名無しさん 投稿日:2001/03/10(土) 01:43
>>839-841
遅レスでスマソ
perl5.004_04 と perl 5.005_03 は、バイナリ的に in-compatible
なんで、動かないケースは結構あります。
# Y2K でイタい想ひ出が...
全てソースから作ってる環境なら話は別ですけど

866 名前:名無しさん 投稿日:2001/03/10(土) 10:44
レス機能のある掲示板を作りたいのですが、
そのやり方が書いてある本やサイトをご存知ないでしょうか?
探してみたのですが、僕が見つけたいくつかの本で扱っているのは
全部レス機能のない普通の掲示板のつくりかたのみで・・・・・

ネットでも探してみましたが、検索して出てくるのは、
レス機能付き掲示板スクリプトの配布とかレンタルばかりでした。

レス機能付きの掲示板のスクリプトを解説してくれている本やサイトがありましたら、
教えてください。お願い致します。

867 名前:名無しさん 投稿日:2001/03/10(土) 14:03
>866
ネタにしてはつまらなすぎ

868 名前:名無しさん 投稿日:2001/03/10(土) 15:59
>>867
一応「初心者」関係ということで、このスレで聞かせていただきましたが
ここで聞くのは場違いだったでしょうか?
スレ違いで申し訳ありませんが、ご存知でしたら教えてください。
お願い致します。

869 名前:初期不良 投稿日:2001/03/10(土) 16:56
>>866
其れ即ツリー型?

870 名前:866 投稿日:2001/03/10(土) 17:28
いえ、普通の
YYボードとか 
http://www.kent-web.com/bbs/sample/yybbs.cgi
プチボード http://www.kent-web.com/bbs/petit/petit.cgi
のようなレス機能です。
本当はこれらのスクリプトを自力で解読できれば良いのですが
未熟なので、解説付きのスクリプトを探しています。

871 名前:名無しさん 投稿日:2001/03/10(土) 18:58
>>866
CGI探しますスレに逝きなさい

872 名前:名無しさん 投稿日:2001/03/10(土) 19:47
>>871
わかりました。ありがとうございました。m(_ _)m

873 名前:名無しさん 投稿日:2001/03/10(土) 21:56
>>870
解読も出来ないのに自分で作れるとは思えないが…。
まずは解読してみそ。
それが力になるから。

って遅いか。

874 名前:名無しさん 投稿日:2001/03/10(土) 22:29
>>873
レスありがとうございます。
そうですか、やはりまず自力で読解ですか。
わかりました。

875 名前:名無しさん 投稿日:2001/03/11(日) 00:23
活発なPerlのメーリングリスト教えてください。
英語圏希望。

日本じゃレベルが低すぎる。

876 名前:名無しさん 投稿日:2001/03/11(日) 00:33
>875
じゃあ英語圏で聞きたまえ。

877 名前:名無しさん 投稿日:2001/03/11(日) 00:38
そりゃそうだ。(w

878 名前:名無しさん 投稿日:2001/03/11(日) 00:53
flockってどれくらい信用できるものなんでしょうか?
自分でロック実装するほうが安全ですか?


879 名前:名無しさん 投稿日:2001/03/11(日) 00:56
複数のファイルを書き換えるとか、
重なるとまずい「区間」があるなら、ロックファイル形式が良い…。
と個人的には思う。

カウンタとかならflockとか。


880 名前:名無しさん 投稿日:2001/03/11(日) 10:12
SSIの初心者な質問はこちらでいいのでしょうか?
それともWEB制作板のほうですか??

881 名前:むぎ茶 投稿日:2001/03/11(日) 10:30



perlならここでいいだろ(m

┐(´ー`)┌


┏━━━━━━━━━┓
┃('Д')y ─┛~~ ┃
┃むぎ茶      ┃
┃mugicha@360.cc  ┃
┗━━━━━━━━━┛
http://www.freeml.com/ml_info.php?ml=bitvalley


882 名前:名無しさん 投稿日:2001/03/11(日) 11:36
何気に親切なむぎちゃんでした(w

883 名前:名無しさん 投稿日:2001/03/11(日) 11:51
(m
ってなにさ。

884 名前:名無しさん 投稿日:2001/03/11(日) 12:41
カッコ エムだよ
アルファベットも読めんのかココのガキは

885 名前:名無しさん 投稿日:2001/03/11(日) 14:18
これって問題あります?
sprintfの桁指定に * を使えるのはv5.004以降って聞いてるのですが、
ifで振り分るだけで大丈夫なんでしょうか?
とりあえずPerl v5.00307(Win32) と v5.00503(Unix) では動いてますけど...

# $count カウンターの値

if($] >= 5.004){ $count = sprintf("%0*d",$digit,$count); }
    else{ $count = sprintf("%04d",$count); }

886 名前:名無しさん 投稿日:2001/03/11(日) 15:31
>>884
こんな簡単な質問の意味も読み取れんのね、この子(m

887 名前:_gunzip 投稿日:2001/03/11(日) 16:03
>>885
良いと思う。ただ、分岐させないで、
フォーマット指定子を埋め込んでやった方が簡単かも。

$k = 4; #合わせたい桁数
$count = sprintf("%0${k}d",$count);

#外しているかな?(かも)

888 名前:_gunzip 投稿日:2001/03/11(日) 16:14
>>885
↑に書いたもので良いと思うよ。

$k = 4; #合わせたい桁数
#{}を外してはいけない。
$count = sprintf("%0${k}d",$count);
又は、
$count = sprintf("%0".$k."d",$count);

>>865
># Y2K でイタい想ひ出が...
もし良ければ教えてください〜


889 名前:JAPU(AyuMoe) 投稿日:2001/03/11(日) 16:36
そんな太古のバージョンまで気にするなら、
sprintf "%0${digit}d", $count;
とすれば〜?

890 名前:名無しさん 投稿日:2001/03/11(日) 16:36
>>886
君って実は頭悪いのね(m

891 名前:883 投稿日:2001/03/11(日) 16:47
(m は(w
と同じか?なんで?

892 名前:886 投稿日:2001/03/11(日) 16:50
>>890
初めて書き込んだのに「実は」なんて言われちゃった(m

893 名前:_gunzip 投稿日:2001/03/11(日) 16:51
>>885
japan.comp.lang.perl
ftp://ftp.jaist.ac.jp/pub/news-archive/japan.comp.lang.perl/Subject-199909
【質問】指定した桁数以上の数字にしたい場合?
参考までに。

894 名前:883 投稿日:2001/03/11(日) 17:00
って事はおれの最初の質問は頭良かったんか。
まいったねどうも(m

   ↑これでいいんでしょうか(w

895 名前:名無しさん 投稿日:2001/03/11(日) 22:56
指定したディレクトリー内にあるファイルのファイル名をすべてindex.htmlに書きこませるにはどうしたらいいのでしょうか?

896 名前:/bin/名無しさん 投稿日:2001/03/11(日) 23:15
>>895

何に使うのか気になる。とりあえずディレクトリ関係のコマンドでも
調べて自分で考えるが良いと思われ。


897 名前:_gunzip 投稿日:2001/03/11(日) 23:18
>>895
opendirで開いて readdirで読んで index.htmlを開いて
printで書き出して閉じる。
又は、
system("ls -la > index.htm") and die $!;
とか。
もうちょっと具体的にお願い。

898 名前:初期不良 投稿日:2001/03/12(月) 03:49
>>897
@files = <$dir/*>;
とかで取得は良くないの?
俺いつもこれなんだけど。

899 名前:_gunzip 投稿日:2001/03/12(月) 06:10
>>898
いや、そっちの方が手軽で良いと思う。
ただ、*5.6以前のPerlでは* glob()はcshを起動するので若干遅いし
それだけならいいのだけれど、csh君は諦めが早いので、あまりに多くの
ものがマッチすると"Arglist too long"って投げてしまいますわな。
・・・というわけで、僕は普段opendir/raddir/closedirでやっています。
(こっちの方が慣れているから、というのが一番の理由かも)
とは言え、5.6ではFile::Globで自前で面倒を見る事になったようなので、
後者については余り気にする必要は無いかもしれません。

5.6で試しにベンチマークを取ってみると、下のような結果になります。
#いい加減買い換えたいな・・

#!/usr/bin/perl -w

use Benchmark;
$dir = "/etc";
timethese(10000,{
&nbsp;&nbsp;&nbsp;&nbsp;"glob" => sub {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@files = <$dir/*>;
&nbsp;&nbsp;&nbsp;&nbsp;},
&nbsp;&nbsp;&nbsp;&nbsp;"opendir/readdir/closedir" => sub {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;opendir(D,$dir) or die "Can't open $dir";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@files = readdir(D);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;closedir D; #必要ないが一応
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;
});

#result
Benchmark: timing 10000 iterations of glob, opendir/readdir/closedir...
glob: 20 wallclock secs
&nbsp;&nbsp;&nbsp;&nbsp;(19.34 usr + 0.00 sys = 19.34 CPU) @ 517.06/s (n=10000)
opendir/readdir/closedir: 8 wallclock secs
&nbsp;&nbsp;&nbsp;&nbsp;( 7.91 usr + 0.00 sys = 7.91 CPU) @ 1264.22/s (n=10000)


900 名前:名無しさん 投稿日:2001/03/12(月) 06:24
だいぶ前ココに、use libとすれば、モジュールを勝手におけるように
設定できると見た事があるけど、特定の場所例えば、
E:\TestTest.pm
においたら、
use lib "E:\\";
としても、
use lib "E:/";
でもあかんかったけど、どうすればいいか分かる?
誰か教えて

901 名前:_gunzip 投稿日:2001/03/12(月) 06:26
>>900
use lib "E:/.";
use lib "E:\\.";


902 名前:900 投稿日:2001/03/12(月) 06:29
>>901
いっしょやないかコラ


903 名前:_gunzip 投稿日:2001/03/12(月) 06:31
>>902
目を凝らして見てくれ。後ろに何かついてないか?

904 名前:名無しさん 投稿日:2001/03/12(月) 07:23
User-AgentからOS名とブラウザ名を取り出したいのですが
何か良い方法ってありますか?
自分で作ってみたんですけどifを多用しすぎてなんかスマートでないので。


905 名前:885 投稿日:2001/03/12(月) 07:38
ありがとうございました。
帰ってから試してみます。

906 名前:名無しさん 投稿日:2001/03/12(月) 11:05
CGIでperlスクリプトを動かす時って、一定時間経つと処理がストップしてしまうんですか?
600行程度のスクリプトを600回ループさせたり等の結構重い処理をするスクリプトを動かしているのですが、
途中で必ずInternalServerErrorになってしまいます。
それともスクリプト自体に問題があるのでしょうか?
一応スクリプトは、
http://ichigo.sakura.ne.jp/~horizon/sengoku/sengoku.txt
です。90〜883行目のサブルーチンの部分が問題の処理です・・・

907 名前:名無しさん 投稿日:2001/03/12(月) 12:35
そろそろ新スレでは?

908 名前:/bin/名無しさん 投稿日:2001/03/12(月) 13:09
>>904

switch-case 文みたいなのを自作して使うというのではダメか。

>>906

数回ループさせる処理でチェックしてみるのが良いかと。
# すまぬ。読む気になれなかった。my 使え。


909 名前:_gunzip 投稿日:2001/03/12(月) 15:00
>>906
>CGIでperlスクリプトを動かす時って、一定時間経つと処理がストップしてしまうんですか?
一定時間経っても処理が終了しないプロセスは、WWWサーバが SIGTERM 送って殺します。
(50-300秒程度だと思いますが)
ところで、なんかturn()というサブルーチンの中で35回以上もファイルを開いては読んで閉じる
といった事を繰り返しているようですが、これはなんとかなりません?

>my 使え。
ヽ(´ー`)ノ 賛成
>すまぬ。読む気になれなかった。
自分も。すまん。

910 名前:名無しさん 投稿日:2001/03/12(月) 18:43
>一定時間経っても処理が終了しないプロセスは、WWWサーバが SIGTERM 送って殺します。
>(50-300秒程度だと思いますが)

なるほど・・たぶんそれが原因だと思います。

>ところで、なんかturn()というサブルーチンの中で35回以上もファイルを開いては読んで閉じる
>といった事を繰り返しているようですが、これはなんとかなりません?

たぶんトータルでは1000回以上開いてる・・・各データを別ファイルにしたのが
とてつもない悪手だったような。。。データファイルを開くのってやっぱり時間かかるんでしょうか?

あとこの「my」っていうのは変数の範囲を局所化するんですよね。
これを利用するとどういったメリットが得られるのですか・・・?

911 名前:名無しさん@そうだ選挙に行こう 投稿日:2001/03/12(月) 19:17
んじゃ新スレ頼んだぞ>gunzip

912 名前:名無しさん 投稿日:2001/03/12(月) 19:28
>>911
別のサブルーチンでも同じ変数名を使える
(でもお行儀は悪い)

消費メモリを減らすことができるらしい
(そこまでシビアな作品歴は無いので未体験)

913 名前:ブチ 投稿日:2001/03/12(月) 19:39
>>910
メモリ内での読み書き計算の時間に比べれば
ハードディスクの読み書き(ファイルアクセス)とてつもなく遅いよ。
両方とも人間にとっては非常に短い時間というのは同じだけど何千何枚と繰り返せば差は歴然。
同じファイルにアクセスするなら一度に読んで処理終わってから書き出すほうがいいよ。

914 名前:名無しさん 投稿日:2001/03/12(月) 20:09
>>910
my使わないと、それぞれの変数が
その関数だけで使われているのか、
それとも他の関数でも使われてるのか、
使われているとしたら、どこで値が変わって現在の値は何なのか、
そういうのを追っかけるのに苦労するだろ。
ひと月スクリプト放置したら自分でも読めなくなるかもしれないぞ。
バグあったときに取りづらくなるし、
関数を他のスクリプトに再利用するときもつらい。


915 名前:名無しさん 投稿日:2001/03/12(月) 20:51
>>913、914
なるほど・・・勉強になります。
ってことはとりあえずこのスクリプトは全面的に見直さなきゃならないのか・・・うう。
ありがとうございました。頑張りますm(__)m

916 名前:名無しさん 投稿日:2001/03/12(月) 22:08
文字列の先頭が大文字であるかどうか判定するにはどんな正規表現を書けばいいのですか?

917 名前:_gunzip 投稿日:2001/03/12(月) 22:14
>>916
>文字列の先頭が大文字であるかどうか判定するには
正規表現を使う必要はないと思います。

ucfirst($str) eq $str&nbsp;&nbsp;&nbsp;&nbsp;#$strの先頭が大文字ならtrue


918 名前:_gunzip 投稿日:2001/03/12(月) 22:20
または、
$str =~ /^[A-Z]/


919 名前:名無しさん 投稿日:2001/03/12(月) 22:31
>900-903
榕タ

920 名前:916 投稿日:2001/03/12(月) 22:45
>917-8
thanks!

921 名前:shige 投稿日:2001/03/12(月) 23:42
お前らって人生の歯医者だね。

922 名前:_gunzip 投稿日:2001/03/12(月) 23:51
>>921
$ echo お前らって人生の歯医者だね。 1>/dev/null 2>&1

>>911
分かりました。明日起きてすぐたてます。


923 名前:名無しさん 投稿日:2001/03/13(火) 01:20
文字列$hogeの$n文字目を'A'にしたいのですが
どうすればエレガントでしゃうか。

924 名前:923 投稿日:2001/03/13(火) 01:31
すみません。
substr EXPR,OFFSET,LENGTH,REPLACEMENT
いきなりコレ発見しました。

925 名前:/bin/名無しさん 投稿日:2001/03/13(火) 01:41
# その1
substr($hoge, $n - 1, 1) = 'A';

# その2
$n--;
$hoge =~ s/^(.{$n})./${1}A/;


926 名前:_gunzip 投稿日:2001/03/13(火) 05:59
ほんの少し早いかもしれませんが、新しいスレを立てました。
http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156


927 名前:移転します 投稿日:2001/03/22(木) 16:49
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■





dat2html ver0.00 (2001/10/24)
2ちゃんねるは、ここのサーバを使ってるです。。。