【Perl 】初心者コーナーPart5

このエントリーをはてなブックマークに追加
1名無しさん@お腹いっぱい。
初めて来た方、初心者はまずこのスレッドから始めよう。
尋ねる前に同じ質問がないかこのスレや旧スレ、及び>>2のリンクを一通り見てみよう。
案外答えはもう書かれているかもしれない。
2名無しさん@お腹いっぱい。:2001/05/01(火) 23:42 ID:???
[関連スレッド]
Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087
Part3 http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521
Part4 http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156
【Perl,CGI】参考書籍 http://tako.2ch.net/test/read.cgi?bbs=perl&key=970166109

[総合]
□Perl Com: http://www.perl.com/pub/
□CPAN.com: http://search.cpan.org/
□ActivePerl: http://www.activestate.com/

[お薦め]
 ・Perl Recipes: http://www.effectiveperl.com/recipes/
 ・Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
 ・Randal's WebTechniques columns: http://www.stonehenge.com/merlyn/WebTechniques/
 ・Perlの部屋: http://www.cc.rim.or.jp/~midorin/mad-p/perl/index.html

[Module]
 ・Perl Module Reference: http://www.bekknet.ad.jp/~bero/docj/module/
 ・PPMPackages: http://www.activestate.com/PPMPackages/
 ・河馬屋二千年堂's Page: http://member.nifty.ne.jp/hippo2000/index.htm

[Document&Tutorial]
 ・Perl News: http://www.news.perl.org/
 ・Perl Monks: http://www.perlmonks.org/
 ・PerlMonth - Online Perl Magazine - : http://www.perlmonth.com/index.html
 ・use Perl All The 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.html
 ・Beginning Perl Tutorials: http://www.pageresource.com/cgirec/index2.htm
 ・jcode.pl の私的な解説書: http://www.mikeneko.ne.jp/~lab/kcode/jcode.html
 ・Perl for Newbie: http://www.harukaze.net/~mishima/perl/index.html
 ・Logical Choice Software, Home Page: http://www.logsoft.com/perltips/
 ・Perlfect Solutions: http://perlfect.com/
 ・The Perl Archive : http://www.perlarchive.com/
