Perl コーディング初心者質問コーナー Part27

このエントリーをはてなブックマークに追加
1nobodyさん
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。

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

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

関連スレ
【Perl上級者コーナーPart01】
http://pc2.2ch.net/test/read.cgi/php/1024741312/
CGI: Common Gateway Interface part 11
http://pc2.2ch.net/test/read.cgi/php/1055597189/
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/

過去ログやお勧めサイトは >>2-10
2nobodyさん:03/08/14 06:07 ID:???
3nobodyさん:03/08/14 06:07 ID:???
4nobodyさん:03/08/14 06:08 ID:???
[総合]
 ・Perl Com: http://www.perl.com/pub/Open
 ・CPAN.com: http://search.cpan.org/Open
 ・ActivePerl: http://www.activestate.com/Open
 ・CGI-ML:http://forest.ne.jp/cgi-ml/Open

[お薦め]
 ・Perlメモ: http://www.din.or.jp/~ohzaki/perl.htmOpen ★読んどけ
 ・Perl Recipes: http://www.effectiveperl.com/recipes/Open
 ・Randal's WebTechniques columns: http://www.stonehenge.com/merlyn/WebTechniques/Open
 ・Perlの部屋: http://www.cc.rim.or.jp/~midorin/mad-p/perl/index.htmlOpen
 ・Perl初心者の部屋:http://www.harukaze.net/~mishima/perl/Open
 ・Perlリファレンス:http://www.big.or.jp/~mio/ga/pl/plref/pl_ref.htmOpen
 ・Perlのページ:http://homepage1.nifty.com/nomenclator/perl/
5nobodyさん:03/08/14 06:08 ID:???
[Document&Tutorial]
 ・Home - Japanized Perl Resources Project: http://perldocjp.sourceforge.jp/
 ・Perl News: http://www.news.perl.org/Open
 ・Perl Monks: http://www.perlmonks.org/
 ・use Perl; : http://use.perl.org/
 ・Learn Perl - Perl Education: http://www.devdaily.com/perl/edu/index.shtml
 ・Perldoc.com: http://www.perldoc.com/
 ・Using Perl5 in Web: http://docs.rinet.ru/Using_Perl5_in_Web/
 ・Rex Swain's Home Page: http://www.rexswain.com/
 ・Robert's Perl Tutorial: http://www.netcat.co.uk/rob/perl/win32perltut.html
 ・Perl Tuts: http://savage.net.au/Perl-tutorials.htmlOpen
 ・Beginning Perl Tutorials: http://www.pageresource.com/cgirec/index2.htm
 ・jcode.pl の私的な解説書: http://www.mikeneko.ne.jp/~lab/kcode/jcode.html
 ・Logical Choice Software, Home Page: http://www.logsoft.com/perltips/
 ・Perlfect Solutions: http://perlfect.com/Open
 ・The Perl Archive : http://www.perlarchive.com/Open
 ・Perl6 & Parrot VM についての情報: http://dev.perl.org/perl6/Open
 ・use Object; : http://perl.infoware.ne.jp/Open
6nobodyさん:03/08/14 06:08 ID:???
[Document&Tutorial]
 ・Home - Japanized Perl Resources Project: http://perldocjp.sourceforge.jp/
 ・Perl News: http://www.news.perl.org/Open
 ・Perl Monks: http://www.perlmonks.org/Open
 ・use Perl; : http://use.perl.org/
 ・Learn Perl - Perl Education: http://www.devdaily.com/perl/edu/index.shtml
 ・Perldoc.com: http://www.perldoc.com/
 ・Using Perl5 in Web: http://docs.rinet.ru/Using_Perl5_in_Web/Open
 ・Rex Swain's Home Page: http://www.rexswain.com/Open
 ・Robert's Perl Tutorial: http://www.netcat.co.uk/rob/perl/win32perltut.htmlOpen
 ・Perl Tuts: http://savage.net.au/Perl-tutorials.htmlOpen
 ・Beginning Perl Tutorials: http://www.pageresource.com/cgirec/index2.htmOpen
 ・jcode.pl の私的な解説書: http://www.mikeneko.ne.jp/~lab/kcode/jcode.htmlOpen
 ・Logical Choice Software, Home Page: http://www.logsoft.com/perltips/
 ・Perlfect Solutions: http://perlfect.com/Open
 ・The Perl Archive : http://www.perlarchive.com/Open
 ・Perl6 & Parrot VM についての情報: http://dev.perl.org/perl6/Open
 ・use Object; : http://perl.infoware.ne.jp/Open
7nobodyさん:03/08/14 06:09 ID:???
[Module]
 ・Perl Module Reference: http://www.bekknet.ad.jp/~bero/docj/module_/ (404)
 ・PPMPackages: http://www.activestate.com/PPMPackages/
 ・河馬屋二千年堂's Page: http://member.nifty.ne.jp/hippo2000/index.htm

[Security]
 ・安全なプログラミングのためのガイドライン:http://www.FreeBSD.org/ja/security/#spg
 ・Perl security:http://www.perldoc.com/perl5.6/pod/perlsec.htmlOpen
 ・Perl security和訳:http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlsec.htmlOpen
 ・CGI and Security http://www.ansi.co.jp/tech/cgi/security/Open
 ・The Unofficial Web Hack FAQ:http://www.nmrc.org/faqs/www/
 ・How to Write Secure Code:http://www.shmoo.com/securecode/
 ・Safe CGI Programming :http://www.improving.org/paulp/cgi-security/safe-cgi.txtOpen

[OS]
 ・Linux日本語マニュアル:http://www.linux.or.jp/JM/Open
 ・FreeBSD日本語マニュアル:http://www.jp.freebsd.org/man-jp/Open
8nobodyさん :03/08/14 06:11 ID:???
前スレ

http://pc2.2ch.net/test/read.cgi/php/1059043704/l50

立てといたが、藻前ら、荒すんじゃねーぞ
9nobodyさん:03/08/14 08:23 ID:???
つーか、荒してるのひとりだけだし、こまめに削除依頼出せばいい
10あぼーん:あぼーん
あぼーん
11nobodyさん:03/08/14 10:47 ID:???
http://pc2.2ch.net/test/read.cgi/php/1012750353/243
>%aa=("hanako","12","tarou","20","ichirou","5");
>となっているとします。
>キーが名前で値が年齢なんですが、
>年齢でソートし表示させる場合、
>ichirou 5
>hanako 12
>tarou 20
>とするにはどうすればいいのですか?

http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlfaq4.html#How_do_I_sort_a_hash_optionally
クックブックレシピ5.9

演算子を間違わないよう注意。
12nobodyさん:03/08/14 11:02 ID:???
あっと、演算子でしたか…。

演算子は数値なので、<=>を使用。
13nobodyさん:03/08/14 11:03 ID:???
PHPのrawurlencode関数(RFC1738に基づきURLエンコードを行う)
http://php.planetmirror.com/manual/ja/printwn/function.rawurlencode.php
と同じことを、perlでやりたいのですが、
どのようにくめばよいのでしょうか?
14nobodyさん:03/08/14 11:13 ID:???
s/([^0-9A-Za-z_ ])/'%'.unpack('H2',$1)/ge;
s/\s/+/g;
15nobodyさん:03/08/14 11:27 ID:???
s/\s/+/g
は、
s/ /+/gでは無いので注意しましょう。この場合は問題は起きないけど。
16nobodyさん:03/08/14 11:29 ID:H+TQovVp
今、深沢千尋氏の書いた『すぐ分かるPerl』を元に勉強しているのですが、
その中の、第五章『プログラムにデータを渡す 〜引数〜』という章で、

#! /usr/local/bin/perl

print "$ARGV[0]\n";
print "$ARGV[1]\n";
print "$ARGV[2]\n";
print "$ARGV[3]\n";
print "$ARGV[4]\n";

に"love"という引数を与えてみましょう。

と書いてあるのですが、どうやれば引数を与えられるのでしょうか。
OSはWindowsXP、エディタはTeraPadを使っています。
よろしくお願いします。<(_ _)>
17nobodyさん :03/08/14 12:05 ID:???
>>16
@ARGV は実行ファイルに対する引数。
ファイル名を aya.plとした場合、

aya.pl love

で動くでそ


1813:03/08/14 12:09 ID:???
>>14
ありがとうございます。
ところで、>>14 を見て逆に、
googleで「エンコード perl unpack」で検索していくつかのページを見たんですが、
s/ /+/g; とやってるところしか見あたりませんでした。

>>15の意図はどんなところにあるのでしょうか?
19nobodyさん:03/08/14 12:20 ID:???
[0-9A-Za-z_ ] 以外は変換済みなので\sに該当するものは
空白しかないけど、本来の目的ではTAB等も+に変えたかった
ってことじゃねーの?あまり深い意味は無い
2016:03/08/14 12:43 ID:H+TQovVp
>>17
レスありがとうございます。
早速ファイル名を aya.cgi love にしてFFFTPを使ってトクトクに送り、

あなたのアクセスしたファイルは、
アクセスする権限が与えられていないか、
もしくはindex.html 又は index.htmが存在しません。

と表示されました。
お手数ですが、他に方法は無いでしょうか。よろしくお願いします。

補足
*拡張子 .pl だとこのCGIのダウンロードが始まり、駄目っぽいので、元通り拡張子.cgiで試してみました。

*#! /usr/local/bin/perl と書きましたが、これは本の中にこう書いてあるだけで、実際には #!/usr/bin/perl
 であり、Tok2.comに送ってやっとります。 説明不足スイマセン。
21nobodyさん:03/08/14 12:45 ID:???
面倒くさいからこれでいいだろ
s/(\W)/'%' . unpack('H2', $1)/eg;

半角スペースは当然 %20 に変換される
22nobodyさん:03/08/14 12:59 ID:???
>>20
共有サーバでそんなテストなんかするな!
自分のPCにperlとhttpd入れてやれ

それにやってること丸っきり的外れ
23nobodyさん:03/08/14 13:11 ID:???
>>20
「すぐわかるPerl」なら
1.1Perlは入っているか?
をじっくり読んでみてください。
24nobodyさん:03/08/14 14:32 ID:???
>>19
URLエンコードは本来不可逆だってこと?

>>20
トクトクから損害賠償請求が来ますよ?
25nobodyさん:03/08/14 15:13 ID:???
>>20

つまり、おまえみたいな馬鹿は二度と来るなってこと。
すげー迷惑。人のことも考えろ、ハゲ!!
26nobodyさん:03/08/14 15:14 ID:???
#!/usr/bin/perl

# CGIヘッダの出力
print "Content-type: text/html\n\n";

while($HP1 > 0) and ($HP2 > 0){
srand1;
srand2;
}

# Player1
$HP1 = 400 - $kougeki1;
$KIK1 = 60;
$PAN1 = 20;
$DF1 = 10;

# Player2
$HP2 = 300 - $kougeki2;
$KIK2 = 100;
$PAN2 = 40;
$DF2 = 0;

# Player1
$kougeki1 = srand;

# Player2
$kougeki2 = srand2;
27nobodyさん:03/08/14 15:14 ID:???
srand;
if($mode == 1){
$offense = \%you;
$defense = \%my;
}elsif($mode == 2){
$offense = \%my;
$defense = \%you;
}
if( int(rand(2)) ){
#punch
$damage =
$offense->{'$PAN1'} - $defense->{'$DF2'};
if(!$rand = int(rand(5))){
#half
$damage = int($damage / 999);
}elsif($rand < 3){
#miss
$damage = "";
}
}else{
#kick
$damage =
$offense->{'$KIK1'} - $defense->{'$DF2'};
}
28nobodyさん:03/08/14 15:14 ID:???
srand2;
if($mode == 1){
$offense = \%you;
$defense = \%my;
}elsif($mode == 2){
$offense = \%my;
$defense = \%you;
}
if( int(rand(2)) ){
#punch
$damage =
$offense->{'$PAN2'} - $defense->{'$DF1'};
if(!$rand = int(rand(5))){
#half
$damage = int($damage / 999);
}elsif($rand < 3){
#miss
$damage = "";
}
}else{
#kick
$damage =
$offense->{'$KIK2'} - $defense->{'$DF1'};
}

($damage < 0) and ($damage = 0);
$defense->{'HP1'} -= $damage;