3名無しさん@お腹いっぱい。:2001/05/03(木) 22:32 ID:HAK5ITOE
age
4名無しさん@いつも空腹:2001/05/05(土) 09:33 ID:???
鯖移転したのかな?
本当にPart5はここでいいのかな?
最近はトップページ(インデクス)見てないからわからな〜い(はあと
5名無しさん@お腹いっぱい。:2001/05/05(土) 16:42 ID:xlcP2XLA
小数点の含まれる引き算を行なうと、たまに0.000000000000001の
誤差が出ることがあります。
10.45-9.55の答えが0.899999999999999とかになるのですが、
どなたかこの現象の原因と解決法をご存知ないでしょうか?
6名無しさん@お腹いっぱい。:2001/05/05(土) 18:15 ID:???
>>5
いい所に気がついた。
長くなるので原因については割愛。

解決法は幾つかあるが、簡単なのは(s)printfだな。

printf '%.2f', 10.45 - 9.55;

$d = sprintf '%.2f', 10.45 - 9.55;
print $d;
7名無しさん@お腹いっぱい。:2001/05/05(土) 20:27 ID:???
>>6
カコイイ。。。
有能な回答者はコテハン化きぼーん!
85:2001/05/05(土) 23:02 ID:???
>>6
ありがとうございます。
とりあえずなんとかなりました。

後学の為に原因も知っておきたいのですが
どこかにそれを記載している場所などを
ご存知でしたら教えていただけないでしょうか?

重ねての質問申し訳ありません。
9名無しさん@お腹いっぱい。:2001/05/06(日) 00:14 ID:???
>>8
たとえばここ。
http://www.sail.t.u-tokyo.ac.jp/~aida/cp97/971219.html
Googleで「浮動小数 計算誤差」とか入れて検索すればわらわら
見つかる。
106:2001/05/06(日) 00:23 ID:???
>>8

原因を一言でいうと「Perlの内部では数値は文字列として格納されているわけではない」って事だな。
変数に型のある言語(Cなど)を扱っていれば理解しやすいし、教えやすいのだろうが
あいにくPerlオンリーな俺に分かりやすく詳しい説明は無理だ。スマソ。

だが「後学の為に知っておきたい」という意欲があるのならラクダ本でも買ってみたらどうだろうか。
浮動小数点数の精度については少ししか載っていないが、損はしないと思うぞ。

代わりといっちゃなんだが>>5の別の方法
>>6の他に標準モジュールのMath::BigFloatを使うという手がある。
これなら精度は無限だ。
#!/usr/bin/perl
use Math::BigFloat;

$a = Math::BigFloat->new(10.45);
$b = Math::BigFloat->new(9.55);
$c = Math::BigFloat->new('0.123456789');#小数点以下が長い場合は文字列としてnewに渡す

print $a - $b, "\n"; #".9"
print $a + $b + $c. "\n"; #"20.123456789"

__END__



>>7
ヘタレをおだてないでくれ(w;
コテハンはJapuさんや_gunzipさんくらいにならんとな・・・。
115:2001/05/06(日) 02:03 ID:???
>>10
丁寧な解説ありがとうございます。
ラクダ本に載っているのは知りませんでした。
まだ途中までしか読めていないので。
これから頑張って続きを読んでいきたいと思います。
本当にありがとうございました。
12名無しさん@お腹いっぱい。:2001/05/08(火) 15:31 ID:Ngqkrj.g
すいません、教えてください
入力フォームからデータを受け取ってPostgreSQLにデータを渡す際に日本語は
文字化けしてしまいます。
どのようにしたらいいのでしょうか?
13名無しさん@お腹いっぱい。:2001/05/08(火) 16:22 ID:???
>>12
URIエスケープってオチは無いよな?
14nanasy:2001/05/08(火) 16:24 ID:MgnUxoZo
連想配列のサイズの制限は?

いまは、なんでもかんでも連想配列に放り込んでいる(だって、便利だもん)んだけど、
将来的には、データサイズが大きくなりすぎたら、自動的にSQLのDBとかを叩く、みたいな
仕様を考えてます。
で、質問。
連想配列(にかぎらず、PERLの変数全般)に、サイズのリミットをかけることは
可能ですか?

# 心配しなくても、仮想記憶が解決してくれるよ、ってのはナシ。
15名無しさん@お腹いっぱい。:2001/05/08(火) 16:28 ID:???
>>14
サイズ=キーの数って意味なら
擬似ハッシュというものがある。
通常のハッシュより遅いけどな。

データサイズが大きくなりすぎて困るってのなら
DB_Fileを使うという手もあるぞ。
16名無しさん@お腹いっぱい。:2001/05/08(火) 16:33 ID:???
追記

Perlの変数にサイズを設ける事は、可能。
tie()を調べよ。
1712:2001/05/08(火) 17:07 ID:Ngqkrj.g
フォームからの入力を受け取る

EUCに変換

insert into * values (hoge,hoge2);

(゚д゚)ダメダコリャ

という感じなのですが
18名無しさん@お腹いっぱい。:2001/05/08(火) 17:40 ID:???
>>17
その文から想像するに
#--
$query = $ENV{QUERY_STRING}
or
read STDIN, $query, $ENV{CONTENT_LENGTH};
$query = Jcode->new($query)->euc;
#--
とでもやってるのか?
そりゃダメだわ(藁
19名無しさん@お腹いっぱい。:2001/05/08(火) 17:41 ID:???
表示は文字コード何?

フォーム(Shift_JIS)

EUC-JPに変換

DBに入れる

表示(Shift_JIS)

とかDBから表示の際に文字コード変換してないとか言うオチじゃない?
もしくは半角カナ入れてるとか。
2012:2001/05/08(火) 18:13 ID:Ngqkrj.g
>>18さん>>19さんありがとう
>>19さんのご指摘の通りでした、修行しなおしてまいります。
半角はさすがに。。。
21名無しさん@お腹いっぱい。:2001/05/13(日) 12:01 ID:/ewKYqPQ
どなたか教えてください。
yomikomi.txtというテキストファイルにデータが
一行に一つずつ入っています。何個データが入ってるか判りません。
それを配列に入れて、とりあえずランダムで要素を一つだけ選びました。(kazu1)
もう一つ配列の中からランダムで選びたいです。
ただし、先に選んだkazu1以外の要素にしたいです。(kazu2)
↓のようにやってみたのですが上手くいきません。

#yomikomi.txtを@nyuuryokuという配列にする
open (KENSAKU,"<yomikomi.txt");
$count = 0;
while ($nyuuryoku[$count] = <KENSAKU>){
chop $nyuuryoku[$count];
$count = $count + 1;
}
close (KENSAKU);

#とりあえず、ランダムで要素を一つ選ぶ
srand();
$kazu1 = int (rand($count));

#もうひとつ、ランダムで要素を選ぶ
srand();
rand;
$kazu2 = int (rand($count));

#選んだ要素(kazu1 と kazu2)が同じならkazu2を選びなおす
while (kazu1 == $kazu2){
rand;
$kazu2 = int (rand($count));
}

#表示して確認。※ここで$kazu1とkazu2がそれぞれ違っていれば
#良いのですが同じになってしまいます。
print "$count ←要素数\n";
print "$kazu1 ←kazu1\n";
print "$kazu2 ←kazu2\n";
exit;
2222世紀を目指す名無しさん:2001/05/13(日) 13:23 ID:tI0gSNbQ
http://chat.gaiax.com/ここのチャットには
「プライベートチャット」なるjavaでできた他人には見れない会話システムがあるのですが、
これらを全て丸見えに出来る方法があると聞きました。
これは本当ですか?あったら教えてください。
日曜の昼下がりですがお願いします。…ひょとして板違い?
23名無しさん@お腹いっぱい。:2001/05/13(日) 14:53 ID:???
>>21
ちょっと無駄が多いな。

open (KENSAKU,"<yomikomi.txt");
$count = @nyuuryoku = <KENSAKU>;
close (KENSAKU);

srand();
$kazu1 = int (rand($count));
$kazu2 = int (rand($count));

while ($kazu1 == $kazu2){
$kazu2 = int (rand($count));
}

print "$count ←要素数\n";
print "$kazu1 ←kazu1\n";
print "$kazu2 ←kazu2\n";
exit;


srandは1回にしろ。
『srand』(乱数の初期化)は、()を省略した場合、その時の時間を入れる。
sleepでもかけない限り、srandの結果は大抵同じになるってこと。
あと、所々$が抜けてるからそれも確認してみな。
24名無しさん@お腹いっぱい。:2001/05/13(日) 15:06 ID:???
#!/usr/bin/perl
use FileHandle;
srand;
chomp(my @in = FileHandle->new('< yomikomi.txt')->readlines);
my($n1, $n2);
until($n1 eq $n2){
($n1, $n2) = (int(rand(@in)), int(rand(@in)));
}
my $count = @in;
print <<EOD;
$count
$in[$n1]
$in[$n2]
EOD
__END__
ところどころvoidでrandが置いて有るのがよく分からんが
2521:2001/05/13(日) 15:59 ID:RORO2Xd.
23さんありがとうございます。
> srandは1回にしろ。
親切に教えていただいてありがとうございます。
> あと、所々$が抜けてるからそれも確認してみな。
すみません。全く気づかなかったです。
-wcでチェックしたんですがエラーにならないんですね。

24さんありがとうございます。
> ところどころvoidでrandが置いて有るのがよく分からんが
何回も呼び出したほうが、よりランダム性が高まるかと思って使いました。
24さんのスクリプトは自分にはかなり難しいですが勉強になります。
26名無しさん@お腹いっぱい。:2001/05/13(日) 18:44 ID:???
>-wcでチェックしたんですがエラーにならないんですね。

use strict 'subs';によりそのような間違いを回避することが出来ます。
27名無しさん@お腹いっぱい。:2001/05/14(月) 12:39 ID:ja2f3uZE
perlってlinuxだと大抵デフォルトで入っているんだけど
HP-UXだと公式には入っていないのでソース持ってきてインストール
しなきゃならんですよね。SUNとかIBMとかはどうなんでしょか?
28名無しさん@お腹いっぱい。:2001/05/15(火) 03:11 ID:???
乱数にはrand()というのがありますが、かなり質の悪い乱数のように
思えます。
もう少し綺麗な乱数を作るにはどうしたら良いんでしょうか?

勿論、rand並に手軽に使えるぐらいの大きさで、ですが。
29名無しさん@お腹いっぱい。:2001/05/15(火) 03:31 ID:???
>>28
逆に聞きたい。
キミの言う綺麗な乱数とは何か?
30名無しさん@お腹いっぱい。:2001/05/15(火) 03:41 ID:U38TPPmg
>>28
前にプログラム技術板でよさげなやつを見たなあ。えーと、
http://piza.2ch.net/test/read.cgi?bbs=tech&key=978946000
これこれ。レス82にあるメルセンヌツイスターというやつです。
どうでしょ。

メルセンヌツイスターホームページ
http://www.math.keio.ac.jp/~matumoto/mt.html
Cで書かれたコードに直リンク
http://www.math.keio.ac.jp/~matumoto/mt19937int.c
31名無しさん@お腹いっぱい。:2001/05/15(火) 04:19 ID:itC.85zc
いろいろ、
http://search.cpan.org/search?mode=module&query=random

Mersenne Twister使った、Math::Random::MT ってのもあるね。
32名無しさん@お腹いっぱい。:2001/05/15(火) 11:13 ID:???
がいしゅつかもしれないけど、昨日こんなコードではまってしまった.

function Ike($mojiretu = NULL)
{
//文字列があったら処理せよ.
if ($mojiretu)
{
echo "逝ってよし";
}
else
{
echo "文字列ないよん";
}
}
このコードは、 $mojiretu = "0"; がきたときには else に分岐してしまう.
ちゃんと、 if ($mojiretu != NULL) と、しないとだめなのだ...
実行時に型判別の恐怖.鬱だ.
3332:2001/05/15(火) 11:15 ID:???
PHPのスレと間違えました.
ごめんなさい.
34名無しさん:2001/05/15(火) 14:52 ID:hcMTBPhU
CRとLFの改行って何が違うのですか?
35名無しさん@お腹いっぱい。:2001/05/15(火) 17:03 ID:???
文字が違います。
36名無しさん@お腹いっぱい。:2001/05/15(火) 18:24 ID:c9i14K.Y
UNIX LF   \n
Win CR+LF \r\n
Mac CR   \r
かな
37名無しさん@お腹いっぱい。:2001/05/15(火) 18:33 ID:???
>>36
シッタカはカコワルイね
WinでもUnixでも(多分Macでも)改行は\nだよ
3837:2001/05/15(火) 18:36 ID:???
binmodeすればWinの\nとUnixの\nは同じになるけど。
(Macは知らん)

とりあえずLFは改行、WinだとCRというゴミが付くと思っていれば良いんじゃないの?>>34
39名無しさん@お腹いっぱい。:2001/05/15(火) 19:27 ID:itC.85zc
CR \x0D \015 \cM
LF \x0A \012 \cJ
40名無しさん@お腹いっぱい。:2001/05/15(火) 22:46 ID:a8Q7zCBA
myの使い方について質問です。

1;foeeach my $var(@array){ }
2;my $var; foreach $var(@array){ }

この1の使い方、毎回my宣言しているので2と比べ効率が悪い気がするのですが、
JAPUさんなどはよく1の方法で回していますよね?
これは何か理由があるのでしょうか。
41名無しさん@お腹いっぱい。:2001/05/16(水) 00:15 ID:1AgH6foc
>>40
おれも無意識に1の方法を使ってるなあ。なぜかと考えるに、
$varのスコープをブロック内に局所化できるのが
気持ちいいから、ではなかろうか。
4240:2001/05/16(水) 10:15 ID:ufM2vq4Q
訂正) s/foeeach/foreah/;

>>41
簡単なベンチマークを取ったところ、数%ですが2の方が高速でした。
気にするほどではないと思いますが、
無意識に1の方法を取るほどいいメリットとも思えません…<$varのforeachブロック内への局所化
他に利点は無いのでしょうか?
43初心者過ぎる人:2001/05/16(水) 11:19 ID:E0ODptoI
すみません新規質問です。
ASPで動くXML::DOMモジュールはどこにあるんでしょうか?
44JAPU:2001/05/16(水) 13:59 ID:???
私が 1. の方法を利用するのは、>>41 さんと同じ理由です。
変数は可能な限り局所化する主義なので。

# その2%程度が気になるような人はアセンブラで組めば良い。:-p
4540:2001/05/16(水) 15:15 ID:ufM2vq4Q
>>44
なるほど。納得しました。
>>41, >>44 ありがとうございます。

ずっと気になっていたのでスッキリしました。
46初心者:2001/05/16(水) 17:03 ID:dHgf5I9c
スクリプトA.plの中からスクリプトB.plを起動させるときに
B.plへ変数を渡す方法とB.plが終了した事をA.pl内で
判断する方法を教えてください

お願い致します
47初心者:2001/05/16(水) 17:19 ID:dHgf5I9c
スクリプトA.pl内

 system(perl B.pl $A $B $C > $log_file)

open(LOG,"< $log_file")


というコーディングでよいのでしょうか?
48名無しさん@お腹いっぱい。:2001/05/16(水) 17:52 ID:???
>>46
require 'A.pl';
では不満なのか?
49初心者:2001/05/16(水) 17:58 ID:dHgf5I9c
>>48
Aの中から変数を与えてBを実行し
Bのログをファイルにリダイレクトさせた物を
再びAの中で加工したいのです。
50名無しさん:2001/05/16(水) 18:02 ID:dUC0dSnc
チャットについて質問です。
チャットのリロード機能がついてる仕様は絶対にフレーム型でしょうか。
つまり、chat.cgiで入力フォームと会話表示(ログ表示)部分をlog.htm
などとします。
log.hmにrefreshを使い自動更新しますよね。
しかし、入力部分と会話表示部分がひとつ画面だと
chat.cgiを更新してしまうので入室画面に戻ってしまいます。
結論は、フレーム型のチャットが嫌なので一体型で自動更新したいのですが
何か方法はありますでしょうか?
51名無しさん:2001/05/16(水) 18:04 ID:dUC0dSnc
>つまり、chat.cgiで入力フォームと会話表示(ログ表示)部分をlog.htm
>などとします。

ちょっとここは書き間違いです。
52名無しさん@お腹いっぱい。:2001/05/16(水) 18:16 ID:???
>>50
理屈の上ではフレームを使わないCGIも作れます。
でも書き込みしてる最中にリロードが起きると、
せっかく途中まで書いた文章が消えちゃうよ?
それって利用者から文句出まくりだと思うんだが。
53名無しさん@お腹いっぱい。:2001/05/16(水) 18:31 ID:???
>>49
とりあえず>>47でいいのでは。
systemの引数がクォートされてないのだけ気になったけど。
こうね => system("perl B.pl $A $B $C > $log_file");
54せちがないにぎりめし:2001/05/16(水) 19:14 ID:???
ごく簡単な改造でイイと思うんだけど
作製依頼は何処で出したらイイですか?
55名無しさん@お腹いっぱい。:2001/05/16(水) 19:40 ID:???
>>54
それに最も近いスレッドは↓ここか。
[スクリプト改造工房] http://corn.2ch.net/test/read.cgi?bbs=php&key=988808396
ただし答える人はそう多くない。無視されたらあきらめること。
56投票などについて:2001/05/17(木) 00:11 ID:T3NJy0u2
どのスレに書き込むか迷ったので初心者に書きます。

ある板でロゴの投票をしようという事になったのですが、
Win板のロゴ投票では、投票した人間のアクセスログも
わかっていたようです。
こういうのは投票用のCGiにアクセスログの機能もついてる
ものなのか、アクセスログ用のCGIの見る先が投票用のCGI
にしてるのかわかりません。

アクセスログ機能がついてる投票用のフリーCGIとか
あればいいんですが、探す限り最新の投票のホスト名だけ
とかばかりで一覧にバーッとログファイルができるようなのが
ないんですが‥うーん‥
57名無しさん@お腹いっぱい。:2001/05/17(木) 01:22 ID:???
>>56
なにが言いたいのかわからんぞ。もちっと整理してくれ。頼むよ。
Windows版がロゴ投票に使ったのと同じCGIが欲しいってことか?
しかしそれならWin板に行って話をすればいいだろうし・・・。

#あ、もしかしたら、同じようなCGIが欲しいけど、
#Win板に頭を下げるのがイヤなマッカーな人?
58初心者:2001/05/17(木) 03:33 ID:rW7cRx.k
>>53
レスありがとうございます。
ログ加工までなんとかできました。
59初心者:2001/05/17(木) 03:39 ID:rW7cRx.k
ついでといってはなんなのですが、
実際にスクリプトを実行せずにコーディングチェックだけを
行えるデバッグモードみたいなことはperlで出来ませんでしょうか?
環境はシステムがwin32でperlはperl5とjperlがあります。
(perl5とjperlの違いもよくわからないのですが・・・)
60名無しさん@お腹いっぱい。:2001/05/17(木) 04:24 ID:KYQIk2Ao
>>59
ん? perl -wc <スクリプト> じゃだめ?
# Tもつけよう。
61初心者:2001/05/17(木) 08:46 ID:rW7cRx.k
たびたびすみません。
配列@getに変数で値を追加していきたい時は

while(....){
@get = $hensu
}

で行えますでしょうか?
6256:2001/05/17(木) 08:48 ID:.GKme7Xc
>57
Win板で聞いてきたんですが
誰も答えてくれません(泣)
ロゴ投票まとめてた人の目につかないだけかもしれませんが。

投票した人間のログを記録するようなCGIが
欲しいということです。
一応フリーの投票用の探したんですが
ログファイルとか残すタイプがなかったもので。
63初心者:2001/05/17(木) 08:52 ID:rW7cRx.k
$i = 0;
while(....){
$get[$i] = $hensu;
++$i;
}

と行わなければ、やっぱり駄目でしょうか?
64名無しさん@お腹いっぱい。:2001/05/17(木) 08:57 ID:rZ3d9O0s
>>63
push @get, $hensu;
Perlの本でも買ってきたら?
65名無しさん@お腹いっぱい。:2001/05/17(木) 08:58 ID:/ddSlCio
>>63

while(...) {
        push @get, $hensu;
}
6665:2001/05/17(木) 08:59 ID:???
被った・・・
67名無しさん@お腹いっぱい。:2001/05/17(木) 09:47 ID:WmKEiYPc
Perlで簡単なプロクシサーバー(つーかただのフィルタみたいなもんだけど)
を書いているのですが、ActivePerlで fork 使うと速攻で落ちます。
やっぱりWindowsで fork は無理ですか?ちなみにスクリプトの方のバグかと
思ってLinuxでテストしたら普通に動きました。なんかActivePerlは
かわりにスレッドが使えるとかなんとか聞いたような気がするんですが
どうなんでしょう。
68名無しさん@お腹いっぱい。:2001/05/17(木) 10:21 ID:???
>>67
Perlのバージョンは?
69名無しさん@お腹いっぱい。:2001/05/17(木) 10:28 ID:???
>>68
ActivePerl-5.6.0.616です
70名無しさん@お腹いっぱい。:2001/05/17(木) 10:30 ID:???
>>62
#---
sub logsave{
local *LOG;
open LOG, '>>log.dat' or return;
flock LOG, 2;
print LOG <<EOD;
${\time()}<>$ENV{REMOTE_ADDR}<>$ENV{HTTP_USER_AGENT}
EOD
close LOG;
}
#---
7168:2001/05/17(木) 10:47 ID:???
>>69
スマン、俺じゃ分からん。
Perl5.6.0.623でforkのテストをすると成功する事もあるがDLLのエラーで落ちる事もあった。
スレッドはサパーリわからん。"perldoc Thread"とでもしてくれ。
7269:2001/05/17(木) 11:02 ID:WmKEiYPc
>>71
あら、残念。ActivePerlじゃなくても最近のPerlは
スレッド使えるみたいだけど、スレッドに関する資料が
少なくてよくわからないよ。ちなみに perldoc は見た
んだけど、スレッドが使えるって言うのはこのモジュールの
ことを指すの?なんか実験的な機能とか書いてあるけど…
まあとりあえずちゃんと読んでみるよ

あと、とりあえず perl -V 打ったら
usethreads=undef
ってなってたからこのままじゃスレッドは使えない
のかな。もしかしてこれを有効にするにはソースから
なんかオプションつけてコンパイルしなくちゃならないの?

わから〜ん!誰かヒントを!
73初心者:2001/05/17(木) 12:35 ID:rW7cRx.k
if($data[2] =~ /^$data2[0]/){
}

以上のようにコーディングしたら
if文のセンタックスエラーでこけてしまいました。
//で変数は使えないのでしょうか?
74名無しさん@お腹いっぱい。:2001/05/17(木) 12:46 ID:WmKEiYPc
>>73
パターンマッチの中では[]は特別な意味あり
ちなみに変数は使える。

$tekito = $data2[0];
if ($data[2] =~ /^$tekito/) {}

とかにしたら?
75名無しさん@お腹いっぱい。:2001/05/17(木) 13:40 ID:???
syntax errorなら何処かでセミコロンが抜けているに一票
76名無しさん@お腹いっぱい。:2001/05/17(木) 13:42 ID:???
ちなみに>>74は不正解。
#!/usr/bin/perl
$data[2] = 'abc()';
$data2[0] = 'ab';
print $data[2] =~ /^$data2[0]/;
__END__
7774:2001/05/17(木) 14:09 ID:???
>76
ほんとだ、真になってた。適当書いてスマソ
78名無しさん@お腹いっぱい。:2001/05/17(木) 16:19 ID:eJAJlr4A
>>67-72
おおー。ActivePerlの5.6って、
スレッドを使ってforkのエミュレーションするようになったんだ。
perldoc perlfork をざっと見てみました。
まだpipeは使えないんだね。
79名無しさん@お腹いっぱい。:2001/05/17(木) 19:33 ID:KWAHrWxw

二次元配列で配列の二次元目(?)の要素数を調べには
どうしたらいいでしょうか?
$hoge[0][$n]の$nが何個か知りたいんです
あんまりPerlでは二次元配列はつかわないんでしょか?
80名無しさん@お腹いっぱい。:2001/05/17(木) 19:52 ID:PKwP8X0M
>>79
$size = scalar @{$hoge[0]}

Perlの2次元配列は実際には「配列へのリファレンス」の配列。
つまり$hoge[0]等は各々が配列へのリファレンスである。
@{$hoge[0]}としてデリファレンスすると配列の実体になる。
あとは定石通りscalar関数で配列サイズを取得。
81名無しさん@お腹いっぱい。:2001/05/17(木) 19:59 ID:???
>>79
自分が知らないというだけで「使われていない」と思うのはどうか。
まぁ修得が若干難しいというのは確かだが。

#!/usr/bin/perl
$aryref0 = [qw(0 1 2 3 4 5)];
$aryref1 = [qw(0 1 2)];
$aryref2 = [qw(0 1 2 3 4 5 6 7 8 9)];

@ary = ($aryref0, $aryref1, $aryref2);

print <<EOD;
$#{$ary[0]} + 1 = ${\($#{$ary[0]} + 1)}
$#{$ary[1]} + 1 = ${\($#{$ary[1]} + 1)}
$#{$ary[2]} + 1 = ${\($#{$ary[2]} + 1)}
EOD
__END__
82名無しさん@お腹いっぱい。:2001/05/17(木) 22:02 ID:???
>>80-81
サンキュー
{$hoge[0]}って囲む事を知らなかったから問題だったんだな
説明もわかりやすかったし
スクリプトもわかりやすくて助かりました
あまり使われていないのかって書いたのは
Cの参考書には二次元配列について書いてあっても
Perlの参考書には書いてなかったからさ
Perlはいろんな方法がある分二次元配列とかは
そんなに使わないのが普通なのかなって思って
サブルーチンの中でグローバル変数を
あんまりつかわないのと一緒で
大体他の方法で抜けるのが一般的かなと思ったんです

ほんとにありがとう
83名無しさん@お腹いっぱい。:2001/05/17(木) 22:53 ID:???
Perlの参考書に書いていないのは
CGIスクリプトを作る際に必須な概念ではないってのが大きいんじゃないかな。
84名無しさん@お腹いっぱい。:2001/05/17(木) 22:57 ID:693Tbg52
>>82
そんな本はすてちまえぇ!
85名無しさん:2001/05/17(木) 23:36 ID:ENQ64Pv6
mod_perl
てなんて読むの。

もどぱーる?
もじゅーるぱーる?
86名無しさん@お腹いっぱい。:2001/05/18(金) 05:54 ID:YOZjqt/s
う。なやまず「もっどぱーる」とよんでた。
どうなんだろう。
87名無しさん@お腹いっぱい。:2001/05/18(金) 10:09 ID:???
おれも「もっどぱーる」派
88名無しさん@お腹いっぱい。:2001/05/19(土) 00:46 ID:pQYsUf86
>>85
「もっとPerl!」を、方言にした感じで「もっどぱーる」
89名無しさん@お腹いっぱい。:2001/05/19(土) 04:44 ID:???
なにも知らずに動けばそれで良しな私は
 @data[x]
$data[x]
を一緒に使っちゃってますが、やはり問題ありますよね?
90名無しさん@お腹いっぱい。:2001/05/19(土) 07:15 ID:pQYsUf86
 詳しいことは知らないが、Perl6からは、@data[x]は、配列のスライスではなく、
配列の要素を指す記述方法になるらしい。
 配列のスライスは、別の記述方法が用意されるらしいです。
91名無しさん@お腹いっぱい。:2001/05/19(土) 10:14 ID:???
>>89
問題あり
92名無しさん@お腹いっぱい。:2001/05/19(土) 12:36 ID:mE7mDJyE
半角カナの処理ってどうされてますか?
おいらはjcode.plで全角にしちゃってますがその他ってなにか方法
ありますか?
93名無しさん@お腹いっぱい。:2001/05/19(土) 13:29 ID:???
ベツニ。メールジャネーンダカラメクジラタテルコトモアルマイ<ハンカク
ISO-2022-JPッツーワケデモナイノニゼンカクニシチマウノハドウカトオモウ
                                  
                                    
94名無しさん@お腹いっぱい。:2001/05/19(土) 14:13 ID:???
JavaScript で頑張る。
95名無しさん@お腹いっぱい。:2001/05/19(土) 16:25 ID:???
すごく恥ずかしい質問なのですが
JAVAのコメントアウトみたいに
/*
ココがコメントにょ
*/
みたいな機能はないのでしょうか?
96名無しさん@お腹いっぱい。:2001/05/19(土) 17:14 ID:wk52aSL.
>>95
POD形式のコメントにするのが正式だと思う。
参照: perldoc -q "comment out" および perldoc perlpod

ちょこっと部分的にコメントアウトしたいときは
=pod
この部分はパースしないよ
=cut
だけでいいかもな。
97_gunzip:2001/05/19(土) 20:53 ID:???
>>95
Cみたいに /* */ や // が使いたい場合は、
----------
#!/usr/bin/perl -MFilter::cpp

/*
複数行コメント
*/

print "ok!"; //一行コメント

----------
とする手もあります。
本当は96さんのようにするのがベストだし、自分も普段は
そうしているのだけれど、一応、雑学的知識として....
#事前にCプリプロセッサ(うちでは"gcc -E")に食わせているだけです。
9895:2001/05/19(土) 22:32 ID:1jbpiiuM
96さん97さん、ありがとうございました。

#入門本に載って無くてずっと#を20行とか打ってました・・・
99名無しさん@お腹いっぱい。:2001/05/19(土) 23:10 ID:???
>>98
いや#を20行というのが間違いというわけではないよ。
PODにしろCプリプロセッサに食わせるにしろ、"完全に無視される存在ではなくなる"からね。
100名無しさん@お腹いっぱい。:2001/05/20(日) 01:40 ID:???
いろいろ方法があるんですねえ。ていうかそれがPerlというものか。
このスレのPart1から全部まとめて「Perlの雑学」っていう
サイトを作ったら面白いかもなあ。
101名無しさん@お腹いっぱい。:2001/05/20(日) 02:44 ID:???
>>100
> このスレのPart1から全部まとめて「Perlの雑学」っていう
> サイトを作ったら面白いかもなあ。

それマジで誰かやってくれないかな。
漏れは取捨選択できるレベルじゃないからダメっぽいけど…。
102名無しさん@お腹いっぱい。:2001/05/20(日) 04:11 ID:???
勉強がてらに作ろうかしらん
103名無しさん@お腹いっぱい。:2001/05/20(日) 04:15 ID:???
>>102
頼むよ。
104名無しさん@お腹いっぱい。:2001/05/20(日) 04:28 ID:???
>>102
場所を用意してくれるんなら少しは協力するぞ。
105名無しさん@お腹いっぱい。:2001/05/20(日) 05:44 ID:???
アカウント提供しようか?
106名無しさん@お腹いっぱい。:2001/05/20(日) 05:47 ID:???
PERL勉強できるHPある?
せっかくLINUXいれたので・・・。
107名無しさん@お腹いっぱい。:2001/05/20(日) 05:50 ID:???
ヒューレットパッカードのマシンですか?>106
108名無しさん@お腹いっぱい。:2001/05/20(日) 07:26 ID:???
>>107
まだそんな事でつっこむのかよ。
サブッ
109not 107:2001/05/20(日) 08:17 ID:???
>>108

誰も突っ込まなくなったらもうダメだ。
110名無しさん@お腹いっぱい。:2001/05/20(日) 08:18 ID:???
>>106
このスレの>>2のリンク集の[お薦め]のとこ。って"の"が多いね。
111名無しさん:2001/05/20(日) 08:31 ID:/uasmmyo
Apache::PerlRunとApache::Registryの違いって何ですか。
112(・∀・)イイ!!:2001/05/20(日) 10:31 ID:3QTA/xf2
パイオニアのHPアニメ板の奴らにハッキングされました。
http://ton.2ch.net/test/read.cgi?bbs=news&key=990241282&ls=100
113名無しさん@お腹いっぱい。:2001/05/20(日) 11:36 ID:???
>>102
http://xbbs21.virtualave.net/xbbs/up/
ここにページを圧縮してアプしてくれれば、
こっちで見られるようにするよ。
114初心者:2001/05/20(日) 13:32 ID:4X2s.QbM
すみません助けてください。
perlでAとBのファイルのレコードマッチングで
同じレコードを抜き出してCというファイルを作るのですが
foreachの入れ子で作るとどうしても抜き出すレコードが
2レコードずつ出力されてしまいます。

どこかによい例がありませんでしょうか?
115初心者:2001/05/20(日) 13:31 ID:4X2s.QbM
すみません助けてください。
perlでAとBのファイルのレコードマッチングで
同じレコードを抜き出してCというファイルを作るのですが
foreachの入れ子で作るとどうしても抜き出すレコードが
2レコードずつ出力されてしまいます。

どこかによい例がありませんでしょうか?
116名無しさん@お腹いっぱい。:2001/05/20(日) 13:39 ID:???
>>115
まずはそのスクリプトを書くなりアプするなりしたらどうだ。
117初心者:2001/05/20(日) 13:48 ID:4X2s.QbM
すみません、こんなかんじです。

@new = <NEW>;
foreach $new_rec (@new){
#---関数 comp_update
$subname="comp_update";&local_time;
&comp_update;
$val = &comp_update;
if($val){
if($hit_sw eq "0"){
print OUT "$new_rec2---unm\n";
}
print OUT "$new_rec2\n";
}
}
#
sub comp_update{
# 新旧更新情報ファイルの比較
$hit_sw = "0";
$new_rec2 = $new_rec;
@new_data = split(/\s+/,"$new_rec");
@old = <OLD>;
foreach $old_rec (@old){
@old_data = split(/\s+/,"$oup_rec");
if(($new_data[0] eq $old_data[0]) && ($new_data[1] eq $old_data[1]) && ($new_data[2] eq $old_data[2])){
$hit_sw = "1";
if($new_data[3] eq $old_data[3]){
return[0];
}else{
return[1];
}
}
}
if($hit_sw eq "0"){
return[1];
}
}
118初心者:2001/05/20(日) 13:50 ID:4X2s.QbM
段差がつかなくてすみません
あと4行目はファイルの突き合わせには意味のない
サブルーチンです。
119名無しさん@お腹いっぱい。:2001/05/20(日) 14:00 ID:???
なんつーか…いっちゃ悪いが無茶苦茶だな
思うに問題は"return[n]"じゃないか?勘だが。
真偽値を返すつもりなら"return(n)"と書いてみな。
120初心者:2001/05/20(日) 14:11 ID:4X2s.QbM
>>119
nって数字ではないのですか?
アルファベットの“n”ですか?
メインルーチン側はどうやって真偽を判断するのですか?
121_gunzip:2001/05/20(日) 14:14 ID:???
解決にはならないが、気になる点。
>return[0];
return(0);
[]じゃなくて()だよ。(このままだと、0という要素を持った配列へのリファレンスを
返すことになってしまうよ)

>$hit_sw eq "0"
数値を""でくくるのは、なんか変。
$hit_sw = 1; $hit_sw == 0;

>$new_rec2
こういった変数の付け方は、後から見ると(or 他の人が見ると)何を指しているのか
分かりづらいのでやめよう。(しかもグローバル変数で突然現れるし......)

>$old_data[0] eq $new_data[0] とか
どんなフィールドを比較しているのか.....わからん。

>@old = <OLD>;
毎回読むの?最初の一回でファイルの終端まで全部読んでしまうから
二回以降@oldは空じゃない?

#どういったことをやりたいのかを(114より詳しく)正確に書いて欲しい。
122_gunzip:2001/05/20(日) 14:17 ID:???
>2レコードずつ出力されてしまいます。
ってことは、

>if($hit_sw eq "0"){
>print OUT "$new_rec2---unm\n";
>}
>print OUT "$new_rec2\n";
>}
の後者のprintが要らない?......というか、よくわからん。
123ははは:2001/05/20(日) 14:28 ID:???
デバッグする気になれんよ・・・・・
124初心者:2001/05/20(日) 14:38 ID:4X2s.QbM
>>121
やりたいことは 更新情報であるNEWファイルのレコードを
OLDファイルのレコードと比べて、
互いのレコードデータの項目[0]〜[2]まで一致したら
日付(YYYYMMDD・・・)の入っている項目[3]を比べ
差異があればOUTファイルへ出力させます。
但し、NEWファイルにしかないレコードもunmatchとして同じく出力させます。

>>@old = <OLD>;
>毎回読むの?最初の一回でファイルの終端まで全部読んでしまうから
>二回以降@oldは空じゃない?
NEWのレコード1行毎に、OLDファイルは頭から再び
探したいのですけど・・・意味ないのでしょうか?
125初心者:2001/05/20(日) 14:57 ID:4X2s.QbM
>return[0];
>return(0);
>[]じゃなくて()だよ。(このままだと、0という要素を持った配列へのリファレンスを
>返すことになってしまうよ)

スミマセンここもう少し詳しく教えてください。
1度シンタックスエラーになり
リファレンスマニュアルを読むと[]と書いてあったので変えたのですが・・・
戻り値に真偽を与えメインルーチン側で真偽を判断する方法がよくわからないのです。

あと 一度、配列にファイルハンドルで全てあたえたら
繰り返し処理でやる意味はないのですか?
open...
@old = <OLD>;
close...
とファイルを開いて全て読みこんでファイルを閉じるのが正しい
使い方なのでしょうか?
126名無しさん@お腹いっぱい。:2001/05/20(日) 15:12 ID:???
>>125
悪い事は言わないからまともな本買って勉強し直しな。
その方が君のためになる。
127_gunzip:2001/05/20(日) 15:18 ID:???
ああ、昼寝してた。すまん。

#!/usr/bin/perl -w

use constant NOT_EXISTS => 0;
use constant EXISTS => 1;
use constant LAST_MODIFIED => 3;

@old = map{ [ split ] } <OLD>;

while($rec = <NEW>){
    chomp $rec;
    $is_exists = NOT_EXISTS;
    @new = split(/\s+/,$rec);
    
    foreach $old (@old){
        if(($new[0] eq $old->[0]) && ($new[1] eq $old->[1]) && ($new[2] eq $old->[2])){
            $is_exists = EXISTS;
            if($new[LAST_MODIFIED] ne $old->[LAST_MODIFIED]){
                print $rec , "\n";
                last;
            }
        }
    }
    if($is_exists == NOT_EXISTS){
        print $rec , "---unmatched\n";
    }
}

やりたいのはこういったこと?
128_gunzip:2001/05/20(日) 15:19 ID:???
>print $rec , "\n";
print OUT $rec , "\n";
だな。それにNEW,OLDも開いてない。
129名無しさん@お腹いっぱい。:2001/05/20(日) 15:25 ID:???
綺麗なソースだ…。
流石_gunzipさんです。
130_gunzip:2001/05/20(日) 16:00 ID:???
ああ、また寝惚けて読んでなかった。すまん。
>>125
>1度シンタックスエラーになり
うーん。あり得ないような。
>リファレンスマニュアルを読むと[]と書いてあったので変えたのですが・・・
どんな記述だったのか知りたいなあ。
>戻り値に真偽を与えメインルーチン側で真偽を判断する方法がよくわからないのです。
うう....言ってることが分からない。戻り値として返されたものを評価すればいいだけでは(?)

>あと 一度、配列にファイルハンドルで全てあたえたら
一回目の&comp_update()の呼び出しで
>@old = <OLD>;
@oldには($/未変更時)ファイルハンドルOLDの各行が一行ずつ入る。
ついでにEOFもセットされる。(最後まで読んだので)
二回目の&comp_update()の呼び出しで
>@old = <OLD>;
OLDにはもう残っていないので@oldは空になる。

>>129
ありがとう。何か変なところがあったら指摘してくれると嬉しいです。
131初心者:2001/05/20(日) 17:39 ID:4X2s.QbM
>>126
そうしたいのは山々なのですが(ここからは言い訳になります)
コンピュータはインターネットとゲームをするていどの
ど素人だったのが
COBOLの研修を2週間程度受けて、いきなり配属され
一人ぼっちでperlと格闘している最中の新入社員なのです。
(でもperlってコンパイルしなくていいのが好き)

周りは年老いたおじサンばかりで若いというだけで引継ぎも
ままならないままサーバ管理をまかされてしまいました・・・・

>>127
あまりにも・・・高等すぎてよくわかりませんが
有り難くコピペさせて勉強させていただきます。

先ほどの突き合わせ処理の問題はなんとか解決できました。
やはり御指摘の通り @old = <OLD>を繰り返し処理の中で
行っていた事が原因でした。
(2行づつ書きこむのは別の原因でしたが)
perlのマニュアルは沢山買いこみましたが
肝心の無い様が私にとってチンプンカンプンで・・・
今の仕事向いてないのかもしれません・・・


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

追伸:どこかおすすめのPerlのサイトありませんでしょうか?
132名無しさん@お腹いっぱい。:2001/05/20(日) 17:49 ID:MGMWE3cQ
全角のA..Z1..9を半角のA..Z1..9に置き換えたいんですが、
上手い方法ないですか?
tr/a/a/g; tr/1/1/g;
みたいにやってもだめでした。
133名無しさん@お腹いっぱい。:2001/05/20(日) 18:09 ID:???
>>131
関連サイトは>>2を参照

しかし…君を悪く言うつもりは無いが、
酷い会社だなそこは…それともそういうものなのか。
ま、頑張れや

>>132
jcode.pl(またはJcode.pm)のtr()関数を使えばいい
#!/usr/bin/perl
require 'jcode.pl';
$str = 'ZENKAKU123';
jcode::convert(\$str, 'euc');
jcode::tr(\$str, 'A-Z0-9', 'A-Z0-9');
print $str, "\n";
__END__
134名無しさん@お腹いっぱい。:2001/05/20(日) 18:31 ID:P53jKHxs
>>131
リファレンスとして便利なPerlサイトはいっぱいあるけど、
Perlをいちから学ぶためのサイトは知らないなあ。

Perlの本を沢山買い込んであるなら、やっぱ最初はそれを
読むことから始めるほうがいいんじゃないの。
この↓参考書籍スレッドも参考になるよ。
http://corn.2ch.net/test/read.cgi?bbs=php&key=988809842&to=9
135初心者:2001/05/20(日) 18:40 ID:4X2s.QbM
>@oldには($/未変更時)ファイルハンドルOLDの各行が一行ずつ入る。
>ついでにEOFもセットされる。(最後まで読んだので)

すみませんもう一つだけ
eofなんですけど、ファイルの一括処理
>@old = <OLD>;
を行った時も下記の様に使えますか?

@old = <OLD>;
foreach $old_rec(@old){
if(eof(OLD)){

#最終行の処理

}
}

マニュアルには eof(ファイルハンドル)を指定すると
書いてあるのですが、この場合もファイルハンドルで
いいのでしょうか?
136名無しさん@お腹いっぱい。:2001/05/20(日) 18:49 ID:???
>>135
@old = <OLD>;
とした時点で配列"@old"とファイルハンドル"OLD"は何の関係も無くなる。
同じ事をしたいのならwhileで回せ

while(defined($old_rec = <OLD>))
{
&nbsp;&nbsp;if(eof(OLD)){
&nbsp;&nbsp;&nbsp;&nbsp;#最終行の処理
&nbsp&nbsp;;}
}
137名無しさん@お腹いっぱい。:2001/05/20(日) 18:50 ID:???
台無しだ(;´Д`)
while(defined($old_rec = <OLD>))
{
  if(eof(OLD)){
    #最終行の処理
  }
}
138132:2001/05/20(日) 21:00 ID:Ir3q0zHo
>>133
無事変換できました。3日悩んでいたのでとても嬉しいです。
ありがとうございました。
139馬鹿:2001/05/20(日) 22:34 ID:???
www.microsoft.com
http://www.microsoft.com
http://www.microsoft.com/
とかの入力から、これを
www
microsoft
com
に分解するにはどうすればいいの?
140_gunzip:2001/05/20(日) 22:45 ID:???
>>131
直接には役に立てなかったけど、上手くいってよかった。
お仕事頑張って。(ちょっと無責任かな.......)

>この場合もファイルハンドルでいいのでしょうか?
はい。ちなみに、
perldoc -f eof
でPerlの関数(この場合はeof)についてのマニュアル(英語)を読むことが出来ますよ。
他のも色々試してみてください。

>>139
これでいいか?

#!/usr/bin/perl

@url = split /\n/ , <<;
www.hogehoge.com
www.hogehoge-u.ac.jp
hogehoge.com
http://hogehoge.com/
http://hogehoge.com
http://www.hogehoge.com/

foreach(@url){
    m%([0-9a-z\-]+\.)*?([a-z0-9-]+)\.([a-z]{2,3})(?:\.([a-z]{2}))?([^a-z]|$|/$)%i;
    print "$_ :\t \$1 = $1, \$2 = $2, \$3 = $3, \$4 = $4\n";
}
141名無しさん@お腹いっぱい。:2001/05/20(日) 22:47 ID:???
>>139 こんな感じ??

$str = "http://www.microsoft.com/";
$str =~s/(http:\/\/)?([^\/]+)(\/)?/$2/;
@array = split /\./, $str;
142馬鹿:2001/05/20(日) 23:21 ID:???
>>140-141
マンセーありがと。
143めっちゃ初心者です:2001/05/21(月) 21:53 ID:Ra9UJdqo
よくわかりませ〜ん

/を,に変換したいのですが美味くいきません
こんな感じです。

$moji = "111/222/333";
$moji =~ tr///,/;
print "$moji";

/という文字がやっぱ不味いんでしょうか?でも/をどうしても,
に変換したいんです。
宜しくおねがいします。
144名無しさん@お腹いっぱい。:2001/05/21(月) 22:14 ID:???
\/
145めっちゃ初心者です:2001/05/21(月) 22:17 ID:???
>>144

美味くいきました。ありがとう
ネタじゃないっす。
すいませんもっと勉強します
146名無しさん@お腹いっぱい。:2001/05/21(月) 22:24 ID:???
>>144
たった2バイトの回答で感謝されるのも珍しい(笑)
147名無しさん@お腹いっぱい。:2001/05/21(月) 23:18 ID:???
>>146
気づく時は「あ〜っ」という感じなんだろう(笑)
148初心者:2001/05/22(火) 17:16 ID:v5lFmpjo
すみません
「スカラー変数の値の左端からn桁を抜き出す」
コマンドってありませんか?
149初心者:2001/05/22(火) 17:17 ID:v5lFmpjo
すみません
「スカラー変数の値の左端からn桁を抜き出す」
コマンドってありませんか?
150初心者:2001/05/22(火) 17:18 ID:v5lFmpjo
すみません
「スカラー変数の値の左端からn桁を抜き出す」
コマンドってありませんか?
151名無しさん@お腹いっぱい。:2001/05/22(火) 17:33 ID:???
substr($str, n, 1)
152初心者:2001/05/22(火) 17:56 ID:v5lFmpjo
ありがとうございます。
153名無しさん@お腹いっぱい。:2001/05/22(火) 23:57 ID:???
perlにC言語のファイルを組み込むことはできますでしょうか?
また、できるとすればどうやったらできるんでしょう?
やっぱり変換するしかないのかな・・・・。
154疑問。:2001/05/22(火) 23:59 ID:???
そのファイルにアクセスされたら他のプログラムを動作させること
ってどうやるんでしょうか。
サブルーチンではなく、普通のファイルを、なのですが・・。
155名無しさん@お腹いっぱい。:2001/05/23(水) 00:04 ID:???
>>154
require "./file.pl";
156名無しさん@お腹いっぱい。:2001/05/23(水) 00:13 ID:???
>>156
$ perldoc perlxs
157名無しさん@お腹いっぱい。:2001/05/23(水) 00:31 ID:???
$ call japu
158JAPU:2001/05/23(水) 02:38 ID:???
perlxs は既に提示されているので、別解を。
http://search.cpan.org/search?dist=Inline

少し前の The Perl Journal に載っていたんだったかな。
159名無しさん@お腹いっぱい。 :2001/05/23(水) 11:29 ID:Qg5ERlzM
VisualC++みたいな形の、GUI環境のデバッグツールはありますか?
160名無しさん@お腹いっぱい。:2001/05/23(水) 12:06 ID:???
http://homepage1.nifty.com/wizman/
>>159
使ってみて報告してくれ
161名無しさん@お腹いっぱい。:2001/05/23(水) 17:39 ID:Lqr/QSWw
#!/usr/bin/perl

$str = "12345";
$str =~ tr/0-9/0-9/;

print "Content-type: text/html\n\n";
print $str, "\n";
print "</body></html>\n";

とすると出力が

0203040506

となってしまいます、普通に 12345 とは表示できないのでしょうか?
162名無しさん@お腹いっぱい。:2001/05/23(水) 17:48 ID:???
163antique:2001/05/23(水) 17:54 ID:???
eucで
-----------------------------------
require './jcode.pl';
$str = "12345";
jcode::tr(*str, "0-9","0-9");
print $str;
164antique:2001/05/23(水) 17:53 ID:???
eucで
-----------------------------------
require './jcode.pl';
$str = "12345";
jcode::tr(*str, "0-9","0-9");
print $str;
165antique:2001/05/23(水) 17:56 ID:???
かぶる・だぶる のワンツーパンチ。

あ、タイムスリップもしてる(w
166名無しさん@お腹いっぱい。:2001/05/23(水) 18:02 ID:Lqr/QSWw
EUCでですね。。。できました(^^;
ありがとうございます
167名無しさん@お腹いっぱい。:2001/05/23(水) 23:12 ID:???
最近モジュールなるものを知ったのですが、
ローカル(win98/httpd)で使用することは出来ますか?

つーか使い方もまだ良く分からないんだけど(ぉ
168名無しさん@お腹いっぱい。:2001/05/23(水) 23:16 ID:???
>>167
モジュールを使ってみようとしましたか?
169167:2001/05/23(水) 23:44 ID:???
>>168
はい。
170名無しさん@お腹いっぱい。:2001/05/23(水) 23:52 ID:???
>>169
はいってアンタ…(w
使ってみた結果は?
171名無しさん@お腹いっぱい。:2001/05/24(木) 12:36 ID:???
平和だね(w
172名無しさん@お腹いっぱい。:2001/05/24(木) 14:35 ID:???
マターリとしたのもたまには イイ!(・∀・)
173名無しさん@お腹いっぱい。:2001/05/25(金) 00:05 ID:wtGhDgwQ
age
174名無しさん@お腹いっぱい。:2001/05/25(金) 01:07 ID:???
よくあるフレーム式のチャットを組んでいるのですが、
メッセージを送信した後に記事表示部をリロードするには
どうすればいいのでしょうか? 教えてください。
175名無しさん@お腹いっぱい。:2001/05/25(金) 01:37 ID:???
>>174
HTMLの勉強をしよう。
<form method=POST action=undex.cgi target=under>

それともオートリロードの仕方かい?
<meta http-equiv="refresh" content="90;url=under.cgi">
必要ならunder.cgi?name=$nameとかにすればよろし。
176175:2001/05/25(金) 01:38 ID:???
タイプミスしたけど自分で修正してくれ。
177174:2001/05/25(金) 02:53 ID:???
>>175
無事解決しました。
ありがとうございました。
178名無しさん@お腹いっぱい。:2001/05/25(金) 07:29 ID:tY41esp2
Perl6はいつ頃でるんでしょうか?
179名無しさん@お腹いっぱい。:2001/05/25(金) 10:03 ID:???
今年の夏あたりにコアが出来るとかいうのをどこかで読んだ気がする。
180名無しさん@お腹いっぱい。:2001/05/25(金) 23:58 ID:???
cronの使い方がイマイチ分からないのですが、
やはりtelnet設定してやらナイト無理ですか?
ちなみにサーバはf2sです。
181名無しさん@お腹いっぱい。:2001/05/26(土) 00:11 ID:ykv1O/hI
CGIのソースをいろいろ見て参考にしたいのですが、
使用されているCGIのソースをこっそりダウンロードする方法ってありますか?
182名無しさん@お腹いっぱい。:2001/05/26(土) 00:57 ID:AODUSOWA
>>181
無い。あまりそんな質問されると厨房だと思われますよ。
183名無しさん@お腹いっぱい。:2001/05/26(土) 01:05 ID:???
>>182
IDが微妙にカッコ(・∀・)イイ!
184弐ch編者 :2001/05/26(土) 07:58 ID:???
今は去年の新人をいじめてる。
こいつはやめそうにないんで
とりあえず泣かそうと思ってる。
185名無しさん@お腹いっぱい。:2001/05/26(土) 08:12 ID:???
>>182
本気でIDカッコ(・∀・)イイ!
# アドゥソワ?
186名無しさん@お腹いっぱい。:2001/05/26(土) 19:51 ID:ojerd3UA
perlccで途中のcのファイルを残せないのでしょうか?perlからCへの
移植に使えるかと思ったんですが・・・。
187名無しさん@お腹いっぱい。:2001/05/26(土) 19:58 ID:GHTZid3c
メモ帳で
printf"Hello World\n";
と書いてsample001.plで保存。
Perlでperl sample001としてもなにも起こりません。ソースのパスを
指定してないからなんでしょうが、パスを変更する方法がわかりません。
188名無しさん@お腹いっぱい。:2001/05/26(土) 20:07 ID:???
>>186
[email protected]$ perl -MO=C foo.pl >foo.c
189名無しさん@お腹いっぱい。:2001/05/26(土) 20:14 ID:???
>>187
[email protected]$ export PATH=$PATH:/home/hoge/bin
190名無しさん@お腹いっぱい。:2001/05/26(土) 21:26 ID:???
>>187 なんでsample001.plの.pl抜かしてんだよ
191名無しさん@お腹いっぱい。:2001/05/26(土) 21:32 ID:???
>>187
・printf
・.plを抜かす
・「なにも起こらない」

ってことでネタと断定
192名無しさん@お腹いっぱい。:2001/05/26(土) 22:02 ID:???
>・printf
確かにあまり使わないが、別に誤りでもなかろ。
193名無しさん@お腹いっぱい。:2001/05/27(日) 00:00 ID:???
質問なんですけど、よく
open(FILE,"$filename") or die('...');
ってしてますよね?
sleep(1) until open(FILE,"$filename");
みたいなのは駄目なんでしょうか?
194名無しさん@お腹いっぱい。:2001/05/27(日) 00:06 ID:???
>>193
ファイルがずっと開けない状態にあったらどうなるのかな?
195名無しさん@お腹いっぱい。:2001/05/27(日) 00:40 ID:???
そもそもファイルがなかったりとかね
196名無しさん@お腹いっぱい。:2001/05/27(日) 03:38 ID:???
>>186

>perldoc perlcc

$ perlcc -c file # Creates a C file, 'file.c'
$ perlcc -c out.c file # Creates a C file, 'out.c' from 'file'
$ perlcc -c -e 'print q//' # Creates a C file 'a.out.c'
197187:2001/05/27(日) 04:03 ID:fXHTNImE
いやネタじゃないですよ、最初に書くソースってことでcのまね
してみただけです。ちなみに
perl e:/書類/ユーザー/perl/sample001.pl
ってやったらMS-DOS窓が閉じちゃいました。なにか表示されたのが
一瞬見えましたが。perl5.6.1です。
198名無しさん@お腹いっぱい。:2001/05/27(日) 05:41 ID:???
>>197
DOSプロンプトで起動してるのか?
system(exit);
でもやらんと閉じない気がするのだが。
199187:2001/05/27(日) 07:32 ID:daAcq/BI
>DOSプロンプトで起動してるのか?

え?PerlのアイコンwクリックでDOS窓が開きませんか?
200187:2001/05/27(日) 07:37 ID:daAcq/BI
失礼しました。DOSじゃなかったです。
あれがPerlのインターフェイスですね。
201187:2001/05/27(日) 07:41 ID:daAcq/BI
system(exit);とやってもなにも起こらず・・・。
ActivePerl-5.6.1.626-MSWin32-x86-multi-thread
これ以外になにかインストールしないといけないんでしょうか。
202187:2001/05/27(日) 08:29 ID:daAcq/BI
試しにDOSプロンプト立ち上げてからPerl 〜とやってみたら
ちゃんと動作しました。これでなんとかなりそうです。
お騒がせしました。
203_gunzip:2001/05/27(日) 08:33 ID:???
>>202
>試しにDOSプロンプト立ち上げてからPerl 〜とやってみたら
・・・今まではどうやっていたの?
204名無しさん@お腹いっぱい。:2001/05/27(日) 09:30 ID:NfbVrjcI
>>203
>>199
> PerlのアイコンwクリックでDOS窓が開きませんか?
にあるとおり、Windowsで普通にActivePerlをインストールすると hoge.pl をダブルクリックで
DOS窓起動→hoge.plが起動→hoge.pl終了→DOS窓終了→一瞬で窓閉じたー
ってなる。
あと、DOS窓内で直接 hoge.pl ってやっても関連付けの関係で起動できたりする。
205187:2001/05/27(日) 12:04 ID:IqGMfkVQ
>>203
204さんの解説どおりです。204さんありがとう。
206_gunzip:2001/05/27(日) 19:16 ID:???
>>204
丁寧な説明ありがとう。
確かに一瞬で消えちゃうね。何をしたのかさっぱり分からない......

>>205
いちいちコマンドラインから
perl xxxx.pl
とするのが面倒なら、comファイルを作ってくれる
http://www.vector.co.jp/soft/dos/util/se028129.html
みたいなのもあるよ。
これなら、いちいちperl,sed,awkのどのスクリプトかを意識することなく
xxx | yyy | zzz みたいに書けるよ。
207名無しさん@お腹いっぱい。:2001/05/27(日) 21:50 ID:???
>>206
おおっ!
凄い便利そうですね。
205じゃないけど早速使ってみま…あれ?
…落として展開したらこんなドキュメントが…

>本ディレクトリに収められているのは、受動喫煙(Passive Smoking、他人の煙
>草の煙を吸わされること)による健康被害の問題に関する資料です。

(゚Д゚)ハァ?
208名無しさん@お腹いっぱい。:2001/05/27(日) 21:55 ID:???
AN HTTPD で、ImageMagick を動作させたいのですが、
やっぱ無理っすかね?
209名無しさん@お腹いっぱい。:2001/05/27(日) 22:06 ID:???
>>206の_gunzip氏は偽物か?
210207:2001/05/27(日) 22:11 ID:???
なんか知らんがベクターのアーカイヴが壊れてたのだろうか(;´Д`)
↓こっからダウソしたやつはマトモだった。
今から使ってみる。

http://www.asahi-net.or.jp/~bi3t-aoym/sos111.lzh

>>209
つーわけで、_gunzip氏のミスとか偽者という訳ではなさそうです。
211209:2001/05/27(日) 22:14 ID:???
>>210
サンクス。
…漏れもビクーリしたよ(w <受動喫煙
212207:2001/05/27(日) 22:58 ID:???
ああリダイレクトが、パイプが…!(嬉)
上等です。_gunzipさん感謝っ!
.
.
.
…ただ付属のmksos.comがうまくいかないのは俺だけ?(;´Д`)
デフォルトがjperlだし(;´Д`)

しょうがないのでrunperl.com
#perl %0 %@
($program = $0) =~ s{^.*[/\\]|\.[^./\\]*$}{}g;
exec 'perl', $program, @ARGV;
exit $!;
213_gunzip:2001/05/28(月) 06:04 ID:???
>>207
appeal/ディレクトリね。自分も展開してみて驚いた。(→削除)
自分も煙草は吸わんです。(´ー`)y−~~

>>209-210
ちょっと事情が分からないのだけど・・・もしかしてappeal/ディレクトリしか無かったとか?
それと、1.11に上がっていたとは知らなかった。ありがとう。

>>212
>…ただ付属のmksos.comがうまくいかないのは俺だけ?(;´Д`)
>デフォルトがjperlだし(;´Д`)
うーん。これだけでは、どこが上手くいかなかったのか分からないけれど、
mksos.comを↓のように修正すればperl(≠jperl)でも動くし、
ちゃんとperl(≠jperl)用のcomファイルを吐くようになるよ。(1.11では一行づつずれる)
____________________________________________________

15c15
< #jperl %0 %@
---
> #perl %0 %@
22c22
< join($;, 'p','Perl (jperl)', 1, '.pl', 'Perl', 'jperl %0 %@'),
---
> join($;, 'p','Perl (jperl)', 1, '.pl', 'Perl', 'perl %0 %@'),
160c160
< close(HDR), last if /^#jperl/;
---
> close(HDR), last if /^#perl/;
____________________________________________________
214207:2001/05/28(月) 09:44 ID:???
>>213

>ちょっと事情が分からないのだけど・・・もしかしてappeal/ディレクトリしか無かったとか?
そゆことです。
展開中にエラーが出て…(;´Д`)
展開ソフト(ラプラス)のバグでしょうかね。

>mksos.com
_gunzipさんうまくいきました?
俺の場合、jperlはともかく、mksosしても
mksosファイルの最後に目的のスクリプトが追加されるだけで、
動作はmksosと同じになってしまいます(;´Д`)
215名無しさん@お腹いっぱい。:2001/05/28(月) 12:22 ID:???
>>214
Ver1.13ではOKやった(らぷらす)
216_gunzip:2001/05/28(月) 21:06 ID:???
>>214
>そゆことです。
>展開ソフト(ラプラス)のバグでしょうかね。
そうだったんだ・・・受動喫煙云々しかなかったら、そりゃ驚くね。
自分は五年以上前からLHAユーティリティ(16,32)使ってます。

>mksos.com
あれ?>>213のように修正しても上手くいかなかった?
うちでは上手くいってるのだが・・・
>mksosファイルの最後に目的のスクリプトが追加されるだけで、
から推測するに、14行目だけしか修正していないのでは?
mksos.comは自分自身を開いて、#jperlから始まる行まで(ヘッダ部)を複写しているので、
(素直にsos.hdrを読めばいいのに、と思うが・・・158-161行参照)
14行目の#jperl %0 %@を#perl %0 %@に修正して、取りあえずperlで起動するようにしただけでは、
mksos.comは#jperlで始まる行を見つけられないので、自分自身を最後まで複写し、そしてその後ろに
指定されたファイルを読み込んで追加書き込みを行う、というわけ。
(って我ながら分かりにくい説明だな・・・)
うーん。とにかく>213のを試して欲しいなあ。(既にやっていたのならすまん)
____________________________________

・・・・・sos.hdrの中身・・・・・・
(改行をあけないで)
#perl %0 %@
____________________________________

というファイル(comhdr)でも作っておいて
cat comhdr example.pl >example.com
で連結するだけの方が手軽かも。
217名無しさん@お腹いっぱい。:2001/05/28(月) 23:57 ID:???
Perlの勉強を全てWEB上のものを使ってやろうとすれば
どういった感じ&どういった資料を使ってで勉強します?
前もって知っているプログラム知識はCの初級者から中級者レベルぐらいだとして。

いや、急にそう言う奴にPerl教えろって言われて・・(鬱
218名無しさん@お腹いっぱい。:2001/05/29(火) 03:25 ID:???
>>217
まずこのスレの >>2 を見る。
21922世紀を目指す名無しさん:2001/05/29(火) 16:24 ID:876XnkeU
#! /usr/local/bin/perl

open(IN,"count.dat");
@lines=<IN>;
close(IN);

($sec, $min, $hour, $mday, $mon, $year, $wday) = localtime(time);

$count=$lines[$hour];
$count=$count+1;


open(OUT,">count.dat");
flock(OUT,2);
print OUT "$count";
flock(OUT,8);
close(OUT);

時間毎のアクセス数の集計をしたいのだけど、
↑のプログラムじゃ駄目なんですか?
どこが駄目なのかわからんす
220名無しさん@お腹いっぱい。:2001/05/29(火) 16:57 ID:???
>>219
そりゃダメだろう。

chomp($lines[$hour]);
$lines[$hour] = $lines[$hour]+1 . "\n";


open(OUT,">count.dat");
flock(OUT,2);
print OUT @lines;
flock(OUT,8);
close(OUT);


じゃないのか?
221名無しさん@お腹いっぱい。:2001/05/29(火) 18:06 ID:r6iK.VsQ
XML::Parser (というかexpat)でxmlファイルをパースした時に、
テキストノード中の&gt;とか&lt; 等が
元の文字( > とか < )に戻るのを防ぐ方法(オプション)がありますか?
いちいち変換するのは鬱なので。
# でもモジュールのドキュメントにはそれらしい物もなかった…
222207:2001/05/29(火) 21:46 ID:???
>>216
あ…160行目をいじってませんでした。
お騒がせしてスミマセソ(;´Д`)
223219:2001/05/30(水) 11:15 ID:???
>>220
ありがと!!!!
やってみます
224名無しさん@お腹いっぱい。 :2001/05/30(水) 12:10 ID:???
CGIで、どんな串でも生IP引き出せる技あるんだけど
その技を知っている人いますか?
225名無しさん@お腹いっぱい。:2001/05/30(水) 13:08 ID:???
>>224
(゚Д゚)ハァ?
中学卒業してからこいや。な?
226名無しさん@お腹いっぱい。:2001/05/30(水) 13:27 ID:4wOldUvA
>>220

#! /usr/local/bin/perl

open(IN,"count.dat");
@lines=<IN>;
close(IN);

($sec, $min, $hour, $mday, $mon, $year, $wday) = localtime(time);

chomp($lines[$hour]);
$lines[$hour] = $lines[$hour]+1 . "\n";

open(OUT,">count.dat");
flock(OUT,2);
print OUT @lines;
flock(OUT,8);
close(OUT);

でやってみたんだけど駄目です。
時間毎のアクセス数の集計をしたいのだけど、
色々調べてやってみたんだけど、どこが駄目なのかわからんす。
誰か分かる人教えてください
227名無しさん@お腹いっぱい。:2001/05/30(水) 13:57 ID:???
>>226
はじめに
0
0
0
・・・・って感じに25行続いてるcount.datを用意ておくこと。
それでもだめなら、数回動かしたあとの count.dat を貼り付けてくれ。
228220:2001/05/30(水) 14:01 ID:???
>>226
1: count.datに24行分の0が用意されていない
2: count.datにパスが通っていない
3: パーミッションがおかしい
4: Perlのパスが通っていない
5: flockが使えない

他にはなんだ?
つーか、何がどうダメなんだよ?
CGIは動くのか?
エラー表示はないのか?
count.datはどうなってる?

君の聞き方に問題はないのかい?
少なくともこっちがローカルで試した分にはきちんと動いてるぞ。
229名無しさん@お腹いっぱい。:2001/05/30(水) 15:28 ID:???
>>221
パーサオブジェクトをnewするときに、NoExpand => 1 を指定する
方法はどうかと思って試してみたけど、使えないですねー。

つーか、XML::Parserのソースを読んでみたら、
entityを展開するあたりは「TO-DO」事項となってて、
まだコードも流動的みたいです。
230名無しさん@お腹いっぱい。:2001/05/30(水) 17:46 ID:OOYQyBGY
Perl で、Cの構造体みたいなのを
つくるときは、リファレンスとハッシュで作りますよね?

その場合で質問したいのですが、データ構造を「固定化」するのは
どうやるのですかね。
つまり、
foo.str1 / foo.str2 みたいなメンバ(Cでいえば、ですけど)しか
許してないのに、foo.srt1 とかタイプミスしてるお馬鹿さんに
エラーを出してほしいわけですよ。
ハッシュでやると、タイプミスでも、新たなキー、バリューのペアとして
認識されちゃうので・・・・。
ちなみに、constant pragma はダメっす。
やってみたけどうまくいかない。涙。
231名無しさん@お腹いっぱい。:2001/05/30(水) 18:07 ID:???
>>230
方法その一
擬似ハッシュを使う
#!/usr/bin/perl
use 5.005;
use constant NL => "\n";
$hash = [
    {
        a => 1,
        b => 2,
        c => 3,
    },
    "value a",
    "value b",
    "value c",
];

print $hash->{a}, NL; # $hash->[ $hash->[0]->{a} ] と等価

print $hash->{z}, NL; # 致命的エラー

#新たなフィールドを作成するには

$hash->[0]->{z} = 4;    # まずIndexをいじってから
$hash->{z} = "value z"; # 値を入れる
__END__
232名無しさん@お腹いっぱい。:2001/05/30(水) 18:11 ID:???
方法その二
 メソッドを介してのみアクセスする

方法その三
 Tie::Hashを使って、
 未定義のキーにアクセスしようとするとエラーを起こさせるクラスを書く。
 (探せば既にCPANにあるかも知れない。)
233CGI串:2001/05/31(木) 00:38 ID:4JRetkV.

CGI串を作ってみたんだけど、ウェブメールみたいに、レスポンスヘッダのロケーションで飛ばされる場合、
目的のファイルにアクセスできないのですが、対処方法がありますか?

use Socket;
read(STDIN,$_,$ENV{'CONTENT_LENGTH'});
($par0,$par1)=split(/=/);
$par0="";
$par1=~tr/+/ /;
$par1=~s/%([0-9a-fA-F][0-9a-fA-F])/pack('C',hex($1))/eg;
while($par1)
{
$par1=~/^http:\/\/([^:\/]+)([^\r\n]+)/;
$par1="";
socket(AUXFIL,PF_INET,SOCK_STREAM,getprotobyname('tcp'));
connect(AUXFIL,sockaddr_in(80,inet_aton($1)));
select(AUXFIL);
$|=1;
select(STDOUT);
$|=1;
print AUXFIL "GET $2 HTTP/1.0\r\n\r\n";
while(<AUXFIL>)
{
s/\r*\n$/\r\n/;
if(/^set-cookie[\s:]+/i)
{
$par0.=$_;
next;
}
if(/^location[\s:]+([^\r\n]+)/i)
{
$par1=$1;
next;
}
if(/^content-type[\s:]+/i)
{
$par2=$_;
next;
}
if(/^\r\n$/)
{
$par2.=$_;
last;
}
}
close(AUXFIL) if $par1;
}
234CGI串:2001/05/31(木) 00:39 ID:4JRetkV.
if($par2=~/^content-type[\s:]+image\/(\w+)/i)
{
$par1='TMPFIL';
$par2="temp.$1";
open($par1,">$par2");
}
else
{
$par1='STDOUT';
print $par0.$par2;
}
while(<AUXFIL>)
{
print $par1 $_;
}
close(AUXFIL);
if($par1 eq 'TMPFIL')
{
close($par1);
print $par0."content-type:text/html\r\n\r\n";
print "<html>\r\n";
print "<head>\r\n";
print "<meta http-equiv=\"content-type\" content=\"text/html;charset=x-sjis\">\r\n";
print "<title>image</title>\r\n";
print "</head>\r\n";
print "<body>\r\n";
print "<p><center><img src=\"$par2\">\r\n";
print "</center></p>\r\n";
print "</body>\r\n";
print "</html>\r\n";
}
235名無しさん@お腹いっぱい。:2001/05/31(木) 01:03 ID:???
(゚Д゚)ハァ?
レスポンスのヘッダのロケーションを見て目的のファイルにアクセスすればいいだろ?
236CGI串:2001/05/31(木) 01:27 ID:???
>>235
書いたソースでも、ロケーションを辿っているのですが、目的のURLがロケーションの中に
出てこないんですよね。どうしてでしょう?
237221:2001/05/31(木) 02:43 ID:???
ありがとうございます。>>229

そうなんですよ<NoExpandでできない
しょうがないんで、ファイルをパースする前に&を全部&amp;に変換してます。
238名無しさん@お腹いっぱい。:2001/05/31(木) 02:44 ID:Tcn2CYCI
>>236
アクセスできなかったURLって、たとえばどこよ。
239CGI串:2001/05/31(木) 09:09 ID:hqu7A44A
240CGI串:2001/05/31(木) 09:10 ID:hqu7A44A
241名無しさん@お腹いっぱい。:2001/05/31(木) 14:40 ID:1N8fTgyg
オブジェクトからそのオブジェクトが属しているクラスの名前を呼び出すやり方は
わかったのですが、オブジェクトから現在のオブジェクトの名前を呼び出すには
どうしたらいいのですか?
242名無しさん@お腹いっぱい。:2001/05/31(木) 14:51 ID:???
「オブジェクトの名前」ってなに?例えばどんなの?
243名無しさん@お腹いっぱい。:2001/05/31(木) 15:23 ID:???
$objname = { foo => 'bar', hoge => 'fuga' };
$self= bless $objname;

コレの"$objname"ってのが知りたいとか(ムリ
244名無しさん@お腹いっぱい。:2001/06/01(金) 16:51 ID:SCNbEuy6
自宅のローカルPCにApacheインストールして
perlもインストールして勉強してる人いますか?

ブラウザでhttp://127.0.0.1/~***/index.html
で表示できるようになりましたが
http://127.0.0.1/~***/*.plはそのまま文字列のまま
表示されたり、エラーが返ってきます。
↓のはCGIのためのPerl実践入門 技術評論者のp224のです。
#!/usr/local/bin/perl
$|=1;
print <<"HERE";
content-type: text/html


<html>
hello,world!
</html>
HERE
↑の場合は500servererrorになってしまいます。
*.cgi拡張子のサンプルはうまくいくのですが
*.plはトラブルばかりです。Apacheのconfファイルに
何か追加記述が必要なのですかね・・・。
245名無しさん@お腹いっぱい。:2001/06/01(金) 17:09 ID:9xf3QHUM
>>244
おれも Win2kにいちおうApache入れてます。
.plをCGIとして実行したいなら、httpd.confで
AddHandler cgi-script .cgi

AddHandler cgi-script .cgi .pl
とすればいいんじゃなかな?今試したら動きました。
246名無しさん@お腹いっぱい。:2001/06/01(金) 17:28 ID:SCNbEuy6
>>245
245さん、レスありがとうございます。
書かれたようにhttpd.confに追加記述してみました。

ですが、やはり500のエラーが返ってきてしまいます・・。
なんでなんでしょうね?

私もWin2000でApacheはc\webにapache.exe、
その下にwwwwというフォルダを作り*.cgiも*.plも置いて実行しています。
perlは>>244で書いてあるとおりパスのところへインストールしてあるんです。

もうちょっと格闘してみます。245さん、ありがとうございます!
247名無しさん@お腹いっぱい。:2001/06/01(金) 17:52 ID:???
突然ですが、ちょっと質問です

CGIで
「ある時間になったら自動的に0にリセットされる」
プログラムってあるかな?

日にちごとのカウンターと言うのは
「本日のお客様は○○名です」と言うのは、最終更新した日と
   現在の日が異なった場合リセットするのはわかってます。

最終更新した時刻に関係なく、夜の0時になったら自動的に
カウンターがリセットされる。そんなプログラムってないですか?
248名無しさん@お腹いっぱい。:2001/06/01(金) 18:11 ID:???
cron
CGIとは無関係だが
249名無しさん@お腹いっぱい。:2001/06/01(金) 18:14 ID:???
あれ…?
STDINがキーボードの時、
eof(STDIN)をすると入力を促されるんですが、正常ですか??

% perl -e "print eof(STDIN)"
250名無しさん@お腹いっぱい。:2001/06/02(土) 01:01 ID:???
>>248

247ではないですが、cronの設定が出来ないサーバで擬似的にcronを
実装するにはどうしたら良いでしょうか?

ってそんな方法あるわけないか。

WINのhttpdで勉強してますけど、上級テクニックを覚えるためにはやはり
unix系のOSで勉強しないとイケマセンかねぇ・・・。
251minima:2001/06/02(土) 07:24 ID:???
>>247 さん

$filename = 'times.dat';

print "いらっしゃいませ\n";

($tmday, $tmon, $tyear )
  = ( gmtime( time + 9 * 60 * 60 ) )[3..5];

if( open fp,"$filename" ){
  ($mday, $mon, $year )
    = split ',',<fp>;
  close fp;
}

if( ($tyear>$year) or ($tmon>$mon) or ($tmday>$mday) ){
  print "今日最初のアクセスです(´ー`)\n";
  if( open fp,">$filename" ){
    print fp "$tmday,$tmon,$tyear";
    close fp;
  }
}

基本はコレでいいかと。
252251:2001/06/02(土) 07:37 ID:???
>>251 さん

補足っす

> 最終更新した日と
> 現在の日が異なった場合リセットする



> 夜の0時になったら自動的に
> カウンターがリセットされる

は,見た目には同じことだと思って↑を書きました。
253252:2001/06/02(土) 07:38 ID:???
>>251 じゃなくて >>247 さんへ。
254名無しさん@お腹いっぱい。:2001/06/07(木) 11:10 ID:ym.eiAto
Perlのデータの型を調べる方法ってありませんか?

Data::Dumperの出力を見ると数値を文字列をちゃんと識別してるようなのですが、
ソースを見ても分かりませんでした。
よろしければご教授願います。
255名無しさん@お腹いっぱい。:2001/06/07(木) 13:02 ID:XmkeoP0E
>>254
とりあえず、ref $var; とかやってみれ。
String なのか int なのかを調べたいって言うなら、
print "int" if ($var eq $var+0);
とかかな?
256名無しさん@お腹いっぱい。:2001/06/07(木) 13:29 ID:v985Z4cI
ヒアドキュメントの中で計算をすることってできますか?
(例
$foo=$bar=1;
print <<"EOF";
$foo+$bar
EOF

これだと「1+1」
って表示されますよね?「2」って表示したいんですが、、、
その前で$hoge=$foo+$bar;
として$hogeを表示すればいいのはわかるんですが
あんまり一時変数をつくりたくないもんで、、、
なにか、トリッキーでもいいんで一時変数を作らなくていいやり方などないでしょうか?
257名無しさん@お腹いっぱい。:2001/06/07(木) 13:56 ID:???
>>256
ヒアドキュメントじゃないとダメなの?
ヒアドキュメントじゃ出来ないと思うけど。

$foo=$bar=1;
print <<"EOF";
なにか
EOF
print $foo+$bar;
print <<"EOF";
なにか
EOF
258e2j:2001/06/07(木) 14:03 ID:???
>>256
キリ番おめでとう
#!/usr/bin/perl
$foo = $bar = 1;
print <<EOD;
${\
   ($foo + $bar)    # 括弧は必須
}
@{[
      $foo + $bar       # 括弧は不要
]}
EOD
__END__
259名無しさん@お腹いっぱい。:2001/06/07(木) 14:16 ID:v985Z4cI
>>257
かっちょいい答えありがとうございます!
リファレンスを使うのかな?とか思ってたんですけど
やはり(?)そういうかんじですかね。

${\($foo + $bar)}
んーでもどうしてそうなるのか若んないや。
()の中は2になるわけだから
スカラー変数のリファレンスに"\2"を渡してるわけですよね。
\ってのはどういう意味があるんだろ、、、
260名無しさん@お腹いっぱい。:2001/06/07(木) 14:19 ID:v985Z4cI
>>257
あ、確かにそういう風なやり方もできるんですけど
ヒアドキュメントを途切れないように長く続けたいんですよ。
(続いてないとhtmlデザインとプログラムの分離が起こってしまうから)
しかも単純な計算をするところはヒアドキュメントの中でやればわかりやすいですよね。
(ヒアドキュメントの前で計算して変数を作るより)
結構わがままな望みでしたけどね(^^;
261名無しさん@お腹いっぱい。:2001/06/07(木) 14:20 ID:v985Z4cI
あう、何度もすみません
>>259
>>258さんへ向けてです
262e2j:2001/06/07(木) 14:29 ID:???
"\"ってのはリファレンスを得る演算子です

$foo = 2;
$bar = \$foo;
print ${ $bar };
print ${ \ 2 };

>>258に追加
無茶苦茶ですがこういうことも可能です。
print EOD;
${\do{
        use strict;
   print "Hello world\n";
 my $foo = my $bar = 1;
   foreach my $i(0 .. 5){
    $foo += $i;
    }
 $foo + $bar;
}
EOD
263名無しさん@お腹いっぱい。:2001/06/07(木) 14:34 ID:v985Z4cI
>>262
うひゃ、、、さすがにそこまでやるとなると
ヒアドキュメント切ります、、、
しっかしそんなこともできるんですねー

勉強になりました。
264254:2001/06/07(木) 14:49 ID:???
>>255
いや、そういうわけではなく、
例えば "1" と 1 の違いを調べることが出来るのか、
という事を知りたいのです。
数値じゃない文字列に0+をすると-wの元で警告が出るのも嫌ですし。
265257:2001/06/07(木) 14:57 ID:???
>>258
そんな事が出来るのか・・・。
勉強になりました。
サンクス。
266名無しさん@お腹いっぱい。:2001/06/07(木) 14:58 ID:???
>>264
Perlでは数値と文字列を区別しない。
これが素人ウケするところ。
だから"1"を数式にも使える。
267254:2001/06/07(木) 15:15 ID:???
>>266
それは承知ですが、それでも区別したいんですよ。
Data::Dumperでは確かに区別されているので、方法はあると思うのですが。

#!/usr/bin/perl
use Data::Dumper;
my @list = (1, '2', 0+'3', 4 . "");
print Dumper(\@list);
__END__
268_gunzip:2001/06/07(木) 18:45 ID:???
>>267
Perlは内部で数値と文字列を区別してるよ。ただ、
>数値じゃない文字列に0+をすると-wの元で警告が出るのも嫌ですし
が「数値か文字列か知りたい」理由ならば、use warningsして、numeric警告
をオフにするのが一番。
この辺りはperldoc perlexwarnが詳しい。

#!/usr/bin/perl -w

use warnings;
{
    no warnings qw[ numeric ];
    $str = "ABC";
    print $str * 5;
}
-------
0 (-w,-Wでも警告無し)
------
あと、内部でどのようにデータが格納されているかを知りたければ、
Devel::Peekの出力が助けになるかもしれない。
-----------
#!/usr/bin/perl -w
use Devel::Peek;
$str = "15";
$int = 15;
Dump($str);
Dump($int);
-----------
SV = PV(0x176eb98) at 0x1765768
REFCNT = 1
FLAGS = (POK,pPOK)
PV = 0x176020c "15"\0
CUR = 2
LEN = 3
-----------
SV = IV(0x1763ce8) at 0x1765774
REFCNT = 1
FLAGS = (IOK,pIOK)
IV = 15
-----------
構造体のFLAGSメンバに注目。IOK,POKの意味についてはperldoc perlgutsほか、
http://gisle.aas.no/perl/illguts/
を読むのがいい。
269_gunzip:2001/06/07(木) 19:01 ID:???
>構造体のFLAGSメンバに注目。
じゃなくて、(flagsメンバなんて無いし)
SV = PV(0x176eb98)
SV = IV(0x1763ce8)
ここら辺ね。
あと、口調が変に偉そうになったのは申し訳ない。
270_gunzip:2001/06/07(木) 19:39 ID:???
なんか勘違いしてた。
>ソースを見ても分かりませんでした。
おそらく、Dumper.pmを読んだのだと思われるけれど、
Data::Dumper::Dumper()は大抵Dumpxsを呼ぶから、
おそらSvTYPE()マクロあたりで数値型か文字列型かを
判別しているのではないかと思うよ。
・・・とにかく、Dumper.xsを読めば分かると思ふ。

試しに、>267のスクリプトを
#!/usr/bin/perl
use Data::Dumper;
my @list = ("w",1, '2', 0+'3', 4 . "");
print Data::Dumper->Dumpperl([\@list]);
としてXSを呼ばないようにして、違いを比べてみては?

それと、昔
http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521
の828,829辺りで同じ事を書いた記憶が。
271254:2001/06/07(木) 21:00 ID:???
>>270
Perl内部の事はわかりません(泣)

が、一応求める答えはわかりました。
Data::DumperはXsubを使ってたんですね…

お手数かけました。ありがとうございます。
272名無しさん@お腹いっぱい。:2001/06/08(金) 00:08 ID:???
うー、もしかしてWindowsだとDB_Fileの$DB_RECNOって使えないんでしょうか。
273名無しさん@お腹いっぱい。:2001/06/08(金) 00:14 ID:???
>>272
そう判断した理由は?
274272:2001/06/08(金) 00:40 ID:???
>>273
このコードが動きません…。
間違ってはいないですよね…?
#!/usr/bin/perl
use DB_File;
use Fcntl;
use strict;
use warnings;
my @file;
my $db = tie @file , DB_File => 'hoge.dat' , O_RDONLY, 0666, $DB_RECNO
or die "can't open hoge.dat: $!$^E\n";

__END__
275_gunzip:2001/06/08(金) 00:42 ID:???
>>274
エラーメッセージは?
276272:2001/06/08(金) 00:55 ID:???
>>275

D:\> perl foo.pl
can't open hoge.dat:
D:\>

空です…わけ分からんです
277_gunzip:2001/06/08(金) 00:58 ID:???
>>276

#!/usr/bin/perl
use DB_File;
use Fcntl;
use strict;
use warnings;
my @file;
my $db = tie @file , DB_File => 'hoge.dat' , O_RDWR | O_CREAT, 0666, $DB_RECNO
or die "can't open hoge.dat: $!$^E\n";

ファイルが存在しなかった場合、作成するようにしないと。(O_CREAT)
詳しくはperldoc -f sysopen
278名無しさん@お腹いっぱい。:2001/06/08(金) 02:15 ID:cJiaW2fQ
メールアドレスをsendmailのBccに入れたいのですが入ってくれません。
$HOGE{$in{'hoge'}}に値が入っていることは確認できています。

%HOGE = (
'A','[email protected]',
'B','[email protected]',
);

open(OUT,"| $sendmail -t");
print OUT "To: $mailto\n";
print OUT "From: $mailfrom\n";
print OUT "Bcc: $HOGE{$in{'hoge'}}\n";
print OUT "\n";

途中で、
$mailbcc = $HOGE{$in{'hoge'}};
として
print OUT "Bcc: $mailbcc\n";
のようにしてもダメです。何がいけないんでしょう?
279278:2001/06/08(金) 02:17 ID:???
ちなみに、メールはBcc以外ちゃんと届きます。
280名無しさん@お腹いっぱい。:2001/06/08(金) 04:58 ID:???
>>278-279
普通はこれで問題なくBcc:に送れるよなー。
OSやsendmailのバージョン書いてみたら?
281名無しさん@お腹いっぱい。:2001/06/08(金) 05:26 ID:???
メールって改行はCRLFじゃなかったっけ?
この問題とは多分関係ないけど。
282278:2001/06/08(金) 10:43 ID:0V.Sa7B.
うーむ、やっぱり何かがおかしい?
FreeBSD 4.2 のバーチャルホスト
Sendmail 8.11.2
です。
283276:2001/06/08(金) 11:28 ID:???
>>277
いえ、ファイルが存在するのは確認済みですよ、当然。
だから何か別の…って、ありゃりゃ成功した!?

そんな…?
って、O_CREATを外しても成功…?

.
.
.

…これは…どうもRDONLYでオープンすることは出来ないって事らしいです。
ううぅ…かなり悩みましたが、これって仕様なんでしょうか。
284276:2001/06/08(金) 14:13 ID:ikkb28As
DB_Fileの配列…むっちゃ速いですね…
indexがあるわけではないのに何故こんなに速いんでしょうか



Benchmark: timing 10000 iterations of DB_File, getline...
DB_File: 3 wallclock secs ( 2.58 usr + 0.00 sys = 2.58 CPU) @ 3875.97/s (n=10000)
getline: 4 wallclock secs ( 3.68 usr + 0.00 sys = 3.68 CPU) @ 2717.39/s (n=10000)
285276:2001/06/08(金) 14:14 ID:ikkb28As

#!/usr/bin/perl
use DB_File;
use Fcntl;
use strict;
use warnings;
use Benchmark;
my @file;
my $db = tie @file , DB_File => 'hoge.dat' , O_RDWR, 0666, $DB_RECNO;

open IN, 'hoge.dat';
binmode IN;my($t_length, $s, $i, @index) = (0);sub getline($);

my @list = (1, 100, 1000, 2000, 3000, 5000, 10000);
push @list, reverse @list;
timethese(10000, {
    DB_File => sub{
        foreach $i(@list){ $s = $file[$i];   }
    },
    getline => sub{
        foreach $i(@list){ $s = getline($i); }
    },
});

sub getline($){
    my $n = shift;
    if(defined($index[$n])){
        seek IN, $index[$n], 0;
        return scalar(<IN>);
    }
    local $_;
    while(<IN>){
        $index[$.] = ($t_length += length($_));
        $. == ($n +1) and last;
    }
    return $_;
}
__END__
286名無しさん@お腹いっぱい。:2001/06/08(金) 16:00 ID:GuCXLnfI
perlでcookieを相手に送るには
どうしたいいんでしょうか?
287286:2001/06/08(金) 16:01 ID:GuCXLnfI
らが抜けてますな、、
よろしくお願いします
288名無しさん@お腹いっぱい。:2001/06/08(金) 16:42 ID:???
>>287
print "Set-Cookie: $cookie\n";

言うまでも無いが、$cookieには適切な書式のクッキーが入っているものとする
289名無しさん@お腹いっぱい。:2001/06/08(金) 20:40 ID:eaozRcTQ
カールさんのサイトって今どこかにありますか?
あったら教えてください。検索してもリンク切れのところばっかりで。
290名無しさん@お腹いっぱい。:2001/06/08(金) 20:47 ID:???
29122世紀を目指す名無しさん:2001/06/08(金) 20:58 ID:???
sendmailでReceivedを隠す(または偽装)方法ってありますか?
ちょっとした事情で必要なのですが・・・・・
よろしくおねがいします。
292名無しさん@お腹いっぱい。:2001/06/08(金) 21:15 ID:???
> ちょっとした事情

SPAM
293名無しさん@お腹いっぱい。:2001/06/08(金) 22:30 ID:???
> ちょっとした事情

ボム
294名無しさん@お腹いっぱい。:2001/06/08(金) 22:33 ID:???
> ちょっとした事情

MLでジサクジエン
295名無しさん@お腹いっぱい。:2001/06/08(金) 22:45 ID:uMb8RtP.
ちょっとずれているかもしれないが、Web中継のことで質問です。
あれって、一体どのようにやればいいのでしょうか?
どんな道具が必要なのか、是非教えて下さい。

簡単にいうと、赤ちゃんが生まれいくまでの過程を全世界中に
オンラインムービーを流す技術が欲しいのです。
296295:2001/06/08(金) 22:47 ID:uMb8RtP.
あっ、別に赤ちゃんじゃなくて、ディープな車レースを流したいだけです。
297289:2001/06/09(土) 13:24 ID:y1DFOqBY
CGIスクリプトを配布してるところでお願いします。
もうないんでしたっけ?
298名無しさん@お腹いっぱい。:2001/06/09(土) 16:09 ID:???
勝手に流していいのか?
299295:2001/06/09(土) 17:40 ID:aiiOiIcw
>>298
いいですよ。某会社の常務からの依頼ですので、
許可とやらの問題はありません。
300電動ナナシ:2001/06/09(土) 17:55 ID:???
301電動ナナシ:2001/06/09(土) 17:54 ID:???
302電動ナナシ:2001/06/09(土) 17:58 ID:???
わっ、タイムスリップ・・・
鬱だし脳
303名無しさん@お腹いっぱい。:2001/06/09(土) 23:53 ID:GnWQlRGQ
情けない質問で申し訳ないが質問させてください。

FreeBSD 4.2 / apache 1.3.20 にてperlのCGIを実行させたく
試行錯誤しているのですが、巧く行かずに苦労しています。
現在は〜/apache/cgi-bin/printenv の実行は正常に行われる環境です。

実行させたいperlスクリプトは、KENT-WEBさんのYY-BOARDです。
どう、巧く行かないのかと言いますと、perlを見つけられない???のではないかと。
試しにtelnetで該当dirに行きまして、./yybbs.cgiとタイプしますと
>./yybbs.cgi: コマンドが見つかりません.
と怒られてしまいます。
ですが、perl5 ./yybbs.cgiとタイプしますと希望の結果が帰って来ます。
yybbs.cgi1行目のperlへのパス指定は合っているハズなのにどうして
こんな事になるのでしょうか???

何方かアドバイスしていただけますでしょうか。
304名無しさん@お腹いっぱい。:2001/06/09(土) 23:55 ID:Stf2UWrU
>>303
ブラウザで試して御覧なさい。
305名無しさん@お腹いっぱい。:2001/06/09(土) 23:57 ID:GnWQlRGQ
>>304
説明不足でした。
ブラウザでの表示は403 Forbiddenとなっています。
けど、、、うぅーむ???
馬鹿ですか?ワタシ
306名無しさん@お腹いっぱい。:2001/06/10(日) 00:01 ID:???
chmod 755 ./yybbs.cgi
307303:2001/06/10(日) 00:04 ID:4dlL9Pdo
>>306
確かに755としています。
ちなみにapacheのUserはnobodyからhttpdというユーザに変更
していますが、弊害ありますでしょうか?
308306:2001/06/10(日) 00:07 ID:???
んじゃ、
> yybbs.cgi1行目のperlへのパス指定は合っているハズなのに
がまちがってるんでは?
1行目と
which perl5
の結果でも見比べてー。
それ以上はわからん。
309303:2001/06/10(日) 00:13 ID:4dlL9Pdo
>>308
httpd.conf中の
Options Indexes FollowSymLinks

Options Indexes FollowSymLinks ExecCGI
に変更するのを忘れていたようです。大変失敬。

で、状況が変わりました。
ブラウザでは500 Internal Server Errorとなっており、
error.logには、Premature end of script headersが記録されました。
ん〜???
310306:2001/06/10(日) 00:25 ID:???
そのエラーだとどうせ改行コードだろ・・・・
なんか疲れた。
311名無しさん@お腹いっぱい。:2001/06/10(日) 00:29 ID:???
ヘッダ吐かずに死んだな。
312名無しさん@お腹いっぱい。:2001/06/10(日) 00:31 ID:M/Q/m3rw
えっと、ディレクトリにあるファイルの名前を取得して、リストにい
れたいですが、どうしたらいいでしょうか?
313306:2001/06/10(日) 00:31 ID:???
と言うか、
> 試しにtelnetで該当dirに行きまして、./yybbs.cgiとタイプしますと
> >./yybbs.cgi: コマンドが見つかりません.
> と怒られてしまいます。
をまず直せ。
CGI以前の問題。
多分、/usr/bin/perl5\r とか言うファイルを探しに行くからエラーになるの。
改行コードの問題じゃなければ、/usr/bni/perl5 とかを探しにいって略。
何も考えずにエラーメッセージをGoogleに突っ込んだら山ほど出てくるんだから、
多少は自分で考えたほうがいいと思うぞ。
314名無しさん@お腹いっぱい。:2001/06/10(日) 00:33 ID:???
opendir DIR, "./";
@dir = readdir DIR;
closedir DIR;
print "$_\n" for (@dir):
315303:2001/06/10(日) 00:38 ID:4dlL9Pdo
>>313
手を煩わせて申し訳ない。自分でもあれこれ探してはいるのですが…
>コマンドが見つかりません
これを解決しないことには、とは自分も考えています。
改行コードの問題は知りませんでした。

出直してきます。
316312:2001/06/10(日) 00:43 ID:???
>>314
ありがとです。
317306:2001/06/10(日) 00:47 ID:???
>>315
これで最後ね。
とりあえず、1行目の最後に -- を付けて、
#!/usr/bin/perl5 --
とか(もちろん自分の環境に合った奴)に変えてみ。
改行コードが原因なら ./yybbs.cgi で起動しないのはこれで直るはず。
原因は自分で調べること。
318303:2001/06/10(日) 01:13 ID:4dlL9Pdo
>>317
大変良く理解出来ました。
やはり改行コードの問題だったようです。
有難う御座いました。
319名無しさん@お腹いっぱい。:2001/06/10(日) 10:11 ID:fkqIyGrs
>>300
何分、初心者なもので、そういうのがあることを
今初めて知りました。有難うございました。
あと、検索してみると、とても勉強になるサイトがありましたの
はっときます。
http://www.din.or.jp/~ya3/real/
320名無しさん@お腹いっぱい。:2001/06/11(月) 01:55 ID:8pqT6lXA
WebProgの意味がわかりません。
誰か教えてください。お願いします。
321名無しさん@お腹いっぱい。:2001/06/11(月) 02:38 ID:KPOx6cx2
>>320
まだ申請が受理されてないけど、こんな感じです。
http://teri.2ch.net/test/read.cgi?bbs=accuse&key=991479482

#しかし↑この申請、下がりまくってるねえ。
322名無しさん@お腹いっぱい。:2001/06/11(月) 10:31 ID:TvlqC4OU
ヒントだけでいいんで教えてください。
SAFEってありますよね。
変数のネームスペースにおけるCHROOTみたいなの。
あれの原理って・・・?
Perlには、あれを行うための秘密の機能とかがあるのですか?
モジュールのソースを読んだんですが、原理がわからんです。
323名無しさん@お腹いっぱい。:2001/06/11(月) 23:07 ID:pKfL8KNc
>>321
有り難うごさいます。

このタイトルは、初めて来る人はわからないと思います。
Web_PG
こう書いてくれると助かる。
324名無しさん@お腹いっぱい。:2001/06/11(月) 23:48 ID:4YVegt0Y
カンマ区切りで書かれた a.csv の、
4番目の項目が「ok」だったら、
その行の3番目と6番目のセルをタブ区切りで b.csv に保存する。
というのはどうしたらいいでしょう?
325rubbish_lister:2001/06/12(火) 00:00 ID:???
#!/usr/bin/perl
use IO::File;
use strict;
my $a = IO::File->new('a.csv');
chomp(my @b = grep{ (split/,/)[3] eq 'ok' } IO::File->new('a.csv')->getlines);
IO::File->new('>b.csv')->print( map{ join("\t", (split/,/)[2, 5]) . "\n" }@b );
__END__
>>324
326rubbish_lister:2001/06/12(火) 00:01 ID:???
ぬ、4行目の"my $a ..."は不要ね
327名無しさん@お腹いっぱい。:2001/06/12(火) 00:38 ID:???
>>325-326 さん、ありがとう
ばっちりでした。感謝感謝!!
328_gunzip:2001/06/12(火) 08:31 ID:???
>>322
ヒントになるかどうか分からないが。

#Safe.pm(209-222)
return Opcode::_safe_call_sv($root, $obj->{Mask}, $evalsub);
# $root には"Safe::Root1"のような文字列 $obj->{Mask} は制限用ビットマスク
# $evalsub はcoderef

/* Opcode.xs(257-295) */

void
_safe_call_sv(Package, mask, codesv)
    char *Package     #一時的なパッケージ
    SV *mask        #opコード制限マスク
    SV *codesv     #実行するサブルーチン
PPCODE:
    [中略]
    
    ENTER; #スコープに入ります
    
    [中略]
    
    # 内部API関数 void Perl_save_hptr(pTHXo_ HV** hptr) を呼び出し、
    # 他パッケージへのポインタを格納した最上位スタッシュ defstash への
    # ポインタを一時待避させる。(スコープ終了時に自動回復)
    save_hptr(&PL_defstash);
    
    # 内部API関数 HV* Perl_gv_stashpv(pTHX_ const char *name, I32 create)
    # により、パッケージ名 Package のHV(スタッシュ)へのポインタでdefstash
    # (メインスタッシュ)を置き換える。
    # パッケージ名 Package が存在していなければ(あり得ない)
    # GV_ADDWARN により警告
    PL_defstash = gv_stashpv(Package, GV_ADDWARN);
    
    [中略]
    
    # 引数として与えられたcodesv(SV*にキャスト済み)を呼び出す。
    perl_call_sv(codesv, GIMME|G_EVAL|G_KEEPERR);
    
    [後は眠いので略]
    

#間違いが有れば教えて欲しひ。
329_gunzip:2001/06/12(火) 08:35 ID:???
一時的なパッケージ -> 一時的な*ルート*パッケージ
330教えて坊主:2001/06/12(火) 09:05 ID:qzJs/a5U
すみません。今LWP使っていろいろ試してるんですが、LWPで取得してきた
HPに画像ファイル(.jpg)があったとして、それを自分のPCに保存する
プログラムを書いています。(ようは右クリックして保存を自動化するもの)
どうも上手くいかないので、わかる方いましたら教えてください。
宜しくお願いします。
331名無しさん@お腹いっぱい。:2001/06/12(火) 09:35 ID:M/ZGscH2
>328さん

ふむふむふむ。
やはり、Perlの秘密(でもないのかな?)の
内部関数を呼び出していたのですね。
このヒントを頼りに、自力(←もう他力になってるけど(爆笑))更生を
目指します。
332名無しさん@お腹いっぱい。:2001/06/12(火) 11:44 ID:sehxFmlg
<input type="radio" name="hobby" value="野球">
<input type="radio" name="hobby" value="テニス">
として、両方$hobbyにぶち込みたいのですが、
DBに登録するときには、最後の一個しか入りません。
&hobby=....&hobby=....&となるせいなのですが。
初心者スミマセン
333名無しさん@お腹いっぱい。:2001/06/12(火) 12:25 ID:???
>>332
<input type="checkbox" name="hobby1" value="野球">
<input type="checkbox" name="hobby2" value="テニス">
334rubbish_lister:2001/06/12(火) 13:36 ID:???
>>330
間違っても共用鯖ではやらないように。
#!/usr/bin/perl
#getimage.pl
use LWP::Simple;
binmode(STDOUT);# Windowsでは必須
print get(shift);
__END__

C:\> perl getimage.pl http://hoge.net/foo/bar.image > bar.image

>>332
Queryを解析する時に
$data{$name} .= ", $value";
とでもすればよろしい
335324:2001/06/12(火) 14:24 ID:cGbuu4QE
度々すみません。>>325 でrubbish_listerさんに教えていただいた

#!/usr/bin/perl
use IO::File;
use strict;
IO::File->new('a.csv');
chomp(my @b = grep{ (split/,/)[3] eq 'ok' } IO::File->new('a.csv')->getlines);
IO::File->new('>b.csv')->print( map{ join("\t", (split/,/)[2, 5]) . "\n" }@b );
__END__

で、6番目の項目が重複していたら b.csv に書き出さない、
とするにはどうしたら良いでしょう?
336rubbish_lister:2001/06/12(火) 15:30 ID:???
#!/usr/bin/perl
use IO::File;
use strict;
my %exists;
IO::File->new('>b.csv')->print(
    map{ sprintf("%s\t%s\n", @{ $_ }[3, 6]) }
        grep{ $_->[4] eq 'ok' and not $exists{ $_->[6] }++ }
            map{ chomp; [ undef, split /,/ ] }
                IO::File->new('a.csv')->getlines
);
__END__
>>335
あまり大きなファイルを処理するのには向かないが
337名無しさん@お腹いっぱい。:2001/06/12(火) 16:29 ID:???
たとえば、

  ../index.html<br>
  ../doraemon.html<br>
  ../nobita.html<br>
以下続く・・・

というふうにしたいのですが、

$chon = "../";

print << "EOF";
  $chonindex.html
  $chondoraemon.html
  $chonnobita.html
EOF

とすると
$chonindex.htmlやら$chonnobitaやらの変数があることに
なって困っています。どないしたらいいでしょうか?
338tkx:2001/06/12(火) 16:52 ID:9FWW9dnw
<form action="〜.cgi" method="post" target="_blank">

</form>
という風に別ウインドウにCGIをpostで引き渡すのって反則なんでしょうか?
IE5.5+winやNN4.7+winでは問題なく作動するんですがNN6.0+winではpostした内容が一切引き渡されないんです。
NN6.0+winのバグであれば、これを回避する方法ってないでしょうか?
339名無しさん@お腹いっぱい。:2001/06/12(火) 16:58 ID:???
>>337
$chon = "../";

print << "EOF";
  ${chon}index.html
  ${chon}doraemon.html
  ${chon}nobita.html
EOF

俺も昔引っかかった。
340名無しさん@お腹いっぱい。:2001/06/12(火) 17:08 ID:Ah5wBUQA
ちょっと教えてください。

時間を使いたいんです。
例えば
$date_now ;#現在の日時
$date_soon ;#現在から1ヵ月後

とした場合、$date_nowの方は
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
で取れますよね?
一ヵ月後となると。。。難しいですか?

今現在はPostgreSQLに一回$date_nowを落としてから1ヶ月足して
それを$date_soonに入れなおしてますがあまり効率的ではないような
気がするんで。。。
341名無しさん@お腹いっぱい。:2001/06/12(火) 17:22 ID:???
>>340
$mon=$mon+2
342T女の竹田:2001/06/12(火) 17:25 ID:???
>>340
1月31日の一ヶ月後は何月何日にしたいの?
30日後とかなら簡単だよ。
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time+60*60*24*30);
じゃないのかな。
343340:2001/06/12(火) 17:40 ID:Ah5wBUQA
>>341
それだと13月とかでませんか?

>>342
2月28日にしたいんですが難しいですか?
閏年とかも計算して。。。
今のままの方がやっぱり楽なんですかね(^^;
344T女の竹田:2001/06/12(火) 18:16 ID:???
>>340
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
@dayinmonth = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
$year+=1900;
($year_next, $mon_next, $mday_next) = ($year, $mon, $mday);
$year_next++ if $mon == 11;
$mon_next++;
$uruu = 1 if $mon_next == 1 && ($year_next % 400 == 0 || ($year_next + 1900) % 4 == 0 && $year_next % 100 != 0);
print "$dayinmonth[$mon_next]\n";
print "$uruu\n";
$mday_next = $dayinmonth[$mon_next] + $uruu if $mday_next > ($dayinmonth[$mon_next] + $uruu);

う゛〜、ぜんぜんスマートじゃないけど。。。。
345T女の竹田:2001/06/12(火) 18:17 ID:???
あ゛〜、ミスまでまじってるし。6行目の$year_next + 1900は$year_nextです。
346T女の竹田:2001/06/12(火) 18:44 ID:???
それか、こんなのかなぁ。

$time_temp=time();
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($time_temp);
$time_temp+=60*60*24*31;
do {
    (undef, undef, undef, $mday_next,$mon_next, $year_next,,,) = localtime($time_temp);
    print "$year_next $mon_next $mday_next\n";
    $time_temp-=60*60*24;
} while ($mday_next > $mday || $mon_next != ($mon + 1) % 12);
347T女の竹田:2001/06/12(火) 18:46 ID:???
あ゛〜、確認用コードが残ってた。。
print "$year_next $mon_next $mday_next\n";
は要らないです…はぁ〜なにやってんだろ。
348名無しさん@お腹いっぱい。:2001/06/12(火) 19:15 ID:???
モジュールありそうな気がします
私は探してないですが探してみたらどうですか
349名無しさん@お腹いっぱい。:2001/06/12(火) 20:50 ID:???
ん〜、Date::Calc とかつかってみたら?
使ってないからどうかわからんけど。
350335:2001/06/12(火) 21:18 ID:???
>>336 rubbish_listerさん
再びたいへんありがとうございました。
非プログラマな私には救世主です。
351337:2001/06/13(水) 00:28 ID:???
>>339
ありがとうございました。
352名無しさん@お腹いっぱい。:2001/06/13(水) 00:28 ID:mJODJwMk
jcode.pl と jcode.pm とではどちらを使用するのが、
良いでしょうか。自分のPCだけでの使用範囲です。
353名無しさん@お腹いっぱい。:2001/06/13(水) 00:42 ID:???
Jcode.pm
354rubbish_lister:2001/06/13(水) 00:44 ID:???
別にどちらでも構わないと思いますよ。
ただ、予め文字コードが分かっていて、半角カナを使わないのなら
文字コード変換はNKF.pmの方が圧倒的に高速でした。
参考にどうぞ。
355名無しさん@お腹いっぱい。:2001/06/13(水) 00:49 ID:???
>>353さん、>>354さん、ありがとうございます。
NKF.pmもためしてみます。
356名無しさん@お腹いっぱい。:2001/06/13(水) 01:50 ID:???
NKF.pm は使い方がいまいちわからない・・・・・
357(-_-:2001/06/13(水) 08:05 ID:20J.4Zf6
cgi.pmを使用してparam()でフォームの内容を取得して
文字コード変換をおこなうのは可能ですか?
358340:2001/06/13(水) 10:46 ID:5WiWUamY
T女の竹田様

ありがとうございます。
スクリプトも大変勉強になりましたが、何事もめんどくさがらずにやると
いう姿勢も学ばせていただきました。
359名無しさん@お腹いっぱい。:2001/06/13(水) 12:20 ID:???
>>357 可能です。
360名無しさん@お腹いっぱい。:2001/06/14(木) 10:11 ID:???
>>359
「cgi.pmを使用して」がどこにかかるかによらない?(国語の問題)
「文字コード変換を行う」にもかかると考えると無理っぽい。
361341:2001/06/14(木) 20:15 ID:???
>>343
if ($mon eq 13){
$mon=1
}
362名無しさん@お腹いっぱい。:2001/06/14(木) 21:07 ID:zRHTE03A
perlとは関係ないかもしれませんが、
ゆいちゃっとのkill.datの書き方がわかりません。
どなたか教えていただけないでしょうか
363名無しさん@お腹いっぱい。:2001/06/14(木) 21:51 ID:elt2x50M
ファイルの更新日時を変えたいんですが
追加オープンしてみたんですがうまくいかないようです。
上書きオープンならなんとかなるんですが
なるべくファイルを書き換えずに変更したいんです。
どうしたらいいんでしょうか?
364名無しさん@お腹いっぱい。:2001/06/14(木) 21:53 ID:q9Gx71xM
漢字のパターンマッチングをやりたいんですが、うまくいきません。
教えてくださ〜い。

if($moji ne ~/[亜-龠]/ )

これで、$mojiが、漢字じゃなかったら、って感じになると思うんですが、うまくマッチングしません。何故でしょうか?
365>>363:2001/06/14(木) 22:24 ID:???
utime
366名無しさん@お腹いっぱい。:2001/06/14(木) 23:36 ID:HVlmJCFw
>>364
・ 「=~」演算子の否定形は「ne ~」じゃなく「!~」。
・ 漢字のマッチは日本語モードでないと実行できない。

#!/usr/local/bin/perl -Lsjis
・・・
if ($moji !~ /[亜-龠]/)
・・・
367名無しさん@お腹いっぱい。:2001/06/15(金) 04:39 ID:r3DAHg.Y
>>366さん、ありがとーございます!!

で、それを実行してみました。そしたら、、

Internal Server Errorがでます。

たぶん、

#!/usr/local/bin/perl -Lsjis

これが原因だと思うのですが、エラーを出なくするには、どうしたらよろしんでしょうか?
宜しくお願いします。
この呪文は勿論、プログラムの最初に記述するのですよね?
368ななしサソ:2001/06/15(金) 09:24 ID:JAlA10oI
formから送られてくるデータを格納の際の質問です。
<textarea>内の改行をそのままデータとして処理したいのです。
この改行と1レコードを区切る改行は、皆様どう区別されているのでしょうか?
1.データに入れる際に→すべて<BR>に置換する。
2.データにはそのまま入れ、表示するときに<BR>に置換する。

HTML表示だけならば1でよさげですが、1.2両方とも
CSV吐き出しでほかのアプリケーション(たとえばエクセル)で
扱うときに問題がありそうですが・・・。

1.だと文章中に<BR>があってわけわからん。
2.だとレコード構造が壊れる or 改行が"・"とか表示?
\r, \n \r\nと使い分けできるのかな?
369名無しさん@お腹いっぱい。:2001/06/15(金) 11:29 ID:???
データの保存形式によるのでは

私の場合は,1データ1行のデータとか1行で一つの内容を表すとかそういった場合は1(必ずしも<br>にするとは限らないけど)
xmlで保存だったらそのままかな

というかHTML表示もCSV吐き出しも原理は同じかと思われ
370名無しさん@お腹いっぱい。:2001/06/15(金) 11:29 ID:7EF0hPLo
ファイルの内容を置き換えてコピーするスクリプトをつくったのですが、
スペースのところで改行されてしまいます。
配列そのままをコピー先のファイルに書き込むと、
もんだいはないのですが・・
よい方法ありませんか?


open(FILE_TO,">>file_to");
open(FILE_FROM,"file_from");

# modify string
@string_array = <FILE_BASE>;
foreach $string(<@string_array>){
$string =~ s/hogehoge/foofoo/;
print FILE_TO $string;
print FILE_TO "\n";
}

# write to file
close(FILE_TO);
close(FILE_FROM);
371S:2001/06/15(金) 11:38 ID:O2mrj.vg
>>370
「スペースのところで」という意味がよくわかませんが…。

$string に改行が入ったままなので、
print FILE_TO $string ですでに改行されてます。次の行でさらに
print FILE_TO "\n"; とする必要はないです。
372T女の竹田:2001/06/15(金) 11:42 ID:???
あ、先越されちゃった(^^;)

>>370
書き間違いだと思うけど、
FILE_BASEはFILE_FROM、あと<@string_array>は@string_arrayだよね。
念のため。
373370:2001/06/15(金) 13:42 ID:???
コピー元
<META name="GENExxxx
コピー先
<META
name="GENExxxxx
って感じだったんです。
>FILE_BASEはFILE_FROM、あと<@string_array>は@string_arrayだよね
これが原因でした。
直したらうまくいきました。

半日なやんだ原因がこれだけだったとは・・

でも思い切って聞いてみてよかった。
ありがとうございました
374ななしサソ:2001/06/15(金) 15:58 ID:JAlA10oI
>369
サンクソ
>というかHTML表示もCSV吐き出しも原理は同じかと思われ
そうなんですど、つまり今度はデータとして使いたいときに、
改行があるから、レコードがおかしくなりますよね?
($1 tab $2 tab $3 tab \n)で1レコードなのに、
$2の中に\nが入ってる訳です。
($1 tab $2 tab $3 tab \n)が2レコードになってしまいます。
375ななしサソ:2001/06/15(金) 15:58 ID:JAlA10oI
>369
サンクソ
>というかHTML表示もCSV吐き出しも原理は同じかと思われ
そうなんですど、つまり今度はデータとして使いたいときに、
改行があるから、レコードがおかしくなりますよね?
($1 tab $2 tab $3 tab \n)で1レコードなのに、
$2の中に\nが入ってる訳です。
($1 tab $2 tab $3 tab \n)が2レコードになってしまいます。
376名無しさん@お腹いっぱい。:2001/06/15(金) 17:02 ID:m1xvu7Zs
>>374
吐き出したCSVをそのまま別アプリで読みたいってわけ?
ならそのソフトが読める形式でデータ吐くしかないでしょ。
377名無しさん@お腹いっぱい。:2001/06/15(金) 17:06 ID:???
http://www.din.or.jp/~ohzaki/perl.htm
↑みりゃ分かんべ。
378ななしサソ:2001/06/15(金) 17:25 ID:JAlA10oI
>377 おぅ、サンクソ!!!
印刷して、今晩ゆっくり勉強します。

>376 CSV→SQLで読める形式変換Perl書いてくだしゃい。
ODBC使ってもゴミと一緒に改行吐き出しやがるし、(バグ?)
いったいどうすりゃいいんだ?
379名無しさん@お腹いっぱい。:2001/06/15(金) 19:05 ID:???
クソクソうるせーぞ。黙れ。
380名無しさん@お腹いっぱい。:2001/06/15(金) 20:54 ID:???
ごめんクソ(大爆笑)
381363:2001/06/15(金) 22:29 ID:???
>>365
utime で変更日時とアクセス日時変更できるんですね。
ありがとうございます。
これから試してみることにします。
382名無しさん@お腹いっぱい。:2001/06/16(土) 01:30 ID:s.BBQbAs
open(LOG,">>./log.dat")などとファイルに追加書き込みする場合、
ファイルロックは不要なのでしょうか。
383名無しさん@お腹いっぱい。:2001/06/16(土) 01:42 ID:???
プロセスA        プロセスB           ファイルX
↓             ↓                 ↓
writeシステムコール  ↓
↓             ↓                 ↓    
Xに"hoge"を出力せよ writeシステムコール
↓             ↓                 ↓
h              Xに"foo"を出力せよ     h
↓             ↓                 ↓
o              f                  hof
↓             ↓                 ↓
g              o                  hofgo
↓             ↓                 ↓
e              o                  hofgoeo




(´д`)マズーー
384名無しさん@お腹いっぱい。:2001/06/16(土) 01:42 ID:???
なるほど。
385名無しさん@お腹いっぱい。:2001/06/16(土) 17:27 ID:???
open(OUT, "+< outfile.txt");
flock(OUT, 2);
truncate(OUT, 0);
seek(OUT, 0, 0);
print OUT "........";
close(OUT);
と書いた場合、ロックが解除されるまで別プロセスは待つのでしょうか。
open(OUT, "+< outfile.txt") || die("ファイルオープンに失敗\n");
と書いた場合はロックがかかっていると書きこまずに終了してしまうので、
確実に書きこみをさせたいのです。
また、1つのファイルに対して読みこみ→処理→書きこみとする場合、
読みこみの時からロックするべきなのでしょうか。
386rubbish_lister:2001/06/16(土) 22:46 ID:???
openの成功はflockに関係ないが…。
何か疑問があればまずテストしてみてはどうだろうか。
387名無しさん@お腹いっぱい。:2001/06/16(土) 23:48 ID:2gIPolvU
>>382-384
>open(LOG,">>./log.dat")
(1) writeがアトミック動作
(2) openにappendモードがある
が満たされてればロック不要でしょ。
だからUNIX系やWin2000ならロック不要。
Win95はどうだったかな・・・。
388名無しさん@お腹いっぱい。:2001/06/17(日) 02:58 ID:???
「writeがアトミック」を満たすにはsyswriteを使わなくてはだめでわ?
389387:2001/06/17(日) 14:33 ID:kJNCMImk
>>388
あ、そのとおりだね。syswriteじゃないと、でかいデータは
複数回に分けて書き込まれるのでアトミック性がなくなる。
390名無しさん@いつも空腹:2001/06/17(日) 16:56 ID:zspd2eTk
掲示板などのCGI起動回数をカウントするにはどうすれば良いですか?

最近、私のホームページにアクセスする人の多くは
掲示板(bbs.cgi)を直接ブックマーク登録しているらしく
アクセスカウンタが寂しい状態です
391名無しさん@お腹いっぱい。:2001/06/17(日) 17:32 ID:???
>>390
掲示板にカウンタをつけてトップページと共有する
392名無しさん@お腹いっぱい。:2001/06/17(日) 19:56 ID:m7qST3dg
会社に好きなおねーちゃんがいるんです。
そのおねーちゃんをひーひー悦ばすぱーる教えてください。
やっぱり真珠埋め込みですかね。
393名無しさん@お腹いっぱい。:2001/06/17(日) 21:42 ID:???
>>392
初心者がいきなりモジュール等に頼るのは感心しません。
まず基礎的な知識を覚えてから経験をつみましょう。
394名無しさん@お腹いっぱい。:2001/06/18(月) 08:08 ID:???
真珠が気持ちいいと思ってるのは馬鹿なヤクザだけ
無知な童貞逝ってよし
395名無しさん@お腹いっぱい。:2001/06/18(月) 08:08 ID:???


  ハハハ
  ∧_∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ( ^∀^)<  あほか  この低脳が >>392
 ( つ ⊂ ) \_________
  .)  ) )
 (__)_)     (^∀^)ゲラゲラ  シネ
396名無しさん@お腹いっぱい。:2001/06/18(月) 09:09 ID:fCtvXMRU
392曰く

真珠が気持ち良くないって言ってるのは、
真珠入りヤクザにケツほられたことない
男だけ

とのこと。
397名無しさん@お腹いっぱい。:2001/06/18(月) 09:46 ID:cfKmX2RE
>>387
syswriteってバッファリングしないって事ですよね?
やっぱり、一つのファイルをガリガリ読み書きする場合、
相当パフォーマンスは落ちるのでしょうか。
398名無しさん@お腹いっぱい。:2001/06/18(月) 10:20 ID:???
>>394
激しく同意!
399名無しさん@お腹いっぱい。:2001/06/18(月) 15:29 ID:zLGH8Szo
>>397
バッファリングが効果を発揮するのは、
1文字ずつとか1行ずつとか小分けに読み書きする場合なので、
sysread/syswriteで一気にファイルを読み書きするんだったら
パフォーマンスは落ちないです。
400名無しさん@お腹いっぱい。:2001/06/18(月) 16:43 ID:478GYAHs
ドキュンな質問ですいません。はじめてPerlをやるんですが、
いきなりつまずいています。
送信して書き込むと言う単純作業なんですが以下のように書いたんですが
動作しません。間違えがあったら指摘して下さい・・・

elsif ($in{'menu'}) {

open(IN,"stitle.log") || &error("Open Error : stitle.log","LK");
@line = <IN>;
close(IN);

# 更新
open(OUT,">stitle.log") || &error("Write Error : stitle.log","LK");
print OUT @line;
close(OUT);
}

print <<"EOM";
<form action="$script" method="POST">
<input type=hidden name=pass value="$in{'pass'}">
<input type=hidden name=mode value="admin">
一行目 <input type=text name=menu size=30>
<input type=submit value="サブタイトル">
</form>
EOM
401名無しさん@お腹いっぱい。:2001/06/18(月) 16:47 ID:???
>>400
何故それで動くと思えるのかが不思議だ
402名無しさん@お腹いっぱい。:2001/06/18(月) 16:56 ID:478GYAHs
ドキュンな質問ですいません。はじめてPerlをやるんですが、
いきなりつまずいています。
送信して書き込むと言う単純作業なんですが以下のように書いたんですが
動作しません。間違えがあったら指摘して下さい・・・

elsif ($in{'menu'}) {

open(IN,"stitle.log") || &error("Open Error : stitle.log","LK");
@line = <IN>;
close(IN);

# 更新
open(OUT,">stitle.log") || &error("Write Error : stitle.log","LK");
print OUT @line;
close(OUT);
}

print <<"EOM";
<form action="$script" method="POST">
<input type=hidden name=pass value="$in{'pass'}">
<input type=hidden name=mode value="admin">
一行目 <input type=text name=menu size=30>
<input type=submit value="サブタイトル">
</form>
EOM


>>401
だからドキュンな質問なんです。本当にわからないです。
403名無しさん@お腹いっぱい。:2001/06/18(月) 16:59 ID:???
全部出しなさい。
404名無しさん@お腹いっぱい。:2001/06/18(月) 17:08 ID:???
>>402
何度も書くな。
どうせ自分で考えたスクリプトじゃないんだろうから、元のスクリプトを完全に写せ。
写し終わったら氏ね。
405名無しさん@お腹いっぱい。:2001/06/18(月) 17:12 ID:478GYAHs
>>403

sub kanri {
local(@line, $menu);

if ($in{'menu'}) {

open(IN,"stitle.log") || &error("Open Error : stitle.log","LK");
@line = <IN>;
close(IN);

# 更新
open(OUT,">stitle.log") || &error("Write Error : stitle.log","LK");
print OUT @line;
close(OUT);
}

# 管理画面
&header;
print <<"EOM";
[<a href="$script?">初期画面に戻る</a>]
<table width="100%"><tr><th bgcolor="navy">
<font color="#FFFFFF">管理モード</font>
</th></tr></table>
<P><blockquote>
<form action="$script" method="POST">
<input type=hidden name=pass value="$in{'pass'}">
<input type=hidden name=mode value="admin">
一行目 <input type=text name=menu size=30>
<input type=submit value="サブタイトル">
</form>


EOM

}
exit;

まだ作り中ですが・・・
406名無しさん@お腹いっぱい。:2001/06/18(月) 17:22 ID:???
elsifは何処いったんだよ。

もう良い。お前CGI作成/改造に手出すな。

今日の教訓:ドキュソにも程がある
407名無しさん@お腹いっぱい。:2001/06/18(月) 17:23 ID:???
elsifは何処いったんだよ。

もう良い。お前CGI作成/改造に手出すな。

今日の教訓:ドキュソにも程がある
408S:2001/06/18(月) 17:41 ID:???
初心者コーナーだから仕方ないのでは…。

>>405
どういう風に「動作しない」のかきちんと書きましょう。
動くけど更新されてないとか、エラーで動かないとか…。

・ @line を全く更新していない。$menu を追加するのでは?
・ どうせファイル全体を @line に入れるなら、
 open(IN,"+<stitle.log");
 @line = <IN>;
 (@lineの更新処理)
 seek(IN,0,0);
 print @line;
 truncate(IN,tell(IN));
 close(IN);
 と一度のファイルオープンで終わらせるようにしましょう。
409S:2001/06/18(月) 17:42 ID:???
まちがえました。
print @line; → print IN @line;
410名無しさん@お腹いっぱい。:2001/06/18(月) 18:09 ID:???
syswrite と、$| = 1 でバッファリングoffした print とは
どう違うんですか?
411名無しさん@お腹いっぱい。:2001/06/18(月) 18:17 ID:???
>>410
お前には同じに見えるのか。
すげーな。
412名無しさん@お腹いっぱい。:2001/06/18(月) 22:22 ID:???
>>411
試しに説明してみて。
413410:2001/06/18(月) 23:18 ID:2vmGPgqA
>>411
syswriteはstdioを通さないとかありましたけど、何が起こるのか良く解りません。
御分かりなら説明orポインタを示して貰えると有り難いです。

----

ところで、Perlで flush とかいう操作をするにはどうすればいいんでしょう。
select FILE; $| = 1; print '';
でできますか?
414名無しさん@お腹いっぱい。:2001/06/19(火) 00:01 ID:???
引数が全然違うだろうが。ヴァカか?(藁
415名無しさん@お腹いっぱい。:2001/06/19(火) 00:04 ID:???
>>414
もうちょっと説明して。馬鹿だから。
416名無しさん@お腹いっぱい。:2001/06/19(火) 00:06 ID:???
>>414
なんだその程度か。期待して損した。
417名無しさん@お腹いっぱい。:2001/06/19(火) 00:10 ID:???
>>414
久々に真性アホを見つけた。さらしあげ。
418名無しさん@お腹いっぱい。:2001/06/19(火) 00:38 ID:???
>>414
プ
419414じゃないが:2001/06/19(火) 00:56 ID:???
あれ?syswriteって書き込むサイズを指定する必要があったと思うけど..........
420_gunzip:2001/06/19(火) 01:09 ID:???
>>413
perldoc -q flush すると出てくるよ。
http://www.perl.com/pub/doc/manual/html/pod/perlfaq5.html#How_do_I_flush_unbuffer_an_outpu

>>419
5.6からは指定する必要なし。
perldoc -f syswrite or perldoc perldelta

引数が二個しか無ければ、長さを勝手に計算してスタックに積んでくれる。
/* pp_sys.c */
PP(pp_syswrite)
{
    dSP;
    int items = (SP - PL_stack_base) - TOPMARK;
    if (items == 2) {
        SV *sv;
        EXTEND(SP, 1);
        sv = sv_2mortal(newSViv(sv_len(*SP)));
        PUSHs(sv);
        PUTBACK;
    }
    return pp_send();
}
421rubbish_lister:2001/06/19(火) 01:22 ID:???
バッファなしprintとsyswriteは何が違うんでしょうね。
小細工をしている分printの方が重いような…
と思いBenchmark.pmで測定するも、差は見られず…。

# やはりPerlを知るためにはCを学ばなければいけないのか…。
422名無しさん@お腹いっぱい。:2001/06/19(火) 01:33 ID:AOjMGb9g
両者の違いは、でかいデータを書き込むとき、
バッファなしprintだと1KBごとに細切れに書き込むので
その境目でタスクスイッチが発生する可能性があるけど、
syswriteは全部いちどに書くのでアトミック性が保証される。
ということかも。
・・・根拠はFreeBSDのstdioのソース+想像90%
423410:2001/06/19(火) 01:40 ID:Y5lp4EqE
>>414, >>419
言葉が足りなくてすみません。そういう違いは解ってます。
上のほうでも出てるアトミック性がどうのという話とか、
「stdio を経由しないので、 print と一緒に使うと混乱する」とか、
Programming Perl にも書いてある partial write(書き込み途切れてる?)とか、
ファイルシステムとの関連というか…そこらへんでの違いを知りたいと思いまして。
OS関連のことが良くわからないので…。

>>420
こちらも言葉が足りなくてすみません。
該当ページは以前読んだのですが、最初からautoflushにする方法しか無いようでした。
+> でオープンしたファイルに何か書き込んだあと、それを読むという操作を
したいのですが、でかいファイルにけっこう細かく書き込むので書き込みが
終わるまではバッファリングさせておきたいのです。

その後自分で実験したら、書き込んだあと読むために seek で巻き戻すと flush される
ようで、心配することもないのかな、という感じです…。

長文すみません。
424超初心者:2001/06/19(火) 04:01 ID:nKH5a7VE
こんにちは。もしかしたら板違いかもしれませんが、
http://cheese.2ch.net/test/read.cgi?bbs=art&key=982673377&st=508&to=509
こういうのって本当に問題あるんですか?
著作権法の侵害になってしまうのでしょうか?
425_gunzip:2001/06/19(火) 04:22 ID:???
>>423
んーいまいち具体的に何を知りたいのか見えないけれど、
処理の流れは↓のようになっていることは、知って置いた方がいいかな。

・syswrite()
PerlLIO_write()もといシステムコール
write(int filedes, const void *buff, size_t bytes)
    filedes --> syswriteに渡されたファイルハンドル(から得られるディスクリプタ)
    buff --> syswrite に渡した文字列
    bytes --> 書き込むバイト数(指定されなかった場合Perlが内部で計算する)
を呼び出してその場で書き込む。

・バッファリング無しのprint
PerlIO_write()(≠PerlLIO_write) もといstdioライブラリの
fwrite(const void *ptr, size_t size, size_t count, FILE *fp) に、
    ptr --> print に渡した文字列(ちょっと違う)
    size --> 1 固定だよ
    count --> 文字列長(Perlが内部で計算する)
    fp --> printに渡されたファイルハンドル(から得られるFILE構造体へのポインタ)
を渡して呼び出し書き込むよう指示する。
その後、IOフラグを調べてIOf_FLUSH ビットがセットされていた場合
(つまり、バッファリング無しに設定されていた場合)PerlIO_flush()もとい
stdioのfflush(FILE *fp)を呼んで、まだ書き込んでいないデータをカーネルに渡す。

>後
>書き込んだあと読むために seek で巻き戻すと flush されるようで
いや、そんなことはないと思うが......。たしかdo_seek()はそんなことはしないはず。
>最初からautoflushにする方法しか無いようでした。
IO::Handle を利用して、適宜バッファを書き出したいときに
$io->fflush();
するのが一番スマート && 安全じゃないかな。
426_gunzip:2001/06/19(火) 06:49 ID:???
>$io->fflush();
$io->flush();
癖が。
427名無しさん@お腹いっぱい。:2001/06/19(火) 15:10 ID:???
$datdirというディレクトリの中に
20010617.dat 最終更新日6/19 14:00
20010618.dat 最終更新日6/18 15:00
20010619.dat 最終更新日6/19 18:00
というファイルがあった場合、
最終更新日順に@fileに入れるにはどうsortすればいいんでしょうか?
428rubbish_lister:2001/06/19(火) 16:01 ID:???
>>427
@fileに入るのはファイル名のみですか?
#!/usr/bin/perl
use IO::Dir;
use File::stat;
my $dir = '.';
my @file = map{ $_->[0] }
        sort{ $b->[1] <=> $a->[1] }
            map{ [$_, stat($_)->mtime] }
                grep{ not /^\.\.?$/ }
                    IO::Dir->new($dir)->read;
foreach(@file){
    print $_, "\n";
}
__END__
429電動ナナシ:2001/06/19(火) 16:53 ID:???
>>424
法律板の方がいいと思うぞ。
430名無しさん@お腹いっぱい。:2001/06/19(火) 18:29 ID:???


  ハハハ
  ∧_∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ( ^∀^)<  あほか
 ( つ ⊂ ) \_________
  .)  ) )
 (__)_)     (^∀^)ゲラゲラ キエロ カイセンキッテクビモキレ ケラ
431名無しさん@お腹いっぱい。:2001/06/19(火) 18:48 ID:???
>>428
はい、ファイル名のみです。ありがとうございました。
432410:2001/06/19(火) 20:02 ID:tqiPK0Uc
>>425
ありがとうございます。syswrite は最初からダイレクトに書き込む、
$| = 1 はバッファ(?)に書き込んだ後それを flush、という感じなんでしょうか。
こういう違いが知りたかったので勉強になりました。

>seek

open F, "+>hoge.txt";
print F 'hoge';
open F2, "<hoge.txt";
# seek F, 0, 1;
read F2, $buf, 1024;
print $buf;

こんなので試しました。このままでは何も表示されず、# を外すと "hoge" と出力されます。
seek すると書き込まれているように見えるのですが…。
433410:2001/06/19(火) 20:10 ID:???
あ、flush は flush.pl を見たら >>413 と同じことをしていたので、これを使おうと思います。
プロバイダのサーバではモジュールが使えないので。
434名無しさん@お腹いっぱい。:2001/06/19(火) 20:14 ID:???
そんなアホな。
435[cgi:38762]:2001/06/19(火) 20:26 ID:???
下記のようなN88ベーシックをパールで書くとどうなりますか?
2:"A"; lbtmp
4input "?x(%)=";x:
input "? "p(mmhg)=";p
6:gosub 500
8:print "t="; using "####.####";t;"c"
10:end
12:lp:rem lb.pres
14:input"x(%)=";x:
input "t(c)=";t
16:gosub 514
18;print "p="; using "####.####";p;"mmhg
20:end
*lh :rem ent.lb
24:input"?x(%)"=";x:
input"? t(c)=";t
26:gosub 525
28:print "h="; using "####.####";h;"kc/kg"
30:end

よろしくお願いします。
436名無しさん@お腹いっぱい。:2001/06/19(火) 22:49 ID:???
>>435
スレ違いだ氏ねヴォケ。←おやくそく。
しかしまじでCGI-MLにはこんなのが流れるんですか?
437337:2001/06/19(火) 23:20 ID:???
クッキーに2バイト文字をかきたいのですが、どうしたらいいでしょうか?
現在、下のようにCGIでクッキーをセットしてるのですが・・・
  print &setCookie("POSTNAME", $FORM{'postname'});
  sub setCookie {
    local($tmp, $val);
    $val = $_[1];
    $val =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg;
    $tmp = "Set-Cookie: ";
    $tmp .= "$_[0]=$val; ";
    $tmp .= "expires=Thu, 1-Jan-2030 00:00:00 GMT;\n";
    return($tmp);
  }
438337:2001/06/19(火) 23:21 ID:???
さげてしまったのでageます
439名無しさん@お腹いっぱい。:2001/06/19(火) 23:24 ID:lwqdY8As
何か問題でもあるん?
440337:2001/06/19(火) 23:29 ID:???
えっと、ジャバスクリプトでクッキーに格納された文字を以下のように読み出しているのですが、
文字化けした状態で出てくるのです。
--
<html><head>
<SCRIPT LANGUAGE="JavaScript">
<!--
getname = getCookie("POSTNAME");
if (getname == "") {
  getname = "";
}

function getCookie(key, tmp1, tmp2, xx1, xx2, xx3) {
  tmp1 = " " + document.cookie + ";";
  xx1 = xx2 = 0;
  len = tmp1.length;
  while (xx1 < len) {
    xx2 = tmp1.indexOf(";", xx1);
    tmp2 = tmp1.substring(xx1 + 1, xx2);
    xx3 = tmp2.indexOf("=");
    if (tmp2.substring(0, xx3) == key) {
      return(unescape(tmp2.substring(xx3 + 1, xx2 - xx1 - 1)));
    }
    xx1 = xx2 + 1;
  }
  return("");
}
// -->
</SCRIPT>
</head><body>
<SCRIPT Language="JavaScript">
<!--
mmbb = unescape(getname);
document.write("名前:<input type=text name=postname size=30 value=",mmbb,">");
// -->
</SCRIPT>
</body></html>
441439:2001/06/19(火) 23:36 ID:lwqdY8As
>>440
JavaScriptで呼び出す場合IEだと確かに化けるね。
NNだと問題ないけど。

$val =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg;

消すと大丈夫だよ。
その代わり;とか含むとCookieがちゃんと設定されない。
2chはそうなってるね。
IEのシェアが大きいから仕方ないのかな。

つか糞IEバグ直せよゴルァ
442rubbish_lister:2001/06/19(火) 23:38 ID:???
>>440
多分文字コードがUTF-8だからですね。

Perl5.6以上ならpackとJcode.pmで何とかなりますが、
それ以下のバージョンの場合はどうすればいいのやら…。
443439:2001/06/19(火) 23:42 ID:lwqdY8As
ん?UTF-8のせいなの??
NNではOKだからIEのバグだと思ってたが。
444rubbish_lister:2001/06/19(火) 23:55 ID:???
確かそうだったと…
m/%u([a-fA-F0-9]{4})/
って形ならUTF-8なのではないか。

試してないでアレですが。
445rubbish_lister:2001/06/19(火) 23:56 ID:???
「UTF-8なのではないかと」です(汗
446337:2001/06/20(水) 00:01 ID:???
>>439
消してもダメでした・・・

>>rubbish_l
クッキーの中身をみたところ
テスト中=%A5%C6%A5%B9%A5%C8%C3%E6
でした。UTF-8とやらみたいであります。
弱りました。当方Perl5.0の鯖なんす。
447439:2001/06/20(水) 00:04 ID:???
むぅ。俺が作った2ちゃん型BBSはそれで直ったんだが・・・。

あとはよう分からんスマソ。
448rubbish_lister:2001/06/20(水) 00:06 ID:???
>>446
え?
いやそれは(URIエスケープされているとはいえ)普通のEUC-JPですが…?
449rubbish_lister:2001/06/20(水) 00:10 ID:???
って、待てよ?

もしかしてCGIスクリプト側でセットしたクッキーをJavaScriptで読み出そうとしてます?
ちと勘違いしてました。すみません。
…となると…>>441さんの方法しか思いつきません。もうしわけない。
450337:2001/06/20(水) 00:15 ID:???
文字コードはEUCで、cgiスクリプト側で設定したクッキーをジャバスクリプトで読もうとしています。。。
451_gunzip:2001/06/20(水) 00:27 ID:???
>>437
ほういちさんの所は上手くいっていた記憶があるなあ。
http://www13.big.or.jp/~bell/nanashi/perl/

>>432
>という感じなんでしょうか。
そです。
syswrite --> write()でそのまま書き出し。
$| = 1 && print --> バッファリングされるけれど、print関数内で即フラッシュされる。
と考えればいいかと。

>>seek
>seek すると書き込まれているように見えるのですが…。
PerlIO_seekもといfseek()が、シークする前に__flshfp(FILE*,int)を呼び出して
バッファをフラッシュするのを忘れてた(鬱)すまん。
ちゃんと書き込まれますね。
452S:2001/06/20(水) 00:34 ID:???
>>337
IEのescape/unescapeは%uXXXXという形のUnicodeを使ってます。
なので、%XX の形のCookieはIEのunescapeでは戻せません。
クロスブラウザ(?)にするためには、JavaScriptかCGI内部のどちらかに
統一して、セットも取得も両方行う必要があります。
337のように取得をJavaScriptにするなら、セット(escape)もJavaScriptでやりましょう。

# USER_AGENT を見て、IE なら %uXXXX のように変換することもできますけど…。
453S:2001/06/20(水) 00:39 ID:???
>>440 だった。スマソ
454rubbish_lister:2001/06/20(水) 00:41 ID:???
>IEのescape/unescapeは%uXXXXという形のUnicodeを使ってます。

げげ、そうだったんですか…

とりあえず%uXXXXという形に出来ますが、
これはIE専用か…

use utf8;
use 5.6.0;
use Jcode;
$str = 'テスト中';
$str = Jcode::convert($str, 'utf8');
$str =~ s/(.)/ sprintf('%%u%x', unpack('U', $1)) /ge;
455名無しさん@お腹いっぱい。:2001/06/20(水) 12:11 ID:78RSTnoI
すみません
DOSで構文チェックすると
行数とエラーの内容がでてきますよね?
そのエラーの内容を解説してる本とかサイトとか
あったら教えてもらえないでしょうか?
ガイシュツだったらごめんなさい
456名無しさん@お腹いっぱい。:2001/06/20(水) 12:19 ID:rCbZrLc.
>>452
おおすげー俺的にタイムリー
板違いになっちゃうけど、javascriptでURLエンコードする
ライブラリってありませんかね?
色々検索したんだけど、全然見つからない。
ここまで見つからないと、javascriptだと実装不可能なのかなぁ。
と思ってみたり。
perlだと一行なのに。
457電動ナナシ:2001/06/20(水) 14:37 ID:???
escape()
458S:2001/06/20(水) 14:47 ID:???
>>455
英語ならPerl付属のマニュアルの中の perldiag という項目に出てます。
日本語訳は http://www.att.or.jp/perl/man/ ここにあります。

>>456
IEの場合、Unicodeでないエンコードは無理です(Appletを使ってやってる人はいますが)。
デコードならできると思いましたが、日本語と認識してくれないです…。

var encoded = "%82%B1%82%F1%82%C9%82%BF%82%CD%81B";
var decoded = encoded.replace( /%([0-9A-Fa-f][0-9A-Fa-f])/g, url_unescape );
function url_unescape( matchedString, subMatch1 ){
  return String.fromCharCode(parseInt(subMatch1,16));
}
459455:2001/06/20(水) 16:14 ID:uuv79wZI
>>458
ありがとうございます。
また何かあったらお聞きしますと思いますが
宜しくお願いいたします。
460名無しさん@お腹いっぱい。:2001/06/20(水) 16:47 ID:JljLMnck
文字か、アスキーコードを取り出したいのですが、
Perlでは、難しいのでしょうか。

C言語の場合(なにも考えなくてもいい・・・)
int asciicode = 'A'; /* asciicode = 0x65; */

Perl の場合(仮定)
$str = "A";
$asciicode = getAsciiCode( $str); # asciicode = 65;
この getAsciiCode関数が欲しい・・。

my $val = unpack('H2','A');
とした場合、返ってくるのは "41" ですね。近いんですけど、
これは16進数だから、なんとかして10進数に変換しなければいけない・・。
461460:2001/06/20(水) 16:53 ID:JljLMnck
しまったぁ!
こうすればいいんですね・・。jcode.pl のソースみて、
てきとーにやったら、出来てしまった・・。
my $val = unpack('CC','A');
失礼しました。
(なんで、こうやったら、できるのかはわからんが)
462名無しさん@お腹いっぱい。:2001/06/20(水) 18:41 ID:B0.Wtqj2
>>460
unpackはいろいろ使えて便利だけど、
動作が理解できないなら専用の関数使ったほうがいいぞ。

$code = ord('A'); # 10進文字コード←文字
$str = chr(65); # 文字←10進文字コード
463JAPU:2001/06/20(水) 18:44 ID:???
$val = ord "A";
464名無しさん@お腹いっぱい。:2001/06/20(水) 19:20 ID:???
質問です。
iモードの掲示板で、絵文字を入力された場合の対策はどのように
されてますか?
465名無しさん@お腹いっぱい。:2001/06/20(水) 20:42 ID:???
開いたファイルに毎行処理を行うには

while (<FILE>) { 処理 };

foreach (<FILE>) { 処理 };

ではどちらが速いでしょうか?
また、一度配列に入れてからのほうが良いのでしょうか?
教えてください。
466なー:2001/06/20(水) 21:18 ID:f8KvSrzA
>>465
最初に配列にまとめて入れた方が良いと思われ。
whileもforeachも速さは変わらないと思われ。
467受け売りだから間違ってたらゴメン:2001/06/20(水) 21:32 ID:???
>>465
配列に入れるとその分メモリを喰う。
あまりにも大容量な場合は配列に入れないほうがいい。
468rubbish_lister:2001/06/20(水) 21:36 ID:???
いや普通はwhileでは?
数キロバイトのファイルならいざ知らず、
メガバイト単位だと明らかにwhileの方が速いですよ?
469465:2001/06/20(水) 21:50 ID:???
ファイルの容量が大きければ配列に入れずにwhile,
小さければ配列に入れてforeach(配列に対してwhileは使えませんよね??)
ということですね。
ありがとうございました。
470名無しさん@お腹いっぱい。:2001/06/20(水) 22:55 ID:???
>配列に対してwhileは使えませんよね
念のため

while (shift @array) {
 something;
}
とかたまに使うよ
471名無しさん@お腹いっぱい。:2001/06/20(水) 23:08 ID:???
っつーか…

> 最初に配列にまとめて入れた方が良いと思われ。

これは何故こんな考えが?
後学の為に聞いておきたい。
472名無しさん@お腹いっぱい。:2001/06/20(水) 23:12 ID:f8KvSrzA
Win2000でActivePerl626 にTkモジュールを突っ込んだんですが、
「PerlCRT.dllがありません」って言われてTk.pmが落ちます。
どうしたらいいんでしょうか?

ちなみに、そのプログラムはSolarisのperl5.005_3で動いたものなので
コード的にはおかしくないはず・・・・
473名無しさん@お腹いっぱい。:2001/06/21(木) 01:29 ID:???
>>472
特定のコードで落ちるんですか?
それともTk使うと必ず落ちるのか。
474472:2001/06/21(木) 01:47 ID:???
perl -e "use Tk;"
でも落ちます。
これって、なにやっても落ちますよね・・・・
475473:2001/06/21(木) 02:49 ID:???
Win2000にTkを入れたばかりですけど、いちおう動いてまっせ。
"ppm install Tk"でインストールしました。

* ActivePerlのバージョン
v5.6.0 built for MSWin32-x86-multi-thread
Binary build 623

* Tkのバージョン
C>perl -MTk -e "print $Tk::VERSION"
800.022
476名無しさん@お腹いっぱい。:2001/06/21(木) 03:13 ID:???
perl.exe と同じディレクトリか system32 ディレクトリ内に
perlcrt.dll はありますか?
477名無しさん@お腹いっぱい。 :2001/06/21(木) 03:32 ID:???
このスレ、勉強になるなあ…ありがたや。
478名無しさん@お腹いっぱい。:2001/06/21(木) 04:39 ID:???
そうだね
479_gunzip:2001/06/21(木) 05:52 ID:???
>>465
while(<>) --> ファイルを一行毎に読み出す。
foreach(<>) --> ファイルを一括して読み、インデックスを回す。
という違いがあります。
......どちらもスピードはあまり変わりませんから、普通はwhile()の方を使います。
480_gunzip:2001/06/21(木) 05:53 ID:???
________________________________________

#!/home/devel/5.7.1/bin/perl -Dtls

print while <>;
________________________________________

EXECUTING...
(while.pl:0) enter
(while.pl:0) ENTER scope 2 at pp_hot.c:1535
Entering block 0, type BLOCK
    =>
(while.pl:0) nextstate
    =>
(while.pl:3) enter
(while.pl:3) ENTER scope 3 at pp_hot.c:1535
Entering block 1, type BLOCK
    =>
______________________________________

(while.pl:3) gvsv(main::_)
    => UNDEF
--> gvsv()コードによりSV ${"main::_"} を取得(undef)、スタックに積む。
______________________________________

(while.pl:3) gv(main::ARGV)
    => UNDEF GV()
--> gv()コードによりGV ARGV(ファイルハンドル)を取得、スタックに積む。
______________________________________

(while.pl:3) readline
    => PV("1\n"\0)
--> スタックからpopしたファイルハンドルから一行読み出し、$_に設定。
PV とは文字列の意。(ちゃんと改行付き)
______________________________________

(while.pl:3) defined
    => SV_YES
(while.pl:3) and
    =>
--> while() 内のテスト。Perl5.001からは while (<>)は
while (defined($_ = <>)) と同義になっている。
(op.c pod/perlop.pod,Change.log --NETaa13486を参照)
この場合、テストはSV_YES(文字列"1")を返した。(-> true)
______________________________________
481名無しさん@お腹いっぱい。:2001/06/21(木) 05:54 ID:???
 
482_gunzip:2001/06/21(木) 05:54 ID:???
...続き

(while.pl:3) pushmark
    => *
(while.pl:3) gvsv(main::_)
    => * PV("1\n"\0)
(while.pl:3) print
    => SV_YES
--> $_の値を取得し、printする。成功したためSV_YESを返す。
______________________________________

(while.pl:3) unstack
    =>
--> スコープ終了。オールクリア (-->ループ繰り返し)
______________________________________

#< .....以上をARGVから読みとれる限り繰り返す..... >#

(while.pl:3) leave
Leaving block 1, type BLOCK
(while.pl:3) LEAVE scope 3 at pp_hot.c:1657
    =>
(while.pl:3) leave
Leaving block 0, type BLOCK
(while.pl:0) LEAVE scope 2 at pp_hot.c:1657
(while.pl:0) LEAVE scope 1 at perl.c:394
483_gunzip:2001/06/21(木) 05:55 ID:???
________________________________________

#!/home/devel/5.7.1/bin/perl -Dtls

print foreach <>;
________________________________________

EXECUTING...
(foreach:0) enter
(foreach:0) ENTER scope 2 at pp_hot.c:1535
Entering block 0, type BLOCK
=>
(foreach:0) nextstate
=>
______________________________________

(foreach:3) nextstate
=>
(foreach:3) pushmark
=> *
(foreach:3) gv(main::ARGV)
=> * GV()
--> while() の時と同じ(省略)
______________________________________

(foreach:3) readline
=> * PV("1\n"\0) PV("2\n"\0) PV("3\n"\0)

--> ファイルハンドルARGVから全て読み出し、一行毎にスタックに積む。
PV は文字列の意。(改行付き)
______________________________________

(foreach:3) gv(main::_)
=> * PV("1\n"\0) PV("2\n"\0) PV("3\n"\0) GV()
(foreach:3) enteriter
(foreach:3) ENTER scope 3 at pp_ctl.c:1703
(foreach:3) ENTER scope 4 at pp_ctl.c:1734
Entering block 1, type LOOP
=> PV("1\n"\0) PV("2\n"\0) PV("3\n"\0)
(foreach:3) iter
=> PV("1\n"\0) PV("2\n"\0) PV("3\n"\0) SV_YES
(foreach:3) and
=> PV("1\n"\0) PV("2\n"\0) PV("3\n"\0)
--> リストから一つ取り出し$_ にセット。その後 $_をテスト(SV_YES --> true)
______________________________________
484_gunzip:2001/06/21(木) 05:55 ID:???
...続き。

(foreach:3) pushmark
    => PV("1\n"\0) PV("2\n"\0) PV("3\n"\0) *
(foreach:3) gvsv(main::_)
    => PV("1\n"\0) PV("2\n"\0) PV("3\n"\0) * PV("1\n"\0)
(foreach:3) print
    => PV("1\n"\0) PV("2\n"\0) PV("3\n"\0) SV_YES
--> $_の値を取得し、printする。成功したためSV_YESを返す。
______________________________________

(foreach:3) unstack
    => PV("1\n"\0) PV("2\n"\0) PV("3\n"\0)
(foreach:3) nextstate
    => PV("1\n"\0) PV("2\n"\0) PV("3\n"\0)
--> 次の繰り返しのためのクリーンアップ (-->ループ繰り返し)
______________________________________

#< .....以上を全ての要素に対して繰り返す..... >#

(foreach:3) iter
    => PV("1\n"\0) PV("2\n"\0) PV("3\n"\0) PV("\n"\0) PV("aaa\n"\0) SV_NO
(foreach:3) and
    => PV("1\n"\0) PV("2\n"\0) PV("3\n"\0) PV("\n"\0) PV("aaa\n"\0) SV_NO
(foreach:3) leaveloop
Leaving block 1, type LOOP
(foreach:3) LEAVE scope 4 at pp_ctl.c:1821
(foreach:3) LEAVE scope 3 at pp_ctl.c:1822
    => PVNV(""\0)
-->もう要素が残っていないためSV_NO(文字列"")が返されループ終了
______________________________________

(foreach:3) leave
Leaving block 0, type BLOCK
(foreach:0) LEAVE scope 2 at pp_hot.c:1657
(foreach:0) LEAVE scope 1 at perl.c:394
485_gunzip:2001/06/21(木) 05:59 ID:???
=> スタックの内容
です。
.......それにしても長すぎた。申し訳ない。
486 :2001/06/21(木) 06:31 ID:???
487 :2001/06/21(木) 06:32 ID:???
488 :2001/06/21(木) 06:32 ID:???
489名無しさん@お腹いっぱい。:2001/06/21(木) 06:46 ID:PPJE7E4o
初心質問で申し訳ない。

@aに配列が保存されており、

&subxx($xx,$xx,\@a); #ってな具合でサブルーチンにリファレンスで渡したあと、

sub subxx{
$a = $#$_[2];
}
こういう風に、要素数を読みとろうとすると、なぜかエラーがでます。
どうすればいいんっしょ。

ちなみに、いったん別の変数へぶちこむと、正常に動くんですけどねえ。
490初心者:2001/06/21(木) 06:49 ID:???
>foreach(<>) --> ファイルを一括して読み、インデックスを回す。
なるほど。
>480-484を見ると
>(foreach:3) readline
>=> * PV("1\n"\0) PV("2\n"\0) PV("3\n"\0)
全部読んじゃうのね。・・・知らなんだよ〜ありがとう。

#うちのperlは-Dオプションが効かないよ・・・
491_gunzip:2001/06/21(木) 06:51 ID:???
>>489
$a = $#{$_[2]}

>要素数を読みとろうとすると
要素数じゃなくてインデックスの最大値だよ。
要素数は
$count = scalar @{$_[2]}
492名無しさん@お腹いっぱい。:2001/06/21(木) 07:25 ID:???
>>gunzipさん

ども、ありがとうございました。無事できたっす。
いや、しかし、perl面白いですなあ。かなりはまりそうです。
493名無しさん@お腹いっぱい。:2001/06/21(木) 13:41 ID:2DG5zPDk
ディレクトリが無ければ作る、というときに
-d 'hoge' でチェックしたりしないでいきなり mkdir 'hoge' ...
すると、何か問題があるでしょうか?
-d より効率が悪いとか、ディレクトリ上書きしちゃうシステムがあるとか…。

よろしくおねがいします。
494ねこ丸:2001/06/21(木) 14:40 ID:???
↑シェルで試したらエラーが出た。
mkdir: cannot make directory `try': File exists
495ななし:2001/06/21(木) 20:45 ID:???
ちょっと難題を抱えてしまったので質問よろしいでしょうか?

I saw a pan & pen.

と言う文字列があります。これをHTMLの実体参照で変換した後は、

I saw a pan & pen.

になりますが(文章の内容については突っ込まないこと)、この変換した後の文字列をsubstrのように文字を切り取りたいのです。

ちょっと分かりにくいので、先頭から10文字を切り取る動作の結果を例としてあげます。

0123456789 欲しい答え
I saw a pa → I saw a pa

いざプログラムを組んでみるとちんぷんかんぷんです。どなたかご教授を!
496名無しさん@お腹いっぱい。:2001/06/21(木) 20:47 ID:Q1GJ073g
>>493
Linux、FreeBSD、Win95、Win2000は、いきなりmkdirで問題なし。
上書きすると>>494みたいなエラーになり元のディレクトリは不変。
効率は、気にするほど違いないでしょ。どっちかいったら-dのほうが遅い?
497S:2001/06/21(木) 21:32 ID:???
>>495
あの、下の例文の意味がよくわからないのですが、 実体参照を
一文字としてsubstrしたいということですか?
手遊びに作ってみましたが、ちがったら無視して下さい。

# 開始位置は最初からのみ
# $str : 切り取り対象 $n : 何文字切り取るか
sub html_substr{
my( $str, $n ) = @_;

{
my $count = 0;
do{ last if $count++ >= $n }
while $str =~ /?\d{1,4};|&[A-Za-z]{1,7};|./gs;
}

substr $str, 0, pos($str);
}

うーん。遅そう。
498S:2001/06/21(木) 21:33 ID:???
ありゃ。なんか?になってる…。

while $str =~ /

の次は、 & と # です。
499465:2001/06/21(木) 21:38 ID:???
レスを下さった方々、ありがとうございます。勉強になります。
ですが、_gunzipさんのコードは私には高度過ぎてわかりませんでした・・・。
わざわざ書いてくださったのにすみません。
500ななし:2001/06/21(木) 21:57 ID:???
>>497
あ〜いけね〜、
実体参照が変換されるのを忘れていた

I&nbsp;saw&nbsp;a&nbsp;pan&nbsp;&amp;&nbsp;pen.のI&nbsp;saw&nbsp;a&nbsp;paです。鬱陀氏脳
501ななし:2001/06/21(木) 22:23 ID:???
>>497
先ほどは失礼いたしました。
私の質問の意図はSさんの通りです。

で、プログラムのほうは一見それでうまくいくかと思いきや、$nが$strの文字数より大きくなるとnullが帰ってくるようです。

ここからは私のほうで考えてみます。
502名無しさん@お腹いっぱい。:2001/06/22(金) 06:49 ID:zgX1GrJQ
UTF-8をsjisに変換する、または、utf-8でファイルに書きこみたい
のですが、どうすればいいのでしょうか。
503名無しさん@お腹いっぱい。:2001/06/22(金) 08:56 ID:???
Jcode
504antique:2001/06/22(金) 08:57 ID:???
Jcode.pmを使う
505antique:2001/06/22(金) 09:13 ID:???
被った、、、と今更気付く。
506???:2001/06/22(金) 12:57 ID:ajkueiy.
http://perl.gizo.net/download/imode/ezimode_cgi.txt
↑(ソースです)のi-mode掲示板をつけました。
どうしても、EZ−Webからだと文字化けがおこります。
しかも、「タイトル(=dai)」(フォームサブルーチンより)
の部分だけが…。

EZからだと、書き込み方式が違う(UTF−8??)
てのだけ、突き止めましたが、
それって↓
&jcode'convert(*dai,"sjis");
で対応するんですよね?でも、ダメです。

万策尽きてしまいました。
ぜひ、知識人の方々のお力を…。
お願いいたします。

(それとも、送信メソッドをJ−skyのためにGET
にしたんですが、そのせいでしょうか?)
507名無しさん@お腹いっぱい。:2001/06/22(金) 15:57 ID:???
utf-8ならjcode.plじゃ駄目だろ。
Jcode.pm使う。
http://openlab.ring.gr.jp/Jcode/index-j.html
508名無しさん@お腹いっぱい。:2001/06/22(金) 19:13 ID:le9nN3lE
すみません。Perlとは直接関係がないのですがよろしくお願いします。
画像ファイルにアクセス制限をかけるために、いちどプログラムにて
画像ファイルを読み込み、それを動的にクライアントへ返しているの
ですが、そのときに'Content-type: image/gif'だけでは、IEでだけ
表示されないのです。NN4.7ではOKでした。
1.Content-typeにおいて他に指定する必要のあるものがある
2.他のヘッダーとして指定されていないものがある。
このどちらでしょうか?それともまったく関係のないことなのでしょうか?
509名無しさん@お腹いっぱい。:2001/06/22(金) 19:38 ID:le9nN3lE
ひとつ思ったのですが、ファイルの拡張子はやはりgifやjpgのように、
なっていないとだめなのでしょうか?
いくらContent-typeで指定したところでブラウザが拡張子にて判断して
しまうなら仕方のないことですね。
(Servletなのでクラス名に"."を含めることができません)
510名無しさん@お腹いっぱい。:2001/06/23(土) 05:00 ID:???
【かちゅ〜しゃHP】
http://yasai.2ch.net/test/read.cgi?bbs=win&key=992356600

【お約束】
・質問する時は過去ログ、【FAQ】を確かめてからにしてね。
・板がdjときの書き込みは控えてね。
・罵り合いはやめてちょ!
511名無しさん@お腹いっぱい。:2001/06/23(土) 11:46 ID:DIfS2zfo
gethostbyaddr()でホスト名を取得しようとしているのですが
うまくいきません。(IPアドレスが表示されます)
他のCGIではgethostbyaddr()でホスト名が取得できているので
サーバがgethostbyaddr()が使えないということではないと思うんですが…
どのような原因が考えられるでしょうか?
512名無しさん@お腹いっぱい。:2001/06/23(土) 11:47 ID:???
>>511
http://corn.2ch.net/test/read.cgi?bbs=php&key=988727833&st=332&to=332&nofirst=true
マルチポストすな

きちんと動くCGIとやらと比較して自分で調べてみろ
513名無しさん@お腹いっぱい。:2001/06/23(土) 12:58 ID:/dnaAWAM
>508
サーバーは何?
サーバーが何かヘッダーを追加してて、そのヘッダーがIEの場合だけ
理解されているとかじゃない?
あと、content-typeの改行コードを、CRLFにしてみるとか、
perlならbinmodeになっているかどうかとか。
それと、おっしゃるように拡張子が、クライアント側で関連付けられていて
それが優先されているとか。IEならありそう。
514名無しさん@お腹いっぱい。:2001/06/23(土) 13:20 ID:???
>511
↓でだめか?

my($host) = &nslook($ENV{'REMOTE_ADDR'}) || '???';

sub nslook{
my($x) = shift;

($x =~ /([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/)
? ((gethostbyaddr(pack('C4',$1,$2,$3,$4),2))[0] || $x)
: $x;
}
515名無しさん@お腹いっぱい。:2001/06/23(土) 13:23 ID:???
sub nslook{
my($x) = shift;

($x =~ /([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/)
? ((gethostbyaddr(pack('C4',$1,$2,$3,$4),2))[0] || $x)
: 0;
}

ちょっと修正
516CGI串:2001/06/23(土) 16:00 ID:???
CGI串をつくったけど、ウェブメールには通せなかったので、以前質問して、解決しなかった。自分なりにタグのリンクとか
置換する様にしてみました。あいかわらず、ロケーションで5回も飛ばされるけど、ゴールに到達できません。CGI串なので
、当然、ブラウザには、ロケーションを吐き出せません。サーバー側で、クライアントのロケーションを調べる方法ってあるん
ですかね?リファラーも設定したけど、あいかわらずだし。今なぜか、サーバーも、落ちてるし。中止かなぁ。ちなみに、
http://www.email.com/login/snap/login.jhtmlからログイン後のhttp://www2.email.com/snap/index.jhtml?dest=welcomeです
517511:2001/06/23(土) 17:32 ID:zX58xGlk
>>514=515
やってみましたがダメです。
何も表示されません…
518あああ:2001/06/23(土) 17:41 ID:uDMh12hc
簡単な質問ですが、

$a =~ /^aaa/; で$a の先頭に“aaa"があるかを確認できますが、
$st = "aaa"; $a =~ /^$st/; とやってもうまく動きません。

$a の先頭に $st が含まれているのかを確認する方法ってありま
すか?
519名無しさん@お腹いっぱい。:2001/06/23(土) 19:21 ID:???
>>518
if(index("$a","$st") == 0){  #$aの中にて$stが0バイト目に存在したら
    $ok = 1;
}
520T女の竹田:2001/06/23(土) 19:24 ID:???
>>518
うそ?うまく動かない?そのスクリプト見せて?
521名無しさん@お腹いっぱい。:2001/06/23(土) 19:58 ID:???
実際のスクリプトでは $st の中に正規表現のメタキャラクタが入ってると思われ
522T女の竹田:2001/06/23(土) 21:21 ID:???
>>521
多分そうだよね。
$a=~/\$Q$st$E/;
にしたらうまくいくはず。
ってゆーか自分は昔これ知らないで手動でエスケープしてたなー。ここに
来て勉強になったことのひとつ。
523T女の竹田:2001/06/23(土) 21:22 ID:???
あれれ、めちゃくちゃだ。
$a=~/^\Q$st\E/;
だね。
524名無しさん@お腹いっぱい。 :2001/06/23(土) 22:20 ID:uDMh12hc
「うそ?」って、正常に動作するのか?
525あああ:2001/06/23(土) 22:22 ID:uDMh12hc
>>523
試してみます。

\Q \E ってなに? って調べればわかるかな。
526あああ:2001/06/23(土) 22:32 ID:uDMh12hc
>>523

とりあえず、ダメでした。
ちょっと別途試験プログラム作ってから、もう一度組み込みしてみます。
527名無しさん@お腹いっぱい。:2001/06/23(土) 22:35 ID:???
>>526
とにかくソースの一部を出せばすぐに解決するような気がするのだが。(保証はせんが)
528飛ばんな:2001/06/23(土) 23:14 ID:JvcuVhUo
はじめまして
チェックBOXに関してお聞きしたいんですけど
皆さんチェックBOXどのように使ってますか?
複数のチェックBOXにおいて渡す側でリストをつくりたい場合
私はチェックBOXの名前を配列にしてしまって受け取ったほうで
キーとリストを入れ替えるっていうなんか邪道なことやってるんですが
なんかほかにいい方法あるでしょうか?
529名無しさん@お腹いっぱい。:2001/06/24(日) 15:50 ID:???
>526
perlのバージョンは大丈夫か?
530名無しさん@お腹いっぱい。:2001/06/24(日) 21:16 ID:???

え?関係あるの?
531名無しさん@お腹いっぱい。:2001/06/25(月) 03:29 ID:???
0/1/2のどれかがそれぞれ入っている$a,$b,$cのうち、
1つだけが"1"を含んでいることを確かめるにはどうしたら
良いのでしょうか。
どうしてもif文を大量に組み合わせたものしか考えられないのですが
もっと頭の良いプログラムにできないものかと思いまして。
532名無しさん@お腹いっぱい。:2001/06/25(月) 03:40 ID:5VbEnasM
>>531
その程度のサイズなら、3×3×3=27個の要素のテーブルを作るかな。

@table = (0, 1, 1, 1, 0, ・・・以下略);
$hantei = $table[$a * 9 + $b * 3 + $c];

@tableのデータは手作業で作るのが早いと思う・・・。
533S:2001/06/25(月) 04:38 ID:???
if( ( "$a$b$c" =~ tr/1// ) == 1 )
なんていう、Perl批判の引き合いに出されそうな方法も。
534_gunzip:2001/06/25(月) 04:39 ID:???
>>531
いろいろ。
--------------------------------------------
if( (($a == 1) + ($b == 1) + ($c == 1)) == 1 ){
    # 処理
}

--------------------------------------------
@array = (); #作業用配列(ハッシュでも可)
$array[$_]++ for $a, $b, $c;
if( $array[1] == 1 ){
    # 処理
}

--------------------------------------------
#逝かれたコード(真似しないこと)

print "ok" if ($a ^ $b ^ $c) & !($a & $b & $c)
535名無しさん@お腹いっぱい。:2001/06/25(月) 05:55 ID:???
>($a ^ $b ^ $c) & !($a & $b & $c)

こんなのよく思いつくねえ (´ー`)y−~~
536名無しさん@お腹いっぱい。:2001/06/25(月) 10:30 ID:???
どれが1を含んでいるか分からなくていいなら、これで十分じゃ?
if(($a+$b+$c)==1){
処理;
}
537名無しさん@お腹いっぱい。:2001/06/25(月) 14:27 ID:???
1がふたつ、0がひとつの時ダメですな。
538名無しさん@お腹いっぱい。:2001/06/25(月) 14:34 ID:???
ちがった。2,1,0とかのときにダメ。
539531:2001/06/25(月) 16:31 ID:CR99XO02
なるほど、大変参考になります。早速、いろいろ試してみようと思います。
ちなみに自分が出していた結論は変数に2が入っていたらそれを2倍して、
$a+$b+$cが1or5or9になっていたら処理を行う、というものでした。
(組み合わせが
1/4/4
1/4/0
1/0/4
1/0/0
のパターンを識別する)
(かな〜り死んでますね。)

うーん・・自分のプログラミング能力に自信が無い(こんなプログラムしか書けない)
のですが、プログラミング能力を伸ばすにはやはり手を動かして
ひたすらプログラムを書いた方が良いのでしょうか?
540名無しさん@お腹いっぱい。:2001/06/25(月) 16:36 ID:???
>>539
他人の書き方を参考にするのも勉強。
例えばここで出された答えの意味を全部理解できてる?
理解できてなければどうしてそうなるかを勉強する。
理解できるようになったら「こういうやり方もあるんだ」と覚えておく。
もちろんその時に自分で書いてみるのが一番勉強になると思う。
541名無しさん@お腹いっぱい。:2001/06/26(火) 00:21 ID:???
>>539
要領が掴めていないのにたくさん書いてもよくわからんものができあがるだけ。
まずは人の書いたソースをどうやって動いているか分かるようになるまで読んでみては?
542名無しさん@お腹いっぱい。:2001/06/26(火) 11:32 ID:???
面倒くさい
自分のソースを添削してもらったほうば楽
543名無しさん@お腹いっぱい。:2001/06/26(火) 15:14 ID:ai8VquTY
ファイルのリネームって、事前にファイルをオープンする必要ありますか?
rename < 現在のファイル名 > , < 変更後のファイル名 > ;
なぜかうまくいかないのです
544rubbish_lister:2001/06/26(火) 15:31 ID:???
>>543
renameするのにopenの必要は無い。

まず$!を見ること。
Windowsなら$^Eもチェック。
545名無しさん@MZ-2000:2001/06/26(火) 15:31 ID:???
>>543
「なぜかうまくいかない」というのは状況説明としては最低レベル。
エラーが出るならエラーメッセージを書く。
546名無しさん@お腹いっぱい。:2001/06/26(火) 15:34 ID:???
>543
権限無しだろどーせ
547ななしでお願いします:2001/06/26(火) 17:37 ID:MIeivAlo
UNIXのおファイルについて質問です。
例えば、一つのディレクトリに10000のおファイルをぶち込むのと、
100のディレクトリに、100のおファイルをぶちこむのでは、
どちらがいいのでしょう。
UNIXのおファイルシステムは、線形検索との事ですが、
やっぱり入れすぎはよくないのでしょうか。
548名無しさん@お腹いっぱい。:2001/06/26(火) 18:18 ID:Ml2Xpmsg
>>547
そのとおり。ディレクトリ検索はファイル数に比例して遅くなる。
単純計算で、1万ファイル×1ディレクトリ内のファイルアクセスは、
100ファイル×100ディレクトリの数十倍の平均時間を要する。
549547:2001/06/27(水) 00:11 ID:???
>548
どーもです。
安心した℃です。
550名無しさん@お腹いっぱい。:2001/06/27(水) 00:23 ID:???
>>547
って優香「お」とか「℃」ってなに?
551名無しさん@お腹いっぱい。:2001/06/27(水) 01:20 ID:FKg3tYUg
下記はやっぱりb案の方が利口でしょうか?

@a = ("11-22-33","22-33-44","55-66-77","88-99-00","22-44-55");
#a案
foreach(0..$#a) {
(@split) = split(/\-/,$a[$_]);
if($split[0] eq '88'){ print $a[$_]."\n"; }
}
#b案
for(@a){
(@split) = split(/\-/);
if($split[0] eq '88'){ print $_."\n"; }
}
552名無しさん@お腹いっぱい。:2001/06/27(水) 01:25 ID:???
#c案
foreach (@a){
  print "$_\n" if (split '-')[0] eq '88';
}
553S:2001/06/27(水) 01:35 ID:???
d案

foreach( @a ){ print $_, "\n" if /^88-/ }
554名無しさん@お腹いっぱい。:2001/06/27(水) 01:38 ID:???
e案
print "$_\n" for(grep /^88\-/, @a);

そろそろ限界か?
555名無しさん@お腹いっぱい。:2001/06/27(水) 02:04 ID:IVYsrfFE
>>551
a案とb案の比較なら当然bがベターだろ。a案は逝ってよし。
556551:2001/06/27(水) 02:05 ID:???
早速色々ありがとう。多分、こんな感じで色々出してくれるとおもいました。
速度的にはどれでしょうか?自分で測れってならいいですけど。
557名無しさん@お腹いっぱい。:2001/06/27(水) 02:19 ID:IVYsrfFE
>>556
自分でベンチマーク実行すれ。
で、結果はここに公開してね。
558551:2001/06/27(水) 02:22 ID:???
そういえば表示ではなく代入でした。
for(@a){
(@split) = split(/\-/);
if($split[0] eq '88'){ $x = $_; }
}

こんな感じ?
foreach(@a){
if ((split '-')[0] eq '88'){ $x = $_; }
}

こんな感じ?
foreach(@a){ if (/^88-/){ $x=$_; } }
559名無しさん@お腹いっぱい。:2001/06/27(水) 02:23 ID:???
Benchmark: timing 10000000 iterations of x1, x2, x3, x4...
x1: 13 wallclock secs (13.05 usr + 0.00 sys = 13.05 CPU) @ 766342.25/s
(n=10000000)
x2: 12 wallclock secs (12.96 usr + 0.00 sys = 12.96 CPU) @ 771724.03/s
(n=10000000)
x3: 13 wallclock secs (12.97 usr + 0.00 sys = 12.97 CPU) @ 771128.93/s
(n=10000000)
x4: 25 wallclock secs (25.47 usr + 0.00 sys = 25.47 CPU) @ 392649.60/s
(n=10000000)

x1=b, x2=c, x3=d, x4=e, print は $x = $_ に変えた。
自明な結論: 細かいことを気にするな。
560551:2001/06/27(水) 02:31 ID:???
単純に(times)[0]で1万回繰り返した場合を測ってみました。
558の上から、AVG .90sec、AVG .60sec、AVG .25sec です。
次は、一応データをランダムにして測ってみます。
561551:2001/06/27(水) 02:33 ID:???
スクリプトのベンチなんてあるのか・・・
562551:2001/06/27(水) 02:38 ID:???
参照データ88の部分を毎回ランダムにしたら、
AVG .99sec、AVG .60sec、AVG .60secでした。
563551:2001/06/27(水) 02:42 ID:???
$x = $_ for(grep /^88\-/, @a); に決定。もう師脳。
564551:2001/06/27(水) 02:51 ID:???
良く考えたらケースバイケースだな。配列の大きさにもよるな。納得。
565名無しさん@お腹いっぱい。:2001/06/27(水) 03:10 ID:???
>>561
Perlのベンチマークなら
use Benchmark;
を使うのが定番。便利だよ。>>559の人もこれ使ったんでしょ。
まあやってる内容はtimesで測るのとあまり変わらないけどな。
566名無しさん@お腹いっぱい。:2001/06/27(水) 04:27 ID:???
foreach (@a) { print $_ if substr($_, 0, index($_, '-')) eq '88'; }

ってのも一応あるんだな
コピペじゃないので間違ってたらすまん
567 :2001/06/27(水) 10:21 ID:38kJ5CJw
 サーバA            サーバB
  index.html           upload.cgi
  edit.cgi             tmp/

上のようにサーバAの index.html 内のフォームから
サーバBの upload.cgi を呼び出してファイルを
tmp/ ディレクトリ以下に保存するようにしたあと、
Location: でサーバAの edit.cgi を呼び出して
index.html を書き換えると言うのはありですか?

サーバAはディスク容量は限られているが広告なし、
サーバBはディスク容量無制限だが広告あり、という
状況です。
568名無しさん@お腹いっぱい。:2001/06/27(水) 11:40 ID:POUsw9kM
>>567
サーバーAからsocket 使っちゃダメなの?
…ってレンタルだから多分無理なんでしょうな。
569名無しさん@お腹いっぱい。:2001/06/27(水) 20:35 ID:???
Socket使えないサーバなんてあるの?(大爆笑)
570名無しさん@お腹いっぱい。:2001/06/27(水) 21:56 ID:???
>>569
アホデスカ?
571名無しさん@お腹いっぱい。:2001/06/27(水) 22:13 ID:???
配送です。それがなにか?
572名無しさん@お腹いっぱい。:2001/06/28(木) 05:06 ID:???
アホ一丁お届けに上がりました〜
573名無しさん@お腹いっぱい。:2001/06/28(木) 10:22 ID:???
Socket使えないサーバなんてあるの?
574名無しさん@お腹いっぱい。:2001/06/28(木) 12:44 ID:???
話の腰折って悪いけど、少し疑問が。

print "hoge";

って1行ずつ出力していくのと、

print <<"EOM";
hoge
EOM

ってまとめて出力していくのはどう違うんだろう。
下の書き方のほうが楽なのに、世の中の多くのスクリプトでは
1行ずつ出力する方式を選んでるってのに疑問が。

やっぱ実行速度とか違うのかな?
575名無しさん@MZ-2000:2001/06/28(木) 13:04 ID:???
>>574
実行速度はそれとわかるほど変わったりしないと思う。
個人的には下のやりかたのほうがよく使ってるよ。
576名無しさん@お腹いっぱい。:2001/06/28(木) 13:27 ID:???
>>569,>>573
例えばトクトクみたいなところでは別サーバーのデータを読み込むような
スクリプトは禁止されてるよ。
577名無しさん@お腹いっぱい。:2001/06/28(木) 14:22 ID:C.rSbvu.
ファイルをコピーする関数ってありますか?
cp copyでさがしたのですが無いような・・
578名無しさん@お腹いっぱい。:2001/06/28(木) 14:33 ID:???
探し方が悪い。

#! perl
use File::Copy;
copy("./hogehoge.txt", "./copyhoge.txt");
579名無しさん@お腹いっぱい。:2001/06/28(木) 15:01 ID:???
トクトクはSocket使えるが・・・(微笑
580名無しさん@お腹いっぱい。:2001/06/28(木) 15:53 ID:DvKLUY5M
いきなりすいません
フォームに書き込んだ文字をログファイルに記録すると言う
単純なものを作りたいのですが
↓のようにやってうまくいきません。どこが間違ってるのでしょうか?
#!/usr/local/bin/perl
#ファイルの読み込み
open(IN, "<./a.dat");
$domo = <IN>;
close(IN);

#ファイルへの書き込み
open(OUT, ">./a.dat");
print OUT $domo;
close(OUT);
$domo = $form{'koumoku'};
# サーバ出力
print <<END;
Content-type: text/html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head><title>ファイルの読み込み</title></head>
<body>
<form action="a.cgi" method="POST">
項目 <input type=text name=koumoku size=30>
<input type=submit value="項目を追加">
</form>
</body>
</html>
END
581名無しさん@お腹いっぱい。:2001/06/28(木) 16:16 ID:???
>>580
一から勉強しなおせ。
間違ってるなんてもんじゃない。
582名無しさん@お腹いっぱい。:2001/06/28(木) 16:19 ID:???
>>580
明らかに流れがおかしいよ。
$domoに何が入ってるのか、よく考えながら見直してみ。
583582:2001/06/28(木) 16:21 ID:???
それ以前に、デコードもないな…(ワラ
>581 とかぶったし。
584名無しさん@お腹いっぱい。:2001/06/28(木) 16:28 ID:???
>>579
Socketは使えるけど規約で禁止されてるの。
>・その他、コマンド発行を行うCGI
>他サーバーへのアクセスおよび攻撃を目的とするため禁止
>・proxy.cgi 系のCGI もしくはそれを含むパッケージ
>・whois.cgi 系のCGI もしくはそれを含むパッケージ
>・flood.cgi 系のCGI もしくはそれを含むパッケージ
>・sendmail.cgi 系のCGI もしくはそれを含むパッケージ
>・その他、他サーバーへのアクセスを行うCGI
>上記CGIを設置の場合は一切の警告なしにアカウント削除を行います。


>>580
よぉく見てみよう。
データを読み込んでからデータを書き換える前に書き込みをしていないかい?
これじゃあ読み込んだデータをそのまま何の手も加えずに書き込み直す事になるよ?
585579:2001/06/28(木) 16:31 ID:???
>>584
なるへそさんくす(微笑)
586580:2001/06/28(木) 16:43 ID:DvKLUY5M
ちょっと書き直してみましたがやっぱりだめです。
ドキュンな質問ですいません・・・
#!/usr/local/bin/perl

# サーバ出力
print <<END;
Content-type: text/html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head><title>ファイルの読み込み</title></head>
<body>
<form action="a.cgi" method="POST">
項目 <input type=text name=item size=30>
<input type=submit value="項目を追加">
</form>
</body></html>
END

$domo = $form{'item'};

#ファイルへの書き込み
open(OUT, ">./a.dat");
print OUT $domo;
close(OUT);
587名無しさん@お腹いっぱい。:2001/06/28(木) 16:46 ID:???
「間違ってるなんてもんじゃない」
とあるのに「ちょっと書き直した」だけで動くと思うなよ(藁
588名無しさん@お腹いっぱい。:2001/06/28(木) 16:47 ID:???
>>580=>>586
>>2のリンクからお勉強サイトに行って勉強してきなさい。
基礎の基礎がなってない。

ここにいる人間だって数字を知らない人間に足し算を教えることは
できないんだよ。
数字から順に教える人間もいないと思うし。
まずは自分で勉強する。
その場は>>2に用意されている。
589580:2001/06/28(木) 16:53 ID:DvKLUY5M
カウンターは作れたのに・・・・
590名無しさん@MZ-2000:2001/06/28(木) 16:54 ID:???
CGI 自体のしくみがわかってないから
>>2 で Perl を学べてもどうしようもないような気がする。
「サーバ出力」「ファイルの読み込み」が謎すぎ
591名無しさん@お腹いっぱい。:2001/06/28(木) 17:06 ID:???
みんな、ネタにマジレスすんなYO!
592名無しさん@お腹いっぱい。:2001/06/28(木) 17:08 ID:???
そーいやヒアドキュメントってあんま多くまとめて出力するとエラー出たような。
勘違いかな?
593名無しさん@お腹いっぱい。:2001/06/28(木) 17:11 ID:???
本当はみんなやり方が分からないんだよw
594名無しさん@お腹いっぱい。:2001/06/28(木) 17:21 ID:???
こういうの見ると思うんだけど、
初心者はデコードとか自力でやんないで
素直にCGI.pm使ったほうが幸せなんじゃないかね。

$domo = $form{'item'}

use CGI;
$domo = CGI::new()->param('item');
595名無しさん@お腹いっぱい。:2001/06/28(木) 18:55 ID:???
>>593
激しく同意!
中途半端なレス不要
最後まで丁寧に教えるか放置推奨
596名無しさん@お腹いっぱい。:2001/06/28(木) 19:57 ID:???
基礎がなっちゃいないやつにコード渡してハイサヨナラってのが良いってか?
といって放置しちゃいつまでたっても厨房のままだから、勉強の方法を教えてるんじゃないか。
597名無しさん@お腹いっぱい。:2001/06/28(木) 20:30 ID:???

それが中途半端なお節介って言うんだよ
598名無しさん@MZ-2000:2001/06/28(木) 20:35 ID:???
懇切丁寧に指導してほしいんだったら2ちゃんねる以外で聞けば?
599名無しさん@お腹いっぱい。:2001/06/28(木) 20:41 ID:???

放置すればいいだろ?
お前の理想の2chはここには無い!
600名無しさん@お腹いっぱい。:2001/06/28(木) 20:48 ID:???
>>595=>>597=>>599
以前ドキュソな質問をして煽られた事を根に持つ厨房
601名無しさん@お腹いっぱい。:2001/06/28(木) 21:51 ID:???
今度は特定厨房かよ(嘲笑)
602名無しさん@お腹いっぱい。:2001/06/28(木) 21:53 ID:???
つーかMZ-2000使いは時代遅れだろ
603名無しさん@お腹いっぱい。:2001/06/28(木) 22:02 ID:???
ロクなアドバイスができない連中に限って煽り叩きには積極的なんだよなぁ
いや、俺には支障無いけど基本的には>>595>>599に賛成である
ここは初心者コーナー。無知な人間こそ積極的に参加するべきである
604名無しさん@お腹いっぱい。:2001/06/29(金) 00:01 ID:dTFZ7jKs
今数当てゲームを作ってます。3ケタの数字を生成し、それぞれの桁の数字に
ダブりがないかをチェックしたいのですが、いろいろやったのですがどうも
うまくいきません。

なにかよいスクリプトがありましたら、教えていただけるとうれしいです。
ちなみに、こんな感じで生成しています。

srand;
for (0..$place-1) {
$rand[$_] = int(rand(9))+1;
}

# $place = ケタ数
605名無しさん@お腹いっぱい。:2001/06/29(金) 00:03 ID:???
>それぞれの桁の数字にダブりがないかをチェックしたいのですが
999 とかはNGで、566 とか 583 とかはOKってこと?
606604:2001/06/29(金) 00:25 ID:dTFZ7jKs
>>605
説明不足ですいません。
999,566はNG、583はOKです。

昔、女神転生っていうゲームであったコードブレイカーっていうゲーム
なんですよー。だれも知らないだろうけど。
607名無しさん@お腹いっぱい。:2001/06/29(金) 00:25 ID:???
my $num;
my $nums;

srand;

for (0 .. $place - 1) {
while (1) {
$num = int(rand(9)) + 1
if ($nums !~ /$num/) {
$nums .= "\0$num";
last;
}
}
}

my @rand = split(/\0/,substr($nums,1));

なんか汚い・・
608_gunzip:2001/06/29(金) 00:29 ID:???
>>606

@map{@rand} = ();

if(keys %map == @rand){
    # ok
}
609名無しさん@お腹いっぱい。:2001/06/29(金) 00:35 ID:wJE5mVUE
>608
解説きぼん
610名無しさん@お腹いっぱい。:2001/06/29(金) 00:43 ID:???
>>604
ヒットアンドブローで探せばいろいろ見つかるかも
611_gunzip:2001/06/29(金) 00:58 ID:???
>>609
#--------------------------------------------------------
# ハッシュ%mapをスライスで一気に初期化
#--------------------------------------------------------
# @rand = (7,5,9,1,0) の時、(重複無し)
# $map{'7'} = $map{'5'} = $map{'9'} = $map{'1'} = $map{'0'} = undef
# %map のキー数 = 5, @rand の要素数 = 5
#--------------------------------------------------------
# @rand = (8,8,4,3,2) の時、(重複在り)
# $map{'8'} = $map{'4'} = $map{'3'} = $map{'2'} = undef
# %map のキー数 = 4, @rand の要素数 = 5
#--------------------------------------------------------
@map{ @rand } = ();

# ハッシュ%map のキー数と元の配列の要素数が等しければ、重複は無い。
if(keys %map == @rand){
    # ok
}
612rubbish_lister:2001/06/29(金) 01:00 ID:???
うーん。綺麗に書くのは難しい…。
Perlらしいからいいか (´ー`)y-┛~~

1 while( (join("", sort(split //, $n = int( rand(999) )))) =~ /(\d)\1/ );
print $n;

私も>>608のスクリプトの解説きぼんぬ。
613rubbish_lister:2001/06/29(金) 01:02 ID:???
一歩遅れた(;´Д`)
なるほど>>611
614604:2001/06/29(金) 01:27 ID:???
>>607
>>608
ありがとうございます。おかげでとりあえず完成させることができました。
まだPerlを触りだしたばかりなので、_gunzipさんの方は理解できませんでしたが、
これから勉強していこうと思います。

ちなみに、こんな感じになりました。プログラム初心者なので笑わないように(w
ttp://members.tripod.co.jp/up_for_2ch/test2.txt
615名無しさん@お腹いっぱい。:2001/06/29(金) 02:19 ID:fQQ8ciRQ
大文字でHOGEと入力すると"Hello, HOGE"と返り、小文字、もしくは別の単語を
入力すると"Who are you?"、数字を入力すると"Type the letters"となるように
したいのですが、どうしてもうまく行きません。

elsif ( $input != /\w/)だとうまく行きます。しかし
elsif ( $input == /\W/)やelsif ( $input == /\d/)
だと全く意図しない結果が出てしまいます。

具体的には
elsif ( $input == /\W/)やelsif ( $input == /\d/)
数字を入力すると"Who are you?"
HOGE以外の文字だと"Type the letters"

なぜこうなってしまうのか教えてください。また、elsif ( $input == //)の
形で、//のところに/dを入れて意図した結果を得るのはどうすれば良いのでし
ょうか?

#!/usr/bin/perl -w

$test = "HOGE";

print "What is your name?: ";
chomp ( $input = <STDIN> );

if ( "$input" eq "$test" ) {

print "Hello,$input\n";

} elsif ( $input == /\d/ ) {

print "type the letter\n";


} else {

print "Who are you?\n";

}


__END__
616名無しさん@マジ教えてください:2001/06/29(金) 02:26 ID:GZ8oljgs
PERLで、ファイルを作って、そこに書きこむことってできますか?
echoでリダイレクトするみたいに、、
やり方教えてください。
617名無しさん@お腹いっぱい。:2001/06/29(金) 02:39 ID:???
>>615
正規表現の表記方法って知ってる?
elsif ( $input !~ /\w/)
elsif ( $input =~ /\W/)
elsif ( $input =~ /\d/)
618名無しさん@お腹いっぱい。:2001/06/29(金) 03:00 ID:???
>>616
system('echo >foo.dat Hello');

or

open OUT, '>foo.dat';
print OUT 'Hello';
close OUT;
619名無しさん@お腹いっぱい。:2001/06/29(金) 03:02 ID:???
>>616
>>618さんの後者のやり方の場合
ディレクトリのパーミッションを変え忘れないようにね。
620名無しさん@マジ教えてください:2001/06/29(金) 03:22 ID:GZ8oljgs
ありがとうございます。
これからやってみます。
621615:2001/06/29(金) 03:25 ID:fQQ8ciRQ
>>617
やっと意味が分かりました。
すんません。
622616:2001/06/29(金) 03:51 ID:GZ8oljgs
なぜかできないです。
ファイルを固定の名前にしても作成されませんし、書き込みもされません。
最終的には、配列の名前をくみ合わせた名前でファイルを作成して
そこに別の配列の内容を書き込みたいんですが、可能なのでしょうか?
623名無しさん@お腹いっぱい。:2001/06/29(金) 03:54 ID:???
パーミッション
624616:2001/06/29(金) 03:54 ID:GZ8oljgs
具体的には、
$FORM{'namae'}_$zikan.txtみたいなファイルを作り、そこに
$NyuryokuNaiyoを書きこむということをしたいと考えています。
どうやったらいいんでしょうか?
625616:2001/06/29(金) 03:55 ID:GZ8oljgs
サーバはWINDOWSなんですが、、、汁、、どうしたら、、
626名無しさん@お腹いっぱい。:2001/06/29(金) 04:05 ID:???
エラーメッセージくらい書けよ厨房
627名無しさん@お腹いっぱい。:2001/06/29(金) 04:06 ID:???
つーか、その程度の知識でCGIスクリプトを書こうとするなよ。危険すぎる。
628616:2001/06/29(金) 04:20 ID:GZ8oljgs
>>626 >>627
エラーがでないんです。CGIの一部で、CSVにFORMの内容を時系列で(当たり前ですか)書き出すようにつくって、
そのバックアップ用に各々FORMの内容を保存しようと考えたんです。
で、理由はわかりませんが、ブラウザで見る限りエラーは表示されません。

また、WINDOWSでパーミッションを変更する方法を知りません。今、探してるんですが。
FTPでは777になっているんですが、WINDOWSでは無理ということだったのでしょうか、、
629名無しさん@お腹いっぱい。:2001/06/29(金) 04:48 ID:w2xN.oIE
WindowsというとWebサーバはIIS?
IISがわかる奴ここは少ないからなあ。おれも知らない。
とりあえずエラー補足用に
use CGI::Carp qw(fatalsToBrowser);
をスクリプトの最初に入れて、
open(OUT, '>foo.dat') or die "$!";
とでもしてエラーメッセージ出してみたら。
630名無しさん@お腹いっぱい。:2001/06/29(金) 05:33 ID:???
>>629
ローカルでデーモンとか使ってる可能性も。
631名無しさん@お腹いっぱい。:2001/06/29(金) 12:23 ID:???
>>616=>>629
Win鯖って事はパスミスじゃないか?
相対パスじゃなくて絶対パスで試してみたら?
あと、""の中で使うなら、\を\\にするのを忘れないようにな。

open OUT, ">c:\\inetpub/wwwroot/user/cgi-bin/$FORM{'namae'}_$zikan.txt";
print OUT "$NyuryokuNaiyo";
close OUT;
632名無しさん@お腹いっぱい。:2001/06/29(金) 12:24 ID:gTGq9vOI
もっとも効率よく(早くじゃなくて、メモリー、CPUをできるだけつかわずに)
ファイルを読み込むにはどうしたらいいでしょうか。

open(READ,'/my/file');
push(@line,$_) while (<READ>);
close(READ);

としてますが・・・
633名無しさん@お腹いっぱい。:2001/06/29(金) 12:29 ID:???
>>632
open(READ,'/my/file');
@line = <READ>;
close(READ);
634名無しさん@お腹いっぱい。:2001/06/29(金) 12:30 ID:???
>>632
ファイル内容の書き換えがないなら
open(READ,'/my/file');
while (<READ>){
処理
}
close(READ);
の方がメモリは食わないと思う
635名無しさん@MZ-2000:2001/06/29(金) 13:49 ID:???
「、、、汁、、」が気になってしょうがない
636名無しさん@お腹いっぱい。:2001/06/29(金) 14:47 ID:6bTr92VU
確実なロックがしたいんですが、どういったものがあるんでしょうか。
(flock以外しりません
特徴なども教えてもらえるとありがたいです。
637名無しさん@お腹いっぱい。:2001/06/29(金) 15:12 ID:???
ごめんなさい確実なファイルロックシステムは存在しません
638名無しさん@お腹いっぱい。:2001/06/29(金) 16:13 ID:???
そうなのですか・・・
では、flockが使えない場合、何を使用すればいいのでしょうか?
見極め方も教えてもらえると非常にありがたいです。
639名無しさん@お腹いっぱい。:2001/06/29(金) 17:12 ID:6dQwBEa6
time()を使って、いつからだったかからの秒数が取れますよね。
逆に例えば2001年,6月,29日,18時,30分,15秒みたいなモノから
time()を使った様な秒数って取れるのですか?
7月1日以降はコレを表示って感じのものをやりたいんです。
640名無しさん@お腹いっぱい。:2001/06/29(金) 17:25 ID:???
http://tako.2ch.net/test/read.cgi?bbs=perl&key=984388283
380 名前:JAPU 投稿日:2001/04/30(月) 21:19
NAME
Time::Local - efficiently compute time from local and GMT time

SYNOPSIS
$time = timelocal($sec,$min,$hours,$mday,$mon,$year);
$time = timegm($sec,$min,$hours,$mday,$mon,$year);

# 使うときは、use Time::Local; するように。


JAPUさんいつもありがとうございます。
641ピーちゃん:2001/06/29(金) 17:33 ID:okzsTr02
はじめまして。
変数名を変数で制御する方法を、どなたかお教え下さいますでしょうか。
お願いします。
642名無しさん@お腹いっぱい。:2001/06/29(金) 17:34 ID:???
>>641
${$hensu}
643なり:2001/06/29(金) 19:27 ID:???
SSI方式のカウンタを作ってます。
例えば200まで来たら数値を0に戻すというようなことがしたいのですが。

$countfile = "./count.log";

というファイルにカウンタ値を格納していっているのですが
count.logの中身を0に戻すやり方を教えてください。
644名無しさん@お腹いっぱい。:2001/06/29(金) 19:39 ID:???
use IO::File;
IO::File->new('>./count.log')->print(0);
645なり:2001/06/29(金) 20:13 ID:???
ありがとうございます。
ただ自分はほんとに初心者向けの本しか持ってなく
use IO::File;
については解説がなくよくわかりませんでした。すいません。
200以上って場合は200という数値は
どこに記入すればよいのでしょうか。
646名無しさん@お腹いっぱい。:2001/06/29(金) 20:25 ID:???
use IO::File;
IO::File->new('>./count.log')->print(200);
647名無しさん@お腹いっぱい。:2001/06/29(金) 20:53 ID:T5IdSdfg
上級者になると簡単な事でもモジュールを使っているような気がするのですが、
大きな利点はなんでしょうか?
モジュールを使うことによっての、悪い点はないのでしょうか?
ご教授ください。
open(FILE,">$countfile"}
flock(FILEOUT,2);
print(FILE '0');
close(FILE);
648名無しさん@お腹いっぱい。:2001/06/29(金) 22:37 ID:???
>>647
簡単な事だからこそ標準モジュールで
てっとりばやく済まそうってことでしょ。
初心者の人もIOモジュールの使い方ぐらいは
早めに覚えとくといいっすよ。
649名無しさん@お腹いっぱい。:2001/06/29(金) 23:11 ID:???
>>647
モジュールは無関係だが、目をふさぎたくなるような酷いコードだな。
openの末尾はタイポとしても、酷さは変わらないぞ。
650なり:2001/06/29(金) 23:32 ID:???
すいません。やっぱりできませんでした。
明日本屋でも行って調べてみます。
651名無しさん@お腹いっぱい。:2001/06/30(土) 00:04 ID:???
open(FILE,"+>$countfile");
ここは読み書き両方にしたほうがいいよ。flockの意味がない。
652647:2001/06/30(土) 01:12 ID:???
>648
マジレスありがとう。モジュールを使うと遅くなるとかは関係有りませんか?

>649 651
つっこみありがとう。わざとでした。スマン。
653名無しさん@お腹いっぱい。:2001/06/30(土) 02:32 ID:???
モジュールを使うと遅くなるってのは確かにある。
オブジェクト指向なモジュールは特にそう。
だが、簡単なものなら速度より簡潔さを重視するし、
そうでない場合も自分で書くより正確なことが多いので多用するね。

ただし、IO::*モジュールは簡単な一発もの以外では使わない。俺はね。
654名無しさん@お腹いっぱい。:2001/06/30(土) 03:46 ID:piXvKdHw
Intel, APi522e.exeがインストールできないんですが
どこがいけないんでしょうか?
655名無しさん@お腹いっぱい。:2001/06/30(土) 03:59 ID:???
>>654
「インストールできないんですが」で原因わかるわけねーだろ!
だいたいActivePerl-522て何だっけ? 古すぎてわからんよ。。。
とりあえず最新版入れろ。
656名無しさん@お腹いっぱい。:2001/06/30(土) 04:13 ID:piXvKdHw
最新版もはいらん。
システムレジストリがどうのってでてるんだが。
657名無しさん@お腹いっぱい。:2001/06/30(土) 04:14 ID:???
>どうのって
それを書くのが一番。
658名無しさん@お腹いっぱい。:2001/06/30(土) 04:23 ID:piXvKdHw
アンインストレーションストリングへ書き込むことができない。
あなたはシステムレジストリでHキーローカルマシーンへ書き込む
パーミッションをもっていない。
とかいてあるらしい。
659名無しさん@お腹いっぱい。:2001/06/30(土) 04:46 ID:coQpTjsk
>>658
Win2000やWinNTで、Administrator以外の一般ユーザでログインした状態で
インストールしたときと出てきそうなエラーメッセージだな。
660名無しさん@お腹いっぱい。:2001/06/30(土) 05:16 ID:9uBIGUjk
Administratorでログインしてるんだがな・・・。
どうすりゃいいのよ?
661名無しさん@お腹いっぱい :2001/06/30(土) 05:34 ID:G8StaOtQ
HTTP_REFERER等を条件と比較して
別々のページに振り分けるものを作ろうとしているのですが・・・
困っています。
条件に一致するならPRINTで@のHTML部分を出力して
一致しないならAのHTML部分を出力するように記述していますが
一致しない場合のHTMLが404になってしまいます。
何がいけないのでしょうか?
Perl厨房で申し訳ありません・・・
662名無しさん@お腹いっぱい。:2001/06/30(土) 09:22 ID:???
>>661
何故かって?
それはファイルが存在しないから。

#機種依存文字を使うのやめれ。
663:名無しさん@お腹いっぱい :2001/06/30(土) 09:51 ID:G/0pMLQw
>>662
レスどうも。
エラーコードの意味はわかるのですが
なぜ404になってしまうのかが解決できません。
現状ではindex.cgiというスクリプト中に
ページ1とページ2のHTML記述をして出力させるようにしているのですが
両ページの記述方法は同じなのになぜ
後者の方の場合だけ出力されないのでしょうか?
よろしくお願いします
664昆布茶:2001/06/30(土) 10:37 ID:???
↑スクリプトを公開すべし。
665名無しさん@お腹いっぱい :2001/06/30(土) 11:17 ID:G/0pMLQw
ありがとうございます。
つい先日からperlをはじめたので恐縮なのですが
スクリプトを公開しますのでどうかよろしくお願いします。
http://www.geocities.co.jp/Technopolis/6437/index.txt
スクリプトに関するお叱りはありがたいですが
スクリプト以外のことでの誹謗中傷はご遠慮ください。
666名無しさん@お腹いっぱい。:2001/06/30(土) 11:49 ID:???
>>665
ざっと見た感じだけど、
# if ($ENV{'HTTP_REFERER'} eq $_){
こういうところで、改行コードを除外してないから
flagが1にならないんじゃないか?
それでflagが0でも1でもないから何も表示されないとか。

末尾を
#HTML出力部分
if($flag == 0){
print "$accept";
}elsif(flag == 1){
print "$deny";
}else{
print "$error";
}

とかにしてみるのがよさげ。
667名無しさん@お腹いっぱい。:2001/06/30(土) 11:53 ID:???
てか、perl -c やってる?
$flag の $が抜けてるよ。
668667:2001/06/30(土) 11:55 ID:???
ゴメソ。
チェック抜けるんだね…鬱…
669666:2001/06/30(土) 11:58 ID:???
>>667
そんなミスもあったのか。
ってコピペした場所にもあるじゃん!

チェック漏れスマソ。
670名無しさん@お腹いっぱい。:2001/06/30(土) 12:00 ID:???
教えてください
iモードの絵文字に悩まされてます、絵文字を除去するにはどうすれば
いいのでしょうか?
671E_ERROR:2001/06/30(土) 12:05 ID:???
余り今時間無いんで眺めて見ただけだけど。
サーバに上げて見たけど動くんですよね。こっからどうしたいのかな?
強制的にリファ送ったけど認識するし。

>スクリプト以外のことでの誹謗中傷
若し機種依存文字の件だったら662さんは間違った事は言ってないかと。
Script書く上で文字コード・機種依存文字の問題はかなり難しい件であり、
各所でそのネタは重視されています。MLにも入って見れば、ウザイ
ぐらいそれ系のネタは飛び交ってます。
いっぱしのScript書きを目指すならその辺の認識は重要かと私は思うのですが?
その類のネタは知りたかったらすぐ見つかるので検索して勉強する事を
お勧めしますよ。

実は今書きたかったのはこっち(笑)。
私もどっちかというと趣味Script書きなんでへぼなんですわ。
672E_ERROR:2001/06/30(土) 12:09 ID:???
>666
なるほど、ぱっと見で気づかんあほの私もなんだか。
PHPに嵌り切ってるからPerl忘れてるって言い訳しても通じなさそう。
暑い中逝って来ます…。
673661:2001/06/30(土) 13:00 ID:???
なんとか前進できました。
あとここからは自分で勉強して解決しようと思います。
ご意見のほう参考になりました。
レスくれた方々どうもありがとうございました。
674名無しさん@お腹いっぱい。:2001/06/30(土) 13:16 ID:???
>>670
ttp://www.specters.net/cgipon/labo/it_emoji.html

聞く前に検索くらいしよう。
http://www.google.com/search?q=%22i-mode%22+%8AG%95%B6%8E%9A&btnG=Google+%8C%9F%8D%F5&hl=ja&lr=
Googleで1発だ。
これじゃ初心者丸出しだろ?
675名無しさん@お腹いっぱい。:2001/06/30(土) 14:03 ID:???
>>674
お恥ずかしい限りです、ありがとうございました。
676名無しさん@お腹いっぱい。:2001/06/30(土) 14:28 ID:???
>>654-660
おれもMSI形式のActivePerlがインストールできなかったことがある。
ASPackage形式のやつだとインストールできた。
いやあんときはWin2kじゃなくてWin98使ってたんだっけかな?
677名無しさん@お腹いっぱい。:2001/06/30(土) 14:48 ID:???
ローカルマシン(ダイヤルアップ接続)から
ファックス送信するモジュールとかあります?
678654:2001/06/30(土) 15:31 ID:9uBIGUjk
2000なんすけど。
679ピーちゃん:2001/06/30(土) 16:26 ID:VUBp7HbU
はじめまして。
変数名を変数で制御する方法をどなたかお教え下さいますでしょうか。
680名無しさん@お腹いっぱい。:2001/06/30(土) 16:30 ID:???
>>678
うちも Win2Kで、APi522e.exeで入れたけど
特に詰まった覚えはないよ。

ちなみにその他の関係しそうな環境。
Apache1.3.14 + PHP4.0.5
何か他のがわるさしてるとか?
681名無しさん@お腹いっぱい。:2001/06/30(土) 16:31 ID:???
>>679
別スレで同じ事言ってなかったか?
レスが付いていた気がするが。
682681:2001/06/30(土) 16:36 ID:???
>>641-642
違った、このスレだ。(ワラ
どっちにしろ、何度も聞くなよ。
683ピーちゃん:2001/06/30(土) 16:37 ID:VUBp7HbU
681さんへ。
詳しいことはここで聞いてくださいと言われましたので。
684ピーちゃん:2001/06/30(土) 16:39 ID:VUBp7HbU
もう投稿していましたね。
答えてくださった方もいましたね。
申し訳ありません。
685名無しさん@お腹いっぱい。:2001/06/30(土) 17:09 ID:6E6G/3mk
>>676
自分もMSI形式がインストール出来ない事がありました。
2〜3日後に再ダウンロードしたら無事にインストール出来ましたけど。
大きなファイルの時、こういう事って結構ある様な気が・・・。
686678:2001/06/30(土) 17:55 ID:9uBIGUjk
680
とりあえずオーエス再インストールするよ。
687名無しさん@お腹いっぱい。:2001/06/30(土) 19:39 ID:thezcssc
Jade.pmの使い方、日本語で解説してあるところありませんか?

jcode.plと違う、Jade.pmの書き方を使いたいのですが。
688名無しさん@お腹いっぱい。:2001/06/30(土) 20:17 ID:???
>>687
IDかこいい!
689名無しさん@お腹いっぱい。:2001/06/30(土) 20:31 ID:thezcssc
>>687
Jcode.pmの使い方、日本語で解説してあるところありませんか?

jcode.plと違う、Jcode.pmの書き方を使いたいのですが。

スペル間違ってました。
690名無しさん@お腹いっぱい。:2001/06/30(土) 20:42 ID:???
691名無しさん@お腹いっぱい。:2001/06/30(土) 21:12 ID:???
基本形:
my $jstr = Jcode->new("string");
print $jstr->xxx; # xxx = sjis, euc, jis, utf8
print Jcode->new("string")->xxx;
print jcode("string")->xxx;

だが俺は専らconvertしか使わない。
print Jcode::convert("string", "sjis");
692名無しさん@お腹いっぱい。:2001/06/30(土) 21:44 ID:???
>>691
ありがとうございます。

http://www.netfort.gr.jp/%7Ekiyoka/jcode_intro/index.html
ユーザーサイト
Jcodeを使おう(実用本位のJcode紹介)

こことか見てたんですがよくわからなくて
693名無しさん@お腹いっぱい。:2001/06/30(土) 22:28 ID:???
実際のところ、conver()tだけ使えれば十分だと思うがな。
694名無しさん@お腹いっぱい。:2001/06/30(土) 22:56 ID:???
>>684
具体的にどんなことが知りたいの?
ちょっと抽象的すぎてよく分からない。
695名無しさん@お腹いっぱい。:2001/06/30(土) 22:57 ID:FLPQLr3k
リアル・プロデューサーは変換と転送を同時に行えることが
できるのでしょうか?
手元にパソコンが3台もあるわけがなく、確認しようがないんですので、
スマソ。
696ヽ(´ー`)ノ:2001/07/01(日) 01:25 ID:4azTXvJ2
すいません。
↓ココのメーラーなんですけど、
http://ipveov.virtualave.net/hope/index.html
どうやって使うんですか?
管理人が放置してるみたいなんで
だれか教えてくださいm(_ _)m
697楽しいCGI:2001/07/01(日) 01:42 ID:???
----------------サポートは作者に頼みましょう----------------
--------使い方が判らないものは使わないようにしましょう--------
698名無しさん@お腹いっぱい。:2001/07/01(日) 07:27 ID:???
*.pm
ファイルの使い方が和歌欄所〜!
699名無しさん@お腹いっぱい。:2001/07/01(日) 10:45 ID:???
>>698
Perl Module
700名無しさん@お腹いっぱい。:2001/07/01(日) 14:00 ID:jQM8Nz7E
厨房質問ですみません。
ディレクトリ内のファイル一覧を表示するのに

#!usr/local/bin/perl
print "Content-type: text/html\n\n";
print <<"HEAD";
<html><head><title>ichiran</title>
</head><body>
HEAD
opendir(DIR,"./");
@list=readdir(DIR);
close(DIR);
@list=sort(@list);
foreach(@list){
print "$_<br>\n";
}
print "</body></html>";
exit;

という風に書いてローカルで動かしたところ、ちゃんと動いたので
サーバにアップロードして動かしてみたところエラーになって
しまいます。原因はなんなんでしょう?くだらない質問かもしれ
ませんがご教授願います。

ローカル:Win、ANHTTPd、Active Perl
アップ先:hypermart.net
701':2001/07/01(日) 14:28 ID:???
'
702名無しさん@お腹いっぱい。:2001/07/01(日) 15:11 ID:???
>>700
#!/usr/local/bin/perl
703700:2001/07/01(日) 20:46 ID:???
>>702

あちゃ〜凡ミス・・。
鬱だ。逝ってきまス

あ、それとありがと。
704名無しさん@お腹いっぱい。:2001/07/02(月) 00:09 ID:???
Content-type: image/gif のようにpngファイルを出力する事は可能ですか?
Content-type: image/png ?
705名無しさん@お腹いっぱい。:2001/07/02(月) 00:27 ID:???
>>704
可能だろ。
っつか、一度試行すればわかるだろうが。
706JAPU:2001/07/02(月) 07:49 ID:???
707名無しさん@お腹いっぱい。:2001/07/02(月) 16:31 ID:???
たびたび申し訳ないっす
iモードの絵文字をHTMLで表示するのはわかったんだけどメールで
表示する場合ってどうすればいいんでしょう?
708名無しさん@お腹いっぱい。:2001/07/02(月) 19:03 ID:???
送信?
受信?
メーラーは?
709名無しさん@お腹いっぱい。:2001/07/02(月) 20:50 ID:wG0apBZw
WAKWAKざんまいでLWPをインストールしてる人いますか?
ディレクトリ構造を教えてください
710名無しさん@お腹いっぱい。:2001/07/02(月) 21:05 ID:???
perl 始めて三日目、現在言葉狩りの勉強をやってるんですが、
ちょっと解らないところがあるのです。

$kinsi='うひ';

@kinsiword = (
'死',
'殺',
);

sub kinsi {
foreach (@kinsiword) {
$com =~ /$_/gi;
$com =~ s/$_/$kinsi/gi;
}
}

コレで送られてきたメッセージ内 ($com) の文字は上手く置換できるのですが、

@kinsiword = (
'',
);

とすると、表示がおかしくなります。
例えば、$com が あ なら、 うひb、ひ�うひ という風に。
空の文字が配列内にあっても何も起こらないようにするにはどうしたら良いのでしょうか。
711名無しさん@お腹いっぱい。:2001/07/02(月) 21:05 ID:???
perl 始めて三日目、現在言葉狩りの勉強をやってるんですが、
ちょっと解らないところがあるのです。

$kinsi='うひ';

@kinsiword = (
'死',
'殺',
);

sub kinsi {
foreach (@kinsiword) {
$com =~ /$_/gi;
$com =~ s/$_/$kinsi/gi;
}
}

コレで送られてきたメッセージ内 ($com) の文字は上手く置換できるのですが、

@kinsiword = (
'',
);

とすると、表示がおかしくなります。
例えば、$com が あ なら、 うひb、ひ�うひ という風に。
空の文字が配列内にあっても何も起こらないようにするにはどうしたら良いのでしょうか。
712見習い君:2001/07/02(月) 21:17 ID:???
@kinsiword = ();にする。又は
if ($kinsiword[0]) { &kinsi; }
てな感じに呼ぶ。
713名無しさん@お腹いっぱい。:2001/07/02(月) 21:25 ID:???
えっと、実は

@kinsiword = (
 '死',
 '殺',
 '',
 '',
);

のような形にも対応させたいのです。
見習い君氏の方法では、やはり同じ結果になるのですよ。
714名無しさん@お腹いっぱい。:2001/07/02(月) 21:29 ID:???
すみません、いきなり自己解決しました。

sub kinsi {
 if ($kinsiword[0]) {
  foreach (@kinsiword) {
   if ($_){
     $com =~ /$_/gi;
     $com =~ s/$_/$kinsi/gi;
   }
  }
 }
}

お騒がせして申し訳ない。
715名無しさん@お腹いっぱい。:2001/07/02(月) 21:29 ID:???
すみません、いきなり自己解決しました。

sub kinsi {
 if ($kinsiword[0]) {
  foreach (@kinsiword) {
   if ($_){
     $com =~ /$_/gi;
     $com =~ s/$_/$kinsi/gi;
   }
  }
 }
}

お騒がせして申し訳ない。
716名無しさん@お腹いっぱい。:2001/07/02(月) 21:31 ID:???
先程から二重投稿ばかりでこちらも申し訳ない…
717名無しさん@お腹いっぱい。:2001/07/03(火) 00:10 ID:iSdl1db6
Perlって、スクリプトだから、ソースの内容を見られちゃいますよね。
コンパイルなどしてバイナリファイル化(もしくは簡単に読めない化)
する良い方法をご存知の方はいらっしゃいますか?

ちょっと調べてperlccっていうのを見つけたのですが、マニュアルによると、
実験レベルで製品などには使用しないようにと注意書きがあって使用を
躊躇しています。

実はお客さんに、Perlのスクリプトが入ったRedHatベースのLINUXマシンを
提供するのですが、中のPerlスクリプトは、簡単には解析してほしくない
事情があります。

最初からCなどでCGIを作ればよかったのですが、今となっては、
その時間もなく。。。らら〜、先見性のなさに、困っています。
718名無しさん@お腹いっぱい。:2001/07/03(火) 00:20 ID:???
perlccでコンパイル/バイトコードコンパイルするしかないと思うが。
「素人には分からない」ってのなら幾つか方法はあるがな。
719717:2001/07/03(火) 00:45 ID:iSdl1db6
>718

解析するの気力を失わせるだけでも、やる意義はあります。
よろしければ、「素人には分からない」方法のヒントを教えてくださーい。
720名無しさん@お腹いっぱい。:2001/07/03(火) 01:13 ID:???
つか、隠したいとこだけCにしちゃえばいいじゃん。
721名無しさん@お腹いっぱい。:2001/07/03(火) 02:34 ID:???
#!/usr/bin/perl
# 簡易エンコード/デコードツール hperl
use strict;
my($encode, $decode, $hperl);
while(@ARGV and $ARGV[0] =~ s/^-//){
foreach (shift){
/e/ and $encode++, last;
/d/ and $decode++, last;
/h/ and ($hperl = shift), last;
}
}
if($encode){
print "#!$hperl\n" if $hperl;
while (<ARGV>){
tr[a-zA-MN-Z0-9* _\t<>{}'"\n$:?][N-ZA-Mn-za-m5-90-4 *\t_}{><"'$\n?:];
print;
}
}elsif($decode){
while (<ARGV>){
$. == 1 and /^#!.*hperl$/ and next;
tr[N-ZA-Mn-za-m5-90-4 *\t_}{><"'$\n?:][a-zA-MN-Z0-9* _\t<>{}'"\n$:?];
print;
}
}else{
open PERL, "|$^X -";
while (<ARGV>){
$. == 1 and /^#!.*hperl$/ and next;
tr[N-ZA-Mn-za-m5-90-4 *\t_}{><"'$\n?:][a-zA-MN-Z0-9* _\t<>{}'"\n$:?];
print PERL;
}
close PERL;
}
__END__
$ hperl -e foo.pl >foo.hpl # エンコード
$ hperl -d foo.hpl >foo.pl # デコード
$ hperl foo.hpl # エンコードしたスクリプトを実行(但しスクリプト名はあてにしないこと)
$ hperl -h /foo/bar/hperl -e foo.pl >foo # -h のあとにhperlのPATHを書いておく
$ foo # 実行可能スクリプト(CGIとしての動作も可能?)

これで生のスクリプトは読めない。
722709:2001/07/03(火) 10:08 ID:XVjOTMAw
補足します
WAKWAK(http://www.wakwak.ne.jp)では
CGIスクリプトや自作モジュールの設置場所を/cgi-bin/直下に限定しています

×/cgi-bin/my_module/hoge.pm
○/cgi-bin/hoge.pm

LWPモジュール群(libwww-perl-5.53_94)を展開すると
/cgi-bin/以下にサブディレクトリが作成されるのでWAKWAKでは動作しないのです

require '/cgi-bin/my_module/hoge.pm';

BEGIN {unshift(@INC,'/cgi-bin/my_module/');}
use hoge.pm;
では使えませんでした

ディレクトリ構造を無視して全ファイルを/cgi-bin/に移動しようと思っても
同名ファイルが存在するので上手くいきません

どうすればよいでしょうか?
723名無しさん@お腹いっぱい。:2001/07/03(火) 10:12 ID:???
んー、管理者に言ってLWPをインストールしてもらうとか。
あと、かりに BEGIN {unshift(@INC,'/cgi-bin/my_module/');} がうまくいってても、
use hoge.pm; じゃ無理。
use hoge; ね。
724>>wakwak"管理人":2001/07/03(火) 17:14 ID:???
ここ見てたらLWPをインストールしてください
725名無しさん@お腹いっぱい。:2001/07/03(火) 17:16 ID:???
use Module.pm;という発想に驚いた。
726名無しさん@お腹いっぱい。:2001/07/03(火) 17:18 ID:???
っつーかrequire '/cgi-bin...' ってなんだよ。
ルート直下のcgi-bin使ってんのか?
727名無しさん@お腹いっぱい。:2001/07/03(火) 21:01 ID:???
おーい>>726に相対パス教えてやれ
728名無しさん@お腹いっぱい。:2001/07/03(火) 21:30 ID:???
require './omaemona.txt'
729名無しさん@お腹いっぱい。:2001/07/03(火) 22:26 ID:???
ネタか?
require './omaemona.txt'
require '/omaemona.txt'
require 'omaemona.txt'
cgi-bin以下にあるスクリプト限定なら同じだろ?
まー意地悪な設定ならエラー扱いされるけど
730名無しさん@お腹いっぱい。:2001/07/03(火) 22:32 ID:???
以下のような置換が上手く出来ません。
行の先頭に中黒が付いてたらリストとみなして、

<p>ほげ</p><p>・リスト1<br>・リスト2<br>・リスト3<br></p><p>ほげ・ほげ<br>・りすと4</p>

<p>ほげ</p><ul><li>リスト1</li><li>リスト2</li><li>リスト3</li></ul><p>ほげ・ほげ</p><ul><li>リスト4</li></ul>

というようなことをしたいのです。
どうにか良い方法は無いでしょうか。
731名無しさん@お腹いっぱい。:2001/07/03(火) 22:33 ID:???
>>730
4行目を6行目の様にしたいってことです。
732238:2001/07/03(火) 22:37 ID:???
あとできれば最新20件みたいなのも
733732:2001/07/03(火) 22:38 ID:???
誤爆でした。ごめんなさい。
734名無しさん@お腹いっぱい。:2001/07/03(火) 22:42 ID:???
>>730
あー、さらに追記です。
・リスト3<br></p> のような <br></p> や <p><br> などは段落置換処理を行なって出ないようにしてます。
#ちなみに <br> が複数続くことも無いです。
735見習い君:2001/07/04(水) 00:27 ID:???
>>730
元ファイルの構成がイマイチ判らないんだけど…
こんな感じかなぁ。。恥かしい処理だ。。

foreach $line (@lines) {
$line =~ s/^・(.*)/<ul><li>$1<\/li><\/ul>/;
$new .= "$line\n";
}
$new =~ s/<\/li>(<\/ul>\n<ul>)?<li>/<\/li>\n<li>/g;
print <<"EOE";
Content-type: text/html

$new
EOE
exit;

@linesにファイル入れてね。
736rubbish_lister:2001/07/04(水) 01:06 ID:???
s/\//;よりs{/}{};のほうがいいと思われ。
737rubbish_lister:2001/07/04(水) 01:08 ID:???
間違い。
s/\//;→s/\///;
738名無しさん@お腹いっぱい。:2001/07/04(水) 08:49 ID:???
>>735
ありがとうございます。
でもちょっと出来なかったです。

構成っていうとどの辺りを書けば良いんでしょうか。
書きこみ処理はまんま KENT の Aska BBS v1.51 です。
というか Aska を改造してるのですけど…

http://members.nbci.com/nfvxsd/cgi.txt

ここに置いておくので、宜しければ見て下さい。
# 重くて開かない時もあります…
739見習い君:2001/07/04(水) 09:37 ID:???
あ、なるほど。ご指摘ありがとう。見習いますれす。
foreach $line (@lines) {
$line =~ s{^・(.*)}{<ul>\n<li>$1</li>\n</ul>};
$new .= "$line\n";
}
$new =~ s{</li>\n(</ul>\n<ul>)\n<li>}{</li>\n<li>}g;
こんな感じになるんかな?
740見習い君:2001/07/04(水) 09:40 ID:???
>>738
重いからあとでね。てか何がダメだったか書いてくれ。
741名無しさん@お腹いっぱい。:2001/07/04(水) 09:56 ID:???
>>740
@lines にファイルを入れるということで、

@lines = $com; #com はデータ (タイトルや投稿者、メッセージなど)

としました。
742見習い君:2001/07/04(水) 17:20 ID:???
(´□`)・・・
行の先頭に「・」がくるって言ったくせに・・・(;;)
743名無しさん@お腹いっぱい。:2001/07/04(水) 17:31 ID:???
>>742
申し訳ないです、説明不足でした…
744見習い君:2001/07/04(水) 17:57 ID:???
sub paragraphの最後にこの2行をつっこみ。
$com =~ s{>・([^<].*?)<}{><ul><li>$1</li></ul><}g;
$com =~ s{</ul><br><ul>}{}g;

時間かかっちゃった(-▽-;
745名無しさん@お腹いっぱい。:2001/07/04(水) 18:24 ID:???
>>744
完璧です、素晴らしい。
ありがとうございました、今度はこれを解析して学習してみようと思います。
#実はどういう処理してるか解らない(汗
746見習い君:2001/07/04(水) 21:36 ID:???
ん、ドット消し忘れた。
747名無しさん@お腹いっぱい。:2001/07/04(水) 23:29 ID:???
前から思ってたんだが… s///o; の o って何だろう?
g と i は解るが、o は未だに解らない…
748名無しさん@お腹いっぱい。:2001/07/04(水) 23:54 ID:???
>>747
パターンを1回だけコンパイルする
と青ラクダ本に書いてある
749名無しさん@お腹いっぱい。:2001/07/05(木) 00:04 ID:???
>>747
foreach(1 .. 9){
$test = "123456789";
$test =~ s/$_/a/og;
print $test ."\n";
}
こういうことを試してみれば、どういう事かわかると思う。
750名無しさん@お腹いっぱい。:2001/07/05(木) 13:01 ID:???
処理時間の取得ってどうやるんだっけ…
やり方が見つからないんでここで質問。

ちなみにスクリプトの実行から終了までの時間を取れれば。
#ベンチマークやるんで
751名無しさん@お腹いっぱい。:2001/07/05(木) 13:10 ID:???
実行速度の比較をするだけなら times 関数とか。
752名無しさん@お腹いっぱい。:2001/07/05(木) 13:11 ID:???
time perl hogehoge.pl

それとも use Benchmark かしら
753名無しさん@お腹いっぱい。:2001/07/05(木) 13:58 ID:???
おー、times 使ったら一応比較は出来たよ、さんくす。

use Benchmark は…どうやって使うのか解らない(汗

use Benchmark;
(コード)

その後、結果を出力する方法が解らないっす。
754名無しさん@お腹いっぱい。:2001/07/05(木) 15:02 ID:???
#!/usr/bin/perl
use Benchmark;

#1

$t1 = new Benchmark;
code;
$t2 = new Benchmark;
print "the code took:", $t2->timediff($t1)->timestr, "\n";

#2
$count = 10000;
timethese( $count, {
foo => sub{ code1 },
bar => sub{ code2 },
});

__END__
755707:2001/07/05(木) 17:37 ID:???
え〜、あれから調べてみたんですが
i−modeからFROMタグを使ってsendmailでiーmodeなり
PCにメールを送る際に文字化けが起こるので絵文字を他の文字に変換したりは
していたんですが、i−modeからFORMタグを使ってi−modeに送る
場合はなんとか絵文字が送れないかと思ったのです。
ざっと文献やネットを見回していると「無理だ」とかかれてましたね。。。
でも今話題の出会い系サイトでいくつかのサイトでは送れるんですよね、なんで
だろう?
756JAPU:2001/07/05(木) 18:24 ID:???
>>753
そういう場合はドキュメントを見るのが正解。
man Benchmark
or
perldoc Benchmark
757名無しさん@お腹いっぱい。:2001/07/05(木) 19:02 ID:WznWMXto
デバッガの x (変数) コマンドみたいに、リファレンス、配列、ハッシュなどを
たどって綺麗に表示してくれるパッケージ等はありますか?
758_gunzip:2001/07/05(木) 19:30 ID:???
759名無しさん@お腹いっぱい。:2001/07/05(木) 20:06 ID:???
>>754
ありがとっす。

>>756
了解、今夜か明日にでも見てみます。
760名無しさん@お腹いっぱい:2001/07/05(木) 20:16 ID:4qZ7uZOM
perlでフォームメールを作ったのですが、そのメールの送信まではうまくいきます。
そこにそのメールの内容をログとしてファイルに記載したいのですが、
どうすればよいのでしょうか?
761ど素人:2001/07/05(木) 20:35 ID:???
これって
どこかまちがってますか?
22時間かかってもわかりません
どなたかキツイ指摘を・・・
環境変数のスクリプトです
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html>\n\n";
print "<title>Proxy checkr</title>\n;
print '<body bgcolor="black" text="dimgray" link="dimgray" alink="dimgray" vlink="orangered">'\n
$host = $ENV{'REMOTE_HOST'};
$addr = $ENV{'REMOTE_ADDR'};
$red = '<font color="silver">';
$endf = '</font>';
if ($host eq "") { $host = gethostbyaddr(pack('C4',split(/\./,$addr)),2) || $addr }
print "<br><br>\n;
print "$host\n" ;
if ($host =~ /(proxy|prox|squid|cache|www|dns|ns|gateway|gatekeeper|gate|^gw|^fw|firewall)/i){
print "$red<- テスト $endf <br>\n";
$pflag = 1;
}
else {
print "<- テスト<br>\n";
$pflag = 0;
}
$via = $ENV{'HTTP_VIA};
if( $via != "") {
print "$red HTTP_VIA テスト -> $via $endf<br>\n;
print "テスト<br>\n";
$via_flag =1;
}
else {
print "テスト<br.\n;
$via_flag = 0;
}
$client = $ENV{'HTTP_CLINT_IP'};
if( $client != "" ) {
print "$red CLENTテスト-> $clint $endf<br>\n;
}
else {
if ($via_flag == 1) {print "テスト"<br>\n";}
else {
if ( $pflag == 1 ) {print "テスト<br>\n"; }
else { print "テスト?<br>\n";
}
}
print "\n</body>\n";
print "</html>\n\n";
exit;

762名無しさん@お腹いっぱい。:2001/07/05(木) 20:41 ID:FPnmy2lY
print '<body 〜 vlink="orangered">'\n
                     ↑なにこれ?
763757:2001/07/05(木) 20:58 ID:???
>>758
どもです。
764名無しさん@お腹いっぱい。:2001/07/05(木) 21:00 ID:???
>>761
つーか、クォーテーションの囲い損ねが沢山…
キツイ指摘する気力も起こらんわ。
765名無しさん@お腹いっぱい。:2001/07/05(木) 21:08 ID:???
しかし>>761見たいな奴は何見て勉強してるんだろうな。
Perl5対応のマトモな本 or スクリプトなら
普通q/qq/qxクォートやヒアドキュメントが載ってると思うのだが。

…糞本や糞スクリプトが出回っているってことか(鬱)
766名無しさん@お腹いっぱい。:2001/07/05(木) 21:42 ID:???
まぁなんだ。
とりあえず>>761は注意力をもうちょっと上げてくれ。
767名無しさん@お腹いっぱい。:2001/07/05(木) 22:14 ID:2FhZLyb6
エラーログ 見てみ
768名無しさん@お腹いっぱい。:2001/07/06(金) 00:29 ID:???
>>765
他人のスクリプトをコピペして使ってるんだろ?
本なんか読んでないに決まってるじゃないか。

・・・昔の俺がそうだったんだよ。
769ど素人:2001/07/06(金) 00:33 ID:???
みなさん
レスありがとうございました
もっと
注意力をあげてきます
動かせるようになったら報告します
本も色々読んだ方がいいのですか
よい本と糞本の区別もつかないもので・・
ありがとうございました
770名無しさん@お腹いっぱい。:2001/07/06(金) 00:45 ID:???
【Perl,CGI】参考書籍 第2版
http://corn.2ch.net/test/read.cgi?bbs=php&key=988809842
771名無しさん@お腹いっぱい。:2001/07/06(金) 00:49 ID:???
>>761=>>769
まさかWEBサーバー上でテストしてないだろうな?
スクリプトのテストをするならローカルでやれよ。
参考:http://tohoho.wakusei.ne.jp/wwwcgi6.htm
772ど素人:2001/07/06(金) 00:59 ID:???
>>770
ありがとうございました
たすかります

>>771
はい
Active Perlでやってます
773ど素人:2001/07/06(金) 02:22 ID:???
うごかね〜〜〜〜〜〜
だいたい 俺みたいなスーパー初心者が
「ちょ〜っといぢってみようかな〜」なんて
色気だしたのが間違いでした

フリーシージーアイのパス変更のみで
満足するべきでした
折角レスもらったのにすみません

一から出直してきます m(_ _)m
774名無し:2001/07/06(金) 03:31 ID:YsXZOyrU
サブルーチンについて勉強しています。

一つでは書き込めないため、三つに分けさせて頂きます。
ごめんなさい。

775のスクリプトで

return $result_x, $result_y;

この一行があると無いとでは結果が全く違います。
ここで問題にしたいのは$calc_value[0]と$calc_value[1]に入る値です。
この一行があってもなくても、いつでも
$calc_value[0] = $argument1(つまり10)
$calc_value[1] = $argument2(つまり1)
というわけではないのでしょうか?

また、776にある
my ($result_x, $result_y, $argument1, $argument2);
($argument1,$argument2) = @_;
この二行はそれぞれこのスクリプトの中でどういう役割を果たしているのでしょうか?

宜しくお願いします
775名無し:2001/07/06(金) 03:31 ID:YsXZOyrU
#!/usr/bin/perl -w

$argument1 = '10';
$argument2 = '1';

@calc_value = &return_value($argument1,$argument2);

print "$calc_value[0]\n";
print "$calc_value[1]\n";

sub return_value {


$result_x = $argument1 + $argument2;
$result_y = $argument1 + $result_x;

print "----サブルーチン始----\n";
print "\$result_x = $result_x\n";
print "\$result_y = $result_y\n";
print "\$argument1 = $argument1\n";
print "\$argument2 = $argument2\n";
print "----サブルーチン終----\n";

return $result_x, $result_y;

}
776名無し:2001/07/06(金) 03:32 ID:YsXZOyrU
#!/usr/bin/perl -w

$argument1 = '10';
$argument2 = '1';

@calc_value = &return_value($argument1,$argument2);

print "$calc_value[0]\n";
print "$calc_value[1]\n";

sub return_value {

my ($result_x, $result_y, $argument1, $argument2);

($argument1,$argument2) = @_;

$result_x = $argument1 + $argument2;
$result_y = $argument1 + $result_x;


return $result_x, $result_y;

}
777名無しさん@お腹いっぱい。:2001/07/06(金) 04:05 ID:???

悪い。
use strict;が無いってだけで目が読むのを拒否しやがった。
778名無しさん@お腹いっぱい。:2001/07/06(金) 04:08 ID:???
>>774-776

# 775
> $calc_value[0] = $argument1(つまり10)
> $calc_value[1] = $argument2(つまり1)
> というわけではないのでしょうか?
まず、returnしている変数が$result_x,$result_yなのでお望みの結果にはなりません。
常に10,1でいいなら
return($argument1, $argument2);
としてやればいいでしょうね。
# ただ、こんなことやってもこのサブルーチンの存在している意味がないですけど。
ちなみに、サブルーチンに明示的にreturnを指定していない場合は
一番最後に評価された値が戻ります。
@calc_value = (1,undef); という結果になるかと。

# 776
まず、レキシカル変数について勉強しましょう。
グローバル特殊配列@_には、サブルーチンに引き渡された変数が格納されています。
> my ($result_x, $result_y, $argument1, $argument2);
> ($argument1,$argument2) = @_;
まず、4つの変数をレキシカルスコープ宣言した後に、
変数を代入しているわけです。
# 説明下手ですいません。
779名無しさん@お腹いっぱい。:2001/07/06(金) 05:30 ID:YsXZOyrU
>>778
すみません。775の説明はよく理解したのですが、776の説明がよく理解できません。
@_ = ($argument1, $argument2);
ではなく、逆になっているのが良く分かりません。

また($argument1,$argument2) = @_; をサブルーチンの中に置くのと外に置くのと
では意味が変わるのでしょうか?

()や位置関係が絡むとややこしくって・・・。

お願いします。
780名無しさん@お腹いっぱい。:2001/07/06(金) 07:56 ID:ex2YDxP.
引数わたし>779
781778:2001/07/06(金) 09:48 ID:???
>>779
仮に、$str1に$str2を入れたい場合、どうします?
$str1 = $str2; とするでしょう?
同じように、$argument1,$argument2に@_を入れてるんですよ。
サブルーチン内では$argument1,$argument2共にレキシカル変数になっているので
もはや10,1という値は入っていません。それを代入してやってるというか。

@_は場所によって、適宜引数が格納されているので、意味は変わるというのが正解でしょうか。
782名無しさん@お腹いっぱい。:2001/07/06(金) 09:56 ID:???
>>779
一度、本屋さんに置いてある全てのPerl本の「サブルーチン」を
説明している部分を立ち読みすると良いと思いますよ。
783名無しさん@お腹いっぱい。:2001/07/06(金) 15:44 ID:RNx.m3EU
>>781
なるほど!
自分で色々試してやっと理解しました。
ありがとうございました。

でも参考書の一冊も手元にないのも限界かな・・・。
784名無しさん@お腹いっぱい。:2001/07/06(金) 17:59 ID:???
>>783 そうだったのか… Σ( ̄□ ̄;)
785名無しさん@お腹いっぱい。:2001/07/06(金) 18:05 ID:YlE0Cv3o
786783:2001/07/06(金) 22:54 ID:GVXvZTOc
>>784
え?どういう意味ですか?(不安)
787名無しさん@お腹いっぱい。:2001/07/07(土) 20:25 ID:???
http://p4room.mda.or.jp/book/cgi/download/dload.cgi?access3.lzh
なんですけど、外国サーバーに設置すると15時間少なく記録されしまいます。
どのように直せばいいのでしょうか。
788名無しさん@お腹いっぱい。:2001/07/07(土) 20:46 ID:???
>>787
gmtime(time() + 9*60*60);
789名無しさん@お腹いっぱい。:2001/07/07(土) 20:48 ID:???
>>787
タイムゾーンと時間取得の関数について勉強してください。
# $ENV{TZ}, localtime(), gmtime() あたり
790名無しさん@お腹いっぱい。:2001/07/07(土) 20:49 ID:???
>>787
ソ・ー・ス・だ・せ!
791VEDA:2001/07/07(土) 21:22 ID:???
すいません・・
http://cgi18.plala.or.jp/downward/
このCGIで改造途中いきづまってしまいました。
サポートへはきけないのでだれかおしえてくださーいぃ

ここのスクリプトの表示部分のhtml.cgiに「$id」があります。
ちなみに$idの例をあらわすと
1-1とか1-2とかスレッドの番号です

この$idをveda.cgiの860行あたりにある
sub make_partial_message{
の部分で$idのショットカットをつかいたいんです。
どうすればつかえることができますか?
自分のめちゃくちゃな発想では
my $thread = shift;
ここを変えるとおもうのですが・・
どなたかどうかおしえてくださいぃ〜

今日の昼からずっと考えてトライしまくって無理でした・・
目が痛いです。だれかおしえて〜〜〜〜!
792787:2001/07/07(土) 21:29 ID:???
すべてのtimeをtime +15*60*60にかえたら動きました。
みなさんありがとうございました。
793名無しさん@お腹いっぱい。:2001/07/07(土) 21:58 ID:???
>>791
ショットカットって何よ
というか、こっちでない?
http://corn.2ch.net/test/read.cgi?bbs=php&key=988808396&ls=50

>>787
素直にgmtimeで9時間足せば、どこの国だろうが日本時間になるよ
794VEDA:2001/07/07(土) 22:25 ID:???
お そっちいってみます
795DAZZ:2001/07/08(日) 11:11 ID:6Jyxvsmw
URLの関係で、CGI使えないトコにあるフレームセットから、
SSIを呼び出しています。

こういった場合、アクセスログ解析で、
refererを取得する事はできないんでしょうか?

やはり、直接htmlやcgiを指定しないと無理ですか?
どなたかご存じでしたら、教えてください。
796名無しさん@お腹いっぱい。:2001/07/08(日) 11:26 ID:???

これいい加減FAQだよな。
797名無しさん@お腹いっぱい。:2001/07/08(日) 13:08 ID:???
document.write( "<img src='accesslog.cgi?referer=" + document.referer + "'>" );
798名無しさん@お腹いっぱい。:2001/07/08(日) 13:34 ID:???
>>797
それはフレームじゃ無理。
799名無しさん@お腹いっぱい。:2001/07/08(日) 14:51 ID:???
>>795
過去ログに<em>90%同じ</em>質問があり、回答もされています。
読みましたか?
800DAZZ:2001/07/08(日) 16:32 ID:CHSNDL26
みなさま、ありとうございました。

refererとフレームで検索かけつつ見たつもりでしたが、
見逃してしまったようです。

もう一度探してみます。
すいません。
801名無しさん@お腹いっぱい:2001/07/08(日) 20:01 ID:hb0UPetQ
http://www.2ch.com/の時はそのまま出力して
ttp://www.2ch.com/の時に自動リンクしたいんですが
正規表現が解りません、、、芯だ方が良いでしょうか
8025.005以上ね:2001/07/08(日) 20:38 ID:???
死ぬまえに勉強して下さい。

s|(?<!h)(ttp://[URLにありえる文字]+)|<a href="h$1">$1</a>|g;

hogettp://www.2ch.com でもリンクされるけど、君がどう望んでるのかわからんからne。
803名無しさん@お腹いっぱい。:2001/07/08(日) 20:43 ID:???
>>802
s|([^h]?)(ttp://[URLにありえる文字]+)|$1<a href="h$2">$2</a>|gi;
では駄目なのかな?
804名無しさん@お腹いっぱい:2001/07/08(日) 20:53 ID:???
>>802さん、>>803さん、即答有難う御座います、頭が破裂しそうです
が教えていただいた内容が理解出来る様に精進いたしますです。
あー情けなや、やっぱり芯でしまいたいです。。。
805 :2001/07/09(月) 02:22 ID:fbWvSC9U
ランダム性について質問させてください。
例えば、100のパターンの分岐をさせたい場合、

-方法1-
srand();
$randam = int(rand(100));

if ($randam == 1){
$doreka = "1.txt";
}elsif ($randam == 2){
$doreka = "2.txt";
}elsif ($randam == 3){
$doreka = "3.txt";

・・・・・・以下elseまでずっと続く・・・。

-方法2-
パターンを20個つづの5グループに分けて、
最初にグループを選んで、次にグループの中で
パターンを選ぶ・・・

この場合、均等にばらけさせるのは方法2のほうなのでしょうか?
また、他にもっと効率よくばらけさせる方法はあるでしょうか?
806名無しさん@お腹いっぱい。:2001/07/09(月) 03:10 ID:???
>>805
方法1で充分だと思うけど。
ただしifで分けるんじゃなくて、
$dareka = "$random.txt"; とでもしてやれば。
あと、Perl5以降はsrand要りません。
807S:2001/07/09(月) 03:12 ID:???
@doreka_array = qw( 1.txt 2.txt 3.txt ... 100.txt );
$doreka = $doreka_array[int rand @doreka_array];

みたいなのがいちばん簡単なのではないでしょうか。

$MAX = 100;
$doreka = (int(rand $MAX)+1). ".txt";

も、使えるかも。

均等さは1も2も同じだと思います。もともとrandは引数が大きくなれぱ
ランダムじゃなくなりますし、気にすることはないでしょう。
808名無しさん@お腹いっぱい。:2001/07/09(月) 03:15 ID:???
>>807
でかい配列は作りたくない気もする。
809名無しさん@お腹いっぱい。:2001/07/09(月) 10:26 ID:8Wkoq3g6
昔、偏りのある乱数を出すスクリプト書いたとき
807と同じ方法を使ったよ。

んでも805の場合は
出力する値が数字.txtとなってて一体感があるから
$num = int( rand((100) ) + 1; #1-100までのランダムな数字がはいる
$dareka = "$num.txt";

でいいんじゃないかな?
810名無しさん@お腹いっぱい。:2001/07/09(月) 14:49 ID:8Wkoq3g6
perlでメモリの使用量を見るにはどうしたらいいんでしょうか?
811名無しさん@お腹いっぱい。:2001/07/09(月) 15:16 ID:???
$ENV{'HTTP_REFERER'}
これでREFERERが取れないことが凄く多いんだけど何故でしょうか?
明らかにbookmarkやコピペじゃない場合でも取得できないんですが。
ログ見てると取れる時間帯と取れない時間帯がありそうな気がするんですが。
鯖の状態によって取れたり取れなかったりするもんでしょうか?
812名無しさん@お腹いっぱい。:2001/07/09(月) 15:18 ID:???
proxy が削っていることもある。
813811:2001/07/09(月) 16:34 ID:???
串刺してなくても取得出来ないことが多いんですよね。
取得できないからといって困るわけではないんですが。
814名無しさん@お腹いっぱい。:2001/07/09(月) 17:18 ID:8K4xE7OM
チャットにURLを打たせてメッセージの前に「□」をつけてリンクを張ろうとしているのですが
URLとメールアドレスを打っていないとどちらともにリンクを張らず
かたほうにあるとそちらにリンクを張るようにしたいのですが
if ($in{'email'} eq "" & $in{'url'} eq "") { $name = "$pointer □ <b>$in{'name'}</b>"; }
if ($in{'email'} eq "" & $in{'url'} ne "") { $name = "$pointer <a href=\"http://$in{'url'}\" target='_blank'>□</a> <b>$in{'name'}</b>"; }
if ($in{'email'} ne "" & $in{'url'} eq "") { $name = "<a href=\"mailto:$in{'email'}\">$pointer</a> □ <b>$in{'name'}</b>"; }
↑のようにしてもうまくいきません。
わかる方がいればよろしくお願いします。
815名無しさん@お腹いっぱい。:2001/07/09(月) 17:36 ID:???
>>814
&ではなく&&。
816名無しさん@お腹いっぱい。:2001/07/09(月) 17:49 ID:???
>>810
Windowsでは無意味ですが、
環境変数PERL_DEBUG_MSTATSに1か2をセットしてperlを起動するとメモリ統計を表示できます。
Windowsの場合はどうすればいいのかは分かりませんね。

>>814
"&"ではなく"&&" または"and"を使うと幸せになれます。
ついでにif-elsif-elseを使うと更に幸せになれます。
817816:2001/07/09(月) 17:49 ID:???
かぶった…
818名無しさん@お腹いっぱい。:2001/07/09(月) 18:53 ID:zlMbWq72
>>814
andにしてみたのですがどうもうまくいきません。
if ($in{'email'} ne "" & $in{'url'} eq "")...はうまくいくのですが
それ以外がどうもだめです。

なにか問題があるのでしょうか?

if-elsif-elseの使い方がいまいちわかりません。

よろしくお願いします。
819名無しさん@お腹いっぱい。:2001/07/09(月) 19:04 ID:???
>>814=818
試しましたが、&&でもandでも問題ないですけど。
まぁオペランドの違いによって優先順位ありますけどね。
つーか、両方とも値が入っていた時の処理してないから問題あるんでないの?
$in{email}と$in{url}の両方に値があったらどうすんのさ。
このままだと何も出ないじゃん。

>if-elsif-else
本でも買って一から勉強したほうがいいと思いますが。
820名無しさん@お腹いっぱい。:2001/07/09(月) 19:20 ID:???
>if ($in{'email'} ne "" & $in{'url'} eq "")...はうまくいくのですが
&の意味も分からず何を仰っているのですか?(笑)
もしかしてあなたM女史ですか?(笑)
821名無しさん@お腹いっぱい。:2001/07/09(月) 20:09 ID:???
ネタに一票
822名無しさん@お腹いっぱい。:2001/07/09(月) 20:26 ID:???
>>814
if ($in{'email'} eq "" && $in{'url'} eq "") { $name = qq($pointer □ <b>$in{'name'}</b>); }
elsif ($in{'email'} eq "" && $in{'url'} ne "") { $name = qq($pointer <a href="http://$in{'url'}" target='_blank'>□</a> <b>$in{'name'}</b>); }
elsif ($in{'email'} ne "" && $in{'url'} eq "") { $name = qq(<a href="mailto:$in{'email'}">$pointer</a> □ <b>$in{'name'}</b>); }
else{両方入っていた場合の処理;}
ホラよ。
わかったら帰れ。
基本を覚えてくるまで帰ってこないでくれよ。
823名無しさん@お腹いっぱい。:2001/07/09(月) 20:30 ID:???
if-elsif-else で疑問に思ったんだけど、

if ( 条件1 || 条件2 || 条件3 || 条件4 ) { 処理 }

if ( 条件1 ) { 処理 }
elsif ( 条件2 ) { 処理 }
elsif ( 条件3 ) { 処理 }
elsif ( 条件4 ) { 処理 }
else { }

っていうのはどちらが良いんだろう。
824名無しさん@お腹いっぱい。:2001/07/09(月) 20:40 ID:???
{ 処理 } に修正をするときに、1 回修正すればいいってのと、4 回修正
する必要があるってんじゃ、手間が全然違うだろ?
825名無しさん@お腹いっぱい。:2001/07/09(月) 21:07 ID:???
>>823
>>824のいうとおり、普通は…というか常識的には前者だろう。
826名無しさん@お腹いっぱい。:2001/07/09(月) 21:12 ID:???
ふむ、前者の方で良いのか…さんくす。
ちなみに>>823の処理っていうのは全部エラー処理だったり。
827名無しさん@お腹いっぱい。:2001/07/09(月) 22:20 ID:???
2ch用ブラウザってどれが一番つかいやすいの?
いっぱいあるけどみんなはなにつかってるんだろ?
今からつかってみようとおもうんだけどサ!
あと2ch用ブラウザは2ch型ならどれでも対応してるんですか?
828名無しさん@お腹いっぱい。:2001/07/09(月) 22:27 ID:???
>>827
tkz6.plにキ・マ・リ
829名無しさん@お腹いっぱい。:2001/07/09(月) 22:36 ID:???
>>827
ギコタクの「だから逝ってないでしょ」出張所
http://corn.2ch.net/test/read.cgi?bbs=php&key=991966646
830名無しさん@お腹いっぱい。:2001/07/09(月) 23:00 ID:75iCECGw
まだ発展途上みたいだけど、ちょっと期待。
831名無しさん@お腹いっぱい。:2001/07/10(火) 00:21 ID:lYKZ.3Dg
ファイルハンドルについて勉強しています。

Booksというファイルに任意の文章を書き付けておき、それを行で表示するとい
うものなのですが、++$testだけでなぜ一行ずつ加算されていくのか良く分かり
ません。『++』が一つずつ数を増やしていくためのものだというのは分かってい
るのですが、このスクリプトにおいて数を増やすポイントをどのように認識して
いるのか分かりません。

行頭で必ず行数が一つ増えて表示されるわけですが、『++$test』がどのポイン
トで一行増やすという認識をしているのでしょうか?

うーん。質問の仕方がマズいかな・・・。

このスクリプトにおいて、『++$test』はなぜ『行数を一つずつ増やせ』という
命令だと解釈できたのでしょうか?『$test』については行数を代入せよと指定し
ているわけでもないのに・・・。

自分で作っておきながら混乱してしまいました。


#!/usr/bin/perl -w

$file = "./Books";

open IN, "<$file";

while ( $contents = <IN> ) {

chop ($contents);


print ++$test, "行: ", $contents, "\n";

}
close IN;
832名無しさん@お腹いっぱい。:2001/07/10(火) 00:23 ID:???
ひとつのCGI(imgを呼ぶ方式)で
複数のページのアクセスログをとっているのですが、
どのページを見たログかを知るためには
どのような環境変数を使えばいいのでしょうか?
833名無しさん@お腹いっぱい。:2001/07/10(火) 00:51 ID:???
>>831
アフォか?
マトモな本を読め。

>>832
環境変数で検索しろ
834名無しさん@お腹いっぱい。:2001/07/10(火) 00:51 ID:???
>>831
ファイルハンドルと関係ないが?
ただ単にプラス1する演算子。

ちなみに
++$count
$count++
は、ちょっと振る舞いが違う。
835名無しさん@お腹いっぱい。:2001/07/10(火) 01:55 ID:???
>>831
$testはただ単に行数の表示のみ。
$testは何も指定していない。
whileループで順に行を読み込んでいる。
836名無しさん@お腹いっぱい。:2001/07/10(火) 05:25 ID:???
>>832
ssiは使えないの?
837831:2001/07/10(火) 15:42 ID:kZaiDUJU
>>834
>>835
何となく分かって来ました。
書き付けたファイルの全体を読んでいるのではなく、
行ごとに読み込んでいるんですね?

ありがとうございました。
838名無しさん@お腹いっぱい。:2001/07/10(火) 15:43 ID:SGYXQF82
D&Dで渡したファイルのファイル名を第一引数として
処理できるようにってなんかうまい事できないでしょうか?

ActivePerlに関連付けた.plファイルだとD&D自体受け付けない・・
839名無しさん@お腹いっぱい。:2001/07/10(火) 16:39 ID:???
なんでD&Dが必要なんだ?
とりあえず$0は知ってるのかしら。
840838:2001/07/10(火) 17:04 ID:SGYXQF82
ローカルで動かす場合です。
Webとは関係ないですけど他に聞く場所見当たらなかったもんで・・
例えばフォルダをD&Dで渡すとそのフォルダのtreeを表示する。みたいな感じのが作りたいんです。

perl c:\myperl\tree.pl %1
pause

みたいなBATファイル作ってそれにD&Dってやるとうまくいくんですが
直でperlに渡せないもんかなと・・
841838:2001/07/10(火) 17:10 ID:SGYXQF82
直でperlに→直でtree.plに です。
842名無しさん@お腹いっぱい。:2001/07/10(火) 17:12 ID:???
>>840-841
このスレの上の方で書かれていたSOSを試してみたら?
あれでCOMファイルにすればD&Dできるとおもうよ。
843名無しさん@お腹いっぱい。:2001/07/10(火) 17:19 ID:???
SOSはいいよ。マジで。
844838:2001/07/10(火) 17:56 ID:SGYXQF82
おお、これD&Dにも対応してたんですね。すご・・
や、一度落としてたんですが「BAT2COMみたいなやつか」と思って
コマンドラインで使わない限り必要ないと思って使ってませんでした。

うまくいきました。ありがとうございました。
845805:2001/07/10(火) 23:20 ID:???
ランダム性について質問した者です。
>>806さん、>>807さん、>>809さん返答ありがとうございました。
レス送れてすみません。
846名無しさん@お腹いっぱい。:2001/07/11(水) 06:54 ID:???
うをっ
D&Dってドラッグ&ドロップなんだな?
ある意味で新鮮な文字列に感じたぞ
847名無しさん@お腹いっぱい。:2001/07/11(水) 15:42 ID:9cey.Kcg
<job id="test">
<script language=PerlScript>
use Win32::OLE;

Win32::OLE->new('WScript.Shell')->Popup('Argument: '. $WScript->Arguments(0),2);
</script>
</job>

これをhoge.wsfファイルにして、何かをD&Dしてみそ。
848名無しさん@お腹いっぱい。:2001/07/11(水) 17:34 ID:???
>>847
それってPerlをインストールしてなくても有効?
849名無しさん@お腹いっぱい。:2001/07/11(水) 17:36 ID:???
dame!
850848:2001/07/11(水) 18:32 ID:???
駄目か…がっくし。
XPにActivePerl標準搭載してくんねぇかなー。
851名無しさん@お腹いっぱい。:2001/07/11(水) 19:07 ID:???
>>848
別に、今の環境に普通にActivePerl入れればいいだけでは?
852848:2001/07/11(水) 20:58 ID:???
いや勿論マイPCには入れてるけどさ、
知人らに送るときPerlのインストールを強制させるとなると…ね。
853名無しさん@お腹いっぱい。:2001/07/11(水) 21:17 ID:???
N$はPerl使うならVBスクリプト使えって言いそうだ…
854名無しさん@お腹いっぱい。:2001/07/11(水) 21:54 ID:tfiGyRpE
JScriptにしとけ。
855名無しさん@お腹いっぱい。:2001/07/11(水) 23:34 ID:???
(―_―)ソウダネ・・・
856名無しさん@お腹いっぱい。:2001/07/12(木) 10:08 ID:L16.sTWQ
WSHのperlscriptちょっと興味あるんだけど
リファレンスみたいのWeb上でない?
探したけど見つからなかった・・
857名無しさん@お腹いっぱい。:2001/07/12(木) 11:14 ID:Dza9cSXY
わしも知りたい。
現状だとMicrosoftのWSHドキュメントから類推するしかないから。
858名無しさん@お腹いっぱい。:2001/07/12(木) 11:55 ID:Dza9cSXY
WSH with PerlScriptだと、日本語が入っていると、
それがコメントとかでも、エラーを誘発することがあるよ。
859名無しさん@お腹いっぱい。:2001/07/13(金) 14:45 ID:7/Tjfp6w
860_gunzip:2001/07/13(金) 16:34 ID:???
PerlScriptとHTAを組み合わせれば、お手軽なGUIとして結構色々出来そうだな........。

-----------
Perlクイックリファレンス(オライリー)の最後辺りに
ほんの少しだけ顔を出していた記憶があるよ。 >PerlScript

Perl & WSH については↓に幾つか例があるぐらいで、確かに資料が少ないね.....。
http://pages.infinit.net/che/perlwsh/perlwsh0.html
http://cwashington.netreach.net/
861名無しさん@お腹いっぱい。:2001/07/13(金) 17:24 ID:7/Tjfp6w
色々な方法があるんですね。
WSHからだと、IEを作成して外からdocument.body.innerHTMLを書き換える
方法があるんだけど、HTAだと直に自分自身をいじれるから面白そうですね。
Drag&Dropはできないみたいですね。
862_gunzip:2001/07/13(金) 18:30 ID:???
>860で書いたPerlクイックリファレンスのは↓でも読めます。(本家は消えていたのでGoogleキャッシュ)
http://www.google.com/search?q=cache:Cxe9arpl5Eg:www.psu.unibel.by/biblio/books/perlnut/ch20_01.htm&hl=ja&lr=lang_en|lang_ja

今思い出したけれど、↓でもPerlScriptを扱っていたよ。(日本語)
http://village.infoweb.ne.jp/~kusaji/contents/perlscript/old/overview.htm

>>861
PerlScript+HTA なら
$window->{ 'element_id' }->{ innerHTML } = "<p>hogehoge</p>";
で動的に書き換えられるよね。他にも大量のプロパティがあるので当分飽きないと思う。
D&D は出来ないのかな...? (ondrop, ondragstart, ondragend とかはあるけれど)

-------------
PerlScript普及のためには、やっぱり分かりやすい(包括的な)リファレンスが必要だな.....。
(・・・と思って以前書いていたのだが、途中で放り出した。(使っている人少なそうだし)
暇があったらなぁ。)
863名無しさん@お腹いっぱい。:2001/07/13(金) 18:32 ID:???
HTAってなんすか?>>_gunzipさん
864863:2001/07/13(金) 18:38 ID:???
っと、HTML Application ですね。失礼
865http://N72ch-01p110.ppp11.odn.ad.jp:2001/07/13(金) 20:57 ID:V4/V4Mao
while (<>) { }

を使わないで同じ処理をできる方法教えてください・・・・
866名無しさん@お腹いっぱい。:2001/07/13(金) 22:30 ID:???
for(;<>;){}
867名無しさん@お腹いっぱい。:2001/07/14(土) 07:29 ID:???
>>865 perl -n SCRIPT INFILE
コマンドラインのみ。
868通りすがり:2001/07/14(土) 09:36 ID:???
各プロバイダのサーバに、perl のどのバージョンが入っているかを
一覧したようなものはどこかにありませんか?
869名無しさん@お腹いっぱい。:2001/07/14(土) 10:19 ID:???
ところで、何で perl スクリプトの拡張子が cgi なんでしょ。
870名無しさん@お腹いっぱい。:2001/07/14(土) 10:26 ID:???
>>869
perlでやる物って言ったらcgiスクリプトくらいしかないからじゃないの?
ネット上でやるものは・・・・
後知らん。
871名無しさん@お腹いっぱい。:2001/07/14(土) 10:35 ID:???
つかperlの拡張子ってplじゃなかったっけ。
872名無しさん@お腹いっぱい。:2001/07/14(土) 10:53 ID:???
拡張子は、人間がわかりやすいようにつけるものなので(少なくともUNIXでは)、
あまりどれにするかどうかは意味がないものと思われ。

拡張子が.cgiでも.plでも.hogeでも、あるいはなくても、最初の1行目の
特殊コメント

#!/usr/bin/perl

がファイル識別の印なのですから。

もっとも、.htaccessのようにファイルの識別に拡張子を使っている例はある
のが難しいところ。

magicというのもあったなぁ。
873名無しさん@お腹いっぱい。:2001/07/14(土) 11:23 ID:???
>>869
Perlスクリプトの拡張子が.cgiなんじゃなくて、CGIの拡張子が.cgi。
.cgi というファイルにアクセスがあったら、WWWサーバがCGIとみなして
それを「実行」させる。

その後は872の言う通り、最初の行が #!/usr/bin/perl なら Perl によって実行されるし、
#!/bin/sh でシェルスクリプトなのかもしれないし、
#!/usr/bin/ruby で Ruby が使われるかもしれないし
あるいはスクリプトじゃなくてCでコンパイルされたバイナリでも、C++でも、
実行可能なファイルで、結果として適切なContent-Typeを返せば何でも良い。
874名無しさん@お腹いっぱい。:2001/07/15(日) 11:20 ID:???
あー、なるほど。
確かに拡張子なんて余り意味無いですからね…いや無いって言ったらアレなんですが。

何はともあれサンクスです。
875名無しさん@頭いっぱい。 :2001/07/18(水) 16:10 ID:p4.NpWMw
AccessのデータをWebで扱えるようにしたいので
VBScriptでAspファイルを書いています。
ここでVBScriptとHTMLを分割して、VBを独立させてしまいたいのですが
まずどうすればよろしいでしょうか?
876名無しさん@お腹いっぱい。:2001/07/18(水) 19:06 ID:???

何故「Perl」スレに書くのか不思議だ…。
877名無しさん@お腹いっぱい:2001/07/18(水) 19:13 ID:gsEdjJ4E
今から保存するファイル名と同じファイルがなかったら指定ディレクトリにそのファイル名で保存して、
あったら保存を止めて、そのファイルを表示するというのをしたいのですがどうしたら言いのでしょうか。
878名無しさん@お腹いっぱい:2001/07/18(水) 19:23 ID:f5fW.spo
>>877
ちょっと修正しますです。

今から保存するファイル名と同じファイルがなかったら指定ディレクトリにそのファイル名で保存して、 表示。
あったら保存を止めて、そのファイルを表示するというのをしたいのですがどうしたら言いのでしょうか。
879名無しさん@お腹いっぱい。:2001/07/18(水) 19:36 ID:???
-f "filename"
880sage:2001/07/18(水) 20:52 ID:???
-e "filename"
881878:2001/07/18(水) 23:58 ID:???
CGI質問スレに書いたほうがよかったですかね?
882名無しさん@お腹いっぱい。:2001/07/19(木) 00:08 ID:???
883名無しさん@お腹いっぱい:2001/07/19(木) 04:28 ID:DofrXLhM
リファレンスとデリファレンスについて勉強しているのですが、参考になるスク
リプトを元に勉強しているわけではなく、参考書を読みながらどういう機能なの
か探っているだけなのでいまいち理解できないでいます。

これはどういう時に使えば良いものなのか、どういう時に使うものなのか教えて
ください。
884名無しさん@お腹いっぱい。:2001/07/19(木) 04:44 ID:???
10の倍数ってどう表すの?
885名無しさん@お腹いっぱい。:2001/07/19(木) 08:20 ID:???
10n
886名無しさん@お腹いっぱい。:2001/07/19(木) 13:58 ID:???
% 10 == 0
887名無しさん@お腹いっぱい。:2001/07/19(木) 16:39 ID:???
>>885
違うぞ。
888名無しさん@お腹いっぱい。:2001/07/19(木) 17:49 ID:???
10n
n=整数

小学生でもわかるやん
889名無しさん@お腹いっぱい。:2001/07/19(木) 19:01 ID:pJLvWZos
∈10Z
890名無しさん@お腹いっぱい。:2001/07/19(木) 19:06 ID:???
>>883
俺はプログラミングPerlを読みつつ色々スクリプトを書いて理解した。
使い方は覚えれば自然と使うようになると思うぞ。
891名無しさん@お腹いっぱい。:2001/07/19(木) 22:32 ID:QQ.KsOwc
>>888
バーカ
892名無しさん@お腹いっぱい。:2001/07/20(金) 00:47 ID:???
>>883
使うべき時が来れば、って答えになってないか。
でも自分はそんな感じだったんだよね。
ちなみに自分は実際に使うまで理解できませんでした。
893名無しさん@お腹いっぱい。:2001/07/20(金) 01:26 ID:???
■PC-Success 個人情報流出に対するホームページ
http://whythishappened.tripod.co.jp


流出ログ一覧直リン!
http://members.nbci.com/zmkanamoe/success/PC-Success.cab 3.08MB 約170ファイル
http://members.nbci.com/zmkanamoe/success/eleven-jp.zip 110KB イレブン
http://members.nbci.com/zmkanamoe/success/coconuts.zip 24KB ココナツ
http://members.nbci.com/zmkanamoe/success/SONY.zip 1.55MB ソニー

イレブンはアダルトグッズ購入者
894名無しさん@お腹いっぱい。:2001/07/20(金) 01:39 ID:???
掲示板のセキュリティーで気をつけないといけないこと
ってなに?
なんかこの前IP表示するとこでIPにタグ使われて
荒らされてたんだけど これは凡ミスなんかな
895名無しさん@お腹いっぱい。:2001/07/20(金) 01:55 ID:???
>>894
open MAIL "| sendmail -f $maddr";
とかかな。sendmailのオプションは忘れたんで違うかも。
896名無しさん@お腹いっぱい。:2001/07/20(金) 01:57 ID:???
>>894
何故-Tしない
897わ、:2001/07/20(金) 03:36 ID:O.8zSDuM
age
898名無しさん@お腹いっぱい。:2001/07/20(金) 07:49 ID:???
>>896
タグと-Tは無関係では…?
899名無しさん@お腹いっぱい。:2001/07/20(金) 07:58 ID:???
>>898
その前に、俺には894の言ってる意味がわからん。
IPにタグって何よ?
900名無しさん@お腹いっぱい。:2001/07/20(金) 10:58 ID:???
>>899
サクセスの掲示板荒らしのときも使われてた。
IP取得に$ENV{X_FORWORD_FOR}(だっけ?)かなんかを見てる掲示板の場合、
ローカルプロクシとかでそこになんか突っ込んどく。
それを表示するから、掲示板閲覧者からするとIPにタグが入ってるように見える。

・・・・って感じだったはず。そっち方面には詳しくないんで適当。
訂正は歓迎するけど煽らないでね。
901名無しさん@お腹いっぱい。:2001/07/20(金) 12:43 ID:???
>>898
$ENV{X_FORWORD_FOR}をそのまま使ってると汚染された文字列という
ことで警告が出るという意味では。
902898:2001/07/20(金) 16:25 ID:???
>>899
丁寧な説明感謝。
素で意味がわからなかったもので。

それを踏まえた上で。
基本的に、私は外部からの入力は全部チェックしてます。
$ENV{HTTP_X_FORWARDED_FOR}であれば、

$ENV{HTTP_X_FORWARDED_FOR} =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)\D*/
and
print "$1.$2.$3.$4";
くらいですかね。
903名無しさん@お腹いっぱい。:2001/07/20(金) 16:44 ID:???
いっそ表示しなければ良いのでは。。。。

もしものときにログにさえ残しておけばいいんだし。
904名無しさん@お腹いっぱい。:2001/07/20(金) 22:40 ID:???
>>903
同意
この話題とは直接関系無いが、IPなんて表示させても何の意味も無いと思うのだが…
905名無しさん@お腹いっぱい。:2001/07/20(金) 23:56 ID:???
>>903
同意。IPは表示させないでログるだけでIDを表示すると良いと思われ。
906名無しさん@お腹いっぱい。:2001/07/21(土) 02:52 ID:???
「ここはIP取ってるんだぞ」って感じの脅しにもならない脅しに使う。
これで嫌がって荒らさないでくれるといいなぁくらいじゃない?
907名無し募集中。。。:2001/07/21(土) 04:33 ID:???
-f "filename"
-e "filename"
ってどういう違いがあるんですか?
908名無しさん@お腹いっぱい。:2001/07/21(土) 05:02 ID:dTwqWpWY
以下のスクリプトを実行すると、次のようなエラーが出ます。

Use of uninitialized value at ./perl001.pl line 36, <STDIN> chunk 1.

スクリプトは機能するのですが、この表示が気になるので、どこか悪いところが
あるのかご指摘ください。


#!/usr/bin/perl -w

%list = ( "kamata" => "Ohta",
"yoyogi" => "Shibuya",
"sugamo" => "Toshima");

print "名前を入力してください: ";
$name = <STDIN>;
chomp($name);
$orig_name = "$name";
$name =~ s/\W.*//;
$name =~ tr/[A-Z]/[a-z]/;

if ( $name =~ /^mona/i ) {

print "OK\n";

} else {

print "Input your password: ";

$secretword = $list{$name};

if ( $secretword eq "" ) {

$secretword = "guest";

}

$word = <STDIN>;
chomp($word);

while ( $word ne "$secretword" ) {

print "It's wrong. Input again: ";

$word = <STDIN>;
chomp($word);

}

}
909名無しさん@お腹いっぱい。:2001/07/21(土) 06:07 ID:???
>>907
-e ファイルかディレクトリが存在
-f ファイルが存在
「ファイル演算子」で検索かければ他にも(もっと詳しい)説明があるはず
910名無しさん@お腹いっぱい。:2001/07/21(土) 08:08 ID:04l8oGkY
本当に下らない事訊いて申し訳ないんですが、

@dayname = ('月','火','水','木','金','土','日');

この1行を入れるとエラーになってしまいます。
何がいけないんでしょうか?
ネタじゃないです。マジなんです。素で。。

環境はWin + ANHTTPD + ActivePerlです。
ホントすいません。
911名無しさん@お腹いっぱい。:2001/07/21(土) 09:01 ID:???
>>910

(,');のどれかが全角になっているのに100カノッサ
912名無しさん@お腹いっぱい。:2001/07/21(土) 11:13 ID:???
俺は1000カノッサ
913名無しさん@お腹いっぱい。:2001/07/21(土) 12:11 ID:???
セミコロンが全角に全部
914910:2001/07/21(土) 15:49 ID:P71/r1DM
>>911-913
んなこたぁない

っていうかそういう記述ミス以外になんか理由ないですかね。
何回も手動で書き直したり、他のファイルで試したりもしたんです。
ダブルクオートにしたりしてもだめでした。

もし何かこの書き方以外でミスしにくい書き方があるならどうか教えてください。

つまらない質問なのは申し訳ないです。
915名無しさん@お腹いっぱい。:2001/07/21(土) 16:02 ID:???
その行を削除した場合エラーは?

$dayname = ('日','月','火','水','木','金','土') [$wday];
これは?
916910:2001/07/21(土) 16:04 ID:P71/r1DM
>>915
回答ありがとうございます。

この行を削除した場合何もエラーは起きず、問題なく作動します。
っていうかスクリプト自体はもうほぼ完成してるんですが、
なぜかこれだけが引っかかって困っております。

ホントいまさらな感じなんですが…

教えていただいたやり方を試してみます。

ありがとうございました。
917910:2001/07/21(土) 16:05 ID:P71/r1DM
っと思ったんですけど
あくまで配列に入れたいんですよね。
このやり方だと配列には入りませんよね?

とりあえずやってみます。
918名無しさん@お腹いっぱい。:2001/07/21(土) 16:08 ID:???
>>914
> @dayname = ('月','火','水','木','金','土','日');
の最後のセミコロンが全角になってるから
> んなこたぁない
が全然信用できないんだけど。

ま、それはともかく、とりあえず use strict; と -w かな。
@dayname = qw(mon tue wed thu fri sat sun);
にしてみるとか。
あと、どんなエラーメッセージが出るのか教えてくれないと、見当違いな指摘しか出せないかも。
919名無しさん@お腹いっぱい。:2001/07/21(土) 16:13 ID:???
ぐうううああああああああああぁああああぁあぁ!!!!!!!






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

>>918
ありがとうございます。

自分は生きる価値もない男だと悟ったので逝ってきます。







ああ、いまさら。。。。。。
920名無しさん@お腹いっぱい。:2001/07/21(土) 16:18 ID:???
>>919
ま…初心者には極めて良くあることだし。
とりあえず先輩が「怪しい」と言った事は*徹底的に*確認してみようね♥
921910:2001/07/21(土) 16:21 ID:???
はい。すいませんでした。反省しました。
もう生意気な口利きません。

精進します。
922 :2001/07/21(土) 21:15 ID:kAjGF5YA
そぼくな疑問なんですが、無料サーバーに置くスクリプト
って、どのくらいのサイズまでOKなんでしょうか?
2000とか3000行のファイルを置いても動作するのでしょうか?
923名無しさん@お腹いっぱい。:2001/07/21(土) 21:31 ID:???
数千行でも軽ければかまわんだろうし、
数行でも負荷が高ければ禁止だろうよ。
924名無しさん@お腹いっぱい。:2001/07/21(土) 21:32 ID:???
>>922
そんなもんここで聞いてどうする。その鯖屋に聞けや
925名無しさん@お腹いっぱい。:2001/07/22(日) 09:18 ID:???
PerlでもWindowsプログラミングは出来ますか?
926名無しさん@お腹いっぱい。:2001/07/22(日) 09:36 ID:???
927名無しさん@お腹いっぱい。:2001/07/22(日) 23:07 ID:???
そろそろ新スレ。
928名無しさん@お腹いっぱい。:2001/07/23(月) 02:19 ID:???
950まではいいんじゃない?
929 :2001/07/23(月) 10:23 ID:???
>>910-922

ヒサシブリニワラタヨ
930名無しさん@お腹いっぱい。:2001/07/23(月) 15:58 ID:ONcVkwDw
単にnantoka.pdfを、<a href="nantoka.pdf">nantoka.pdf</a>としてリンクさせると、
たいてい、ブラウザ自身が(プラグインで)そのまま表示されますが、
fuu.cgi?nantoka.pdfという形式のリンクにして、cgiで何か工夫すれば、
pdfをダウンロードできたとおもいます。
その、「cgiで何か工夫」のやり方を、とんと忘れてしまいました。
教えていただけませんでしょうか?
931名無しさん@お腹いっぱい。:2001/07/23(月) 16:58 ID:???
Content-typeを変える。
拡張子を変える。

ネスケとIEじゃ動作が違うよ。
932931:2001/07/23(月) 17:03 ID:???
Perlの話題じゃないな。こちら↓でどうぞ。
http://corn.2ch.net/test/read.cgi?bbs=php&key=988727833&ls=50
933名無しさん@お腹いっぱい。:2001/07/23(月) 17:05 ID:e2J6vTUk
すみません、くだらない質問なのですがよろしくお願いします。
Netfirmの相対パスの書き方がわかりません…。
最初からwwwというディレクトリとcgi-binというディレクトリに分かれてますが、
cgi-binからwwwディレクトリの呼び出しがうまくいかないんです。
下図なのですが、
A.cgiから見て0〜9.gifへのパスを、
B.cgiから見てhoge.gifへのパスを、
C.cgiから見てindex.htmlへのパスをそれぞれ教えてください。

|----/www/
|   |
|   +--index.html
|   |
|   +--/image/
|       |
|       +--/gif/
|       |   |
|       |   +--0〜9.gif
|       +--hoge.gif
|
|----/cgi-bin/
    |
    +--/hoge/
    |   |
    |   +--A.cgi
    |   +--A.log
    |
    +--/hoge2/
    |   |
    |   +--B.cgi
    |   +--B.log
    | 
    +--C.cgi
    +--C.log
934名無しさん@お腹いっぱい。:2001/07/23(月) 17:16 ID:???
>>933
複雑だと思うなら絶対パスで指定しろ
935933:2001/07/23(月) 18:05 ID:???
>>934
そこをなんとかお願いします…
プログラム板の方には鼻くそものでしょうがどうか。
936名無しさん@お腹いっぱい。:2001/07/23(月) 18:07 ID:???
>933

Perlの話題では無いと思われ。
結局htmlファイルとして見せるのだからcgi-binの仮想パスを
http://※/cgi-bin/とすると、相対パスは、
「../image/gif/0.gif」のようになる。

それともbinモードでgifを直接出力しているんなら
話はちがうけどね(w
937名無しさん@お腹いっぱい。:2001/07/23(月) 18:25 ID:???
>>936
はい、すみません。perlに行き着く前の話です。
でもここでしか聞けないのです、すみません。
A.cgiはカウンタなのですが、どうしても画像が表示されないんです。

DDDでNetfirmのカウンタの設置がなんたらとありましたが、
うまくいった方はいるのでしょうか。
938名無しさん@お腹いっぱい。:2001/07/23(月) 18:39 ID:???
何だ?
絶対パスを書けない訳でもあるのか?

A.cgi->0-9.gif
相対パス
./../../www/image/gif/0-9.gif
絶対パス
/home/foo/www/image/gif/0-9.gif

あとは自分で考えろ
939名無しさん@お腹いっぱい。:2001/07/24(火) 00:07 ID:3WzxCf.o
use strictしますと
「Global symbol "$no" requires explicit package name at hoge.cgi line 5.」
というのがいっぱい出て、
Execution of nikki.cgi aborted due to compilation errors.
になります。
execution...はわかるのですが、Global symbol...というのはなんなのでしょうか?
940名無しさん@お腹いっぱい。:2001/07/24(火) 00:40 ID:???
>>939
グローバル変数
941名無しさん@お腹いっぱい。:2001/07/24(火) 14:09 ID:???
>>939
補足:変数をmy宣言すればエラーはなくなります。
942名無しさん@お腹いっぱい。:2001/07/24(火) 21:15 ID:???
すいません、教えて下さい。

@a=(
  ['山田太郎','男','19780101'],
  ['田中花子','女','19901122'],
  ['鈴木一郎','男','19850613'],
);

配列 @a に名前、性別、生年月日が入っている場合、
若い順に'田中花子'、'鈴木一郎'、'山田太郎'となるように
並べ替えるには、どうすればよいのでしょうか?
配列の配列をどうやってsortすればいいか判りません。
943名無しさん@お腹いっぱい。:2001/07/24(火) 21:19 ID:???
@b = sort{ $a->[2] <=> $b->[2] } @a;
944942:2001/07/24(火) 23:33 ID:???
>>943
できました。ありがとうございます。
945名無しさん@お腹いっぱい。:2001/07/25(水) 06:01 ID:Sh3McWYI
hoge と foo ってどんな意味なんすかね?
946名無しさん@お腹いっぱい。:2001/07/25(水) 06:08 ID:???
foo {間投} くそっ!、ふん!{名} 狛犬{こまいぬ}、唐獅子{からしし}

hoge は ほげ です。
947946:2001/07/25(水) 06:10 ID:???
ほかに、
bah 【発音】bα':、【レベル】7{間投} ばかばかしい!、ばかな!、フフン!、ヘン!、ベーだ
とか
blah 【発音】blα':、【レベル】6{形} 退屈な、つまらない、毒にも薬にもならない{名} ばかげたこと、ナンセンス
とか
fugaとかahoとかunkoとかも使います。
948 :2001/07/25(水) 09:08 ID:???
@pair{0} と言う配列の3番目の要素を取り出したいんですが
@pair{0}[3] とかするとエラーになってしまうんです。
むずかしいぃ・・・
949名無しさん@お腹いっぱい。:2001/07/25(水) 09:27 ID:???
>>948
すさまじいネタだな。
でも考えすぎ。
もっと単純っぽいのにすればいいのに。
950名無しさん@お腹いっぱい。:2001/07/25(水) 09:37 ID:???
>>948
そいつはちょいと複雑だな
%pair = (0 => [0, 1, 2, 3]);
$value = (@pair{(0)})[0]->[3];
print "$value\n";

尤も俺ならもっと単純な方法を取るがね。
$value = $pair{0}[3];
print "$value\n";
951名無しさん@お腹いっぱい。:2001/07/25(水) 09:44 ID:???
いや、これでもいいんだな。
$value = @pair{(0)}->[3];
952948:2001/07/25(水) 10:11 ID:???
皆さん即答有難うございます、ネタですかぁ、、、シオシオ(;´Д`)
実は突然慣れない事をまかされてしまって、必死こいてる次第です。
本を買ってきて勉強しますです。。。WEBと漏れの頭じゃ効率悪すぎ

やりたいのはたったこれだけの事なのですが
リスト1(要素数は不定)
"mother","40yo","aidaho"
"father","45yo","newyork"
"dog","1yo","hawaii"
(以下こんな感じで200行程続く)
リスト2
"aidaho","40yo","mother"
"newyork","45yo","father"
"hawaii","1yo","dog"

用は並べ替えたいだけなのです、 はは・・・・
本屋さんに逝って、本買って何故ネタなのか頑張って考えます、
回答有難う御座いました。
953948:2001/07/25(水) 10:15 ID:???
それで、フォームから受け取ったデータを改行で割って配列に入れて
その要素の一つづつをもう一回配列に入れようと思ったのです。
って何言ってるか解らなくなって来た  頭いたい・・・
954名無しさん@お腹いっぱい。:2001/07/25(水) 13:01 ID:???
>>950

あなたには、新スレ作成の権利と義務が与えられました。速やかに
このスレのPart.6を作成して下さい(藁
955949:2001/07/25(水) 15:57 ID:???
>>948
ネタじゃなかったのか、スマソ。
んじゃマジレスしておく。参考になればどうぞ。
my @a = qw(mother 40 aidaho);
my @b = qw(father 45 newyork);
my @c = qw(dog 1 hawai);
my %pair = (0 => [\@a, \@b, \@c]);

print @{$pair{0}->[0]}->[0]; # mother
print @{$pair{0}->[0]}->[1]; # 40
print @{$pair{0}->[0]}->[2]; # aidaho
print @{$pair{0}->[1]}->[0]; # father
print @{$pair{0}->[1]}->[1]; # 45
print @{$pair{0}->[1]}->[2]; # newyork
print @{$pair{0}->[2]}->[0]; # dog
print @{$pair{0}->[2]}->[1]; # 1
print @{$pair{0}->[2]}->[2]; # hawai

>>950
よろしく(藁
956名無しさん@お腹いっぱい。:2001/07/25(水) 16:41 ID:LDIFpqRg
[(種類)(tab)(名前)]というフォーマットのデータを
種類と名前で分けて、それぞれ変数に入れたいのですが
うまくいきません。

neko giko
・・・というデータを使ってやってみました。

$data = "neko giko";
$data = s/(\S+) (\S+)/$syurui,$namae/;
print "$syurui\n";
print "$namae\n";
exit;

結果は何も表示されません。どなたかおしえてください。
957956:2001/07/25(水) 16:44 ID:LDIFpqRg
956です。
[(種類)(tab)(名前)]というフォーマットのデータを・・・
↑の部分わかり難いですが[(種類)(TAB)(名前)]という表示です。
958名無しさん@お腹いっぱい。:2001/07/25(水) 16:52 ID:???
>>956
$data = "neko giko";
($syurui, $namae) = split /\t/, $data;
959956:2001/07/25(水) 21:55 ID:KeUxvh6I
>>957さん、ありがとうございました。
\tを\sにしたら、うまく動きました。
960名無しさん@お腹いっぱい。:2001/07/25(水) 23:37 ID:???
自分にお礼か。
961名無しさん@お腹いっぱい。:2001/07/25(水) 23:39 ID:???
新スレ係は誰かな〜
962名無しさん@お腹いっぱい。:2001/07/25(水) 23:47 ID:???
>>961
シンスレ係に任命
963956:2001/07/25(水) 23:53 ID:???
しまった・・・。申しわけないっす。
>>958さん、ありがとうございました。
964名無しさん@お腹いっぱい。:2001/07/26(木) 00:11 ID:HJVdQqzU
>>946-947
なるほど。これでスッキリしました。
サンクス
965undefさん:2001/07/26(木) 00:41 ID:???
966950:2001/08/06(月) 02:11 ID:???
む、折角新スレ係に任命されたのにあのあと暫く繋がなかったからな…。
惜しいことをしてしまったかな(藁
967名無しさん@お腹いっぱい。:2001/08/17(金) 22:15 ID:???
アターマいいね
968名無しさん@お腹いっぱい。:01/09/16 23:55 ID:???
$msg(全角半角が入り混じった文字)
をsubstrなどで途中で区切って
...を最後につけるにはどうすればいい?
ふつうに
$msg2 = substr($msg,0,20);
などとすれば
全角を途中できることになる場合があるので
むりなので。。。
969名無しさん@お腹いっぱい。:01/09/17 00:13 ID:???
このスレは終了しています。
新スレは
http://corn.2ch.net/test/read.cgi?bbs=php&key=996075607&ls=50

−−−−−−−−−−−−−−終了−−−−−−−−−−−−−−
970名無しさん@お腹いっぱい。:01/09/17 00:15 ID:???
971名無しさん@お腹いっぱい。:01/09/17 00:25 ID:???
一瞬いぢわるだなぁと笑ってしまった
6ならまだしも何で一ヶ月も前のスレに・・  w
>>968
大崎さんの所は参考になるぞ
http://www.din.or.jp/~ohzaki/perl.htm
ここはおしまいなんです、続きは新スレでね
972名無しさん@お腹いっぱい。:01/09/17 01:33 ID:???
念のため
−−−−−−−−−−−−−−終了−−−−−−−−−−−−−−
973名無しさん@お腹いっぱい。:01/09/17 18:26 ID:???
>>968
sub cut_string {

$_ = shift;
my($num) = shift;
my($opt) = shift;

m/(^(?:[\x00-\x7f]|[\xa1-\xfe][\xa1-\xfe]|\x8e[\xa1-\xfe]|\x8f[\xa1-\xfe][\xa1-\xfe]){$num})/
? $1 . ($opt ? '...' : '')
: $_;

}

ただし、EUCに限る。
974名無しさん@お腹いっぱい。:01/09/17 21:56 ID:???
 
975名無しさん@お腹いっぱい。:01/09/17 22:30 ID:???
ああ
976.:01/09/17 22:47 ID:???
.
977..:01/09/17 22:48 ID:???
..
978...:01/09/17 22:50 ID:???
...
979....:01/09/17 22:51 ID:???
....
980.....:01/09/17 22:52 ID:???
.....
981......:01/09/17 22:53 ID:???
......
982.......:01/09/17 22:54 ID:???
.......
983........:01/09/17 22:55 ID:???
........
984.........:01/09/17 22:56 ID:???
.........
985名無しさん@お腹いっぱい。:01/09/18 00:46 ID:???
なんだ?密かに1000を狙おうってのか?
986千 ◆yH3hWzUo :01/09/18 18:37 ID:???
 
987千 ◆yH3hWzUo :01/09/18 18:38 ID:???
  
988千 ◆yH3hWzUo :01/09/18 18:38 ID:???
   
989千 ◆yH3hWzUo :01/09/18 18:38 ID:???
    
990千 ◆yH3hWzUo :01/09/18 18:38 ID:???
     
991千 ◆yH3hWzUo :01/09/18 18:38 ID:???
      
992千 ◆yH3hWzUo :01/09/18 18:38 ID:???
       
993千 ◆yH3hWzUo :01/09/18 18:39 ID:???
        
994千 ◆yH3hWzUo :01/09/18 18:39 ID:???
         
995 :01/09/18 19:38 ID:???
5
996 :01/09/18 19:39 ID:???
4 
997 :01/09/18 19:39 ID:???
3  
998 :01/09/18 19:39 ID:???
2   
999 :01/09/18 19:39 ID:???
1    
1000 :01/09/18 19:40 ID:tsbbU4Ew
1000!       
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。