($damage < 0) and ($damage = 0);
$defense->{'HP2'} -= $damage;
29nobodyさん:03/08/14 15:15 ID:???
# HTMLの出力
print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n";
print "<html>\n";
print "<head><title>対戦バトル</title></head>\n";
print "<body>
<p>Player1:体力は$HP1です</p>
<p>Player2:体力は$HP2です</p>
<p>Player1は<big>$kougeki1</big>のダメージを与えた。</p>
<p>Player1は<big>$kougeki1</big>のダメージを受けて混乱した。
<p>Player1は<big>$kougeki1</big>のダメージで友達のトイレではみ出したクソをし始めた。
<p>Player2は<big>>$kougeki2</big>のダメージを与えた。</p>
<p>Player2は<big>>$kougeki2</big>のダメージを受けて裸踊りを始めた。
<p>Player2は<big>>$kougeki2</big>のダメージで友達の女にレイプし始めた。</p></p></body>\n";
print "</html>";
30あぼーん:あぼーん
あぼーん
31あぼーん:あぼーん
あぼーん
32nobodyさん:03/08/14 19:26 ID:OJ2itBeZ
socket (SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
このように、socketで作ったSOCKハンドルのポインタ操作はでき
ないのでしょうか。
どこで操作しても、ポインタは「-1」となっております。

理解不足で申し訳ありませんが、宜しくお願いいたします。
33nobodyさん:03/08/14 20:03 ID:???
>>32
ポインタ操作って何?

>2: それでこんな風にやってみたが・・・

ここを具体的に。
34nobodyさん:03/08/14 23:19 ID:???
>>20
やってることは10章の内容です
もう少し本を読み進めてから取りかかってはどうでしょうか
35nobodyさん:03/08/14 23:19 ID:???
>>32

操作をすることはできません。
Perlをやってる奴はおまえさんみたいなオタクが多い。
オタクはきもいから、気づかないんでしょうね。
36nobodyさん :03/08/15 00:16 ID:???
>>20
perl = cgi ではない。
お前さんがまずしなければならんのは、自分のパソコンにperlをインストールして
コマンドラインさっきのコマンドが実行するかを確認することやね。

この文章読んでわからんようであれば、あらしと取られかねんからそのつもりで。

#あと、perlをどうやってインストールしたらいいですかなんてことは聞くなよ(w
37nobodyさん:03/08/15 01:51 ID:???
 
38nobodyさん:03/08/15 02:22 ID:???
Perlの
s./// と tr///
の違いがいまいちわからないのですが、どういう違いがあるのでしょうか・・・
39nobodyさん:03/08/15 02:25 ID:???
sub get_select_form{
my ($name, $selected) = @_;
my ($key, $form);

$form .= '<select name="' . $name . '">' . "\n";
foreach $key (sort keys %{$name}) {
if($key eq $selected){
$form .= '<OPTION value="' . $key . '" selected>' . ${$name}{$key} . '</OPTION>' . "\n";
}
else{
$form .= '<OPTION value="' . $key . '">' . ${$name}{$key} . '</OPTION>' . "\n";
}
}
$form .= '</select>' . "\n";

return $form;
}

このようなselectボックスを生成するサブルーチンを作ったのですが、
sort keys %{$name}
のところで「〜HASH ref while "strict refs"〜」と怒られてしまいます。

no strict;は使いたくないので、何かよい解決策があれば教えてください。
すみませんが宜しくお願いいたします。
40nobodyさん:03/08/15 06:11 ID:???
>>38
たとえば $_='ABCDECBA' あたりで
s/ABC/123/

tr/ABC/123/
を試してみれば分かります。
41nobodyさん:03/08/15 09:33 ID:???
えーと、前にも一応お世話になった者で基本的な質問で悪いんですが、
配列に格納されているすべての文字列の先頭にある文字列を連結させたいんですが
下記のコードではうまくいきませんでした。
実際は頭に付ける文字列を変えて何回もこの処理を繰り返すのですが、
(サブルーチンにして、↓の例の$push_wordは引数として受け取る)
二回目からは、前回頭に付けた文字列と$push_wordを頭につけてしまいます。
簡単な応用技術ですがご教授願えたら幸いです。

【理想】
@bar = ("gg","dge","mpire","ncode","nglish")

@bar = ("Egg","Edge","Empire","Encode","English")
とするような処理(配列名barに意味はなし)

【こうしてみた】
(@barを定義した後、)
my $push_word = "E";
foreach (@bar){
   my $a = $push_word;
   $a .= $_;
   $_ = $a;
          }
print "@bar";

42nobodyさん:03/08/15 10:09 ID:???
2chみたいに、一度ポートチェックをする掲示板を作りたいのですが
if (connect (SOCK,sockaddr_in($target_port, $addr))) {

®ist;

}else{

&error();

}

みたいにしたのですが、テスト運用してみると
途中でスクリプトごと落ちることがあり悩んでいます。
どのようにしたら、安全な処理ができますでしょうか?
43nobodyさん:03/08/15 10:10 ID:???
®ist;
エスケープしてませんでした。
&regist; と書いたつもりです。
44nobodyさん:03/08/15 10:10 ID:???
あれ? &regist;です
45nobodyさん:03/08/15 10:20 ID:???
>>41
my @bar = ("gg","dge","mpire","ncode","nglish");
my $push_word = "E";

print map $push_word.$_, @bar;

漏れも勉強中なので自信ありませんが
こんな感じでどうでしょうか?
結果はEggEdgeEmpireEncodeEnglish

46nobodyさん:03/08/15 11:32 ID:???
>>39
引数がちょっと無茶じゃない?普通に考えて、
・selectの名前
・selectedにしたいもの
の他に、

・option要素のハッシュ
が必要でしょ。

例えば
<select name="chara">
<OPTION value="giko" selected>ギコ</OPTION>
<OPTION value="mona">モナー</OPTION>
</select>
を作るとして、その関数だと get_select_form("chara", "giko")を
呼ぶときに、グローバルの %chara にOPTIONの要素を入れておく
ってことになるけど、それって変じゃない?

引数リストを $name, $selected, $ref_values (順不同)みたいにすれば
いいと思うよ。
47nobodyさん:03/08/15 11:57 ID:???
>>45
すばやい回答thx。
print map 〜ってのってどういう意味?map関数ってとほほに載ってないんだけど…

あと、注文多くて悪いんだけど、Eを追加した後の@barが欲しいんだ。例で書いた最後の@barはおまけみたいなもん。ごめんな
48nobodyさん :03/08/15 12:18 ID:???
>>47
@bar map{ 'E' . $_ } @bar;

mapはぐぐって調べるぐらいはするこった・・・
49nobodyさん:03/08/15 12:53 ID:???
>>39
ソフト(シンボリック)リファレンスをやめて、リファレンスを使う。

>>41
foreach使うなら

foreach(@bar){
$_ = $push_word. $_;
}

mapは、リストを受けて、処理を行って、リストで返すパイプみたいなもの。
perldoc -f map

# >>48 '=' 抜けたね。

>>42
エラーかシグナルか、落ちる原因をはっきりさせてから対策を立てる。
50nobodyさん:03/08/15 13:19 ID:???
>>49
おうっ、盲点でした。
今は見えてる点のほうが圧倒的にすくないけどなw
51nobodyさん:03/08/15 16:53 ID:???
>>42
bbs.cgi 再開発プロジェクト
http://qb.2ch.net/test/read.cgi/operate/1053067870/508 ぐらいから参照(w
52nobodyさん:03/08/15 19:07 ID:???
>>45

3行目に
open (IO,"+<$logfile");
7行目に
while (<IO>){
 if ($_ =~ /<>$ip/){
  @y2=split(/<>/,$_);
  if ($y2[6] ne $ip){
   push(@log,$_);
  }else{
   $y2[0] = 'All Clear (^-^)v';  #消去後の名前
   $y2[5] = 'All Clear (^-^)v';  #消去後のメッセージ
   push(@log,"$y2[0]<>$y2[1]<>$y2[2]<>$y2[3]<>$y2[4]<>$y2[5]<>$y2[6]<>$y2[7]<>\n");
  }
 }else{
  push(@log,$_);
 }
}
11行目に
truncate(IO,0);
seek(IO,0,0);
print IO @log;
close (IO);
&reload2;
}
を入れると直ります。
53あぼーん:あぼーん
あぼーん
54あぼーん:あぼーん
あぼーん
55あぼーん:あぼーん
あぼーん
56あぼーん:あぼーん
あぼーん
57あぼーん:あぼーん
あぼーん
58あぼーん:あぼーん
あぼーん
59あぼーん:あぼーん
あぼーん
60あぼーん:あぼーん
あぼーん
61nobodyさん:03/08/15 21:25 ID:ifID8mtm
perlスクリプトを書いたのでそれをDLLファイルにしたいのですが。
あと、できればサブルーチンがそのままDLLの関数になるようにしたいのですが。
どういう風にすればよいのでしょうか。
環境はWinMEでActivePerlです。
62nobodyさん:03/08/15 21:49 ID:???
>>61
できるの?初耳
63山崎 渉:03/08/15 22:25 ID:???
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
64nobodyさん:03/08/15 23:28 ID:???
>>49
そうですね。落ちる原因を考えて出直してきます(コナクテイイカ
65nobodyさん:03/08/16 04:33 ID:???
お早うございます。
初めてこのスレ来ました
レベル低すぎ

じゃあサヨウナラ
66nobodyさん:03/08/16 04:40 ID:???
my %hash = (
5 => 5,
10 => 10,
15 => 15,
30 => 30,
50 => 50
);

このようなデータを

foreach my $key (sort keys %hash) {
print $key;
}

このようにsortすると、

10
15
30
5
50

となりますよね。

この5が一番上にいくような効率のいい方法はないもの
でしょうか。
67nobodyさん:03/08/16 04:42 ID:???
>>66
sort {$a<=>$b} keys %hash
68KY:03/08/16 04:59 ID:???
>>66
sort {$a <=> $b}
69nobodyさん:03/08/16 05:02 ID:???
>>66
sort {$a<=$b>=$KIK} keys %doragonash

の方がうまくいきますね。それよりもあなたの知性の低さは迷惑です。
早く首吊って死んでくれることを祈ってます。
70nobodyさん:03/08/16 05:03 ID:???
>>67-68
こんな遅い時間に二人も答えてくれるなんて、ホントここは
いい人がいますね。

本当にどうもありがとう。
71あぼーん:あぼーん
あぼーん
72nobodyさん:03/08/16 05:04 ID:???
>>69
ごめんなさい。
だけど、親切に答えてくれて、本当にどうもありがとう。
感謝してます。
73あぼーん:あぼーん
あぼーん
74あぼーん:あぼーん
あぼーん
75あぼーん:あぼーん
あぼーん
76nobodyさん:03/08/16 05:07 ID:???
こんなかんたんな問題に答えラれなれないなんて、なんてクズなところでしょう。
本当、ここはくさった人間しかいませんね。とっとと死んでください!!
77nobodyさん:03/08/16 05:08 ID:???
削除依頼を出しまくっているやつは荒らしか?
かちゅ使用者には迷惑だって言っているだろうが。
78あぼーん:あぼーん
あぼーん
79nobodyさん:03/08/16 05:18 ID:???
>>46,49
返事が遅れてしまい、すみません。
ハッシュのリファレンスを使うことにより、無事解決
いたしました。
本当に有難うございました。
80あぼーん:あぼーん
あぼーん
81あぼーん:あぼーん
あぼーん
82あぼーん:あぼーん
あぼーん
83nobodyさん:03/08/16 07:26 ID:???
>>77
削除依頼よりかコピペ荒らしで挙げれば規制対象になるのにねぇ。。。
84nobodyさん:03/08/16 08:41 ID:mdqCqsMr
SQL文のデバッグなどで、printとは別にどこかへ変数の内容などを出力する場合、
どのような方法が考えられるでしょう?
85あぼーん:あぼーん
あぼーん
86nobodyさん:03/08/16 10:24 ID:22Mj43o0
>>62
お答え、ありがとうございます。
できるとは最初から思ってはいませんでしたが。
C言語とかでDLL書くのめんどくさいのでperlでかけたらなぁって。
とりあえずまずはperlcc使えるように環境を整えようかと思っております。
なぜか僕の環境、Cプログラムは吐き出すんですがコンパイルしてくれなくて。
しかもそのプログラムをコンパイルしてみるがエラー続出。
どうなんだ、LarryWallよw
仕方がなく自分でエラー部分を書き直してるのですが。
なんとかまともなCプログラム、吐き出させられないですかね。
ちなみに環境はWinMeでActivePerl、CコンパイラはDev-C++(GCC系)とBCCです。
解決方法がありましたら、教えてください。
87nobodyさん:03/08/16 10:32 ID:???
VC++を使う。
88nobodyさん:03/08/16 11:17 ID:???
>>83そう思うなら、おまえがコピペ荒らしとして規制依頼しろよ。できねーくせにガタガタぬかすな
89nobodyさん:03/08/16 11:18 ID:mv+dlsfN
KENTのネットクルーザーで
検索部分を改良したい。
英語の半角、全角をともに検索するには
どうしたらいいのでしょうか?
90nobodyさん:03/08/16 11:22 ID:???
>>89
【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
91助けてください:03/08/16 12:07 ID:???
1: 自分はこう言う事がしたい。
http://server/program.cgi/hogeというのをhttp://server/hogeで見れるようにしたい
2: それでこんな風にやってみたが・・・
.htaccessに「ErrorDocument 404 /program.cgi」と追加。
3: こんなエラーが出て上手く行かなかった。
エラーは出ないけど、404エラーなので、エラーログがたまっていく・・・

どなたか助けてくださいm(__)m
9291:03/08/16 12:08 ID:???
ErrorDocument 404 /nph-test.cgi
だと、ヘッダに404となってしまうので、
ファイル名をnph-program.cgiにして、「print 'HTTP/1.0 200 OK'."\r\n";」とヘッダに追加。
でも、エラーログが(ry
93nobodyさん:03/08/16 12:23 ID:???
>>91
DirectoryIndex
スレ違いなので後は自分で調べな。
94nobodyさん:03/08/16 12:32 ID:R1l09wg/
>> 93
DirectoryIndex DirectoryIndex nph-program.cgi
と記載してあります。
やっぱプログラム側の問題じゃないからここじゃ駄目ですね。。。
95nobodyさん:03/08/16 12:37 ID:???
コピペ荒らしにマジレス。
残り少ない夏休みを2chでコピペ荒らしするだけに費やす気みたいだけど、
入門本くらい一通り読んで初心者レベルに到達してから来てね。
96nobodyさん:03/08/16 12:44 ID:???
>>86
perlをCにトランスは完全に出来ませんし
できたとしても使い物にはなりません(実行ファイルは馬鹿でかい)
あきらめたほうがいい
XSをつかうかswigをつかうか
perlのソースコードを書き換えるかしてください

Win32系のモジュールで直接DLL関数に引数はわたせます
97nobodyさん:03/08/16 12:52 ID:???
>>84
コメント扱いで出力。htmlなら<!-- -->内に埋め込む。batならremの後ろに書く。
自分でファイルをオープンして書き込み保存。
syslogに飛ばす。
変数デーモンを作成して、そこへの接続を全て記録。

>>91
そう言う用途にはapacheのモジュールのmod_writeを使うと便利。
が、確実にスレ違いなのでそれ以上言わない。
98nobodyさん:03/08/16 12:54 ID:???
mod_writeじゃねーよ>オレ
mod_rewriteね。
9991:03/08/16 13:05 ID:R1l09wg/
googleでmod_rewriteで探してきます。
Apacheの板orスレってあったっけ?(−−
100nobodyさん:03/08/16 13:11 ID:???
>>99
この板にも自宅サーバ板にもUNIX板にも
10191:03/08/16 13:49 ID:R1l09wg/
>> 100
おお。..._〆(゚▽゚*)メモメモ
ありがとうございました
それではいってきます(w
10291:03/08/16 15:16 ID:R1l09wg/
/htdocs/.htaccess: Invalid command 'RewriteEngine', perhaps mis-spelled or defined by a module not included in the server configuration
こんなエラーから進めない(;;
10391:03/08/16 15:39 ID:R1l09wg/
>>99
mod_rewriteが入っていない可能性が出てきたので他の方法ってありませんか?
104nobodyさん:03/08/16 15:54 ID:???
>>103
すれ違い
10584:03/08/16 15:54 ID:mdqCqsMr
>>97
>コメント扱いで出力。htmlなら<!-- -->内に埋め込む。batならremの後ろに書く。

……コロンブスの卵(^^; そーか、SQL実行しないでこーすればいいのか(汗)
アドバイスありがとうございました。

あと、「syslogに飛ばす」っつーのは、具体的にどうすればいいのでしょうか?
厨で申し訳ありませんが、ヒントなど頂ければ幸いです。よろしくお願いします。
106nobodyさん:03/08/16 16:25 ID:???
>>105
qx{/usr/bin/logger -s "Virus warning: uploader:[$host]:Detected $1 and deleted."};
みたいな。
107nobodyさん:03/08/16 17:11 ID:???
>>105-106
標準モジュールに Sys::Syslog というものが…。
108nobodyさん:03/08/16 17:40 ID:???
>>95

もう、動かないからあきらめた
109nobodyさん:03/08/16 17:41 ID:???
このスクリプト、どうもみても初心者のじゃねーよ
110あぼーん:あぼーん
あぼーん
111あぼーん:あぼーん
あぼーん
112あぼーん:あぼーん
あぼーん
113あぼーん:あぼーん
あぼーん
114あぼーん:あぼーん
あぼーん
115nobodyさん:03/08/16 18:09 ID:???
質問スレが珍しく荒れてるな〜と思ったら、全部 メール欄??? の仕業かい!w
116nobodyさん:03/08/16 18:41 ID:???
お。なるほど。メール欄であぼーんすればよかったのか
11784:03/08/16 18:57 ID:mdqCqsMr
……syslog.phってどーやってつくればいいのでせう?<厨なアタシ(T_T)

それはさておき、「Can't locate Date/Manip.pm in @INC〜」なんてエラーが出てきました。
CPANで「Install1 Date」はしたのですが、他になにかしなければならないことがあるのでしょうか?
重ね重ねで申し訳ありませんが、よろしくお願いします。
118nobodyさん:03/08/16 21:02 ID:???
>>117
一々作らんでも @INC に入ってない? UNIX系OS以外は知らんけど。
作るなら h2ph で。

見つからんって言われてるんだから、入れればいいじゃん。:-)
http://search.cpan.org/author/SBECK/DateManip-5.42a/
119nobodyさん:03/08/16 21:19 ID:???

十進数の数字があり、それを出力する時16進数にしたいのですが、
どのように変換すれば良いのでしょうか?

すみません、かなり初歩的な質問ですがお願いします。
120nobodyさん:03/08/16 21:20 ID:???
sprintf
121nobodyさん:03/08/16 21:33 ID:???
%x
12284:03/08/16 22:43 ID:mdqCqsMr
>>118
Date::Manipは入りました。……単純に「install Date::Manip」でOKなんですね。
厨でごめんなさい(T_T)
123あぼーん:あぼーん
あぼーん
124nobodyさん:03/08/17 01:00 ID:???
>>119
printf("%x", $a);
とか
$s = hex($a)
とか
125119:03/08/17 01:30 ID:???
返信遅れてすみません。

アホな質問に答えてもらって、とってもありがとうございました。
m(__)m
126nobodyさん:03/08/17 01:59 ID:okMBcaWD
ディレクトリ作成するときって
mkdir("mydir",0700);
のようにパーミッション指定できるが、
open(fp,">output.txt");
ってやって書き込むとパーミッションが自動的に644になります。
これを600にするにはどうしたらいいでしょう???

っつってもあとでchmodすればすむことなんだが、
open時に600にするようにできればしたい、
127nobodyさん:03/08/17 02:13 ID:???
>>126 umask
128nobodyさん:03/08/17 02:29 ID:???
>>126

いったんファイルを削除します。それからディレクトリで呼び出すを選ぶと
復元できるので、その設定でパーミッションを設定すると固定できます。
129あぼーん:あぼーん
あぼーん
130あぼーん:あぼーん
あぼーん
131あぼーん:あぼーん
あぼーん
132あぼーん:あぼーん
あぼーん
133あぼーん:あぼーん
あぼーん
134あぼーん:あぼーん
あぼーん
135あぼーん:あぼーん
あぼーん
136nobodyさん:03/08/17 02:38 ID:???
>>126
IO::Fileモジュール使うとパーミッションを指定しながらオープンできます。
(sysopen互換のO_XXX指定を使うとファイルロックしながらオープンできたり便利。)
137126:03/08/17 02:42 ID:???
大変参考になったぞ。
おめーらに感謝。
138あぼーん:あぼーん
あぼーん
139nobodyさん:03/08/17 05:55 ID:EjdzKOi8
POP3サーバと接続してメールを閲覧するプログラムを
書きたいのですが、これをsocketモジュールを使わない
で行うことは可能でしょうか。

初心者ですみませんが教えてください。
140nobodyさん:03/08/17 06:21 ID:1qkkfnQM
>>139

Net::POP3
141nobodyさん:03/08/17 06:22 ID:???
化膿。
142あぼーん:あぼーん
あぼーん
143あぼーん:あぼーん
あぼーん
144あぼーん:あぼーん
あぼーん
145あぼーん:あぼーん
あぼーん
146あぼーん:あぼーん
あぼーん
147あぼーん:あぼーん
あぼーん
148あぼーん:あぼーん
あぼーん
149nobodyさん:03/08/17 13:11 ID:8iaOJK9H
X.cgiの中の、一部の数字を取り出したいのですが。
X.cgiの中身はこんなです

1,データA,データB,データC,
2,データA,データB,データC,
3,データA,データB,データC,

この中の、最後のデータの数字「3」を変数に入れたいのです。

open(IN,"X.cgi") ;
while (<IN>) {
$num = split(/,/);
}
close(IN);
print $num;

これ全然違いますが、$numに「3」が入ってくるようにしたいんです。
よろしくおねがいします。
150nobodyさん:03/08/17 13:23 ID:???
>>149
splitの使い方がまちがっとる
$num = split(/,/); のすぐ下に print $num; を入れてみ。
その後で、splitの説明を読むとグー
151nobodyさん:03/08/17 14:12 ID:???
>>149
$num = split(/,/); の2つ下に print $num; を入れる。
それからwhile (<IN>) { をwhile($IN1 > 0){
に変える。
その後で、スクリプトを3の入るようにすればOK。
上はどっかの馬鹿だから無視しろ。
152あぼーん:あぼーん
あぼーん
153あぼーん:あぼーん
あぼーん
154あぼーん:あぼーん
あぼーん
155あぼーん:あぼーん
あぼーん
156nobodyさん:03/08/17 14:16 ID:???
>>126
おまえの脳みその程度もよくわかりました。
もう、二度と来ないでくださいね。すっごいむかつく!!
くだらん質問する暇あったら自分で調べろ!死ね!!
157あぼーん:あぼーん
あぼーん
158あぼーん:あぼーん
あぼーん
159あぼーん:あぼーん
あぼーん
160nobodyさん:03/08/17 14:37 ID:???
>>151 は例の荒しているヴァカだろ?
161nobodyさん:03/08/17 15:07 ID:???
>>160
そうみたいだな
162nobodyさん:03/08/17 15:22 ID:???
レス削除で削除人からコピペで依頼してくれってあったから、
運用情報のほうへ回そう
荒らしとしてアク禁しますっていうことなんじゃないか?
163nobodyさん:03/08/17 15:43 ID:???
>>160
なんでアレは削除依頼に入れてくれないんだろう。
164nobodyさん:03/08/17 17:34 ID:FkUVLAYO
#! /usr/local/bin/perl

while(<STDIN>) {
    print;
}

のようなフィルター(そのまま出力するだけですが(;´Д`))を作った後、
DOSの場合、どうやって実行するんですか?

すごい初歩的な質問でスイマセン
165nobodyさん:03/08/17 17:36 ID:???
Perlでバイナリファイルに保存したいんだけど、なにかあります?
166nobodyさん:03/08/17 18:11 ID:???
>>164
perlにパスが通っており、
それがtest.plというファイルなら、
test.plのあるフォルダにcdコマンドで移動し、
perl test.pl
と打ってEnterを押す。

とか、普通に答えてみる。

コーディングの質問じゃねー。
167nobodyさん:03/08/17 18:16 ID:???
>>165
binmode( FILE );
print FILE $buff;
168nobodyさん:03/08/17 18:23 ID:FkUVLAYO
>>166
出来ました。ありがとうございます。
というかスレ違いでしたか、スイマセン。今から気をつけます。
169nobodyさん:03/08/17 18:24 ID:???
>>165
>Perlでバイナリファイルに保存したいんだけど、なにか(いいバイナリファイル)あります?
画像ファイルがバイナリファイルだろうね。
170あぼーん:あぼーん
あぼーん
171nobodyさん:03/08/17 18:44 ID:ycQ+dswy
アクセス解析のCGI作ったんですけど、
フレームを使っている性で全部リファラがindexになってしまいます。
使っている鯖はSSIは使えませんし、.htaccessも使えません。

どうすればリファラが取れるんですか?教えてください。御願いします。

すれ違いだったらすいません。
172nobodyさん:03/08/17 18:53 ID:???
>171
CGIスレ向き。
173あぼーん:あぼーん
あぼーん
174139:03/08/17 19:29 ID:???
>>140
説明不足ですみません。
要はモジュールを使わずにpop接続を行いたいのです。
175あぼーん:あぼーん
あぼーん
176149:03/08/17 19:40 ID:8iaOJK9H
>>151
ありがとうございました。
ちょっとうまくいかないんですが(TT)
なんか根本的に判ってないかもしれないので出直します。
splitの勉強を・・・
177nobodyさん:03/08/17 19:41 ID:???
>>174
一旦モジュールを使って望みの動作をするスクリプトを組み、
コードを全てインライン展開する。
178nobodyさん:03/08/17 19:57 ID:???
>>176
>>151は荒氏だから参考しるな!
病気がうつるぞ〜。
splitの勉強汁〜。
179nobodyさん:03/08/17 20:35 ID:???
荒クンを解析してみたよ。
・17歳童貞
・高校生だが、成績が追いつかず、学校でも苛められて現在引き篭もり中。近々退学予定。
・自己管理が出来ず、体系は肥満気味。お風呂に入らないので臭い。
・家族構成は共働き両親2人とペットのハムスター20匹(名前付き)
・起きている間は、ほぼインターネットを利用している。
・最近KENT-WEBからASKAを借りてきて、初めてPerlを知った。
・日ごろから、書き込む度に叩かれている某掲示板には恨みを抱いているようだ。
・もう2ヶ月ほど家族意外と顔を合わせた事は無い。
180nobodyさん:03/08/17 20:42 ID:???
>>174ソケット使ってやるしかないですナァ…。
181nobodyさん:03/08/17 20:53 ID:???
>>174
http://x68000.startshop.co.jp/~68user/net/
ここのサンプルはSocketモジュールを使ってるけど、
「サンプルがperl5専用なワケ」を読めば、すぐperl4対応
(->モジュール不使用)にできるはず。

しかし、なんでモジュールを使わずに?
182nobodyさん:03/08/17 20:58 ID:qWovZd+9
>>179
まぁまぁ、そう自己紹介しなさんな。
183nobodyさん:03/08/17 21:17 ID:???
>>128
ネタはマジレスの前にしましょう。
184nobodyさん:03/08/17 23:06 ID:???
#!/usr/local/bin/perl
require './cgi-lib.pl';


%form = &read_input('euc');
$name = $form{'name'};

print "Content-type: text/html\n\n";
print "<html><head><title>結果</title></head><body>\n";
print "<p>名前:$name</p>\n";
print "</body></html>\n";

↑のようなスクリプト作ってANHTTPDを起動し、
実行しようとしても「サーバーがみつかりません」が表示されます。
何がいけないんでしょうか?
185nobodyさん:03/08/17 23:06 ID:???
IO::File の使い方教えてください
日本語で解説してある際とがぜんぜんないもんで。

use IO::File;
my $fh = new IO::File('log.dat','r'); #読み込み
my $fh = new IO::File('log.dat','w'); #書き込み
my $fh = new IO::File('log.dat','r+w'); #両方

などでオープンできるとこまではわかったんだが、
このファイルから全部読み込む場合にはどうしたらいい?

my @array = $fh->read;   ← こんな感じでよいのかい?

あと、書き込むときは

$fh->print('文字列');

で、可能みたいなんだが、英語が四面からわからん。
186nobodyさん:03/08/17 23:18 ID:???
>>184
perlコーディングとは「全く」関係無いですね。そのエラーから「推測」すると、
あなたのクライアントからサーバーが見れていないようです
187nobodyさん:03/08/17 23:20 ID:???
> で、可能みたいなんだが、英語が四面からわからん。

こんな事言う様じゃ解答する気になれないな。
これを機会に読めるように辞書片手に必死こいて読んで見たら?

解答者の中にはそうやってスキルとか知識身につけてる人もいるんだから
188nobodyさん:03/08/17 23:32 ID:???
>>184
httpdの設定を確認汁。
189nobodyさん:03/08/17 23:51 ID:???
>>186,>>188
回答ありがとうございます。
でもANHTTPDは「CGIを実行する」にチェックが入ってます・・・
190139:03/08/18 00:10 ID:???
>>181
仕事でパッケージ化するかもしれないといわれたので、
完全オリジナルでなかったら何かと問題が出るかと思い、
質問させていただきました。
もともとは趣味で作ってたものなので。

標準モジュールは使っても問題ないのでしょうかねぇ、、、
191nobodyさん:03/08/18 00:34 ID:???
>>189
どっちにしてもさっきのソースとは関係なし
ANHTTPDがちゃんと動くことを確認してから質問せよ
192nobodyさん:03/08/18 00:47 ID:???
>>189
そもそもCGI以外はどうなのか。閲覧可能なのか。
193nobodyさん:03/08/18 01:29 ID:???
>>189
板違いだ!ヴォケ!!二度と質問するな!クソ坊主!!
194nobodyさん:03/08/18 01:32 ID:???
>>139
できねーっていってんだろ!馬鹿!!
おまえみたいなよく読まない奴は、うざいからさ。とっととどっか行ってくれない?
まじに迷惑なの、わかんない??
195あぼーん:あぼーん
あぼーん
196あぼーん:あぼーん
あぼーん
197あぼーん:あぼーん
あぼーん
198あぼーん:あぼーん
あぼーん
199あぼーん:あぼーん
あぼーん
200あぼーん:あぼーん
あぼーん
201あぼーん:あぼーん
あぼーん
202あぼーん:あぼーん
あぼーん
203nobodyさん:03/08/18 05:32 ID:???
>>174
getprotobyname
gethostbyname
socket
bind
connect
これらを使えばOK
204nobodyさん:03/08/18 05:42 ID:???
bindはいらないと思う。
205nobodyさん:03/08/18 06:19 ID:???
Date::Simple という、
日付のチェックを行う便利なライブラリがあったので
インストールしたんですが、なぜか使えません。

my $date = new Date::Simple(1999,12,31);

を実行すると

Undefined subroutine

というエラーが出ます。new関数が定義されてないとか言われ増す。ためしに

print $Date::Simple::VERSION;

とやってみたら、ただしく 1.03 と表示されたので、
ライブラリのパスが間違っているとかそういうことはないと思うんですが、
どうやったら使えます?
206nobodyさん:03/08/18 09:22 ID:???
>>204
理由は?それに、「思う」とか不確実な表現されても理由も書かないんじゃ全然説得力無い
207nobodyさん:03/08/18 09:38 ID:???
208nobodyさん:03/08/18 11:11 ID:rz7xuT5a

if($ran==6)
だと6の時という事ですが、
6以外と指定するのはどう書くんですか?
209nobodyさん:03/08/18 11:12 ID:???
210nobodyさん:03/08/18 11:31 ID:???
>>205
エラーの原因はそれだけでは分からんが、
Date::Simple の最新版は 2.04 だね。
http://search.cpan.org/author/JTOBEY/Date-Simple-2.04/
211nobodyさん:03/08/18 12:12 ID:WxMQyRS0
設置が超簡単で商用OKのスクリプトを開発中

スクリプト1個でblogを作るスレ
http://s37.1000gex.net/test/read.php/pc/1061132998/

・2chブラウザはこちら

スクリプト1個でblogを作るスレ
http://s37.1000gex.net/test/read.cgi?bbs=pc&key=1061132998

212nobodyさん:03/08/18 12:48 ID:???
>>211ブラクラ
213nobodyさん:03/08/18 12:48 ID:???
>>211
1000gex って糞7じゃねーか
214nobodyさん:03/08/18 13:06 ID:???
うちの2chブラウザだと、
http://s37.ポン既知/test/read.php/pc/1061132998/ と表示されますが何か?
215nobodyさん:03/08/18 13:19 ID:???
>>206
ワラタ 死ねや厨房
216nobodyさん:03/08/18 13:31 ID:???
>>215↑糞7?
217nobodyさん:03/08/18 14:27 ID:PgjPpzIP
>>206
普通にキモイと思います。多分伊達眼鏡とかかけてる人。
218nobodyさん:03/08/18 14:35 ID:???
>>205
useしてる?

・・・してないわけないか。
219nobodyさん:03/08/18 14:48 ID:OsKLKOac
ちょうド素人でスマソ
重いPerl製CGIをサーバーに置こうと思ってるんですが、
少しでも動作を軽くしようと思っています。
そこでききたいのですが、Perlのコメント部分を全て消して余分な部分を少しでも減らしたら少しでも軽くなるでしょうか?
コメントを消したりしたら軽くなる、ってはなし聞いたことないんですが、実際のところはどうなんですか?
一応、少しだけでも軽くなれば目標達成なので。
220nobodyさん:03/08/18 14:50 ID:WxMQyRS0
2行目にexit;って入れたら最速になるぞ
221nobodyさん:03/08/18 14:56 ID:???
>219
ナノ秒やピコ秒単位でなら早くなるかもね。
222nobodyさん:03/08/18 16:47 ID:???
>>217糞7?
223nobodyさん:03/08/18 18:35 ID:???
perlでファイルを新規作成するにはどうしたらいいのでしょうか?
書き込み時にファイルが存在しないとファイルが作成されるのは知ってるのですが、

unless (-e $datafile){
    <unlinkの逆> $datafile;
};

をやりたいのですが。。。
224nobodyさん:03/08/18 18:44 ID:P7pot7R5
>>223
touch ちんこ
225nobodyさん:03/08/18 18:47 ID:???
乱数の生成は分かるのですが、
パスワードの生成(しかも、使える文字は[a-z0-9]で大文字はなし)が
どうすればいいのでしょうか?
226223:03/08/18 18:49 ID:???
>>224
すいません。perlからunixのコマンド起動できないんです。。。
227nobodyさん:03/08/18 18:54 ID:???
>>219

まず、ファイルを削除します。それから、ファイルの復旧を行って
オプションを、コメントなしに設定すると軽くなります。
228nobodyさん:03/08/18 18:56 ID:???
>>223

板違いだから、WEB板へいけ。邪魔だ。消えろ!
229nobodyさん:03/08/18 18:57 ID:???
>>226
そんなエレガントな(?)関数は無いよ。

sub touch ($) {
 local *FH;
 my $ret = open(FH, ">>$_[0]");
 close(FH);

 return $ret;
}
230nobodyさん:03/08/18 18:57 ID:???
>>225
乱数を細かく設定するには、ファイルの削除で削除してから
設定します。
231nobodyさん:03/08/18 18:58 ID:???
>>226

そのパソコンはできないんだよ。
初心者の質問は違うとこでやってね。迷惑。うざい!死ね!!
232nobodyさん:03/08/18 18:59 ID:???
>>223
open FILE , ">$datafile" unless -e $datafile;
close FILE;

これで空ファイルつくるだろ。
233nobodyさん:03/08/18 19:03 ID:???
>>228
>>231
もちっとましな物言い、できんのかよ…
自分らの書いたせりふ、声に出して言ってみ
234nobodyさん:03/08/18 19:03 ID:???
>>225
なぜか面白いことがしたくなる…

@char = (0 .. 9, 'a' .. 'z', 'A' .. 'Z');
print join '' @char[ map(int rand @char, 1 .. 8) ];
235nobodyさん:03/08/18 19:04 ID:???
おっと。コンマが抜けた。

print join '', @char[ map(int rand @char, 1 .. 8) ];
236nobodyさん:03/08/18 19:05 ID:???
大文字は無しか…うぅ
@char = (0 .. 9, 'a' .. 'z');
237あぼーん:あぼーん
あぼーん
238あぼーん:あぼーん
あぼーん
239nobodyさん:03/08/18 19:09 ID:???
>>225
こうだな

@char = (0 .. 9, 'a' .. 'z', 'A' .. 'Z');
print join '' @char[ while(int rand @char, ..) ];
240あぼーん:あぼーん
あぼーん
241あぼーん:あぼーん
あぼーん
242あぼーん:あぼーん
あぼーん
243nobodyさん:03/08/18 19:28 ID:???
>>205
newメソッドがないと
Can't locate object method "new" via package "Date::Simple"
とでるので、別の原因があると思われ。

Date::Simpleはpure perlだから、/Date/Simple.pmを探してみそ。
244nobodyさん:03/08/18 20:01 ID:???
>233
荒らしは放置しる。
245nobodyさん:03/08/18 23:23 ID:???
無知がこんどは糞7扱いか。
246nobodyさん:03/08/19 00:55 ID:???
簡単なことだと思うのですが、
CGI(Perl)で、カレントディレクトリにあるHTMLを、
呼び出して、それをそのまま表示する方法が分かりません。
具具ってもなかなか見つからないので、お助け下さい。
247nobodyさん:03/08/19 01:08 ID:???
>>246
(略)
if(!open(FILE,"file.html")){
print "Can't open\n";
exit(1);
}
undef $/;
$a=<FILE>;
print $a;
248nobodyさん:03/08/19 01:48 ID:???
何故ぐぐっても分からないか。

・そんなことしても意味がない
・簡単すぎるから解説するまでもない
249nobodyさん:03/08/19 01:53 ID:???
>>246
my $file = "hoge.html";
open(Fh, $file) or die "Could'nt open $file $!\n";
print while(<Fh>);
close(Fh);

Perlっぽく。
CGIならContent-typeとか、dieするとまずいとかあるから、注意。
250nobodyさん:03/08/19 03:43 ID:???
>>249
ファイルハンドルは全て大文字で書かなくても委員会?
動作はするだろうがな
251nobodyさん:03/08/19 18:46 ID:???
>>246

何故ぐぐってもわからない馬鹿が質問するか?

>>246 は生きる価値のないクズ!
>>246 は初心者で板違いの迷惑やろう
・早く死ね!

252あぼーん:あぼーん
あぼーん
253あぼーん:あぼーん
あぼーん
254あぼーん:あぼーん
あぼーん
255あぼーん:あぼーん
あぼーん
256あぼーん:あぼーん
あぼーん
257あぼーん:あぼーん
あぼーん
258あぼーん:あぼーん
あぼーん
259あぼーん:あぼーん
あぼーん
260nobodyさん:03/08/19 19:06 ID:???
>>250
別に大文字じゃなけりゃいかんという決まりはなかったと思うが。
261nobodyさん:03/08/19 19:12 ID:???
>>260
が、大文字でなかったために色々妙な動きをしてるやつがいたな。
意図していない動きをしているので、大文字でやっとけってことだよな。
大文字にしといたら、それがハンドルであることに気付きやすくなってちょっと幸せ。
262nobodyさん:03/08/19 21:49 ID:???
大文字といっても、DATAなんかは避けといたほうがいいね。
別に使っても害はないけど、なんか気分的に。
263nobodyさん:03/08/19 22:14 ID:IYLLDi9m
時差を修正するにはどうすりゃいいでつか?
ぐぐったけど、初心者なんで分からないでつ。
264あぼーん:あぼーん
あぼーん
265nobodyさん:03/08/19 22:26 ID:???
>>262
FAIRUHANDORUとかがよろしい。
一目瞭然さ!
266nobodyさん:03/08/19 22:52 ID:???
>>263
「perl タイムゾーン」
267nobodyさん:03/08/19 23:55 ID:???
     ____
    /∵∴∵∴\
   /∵∴∵∴∵∴\
  /∵∴∴,(・)(・)∴|
  |∵∵/   ○ \|
  |∵ /  三 | 三 |   / ̄ ̄ ̄ ̄ ̄
  |∵ |   __|__  | < おい、誰かPerl教えろ!!
   \|   \_/ /   \_____
     \____/
268nobodyさん:03/08/19 23:55 ID:???
     ____
    /∵∴∵∴\
   /∵∴∵∴∵∴\
  /∵∴∴,(・)(・)∴|
  |∵∵/   ○ \|
  |∵ /  三 | 三 |   / ̄ ̄ ̄ ̄ ̄
  |∵ |   __|__  | < パールだ!パール!真珠じゃねえぞ
   \|   \_/ /   \_____
     \____/
269nobodyさん:03/08/19 23:56 ID:???
     ____
    /∵∴∵∴\
   /∵∴∵∴∵∴\
  /∵∴∴,(・)(・)∴|
  |∵∵/   ○ \|
  |∵ /  三 | 三 |   / ̄ ̄ ̄ ̄ ̄
  |∵ |   __|__  | < まずはパンチ5分の2な!
   \|   \_/ /   \_____
     \____/
270nobodyさん:03/08/19 23:57 ID:???
     ____
    /∵∴∵∴\
   /∵∴∵∴∵∴\
  /∵∴∴,(・)(・)∴|
  |∵∵/   ○ \|
  |∵ /  三 | 三 |   / ̄ ̄ ̄ ̄ ̄
  |∵ |   __|__  | < おまえは5分の2、おれのケーキは5分の3な
   \|   \_/ /   \_____
     \____/
271nobodyさん:03/08/20 00:01 ID:???
     ____
    /∵∴∵∴\
   /∵∴∵∴∵∴\
  /∵∴∴,(・)(・)∴|
  |∵∵/   ○ \|
  |∵ /  三 | 三 |   / ̄ ̄ ̄ ̄ ̄
  |∵ |   __|__  | < あと、イフとエルスとリリスとアダムも教えろよ!
   \|   \_/ /   \_____
     \____/
272nobodyさん:03/08/20 02:03 ID:???
>>262
やっぱIN,OUTだな。ほとんど。
273205:03/08/20 02:43 ID:???
Date::Simpleについて質問した者だが、
実は mod_perl を使っていたんだが、
今日、mod_perl を外して、普通のCGIとして実行させたら、
Date::Simple の new メソッドが正常に動きました。

この場合、mod_perl が原因なのは明らかだが、
具体的に mod_perl のなにがおかしかったのかよくわかりません。
わかる人レスください、
274nobodyさん:03/08/20 03:55 ID:LVmz2hpa
本を買ってきて見ながら勉強し始めたものです。
メモ帳に本のとおりにこのように書きました。
(長いので2回にわけます)
#!C:\Perl\bin\perl
$agent = $ENV{'HTTP_USER_AGENT'};
print "Content-type:text/html\n\n";
print "<html>\n";
print "<head>\n";
print "<title>環境変数</title>\n";
print "</head>\n";
print "<body>\n";
print "環境変数の取り出し\n";
print "<hr/>\n";
print "$agent\n";
print "</body>\n";
print "</html>\n";
exit;
275続きです:03/08/20 03:56 ID:LVmz2hpa
上のものをftpソフトでアップすると、
「環境変数の取り出し」という文字はブラウザに表示されるのですが、
本に載っているような実行結果が出力されません。
(本にはMozilla/4.0(compatible〜...と載っています)
ブラウザのソースを見てみると
<html>
<head>
<title>環境変数</title>
</head>
<body>
環境変数の取り出し
<hr/>

</body>
</html>
とだけなっていて、空白のようです、
アドバイスお願いいたします、、
276あぼーん:あぼーん
あぼーん
277nobodyさん:03/08/20 04:11 ID:???
#!C:\Perl\bin\perl

print "<hr/>\n";
278あぼーん:あぼーん
あぼーん
279274:03/08/20 04:18 ID:???
わー、書き間違えてました、
1番上は#/ur/local/bin/perlの書き間違いです
print "<hr />\n";これを取り外せばよいのでしょうか、
やってみます
280nobodyさん:03/08/20 04:41 ID:???
print "<hr />\n";
これは単にタグがおかしいだけ。
281274:03/08/20 05:02 ID:???
FTPソフトがなぜか接続しました、のまま止まってしまって
やっとつながりました、遅くなりました、
やってみたのですがMozilla/4.0(compatible〜...と出てくれません、、
次のページのものはずらずらっと文字が表示されて成功だったのですけど、
1番最初のができないまま進めてしまってよいものなのかなぁ、、
寝て起きたらもうすこしやってみます、
>>227さん、>>280さん、お返事ありがとうございました
282nobodyさん:03/08/20 06:12 ID:???
>>281
うちで使ってるサーバーでは、そのコードでちゃんと動いたよ。
283nobodyさん:03/08/20 07:47 ID:???
>>263
「何の時差をどう修正したいか」ぐらいは最初から書こうよ。

>>273
思い込みはデバッグの敵だぞ。君のスクリプトが
mod_perl 上で走る為の要件を満たしていないだけかも知れん。

ともかく検証に必要な最低限のコードが示されないと、
何が悪いのかなんて分からんよ。

>>281
ブラウザやプロキシの設定で HUA 消してない?

my $exists = exists $ENV{'HTTP_USER_AGENT'} ? 'exists' : 'not exists';
my $defined = defined $ENV{'HTTP_USER_AGENT'} ? 'defined' : 'undef';
my $agent = $ENV{'HTTP_USER_AGENT'};
...
print "$exists, $defined, [$agent]\n";

とかしてみ。
284nobodyさん:03/08/20 08:00 ID:???
>>280
どこがどうおかしいのか教えて欲しい。
285nobodyさん:03/08/20 09:12 ID:???
280じゃないけど
<hr/>
最近のブラウザじゃちゃんと解釈すると思うが…。
まぁ、考慮して<hr />にしと居た方が良いかもしれないけど。
286nobodyさん:03/08/20 09:53 ID:???
<hr/>ってかなり普通だし。
XHTMLなら最初に宣言つけろってことか?
287nobodyさん:03/08/20 10:22 ID:???
>>286
hrと/の間にスペースを入れろってことじゃないの?
288nobodyさん:03/08/20 10:26 ID:???
<hr/>ってのを知らんかっただけだろ

まあ>>275のHTMLに<hr/>って有っても滑稽なだけだが
289nobodyさん:03/08/20 10:43 ID:???
>>287
スペースは要らんだろ?
290nobodyさん:03/08/20 10:45 ID:???
要らないよ。
291nobodyさん:03/08/20 11:15 ID:???
>>289-290
287だがスマソ
292nobodyさん:03/08/20 11:20 ID:???
>>291
とりあえずスペース入れろ。
それと一回ファイルを削除して、復元しろ。わからないところ、間違っているところが表示される。
293nobodyさん:03/08/20 11:21 ID:???
#!/usr/bin/perl

# CGIヘッダの出力
print "Content-type: text/html\n\n";

while($HP1 > 0) and ($HP2 > 0){
srand1;
srand2;
}

# Player1
$HP1 = 400 - $kougeki1;
$KIK1 = 60;
$PAN1 = 20;
$DF1 = 10;

# Player2
$HP2 = 300 - $kougeki2;
$KIK2 = 100;
$PAN2 = 40;
$DF2 = 0;

# Player1
$kougeki1 = srand;

# Player2
$kougeki2 = srand2;
294nobodyさん:03/08/20 11:21 ID:???
srand;
if($mode == 1){
$offense = \%you;
$defense = \%my;
}elsif($mode == 2){
$offense = \%my;
$defense = \%you;
}
if( int(rand(2)) ){
#punch
$damage =
$offense->{'$PAN1'} - $defense->{'$DF2'};
if(!$rand = int(rand(5))){
#half
$damage = int($damage / 999);
}elsif($rand < 3){
#miss
$damage = "";
}
}else{
#kick
$damage =
$offense->{'$KIK1'} - $defense->{'$DF2'};
}
295nobodyさん:03/08/20 11:21 ID:???
srand2;
if($mode == 1){
$offense = \%you;
$defense = \%my;
}elsif($mode == 2){
$offense = \%my;
$defense = \%you;
}
if( int(rand(2)) ){
#punch
$damage =
$offense->{'$PAN2'} - $defense->{'$DF1'};
if(!$rand = int(rand(5))){
#half
$damage = int($damage / 999);
}elsif($rand < 3){
#miss
$damage = "";
}
}else{
#kick
$damage =
$offense->{'$KIK2'} - $defense->{'$DF1'};
}
296nobodyさん:03/08/20 11:22 ID:???
($damage < 0) and ($damage = 0);
$defense->{'HP1'} -= $damage;

($damage < 0) and ($damage = 0);
$defense->{'HP2'} -= $damage;

# HTMLの出力
print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n";
print "<html>\n";
print "<head><title>対戦バトル</title></head>\n";
print "<body>
<p>Player1:体力は$HP1です</p>
<p>Player2:体力は$HP2です</p>
<p>Player1は<big>$kougeki1</big>のダメージを与えた。</p>
<p>Player1は<big>$kougeki1</big>のダメージを受けて混乱した。
<p>Player1は<big>$kougeki1</big>のダメージで野クソを食べ始めた。
<p>Player2は<big>>$kougeki2</big>のダメージを与えた。</p>
<p>Player2は<big>>$kougeki2</big>のダメージを受けて、道路で裸踊りを始めた。
<p>Player2は<big>>$kougeki2</big>のダメージで電車の中のブス女をレイプし始めた。</p></p></body>\n";
print "</html>";
297nobodyさん:03/08/20 11:41 ID:???
>>292
スペース要らんてば。
298nobodyさん:03/08/20 12:08 ID:???
スペースは要るが、そこが問題の本質ではないってことだな。
299nobodyさん:03/08/20 12:31 ID:???
300274:03/08/20 12:59 ID:dhaQVioy
こんにちは、原因がわかりました、
怒られそうです、

ノートンインターネットセキュリティを無効にしたら
きちんとMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)と表示されました、
あー、、自分が嫌になりました、、
もっとちゃんといろいろやってみて
どうしてもこうしてもわからなくなったら書き込むようにします、
お騒がせいたしました、申し訳ありません、、
301nobodyさん:03/08/20 15:26 ID:???
<hr/>でもいいけど、<hr />のほうがいい。
302nobodyさん:03/08/20 15:27 ID:???
>>300
やっぱり>>283ということでしたか。
ノートンはリファラなんかも消すので注意ですな
303nobodyさん:03/08/20 15:45 ID:ynfrwlt/
文字列の並び換えを他の数値リストから行ないたいのですが、どうしたらいいでしょうか?

readdir()で取得したリスト@file_listを
for($i = 0;$i < @file_list;$i++){
$time[$i] = (stat("$file_list[$i]"))[9];
}
で取得した最終更新日でソートしたいのですが。
@timeをソートした時に、同じ順番で@file_listもソートするような事は
どうしたらいいでしょうか?

お願いします。
304nobodyさん:03/08/20 15:59 ID:???
>>303
ファイルリスト取得時から根本的に変えると

my @file = map { name => $_, time => (stat $_)[9] }, readdir DIR;
print
 map { scalar localtime $_->{'time'}, " $_->{'name'}\n" }
 sort { $a->{'time'} <=> $b->{'time'} }
 @file;
305303:03/08/20 16:34 ID:???
>>304さん、ありがとです。
動いております。並び換えられているようです。
しかしながら、map童貞には、何故動いてるかわからんです(まだ1行目を理解しただけ)。
正直おっかないですw
306303:03/08/20 16:57 ID:???
for($i = @time;$i != 1;$i--){
  for($j = 0;$j < (@time - 1);$j++){
    if($time[$j] < $time[($j + 1)]){
      $tmp = $time[$j];
      $time[$j] = $time[($j + 1)];
      $time[($j + 1)] = $tmp;

      $tmp = $list[$j];
      $list[$j] = $list[($j + 1)];
      $list[($j + 1)] = $tmp;
    }
  }
}
結局こんなのを書いて逃げてしまう漏れは駄目ぽです。
>>304さん、こちらでとりあえずお茶濁しときます。
perlらしい書き方も勉強せねばならんです。イキナリ読めなくなる。
307nobodyさん:03/08/20 17:44 ID:???
>>306
@file と @time でやるなら

my @file = readdir DIR;
my @time = map { (stat $_)[9] } @file;

# 添え字を時刻昇順でソート
foreach (sort { $time[$a] <=> $time[$b] } 0..$#file) {
 print(scalar localtime $time[$_], " $file[$_]\n");
}

こういうのは Perl 的な慣用句だけど、難しい事はしてないから
関数リファレンス片手に順番に読み解けばすぐ理解できるよ。
308nobodyさん:03/08/20 20:13 ID:???
>>303
mapはforeachの亜種と思えば良いとおもう。
覚えとくと便利。手放せない。まじ。
基本的には右側の配列を順番に回してるだけ。
@array1 の要素を「:」で区切って2次元配列にする↓
@array2 = map { [ split ':', $_ ] } @array1;

foreach ( @array1 ) {
push(@array2, [ split ':', $_ ]);
}
がおんなじ。
309nobodyさん:03/08/20 21:49 ID:Loi9JQvi
telnetで接続できるBBSをPerlで書こうと思っています。
現在、
http://x68000.startshop.co.jp/~68user/net/echo-3.html
のechoサーバを参考に作っているところなのですが、
いかにしてキー入力を取得するかで悩んでいます。

現在、標準入力からそのまま取得しているのですが
これでは、BSやDELが効きません。
#入力された文字列がそのまま表示されてしまうため
#パスワードの入力にも使えません。

sub lineinput {
my ($mes) = @_;

print CLIENT $mes;
my $line = <CLIENT>;

$line =~ s/\x0D?\x0A?$//;
return $line;
}

どなたか、このような場合の一行入力ルーチンを
ご存知の方はいらっしゃいませんか?
310nobodyさん:03/08/20 22:13 ID:???
>>309
参考になるかどうか分からんが。
http://search.cpan.org/author/AUTRIJUS/OurNet-BBS-1.65/
311nobodyさん:03/08/21 01:12 ID:???
>>306
とりあえず入力ルーチンを入れろ。
それと一回ファイルを削除して、復元しろ。わからないところ、間違っているところが表示される。
312nobodyさん:03/08/21 01:13 ID:???
#!/usr/bin/perl

# CGIヘッダの出力
print "Content-type: text/html\n\n";

while($HP1 > 0) and ($HP2 > 0){
srand1;
srand2;
}

# Player1
$HP1 = 400 - $kougeki1;
$KIK1 = 60;
$PAN1 = 20;
$DF1 = 10;

# Player2
$HP2 = 300 - $kougeki2;
$KIK2 = 100;
$PAN2 = 40;
$DF2 = 0;

# Player1
$kougeki1 = srand;

# Player2
$kougeki2 = srand2;
313nobodyさん:03/08/21 01:13 ID:???
srand;
if($mode == 1){
$offense = \%you;
$defense = \%my;
}elsif($mode == 2){
$offense = \%my;
$defense = \%you;
}
if( int(rand(2)) ){
#punch
$damage =
$offense->{'$PAN1'} - $defense->{'$DF2'};
if(!$rand = int(rand(5))){
#half
$damage = int($damage / 999);
}elsif($rand < 3){
#miss
$damage = "";
}
}else{
#kick
$damage =
$offense->{'$KIK1'} - $defense->{'$DF2'};
}
314nobodyさん:03/08/21 01:13 ID:???
srand2;
if($mode == 1){
$offense = \%you;
$defense = \%my;
}elsif($mode == 2){
$offense = \%my;
$defense = \%you;
}
if( int(rand(2)) ){
#punch
$damage =
$offense->{'$PAN2'} - $defense->{'$DF1'};
if(!$rand = int(rand(5))){
#half
$damage = int($damage / 999);
}elsif($rand < 3){
#miss
$damage = "";
}
}else{
#kick
$damage =
$offense->{'$KIK2'} - $defense->{'$DF1'};
}
315nobodyさん:03/08/21 01:14 ID:???
($damage < 0) and ($damage = 0);
$defense->{'HP1'} -= $damage;

($damage < 0) and ($damage = 0);
$defense->{'HP2'} -= $damage;

# HTMLの出力
print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n";
print "<html>\n";
print "<head><title>対戦バトル</title></head>\n";
print "<body>
<p>Player1:体力は$HP1です</p>
<p>Player2:体力は$HP2です</p>
<p>Player1は<big>$kougeki1</big>のダメージを与えた。</p>
<p>Player1は<big>$kougeki1</big>のダメージを受けて混乱した。
<p>Player1は<big>$kougeki1</big>のダメージで野クソを食べ始めた。
<p>Player2は<big>>$kougeki2</big>のダメージを与えた。</p>
<p>Player2は<big>>$kougeki2</big>のダメージを受けて、道路で裸踊りを始めた。
<p>Player2は<big>>$kougeki2</big>のダメージで電車の中のブス女をレイプし始めた。</p></p></body>\n";
print "</html>";
316nobodyさん:03/08/21 01:15 ID:???
>>306

2行目に
open (IO,"+<$logfile");
5行目に
while (<IO>){
 if ($_ =~ /<>$ip/){
  @y2=split(/<>/,$_);
  if ($y2[6] ne $ip){
   push(@log,$_);
  }else{
   $y2[0] = 'All Clear (^-^)v';
   $y2[5] = 'All Clear (^-^)v';
   push(@log,"$y2[0]<>$y2[1]<>$y2[2]<>$y2[3]<>$y2[4]<>$y2[5]<>$y2[6]<>$y2[7]<>\n");
  }
 }else{
  push(@log,$_);
 }
}
を入れろ。
317あぼーん:あぼーん
あぼーん
318あぼーん:あぼーん
あぼーん
319nobodyさん:03/08/21 03:26 ID:???
中途半端に荒しやがって。
どうせならどんと荒してアク禁になれよな。
320nobodyさん:03/08/21 12:36 ID:DAq1ln5w
#=============================================================================
# クッキー書き込み
# &cookie_regist(クッキー名, データ, 日数);
# ・クッキー名 ⇒ クッキーの名称、半角英数字
# ・データ ⇒ キー!値,キー!値,キー!値 の書式で整えられたデータ
# ・日数 ⇒ 保存しておく日数(ただし、sessionと入力すると、
#  セッションクッキーとなる(ブラウザを閉じたらクッキーは削除される)
# ★注!:キー値に「!と=と;は使わないこと」
#例文:
#&cookie_regist("session","sessionid!246",1/24);
#-----------------------------------------------------------------------------
sub cookie_regist(){
local($cookiename, $cookievalue, $cookiedate) = @_;


($sec, $min, $hour, $mday, $mon, $year, $wday) = gmtime(time + 60*60*24* $cookiedate );
@mons = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
$date_gmt = sprintf("%s, %02d\-%s\-%04d %02d:%02d:%02d GMT",
$week[$wday], $mday, $mons[$mon], $year+1900, $hour, $min, $sec);
if ($cookiedate ne "session"){
print "Set-Cookie: $cookiename=$cookievalue; expires=$date_gmt\n";
} else{
print "Set-Cookie: $cookiename=$cookievalue\n";
}
}
という関数をつくったのですが、(長いので次のレスに続きます)
321320:03/08/21 12:38 ID:DAq1ln5w
すいません、タブを全角スペースにするの忘れたので見づらいので、書き直します。
#=============================================================================
# クッキー書き込み
# &cookie_regist(クッキー名, データ, 日数);
# ・クッキー名 ⇒ クッキーの名称、半角英数字
# ・データ ⇒ キー!値,キー!値,キー!値 の書式で整えられたデータ
# ・日数 ⇒ 保存しておく日数(ただし、sessionと入力すると、
#  セッションクッキーとなる(ブラウザを閉じたらクッキーは削除される)
# ★注!:キー値に「!と=と;は使わないこと」
#例文:
#&cookie_regist("session","sessionid!246",1/24);
#-----------------------------------------------------------------------------
sub cookie_regist(){
    local($cookiename, $cookievalue, $cookiedate) = @_;
    

     ($sec, $min, $hour, $mday, $mon, $year, $wday) = gmtime(time + 60*60*24* $cookiedate );
    @mons = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
    $date_gmt = sprintf("%s, %02d\-%s\-%04d %02d:%02d:%02d GMT",
     $week[$wday], $mday, $mons[$mon], $year+1900, $hour, $min, $sec);
    if ($cookiedate ne "session"){
        print "Set-Cookie: $cookiename=$cookievalue; expires=$date_gmt\n";
    } else{
        print "Set-Cookie: $cookiename=$cookievalue\n";
    }
}
という関数をつくったのですが、(長いので次のレスに続きます)
322320:03/08/21 12:41 ID:DAq1ln5w
&cookie_regist("hoge_session","hoge_sessionid!".$in{cust_code},180);
みたいにしてクッキーをセットすると、
ネスケでは、180日有効なクッキーがセットされるのですが、
IEだと、セッションクッキー(ブラウザを閉じると削除されるクッキー)に
なってしまいます。

どこがおかしいのでしょうか?
323320:03/08/21 13:29 ID:???
すいません、自己レス。いつのまにか、
@mons = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
のあとの
@week = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
を消してしまっていたことが原因でした。

しかし、ネスケでexpireを強引に認識してくれて、IEだと無視されるとは・・・
(逆なら納得いくんだが)

ともかく解決しました。すみません。
324nobodyさん:03/08/21 15:29 ID:pPohBqhp
PHPの質問で数値の表示方法についての質問なんですが、数値の計算で
例えば
10×1.05 をやると 10.5
になるのですがこれの小数点以下を切り捨てたいのですが、どうすれ
ば良 いのでしょう。number_format関数を使えば小数点以下の修正が
行なえるというのは知っているのですが、number_format関数を使うと
1000などの数値の時、1,000となり","(カンマ)が表示されてしまい、数
値として認識しなくなってしまいます。
この計算の後にもさらに計算をしたいので、数値として認識させなけれ
ばならないので、こまっています。
どうぞご指導をよろしくおねがいします。
325nobodyさん:03/08/21 15:32 ID:???
>>324
ここPerlだしPHPよく知らんけど、

$formated_number と $number と別にすればいいんでないの?
326nobodyさん:03/08/21 15:34 ID:???
なんでPHPの質問板でしないの?
floatだっけか忘れた。
327nobodyさん:03/08/21 15:42 ID:pPohBqhp
ごめんなさい。間違えました!
※ちなみに$numberと$formated_numberを使ってみたところfatal error
になっちゃいました。
すみません。迷惑かけました。ありがとうございました。
328nobodyさん:03/08/21 17:56 ID:DAq1ln5w
"私は39歳のオヤジで2人の子供がいます。"
という文字列に対して、全角数字を半角数字に置換したいのですが、
どうすればいいのでしょうか?
(文字列も、スクリプト自体も、文字コードはEUCです)
329nobodyさん:03/08/21 19:23 ID:DAq1ln5w
@fooでなく、
@ふー みたいに、配列の変数名に、日本語を交ぜる使う方法ってないでしょうか?
あるいは、似たような方法でも・・・
330nobodyさん:03/08/21 19:38 ID:DAq1ln5w
$in{'場所'} には "渋谷_AND_新宿_AND_銀座_AND_日暮里"
という文字列が入っているのですが、
これを、
$in{'場所'}[0] = "渋谷";
$in{'場所'}[1] = "新宿";
$in{'場所'}[2] = "銀座";
$in{'場所'}[3] = "日暮里";
と分割したいです。

で、
@tmp = split(/_AND_/, $in{'あいうえお'});
for ($i=0; $i<=$#tmp; $i++){
$in{'あいうえお'}[$i] = $tmp[$i];
}

とやっているのですが、@tmp を使っているあたり、いまいちスマートでないと思います。
もっとスマートな(というかストレートな?)方法はないでしょうか?
331nobodyさん:03/08/21 19:48 ID:???
>>328
http://www.din.or.jp/~ohzaki/perl.htm#JP_Z2H

>>329
require 5.008; # 要 Perl 5.8.0 or later
use utf8;
use encoding "euc-jp", Filter => 1;
binmode STDIN, ':encoding(euc-jp)';
binmode STDOUT, ':encoding(euc-jp)';

my @foo = qw(bar baz);
my @ふー = qw(ばー ばず);
print join ' ', @foo, @ふー;

>>330
$in{'場所'} = [ split '_AND_', $in{'場所'} ];
332nobodyさん:03/08/21 19:49 ID:???
>>331
s|'_AND_'|/_AND_/|;
333あぼーん:あぼーん
あぼーん
334nobodyさん:03/08/22 01:27 ID:???
Formで、
<input type="checkbox" name="hoge" value="東京">
<input type="checkbox" name="hoge" value="埼玉">
<input type="checkbox" name="hoge" value="千葉">
<input type="checkbox" name="hoge" value="栃木">
をsubmitしたときに、

クエリーストリングをデコードする関数の中では、
-------------------------------------------------------------
if ($in{$key}){
    $in{$key} .= "_AND_" . $val;
}else{
    $in{$key} = $val;
}
としてます。
-------------------------------------------------------------

すると、$in{hoge} = "東京_AND_埼玉_AND_千葉_AND_栃木"; となるので、
@array_hoge = split(/_AND_/, $in{hoge});
みたいな使い方をしてるのですが・・・

(質問1)
また、nameがhogeでなく、「ほげ」みたいな日本語のとき、
@array_ほげ となってしまい、エラーになってしまうんですよね。。。
こういう場合、なるべく近いような書き方で、どうすればいいんでしょうか?

(質問2)
あるいは、もっとスマートなやり方はないでしょうか?
みなさんは、複数選択項目のデコードは、どうしてますか?
335nobodyさん:03/08/22 01:44 ID:???
>@array_hoge = split(/_AND_/, $in{hoge});
>また、nameがhogeでなく、「ほげ」みたいな日本語のとき、
>@array_ほげ となってしまい、エラーになってしまうんですよね。。。
なんでよ?
@array_hoge = split(/_AND_/, $in{'ほげ'});
でええやん。
336nobodyさん:03/08/22 02:58 ID:???
>>334
if (ref $in{$key} eq 'ARRAY') {
  push @{$in{$key}}, $val;
}
elsif (defined $in{$key}) {
  $in{$key} = [ $in{$key}, $val ];
}
else {
  $in{$key} = $val;
}

として、@{$in{'hoge'}} をそのまま使う。
337あぼーん:あぼーん
あぼーん
338あぼーん:あぼーん
あぼーん
339あぼーん:あぼーん
あぼーん
340あぼーん:あぼーん
あぼーん
341あぼーん:あぼーん
あぼーん
342あぼーん:あぼーん
あぼーん
343あぼーん:あぼーん
あぼーん
344あぼーん:あぼーん
あぼーん
345nobodyさん:03/08/22 09:53 ID:bizbHwzJ
%hash = (
    element1 => [ 1, 2 ,3, 4, 5],
    element2 => [ 3, 4 ],
    element3 => [ 5, 6 ],
);

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

for ($i=0; $i<= (@hash{"element1"} -1) ;$i++){
    print $hash{"element1"}[$i] . "<br>";
}

てっいうスクリプトがあるんですが、

$i<= (@hash{"element1"} -1)
の部分、リファレンスに関する知識が乏しいために、
苦し紛れに書いていて、見苦しいです。
もっとスマートに($#などを使って?)書くには
どうすればいいのでしょうか?

というか、こういう場合、普通、
$i<= (@hash{"element1"} -1) の部分はどうやって書くもんなのでしょうか?
346nobodyさん:03/08/22 10:32 ID:???
>>345
それ実行したら無限<br>になったんだが…

基本的にはforeachで回すのがいいんじゃない?
自分はmapを使ってこう書いてみた。

print map { "$_<br>" } @{$hash{"element1"}};
347nobodyさん:03/08/22 10:47 ID:???
$in{'ほげ'}[0];
$in{'ほげ'}[1];
$in{'ほげ'}[2];
(中略)
$in{'ほげ'}[n];

まで配列があるのですが、このn(またはn+1)の値を取得するには、
どうすればいいのでしょうか。
348nobodyさん:03/08/22 11:00 ID:???
349nobodyさん:03/08/22 11:02 ID:???
モジュール XML::SAX はPerl5.8からしか入らないんでしょうか?

エイゴ嫌いなり・・・・・
350nobodyさん:03/08/22 11:08 ID:qLHm82v9
Perl愛好家の方々に質問ですが、怒らないで聞いて下さい!
PerlってCGI用言語ですよね?
ということは、PHPの方が良い言語なわけですよね?
それでもPerlを使用している人が多いというのは、何か特別な理由が
あるのでしょうか?
何か良い理由があるのなら私もPerlを勉強しようと思っているのですが、、、
教えて下さい。お願いします。
351nobodyさん:03/08/22 11:09 ID:???
>>345

for ($i=0; $i<= (@hash{"element1"} -1) ;$i++){
    print $hash{"element1"}[$i] . "<br>";
}

これの意味(目的)が全く分からないんだけど。。。(↑なんかめちゃくちゃだぞ、これ。)
目的は{element1}が指し示す配列を個々にデリファレンスして表示する事だろ?(知らんけど多分)

foreach($hash->{"element1"}){
print $_ . '<BR>';
}

こうじゃないのか?
実行してないから知らんけど。
条件式は
@{$hash{"element1"}}
こーでもいーよ。多分。
352nobodyさん:03/08/22 11:09 ID:???
>350 別に無理して勉強しなくていいんじゃないの。
353345:03/08/22 11:09 ID:???
>>346
>それ実行したら無限<br>になったんだが…
あ、ほんとだ、気づきませんでした。すみません。。。<br>じゃなく<hr>にしときゃよかった。

>print map { "$_<br>" } @{$hash{"element1"}};
でうまくいきました。ありがとうございます。

で、実は自分、@{$hash{"element1"} っていう配列の書き方を知らなかったもので、

>>345 を、


for ($i=0; $i<= ( @{hash{"element1"}} -1 ) ;$i++){
        print @{$hash{"element1"}}[$i] . "<hr>";
}

に書き直したんですが、やはり、無限ループになってしまいました。
これって、どういう理由というか理屈で無限ループになってしまうのでしょうか_
354nobodyさん:03/08/22 11:10 ID:???
>>350は釣りか無知か。
Perl = Practical Extraction and Report Language
どこにもCGIなんて入ってない。
355nobodyさん:03/08/22 11:12 ID:???
>PerlってCGI用言語ですよね?
全然違います。

まー、どーせあんたはCGIとしてしか使わんと思うし、
さらに他人の鯖使ってると思うので、ドコでも使えると思われるperlがいーと思われます。
環境とか調べてPHPがいーと思うならそーしてください。
356nobodyさん:03/08/22 11:14 ID:???
>>347
よく意味が分からん。
どっからどんな感じで取得したいんだよ。
357nobodyさん:03/08/22 11:16 ID:???
>>350
Perl = Practical Extraction and Report Language
PHP = Hypertext Preprocessor

PHPはWeb専用。Perlは汎用。(多少語弊有)
どっちが良い言語かは自分と相談して、良いと思った方を使え。
358nobodyさん:03/08/22 11:19 ID:qLHm82v9
だけど大抵のマニュアル見てもCGI=Perlってなってますよ!
どうしてですかね?
>>354
はただ馬鹿にしたいだけでしょう?
359nobodyさん:03/08/22 11:21 ID:???
>>358
CGIとして使われてんのがほとんどperlって話しだろ。
所でスレ違いだから他当たれ。
あとヤツ当りはせんでいーぞ。
360nobodyさん:03/08/22 11:23 ID:qLHm82v9
>>357
なるほど!!Perlは汎用なんですか。
じゃあやっぱりCGI=Perlっておかしくないですか?
もしかしてマニュアルは嘘つき?
361nobodyさん:03/08/22 11:25 ID:???
>358
どうして言われても・・・・・
そのマニュアル(何のマニュアルか知らんが)の筆者じゃないからねぇ。
わからんねぇ。
362nobodyさん:03/08/22 11:27 ID:???
>>358
何言ってんのか良く分からんのだけどPerlのマニュアル(?)はこれだよ。
http://www.perldoc.com/perl5.6/pod/perl.html
あんたの読んでんのは解説本とかじゃないのか
363nobodyさん:03/08/22 11:32 ID:???
>>360
> じゃあやっぱりCGI=Perlっておかしくないですか?
ちょっとおかしい。正しくは「CGI ⇒ Perl」。
CGIと言えばほとんどPerlだけど、
Perlと言えばフィルタとしてログの解析や集計やらに使うことが多い。
ビルドするのにPerlが必要なソフトウェアもあるしな。
364347:03/08/22 11:34 ID:???
>>348
すいません、全部読んだのですが、個々の文章としてはなんとなく理解できるのですが、
全体として理解できていないため、
結局、>>347 の答えがわかりませんでした。
答あるいはヒントでもいいので、おしえてください・・・
365347:03/08/22 11:36 ID:???
>>356

とあるメールフォームが、
<input type="checkbox" name="ほげ" value="田中">
<input type="checkbox" name="ほげ" value="高橋">
<input type="checkbox" name="ほげ" value="近藤">
のようになっていて、それをデコードする際、
「aaa=bbb」形式を「$key と $val」にした後、
#############################################################
if ($in{$key}){$in{$key} .= "_AND_" . $val;
}else{
    $in{$key} = $val;
}
#この時点では、 $in{'ほげ'} = "田中_AND_高橋_AND_近藤" の状態

としてから、
foreach $key (keys %in) {
    if ($in{$key} =~ m/_AND_/){
        @tmp = split(/_AND_/, $in{$key});
        for ($i=0; $i<=$#tmp; $i++){
            $in{$key}[$i] = $tmp[$i];
        }
    }
}
#この時点では、$in{ほげ}[0] = "田中";$in{ほげ}[1] = "高橋";$in{ほげ}[2] = "近藤"; の状態
#############################################################
としています。

で、メールフォームの確認画面で
「田中/高橋/近藤」のように表示させたいため、
for文を書くために、 >>347 の質問をさせていただきました。わかりずらくて、すみません。
366nobodyさん:03/08/22 11:52 ID:???
なんかややごーいんな処理だなぁ。
まぁ、それは良いとして。

よーするに
$in{'ほげ'}
の値を全部出力したいのか?

それならたぶん
>>351周辺と同じだ。

知らなかったらあれだから言っとくけど、
それ、リファレンスだぞ。
いちおー省略のないちゃんとした書式使って、あと無駄な処理はぜんぶ省くよーに。
367nobodyさん:03/08/22 12:00 ID:???
>>347
代入したときの$iを
$number = $i;
とかして記録しとけば
368nobodyさん:03/08/22 12:04 ID:???
>>349
英語が嫌い? じゃあ (require|use) 5.00x; されてないか
ソース辿って調べたら? Perl (これも*言語*だよね) なら
いいんでしょ? :p

>>353
まぁ一文字抜けてるだけの話なのだが。

1. @{hash{"element1"}} は @hash{"element1"} と等価
2. @hash{"element1"} は 1 要素のハッシュのスライス ≒ $hash{"element1"}
3. $hash{"element1"} はリストリファレンスで、そのまま評価すると
  リファレンスの型とアドレスを返す => 'ARRAY(0x10c1350)' 等の文字列
4. この文字列を - 1 と数値コンテキストで評価しているので、
  @{hash{"element1"}} - 1 == 0x10c1350 - 1 == 17568591
5. 無限ではなく 17,568,591 回ループする

という事で >>348 読んで基本から勉強し直せ。
369nobodyさん:03/08/22 12:24 ID:???
>>365
> if ($in{$key}){$in{$key} .= "_AND_" . $val;
> }else{
>     $in{$key} = $val;
> }
>>336 にして

> foreach $key (keys %in) {
>     if ($in{$key} =~ m/_AND_/){
>         @tmp = split(/_AND_/, $in{$key});
>         for ($i=0; $i<=$#tmp; $i++){
>             $in{$key}[$i] = $tmp[$i];
>         }
>     }
> }
を省いて

> メールフォームの確認画面で
> 「田中/高橋/近藤」のように表示させたいため、

print join '/', @{$in{'ほげ'}};

配列の要素数なぞ全く必要無いのだが。
370nobodyさん:03/08/22 12:42 ID:6rNcNFDD
>>360
perlはCGI用の言語ではなくて、
こんぴーたのログや各種統計情報を効率的に解析する
ために作られたもの。
当然ログなどはテキスト情報になるので、強力なテキスト
処理能力が組み込まれた。
そのテキスト処理能力がHTMLを書き出すCGIにうってつけだった、
というのと、
ほぼすべてのUNIXに標準で入っている(Perlを使わないとシステムで
処理できないものが多い)ため、
CGIに多用されるようになった。
そして今やしろーとたちの間ではCGI用としてだけperlがやたら有名に
なってしまい、そのインチキ解説本の著者のように勘違いを
する輩が増えた、ということだ。
PHPはもう完全にCGIに特化した言語。
Perlはシステム管理上も必要になる局面が多いため、
管理者としてはPHPではなくPerlを身につける必要がある。
(サーバ管理者として飯食ってるやつでPerlがわからないやつはいない)
371nobodyさん:03/08/22 13:22 ID:???
perlでシステム管理は語弊があるかな。
基本はシェルスクリプト。
暑いので>>370にやつあたりしてみますた(・∀・)!!
372nobodyさん:03/08/22 13:42 ID:6rNcNFDD
>>371
突っ込みthx。
ただ俺が言ったことは必ずしも的外れではないと思うぞ♪
373nobodyさん:03/08/22 13:51 ID:???
>>370
釣り用のテンプレに最適だなこれ。

> ほぼすべてのUNIXに標準で入っている

ほぼ全てって・・・(w。ここまで豪快に無知だとかえって清清しいな。
ちょっとお前、UNIX板に言って同じ事言って来い。

> (Perlを使わないとシステムで処理できないものが多い)

例えば何だ?無くてもシステムは動かせるぞ。

> Perlはシステム管理上も必要になる局面が多いため、

まぁあれば便利程度だな。無くても平気じゃないとシステム管理者
は勤まらん。
Perlに頼ると、/standしかマウントできなくなった時にパニックに
なるだろうし、そんなシステム管理者はいらん。

あと全体を通して、CGIとCGIスクリプトを混同してますね。

>>372
いや、結構的外れだと思う。
374nobodyさん:03/08/22 14:42 ID:yhl2dNIV
$aaa = 'AAA<a href="http://www.co.jp/">CCC</a><a href="http://aaa.co.jp/">BBB</a>';

これのリンクタグを除去したいんですけど、どういう正規表現を書いたらいいんでしょうか。
$aaa =~ s/<a href=\"(.)\">//g;
これではダメでした。
375nobodyさん:03/08/22 14:48 ID:yhl2dNIV
$aaa =~ s/<\/a>//g;
これで閉じタグは除去できました。
376nobodyさん:03/08/22 14:49 ID:yhl2dNIV
ちなみに、リンクは
<a href="../aiueo/aiuoe.html">
こういうのもあります。
377nobodyさん:03/08/22 14:55 ID:???
ちょっと関係ないけど>>370は/sbinを su bin だと思ってるに一票
378nobodyさん:03/08/22 15:04 ID:???
379あぼーん:03/08/22 15:27 ID:???
あぼーん
380nobodyさん:03/08/22 16:24 ID:???
ちょっと関係ないけど>>377はsuをSuperUserの略だと思ってるに一票
381nobodyさん:03/08/22 16:35 ID:???
ちょっと関係ないけど>>380はsuをSwitchUserの略だと思ってるに一票
382nobodyさん:03/08/22 17:06 ID:???
ちょっと関係ないけど>>381はsuをSukhoiの略だと思ってるに一票
383nobodyさん:03/08/22 17:47 ID:???
>>373は重要なところを突っ込み忘れてるな。

> PHPはもう完全にCGIに特化した言語。
ほよーん?
384nobodyさん:03/08/22 23:36 ID:???
アクセス解析をSSIのIncludeで全てのページに埋め込んでいるのですが、
最近になって各文書毎にわけて取りたくなってきました。
#今までは取りあえずリファ取るだけで良いと思っていたので全文書で共通にしてた

と言うわけで埋め込み元の文書のファイルパスがわかれば良いと思ったのですが、
方法が見付かりません。
どのようにすれば良いのでしょうか。

#include virtual="/hoge/log.cgi?file=foo/bar.html"
のようにパスに適当なクエリつければ出来ると思ったのですが
全ての文書を書き直すのが面倒で…。
385nobodyさん:03/08/23 00:06 ID:???
>>384
それのどこがperlコーディングの質問なんだ?
386nobodyさん:03/08/23 00:37 ID:???
Perlでスクリプト書いてるからこのスレが良いと思ったのです…
387nobodyさん:03/08/23 00:44 ID:???
それのどこがperl "コーディング" の質問なんだ?
388nobodyさん:03/08/23 01:00 ID:???
うーん、スクリプト側で何とかできるのかと思ったのです。
できないようなら諦めてクエリくっつける方法でやってみます…。
389nobodyさん:03/08/23 01:10 ID:???
基本的なことを理解しないまま、なにかと手をつけてしまう人が最近多いみたいだね…。
390nobodyさん:03/08/23 01:20 ID:???
夏休みとか長期休暇になると、上辺だけ学ぼうとする奴が出るからな。
上辺だけでも作れてしまうのがPerlのいいところでもあるが。
391nobodyさん:03/08/23 01:46 ID:???
>>384
$ENV{'REQUEST_URI'}
$ENV{'DOCUMENT_URI'}
$ENV{'DOCUMENT_NAME'}
辺りで取れない?

環境変数を吐くスクリプトをリンクしてみて、よさげな環境変数をあさってみたら。
392あぼーん:あぼーん
あぼーん
393あぼーん:あぼーん
あぼーん
394あぼーん:あぼーん
あぼーん
395あぼーん:あぼーん
あぼーん
396あぼーん:あぼーん
あぼーん
397あぼーん:あぼーん
あぼーん
398あぼーん:あぼーん
あぼーん
399あぼーん:あぼーん
あぼーん
400nobodyさん:03/08/23 11:21 ID:???
削除依頼しとくわ
401nobodyさん:03/08/23 12:56 ID:???
>>374
$aaa =~ s/(<a .*?>|<\/a>)//g;
402nobodyさん:03/08/23 13:10 ID:???
>>400 黙ってやらないと効果激減
403nobodyさん:03/08/23 21:14 ID:eQY6UqcN
また再取得させる気か
404nobodyさん:03/08/23 21:17 ID:???
>>403
削除そのものに文句があるなら削除議論逝ってこい。
405nobodyさん:03/08/23 22:34 ID:???
>>403
再取得がイヤなら自動再取得するようにプログラム汁。
406nobodyさん:03/08/23 22:49 ID:???
>>400
コピペ荒らしで報告してくれ。
407nobodyさん:03/08/24 03:54 ID:???
すみませんです。
比較的頻繁にファイルへ追加書込みしたいのですが、、、
一番よい方法ってありますか?

open( LOG, ">>$file");
flock( LOG, 2 );
print LOG $data;
flock( LOG, 8 );
close( LOG );

これじゃ、ダメですかね?
408nobodyさん:03/08/24 04:26 ID:???
>>407
>flock( LOG, 8 );
これはいらない
409nobodyさん:03/08/24 04:36 ID:???
すまん。407じゃないんだが、flock( LOG, 8 ); はいらんの?
今まで慣用句的に使ってきたものとしては気になるんだが。
410nobodyさん:03/08/24 08:32 ID:???
ロック解除はcloseにさせよう。
411nobodyさん:03/08/24 12:38 ID:???
>>410
407じゃないんだけど、closeで解除させるのと、flockで解除させるのって変わりあるんですか?
どっちでもいいとかじゃなくて。
412nobodyさん:03/08/24 13:25 ID:???
413nobodyさん:03/08/24 13:57 ID:???
>>411
5.004以降はロック・アンロックの前に自動的にフラッシュするので、どっちでもいい。

どっちでもいいものを保守するのって結構面倒。
所々忘れてたりするし。
# ひょっとしたら5.004より前のバージョンで実行するかもしれないしね。
414nobodyさん:03/08/25 02:15 ID:???
 
415nobodyさん:03/08/25 05:52 ID:???
文字列置換なんだが、

my $a = 'abcdefg';
$a =~ s/abc/ABC/;

こうすれば $a は ABCedfg となるが、こうじゃなくて、
元の文字列は変更しないでそのままにして、
置換結果だけを新しい変数に入れる場合はどうしたらよい?たとえば

my $a = 'abcdefg';
my $b = $a =~ s/abc/ABC/;

としても、$b には 1 としか入らないので困った。もっとも

my $b = $a;
$b =~ s/abc/ABC/;

とすればいいだけの話だが、これを1行で書きたい。
416nobodyさん:03/08/25 07:37 ID:???
my $b = $a; $b =~ s/abc/ABC/;
417nobodyさん:03/08/25 09:15 ID:???
(my $b = $a) =~ s/.../.../;

まぁ、諦めるしかないってこった。
418nobodyさん:03/08/25 11:19 ID:???
419nobodyさん:03/08/25 11:21 ID:???
なぜ1行
にこだわる
420nobodyさん:03/08/25 11:32 ID:???
>>415-419
何年か前にも見た光景だ。
デジャヴか?
421nobodyさん:03/08/25 11:47 ID:???
up/aec9215fb4f8.cgi
http://up.isp.2ch.net/upload/c=03okari/index.cgi

KENTWEBさんの物をベースにBBSを作ってるんですが、
タグ使用できるように、数文付け足した直後書き込みが出来なくなりました。
自分でも、本と見比べるなどして、問題点を探したんですが、分かりませんでした。
どこが悪いんでしょうか?
422nobodyさん:03/08/25 12:40 ID:???
>>421
スクリプトの改造ネタはこちらでどうぞ

【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
423421:03/08/25 12:52 ID:???
>>422
すれ違いスマソ。
424nobodyさん:03/08/25 13:30 ID:???
if処理で
ある 配列 @a = (1000個くらい)
を 最初から読み込んでいって
配列@bにその値が含まれている場合
ある処理をしたいと思ったんですが

@a = (2,5,6,8,9,4,2,6,5,4,6,3,5,2,4,5);
@b = (1,2,3,4,5,6,7,8,9,10,11,12,13,14);

foreach $a (@a){
 foreach $b (@b){
  if($a == $b){ ここに処理; last;}
 }
}

というのを考えたんですけど
二つ配列が共に1000個近くあると
Maxで1000*1000近くループしそうなのですが

もっとスマートな方法ってないでしょうか?
または 変数がある配列に含まれているか
真偽を返す関数などはありませんでしょうか?
425nobodyさん:03/08/25 14:29 ID:???
use strict; ってチェックの時だけやって
普段は外すっていうのは駄目ですか?

単に宣言なしの変数チェックと言う認識しか無いのですが
常にuseしておいた方が良いのならそうしようかと…。
426nobodyさん:03/08/25 15:00 ID:???
>>425
Larry Wallは常にuseしろと仰ってますね。

俺も常にuseしてる。というか、付けると便利なものをなんでわざわざ外そうと
思うのか分からない。
427nobodyさん:03/08/25 15:02 ID:???
>>424
メモリは食うが
my %b;
@b{@b} = (1) x @b;
for my $a (@a) {
  $b{$a} or next;
  ...
}

>>425
use strict; したままだと困る事があるなら外せばいい。
俺は部分的に no strict ...; する方を選ぶが。
428349:03/08/25 15:07 ID:???
どうも。5.6.1にXML::ParseおよびXML::SAX入れることができますた。
邪魔してたのはcc on SunOSですた。
429nobodyさん:03/08/25 15:18 ID:???
>>426
リリース後はいらないと思うが。
430424:03/08/25 15:27 ID:???
>>427
漏れが書いたのと
どっちのほうが効率的でしょうか?
431nobodyさん:03/08/25 15:28 ID:???
ケケケ
432nobodyさん:03/08/25 15:30 ID:???
Larryの言う「常に」とはどんなスクリプトを書くときでもという意味では。
433nobodyさん:03/08/25 15:40 ID:???
>426
>427

useすると微妙に重くなるのかな?という気がしたので…。
比較的リクエストの多いサイトのスクリプトなので
ほんの少しでも負荷を減らせるのかなと。
434nobodyさん:03/08/25 15:42 ID:???
>>429>>432
そりゃそうかも。

でも俺が仕事で書くような場合、使い捨てか、頻繁にメンテするような場合が
多いので付けっぱなしだな。外してもいいけど、外す理由が特に見当たらないって
ことです。

>>433
実験してみたけど、目に見える負荷軽減にはならないみたい。
435nobodyさん:03/08/25 16:01 ID:???
>>430
そんなあなたにはBenchmarkモジュールがオススメ!

use Benchmark qw(:all);

@a = (2,5,6,8,9,4,2,6,5,4,6,3,5,2,4,5);
@b = (1,2,3,4,5,6,7,8,9,10,11,12,13,14);

cmpthese(10000, {
'424' => sub {
my $n = 0;
foreach $a (@a){
foreach $b (@b){
if($a == $b){ $n++; last;}
}
}
},
'427' => sub {
my $n = 0;
my %b;
@b{@b} = (1)x@b;
for my $a (@a) {
$b{$a} or next;
$n++;
}
} ,
});

結果は動かしてみてのお楽しみということで。
436435:03/08/25 16:02 ID:???
スマン、全角SPに変換前のを出しちまった。
437nobodyさん:03/08/25 16:23 ID:???
>>435
補足。同じベンチ取るなら実状に合った値でやらないと
意味のある数字が出ないよ。

この例だと @a の値は全て @b に存在するから条件文は
常に真になるし、@b の要素数が実際より極端に少ないと、
速度差が他の処理にかかる時間に埋もれてしまう可能性
がある。

あと if (EXPR) BLOCK より or の方が速いので、後者の
方が本当に測りたい処理内容と関係ない部分で有利になる。
比較したい部分以外のコードは極力統一させよう。
438nobodyさん:03/08/25 16:28 ID:???
「条件文は常に真」ってのは嘘だね。ゴメン。
@a の要素一つを @b の全要素と比較した時、遅かれ早かれ
真になるって意味で。
439nobodyさん:03/08/25 17:43 ID:???
>>435はもとの質問者の例に沿っての内容だから
質問者は自分とこの実情に合わせてベンチ取るんじゃないの?

結局、数が多いならソートしてバイナリサーチのが速かったりするな
440nobodyさん:03/08/25 17:57 ID:xdYfVnfd
あの、、
POST形式のデータは、どこにあるのですか?
441nobodyさん:03/08/25 18:00 ID:???
>>440
標準入力だよ
442nobodyさん:03/08/25 18:23 ID:???
>434
ふーむ、そこまで軽くはならない訳ですね。
なら指定しておいても良いかな…。
443nobodyさん:03/08/25 18:26 ID:???
>>440
$ENV{'CONTENT_LENGTH'}
444nobodyさん:03/08/25 18:30 ID:???
>>443
センセー! 長さしかわかりません
445nobodyさん:03/08/25 18:38 ID:???
>>444
その長さぶん標準入力から読み込むんだってば。
446nobodyさん:03/08/25 18:41 ID:???
>>440
use POSIX;
POSIX::getenv("CONTENT_LENGTH");
447nobodyさん:03/08/25 20:28 ID:ph7+YYot
MXで入手?したような、写真をキャプチャーした画像を、
ヤフオクで販売している鹿馬がるよ、、、
http://user.auctions.yahoo.co.jp/jp/user/ken10332?
しかも説明欄にこんな書き込みが、、、
↓          ↓
★ヤフー管理者様へお願い★ 
当商品はヤフーガイドラインに違反していない正規品ですので削除しないようおねがいします

↑こんな写真集を収録したCD−ROMはないのバレバレなのに、、
448nobodyさん:03/08/25 21:45 ID:???
read(STDIN, $post, $ENV{'CONTENT_LENGTH'});
449nobodyさん:03/08/25 21:54 ID:???
>>448
これって、とんでもなく巨大なデータを渡されても大丈夫なんだろうか?
450nobodyさん:03/08/25 22:01 ID:???
>>449
大丈夫じゃないだろうから、事前にCONTENT_LENGTHwpチェックしないといけないんじゃねぇ?
451nobodyさん:03/08/25 22:11 ID:???
ウチは>>448のやり方しか知らんかった…
サイズチェックとかある程度のサニタイズとかはやってるけど。

もっとスマートな方法は無いっすかね。
452nobodyさん:03/08/25 22:15 ID:???
CGI.pmを使えば、スクリプトはスマートになるよ。
453nobodyさん:03/08/25 22:26 ID:???
多少短く、見やすくなるとしても
スマートにはならんと思う。
454nobodyさん:03/08/25 23:07 ID:???
$CGI::POST_MAX
455nobodyさん:03/08/25 23:40 ID:FunMWm7F
ネットサーフィンをしていたら、parlという言語があるのを知ったのですが、
これはperlと関係のある言語なのでしょうか?
456nobodyさん:03/08/25 23:53 ID:???
>>427
existsを使えば、
@b{@b} = ();
で行けるよ。
457nobodyさん:03/08/26 00:07 ID:???
>>455
まずあなたがparlという言語を知ったきっかけのページを教えてください。
458nobodyさん:03/08/26 00:14 ID:ccW2nPTT
ここです。>>457
ttp://www.doinaka.net/homesaba1.php

perlと併記してあるのでタイプミスというわけでもなさそうだし、
けっこうスキルの高そうな人のページなので。
459nobodyさん:03/08/26 00:24 ID:???
>『Parl』を動作させる為に『Active Perl』をインストール

どう読んだらスキル高そうだと思えるのだ?
460nobodyさん:03/08/26 00:58 ID:???
jcode.plをうまく使って、ひらがなを半角カナに変換する方法は
ないものでしょうか。
461nobodyさん:03/08/26 01:05 ID:???
>>451
POSTで無限に長いデータを送ってやると、Content-Type: で指定した値に関わらず全部そのまま
CGIに垂れ流すWebサーバーが存在するから、CONTENT_LENGTHをチェックしても、

$a = <STDIN>;

とかやってると、Webサーバーによってはメモリ食いつぶすまで読み込ませることが可能。
だから、動作させるWebサーバーが不定の場合は>>448のやりかたは必須。
462nobodyさん:03/08/26 01:10 ID:???
463nobodyさん:03/08/26 01:15 ID:???
>>460
trを使ってひらがなをカタカナに変えて、z2hで半角にすればいいだろ。
あとは自分で考えてくれ。
464nobodyさん:03/08/26 02:01 ID:???
英数字判別の正規表現のように、文字列がひらがな・カタカナで
あるという判別を行うことは可能でしょうか?
465nobodyさん:03/08/26 02:20 ID:???
466nobodyさん:03/08/26 02:26 ID:???
>>463
全角カタカナも半角になる罠。
それでいいのなら問題ないのだけど。
467nobodyさん:03/08/26 02:43 ID:???
便乗質問

歌代さんがromkan.plというのを作ってらっしゃいますが、
これの逆のものってないですかね。

かなを英字ローマ字に変換するようなもの。
かなり無理があるとは思いますが
468nobodyさん:03/08/26 02:48 ID:???
同じことだろ
469nobodyさん:03/08/26 02:51 ID:???
>>465
ありがとうございました
470nobodyさん:03/08/26 02:52 ID:???
>>467
s/あ/a/g;
s/い/i/g;
  .
  .
  .
って書いてけば?
471nobodyさん:03/08/26 03:28 ID:???
>>470
まあ促音や拗音の処理とかあるから変換する順番が重要になる上に
膨大な数にはなるけどできんことはないなあw
472nobodyさん:03/08/26 04:52 ID:???
>>471
かなだけだったら、どうにかなるんじゃないですかねぇ?
473nobodyさん:03/08/26 06:03 ID:???
仮名だけでつかいものになるんだろうか。
474nobodyさん:03/08/26 06:12 ID:???
>>470
テーブル作ればなんてことないでしょ。
テーブル本体もPerlにさっと作らせてヘボン式とか例外的な綴りを
手で追加してやるだけでよさそうだし。
475nobodyさん:03/08/26 11:44 ID:???
藻前らどこまでがネタですか。
http://kakasi.namazu.org/
476nobodyさん:03/08/26 11:49 ID:9/vV6DaN
www.foo.ne.jp/hoge/hage.cgi
で、
require 'mimew.pl';  #(http://www.cc.rim.or.jp/~ikuta/mime_pls/ にある有名なやつ)
して、
#メールのサブジェクトを、MIME-Base64化
$Subject = &mimeencode($MySubject);

としようとすると、

[Tue Aug 26 11:34:47 2003] [error] Undefined subroutine &Apache::ROOTwww_2efoo_2ene_2ejp::hoge::hage2ecgi::mimeencode called at /usr/local/foo/htdocs/hoge/hage.cgi line 179.

と言われてしまいます。
mimeencode.plは、cgiを同じディレクトリに入ってます。

なぜこのようなエラーがでてしまうのでしょうか?
「Undefined subroutine &mail::mimeencode ...」みたいなエラーなら見たことあるのですが・・・
このエラーメッセージの意味がわかりません。。。
477nobodyさん:03/08/26 12:10 ID:???
mod_perlなんでしょ、それ以外は普段と同じ
478nobodyさん:03/08/26 19:54 ID:???
>>467
再発明かもしれないけど、自分で書いちゃえ。
ネット上には、ローマ字カナ変換のページが結構あるし。
(変換辞書ファイルがあったから、ハッシュテーブル使って書いたら、案外簡単に書けた。)

>>476
*mimeencode = \&MIME::mimeencode;

ここ参照
http://perl.apache.org/docs/1.0/guide/porting.html
479nobodyさん:03/08/27 00:59 ID:???
flockなんですが、

1. ファイルを読み込んで配列に入れる
2. 閉じる
3. 処理する
4. 先程と同じファイルをもう一度読み込んで処理後の配列で上書きする

と言う場合何処で掛ければ良いんでしょうか。
今は4のところだけでロックしてますが
2〜3の間にファイルが更新されちゃうと駄目ですよねこれって。
480nobodyさん:03/08/27 01:15 ID:???
とか書いて思ったけどPerlコーディング自体とはあまり関係無いっすね…スイマセン。
481nobodyさん:03/08/27 01:52 ID:???
>>480
【Perl】ファイルロック(排他処理)について語ろう
http://pc2.2ch.net/test/read.cgi/php/1024795138/
482nobodyさん:03/08/27 19:13 ID:hDW5O06D
プロンプト[ Windowsです(^^;) ]からの入力に応じて実行する内容を分岐させたいのですが。

たとえば「1」と入力してリターンすると &one を、
「2」と入力してリターンすると &two を、
というようなあんばいです。
483nobodyさん:03/08/27 19:57 ID:???
>させたいのですが。

で、お前は何をやったのかと、問い詰める。
484nobodyさん:03/08/27 19:59 ID:???
>>483
ハァ?(^^;)
485nobodyさん:03/08/27 20:18 ID:???
486nobodyさん:03/08/27 20:22 ID:???
>>484
もうすぐ夏も終わりだなあ。
487482:03/08/27 20:44 ID:hDW5O06D
プロンプトから入力されたデータがどこに入ってるのかわかりません。
入力を待つ→受け取って実行するっていうルーチンをどう書けばいいのか
さっぱりわかりませんのでまだ何も試せません。
488あぼーん:あぼーん
あぼーん
489nobodyさん:03/08/27 20:47 ID:???
>487
本を一冊買って読め。
490482:03/08/27 20:50 ID:hDW5O06D
http://www.rfs.jp/sitebuilder/perl/
ここのサイトは一通り読んだのですが、書いてありませんでした。
491nobodyさん:03/08/27 22:03 ID:???
<>
492nobodyさん:03/08/27 22:19 ID:???
>>490
本を買うのが嫌なら図書館でも逝って借りてくることをお勧めする。
Web上の解説等だけで勉強するのははっきり言って無理。
詳しく解説していったらそれこそ本が出来る罠
493nobodyさん:03/08/27 22:21 ID:???
>>490
じゃあ書いてるサイト読めよ。
http://www.kent-web.com/perl/chap6.html
494nobodyさん:03/08/27 22:28 ID:???
解決しますた。
495あぼーん:あぼーん
あぼーん
496あぼーん:あぼーん
あぼーん
497あぼーん:あぼーん
あぼーん
498あぼーん:あぼーん
あぼーん
499あぼーん:あぼーん
あぼーん
500あぼーん:あぼーん
あぼーん
501あぼーん:あぼーん
あぼーん
502あぼーん:あぼーん
あぼーん
503nobodyさん:03/08/28 08:53 ID:JP6BwLoY
新しいマシンにRedHat9入れたら、Perl5.8.0が入ってきました。
ところが、5.8からNDBM_Fileがないので、前に作っていたデータベースが
使えない。5.6.1のを持ってきたけど(NDBM_File.pm, NDBM_File.bs,
NDBM_File.so)、エラー出る。requireしてるXLoaderとかの変更があるみたい。
元のマシンでNDBMからSDBMに変換して新マシンにコピーして使うか、
新マシンに5.6.1入れるか、どっちがいいと思う?
いろいろググったが、情報ないんで聞かせてくらはい。

504nobodyさん:03/08/28 09:23 ID:???
いらっしゃーい、Perlの[[[コーディング]]]で困ってる人のスレです。
505nobodyさん:03/08/28 09:25 ID:???
運用はスレ違い
506nobodyさん:03/08/28 09:30 ID:???
>>504, 505
Part26までは、「コーディング」なんて制限はスレタイにもなかった。
これを付けた香具師もwebプログラミングと区別したかったからに
過ぎない。とにかく、もういい。お前らには、聞かない。

507nobodyさん:03/08/28 09:36 ID:???
そりゃよかった。二度と来るなよ。
508nobodyさん:03/08/28 10:14 ID:???
>>503
5.8.0のディストリビューションには入っているようだが…何故入ってないんだ?
Perlのソースを落としてきて、NDBM_Fileだけをビルド・インストールできるんじゃないかな。
データの変換の方が面倒がなくていいかもしれないが。
509nobodyさん:03/08/28 10:35 ID:???
>5.8からNDBM_Fileがない
こう決め付けてるから対処がおかしくなるんだな
ソースから入れたPerl5.8.0にはNDBM_Fileあったけど
たしかにRedHatに最初から入ってるやつには無いね。なんでかしらんけど
510506:03/08/28 10:58 ID:TK42EOIB
良識ある>>508, >>509さん、ありがd。
そですね、Perl5.8.0のソースからNDBM_Fileだけ抜き出して
buildできるかやってみまつ。
低能無恥の>>507さん、お前こそ消えて出てくんな


511nobodyさん:03/08/28 11:21 ID:???
>>510
わからんなあ。
507が「低脳無恥」(これ、無知の間違いじゃない?)だと言う証拠はどこにもないんだが。
507がどれくらいの能力を持っているのか、本当に知っているのか?
これこそ勝手に自分の脳内妄想を垂れ流してるだけじゃないか?
ついでに言えば、508、509を「良識がある」としているが、これまた脳内妄想でしかない。
Part26までがどうだったかは知らないが、現在ではコーディングに限定した話題のスレになっているんだ。
ガイドラインに沿わない質問をした>>506が変であり、かつそれに対して回答を示した508、509もおかしい。
これは、スレの主題をぼやけさせる一因であり、本当に良識があるなら、厳に慎むべき行為だろう。

スレの状況を読まず、自分に都合の悪い回答をした507をこきおろし、
自分に都合のいい回答をした508、509をあがめたてる、ただの自己中に見えるんだが、
そこんところ自分を客観的に見てどう思うかね、>>510よ。
512nobodyさん:03/08/28 11:34 ID:???
>>506
どのスレと勘違いしたの?
このスレはPart7の時から>>1に「コーディング」のためのスレとかかれているけど
http://pc.2ch.net/php/kako/1000/10002/1000267444.html
513506:03/08/28 12:16 ID:TK42EOIB
>>511,512
ご苦労様です。
514nobodyさん:03/08/28 12:23 ID:???
一言余計なんだよ。それがなきゃ静かに終わったかもしれんのに

正規のスレに同じ事かかれたらうざいんでとりあえずここで
話し進めただけだし
515nobodyさん:03/08/28 12:24 ID:???
なんでそんなにこだわるかなあ
そこまでこだわるなら夢イタに行くべきだよ。
516nobodyさん:03/08/28 12:30 ID:???
>>515
CGIの質問をして追い出された人が怒るかもしれないから。
517nobodyさん:03/08/28 12:41 ID:???
>>516
CGI/perlな人がけっこういるわけで、WebProgにあればCGI/perlな人が
寄ってくるのはいたしかたないし、追い出す方がおかしい、と思うけど。

ムイタならここよりCGI/perlな人は少ないわけで、
ここの住人も幸せにコーディング語れるんじゃないの?
518nobodyさん:03/08/28 15:54 ID:???
ちょいと質問です。

perlのCGIプログラムをインストールしようとしているのですが、それがCGI.pmを利用しています。
そのバージョンが指定されていて、/usr/lib/perl5/5.00503/ にあるもののバージョンが
古いです。

ローカルにバージョンの新しいCGI.pmをインストールして、そっちを利用させるようにしたい
のですが、どこをいじればいいのでしょうか?

require './CGI.pm';

をしてみましたが、結局別のプログラムなどが読んでいるところでエラーになります。

use ./CGI; なども当然ダメです。

よろしくお願いします。
519nobodyさん:03/08/28 16:14 ID:???
>>518
そのCGIプログラムと同じデレクトリにCGI.pmを置いても?
520nobodyさん:03/08/28 16:16 ID:???
>>519
ダメですねぇ。
できるはずなんですか?requireでなくてできるはずなら、色々調べてみます。
521nobodyさん:03/08/28 16:21 ID:???
>>520
/home/hoge/perl-lib とかにCGI.pm置いて

use lib '/home/hoge/perl-lib';
use CGI

するとかして使ってるけど。;
522nobodyさん:03/08/28 16:27 ID:???
ローカルに、じゃなくてユーザーデレクトリに、だよね。
ローカルに置いたモジュールをサーバから使わせようとしてるわけじゃないよね。
523nobodyさん:03/08/28 16:58 ID:???
>>522
そうです。ユーザディレクトリにです。
>>521
まだ試していませんが、これで解決できそうです。
ありがとうございました。
524nobodyさん:03/08/28 17:02 ID:???
Perlでファイルハンドルを変数に入れて、メソッドに渡すことがしたいのですが、
どうやればいいのでしょうか?

open($FILE,"ABC.def");
test($FILE);
close($FILE);

sub test {
 my $FILE = @_;
 my $line = <$FILE>; #一行読み込む
 printf("%s\n",$line); #何も表示されない(undef)
}

こんな感じでやりたいのですが...
525nobodyさん:03/08/28 17:11 ID:???
open(FILE,"ABC.def");
$file = FILE;

じゃあかんの?
526nobodyさん:03/08/28 17:17 ID:???
>>525
駄目でした。。。
527nobodyさん:03/08/28 17:21 ID:???
むしろ、IO::File推奨。
528nobodyさん:03/08/28 17:35 ID:???
FileHandle.pmを使ってみたのですが、
何故か
$in = new FileHandle("ぼくのにっきちょう.nick","r");
$line = <$in>;
printf("%s\n",$line);
は出来ても、この$inを
bob($in);
sub bob {
 my $in = @_;
 my $line = <$in>;
 printf("%s\n",$line);
}
とやったら駄目みたいです
($inの中の値はどちらも同じだった(アドレスも))
529nobodyさん:03/08/28 17:39 ID:???
っとおもったらなんかできちゃいましたみなさんどうもありがとうございました!
530nobodyさん:03/08/28 17:57 ID:???
>>506
CGIに依存しないPerlの話題一般/Part2
http://pc2.2ch.net/test/read.cgi/php/1030548610/
531nobodyさん:03/08/28 18:05 ID:???
ファイルハンドルを変数に入れる場合は型グロブを使う

open(FILE,"ABC.def");
$file = *FILE;
test($file);
close(FILE);

sub test {
my $file = @_[0];
my $line = <$file>;
print $line;
}
532nobodyさん:03/08/28 18:14 ID:???
>>531
ウホッ!本当だ
サンクス!!!
533nobodyさん:03/08/28 19:50 ID:???
>>518
use FindBin;
use lib $FindBin::Bin;
use my_CGI; # 標準ライブラリをリンクしないようにリネーム(CGI.pm -> my_CGI.pm)

http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlfaq8.html#How_do_I_add_the_directory_my_pr
クックブック 12.7
534nobodyさん:03/08/28 19:51 ID:wikcpHV0
掲示板なんかで正規表現で自動リンクをしちゃってるわけですが、
リフェラでやってくる人がいるので、対策が必要です

リンク専用のCGIと受け渡しファイルを置いて、壁を作ろうと
思うのですが
掲示板のCGI → リンクをファイルに記録 → 専用CGIで読み出し飛ぶ

これで大丈夫ですか
もっといい手がありますか?
535nobodyさん:03/08/28 19:59 ID:???
536nobodyさん:03/08/28 20:00 ID:???
リフェラ
リフェラ
リフェラ
リフェラ
リフェラ
リフェラ
リフェラ
リフェラ
リフェラ
537nobodyさん:03/08/28 20:22 ID:???
おふぇら
おふぇら
おふぇら
おふぇら
538nobodyさん:03/08/28 20:59 ID:???
ime.nu挟めば簡単。
539あぼーん:あぼーん
あぼーん
540あぼーん:あぼーん
あぼーん
541あぼーん:あぼーん
あぼーん
542あぼーん:あぼーん
あぼーん
543あぼーん:あぼーん
あぼーん
544あぼーん:あぼーん
あぼーん
545あぼーん:あぼーん
あぼーん
546nobodyさん:03/08/29 14:40 ID:???
ime.nuは広告がアレな感じ。
547nobodyさん:03/08/29 15:27 ID:???
ime.nuの代わりにGoogleの I'm Feeling Lucky で飛ぶのはどうよ?

http://www.google.co.jp/search?btnI&q=[URL]
548nobodyさん:03/08/29 16:43 ID:???
(>543じゃ無いけど)

>547
ソレダ━━━━━(゚∀゚)━━━━━ッ
549nobodyさん:03/08/29 16:45 ID:???
534だった。
550nobodyさん:03/08/29 18:43 ID:???
http://nun.nu?http://URL
とかもあるぞよ。
googleは登録されてないURLでも飛べる?
551nobodyさん:03/08/29 19:24 ID:???
552nobodyさん:03/08/29 19:48 ID:???
553nobodyさん:03/08/29 19:54 ID:na9A2pd2
>>552
全部試したけど、それだけはok
全然個人的な場所でも飛べる、凄い凄い
554nobodyさん:03/08/29 23:29 ID:fl8oeL92
>>552
かんじんのurlが消せてない
http://rd.yahoo.co.jp/?http://www.ugtop.com/spill.shtml
555nobodyさん:03/08/30 00:18 ID:???
ほんとだ。これはLOCATIONヘッダで飛ばしてるな
556nobodyさん:03/08/30 13:01 ID:???
どうもレス数があわないとこがたまにあると思ったら
最新があぼーんされたとこだったのか
557あぼーん:あぼーん
あぼーん
558nobodyさん:03/08/31 17:26 ID:tuFrpWkq
perlでGoogleの検索結果を取得するプログラムとして、

open(SEARCH, "search");
(ファイルsearchには文字コードEUCでクエリーが書かれています)
$query = <SEARCH>;
chomp($query);

$url ="http://www.google.co.jp/search?q=".$query."&hl=ja&lr=&ie=EUC-JP&oe=UTF-8&start=10&sa=N";
として、
$rootpage=get($url)としたのですが、
うまくとって来てくれず$rootpageがundefになっています。
どう対処したらよいのでしょうか?
559nobodyさん:03/08/31 17:40 ID:???
>>558
get() って何?
560nobodyさん:03/08/31 17:45 ID:???
>>559
聞く前にぐぐれ
561558:03/08/31 17:47 ID:tuFrpWkq
LWP::Simpleモジュールにある
URL引数で指定されたドキュメントを返す関数です。
通常のページだとgetのカッコ内にurlを入れるだけで
そのページをとってこれるのですが、Googleではうまくいかないんです。
yahooの検索結果を取ってくるプログラムはできたのですが。。。
562nobodyさん:03/08/31 17:53 ID:???
561まであるらしいんだがNGのお陰で556でスレ止まってるのが笑える。
何が書き込まれてるんだ全く…。
563nobodyさん:03/08/31 17:56 ID:???
超気のせいだったゴメ
564あぼーん:あぼーん
あぼーん
565あぼーん:あぼーん
あぼーん
566あぼーん:あぼーん
あぼーん
567あぼーん:あぼーん
あぼーん
568あぼーん:あぼーん
あぼーん
569あぼーん:あぼーん
あぼーん
570nobodyさん:03/08/31 18:29 ID:???
>>558
UAではねられてるね。
別のモジュールを試すか、こそっとLWP::SimpleのUAを書き換えるか。
571nobodyさん:03/08/31 18:38 ID:OYZkvYjT
>>558
UAだねぇ。
でもスクリプト対策しているところからあえて取ってくるより、
別の検索エンジンを探すとかしたほうがいいかもよ?
(自分は、あえてするときはLWP::SimpleのUA書き換えてるけど)

ちなみに、$uaをエクスポートしてもらえば串を刺すなど
好き勝手できるのでお勧め。(普通にやるとアク禁されるからね)
572558:03/08/31 18:39 ID:tuFrpWkq
>>570
ご意見ありがとうございます。
さらに質問で申し訳ないのですが、
別のモジュールにはどのようなものがあるのでしょうか?
あと、UAとはUserAgentのことでしょうか?
573558:03/08/31 18:51 ID:tuFrpWkq
>>571
ご意見ありがとうございます。
こちらもさらに質問になってしまうのですが、
LWP::SimpleのUAの書き換えというのは、初心者にもできるでしょうか?
なにぶんPerlについての知識が乏しいもので。
もし難しいようでしたら、Googleでの取得はあきらめたほうがよさそうですし。
574nobodyさん:03/08/31 19:10 ID:???
ヒントもらったら、それを元に自分で調べたらどうか?
575570:03/08/31 19:12 ID:???
UAはUser Agent(HTTP_USER_AGENT)です。

別のモジュールはLWP::UserAgentでも、IO::Socketでも。
# 個人的にはIO::Socketが好きだけど、操作が面倒かも。

参照
ttp://member.nifty.ne.jp/hippo2000/perltips/lwpcook.html#GET
perldoc -m lwp
576558:03/08/31 19:19 ID:tuFrpWkq
>>575
丁寧に教えていただき、本当にありがとうございました。
アドバイスに従いやってみます。

577nobodyさん:03/08/31 20:12 ID:???
漏れはLWP::UserAgentを愛用している。
厨な漏れでもできる。
http://member.nifty.ne.jp/hippo2000/perltips/LWP/UserAgent.html
578558:03/08/31 20:40 ID:tuFrpWkq
>>577
御意見ありがとうございます。
さきほど、LWP::UserAgentを用いてやってみたのですが、
こちらでも同様な結果となってしまいました。
うーん、難しいですね。
579nobodyさん:03/08/31 20:44 ID:???
>>578
意味わかってないだろ
使い方の説明くらい読んだら?
580558:03/08/31 20:45 ID:tuFrpWkq
>>579
すいませんでした。
こちらの使い方が間違っているようですね。
これからもう少し詳しく読んでみます。
581558:03/08/31 22:12 ID:tuFrpWkq
LWP::UserAgentの使い方がようやくわかりました。
これで何とかなりそうです。
皆様ありがとうございました。
582nobodyさん:03/08/31 22:20 ID:ynlYypMb
素朴な質問なのですけど、どなたか教えて下さい。
あさっての会社の面接で知識のあるASP(VBScript)を主張しようと思っているのですけど、
ASP(VBScript)をはじめCGIやJavaなどの言語でさくせいするページ作成を、
「WEB系アプリケーション」っていう言い方で合っていますでしょうか?
583nobodyさん:03/08/31 22:25 ID:???
>>582
このスレッドのタイトルと>>1を読んでください。
584582:03/08/31 22:28 ID:ynlYypMb
>>583
あれ・・・、「WebProg 初心者の質問 Part5」って板に書いたつもりが、
違う板にかかれてしまったようです。
単なる凡ミスです。申し訳ありませんでした。
585nobodyさん:03/08/31 22:51 ID:3rubdTEF
ちょっと不可解で調べても分からんので誰かおしえて。

perlで同じdirectoryに3つのfileがあって
1.const.pm package宣言なし $AA = "okだよ";
2.sub.pm package sub;
require const;
sub bb{print "sub $AA\n";}
3.main.cgi package宣言なし
  require const;
&sub::bb;
print "main $AA\n";
とすると
sub okだよ
main
と表示されます。$main::AAでもだめ。
$main::AAと$sub::AAと別々に登録され両方
表示されると思っていたのですが・・
ただし、mainとsubのどちらかのrequire constを
require './const.pm'とすると
sub OKだよ
main OKだよ
と両方表示されます。
なんでだろう?長文ごめん。
586585:03/08/31 22:54 ID:3rubdTEF
ちょっと訂正
main.cgi
package宣言なし
require sub;<-ココ抜けてた
require const;
の間違い
587nobodyさん:03/08/31 22:58 ID:???
>>585Perlは、%INCに入ってると、読みません。
588585:03/08/31 23:18 ID:3rubdTEF
%INCに入っていないとってことですか?
sub.pmとmain.cgiで同じ指定require constとすると
はじめに読み込んだ方しか読み込めないってのが
どうも納得がいかんのです。それぞれ別のpackage変数として
シンボルテーブルに入ると思ってるんで。
589nobodyさん:03/08/31 23:38 ID:???
>>585
# Active Perl 5.6.1で異常終了するんですけど。。require sub;

ここはひとつ、doでドゥでしょ。(くるしー
590nobodyさん:03/08/31 23:58 ID:???
>>585
君は変数のスコープを誤解している。
別の言語とごっちゃになってないか?

#--- Const.pm ---
# package 宣言していないのでここは main パッケージ
$AA = 'OK.'; # $main::AA

#--- Sub.pm ---
package Sub;

# どの名前空間で読み込んでも Const.pm に書かれた
# コードの名前空間が変わるわけではない
require Const;

# パッケージ指定されていない => $AA eq $Sub::AA
sub bb { print "sub $AA\n" }
1;

#--- main.cgi ---
# package 宣言していないのでここは main パッケージ

require Const;
require Sub;
Sub::bb(); # "sub \n"
print "main $AA\n"; # "main OK.\n"
591585:03/09/01 00:02 ID:wUdXVEqP
>>589
以上終了ってsub.pmが@INCにないってこと?
5.6はカレントみてくれんのかな?
これ試したのはactive perl v5.8.0でした。
do調べてみます。
今まで一枚のfileに全て突っ込んでたけどstepupしようと
思ってfileわけるとこれだもんなあ。。
592nobodyさん:03/09/01 00:14 ID:???
foreach (@INC) {
print"$_\n";
}
してみれば
593585:03/09/01 00:15 ID:wUdXVEqP
>>590
># どの名前空間で読み込んでも Const.pm に書かれた
># コードの名前空間が変わるわけではない
ってことはどこでrequireしようとも$main::$AAとして存在するって
ことでしょうか?
main.cgi内でrequire subのほうをrequire constの前に書くと
&sub::bbの方はokが表示されてmain.cgiないのprint $AAのほうは
表示されないんですが・・
594585:03/09/01 00:29 ID:???
>>592
@INCを調べてみるとカレントは入っていませんでした。
ただ、requireの戻り値をみるとどのrequireも成功は
しているようです。
ということで@INCの問題ではないよな気がするんですが、
どうでしょうか?
595nobodyさん:03/09/01 00:34 ID:???
うちは入ってたけどね
消して試してみるか・・・
596589:03/09/01 00:34 ID:???
え、私?(なぜに…

perldoc -f require
すると吉。

で、doは
do 'const.pm';
の書式の方ね。ループさせないでね。
597585:03/09/01 00:38 ID:???
で、やりたいことは
const.pmで定数を用意して
各パッケージからconst.pm読みこんでその定数を使いたい。
この際問題なのが
定数を読み込むcgiから別のパッケージをrequireした時、
別のパッケージ内でも定数を読み込んでいると、
定数のrequireと別のパッケージのrequireの書く順番によって
どちらかのばっケージでしか定数が有効になっていないのです・・。
とりあえず、もう一回らくだ読みます。
598585:03/09/01 00:52 ID:???
requireをdoに変えると、main.cgiでのprintと
main.cgiからrequireされたsub.pmでのprintともに
const.pm内の変数をprintすることが出来ました。
requireとdoの違いを勉強してみます。
みなさん、ありがとうございました。
599nobodyさん:03/09/01 00:53 ID:???
>>593
すまん、俺も勘違いしてた。もう解決したみたいだが一応。

require はファイルに書かれたコードを*実行*するので、Sub.pm
(package Sub) 内で require Const; した場合、require 文のところが
$AA = 'OK.' に置き換わるような振る舞いになり、$Sub::AA = 'OK.'; と
等価。main.cgi (package main) 内で require Const; した場合は
同様に $main::AA = 'OK.'; と等価。

で、require は %INC を見て一度読み込まれたファイルはスルー
するので、先に呼び出した方の名前空間に $AA が 定義され、
もう一方には定義されない。

do なら毎回読み込むので、両方に $AA が定義される。但しこれは
$Sub::AA と $main::AA で、それぞれ別の変数。Sub.pm 内で $AA を
変更しても $main::AA に反映されるわけではないので注意な。

>>597 のようなニーズなら、単に Const.pm で package Const;
として、require する側では $Const::foo 等と読めばいい。
パッケージ名で修飾するのがイヤなら perldoc Exporter 。
600585:03/09/01 01:19 ID:???
>>599
requireの一度読み込まれた場合ってのがkeyですね。
一度読み込まれたってのがどういう条件で判断されるのか。
あるpackage内でなのか(今回の例でこれは違うだろうけど),
あるファイル内でなのか(requireされたコードも含む)
あるプロセスでなのか。
昨日からのムカムカが後少しですっきりします。
みんな、ホントに感謝!!
601あぼーん:あぼーん
あぼーん
602あぼーん:あぼーん
あぼーん
603あぼーん:あぼーん
あぼーん
604あぼーん:あぼーん
あぼーん
605あぼーん:あぼーん
あぼーん
606あぼーん:あぼーん
あぼーん
607あぼーん:あぼーん
あぼーん
608あぼーん:あぼーん
あぼーん
609nobodyさん:03/09/01 13:45 ID:???
共有サーバなのでPerlのモジュールとかインストールできないんですが、
UTF-8からUTF-7へ変換出来る.plのライブラリってありますか?

jcodeとかは、そもそも.pmでないとユニコードすら対応していないので・・・
610nobodyさん:03/09/01 14:21 ID:???
>>609
base64.pl
611あぼーん:あぼーん
あぼーん
612あぼーん:あぼーん
あぼーん
613あぼーん:あぼーん
あぼーん
614あぼーん:あぼーん
あぼーん
615nobodyさん:03/09/01 15:09 ID:fFXrj9/A
初心者本を読み終えて、自分でPerlを書いてみたんですが
うまくいきません、、、。

htmlファイルのフォームで受け取ったデータをcgiにpostして
そのデータをファイルに書き込み、確認のhtmlを出力したいのですが、
# ------ここから出力--------
print "Content-type:text/html\n\n";

print << "END_OF_HTML";

<html>
<head>
<title>確認</title>
</head>

<body>

$form1{'a'}を$form1{'x'}ですね。<br>

</body>
</html>

END_OF_HTML
616nobodyさん:03/09/01 15:11 ID:fFXrj9/A

って感じで出力するhtmlの中に日本語を入れるとそこから
<title /title>となり
htmlのソースがおかしくなってしまいます。
日本語を使わなければ、正しく表示されます。
ちなみにcgiファイルに直接アクセスすると、
「をですね。」と変数は表示されずに
htmlは正しく出力されています。

原因を教えて戴けませんでしょうか?
お願いします。
617nobodyさん:03/09/01 15:13 ID:???
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
を入れてみたら?
618nobodyさん:03/09/01 15:13 ID:???
>>617のcharsetは使ってる文字コードに置き換えて。
619nobodyさん:03/09/01 16:05 ID:???
ちゃんとフォームの中身は受け取ってるんですかね?
まさか、↑のが全てじゃないよね。
620nobodyさん:03/09/01 17:06 ID:fFXrj9/A
>>617
有難う御座います。教えて戴いた事を試してみたんですが、
解決しませんでした、、。

そこで試しにもう一度初めから書き直してみたら、うまくいきました(汗

そこで、以前のファイルと比べてみようと開いてみたら
元のファイルが文字化けしてしまいました。

原因は初めそのファイルをemacsで作っていて、途中でgeditで編集
した時に文字コードが変わってしまっていた事のようです。
ご迷惑をおかけしました。
621609:03/09/01 19:49 ID:???
>>610

御察しが良いようで。
UTF-8形式でPOSTされたデータをsendmailで送りたかったのですが、
Base64で符号化、という方法もありましたね。
ところが、UTF-8をBase64で符号化すると、
漢字を含む文章を正しく表示できなくなってしまうようです。
今度はQuoted PrintableでGogってます。

>>rPbXixOt
荒らし?
622nobodyさん:03/09/01 21:07 ID:???
>>621
そう。粘着荒らし。このスレのあぼーんはほとんど奴。
削除依頼して削除するのも荒らしをかまうことにならないのかな・・・
623nobodyさん:03/09/01 23:31 ID:???
こんばんは。
先月からPerlの勉強始めて、初心者なのですが
検索した結果、わからなかったため質問させていただきます。
勉強を兼ねて掲示板を作成中で、METHOD="POST"
でHTMLからCGIにデータを送って処理させています。
コード化されて転送される漢字の”十”にバックスラッシュの
コードが含まれていて、文字化けがおこるとのことですが、
処理後、表示される文字は文字化けがおきていません。
jcode.plでデコード処理をおこなったり、CGIにデコード処理の
プログラムを追加することで防ぐそうですが、必要性がいまいち理解
できません。また、ほとんどのCGIプログラムではGETとPOSTとの違いが
わからないようにしているそうですが、GETはセキュリティが弱いため
隠すのはわかるのですが、POSTを使っていけない理由がわかりません。
長文になりましたが、先輩方ご教授ください。
624nobodyさん:03/09/01 23:44 ID:???
>>623
>ほとんどのCGIプログラムではGETとPOSTとの違いがわからないようにしているそうですが

へ?ソースのformタグ見ればわかるじゃん
625nobodyさん:03/09/01 23:45 ID:???
まず、誰が使ってはいけないと言ったのか。
626623:03/09/01 23:52 ID:???
レスありがとうございます。
ttp://www.linux.or.jp/JF/JFdocs/Secure-Programs-HOWTO/avoid-get-non-queries.html
このサイトに違いがわからないようにしてある。という記述がありました。
言葉が悪かったですが、つかってはいけないということではなく、なぜわからなく
する必要があるのかがわかりませんでした。セキュリティの為という幼稚な答えしか
思い浮かびません。
この疑問にあたったのも、そもそもはPOSTを使い、jcode.plを使わずに何の問題も
ないことからなのですが、どのサイトに行っても、デコードとjcode.plを解説しているので
わからなくなってしまった次第です。
627nobodyさん:03/09/02 00:18 ID:???
>>626
POSTとGETの違いを「意識させない」ように
CGIライブラリが作ってあるって意味。

ブラウザとCGIのやり取りは次のようになる。
1. データをURLエンコードする。(ブラウザがやってくれる)
2. CGIでデータをURLデコードする。(上のCGIライブラリや自力でデコード)
3. 必要に応じて文字コードを変更(統一)する。

で、文字化けに関係してくるのは 3.の部分で、
SJISの「十」は0x8f 0x5cになり、2バイト目が0x5c=「\」と一致する。
そのため次の文字の1バイト目がエスケープされる。
そうすると1文字目の1バイト目と2文字目の2バイト目が合体(キメラ化)して
別の文字になってしまうというわけだ。
628nobodyさん:03/09/02 00:26 ID:???
>>623
バックスラッシュが含まれて化けるのは、
あくまでリテラルの話な
629623:03/09/02 00:33 ID:???
回答ありがとうございます。
キメラ化の話はサイト巡回中にあったとおもいます。
また、いろいろ考えてみたのですが
POSTで送られてきたデータを@value=param('name')として格納した後
各スカラーに($1,$2,$3)=@valueとして格納するのと

POSTで送られてきたSTDINからread関数でスカラーに格納して、必要に応じて
splitして各スカラーに格納した後に、jcode.plによって漢字変換する方法で

前者は@valueに格納された文字がすでに漢字であり、jcode.plにかける必要がなく
後者はSTDINの内容がメタ文字などを含むコードになっていて、漢字変換する必要がある

という考え方でよろしいのでしょうか?
あまりに基本的な話すぎて申し訳ないです・・
630623:03/09/02 00:35 ID:???
↑追記:送られてくるデータが漢字の場合です。
631nobodyさん:03/09/02 01:34 ID:???
>>630
インターネット上では、日本語の文字セットとして
EUC-JP,Shift_JIS,ISO-2022JP
等が使われています。
それぞれのコードには互換性がないので、これを変換して
一つの文字セットに統一するものがjcode.pl(jcode.pm)です。
632nobodyさん:03/09/02 09:00 ID:???
ある文字列の、先頭40バイトだけを取り出したいのですが、
40バイトが、マルチバイトのたとえば「男」の先頭1バイトだった場合、
39バイト(つまり、「男」の直前まで)だけを取り出す、という処理は、
perlではどうすればいいのでしょうか
633nobodyさん:03/09/02 09:36 ID:???
40byte目がマルチバイトかどうか調べて、そうでない場合は
40byte取り出し、そうである場合は39byteまで取り出す。
euc-jpだったら、
if (/^.{39}[\xA1-\xFE]/) {
print $1, "\n";
} else { print substr($_, 0, 40), "\n";}
shift-jisだったらでき・・

634nobodyさん:03/09/02 09:37 ID:???
(.{39})だった。
635 ◆aiY4htt2.2 :03/09/02 09:37 ID:???
>>632
my $message = 40 バイトで強引にぶった斬った Shift-JIS な文字列;
my $check1 = '(?:^|[\0-\200\240-\337])(?:[\201-\237\340-\374]{2})*';
my $check2 = '[\201-\237\340-\374]';
$message =~ s/($check1)$check2$/$1/g;

こんな感じかも。
(♪ch携帯対応改造で使ったやつの引用)
636nobodyさん:03/09/02 11:40 ID:???
EUCでもいっしょだよ
ほんとはループさせて終端からチェックし、確実に漢字1バイト目じゃないところまで
戻って、そこから進めると最後がASCIIか漢字の1バイト目か2バイト目かわかる

でも40バイトなら先頭から数えても問題ないけどね
637560:03/09/02 12:09 ID:???
ありがとうございます。
SJISだったんですが(←言ってなかったですね、すみません)、
直前にEUCに変換して、
>>561さんのを使わせてもらって、
また、SJISに戻しました。

ありがとうございました。
638nobodyさん:03/09/02 12:17 ID:nOZ+Ay6O
>>633-634
('あ' x 20)をそのルーチンに通したら文字化けするよ。

>>635-636
そんな面倒なことしなくても、EUC文字列の場合単にMSBが立ってるバイト数を
偶数にすれば良いだけだから、

$text = substr($text, 0, 40); # 40バイト取る
$msb = '[\x8E\xA1-\xFE]'; # EUC文字片
chop $text if tr/$msb/$msb/ % 2;

これでOK。(JIS X 0212の存在は無視)
639nobodyさん:03/09/02 12:19 ID:???
>638
文字列の中にダブルバイトとシングルバイトが共存してる事はありえないの?
640nobodyさん:03/09/02 12:19 ID:???
あぁ、勘違い。
忘れてくれ。
641632:03/09/02 13:00 ID:???
560じゃなくて632だったです。
OpenJaneで番号ずれてた・・・
642nobodyさん:03/09/02 13:06 ID:???
>>641
>>633のは機能しませんよ。
643632:03/09/02 13:39 ID:???
>>642
え、まじすか・・・
644632:03/09/02 13:53 ID:???
>>633
確かに2バイトの真ん中できれてますた
645nobodyさん:03/09/02 15:43 ID:???
264.pts-0.venus(Attached)
という文字列(先頭はタブ)から"264"を抜き出したいんですが
どう書けばいいのか分かりません。

$str = "264.pts-0.venus(Attached)";
m/\t(\d)*?\.pts.*/;
print $1;

で何も表示されず。アドバイス下さい。
646nobodyさん:03/09/02 15:44 ID:???
>>645
$str =~ m/\t(\d)*?\.pts.*/;
の間違いです。それでもうまく行かないです。
647nobodyさん:03/09/02 16:49 ID:???
>>646
$str =~ m/\t(\d*?)\.pts.*/;
?ん?もしや釣り?
648nobodyさん:03/09/02 17:09 ID:???
釣れたぞ、おい
649nobodyさん:03/09/02 20:10 ID:???
>>632
>>635さんので動くとおもうけど、もうひとつ。
my $sub = substr($str, 0, 40);
$sub =~ /^(?:[\x20-\x7e\xa1-\xdf]|[\x81-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc])*$/ or chop $sub;

>>646
こうでも。
$str = "\t264.pts-0.venus(Attached)";
$str =~ m/^\t(\d+)\.pts/;
print $1;

次回からはこちらへどうぞ。
正規表現道場@2ch Part2
http://pc2.2ch.net/test/read.cgi/php/1038146241/
650nobodyさん:03/09/03 02:57 ID:8C5hGjxK
みなはんエディタは何使ってる?
今まで秀丸オンリーだったけどちと検索したら
いろいろあったもんで。
perleditor
cgi_edit
perl debugger
perlを始めよう!
などなど。なんかお勧めのない?
651nobodyさん:03/09/03 03:02 ID:???
oeditは軽いがtxt,html,Perlなどを編集できる。
652nobodyさん:03/09/03 03:05 ID:???
>>650
vi に決まってんじゃん。
653nobodyさん:03/09/03 03:05 ID:???
>>650
多分思いっきりスレ違いです。

Perl書くのにどんなエディタ使ってる?
http://pc2.2ch.net/test/read.cgi/php/1014357485/
使いやすいエディタって何よ?
http://pc2.2ch.net/test/read.cgi/php/991372719/
秀丸よりも優れたフリーエディタ
http://pc2.2ch.net/test/read.cgi/tech/1052919371/
654650:03/09/03 03:07 ID:???
こ、これは失礼しました・・・
655nobodyさん:03/09/03 03:31 ID:???
viでperlはきつい。
656nobodyさん:03/09/03 03:36 ID:???
ネタじゃないんですけどね。。
>>649
のまま張り付けたけど何も出力されませんでした(´・ω・`)ショボーン
657nobodyさん:03/09/03 03:50 ID:???
>>650
xyzzy。他の言語もこれ。
658nobodyさん:03/09/03 03:53 ID:???
>>655
どの辺が?
659nobodyさん:03/09/03 04:16 ID:q0K9DyHf
htmlのformからcgiに
aa=1,ab=2,ac=3,ba=4,bb=5,bc=6
って送って
$data1 = "$form{'aa'}$form{'ab'}";
$data2 = "$form{'ba'}$form{'bb'}";
$data{'$data1'}= $form{'ac'};
$data{'$data2'}= $form{'bc'};
とした場合に
print $data{'$data1'},$data{'data2'}
は3,6と出力されるのに
print $data{'12'},$data{'45'}
は何も表示されません。

この場合、%dataのキーである12と45は数値データではなく
文字列データとして扱われているのでしょうか?

またその場合、$data{'"12"'}としても12は文字列データとして
代入できないのですが、どのようにすれば代入できますかね?
660nobodyさん:03/09/03 05:50 ID:???
>659
" と ' の違い
661nobodyさん:03/09/03 07:45 ID:???
なんか、スレ違いのような気もするんですが、どこに書いて良いか分からないので…。
クッキーをセットする時、独自ドメインならアドレスを「/」にしても問題は無いんでしょうか?
http://xx.xx/A/http://xx.xx/B/の2つのディレクトリで参照したいんですが
他にやり方がわかりません。
662nobodyさん:03/09/03 09:07 ID:???
>>661
ない。
path=/
663nobodyさん:03/09/03 09:54 ID:???
>>662
ありがとう!
664659:03/09/03 15:17 ID:???
>>660さん
ども。しかし、$data{'12'}としても$data{"12"}としても
出力されないんです、、、。

それとも、もっと前の部分で'と "を使いわけろと言うこと
でしょうか?
665nobodyさん:03/09/03 15:34 ID:???
>>664
$data{'$data1'} => $data{"$data1"}

ちょっと考えればわかる
666665:03/09/03 15:47 ID:???
もっといえば、$data{$data1}でいい。
print '$data1';
print "$data1";
print $data1;

この3つやってみたら?
667nobodyさん:03/09/03 16:49 ID:Z3bfhz4O
Windows環境でPerlをやろうと思い、とりあえず本を買うことにしました。
そのため、↓(2ch Books)でお勧めされている初めてのPerl第3版を買おうと思ったのですが、
ttp://www.1point.jp/~book_2ch/webprog/perl.html
Windowsに十分対応しているか不安です。どなたか持っている方教えていただけないでしょうか。
スレ違いであったら申し訳ありません。よろしくお願いします。
668nobodyさん:03/09/03 16:55 ID:???
初心者です。

”my”と”local”は違うのでしょうか?
”my”が手元の入門書で使われていないので判りません。

教えて下さい。
669nobodyさん:03/09/03 17:18 ID:???
>>667
はじめてのPerl WIN32 とかいうの発売されてなかったっけ?
670nobodyさん:03/09/03 17:29 ID:???
ある文字列の中に、ピリオドが2つ以上含まれているかどうかを判断するには、
どうすればいいのでしょうか?
671nobodyさん:03/09/03 17:36 ID:HPS+c9jA
>>670
こんな感じ?

if ($str =~ /\.(.*)\./) {
print "含まれてます";
}
672nobodyさん:03/09/03 17:43 ID:???
>>671
文字列が巨大でなければこっちの方が早い。

if( ($str =~ tr/././) >= 2){
  print "含まれてます\n";
}
673nobodyさん:03/09/03 17:50 ID:???
>>668
違います
674nobodyさん:03/09/03 17:57 ID:???
localは変数を新しく作るんじゃなくて、一時的に"退避"させるんだったっけ
675nobodyさん:03/09/03 18:08 ID:???
676nobodyさん:03/09/03 18:09 ID:???
$a = '1';
print "$a\n"; #=> 1
{
 my $a = '2';
 print "$a\n"; #=> 2
 print "$main::a\n"; #=> 1
}
{
 local $a = '3';
 print "$a\n"; #=> 3
 print "$main::a\n"; #=> 3
}
print "$a\n"; #=> 1
677nobodyさん:03/09/03 19:57 ID:???
>>676
誰にレスしてんねん。
678nobodyさん:03/09/03 20:27 ID:???
>>677
>>676じゃないが、コンテキストからわかるだろ。

そういえば、<IN>でループ回してるときに
print <IN>;
とかやっちゃって失敗したのを思い出した。
679668:03/09/04 19:47 ID:???
>673 674 675 676
亀ですみませんでした。 レスありがとうございます。 m(__)m
使い方が判りました。 簡単なパッケージを作って確認してみます。
680あぼーん:あぼーん
あぼーん
681あぼーん:あぼーん
あぼーん
682 :03/09/06 05:53 ID:???
掲示板スクリプトで自動生成したログファイルを
削除したいのですか、ターミナルからrmコマンドを
使ってもpermission deniedが出て消せません。
ローカルでやる時はスーパーユーザーになって
消せますが、ISPの鯖に上げて動かし生成した
ものは自分では消せないようです。どうすれば
良いのでしょう?
683nobodyさん:03/09/06 06:00 ID:???
>>682
強引に削除するスクリプトを描いて設置しる。
CGI になるかと思うので、レスポンス、エンティティヘッダの出力をお忘れにならないように。
684682:03/09/06 06:04 ID:???
こんな感じででしょうか?
#!/usr/bin/perl
unlink("ファイル名前");
exit;
685nobodyさん:03/09/06 07:42 ID:???
>>684
それだとエラーに
#!/usr/bin/perl
unlink("ファイル名前");
print "Content-type: text/plain\n\n";
exit;
686nobodyさん:03/09/06 07:45 ID:???
>>685
687nobodyさん:03/09/06 07:51 ID:???
>>685
本当に消えたのかどうかはっきりさせるために、
#!/usr/bin/perl
print "Content-type: text/plain\n\n";
print unlink("ファイル名前");
exit;
とするのはどうか。
688682:03/09/06 08:13 ID:qOA5ehbE
あ、ターミナルからではなく、ブラウザから
アクセスして動かさないといけないってことですか。
689nobodyさん:03/09/06 09:42 ID:???
>>685
>>684は表示がエラーになるだけでプログラムはちゃんと動いてる。
ファイル消すだけなんだから別に>>685のようにしなくてもいいと思うが。
まあ>>687みたいにするのもいいけど。

あと
#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);
unlink("ファイル名") or die $!
とか。
690nobodyさん:03/09/06 10:19 ID:???
つーか、Webサーバー権限でCGIが実行されるような糞なところは使うなよ。
691nobodyさん:03/09/06 12:14 ID:???
>>690
iswebっていまだにそうなの?
692682:03/09/06 14:05 ID:???
うまく消せるようです。
ありがとうございました。
693nobodyさん:03/09/06 16:17 ID:???
消すにはそのファイルが含まれるディレクトリにwriteがないと無理
cgiでディレクトリ作ってパーミッション設定忘れるとそうなるねえ
694nobodyさん:03/09/06 21:22 ID:DXHBOkzn
2個のCGIから書き込み可能なファイルは、片方のCGIでロックファイルした場合に、もう一方のCGIから見てもファイルロックされているのでしょうか。
flockでやろうと考えてるんですが、誰か教えてくだせえー
695nobodyさん:03/09/06 21:46 ID:???
>694
【Perl】ファイルロック(はいた処理)について語ろう
http://pc2.2ch.net/test/read.cgi/php/1024795138/
696nobodyさん:03/09/06 22:46 ID:???
>>694 問題なくロックされる。
697あぼーん:あぼーん
あぼーん
698あぼーん:あぼーん
あぼーん
699あぼーん:あぼーん
あぼーん
700あぼーん:あぼーん
あぼーん
701あぼーん:あぼーん
あぼーん
702あぼーん:あぼーん
あぼーん
703あぼーん:あぼーん
あぼーん
704あぼーん:あぼーん
あぼーん
705あぼーん:あぼーん
あぼーん
706あぼーん:あぼーん
あぼーん
707あぼーん:あぼーん
あぼーん
708nobodyさん:03/09/07 14:40 ID:u7agmyKi
ちょっとこのスレの趣旨と違うかもしれませんが質問させてください。

今SSIを使って<!--#exec cmd="./aaa.cgi" -->という形で
ランダムでテキスト表示をしています。別にtxtファイルがあり、
その中にある文章を表示するという形です。
そのtxtファイルの中にただの文字列ではなく
<!--#exec cmd="./bbb.cgi" -->というような別のSSIでさらに
ランダムでテキスト表示するための文字列を加えたいのですが、
何も表示されません、
こういう芸当は無理なのでしょうか?
709nobodyさん:03/09/07 14:56 ID:???
>>708
思いっきりすれ違いな気がするけれども

#! /usr/........
open(F, "textfile.txt") or exit;
@text = <F>;
close F;

print $text[int rand($#text+1)];

じゃ無理なの?
710nobodyさん:03/09/07 15:06 ID:???
>>708
もしできたら永遠にループして困るだろーがよ。
711708:03/09/07 15:11 ID:u7agmyKi
>>709
それだと普通のランダム表示だと思うのですが・・・。
やっぱりスレ違いなんですね。
それっぽいスレがなかったもので、すいません。
712709:03/09/07 15:13 ID:???
あぁ、意味を取り違えてた。
でも、んなことする必要なくない?
713708:03/09/07 15:14 ID:u7agmyKi
>>710
ループしてしまうものなんですか?
一度出力したら終わりと思っていたのですが。
714708:03/09/07 15:18 ID:u7agmyKi
必要と言われるとそんな気もします・・・。
やっぱり出直します。スレ汚し失礼しました。
715nobodyさん:03/09/07 15:25 ID:???
最初に起動するCGIで全部処理すればいいだけの話。
716nobodyさん:03/09/08 09:51 ID:???
この辺はHTTPサーバ依存だと思うが、できるやつは無いかもね
Apacheのドキュメントにははっきりと、できないしする予定も無い事が書いてある
717nobodyさん:03/09/08 14:20 ID:???
たしかこのスレで、
あるディレクトリ($path)のtmpで始まるファイルだけを消す方法を尋ねたら、

opendir(DIR, $path) or die;
unlink map { "$path/$_" } grep { /^tmp.*/ and -f "$path/$_" } readdir(DIR);
closedir(DIR);

という答えをもらいまして、
実際にためしたのですが、
消えません。。(ちなみに、dieにもなっていない)

どうすればいいのでしょうか・・・他の方法でもいいので。
(ただ、cgiからunixコマンドを呼び出すことはできない環境です。(のでrm とかできない))
718nobodyさん:03/09/08 14:27 ID:X5G7G9R4
1. やりたいこと:文字列中の漢字をひらがなに変換したい。
2. 試してみたこと
#!/usr/bin/perl
use NKF;
use Text::Kakasi;
use Text::ChaSen;
print "Content-type: text/html\n\nOK!";
exit;
を実行して、ChaSenが鯖に入っていることを確認。

で、googleでサンプルを探したのですが、見あたりません。
ChaSen使っている方いないでしょうか。
719nobodyさん:03/09/08 15:29 ID:???
>>718
perldoc見たか?
720nobodyさん:03/09/08 16:19 ID:???
>>717
$path の内容の末尾に「/」が入っている悪寒。
721nobodyさん:03/09/08 16:25 ID:???
>>717
とりあえずmap { print "$path/$_" }して中見てみれば?
722718:03/09/08 17:10 ID:???
>>719
情報有り難うございます。以下のスクリプト
---------------------------------
#!/usr/bin/perl
use NKF;
use Text::Kakasi;
use Text::ChaSen;
$res = Text::ChaSen::getopt_argv('chasen-perl', '-j', '-F', '%m ');
$str = Text::ChaSen::sparse_tostr("日本語の文字列");
print "Content-type: text/html\n\nOK!";
print $str;
exit;
---------------------------------
を実行したら、
/usr/bin/perl: relocation error: /usr/lib/perl5/site_perl/5.6.1/i386-linux/auto/Text/ChaSen/ChaSen.so: undefined symbol: chasen_getopt_argv
とエラーメッセージが出てしまいました...
723nobodyさん:03/09/08 17:13 ID:bPmk+TI6
1. フォームから送ったデータを別ファイル「fileA.dat」に書き込み、その「fileA.dat」から読み出したデータで分岐をさせたい。

2.jcode.plでデータのコード変換を試みたがうまくいかない。
別の変数に代入を試みたが元データがフォームから送られてきたものである限りうまくいかない。

3. その「fileA.dat」が一枚なら問題ないのだが、ループさせて「fileA[00-99].dat」のようにファイルを複数個つくると、
ファイルがUnicodeで勝手保存されてうまくいかない。
データはブラウザ上では問題なく表示されるが、if文などの分岐の文字列として機能しない。

質問の書き方はこんな感じでよろしいでしょうか?
なにか分かりにくい点がありましたらお手数ですが、レス宜しくお願いします。
どうかお助けください。
724nobodyさん:03/09/08 17:48 ID:???
>>723
それじゃやってくれってことでしょ
うまくいかないコードぐらい貼って
725723:03/09/08 18:09 ID:bPmk+TI6
>>724さま

失礼しました、こちらにコードをアップしました。
よろしくお願い致します。
http://uailehpo.hp.infoseek.co.jp/tmp.txt
726723:03/09/08 18:16 ID:bPmk+TI6
tmp.txt = tmp.cgi で配置とパーミッションは、

tmp.cgi(755)
lib(755)/
cgi-lib.pl(644)
data_box(755)/

です。
727723:03/09/08 18:17 ID:bPmk+TI6
タブは表示されないのですね、失礼しました。
tmp.cgi(755)
lib(755)/cgi-lib.pl(644)
data_box(755)/
です。
728nobodyさん:03/09/08 19:08 ID:???
>>725
チェックボックスのvalueを全部同じにしてわざわざ「,」で区切るなんて
根本的にフォームの使い方がおかしい
それにチェックボックスの状態を記録するためだけに
datというファイルをあえてたくさん作りたい理由はあるのか?
729723:03/09/08 19:38 ID:???
レスありがとうございます。
すみません超素人なんです…。
プロの方からみれば本当にどんくさいことをしていると言うのも重々承知しております。
もし宜しければ代替案のヒントなどいただけるとうれしいです。
730nobodyさん:03/09/08 20:24 ID:3AX/sDx8
誰かKENT氏のMT-BOARD持ってる人いませぬか
731nobodyさん:03/09/08 20:31 ID:???
持ってますが何か?
732あぼーん:あぼーん
あぼーん
733あぼーん:あぼーん
あぼーん
734あぼーん:あぼーん
あぼーん
735あぼーん:あぼーん
あぼーん
736あぼーん:あぼーん
あぼーん
737あぼーん:あぼーん
あぼーん
738あぼーん:あぼーん
あぼーん
739あぼーん:あぼーん
あぼーん
740nobodyさん:03/09/09 13:25 ID:Art/HRbf
置換演算子s///の、/eオプションについての質問です。

$a = 'A';
$_ = '$a';
print $_, "\n"; # $aと表示

s/(\$\w+)/$1/ee;
print $_, "\n"; # Aと表示。なぜこうなるのか、どなたかご教示ください。
741nobodyさん:03/09/09 13:31 ID:???
>>740
マッチした文字列(この場合は変数名)を式として評価したから。
じゃないの?
742nobodyさん:03/09/09 13:36 ID:???
>>740
$a = 'A';
$ab = 'hoge';
$_ = '$a';
s/(\$\w+)/$1 . 'b'/ee;
print; # hoge
743740:03/09/09 13:53 ID:???
>>741, >>742
さっそくのレス、どうもありがとうございます。

742さんの例だと、1回目の/eで置換文字列は'$ab'になり、2回目の/eで
'hoge'になるということですね。

文字列連結を行っていない740の場合、なぜ2回の/eeが必要なのかわからない
のです。
744nobodyさん:03/09/09 14:13 ID:???
>>743
マッチした文字列(この場合は変数名)を式として評価したから。
じゃないの?
745nobodyさん:03/09/09 15:41 ID:???
    /\___/ヽ   ヽ
   /    ::::::::::::::::\ つ
  . |  ,,-‐‐   ‐‐-、 .:::| わ
  |  、_(o)_,:  _(o)_, :::|ぁぁ
.   |    ::<      .::|あぁ
   \  /( [三] )ヽ ::/ああ
   /`ー‐--‐‐―´\ぁあ
746nobodyさん:03/09/09 16:19 ID:???
巨大な文字列$varがあったとして、先頭128バイトが要らないとき、
余分な代入をせずに、これを無視する方法はありますか?

つまりCでいう
  char* p = &var;
  p += 128; // 以後は p を使ってアクセス
のようなことがしたいのですが。
747740:03/09/09 16:38 ID:???
>>742
$a = 'A';
$ab = 'hoge';
$_ = '$a';
s/(\$\w+)/$1.'b'/; print $_, "\n"; $_ = '$a'; # $a.'b'
s/(\$\w+)/$1.'b'/e; print $_, "\n"; $_ = '$a'; # $ab
s/(\$\w+)/$1.'b'/ee; print $_, "\n"; # hoge

# 上の表示をじっと見ると、文字列連結しないなら、下のようになるのは当然
# でした。お騒がせいたしました。

$_ = '$a';
s/(\$\w+)/$1/; print $_, "\n"; $_ = '$a'; # $a
s/(\$\w+)/$1/e; print $_, "\n"; $_ = '$a'; # $a(/eなしと同じ)
s/(\$\w+)/$1/ee; print $_, "\n"; # A
748nobodyさん:03/09/09 17:05 ID:OBePyqIf
簡単だと思いますが、自力でわからないのでご回答願います。

文字列$strの中に「,」がいくつ含まれているかを表示させる方法
749nobodyさん:03/09/09 17:17 ID:???
>>748
$count = ($str =~ tr/,/,/);
print $count;
s///とtr///(y///)は変換(置換)した文字数を返す。
750748:03/09/09 18:29 ID:OBePyqIf
なるほど!ありがとうございます。
751nobodyさん:03/09/09 18:49 ID:???
>>746
$var = substr($var, 128); じゃダメ?
752nobodyさん:03/09/09 19:37 ID:???
メールアドレスで自動リンクの仕方はどうやるのでしょうか?
753nobodyさん:03/09/09 19:48 ID:???
754nobodyさん:03/09/09 20:32 ID:v/xCzILp
@fine=(['クーラー','#eeeeee'],
    ['エアコン','#eeeeee']);

foreach(1 .. $#fine){
$y1[79] =~ s/$fine[$_][0]/
<span style="color:$fine[$_][1]">
$fine[$_][0]<\/span>/g;

でやってるんですが、どうもクーラーの
ーがいけないみたいで表示が真っ黒に
なってしまいます。
あと夕の文字も駄目みたいなんですが、
対処法を記載して下さい。
ーを半角にすると大丈夫みたいですが。。。
755nobodyさん:03/09/09 20:50 ID:???
>>754
>foreach(1 .. $#fine)
foreach(0 .. $#fine)じゃないかい?
756あぼーん:あぼーん
あぼーん
757あぼーん:あぼーん
あぼーん
758あぼーん:あぼーん
あぼーん
759あぼーん:あぼーん
あぼーん
760あぼーん:あぼーん
あぼーん
761あぼーん:あぼーん
あぼーん
762あぼーん:あぼーん
あぼーん
763nobodyさん:03/09/10 01:46 ID:???
>>754
>>755
むしろ、全部ぶん回したいなら、
foreach ( @fine ) {
$y1[79] =~ s/$_->[0]/
<span style="color:$_->[1]">
$_->[0]<\/span>/g;
}
こうした方が。
764nobodyさん:03/09/10 03:08 ID:???
765あぼーん:あぼーん
あぼーん
766あぼーん:あぼーん
あぼーん
767あぼーん:あぼーん
あぼーん
768あぼーん:あぼーん
あぼーん
769あぼーん:あぼーん
あぼーん
770あぼーん:あぼーん
あぼーん
771あぼーん:あぼーん
あぼーん
772あぼーん:あぼーん
あぼーん
773nobodyさん:03/09/10 10:17 ID:nCyeQoyB
ここに長いこと粘着してる荒らしって前にパンチとかキックとか言ってたやつ?
774nobodyさん:03/09/10 10:35 ID:???
>>773 そう。あれからずっと自己紹介し続けてる。
775nobodyさん:03/09/10 11:15 ID:ehR5IsOg
申し訳ありません、コンパイルエラーのことを聞くのは恥ずかしいとは思うのですが、
どこで発生しているのか見当すら付きません。

[Wed Sep 10 11:02:42 2003] [notice] Apache/1.3.27 (Unix) configured -- resuming normal operations

[Wed Sep 10 11:02:42 2003] [notice] Accept mutex: sysvsem (Default: sysvsem)

Can't use global @_ in "my" at /usr/local/lib/perl5/5.6.1/Carp/Heavy.pm line 30, near "return @_ "

Compilation failed in require at /usr/local/lib/perl5/5.6.1/Carp.pm line 97.

というエラーは、どこでどう発生しているのか、発見する方法について何かご存知の方がいらっしゃればアドバイスをお願いいたします。
776 :03/09/10 11:36 ID:???
フィーバー
777nobodyさん:03/09/10 12:06 ID:fP87jQDg
すいません
PerlでBBSを作っていますが
unshiftで配列だと新しい記事は上につくんだけど
2chのように下につけるにはどのようにするのですか?
778あぼーん:あぼーん
あぼーん
779nobodyさん:03/09/10 13:00 ID:???
>>777
push …でいいのか?
780あぼーん:あぼーん
あぼーん
781754:03/09/10 18:37 ID:Bi+qgamu
例えばコンピュータに色を付けたい時に、
色の指定の所で、「ー」の記号を使うと
エラーになるみたいなので、
コンピュとタの間に色の指定をする事
は出来ないでしょうか?
782nobodyさん:03/09/10 18:47 ID:v9aJB7Z5
JPEGファイル限定で<INPUT TYPE=FILE>タグからPOSTされてきた画像を
鯖に保存する際、オリジナル以外にサムネイルも一緒に保存したいのですが、
何かよい.plライブラリはありませんでしょうか?
オリジナルファイルを保存することは簡単にできたのですが。

ググッっても、うまく見つけれずにいます。
知識者の方、よろしくお願いいたします。
783nobodyさん:03/09/10 18:52 ID:v9aJB7Z5
>>781
トーシロで申し訳ないが、文字を抽出する時、
全角2バイトの1バイト目が[\x81-\x9F\xE0-\xFC]の場合を
考えてみたらどうでしょうか?
784nobodyさん:03/09/10 18:55 ID:???
>>781
「ー」の2バイト目は0x5b→[
「タ」の2バイト目は0x5e→^
どっちもメタ文字だから。
\Qでも使ってエスケープしてみれ。
785あぼーん:あぼーん
あぼーん
786あぼーん:あぼーん
あぼーん
787あぼーん:あぼーん
あぼーん
788あぼーん:あぼーん
あぼーん
789nobodyさん:03/09/10 23:15 ID:1gfPV2JX
>782
サーバーにImageMagickが入っていれば簡単ですよ。
確認してみたら。
ちなみに、オレはロリポというサーバーで使っているよ。
790nobodyさん:03/09/10 23:32 ID:???
>>775
ドイツ語だけど、こんなの見つけた。
ttp://www.rede-mit.de/cgi/archiv/thread791.shtml
791nobodyさん:03/09/10 23:38 ID:???
すんまそん。ActivePerl v5.8.0 built for MSWin32-x86-multi-thread です。
関数でハッシュを返したいんですが、
リファレンスで返せばいいことまではわかりました。
しかし、リファレンスで返した後どう参照したらいいかがわかりませんです。
どぼじて?

<code>
sub test {
  my %ret = { '01' => "test01" , '02' => "test02" , '03' => "test03" };
  return \%ret;
}

$hash = test;
while ( ($key, $value) = each %$hash ) {
  print "Key: $key, Value: $value\n"; # 出力 Key: HASH(0x16253ec), Value:
}
</code>
ここ参考にします他.
http://www.rfs.co.jp/sitebuilder/perl/02/10.html#%83%8A%83t%83@%83%8C%83%93%83X%82%CC%8EQ%8F%C6
792あぼーん:あぼーん
あぼーん
793nobodyさん:03/09/10 23:48 ID:???
$hash = test;

$hash = &test;
794772:03/09/11 00:08 ID:???
すいません、自己解決できました。
わてくし、ハッシュを作る時の () と、{} の違いがわかっておりませんです他。
() : ハッシュの作成。
{} : ハッシュへのリファレンスの作成。
sub testでしょっぱなから {} を使ってハッシュへのリファレンスを作成し、
それへののリファレンスを返していたので、リファレンスへのリファレンスになっていました。
それが、期待した動作を得られない原因です他。
<code>
sub test {
  my %ret = ( '01' => "test01" , '02' => "test02" , '03' => "test03" );
  return \%ret;
}
</code>
こうすることで上手くいきます他。
>>774氏、お手数おかけしてすいません。ありがとう御座いました.

参考までに下記のサイトが、ハッシュのリファレンスに関してわかりやすかったです。
http://plaza17.mbn.or.jp/~naotosi/Special/perl/perl3.html#2-2
795nobodyさん:03/09/11 00:16 ID:???
>>782
GD.pm ってのもあるけれども、、、
796nobodyさん:03/09/11 01:00 ID:???
>>781
Shift-JISで組むな。EUC-JPで組め。
797nobodyさん:03/09/11 01:01 ID:???
>>795
まあ、JPEG限定と最初の質問には明記しているが、
拡張性を考えてImage-Magickを使っておく方がいいもんだよ。
# 後で絶対機能追加したくなるって。
798nobodyさん:03/09/11 02:33 ID:???
あぼーんが速くなったな
799nobodyさん:03/09/11 03:14 ID:???
渇を入れてやったから
800あぼーん:あぼーん
あぼーん
801あぼーん:あぼーん
あぼーん
802あぼーん:あぼーん
あぼーん
803あぼーん:あぼーん
あぼーん
804あぼーん:あぼーん
あぼーん
805あぼーん:あぼーん
あぼーん
806あぼーん:あぼーん
あぼーん
807あぼーん:あぼーん
あぼーん
808782:03/09/11 08:35 ID:tAL7swdB
レスありがとうございます。
Win鯖なので、ImageMagickはインストールできないですよね?
GD.pmもパッケージのインストールが必要なのでしょうか?
809nobodyさん:03/09/11 08:52 ID:???
ここはコーディングの・・・いやなんでもない。
810782:03/09/11 10:03 ID:tAL7swdB
>>809
申し訳ないil||li _| ̄|○ il||li
811あぼーん:あぼーん
あぼーん
812nobodyさん:03/09/11 10:55 ID:???
>>781
なんで未だにこういうのがいるのかね。
Shift-JISで書いてわざわざ\エスケープするぐらいならEUC-JPで書いた方がマシ。
813nobodyさん:03/09/11 12:54 ID:cA0CYljH
みなさん初めまして。
ホームページで、金額を表示したい場合などのために、
『引数として渡された数字を、3桁ごとにカンマで区切って、戻り値として返す』
という以下のようなパッケージを作りました。
いちおうは正常に動作しているようなのですが、
渡された引数の、先頭の数字が0だった場合(例014825)のみ、エラーが出てしまいます。
どなたか理由がわかりませんか?

package utility;
######################################
# 数字を3桁づつに区切る
sub sanketa {
my (@arr); my (@kazu); my ($i); my ($NUM);
@arr = reverse (split(//,$_[0]));
while (@arr) {
for (1..3) {
$i = shift(@arr);
push (@kazu,$i);
}
if ($arr[0] ne '') { push (@kazu,',')} ;
}
@kazu = reverse(@kazu);
foreach $i (@kazu) { $NUM .= $i; }
return ($NUM);
@arr=(); @kazu=(); $NUM=();
}
814nobodyさん:03/09/11 13:13 ID:???
>>813
頭に 0 つけると 8進数
815nobodyさん:03/09/11 13:18 ID:iq0GSzN2
<input type="file" name="upload">
みたいな感じでファイル(CSV形式)をアップロードさせようと思っていますが、
スクリプト側でどのようにしてファイルを拾えばいいかわかりません。
ファイル自体を処理するのは大丈夫なんですが、
どのようにファイルを拾えばよいかどなたか御教示いただけませんか?
816782:03/09/11 14:19 ID:tAL7swdB
>>815
 ### データ処理 ###
 binmode(STDIN);# バイナリモード
 $section_line = <STDIN>;# 区切り行
 $section_line =~ s/\r\n//;
 while(<STDIN>)# データ処理
 {
 ### バイナリデータ ###
 if($_ =~ /uploader/)# TAG NAME
 {
 if($_ =~ /filename=""/)
 {
 #ファイルが指定されていない。
 exit;
 }
 ~s/\r\n//;
 ~s/"//g;
 @buf = split(/filename=/, $_);
 $full_path = $buf[@buf - 1];# パス付ファイル名
 $file_name = $full_path;
 &jcode'convert(*file_name, 'euc');# EUC
 @buf = split(/[\\\/]/, $file_name);
 $file_name = $buf[@buf - 1];# ファイル名
 &jcode'convert(*file_name, 'sjis');# Shift-JIS
 @buf = split(/\./, $file_name);
 $file_ext = $buf[@buf - 1];# ファイル拡張子
 $file_ext =~tr /A-Z/a-z/;
817782:03/09/11 14:20 ID:tAL7swdB
>>816のつづき
 $file_kind = "その他";
 $file_kind = "JPEG"if($file_ext eq "jpg");
 $file_kind = "JPEG"if($file_ext eq "jpeg");
 $file_kind = "GIF"if($file_ext eq "gif");
 $file_kind = "MS-WORD"if($file_ext eq "doc");
 $file_kind = "MS-EXCEL"if($file_ext eq "xls");
 $file_kind = "WAVE"if($file_ext eq "wav");
 $file_kind = "ZIP"if($file_ext eq "zip");
 $file_kind = "LZH"if($file_ext eq "lzh");
 $binary_data = '';
 $content_type = <STDIN>;# Content-Type
 $content_type =~ s/\r\n//;
 ($null, $content_type) = split(/\//,$content_type);
 $null = <STDIN>;# 空行
 while(<STDIN>)
 {
 lastif($_ =~ /^$section_line/);# 区切り行でループを終了
 $binary_data .= $_;# バイナリデータ
  }
 
 ### ファイル書込 ###
 open(fp,">$file_name");# オープン
 binmode(fp);# バイナリモード→ファイル
 print fp "$binary_data";# 書込
 close(fp);# クローズ
 
 }
818782:03/09/11 14:21 ID:tAL7swdB
>>817のつづき
 ### テキストデータ ###
 else
 {
 ($null, $name) = split(/name=/,$_);# TAG NAME
 $name =~s /\r\n//;
 $name =~s /"//g;
 $null = <STDIN>;# 空行
 $value = '';
 while(<STDIN>)
 {
 lastif($_ =~ /^$section_line/);# 区切り行でループを終了
 $value .= $_;# VALUE
 }
 $value =~s /\r\n//;
 
 ### タグ別処理 ###
 if($name eq 'title')
 {
 $value = ''if($value eq '');
 $title = $value;
 }
 elsif($name eq 'message')
 {
 $value = ''if($value eq '');
 $message = $value;
 }
 }
 }
819nobodyさん:03/09/11 14:31 ID:???
>>813
そんな面倒なことせんでも・・・
ttp://www.din.or.jp/~ohzaki/perl.htm#NumberWithComma
820nobodyさん:03/09/11 14:34 ID:???
sub foo{
 my $hoge = shift;
 my %hoge = %$hoge;
 $aho = $hoge{'args'}->[0];
}

というサブルーチンに関してなのですが、まず、$hogeにはfooを呼び出した時の
1番目の引数が入りますよね?
で、次の二行目の意味がわからないんですが…。
%$hogeってのは、hogeは何かのリファレンスのハッシュで、それをデリファレンス
しているので、その実体という事ですよね?
それを自分自身に代入しているということは、リファレンスから実体に変換している
という事でしょうか。でもそもそも%hogeは初期化も値の定義もされてないし…。
一行目の変数$hogeと何か関係があるのでしょうか。

それと最後の行なのですが、hogeが配列で$hoge->[0]という文ならば、
hogeはリファレンスの配列で、その0番目の要素をデリファレンスしている、
つまり$ahoにはその実体が入る、と思うのですが、ここではhogeはハッシュだし…。
ハッシュの[0]ってどういうことでしょうか。

アホな質問をしているかもしれませんが、らくだ本とかで調べてもよく分かりませんでした。
教えて頂けるとありがたいです。
821813:03/09/11 15:06 ID:???
>>814 >>819
乙。
とても参考になりました。
822nobodyさん:03/09/11 15:54 ID:???
>>820
sub foo{ # サブルーチンの定義
 my $hoge = shift; # 第 1 引数をローカル変数 $hoge にコピー。
 my %hoge = %$hoge; # $hoge の名前の付いた HASH をローカル変数 %hoge にコピー
 $aho = $hoge{'args'}->[0]; # %hoge の 'args' というキーに格納されているリストの 0 番目の値を $aho にコピー
}

●実際に値を入れて考えてみる。
&foo('heee'); # と呼び出してみる。

sub foo{ # サブルーチンの定義
 my $hoge = shift; # 第 1 引数 'heee' をローカル変数 $hoge にコピー。
 my %hoge = %$hoge; # $hoge の名前の付いた HASH %heee をローカル変数 %hoge にコピー
 $aho = $hoge{'args'}->[0]; # %hoge(=%heee) の 'args' というキーに格納されているリストの 0 番目の値を $aho にコピー
}

こんな感じ?
添削キボンヌ
823nobodyさん:03/09/11 16:09 ID:???
>>822
ハッシュリファレンス期待してるサブルーチンに引数'heee'って
定数つけて呼んでもエラーだろ。

&foo( \%heee );

てか、元投稿、「らくだ本とかで調べてもよく分かりませんでした。」てのがわからん。
824nobodyさん:03/09/11 16:22 ID:alzf5zjT
ファイルのCRC32値を計算するルーチンを
そのへんの資料を使って、

@CRC32TABLE = ( いつものCRC配列 );

$filename = $ARGV[0];
$crc32 = &crc32($filename);

print "$filename\n$crc32\n";

sub crc32 {
my($char) = 0;
my($crc) = 0xFFFFFFFF;
open(FILE,$_[0]);
binmode(FILE);
while(<FILE>) {
for $char ( unpack("C*", $_) ) {
$crc = $CRC32TABLE[($crc ^ $char) & 0xFF] ^ ($crc >> 8);
}
}
return sprintf("%08X",($crc ^ 0xFFFFFFFF));
}

と書いて、動きはするのですが、計算速度がコマンドラインexeツールとかの
100分の1くらいしか出ません。(´・ω・`)
もちっと高速化するにはどのへんをいじるとイイ感じになるんでしょうか?
825nobodyさん:03/09/11 16:38 ID:???
@INC(ライブラリへのパス)関連の質問なんですが、
use strict でstrict.pmを呼び出すプログラムをperl -c で構文チェックすると
以下のようなエラーがでてしまいます。

Can't locate strict.pm in @INC (@INC contains: [/usr/local/lib/perl5/5.00503]/us
r/local/lib/perl5/5.00503 y /usr/local/lib/perl5/site_perl/5.005/sun4-solaris /u
sr/local/lib/perl5/site_perl/5.005 .)

詳しいことはわからないのですが、環境変数PERL5LIBを設定する必要があるのでしょうか
作成したスクリプトにライブラリの位置を明記しなくても、自動的に読みに行くようにしたいのですが
どのように設定したら良いでしょうか?よろしくおねがいします。
826825:03/09/11 16:46 ID:???
追記:
/usr/local/lib/perl5/ 
の中にCGI.pmやstrict.pmが格納されています
827nobodyさん:03/09/11 17:36 ID:???
>>822
うーんとつまり、fooの第一引数はハッシュへのリファレンスで、
一行目で変数$hogeにそれを代入、二行目でローカルのハッシュ%hogeに
$hogeをデリファレンスした物をハッシュとして、つまり第一引数が参照している
ハッシュの実体を代入する、という事でしょうか。
んで%hogeはリストのハッシュで、$aho=$hoge{'args'}->[0];は、キーargsの要素
であるリストの0番目の実体を$ahoに代入する。
…で合ってるでしょうか。

>>823
リファレンス、デリファレンス、矢印演算子を扱ってる8章のあたりを読みなおして
みたのですが、いまいちわかりませんでした。
他にこの章を読んでおけってのがあれば、言ってくださると助かります。
全部読むのが一番良いんでしょうけど。
828nobodyさん:03/09/11 18:38 ID:???
>>827
まあ、リファレンス、デリファレンスってなれないと難しいよね。
でも、らくだ本は読み物としても面白いから全部読むのがいいと思うよ。
複雑なデータ構造作ったり、そのうちオブジェクト指向やる、ってことになたら必須だし。
まあ、もって歩くには重たいけど。
で、単に要素を参照するだけならレキシカル変数 %hoge にコピーする必要ないよね。
もし %$hoge がでかかったらけっこう無駄だし。

sub foo{
 my $hoge = shift;
 $aho = $hoge->{'args'}[0];
}

これで要素をデリファレンスできるわけだから(※矢印位置)
がんばって。
829nobodyさん:03/09/11 20:38 ID:btBR5eg4
perlチェッカー全く使えないね。
すぐにこれが出るよ↓
Missing right curly or square bracket at ore_sub-politics.cgi line 657, at end of line
syntax error at ●●●.cgi line 657, at EOF
これって、どっか()閉じ忘れだぞ〜って言う事なんでしょ。
それがどこか聞いてんのに…。
もっと性能の良い perlチェッカーか、
対処法を教えて下さい。
830nobodyさん:03/09/11 20:48 ID:???
>>829
ふつー閉じ間違いとかしねーよ。はずかしー奴。
どうせきったねー何も考えてないコーディングやってんだろ。
http://perldoc.jp/docs/perl/5.8.0/perlstyle.pod
ここでも読んで自分のソースを全部見直してみろ。
これで腹立って過去の自分をたたき殺したくなったならまだ見込みはあるけどな。
831nobodyさん:03/09/11 21:08 ID:???
>>830
おいおい、ちゃんとスタイルに乗っとって書いてても括弧の閉じ間違いぐらい
するだろ。それとも実行する前にいちいち見直すのか?
インタプリタに渡した方が楽だろ?
832nobodyさん:03/09/11 21:09 ID:???
間違えた
乗っとって→則って
833nobodyさん:03/09/11 21:30 ID:???
>>824
String::CRC32.pm

>>825
PERL5LIBに設定。
しかし、なぜそんな所にstrict.pmが入るのか分からん。
834nobodyさん:03/09/11 21:45 ID:???
>>831
俺も閉じ間違いはよくやるが、
どこで閉じ間違えたかを機械に探させるてのはかなり難問だと思う。
良いアルゴリズムがあったら教えてくれ。
835nobodyさん:03/09/11 22:40 ID:???
かっことかっこの間を畳めるエディタとか使う。
左のガッターに+とか記号つくので、比較的どこで閉じ忘れてるか分かりやすいかも。

最大の難点は・・・
そういうエディタ少ない。
836nobodyさん:03/09/11 22:50 ID:???
>>834
そんなルーチン開発するヒマがあるなら、閉じ忘れを防ぐエディタを開発
した方が生産的だと思うが。

俺はviクローンのshowmatchを使ってるからまず閉じ忘れや括弧の対応間違いは
ないが、そこら辺のエディタにはそういう機能はないのか?
837nobodyさん:03/09/11 22:51 ID:???
>>829はKENTのCGIの文法チェッカとか使っていってそうな悪寒がするのは俺だけか?

サクラエディタはイイよ
838あぼーん:あぼーん
あぼーん
839あぼーん:あぼーん
あぼーん
840あぼーん:あぼーん
あぼーん
841あぼーん:あぼーん
あぼーん
842あぼーん:あぼーん
あぼーん
843nobodyさん:03/09/12 00:25 ID:???
なんで透明あぼーんにしないんだろ・・・
844nobodyさん:03/09/12 01:49 ID:???
>>835
それどこにあるの?
845nobodyさん:03/09/12 01:52 ID:B/YanBzt
CGIスクリプトにブラウザでアクセスすると、永遠に
Content-type: text/html Content-type: text/html
Content-type: text/html Content-type: text/html


って表示されるんだけど、何ででしょう?
出力部分は
print "Content-type: text/html", "\n\n";
  for( &load_format($Format) ){
    s/\$cgi_url/$cgi_url/sg;
    s/\$hoge/$hoge/sg;
    print;
  }
exit;
こんな感じなんですが・・・
846nobodyさん:03/09/12 02:02 ID:???
load_formatの中身は?
847nobodyさん:03/09/12 02:03 ID:???
中華、構文エラーにならない?whileマニなので forあんま使ったこと無いから
良くわかんないんだけど、ごめんね。
848845:03/09/12 02:07 ID:???
sub load_format{
  my $file = shift; # $fileはHTMLフォーマットファイル
  open(FMT, $file) || &error('Failed to open $file: $!)');
    $line = join('',<FMT>);
  close(FMT);
  return $line;
}
load_formatの中身です。
どうでしょう?何か悪いところありますか?
849845:03/09/12 02:08 ID:???
>>847
うん、構文エラーにはならないですよ。
850nobodyさん:03/09/12 02:16 ID:???
試してみましたが、上みたいにループはされないけど、もしかして
print "Content-type: text/html", "\n\n";

exit;
この外側でループさせてる? …のならばそれが問題かも。
851845:03/09/12 02:19 ID:???
>>850
いや、外側でループさせてないですね。

あーもう全然ワカンナイ。
もしかして全く違う部分なのかなぁ。
852nobodyさん:03/09/12 02:22 ID:???
print文をばらまけ
853nobodyさん:03/09/12 02:22 ID:???
>>851
すみません、お役に立てなくてΣ(´△`;
854845:03/09/12 02:28 ID:???
いえいえ。どうもありがとう。
855845:03/09/12 03:13 ID:???
上記の件の報告。
conf.iniっていうファイルをスクリプトの最初でrequireしてたんだけど、
confではなくConfになっていますた。
実際は全小文字のファイル名。
でも、なんでContent...が無限に出るのさっぱりワカランよ。
856nobodyさん:03/09/12 04:06 ID:???
>>847
for()の中にセミコロン( ; )がなかった場合、Perlはforをforeachと解釈します。
この場合、スカラー値なので、

for(load_format($Format)){
 ...処理
}

は、

{
 local($_);
 $_ = load_format($Format);
 ...処理
}

の短縮形のように使われることがあります。s///とか変数名が省略できて便利だから
という理由。LarryらしいっちゃLarryらしい仕様。

>>845
コード自体に問題はないから、その外側に問題があるんだと思う。
というか、普通requireに存在しないファイルを入れたらコンパイルエラーが返ると思う
んだが、Windows環境かなにか?
そうでないとすれば、そもそも問題視してるファイルが違うという可能性も。
857nobodyさん:03/09/12 04:43 ID:???
>>848
errorの中身は?
858あぼーん:あぼーん
あぼーん
859あぼーん:あぼーん
あぼーん
860あぼーん:あぼーん
あぼーん
861あぼーん:あぼーん
あぼーん
862あぼーん:あぼーん
あぼーん
863あぼーん:あぼーん
あぼーん
864あぼーん:あぼーん
あぼーん
865nobodyさん:03/09/12 06:29 ID:???
なぁコピペヲタクよ。勉強してんのか?
今のままなら、なーんも進歩せん糞人間だな。
ちったぁレベル上げろよ。
866nobodyさん:03/09/12 06:34 ID:???
>>865
ギャラリーの存在を意識させてどうする。
867nobodyさん:03/09/12 06:35 ID:???
せめてAA自作にしろよ(w
868nobodyさん:03/09/12 06:44 ID:???
>>866
削除依頼をしているだけでも十分意識させていると思うよ。
869nobodyさん:03/09/12 07:35 ID:???
次の質問をどうぞ↓
870nobodyさん:03/09/12 07:41 ID:???
Perlってどこで売られているの?
871nobodyさん:03/09/12 09:48 ID:SXvUVZeg
宝石売場
872nobodyさん:03/09/12 10:29 ID:???
>>820の質問をしたものです。追加の質問をさせてください。

sub foo{
 my $hoge = shift;
 my %hoge = %$hoge;
 $aho = Jcode->new($hoge{'args'}->[0], 'jis')->euc;
 print FH $aho . "\n";
}

このように、Jcode.pmを使って、jisの文字列をeucに変換してファイルに出力したいのですが、
ファイルを開いてみると、sjisのファイルだと言われ、さらに文字化けしています。
print $hoge{'args'}->[0];してみると、文字列が表示されるので、
$hoge{'args'}->[0]は文字列へのデリファレンス、つまりeucへの変換の部分は
合ってるのではないかと思うのですが…。
どこが間違ってるのでしょうか。

Jcodeのマニュアルです
http://perldoc.jp/docs/modules/Jcode-0.82/Jcode.pod
873nobodyさん:03/09/12 11:07 ID:b/GH9I9g
>>872
問題ないけど。
元コードを jis って明示してるけど間違いない?
874nobodyさん:03/09/12 11:41 ID:???
getcodeしてきました。JIS(ISO-2022-JP)で間違いありません。
875nobodyさん:03/09/12 11:47 ID:???
あと、関係ないかもしれませんが、

$aha = foofoo($aho);
print $aha;

sub foofoo{
 return $_;
}

というのを追加しても、何も表示されませんでした。
やっぱりJcodeの部分に問題があるんでしょうか。
でもそれだとprint $aha;で文字化けした文字列が表示されてもいいような…。
876nobodyさん:03/09/12 12:01 ID:???
>>875
return $_[0];
じゃねえの?
てか、これで何調べてるのかわからんけど。
877nobodyさん:03/09/12 12:31 ID:???
>>876
直したら正常に表示されました。
けど、$ahoには文字列の実体が入ってるんですよね?
つまりfoofoo("hogehoge");とfoofoo($aho);は同じなので、$_と書いたのですが…。
878nobodyさん:03/09/12 12:52 ID:???
>>877
言ってることがわかりません。
サブルーチンは引数を何個だろうが @_ という配列で受け取ります。
$_ ってどっから来たの?
もちっと落ち着いて勉強したら?
879nobodyさん:03/09/12 13:32 ID:???
>>877
あれれ、そうでしたか。
考え違いをしてました。済みません…。
で、なぜに>>872は化けるのでしょうか…。
880nobodyさん:03/09/12 13:55 ID:???
>>879
知らん。
以下jisでスクリプト保存してコンソールで実行。
hoge.datには「それ」がEUCで保存された。化けません。
RedHat 7.3
This is perl, v5.6.1 built for i386-linux
なので再現しない以上わかりません。
---
use strict;
use Jcode;

my $hoge = {
   kore => ['これ', 1 ],
   sore => ['それ', 2 ],
   are => ['あれ', 3 ],
   dore => ['どれ', 4 ],
};
open FH, ">hoge.dat";
&foo($hoge);
close FH;

sub foo{
   my $hoge = shift;
   my %hoge = %$hoge;
   my $aho = Jcode->new($hoge{'sore'}->[0], 'jis')->euc;
   print FH "$aho" . "\n";
}
---
インデントは全角×3
881nobodyさん:03/09/12 14:17 ID:???
Perlのバージョンは?
882あぼーん:あぼーん
あぼーん
883あぼーん:あぼーん
あぼーん
884あぼーん:あぼーん
あぼーん
885あぼーん:あぼーん
あぼーん
886nobodyさん:03/09/12 15:36 ID:???
割り込んでみる
887あぼーん:あぼーん
あぼーん
888あぼーん:あぼーん
あぼーん
889あぼーん:あぼーん
あぼーん
890nobodyさん:03/09/12 15:45 ID:???
5.6.1です。
print getcode($aho);
とすると、eucと表示されてるのに、出力されたファイルをテキストエディタで開くと
sjisと認識される上、文字化けてます。
$event{'args'}->[0]が'ほげ'であった場合、ファイルには'、ロ、イ'と出力されています。
なんでできないんだろう…。
891nobodyさん:03/09/12 15:50 ID:???
>>890
??
それで正しいよ
、ロ、イ <- 半角カナも“、”という記号も文字として存在するんだから
テキストエディタがSJISと判断してもしかたがないんじゃ?
EUCとしてひらけばよし
892nobodyさん:03/09/12 15:50 ID:???
>>890
> 出力されたファイルをテキストエディタで開くと
> sjisと認識される上、文字化けてます。

これってさ Perl のコーディングがどうこうじゃなくて、
エディタの問題でしょ?

エディタでファイル開いたときに文字コードの判別が
うまくいかずにデフォルトのsjisでオープン。
EUCで書かれている文字はもちろん文字化け
893nobodyさん:03/09/12 16:16 ID:???
まさかエディタ==Windowsメモ帳ってオチじゃないだろうな。
894nobodyさん:03/09/12 16:24 ID:???
マジっすか。
xyzzyを使ってるんで、文字コードは自動認識してくれると思うんですが…。
コーディング自体はあってるんですか…。
895nobodyさん:03/09/12 18:18 ID:???
>>894
なんだよそれ、
明示的にEUCで開く、ってこともしないで聞いてたのかよ。
だから最初に「問題ない」って言ってるじゃんよ。
896nobodyさん:03/09/12 18:23 ID:???
質問です。

掲示板への書き込み時にホスト名が引けない人が書き込みができないように
規制をしています。
その中で一部の人だけ、書き込みができるように設定しています。

@ok_people=('xxx.xxx.xxx','xx.xx.xxx'); #書き込みOKな人のIPアドレス

foreach(@ok_people){
unless($remote_addr=~ /^$_/){
unless($remote_host){ print "ホスト名引けないエラー"; }
}
}

なぜかこれでは書き込みOKな人もはじかれます。なぜでしょうか?

また、もっとスマートな書き方があるように思うのですが、うつくしい書き方が
あったら、教えて頂ければと思います。

よろしくお願いします。
897nobodyさん:03/09/12 18:38 ID:???
ループも自分で展開しておっかけてみればわかるよ
これで動くのは、@ok_people に1つしか登録して無い時だけじゃないか?
898nobodyさん:03/09/12 19:11 ID:???
>>897 さん
今色々試して調べてみました。
やっとわかりました。

1回目はいいけど、2回目に引っ掛かるのですね。
どっかでループをぬける処理を作れば良さそうですが、あまりそういうコーディングは
良くないとどこかで聞いたことがあるような...

もうちょっと頑張ってみます。
ありがとうございました。
899nobodyさん:03/09/12 19:22 ID:???
配列を検索する方法もいくつかあるが、
ハッシュにして一発で持ってくれば
ループもいらんのでは
900lopper:03/09/12 19:23 ID:ygMK1YTV
UDP を受信するスクリプトを書いているのですが、ちょっと質問です。
UDP って基本的にコネクションレスなので「送信元が、どこに宛てて」送信
したか分からないですよね。

UDP でパケットを受信した時に「宛て先」が分かるようには出来ないのでしょうか?
送信元は recv の戻り値で分かるのですが・・・
901896:03/09/12 19:39 ID:???
プロな方はよくハッシュを使いますよねぇ。
でも、ちょっと何とIPアドレスを関連づけたハッシュを作ればいいか...

if (exists($hash{"xxx.xxx.xxx"}))

っぽい気がするんですが、これでできるかなぁ。
902896:03/09/12 19:40 ID:???
プロな方はよくハッシュを使いますよねぇ。
でも、ちょっと何とIPアドレスを関連づけたハッシュを作ればいいか...

if (exists($hash{"xxx.xxx.xxx"}))

っぽい気がするんですが、これでできるかなぁ。
903nobodyさん:03/09/12 19:44 ID:???
$hash{"xxx.xxx.xxx"} = 1
とか良くやるよ。値は何でもいい。
904nobodyさん:03/09/12 20:23 ID:???
%ok_people = map { $_=>1 } @ok_people;

&error unless ( exists $ok_people{$ip} );

こんな感じか。
905nobodyさん:03/09/12 20:28 ID:???
コピペヲタクから返事があった。ちょと嬉しかった(w
ゲ製作技術板 http://pc2.2ch.net/gamedev/ でも逝って、ゲームプログラムとはなんたるかを勉強してこい。

そもそも、ゲームの類は色々な手法のかたまり、アルゴリズムの真骨頂。
いきなりゲームを作る!とかぬかす厨はその奥の深さを噛みしめてこい。
906896:03/09/12 20:56 ID:???
>>903,904
うーん、かなり短くできるのですねぇ。
ちょっと今は理解できないので、本を読んで理解してみます。

本当にありがとうございました。
907896:03/09/12 22:09 ID:???
>>904
やっと意味がわかりました...。

この場合だと、IPアドレスが完全に一致する場合でないとエラーならないようですが、
勉強になりました。

リモートのIPの下3桁をけずれば、いけそうです。
ありがとうございました。
908nobodyさん:03/09/12 23:20 ID:???
マスクつきならちゃんと書いたほうがいいと思うよ
909904:03/09/13 01:25 ID:???
# @ok_people には、許可するIPを示す正規表現を入れる。
# 例)@ok_people = ( '\d+\.\d+\.\d+\.21' );
&error unless ( grep { $ip =~ /$_/ } @ok_people );

TMTOWTDI.
……まあ、俺は一行で済むのが好きなだけなんだが。
910nobodyさん:03/09/13 03:11 ID:???
>>896
先頭一致なら index を使うが吉。

@ok_people = qw(192.168.0. 43.244.);
defined $remote_host or print "ホスト名引けないエラー"
  unless grep index($remote_addr, $_) == 0, @ok_people;
911nobodyさん:03/09/13 07:35 ID:Eo0kRzpR
BBSのログファイルの仕様をどのようにするか迷っています。
ログファイル中ではメッセージ一件を一行で保存するものとします。

・案1 メッセージを古い順にファイルに保存する。
新規メッセージを追加書き込みするとき、ファイルの最後に追加するだけだから高速なはず。
最新メッセージを10件表示したいとき、ファイル後半の10行までファイルを辿っていく必要があるので遅くなる気がする。特にログが巨大になったとき。

・案2 メッセージを新しい順にファイルに保存する。
新規メッセージを追加書き込みするとき、ファイル中の既存のメッセージログを変数とかに一旦格納してから、新メッセージ書き込み、既存メッセージ書き込みをする。ログが巨大になったら処理が重くなる気がする。
最新メッセージを10件表示したいとき、ファイルの先頭の10行を読めばいいから高速なはず。

上記のどちらにしても、書き込み、読み込みのどちらかに負担がかかる気がします。
なにかうまい方法があれば助言お願いします。(定石があったりするのでしょうか。)
912nobodyさん:03/09/13 07:53 ID:f365Tbyt
DB_File(使えればMLDBMかまして)
ハッシュにtieさせて使うので好きなデータを好きなだけ持ってけ
913nobodyさん:03/09/13 08:04 ID:???
俺なら案1をとるけど。なぜなら排他失敗してログが飛ぶ心配がないから。
ファイルが巨大になると読み込みに時間がかかるというが、実際相当でかくならない
限りはその心配はいらんのでは?
なんなら1000件毎にファイルを別に用意するとか。
914911:03/09/13 08:36 ID:Eo0kRzpR
>>912, 913
なるへそ。

912さんのはよくわからないので調べてみます

ありがとっす。
915nobodyさん:03/09/13 08:57 ID:???
>新規メッセージを追加書き込みするとき、ファイルの最後に追加するだけだから高速なはず。
これについては、投稿時のみの事だから、そんなに気にしなくても良いと思うけど。
916nobodyさん:03/09/13 08:58 ID:???
2chみたいに、書き込みが物凄い量なら話は別だが…。
917nobodyさん:03/09/13 09:18 ID:???
>>912に一票。
use Fcntl;できれば、面倒くさいロックも考えなくてすむし、
ログが巨大になっても、データベースへのアクセスにかかる手間はほぼ変わらないし。
ログを直接読まれる可能性も減る。
918nobodyさん:03/09/13 11:14 ID:???
>>917
中途半端な量だとDB使う方が遅くなるけどね…
919nobodyさん:03/09/13 13:21 ID:???
>>917,912
DBMファイル直接ダウンロードできてしまうサーバも多いのは、気にしないの?
ついでに、DBMファイルとの接続は、普通のテキストファイルに比べて、3倍〜10倍の時間がかかるのも気にしないの?
おまけに、1件(テキストファイルなら行)あたりの読込み速度が数倍かかるのも気にしないの?

基本的にDBMファイルは横着なプログラミングに便利な予感。
920nobodyさん:03/09/13 13:28 ID:rYbAvmZJ
$a、$b、$c、$d、$e が2以上の時と指定したいんですが、
$a>=2&&$b>=2&&$c>=2&&$d>=2&&$e>=2
だと長いんで、もう少し短くは出来ないでしょうか?
921nobodyさん:03/09/13 14:11 ID:???
>>911
一定数のレスポンスでログをローテートさせた方がいいよん。

>>920
配列にできないかとか、$a >=2 と $b >= 2 をあらかじめどこかで評価しておくとか、
$dと$eはどっちか一つの評価でいいのかもとか、設計から見直してみる。
922nobodyさん:03/09/13 14:15 ID:???
>>920
unless (int(($a+$b+$c+$d+$e)/2) < 5) { 処理; }
923nobodyさん:03/09/13 14:27 ID:???
>>922
$a=10;
$b=$c=$d=$e=0;

int(($a+$b+$c+$d+$e)/2) == 5;
924nobodyさん:03/09/13 15:53 ID:???
>>920
長くなるけど、エレガントにこんなんとか。

my $func_cheker = sub {
  foreach (@_) { return 0 if not ($_ <= 2); }
  return 1;
};

my $msg;
if ( not &$func_cheker(1, 2, 2, 5, 1, 1, 2) ) {
  $msg = "2 以上の値が混じってま\n";
} else { $msg = "OK\n"; }
print $msg;
925nobodyさん:03/09/13 16:03 ID:???
$a>=2&&$b>=2&&$c>=2&&$d>=2&&$e>=2

これでええやん…
926912:03/09/13 16:15 ID:f365Tbyt
選択支の一つとして出しただけ。
ケースバイケースで使い分けてるよ。
で、読んでるとDBMやたら遅いように感じるけど、データ読み込んでHTML展開するうちのファイルアクセス部分はその何分の一だから、体感的にはそこまでの差は感じないけど、
気にするならTEXTでもいいでしょ。
それも設計に因るでしょうけど。
927nobodyさん:03/09/13 22:27 ID:???
掲示板等のログを更新する場合、
もしかして一旦ファイルを読み込んで閉じ、
その後処理を加えた後で再度上書きモードで開いて書き込まないと駄目なのですか?

オープン→ロック→処理(ログ記事数調節とか)→書き込み→クローズ
と言う流れでやろうとしたのですが無理でした…。
<$logfile だと書き込めないし、
>$logfile だと開いた瞬間ログの内容消えてる(と言うかそもそも読み込まない?)しでなんとも。
928nobodyさん:03/09/13 23:06 ID:???
>927は+<で開く事で自己解決しました。

参考: ttp://www98.sakura.ne.jp/~jun/perl/flock.html
929あぼーん:あぼーん
あぼーん
930あぼーん:あぼーん
あぼーん
931あぼーん:あぼーん
あぼーん
932あぼーん:あぼーん
あぼーん
933あぼーん:あぼーん
あぼーん
934あぼーん:あぼーん
あぼーん
935あぼーん:あぼーん
あぼーん
936あぼーん:あぼーん
あぼーん
937あぼーん:あぼーん
あぼーん
938nobodyさん:03/09/14 10:55 ID:???
DBMで二次元ハッシュ使えるモジュールってある?
939nobodyさん:03/09/14 11:30 ID:???
>>938
Perlモジュールについて
http://pc2.2ch.net/test/read.cgi/php/997829243/
940(;´Д`) ◆1SanV138VQ :03/09/14 15:17 ID:???
スレッドストッパーの文ってどこかにある?
941nobodyさん:03/09/14 15:31 ID:NTDmuCBE
>>940
ぐぐれ。「書けませんよ」も追加すると吉
942 ◆1SanV138VQ :03/09/14 15:39 ID:???
スレストってどうやって作るんだ?
だいたいは思い浮かんでるんだが、どうもうまくいかない
943nobodyさん:03/09/14 15:42 ID:???
673 名前: 停止しました。。。 :停止 投稿日: 停止
真・スレッドストッパー。。。( ̄ー ̄)ニヤリッ
944nobodyさん:03/09/14 15:43 ID:???
一つ前のレスの投稿日が「停止」になってたら書き込み処理しない、でいいじゃん
945PHP ◆phpTbz4HqM :03/09/14 16:28 ID:???
>>944
なるほど・・・・・・・・・
946あぼーん:あぼーん
あぼーん
947あぼーん:あぼーん
あぼーん
948あぼーん:あぼーん
あぼーん
949あぼーん:あぼーん
あぼーん
950あぼーん:あぼーん
あぼーん
951あぼーん:あぼーん
あぼーん
952あぼーん:あぼーん
あぼーん
953937:03/09/14 17:36 ID:???
>>946-952
やっぱりコイツバカだ。藁。

以後放置します。スマソ。>住人様
954nobodyさん:03/09/14 17:43 ID:???
>>953
やっぱりも何もそんなこと初めからわかってる
香具師の気が静まるまで黙ってろ
955nobodyさん:03/09/14 18:09 ID:???
>>953
あのな、荒らしのカキコに対してはレスアンカーつけないのが基本
956nobody ◆2chGAUCATE :03/09/14 18:21 ID:???
結構初心者ですけど、
入力した文字を送信して
その文字を表示させるのってどうやってやるの?
入力欄は名前やE-mailを入力する欄と同じに
957nobodyさん:03/09/14 18:57 ID:???
>>956
本を読むか、>>1を読む
958nobodyさん:03/09/14 20:19 ID:???
しかし、内容見ると、洒落にならないかもしれないけど
本トの精神病患者かなにかかもしれなんな。<コピペ荒らし
書き込み時間も引き篭もりっぽいし。
他の言語信者のレベルじゃないよ。これを一緒にしたら他の言語信者に申し訳ない。
959nobodyさん:03/09/14 20:25 ID:???
この馬鹿、なんで暴れ出したんだっけ?
960 :03/09/14 20:27 ID:???
さぁ、、
誰かが過剰にかまったんじゃないの
961nobodyさん:03/09/14 21:51 ID:???
937もしっかりと削除されているw
962nobodyさん:03/09/14 23:00 ID:???
>>958
いや、これは異常すぎるだろう。cronか何かでやってるんだろうよ。
963nobodyさん:03/09/14 23:16 ID:???
>>962
そんな知識があるとは思えない。
964*:03/09/15 00:04 ID:???
>>865 = >>905 = >>958
お前がかまうからつけあがってんだよ。
こんなアホから返事もらって喜んでんじゃねーぞ。
965nobodyさん:03/09/15 00:05 ID:???
尻の穴が生意気な・・
966nobodyさん:03/09/15 00:13 ID:???
幾ら無視しても精神病じゃこの粘着も無理ないな
967nobodyさん:03/09/15 00:16 ID:???
どこが無視してるんだ?
968nobodyさん:03/09/15 02:17 ID:???
ところで、俺は通例>>950を取った奴が次スレを立てるもんだと思ってたが、
今回は、>>950がアレだったので、そういう行動は期待できない訳で。

あれか? かわりに>>960くらいにやってもらうのがいいのか?
969nobodyさん:03/09/15 02:23 ID:???
>>968
なぜまず自分から立てようとしないのか理解に苦しむ。
970nobodyさん:03/09/15 02:23 ID:???
次スレは1ヵ月後に立てる。
971nobodyさん:03/09/15 02:30 ID:???
>>962
ちゃんとセリフも的確に変わってるよ。cronなわけない。

>>959
確か、質問した(つもりだった)けど誰も答えてくれなかった(と思い込んでる)からじゃなかったかな。
日本語が意味不明で誰も質問の意味が分からなかったから答えようがなかった。
元々頭おかしいんだよ彼は。
972nobodyさん:03/09/15 03:11 ID:???
http://pc2.2ch.net/test/read.cgi/php/1063562491/

荒らしに埋められそうな気がしたので自信ないけど新スレたてました。
いちお生存チェックはしてます。

あ、あと荒らしに対するコメントも荒らし行為と見なされるので、
次スレでは荒らしさんは完全黙殺・完全スルー・見なかったこと・でお願いします。
973nobodyさん:03/09/15 03:40 ID:???
もう削除依頼も止めておいた方がいいんじゃないか?
どうもあぼーんになることを喜んでいるみたいだ。
透明削除してもらえるタイミングなら削除依頼、
そうでなければ放置というスタンスはどうか。
974nobodyさん:03/09/15 03:42 ID:???
>あぼーんになること
「あぼーん」という表示になること

「あぼーん」レスが残ってしまうと「荒らせた」という満足感が出るのではないかと。
975nobodyさん:03/09/15 03:48 ID:???
>>973
依頼してすぐに削除されるわけじゃないから透明になることはほとんどないと思う。
削除対象以降へのレスアンカーがあったら透明にはならないんだろ?(ずれるから)

「削除依頼はしない」に同意。
削除依頼することも荒らしの相手をすることになるよ。うざいと思ったら2ch専用ブラウザでも使って自分で削除。
976nobodyさん:03/09/15 03:56 ID:???
>>973-975
http://qb.2ch.net/test/read.cgi/sakud/1062352138/125にレスを書いておいた
板違い議論なので、以降は削除議論板でよろ。
977nobodyさん:03/09/15 03:59 ID:???
依頼を続けるほうに一票
運用板で見かけたけどあまりしつこく繰り返している荒らしは
削除人から規制の依頼が出ることもあるようだし
978nobodyさん:03/09/15 04:10 ID:???
>>977
板違い。>>976へ行け。
979nobodyさん:03/09/15 10:08 ID:???
$url='http://www.google.co.jp/search?q=2ch&ie=UTF-8&oe=UTF-8&hl=ja&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=';
$src='^http://www.google.co.jp/search.*?q=([^&]*).*';
$dst='Google検索「$2」';
$url=~s/$src/$dst/e;

元のURLから"Google検索「2ch」"という文字列に変換したいのですが、
変数$dstの中の$2が変換されずそのまま出力されてしまいます。
うまく$2も変換する方法はありませんか?
980nobodyさん:03/09/15 10:11 ID:???
>>979
$dst="Google検索「$2」;

どうでもいいけど$2はちゃんと値はいってんだろうな?
981nobodyさん:03/09/15 10:11 ID:???
ごめん。
$dst="Google検索「$2」";
982979:03/09/15 10:27 ID:???
>>980
「$1」です。すいません。
983nobodyさん:03/09/15 11:01 ID:???
>>979>>982
あ、読み間違えてた。
そりゃムリだろ。多分。
984nobodyさん:03/09/15 11:11 ID:86NIgzh2
perl で print_hogehoge みたいな関数を定義します。
引数は 0 または 1 個で、0 個のとき標準出力に 1 個のとき引数の持つ名前のファイルに、
同一の内容を書き出します。
print (OUT "hogehoge");
として一緒に処理するためには、STDOUT を OUT に代入する(?)必要がありそうですが、
どうすればよいのでしょうか?
よろしくお願いします。
985984:03/09/15 11:19 ID:86NIgzh2
とりあえず、STDOUT に出力するようにして、引数がある場合には、
open(STDOUT, "@_[0]);
としたら、うまくいきました。
いいのかな?こんなんで。
986984:03/09/15 11:22 ID:86NIgzh2
いや、やっぱうまくいってないっす。
ファイルに書き出したい場合も、標準出力にでてました。
解決法探しています。よろしくお願いします。
987nobodyさん:03/09/15 11:22 ID:???
>>984
sub print_hogehoge {
  my $out = shift || '&STDOUT';
  local *OUT;
  open OUT, '>' . $out or error();
  ...
988nobodyさん:03/09/15 11:42 ID:???
>>956
どこに送信したいのか良くわからんが、

-- HTML
<head><meta http-equiv="content-type" content="text/html; charset=euc-jp"></head>
<body> 
<form action="./cgi-bin/output.cgi" method="POST">
<input name="name" value=""><input name="mail" value=""><input type="submit">
</form>
</body>

-- Script
#!/perl/bin/perl
use CGI;
$cgi = new CGI;
my $name = $cgi->param("name");
my $mail = $cgi->param("mail");
print <<"HTML";
Content-Type: text/html; charset=euc-jp

<head><meta http-equiv="content-type" content="text/html; charset=euc-jp"></head>
<body> 
<dl><dt>名前</dt><dd>$name</dd></dl>
<dl><dt>メール</dt><dd>$mail</dd></dl>
</body>
HTML

これでどうだ?
989984:03/09/15 11:43 ID:86NIgzh2
解決しました。ありがとうございました。
990nobodyさん:03/09/15 12:07 ID:???
>>988 誤爆?
991nobodyさん:03/09/15 12:22 ID:???
>>990
漏れの、2chブラウザのレス番号がずれずれだったらしく、
書き込むまで、>>957-987の書き込みが読めなかったの。
すまんこ。
992nobodyさん:03/09/15 12:30 ID:???
>>979
$dst='\'Google検索「\'.$1.\'」\'';
$url=~s/$src/$dst/ee;
993nobodyさん:03/09/15 12:47 ID:???
組み込み関数のリファレンスはどうやって取得すればよいのでしょうか?

my $print_direct = \print;       # (1)
my $print_wrap  = sub { print(@_); }; # (2)

&$print_direct("test", "\n");      # Not a CODE reference at ...
&$print_wrap("test", "\n");       # OK

やはり、ラップ(2)するのが適当でしょうか?

993 get
994979:03/09/15 14:05 ID:???
>>992
期待通りの結果を得られました。有り難うございます。
995993:03/09/15 15:03 ID:???
ageてみよう。
996nobodyさん:03/09/15 16:05 ID:???
次スレ壊れてない?
997nobodyさん:03/09/15 16:32 ID:???
透明あぼーんで11レスになったけど2chブラウザが検出しないな
998nobodyさん:03/09/15 16:34 ID:???
subject.txtが更新されてないみたいだ
最近たまになるよな
999nobodyさん:03/09/15 17:05 ID:???
>>993
無理にでもエイリアスを使いたいなら、Filter::Simpleでいけると思う。
(使ったことない。。)

なぜ使いたいかが分からないけど。
1000nobodyさん:03/09/15 17:21 ID:???
それはそうと 1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。