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

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

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

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

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

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

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

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

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

[OS]
 ・Linux日本語マニュアル:http://www.linux.or.jp/JM/
 ・FreeBSD日本語マニュアル:http://www.jp.freebsd.org/man-jp/
7nobodyさん:03/06/28 01:32 ID:???
CGIについての質問もじゃんじゃん待ってます。
8nobodyさん:03/06/28 01:32 ID:???
#!/perl/bin/perl
open( DATA, "ls -1 . | " );
@aList = <DATA>;
close( DATA );
@aArg = split( /=/, <STDIN> );
print "Content-type: text/html\n\n";
print << "END_OF_HTML";
<HTML>
<BODY>
<FORM action="test.pl" name=testform method="POST">
END_OF_HTML
print "<SELECT name=file onChange=submit();>";
foreach $file (@aList) {
print "<OPTION value=".$file.">".$file;
}
print "</SELECT>";
print "<BR>";
print "プルダウン名称:".$aArg[0]."<BR>";
print "プルダウンの値:".$aArg[1]."<BR>";
print << "END_OF_HTML";
</FORM>
</BODY>
</HTML>
END_OF_HTML

これを実行するとファイル一覧のプルダウンが作成されて、選択すると内容が表示されます。
ただ、日本語ファイル名が含まれていると文字化けします。
どうすればよいか分かる方、おられましたらご教示願います。

環境はWinXP Apache1.3 ActivePerl5.8です。
98:03/06/28 01:41 ID:???
自己レスすいません。
packすればよかったんですね。。。

ゴミレスすいませんでした。
10nobodyさん:03/06/28 01:41 ID:???
文字化けする文字だからじゃない?
5cで終わってるヤツ
11nobodyさん:03/06/28 01:42 ID:???
あら、解決してた
128:03/06/28 01:43 ID:???
ごめんなさい_(._.)_

URLエンコード?されてたから、それを戻さないと使えなかったようです。

本当に、申し訳ないです。
13nobodyさん:03/06/28 08:31 ID:???
せっかくだから use CGI; しようよ。
パラメータのデコードや出力のエンコードを面倒見てくれるし、
HTMLの文法間違いや入れ子のミスも防げるから楽だよ。
14 ◆hMJAPH9PWA :03/06/28 09:11 ID:???
テンプレにperldoc.jpも入れたほうが良いんじゃないかな。
http://perldocjp.sourceforge.jp/
15nobodyさん:03/06/28 10:54 ID:???
>>13
CGI.pmって読み込むだけで0.2秒くらいかからない?
16nobodyさん:03/06/28 11:03 ID:???
>>15

かえれ
17nobodyさん:03/06/28 11:29 ID:???
>>16
なぜに? 何か勘違いしてましたか?
18nobodyさん:03/06/28 11:36 ID:SawIuqpj
>>16-17
うちの環境だと確かに読込に0.2秒ほどかかるな。
7年落ちのHDDとCPUが133MHzだけど。
19nobodyさん:03/06/28 11:48 ID:???
>>18
1000MHzで時間かかるんですが。てか、とにかく重いんですが。
全部読んでるから?
20nobodyさん:03/06/28 12:41 ID:???
あれはかなり重い。
俺の環境だと200KBくらいあるな。コメントが多いといっても、これはなかなかのものだ。
21nobodyさん:03/06/28 12:54 ID:???
メモリもくう
22nobodyさん:03/06/28 13:16 ID:SawIuqpj
使ったことないし、使う必要性を感じたこともないのだが>CGI.pm
何が便利なん?
23nobodyさん:03/06/28 13:17 ID:???
>>22
速攻同意。
24あぼーん:あぼーん
あぼーん
25nobodyさん:03/06/28 14:16 ID:???
>>22


Perl使いにとっては重要な要素だと思うが。
26nobodyさん:03/06/28 14:18 ID:???
>>25
22じゃないけど、楽か?


お前は使いこなせてない、とか言うなよ
27nobodyさん:03/06/28 14:19 ID:???
>>26
お前は使いこなせてない
28nobodyさん:03/06/28 14:20 ID:???
>>27
そうくると思った。どういう点で楽?
29あぼーん:あぼーん
あぼーん
3027:03/06/28 14:34 ID:???
>>28
いや、俺25じゃないけど。でも答えてみる。

一応CGI.pmは使ってます。
でも特に楽というわけじゃなくて、俺が標準っぽいのが好きなだけです。
前は自作のライブラリ使ってたけど、大して変わらない。

特に不満は無いけど、強いて言えばパラメータを自動で保持してくれるのがちょっとうざかったり。
スクリプトの方で保持してもらいたくない奴を削除するのがマンドクセー。
31nobodyさん:03/06/28 14:36 ID:???
print('A');マンドクセ
32nobodyさん:03/06/28 14:46 ID:???
自分用の物は、CGI::Minimalしか使いません。
33nobodyさん:03/06/28 15:01 ID:???
うーん、CGIスクリプト書く時って、パラメタ切り分けるのに
自分用のコード(2,30行くらい)をrequireするくらいで、後は
CGI特有の処理でモジュール用意するほどのものって思いつかない。

ヘッダ出力のprint文とか、「こんたいぷれ」とか「こんたいえい」とかで漢字変換
するようになってるし。(text/plain text/html)
34nobodyさん:03/06/28 15:10 ID:???
>>33
わざわざそんなことせんでも
Content-type: text/html
って撃ったほうが早くないか?
35nobodyさん:03/06/28 15:16 ID:???
>>34
print "Content-Type: text/html; charset=EUC-JP\n\n";
print "Content-Type: text/html; charset=Shift_JIS\n\n";
まで出るようになってる。
「kontaiei」の方がはるかに早い。
36nobodyさん:03/06/28 15:18 ID:???
>>35
なるほど。
まぁ、僕は、自分用のゴチャゴチャしたモジュールんなかにcontentってサブルーチン作ってるからそれでいいんだけど。
いちいち日本語に切り替えるのが面倒そう?そうでもない?
37nobodyさん:03/06/28 15:19 ID:???
確かに早いと思うけど、違う環境になると
正確に入力できなそうで困らないかな。
38nobodyさん:03/06/28 15:20 ID:???
>>36
そうでもない。慣れかも。一時的な短いスクリプトをさっと書きたい時とか
いちいちモジュール呼ばないので。
まぁこの辺は好き好きだと思うけど。
39nobodyさん:03/06/28 16:40 ID:???
>>33
ワラタ
俺も使わせてもらうわ。
40nobodyさん:03/06/28 16:47 ID:???
>>39
あと、

my($sec, $min, $hou, $day, $mon, $yea, $wek) = localtime();

なんかも入れておくと便利。
41nobodyさん:03/06/28 16:53 ID:???
#!/usr/bin/perl = いつもの
42nobodyさん:03/06/28 17:07 ID:???
>>41
絶対普通に書いたほうが早い
43あぼーん:あぼーん
あぼーん
44nobodyさん:03/06/28 17:27 ID:???
>>41
そんなもんファイルを新規作成した時点で自動的に書かれる。
45nobodyさん:03/06/28 17:53 ID:???
CGI.pm をやたら use したがるヤシは基礎的なコーディングできないから楽したいだけでは?
46nobodyさん:03/06/28 18:00 ID:???
>>45
「基礎的なコーディングできない」と「楽したい」につながりがありませんよ。
できる人ほど楽をするための努力をするものです。
47nobodyさん:03/06/28 18:06 ID:???
>>40
my @dates = localtime();
にしる!
48あぼーん:あぼーん
あぼーん
4933:03/06/28 19:40 ID:???
>>41
俺もソレは登録してない。
>>44
さすが。
>>47
コードが読みにくいからやだ(好みの問題)。なんかよく間違うし。
5025:03/06/28 19:47 ID:???
HTMLべたがきすんのやだよー。
タグの閉じ忘れとかやだよー。
ファイルアップロード含む入力の取得でガチャガチャすんのやだよー。
要するに基本的な部分であれこれ悩むのやだよー。
アルゴリズムに労力割きたいよー。
開発時間短いよー。

……まあ、そんな感じでつ。
51nobodyさん:03/06/29 00:51 ID:x7Ccxqe1
perl でpop3のメールを受信するにはどのようなコードを
書けばいいのですか?

添付付きのメールの受信システムを作りたいのですが、ネットで探しても
なかなか情報が無かったためよろしくお願いします
52nobodyさん:03/06/29 00:57 ID:???
>>51
自分で調べれ。調べればある。
53nobodyさん:03/06/29 01:21 ID:WiALlB7N
>>51
1からちゃんとやりたいのであれば、
http://www.kt.rim.or.jp/~kbk/perl5.005/perlipc.html#Internet_TCP_Clients_and_Servers
これと、
http://www.ietf.org/rfc/rfc1939.txt
これ。あとは頑張れ。
54あぼーん:あぼーん
あぼーん
55nobodyさん:03/06/29 01:55 ID:15+Vm9kH
前スレでも質問しましたが、1000行ってしまったようなのでもう一度。

unicodeの文字列をURLエンコードするにはどうすればいいのでしょうか?
JavaScriptのescapeのように、あいうえお->%u3042%u3044%u3046%u3048%u304A
といった感じで変換したいのです。
$value =~ s/(\W)/'%' . unpack 'H2' , $1/eg;
とやっただけではムリでした。

どのようすればいいのでしょうか?
56nobodyさん:03/06/29 02:19 ID:???
>>55
$value =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg;
57nobodyさん:03/06/29 02:22 ID:???
>>55
Jcode.pmを使えば?
58nobodyさん:03/06/29 03:58 ID:???
>>55
$value =~ s/(\W)/'%' . unpack 'H2' , $1/eg; が
何をしているか理解できていれば分かりそうなもんだが。
正規表現と pack/unpack について、もうちっと勉強すれ。

$value =~ s/(..)/'%u' . unpack 'H4' , $1/eg;
59nobodyさん:03/06/29 08:56 ID:???
open(FILE, "hoge.txt");

while(<FILE>) {
(置換とか)
}

open(WRITE, ">test.txt");
print WRITE <FILE>;

とやったのですがtest.txtにhoge.txtを処理した内容が書き込まれません。
何処が間違っているのでしょうか…。

Win2K、Apache1.3.27、ActivePerl5.6を使用。

60nobodyさん:03/06/29 09:09 ID:???
use *****

で、***** が使えるかどうか評価する関数ってありますか?
61nobodyさん:03/06/29 09:18 ID:???
>>59
open(FILE, "hoge.txt");

while(<FILE>) {
(置換とか)
push @new, $_; # ここ追加
}

open(WRITE, ">test.txt");
print WRITE @new; # ここ変更

こうだろ?
62nobodyさん:03/06/29 09:21 ID:???
>>60
専用の関数はない。
@INCの中に、use(とrequire)がモジュールを探してくるディレクトリが入ってる。
それをreaddirとかで開いて使いたいモジュールがあるかどうかさがしなされ。
63nobodyさん:03/06/29 10:14 ID:???
>>59
hoge.txt 全てをオンメモリにしたくなければこう。

open IN, '<' . 'hoge.txt' or error();
open OUT, '>' . 'test.txt' or error();

while (<IN>) {
 ...
 print OUT $_;
}

>>60
use Foo @arg; は
BEGIN { require Foo; Foo->import(@arg) } と等価。

BEGIN {
 eval { require Foo } or error();
 Foo->import(@arg);
}
64nobodyさん:03/06/29 10:20 ID:???
>>62
むぅ…eval じゃ駄目っすかね?
65nobodyさん:03/06/29 10:27 ID:WiALlB7N
>>60について
>>62
そ、それは面倒くさすぎないか・・・?いつもそうやってんの?

eval("use MODULE");
error("Can't locale MODULE") if $@;

my $ins = new MODULE(xx,yy,zz);

これで済むじゃん。
66nobodyさん:03/06/29 10:27 ID:???
>>64
あ、ケコーン
67nobodyさん:03/06/29 10:32 ID:???
>61,63
ありがとうございます。
今回は61さんの方法でやって上手く行きました。
6860 = 62:03/06/29 11:58 ID:???
レスありがd
>>62 さんの方法は「実行しないで」確認する方法として関数化して使う事にしました
69nobodyさん:03/06/29 13:34 ID:???
そしたらさア
70nobodyさん:03/06/29 14:04 ID:???
>>69
ナンダッテ━━━━ヽ('A`)ノ ( ;゜Å゜)n‘∀‘)η´Д`)゚∀゚)=3━━━━
71nobodyさん:03/06/29 14:44 ID:???
厨な質問で申し訳ないですが、PerlはSMAPで言うと誰ですか?
72nobodyさん:03/06/29 14:45 ID:???
>>65
>>68の言うとおりです。
あらかじめこれで実行環境を確認してからスクリプト組むようにしてます。
73nobodyさん:03/06/29 21:22 ID:???
evalは少しだけ遅いような気がするから、::を/に直してrequireして戻り値を調べるっていうのはどう?
74nobodyさん:03/06/29 21:34 ID:15+Vm9kH
入力された日付をtime形式にして変換するようなライブラリかモジュールはありませんか?
&function($year,$mon,$day,$hour,$sec,$min);
とすると1056889951がリターンされてくるような。
75nobodyさん:03/06/29 21:36 ID:???
timelocal
76nobodyさん:03/06/29 21:36 ID:oIT5F8Qq
>>74
POSIX::mktime()
ちなみに標準ライブラリ
7755:03/06/29 21:37 ID:???
ごめんなさい。途中で送信してしまいました。
>>56-58のみなさん
 ありがとうございます。
 解決しました。

 UNICODEは%uに(4桁の16進数)が組み合わさるので、
 Hで16進数、4で4桁ということでいいんですよね…?
7855=74:03/06/29 21:39 ID:???
って書き込んでる間に返答着きてますね。ありがとうございます。
>>75-76のお二人
 ありがとうございました。
 標準ライブラリももっと勉強した方がよさそうです(汗)。
79nobodyさん:03/06/29 21:46 ID:???
>>74
Time::Localも
80あぼーん:あぼーん
あぼーん
81119:03/06/29 22:52 ID:tnHKF+kR
POSTされるデータは$HTTP_POST_VARSにあると思いますが、
これをそのままフォームのボタンを押すことで同一のページに返したいのですが、
いちいち<input type="hidden" name="test" value="test">などとしないといけない
のでしょうか。
82nobodyさん:03/06/30 00:13 ID:???
JavaScript使えばいいんでない
83nobodyさん:03/06/30 00:19 ID:???
誤爆のような気もする
84nobodyさん:03/06/30 01:01 ID:???
すんません、コーディングって何ですか?
ググっても分かんないッス・・
85nobodyさん:03/06/30 01:34 ID:???
表面塗装のこと
86nobodyさん:03/06/30 01:58 ID:???
「コーディング 用語」でぐぐれ
87nobodyさん:03/06/30 02:01 ID:???
そりゃ、コーテ…(ry

>>84

coding

 アルゴリズムや処理をコンピュータプログラムとして具現化すること。
または単にプログラムを作成すること。
88nobodyさん:03/06/30 02:32 ID:???
おっ、さっそく新スレタイの効果が出てきてるようだね
89nobodyさん:03/06/30 03:30 ID:???
コーディングという単語を世に広めるスレはここですか?
90nobodyさん:03/06/30 03:35 ID:???
その単語を知らない人が来る板じゃないですよ〜♥
91nobodyさん:03/06/30 03:48 ID:???
>>90
いや全くその通り。
ぐぐるとか、辞書引くとかできない人間未満がきちゃいかんよ。
92座敷荒氏:03/06/30 06:49 ID:???
前スレでも大変お世話になりました。
あのあと自分なりに勉強し、パラメータファイルを使用して
ファイル確認することができるように下のように書き換えました。
こちらはうまく動作しています。



#! /usr/bin/perl
while (<>){
($cmd_para) = split;
unless(-e $cmd_para){
exit(100);
}
}
exit(0);

そこで次にファイル削除を作成しようとおもい、
上記の箇所unlessをunlinkに書き換えたところ
シンタックスエラーが発生してしまいます。
どう修正すればいいのでしょうか。

よろしくお願い致します。
93nobodyさん:03/06/30 07:04 ID:???
>>92
なんか基本がなってないような……
unlessは制御構造。unlinkは関数。名前は似てても、使い方は全く違うものだよ。
前スレ読めないんで、どうやりたいのかもうちょっと具体的に説明して。

それから今回はいいけど、エラーはできるだけ原文をそのまま書いてね。
カタカナで書くと、読み方を間違えていたり、肝心なところ(大抵読み方が分からない単語)を省略してたりして
意味が正しく伝わらないことがあるから。
94nobodyさん:03/06/30 08:15 ID:???
returnやgotoなどは制御構文かと思いきや関数なのね。
95nobodyさん:03/06/30 08:45 ID:???
真か偽かを返すのが制御子、それ以外の価を返すのが関数と言っては
いけないの?
96座敷荒氏:03/06/30 10:20 ID:???
>>93
92に記載したのは確認したいファイルのフルパスを記載した
パラメータファイルを用意し、そのファイル名を指定して実行すると
ファイルがある場合には0を返して終了し、ない場合には100を返して終了する、
というプログラムです。

これと同じように、削除したいファイルのフルパスを記載した
パラメータファイルを用紙し、そのファイル名を指定して実行したときに
ファイルが削除できた場合には0を返して、ない場合には100を返して終了する、
というように動作するものを作りたいと思います。

92に記載したようにunlessをunlinkに書き換えただけで実行すると
syntax error at ./test line 4, near "){"
syntax error at ./test line 5, near "}}"
Execution of ./test aborted due to compilation errors.
と表示されてしまいます。

97nobodyさん:03/06/30 10:31 ID:???
unless( unlink($cmd_para) ){
98nobodyさん:03/06/30 10:45 ID:???
>>95
neが制御子でcmpは関数?
99543:03/06/30 15:38 ID:???
>>97
お教え頂いたように修正しましたが
bash: ./Perltest: bad interpreter: Permission denied
と表示されてしまい、うまく動作しません。
使用したPerlファイル・パラメータファイル・削除対象ファイルの
パーミッションは設定済みです。

100nobodyさん:03/06/30 16:03 ID:???
100get (・∀・)
101nobodyさん:03/06/30 16:05 ID:???
perlで外部ファイルのサイズを取得したいのですが、
Content-Lengthが付いて無いファイルのサイズを取得する手段は無いものでしょうか。
102nobodyさん:03/06/30 16:23 ID:???
>>101
Content-Lengthって何?Perlにそんなの無いよ。
103101:03/06/30 16:30 ID:???
>>102
すいません、ありがとうございました。
104nobodyさん:03/06/30 16:35 ID:???
どこで実装されてるかくらい意識して欲しいね。
おそらくHTTPヘッダのことを言ってるんだろうけど。
105nobodyさん:03/07/01 09:06 ID:???
どうしたんだ、発言止まっちゃってる。
106nobodyさん:03/07/01 12:57 ID:???
Perlやろうぜ!
107nobodyさん:03/07/01 13:18 ID:???
実現したいこと
ADSLモデムにアクセス(192.168.1.1)して
Pingを発行しネットワーク接続監視を行う
接続されているのならば接続中の文を表示し
切断されているのならば警告文とアラーム音を鳴らし
知らせる。
最終的には24時間連続稼動させたい。


ソース
use Net::Ping;
$host = "192.168.1.1";
if (pingecho($host, 10)) {
print "$host is alive.\n";
}else{
print "$host is dead.\a;\n";
}

エラー
The Unsupported function alarm function is unimplemented at c:perl/lib/net/Ping.pm line 308

エラーの意味がわかりません、よろしくお願いします。
108107:03/07/01 13:21 ID:???
あと
Perlでbeep音を鳴らそうと
\aでアラーム音のエスケープシーケンスを使用しましたが
音が鳴りませんでした。
音を鳴らす方法が間違ってるでしょうか?
109nobodyさん:03/07/01 13:56 ID:???
ふぅ…。ヤレヤレ
110nobodyさん:03/07/01 14:07 ID:???
>>107
環境くらい書けよ。

意味がわからなかったら調べろよ。
http://www.google.com/search?num=100&hl=ja&lr=lang_ja&ie=UTF-8&inlang=ja&c2coff=1&safe=off&filter=0&q=%54%68%65%20%55%6E%73%75%70%70%6F%72%74%65%64%20%66%75%6E%63%74%69%6F%6E%20%61%6C%61%72%6D%20%66%75%6E%63%74%69%6F
%6E%20%69%73%20%75%6E%69%6D%70%6C%65%6D%65%6E%74%65%64%20%61%74%20%63%3A%70%65%72%6C%2F%6C%69%62%2F%6E%65%74%2F%50%69%6E%67%2E%70%6D%20%6C%69%6E%65%20%33%30%38%20
(行長すぎって言われたから途中ぶった切り。)

英語がわからなかったら調べろよ。
http://www.excite.co.jp/world/text/?wb_lp=ENJA&before=The%20Unsupported%20function%20alarm%20function%20is%20unimplemented%20at%20c:perl/lib/net/Ping.pm%20line%20308%20
111nobodyさん:03/07/01 14:36 ID:???
\aで思い出したけど、
ActivePerlで、\aで鳴る音をユーザ定義できない?
112nobodyさん:03/07/01 15:13 ID:???
\x07
113nobodyさん:03/07/01 15:36 ID:???
implementの方法はどうやればいいのでしょうか?

環境
ActivePerl v5.8.0.806 + Perlを始めよう! v.2.0.4.5
114nobodyさん:03/07/01 15:52 ID:???
あんたの使ってるプラットフォームじゃ alarm はインプリメントされてない
windows なんて厨房の使う os 知らんから、あとはヨロ
 ↓
115nobodyさん:03/07/01 16:31 ID:???
まあ、\aを使う代わりに、何か音が鳴るようなのを
systemで呼べばいいだけの話か
116nobodyさん:03/07/01 16:42 ID:hz3sfxOd
Prel初心者です。
WEB上のFROMから入力された文字や数字は、さまざまなコードで入力されるため
jcode.pl 等を使いコード変換する必要性は理解できます。
しかし、自分が作成したHTMLから自分が作成したCGIをパラメータ付きで呼び出すとき
CGI側はその受け取ったデータをコード変換する必要はあるのでしょうか?
例えは、index.html 内に <a href="http://aaa.com/test.cgi?id=123&name=abc">
があり、これをクリックした場合、test.cgi で受け取る id=123&name=abc は
変換する必要があるか、という事です。
よろしくお願いします。
117nobodyさん:03/07/01 16:55 ID:???
>>116

from?

from?

from?


答え:必要ある時もあるし無い時もあるのでやっておいた方がいい
118nobodyさん:03/07/01 17:17 ID:???
>>116
FROMはFORMのことでしょうが
IEやNetscapeブラウザではurlエンコードして送りますから普通はurlデコードしますね。
英数文字だけだったら問題ないけど一応やっとけ。
119nobodyさん:03/07/01 17:51 ID:9B8Cvuqq
>>107
そんなものぐらいbatで書けよ・・・
120座敷荒氏:03/07/01 17:54 ID:???
何度も申し訳ありません。

別にパラメータファイルを用意し
そのパラメータファイルにフルパスで書かれたファイルを
削除するPerlを作っているのですが、97さんに教わったとおりに
書き換えて下記のようにして実行したところ
エラーが発生してしまいます。

#! /home/perl/test
while (<>){
($cmd_para) = split;
unless(unlink($cmd_para)){
exit(100);
}
}
exit(0);

↓実行したものとエラー内容
$ ./Perl名 パラメータファイル名
bash: ./Perltest: bad interpreter: Permission denied

お力添えのほど、宜しくお願い致します。
121nobodyさん:03/07/01 18:04 ID:???
>#! /home/perl/test
関係ないが、珍しいものを見た
122あぼーん:あぼーん
あぼーん
123座敷荒氏:03/07/01 18:08 ID:???
>>121
そのへんは書き直してますよ。
124nobodyさん:03/07/01 18:09 ID:F5KDEjxA
>>120
#!の行がおかしいってエラーが出てるぞ。
125nobodyさん:03/07/01 18:09 ID:???
>>120
何でもかんでも一度に書くな。

#! /home/perl/test
print "hello, world\n";

からやり直せ
126あぼーん:あぼーん
あぼーん
127nobodyさん:03/07/01 18:25 ID:ycS3U73c
ヒントはstdin
128座敷荒氏:03/07/01 18:27 ID:???
>>124
あ、できました。
どうもありがとうございます。
原因は本番環境から自前の環境に持ち込んだときに
書き換えたミスです。削除対処ファイルへのパスを記入していました。

124さん、他に助言してくださったみなさん、
本当にありがとうございました。

>>125
はい、仕事で作る事になったので
順番に勉強する暇がありませんでした。
これからもう一度勉強をしますので
宜しくお願い致します。

129nobodyさん:03/07/01 19:43 ID:hz3sfxOd
FORM間違いの116です^^;
CGIに送るのは数字だけなのですが、
念のために変換かませておきます。
ありがとうございました。
130nobodyさん:03/07/01 19:58 ID:???
数字は変換しても数字だから、いじらなくてもいいのでは。
0-9a-zA-Z以外のものが入るのなら、変換しとけ。
131nobodyさん:03/07/01 21:02 ID:soOdqVTP
>>107
pingはネットワークに負荷かけるぞ。
普通にsocket作ってbindしてconnectして失敗したらエラーでいいだろ。

モジュール使ったら3行くらいで作れそうな気がするが。
(使わなくても10行くらい)
132nobodyさん:03/07/01 21:03 ID:???
bindするの??
133nobodyさん:03/07/01 21:31 ID:???
し・ば・る!!
134コミュカレ:03/07/01 21:41 ID:aHlU6obt
オープンソースです

一部の限られた組織等でしか利用されていなかったグループウェアを、
一般ユーザーも利用できるインターネット上のパーソナルグループウェアへ
「コミュカレ」はフリーソフトです。
ゴミの収集日等、地域の皆様どおしでも使えます。使い方はユーザー次第!!!
いろんな活用の仕方が考えられます。
その便利さを是非お試しになってみて下さい。
http://www.ecopig.jp/comucale/index.htm
135nobodyさん:03/07/01 22:05 ID:???
>>131
相手に嫌がらせするのが目的なんじゃない?
成功したらアラームがピッ!ってね
136nobodyさん:03/07/01 23:25 ID:qNSyt42Z
「〜hoge.cgi?x=hage&y=hoge」として渡した「x」と「y」は
リンク先でどのように取得したらよいのですか?
よろしくおねがいします。
137nobodyさん:03/07/01 23:27 ID:???
($x)=$ENV{QUERY_STRING}=~/x=([^=]*)/;
($y)=$ENV{QUERY_STRING}=~/y=([^=]*)/;
138nobodyさん:03/07/01 23:28 ID:???
>>136
$ENV{'QUERY_STRING'}を&で分割してから=で分割する
139nobodyさん:03/07/01 23:31 ID:???
>>137
$x = hage&y
$y = hoge
140136:03/07/02 00:49 ID:tWYlFrFC
>>137-139
ご回答ありがとうございました。
このようにしました。

($xdate,$ydate)=split(/&/,$ENV{QUERY_STRING});

($x)=$xdate=~/x=([^=]*)/;
($y)=$ydate=~/y=([^=]*)/;

141nobodyさん:03/07/02 01:01 ID:???
>>140
それじゃダメだって
142nobodyさん:03/07/02 01:12 ID:DMMsk6IB
>>140
素直にReadParse使えや。
よっぽど簡単
143nobodyさん:03/07/02 01:17 ID:DMMsk6IB
144nobodyさん:03/07/02 02:22 ID:???
>>140
dateってなんやねん
145nobodyさん:03/07/02 11:29 ID:UDPPCCYr
>>130
FORM間違いの116です。
また、基本的なことで申し訳ありません。

> 0-9a-zA-Z以外のものが入るのなら、変換しとけ。
0-9a-zA-Z は変換する必要なしという事は、これらの文字を
バイナリで表現すれは、どのコード体系でも同じなのですか?
またCGIへの受け渡し文字列中に、「&」や「=」がよく使われますが
これらが含まれていれば変換する必要があるのでしょうか?
まあ、どんな場合でも変換しておけば問題ないのでしょうけど
実際のところが気になったのと、自分自身ではsjisでしか
試す事ができないので、ここでお聞きするしかありません
でした(^_^;)
146あぼーん:あぼーん
あぼーん
147nobodyさん:03/07/02 11:48 ID:???
>>145
1byte文字は文字コード関係ない
urlエンコードについては
http://techtips.belution.com/ja/perl/0000/
148nobodyさん:03/07/02 11:59 ID:???
>>147
1byte文字でも文字コードは色々種類あるぞ。

よく使われるもので、JIS X 0201 Latinとか、JIS X 0201 Latin
とか、純粋なASCIIとかEBCDICとかあるわけだが。
ISO-646を含めると相当な種類があるわけだが。

まぁ殆どの環境で、JIS X 0201系とASCII系は同じ表示になって
しまうしEBCDICのパソコンなんてほとんど持ってる人がいないから
誰もあんまり気にしてないだけだと思うが。

でも例えば、\100-なんてのは、1byte文字だけど文字コードによっては
バックスラッシュになっちゃう場合もあるわけだが。
(今書いてる文章はShift_JISなので、円記号として使って問題ない)
149nobodyさん:03/07/02 16:02 ID:???
数日前に質問と回答をいただいたのですが、
どこのレス(スレ)かわからなくなってしまったので、要約して再質問させていただきます。

housemaster.csv から、各行を読み込んで、条件に合致するなら、
その行の文字を表示させるというありがちなものを組んでます。

で、どうしても一部分の行(レコード)のみ、全て文字化けしてしまいます。

なお、検索条件によらず、文字化けする行は、必ず決まってます。(ID1とID24の行、というように)

回答では、「条件」のなかで文字コード関係の処理をしてまちがえてるのでは?
というのがありましたが、条件の中では数字の比較しかしてません。

また、別の回答では、jcodeを自動判別でなくeuc2sjisのようにしたら?
というのがありましたが、これは、全てそのようにしましたが、改善されずです。

他に、どんな理由が考えられるのでしょうか・・・?
150nobodyさん:03/07/02 16:29 ID:???
>>149
どうやって検索させてるかしらんが念のため確認。
元データ(〜csv)を読み込む際と、検索条件(キーワード?)の
両方ともjcodeは使ってるよな?
どっちか一方だけとかじゃなくて。
151nobodyさん:03/07/02 16:36 ID:???
>>149
元質問は見てないが、スクリプトやCSVの文字コードが異なっていて
適切に変換されていないとかは?
あるいはCSVデータの中身に問題があるとか。
SJISでそのまま扱うと文字化け起こす文字とかは対策してる?
152149:03/07/02 16:38 ID:???
>>150
ありがとうございます。
●元データ(〜csv)を読み込む際・・・&jcode::sjis2euc(\$value); してます。
●検索条件(キーワード?)の・・・検索条件といっても、文字でひっかけてるわけでなく、
idや数値の大小(値段ですが)で検索してるだけなので、
jcodeは1回も使ってませんが、ここんとこは問題ないですよねえ・・・・・
153149:03/07/02 16:40 ID:???
>>151
ありがとうございます。
肝心なこと言い忘れてました。
CSVはすべてSJIS(CSVから読み出すときは&jcode::sjis2euc(\$value);)
スクリプトのコードは全てEUC、
HTMLに出力時は全てSJIS&jcode::euc2sjis(\$value);に変換してます。
154149:03/07/02 16:43 ID:???
検索条件によらず、CSVファイルの、必ず同じ行(レコード)が文字化けしていることから、
CSVデータが壊れている?のではと思ったのですが、
秀丸で開いてみたところ、問題はなさそうでした。

あるいは、秀丸で見ても見ることのできない特殊なコード?が紛れ込んでいると
いうことはあるのでしょうか?
もしそうだとしたら、そういった特殊なコードはどうやれば見ることができるのでしょうか
155nobodyさん:03/07/02 16:44 ID:???
>>152
んじゃとりあえず、CVSを読み込んで、ただ出力するスクリプト書いて、
出力結果を確認してくだちい。
そこで問題がなければ、読み込みには成功してると。
で、あとは順次スクリプト内に、ちょこちょこprintを入れて、
どこで文字化けをしたかチェック。
文字化けした近辺を洗うとよろし。

もしCVSでこけてたら、CVSの文字コードとか、そこら辺をあさるよろし。

あとよくわからんが、半角カナとか使ってると危なそう。
注意されたし。
156nobodyさん:03/07/02 16:44 ID:???
>>153
SJIS→EUC→SJISじゃ、SJISでの文字化けの問題がそのまま
現れるでしょ。
157nobodyさん:03/07/02 16:45 ID:???
>>154
バイナリエディタ

> HTMLに出力時は全てSJIS&jcode::euc2sjis(\$value);に変換してます。
eucでなぜ吐かない?
158155:03/07/02 16:46 ID:???
追記
>んじゃとりあえず、CVSを読み込んで、ただ出力するスクリプト書いて、
>出力結果を確認してくだちい。

当然、今動かしてるスクリプトと同じ方法で処理して出力してね。
(jcodeとか使ってるなら、全く同じような処理で)
159149:03/07/02 17:33 ID:???
>>155
以下のスクリプトで、正常にSJISではきだされました・・・
ちょこちょこprintを入れて、ためしてみたいとおもいます・・・

open(IN, "< ./housemaster.csv") or die("cannot open:$!"); # 読みのみモードで開く
  while ($line = <IN>){
    #Perlメモ様様
    $line .= <IN> while ($line =~ tr/"// % 2 and !eof(IN));
    $line =~ s/(?:\x0D\x0A|[\x0D\x0A])?$/,/;
    @values = map {/^"(.*)"$/s ? scalar($_ = $1, s/""/"/g, $_) : $_}
        ($line =~ /("[^"]*(?:""[^"]*)*"|[^,]*),/g);
    #必要なものだけをEUCにして、出力時にSJISにする
    foreach $value (@values){
      &jcode::sjis2euc(\$value);
    }
    #必要なものだけをEUCにして、出力時にSJISにする
    foreach $value (@values){
      &jcode::euc2sjis(\$value);
    }
    #Perlメモ様様
    $line = join ',', map {(s/"/""/g or /[\r\n,]/) ? qq("$_") : $_} @values;
    print qq|$line a\n|;
  }
close IN;
160149:03/07/02 17:35 ID:???
>>156
「スクリプト内はすべてEUCで通して、入出力のみSJISに変換」
というポリシーだと大丈夫だと聞いたことがあるのですが、
違います?
161149:03/07/02 17:36 ID:???
>>157
あ、バイナリエディタ・・・使ったことないけど試してみます。
>eucでなぜ吐かない?
個人的にはそうしたいんですけどね・・・
サイト内の静的ページがみなSJISなので、CGIのページだけEUCというのも、
なんか変かなと。。。
162nobodyさん:03/07/02 18:13 ID:???
>>161
ブラウザはそんなサイト内で統一された文字集合(?)は気にしないぞ。

変だと思うのは人間だけ。
163149:03/07/02 18:15 ID:???
print とか「=cut」しまくってたら、おかしい場所がわかりますた・・・
for ($i=0;$i<=$#houselist;$i++){
  foreach $key (keys %{$houselist[$i]}){
    &jcode::euc2sjis(\$houselist[$i]->{$key});
  }
}

としなくちゃいけないのを、
for ($i<=0;$i<=$#houselist;$i++){ のように、「$i<=0」
となってました。。。

変なfor文ならエラーにしてくれればいいのに・・・
ともかく、お騒がせしてすみませんでした。
164161:03/07/02 18:16 ID:???
>>162
いや、昔のブラウザは、同じサイト内でSJISからEUCのページにとんだら、
化けてたんですよ。。。そのトラウマかもw
165155:03/07/02 18:18 ID:???
まあ、良くある事ですな。
(俺もついさっきまで、連想配列のnameを間違っていて「動かねえ!」と
騒いでいたのは内緒)

こまめなチェックを心がけませう。
(人の事いえないけどネー)
ガンガレー
166149:03/07/02 19:20 ID:???
>>165
いやいやほんとすんませんです。
なにげに、Perlを仕事としてやりはじめてまだ3ヶ月なもので、学ぶこと多いです。
(つーか、この部署プログラマ他にいないもんで、2chで質問してしまいましたw)
おたがいがんがりましょう
167nobodyさん:03/07/02 19:25 ID:???
解決おめ。

ところで「CVS」ではないと思うぞ>>155
168nobodyさん:03/07/02 21:03 ID:???
漏れも CVS と CSV は良く混乱する
169nobodyさん:03/07/02 21:05 ID:???
間違って打ってるときはあるな。
170155:03/07/02 21:39 ID:???
>>167
おぅシット。
ついつい間違えてしまいますた(苦笑

>>168>>169
仲間ハケーン、心強い(藁
171nobodyさん:03/07/02 22:39 ID:???
>>164
吐き出したHTMLで、キチンと文字コードの指定をすれ。
ブラウザの自動判別なんぞいう間抜けにまかせるからそうなる。
172nobodyさん:03/07/02 22:54 ID:???
漏れも キチン と チキン は良く混乱する
173nobodyさん:03/07/02 23:23 ID:???
CVSが Concurrent Version System の略だと最近知ったオレ。
174nobodyさん:03/07/03 00:06 ID:???
漏れもコンマとマン*はよく混乱する
175nobodyさん:03/07/03 00:09 ID:???
>>174
どっかのサポセンに説明するとき使ってみようかな
176nobodyさん:03/07/03 00:10 ID:???
CVS = ConVenience Store = コンビニエンス・ストア
177nobodyさん:03/07/03 00:42 ID:???
超ブサの略だろ普通。
178nobodyさん:03/07/03 01:30 ID:???
若い人は頭がやわらかいねえ
是非とも業務で活かしてくれ給え
179nobodyさん:03/07/03 09:34 ID:???
ある/ない、使える/糞 で答えてくれ。
(a: awk; p: perl; r: ruby; j: javascript)
a2p ある 糞
perlcc ある 糞
p2r
r2p
j2p
p2j

とくに、javascriptをperlCGIに変換したいと思っています。
180nobodyさん:03/07/03 09:38 ID:R4mGR+/m
perlが全くわかりません。
perlに挑戦しようと思っているのですが、
入門サイト等が見つかりません。
どこかおすすめないでしょうか
181nobodyさん:03/07/03 09:45 ID:???
>>180
マジレスすると、とほほで良いんじゃないかと
182nobodyさん:03/07/03 09:49 ID:???
179 ありえない アホ
183nobodyさん:03/07/03 10:30 ID:???
perlの言語仕様が、a2pが通るようにできてるからな
動作すれば良し
184nobodyさん:03/07/03 12:43 ID:LERgN2mA
>>182
アフォには、「ありえない」だろな(ry
じゃ、自分で書くからいいよ。
もういくつか書いてるけど、その場しのぎの物になってる。
ある程度汎用性持たせてて書いてやろう。
185nobodyさん:03/07/03 12:45 ID:???
JavaScriptのコードををPerlのコードに変換することは不可能と言っているんだと思うけど・・・・
186nobodyさん:03/07/03 12:46 ID:???
>>184=他人に聞くだけ聞いといて、自分からは何も情報を出さないクレクレ厨
危うく>>179にマジレスするところだったよ。
187nobodyさん:03/07/03 12:52 ID:???
WebProgスレの方にも居たよな、いかにも初心者っぽい中途半端な質問して
指摘・批判されたら逆切れってパターンの奴。

多分釣りしてスレが荒れるのを楽しんでるだけだと思うので、スルーでお願いします。
188nobodyさん:03/07/03 12:54 ID:???
JavaScriptで書いたものをPerlに変換し、しかもCGIとして使いたい理由が分からない(^_^;)
189nobodyさん:03/07/03 12:55 ID:???
>>188
スルーで。
190nobodyさん:03/07/03 12:56 ID:???
> もういくつか書いてるけど、その場しのぎの物になってる。

これは嘘。
191nobodyさん:03/07/03 13:57 ID:???
漏れもn88-basicをperlに変換するのはいくつか書いた
192nobodyさん:03/07/03 14:00 ID:???
漏れもマシン語をperlに変換するのはいくつか書いた
193nobodyさん:03/07/03 14:02 ID:???
俺もHTMLをPerlに変換するのはいくつか書いた。
194179=184:03/07/03 14:30 ID:???
>>191->>193
君らち、そんなの意味ないよ。
漏れはサ、javascriptでな、自学自習の問題を出してるわけさ。
その中からな、多少変形しながら、CGIの問題を作ってるわけさ。
jsじゃな、外部ファイルにして読めないdirに置いた上にな、pragmaで
no-cache指定してもな、どうしてもcacheで見えちゃうんだな答えが。
Perl CGIでな、外との接続を絶ったコンピュータ室で試験させよう
としているわけさ。

perl2rubyはな、Perlユーザのためのruby入門って本、読んでな、
簡単な部分はP2Rに翻訳できそうだと思ったからだな。

君らちとは、レベルが違うわな。
195nobodyさん:03/07/03 14:31 ID:???
漏れもバッチファイルとシェルスクリプトをperlに変換するのはいくつか書いた
196nobodyさん:03/07/03 14:34 ID:???
漏れもゴッホのひまわりをperlに変換するのはいくつか書いた
197nobodyさん:03/07/03 14:37 ID:???
漏れも >>191-193>>194 に変換するのはいくつか書いた
198nobodyさん:03/07/03 14:39 ID:???
>>194
確かに、ネタにそこまでマジレスできる君と俺とでは
かなりレベルが違うようだ。
199nobodyさん:03/07/03 14:39 ID:???
>>194
それってASPとかじゃなくてクライアントサイドってことだよな?
だとするとアクセスできないディレクトリに置いたら動かないだろw

で、クライアントサイドとサーバサイドじゃ処理が違うのに変換???w
200nobodyさん:03/07/03 14:40 ID:???
俺もダンディ坂野のギャグをPerlに変換するのはいくつか書いた。
201nobodyさん:03/07/03 14:41 ID:???
>>199
きっと俺らちとはレベルが違んだよ(w
202nobodyさん:03/07/03 14:43 ID:???
俺もパチンコ玉を真珠に変換するのはいくつか書いた
203nobodyさん:03/07/03 14:44 ID:???
漏れもマスならカイた
204nobodyさん:03/07/03 14:46 ID:???
プロフェッショナルってすごいなぁ。
僕もがんばります!!
205nobodyさん:03/07/03 14:49 ID:???
漏れも金と銀をパールに変換してプレゼントした
206nobodyさん:03/07/03 14:54 ID:???
俺もPerlをドラクエ風に変換するのはいくつか書いた。
207nobodyさん:03/07/03 15:01 ID:???
漏れも、とても綺麗な真珠だね、もっと綺麗な牧シンジュ!
だけどお前の頭の中は、シンジュじゃ無くてPerlだよ、なら書いた
208nobodyさん:03/07/03 15:08 ID:Ctng5Cwy
>>195
perl -pe 'chop; $_="print `\Q$_\E`;\n"'
209107:03/07/03 15:39 ID:???
作ってみました。
#!/perl/bin/perl
use Net::Ping;
#適当なネットワークIP
$host = "210.***.***.***";
#IPを数えるカウント
$count = 0;
($sec, $min, $hou, $day, $mon, $yea, $wek) = localtime();
$yea=$yea+1900;
$mon=$mon+1;
while (1) {
if (pingecho($host, 5)) {
$count=0;
print "$yea/$mon/$day $hou:$min:$sec Count:$count IP:$host is alive.\n";
}else{
$count++;
print "$yea/$mon/$day $hou:$min:$sec Count:$count IP:$host is no return.\n";
}

if ($count > 3) {
print "$yea/$mon/$day $hou:$min:$sec Count:$count IP:$host is dead.\n";
last;
}
sleep(5);
}
while (1) {
print "モデムが停止しましたー\a\n";
sleep(1);
}
210209:03/07/03 16:00 ID:???
ログの時間が動いていないことが今判明したTT
211nobodyさん:03/07/03 16:05 ID:Ctng5Cwy
>>209
その「適当なネットワークIP」って、他人のリソースじゃないだろうな?

Pingは負荷が大きいから、回線の生死にPingを打つのは問題ありだと
思うんだけど。LAN中ならいいけど、外に出すのはマナー上良くないと
思われる。

もし俺がネットワーク管理者で、どっかのクライアントからPingが垂れ流されて
きたら、いたずらか攻撃だと判断してフィルターかけるよ。
212あぼーん:あぼーん
あぼーん
213nobodyさん:03/07/03 16:30 ID:???
>>211
Net::Pingは、デフォルトでTCPのECHOにConnectするようになってるよ。
ICMP(いわゆるPing)は指定しないと使わない。
まあどのみち他人のホストを回線チェックに使うのは感心しないけど。
214nobodyさん:03/07/03 17:13 ID:83sptUFL
$value =~ tr/0-9/0-9/;
print $value;

HTMLの見栄え表示用に半角数字を全角数字に置き換えを行っていますが
文字化けします。元は一桁か二桁の半角数字です。
座、とか抗とか、、、

$value =~ tr/0-9/a-j/;

だと上手くいきます。
コードはEUC-JPで書いてます。
日本語処理の問題だと思うのですがいろいろ調べてみてもわかりませんでした。
ちなみに日本語関係はJcode.pm使えます。

どなたか教えて下さい
215nobodyさん:03/07/03 17:27 ID:???
>>214
jperlでない限り、tr///は2バイト文字をサポートしていません。
したがって、>>214のtr文は、

・0の1バイト目
・0の2バイト目〜9の1バイト目
・9の2バイト目

が指定されたように受け取ります。Jcode.pmを使っているのなら、

jcode($value)->tr('0-9', '0-9');

を試してみてください。
216nobodyさん:03/07/03 17:29 ID:???
>>215
>jperlでない限り、tr///は2バイト文字をサポートしていません。
これちょっと嘘だったかも。
217nobodyさん:03/07/03 17:32 ID:???
>>214
$value =~ s/0/0/g;
$value =~ s/1/1/g;
$value =~ s/2/2/g;
$value =~ s/3/3/g;
$value =~ s/4/4/g;
$value =~ s/5/5/g;
$value =~ s/6/6/g;
$value =~ s/7/7/g;
$value =~ s/8/8/g;
$value =~ s/9/9/g;

(w
218214:03/07/03 17:41 ID:???
>>215

早速ありがとうございました。
御指摘の方法で上手くいきました。
219nobodyさん:03/07/03 17:42 ID:???
>>214
$value =~ s/([0-9])/('0','1','2','3','4','5','6','7','8','9')[$1]/eg;
つぅのはどうでしょう?
220215:03/07/03 17:50 ID:???
>>217>>219
それだったら

$value =~ s/([0-9])/pack("c2", 0xa3, 0xb0+$1)/eg;

の方が良くないか?
221nobodyさん:03/07/03 19:19 ID:???
>>214はテンプレ見てねーな
漏れもヘタレだけど、リンク先たどれば解決策はザクザク出るのに
222 ◆hMJAPH9PWA :03/07/03 20:22 ID:???
>>220
文字コードに依存するやりかたは良くないと思う。
223nobodyさん:03/07/03 20:28 ID:Ctng5Cwy
>>222
その直前で$valueをEUCに変換してるという前提だから別に構わないでしょ。
>>217や219だってISO-2022-JPでやれば一発でエラー(or文字化け)がでるわけで。
224nobodyさん:03/07/03 20:36 ID:???
アルファベットを一旦全部大文字にしてから処理、とかの
常套手段と同様に、
EUCに揃えてから好きに加工、というのは
普通にアリだな
225nobodyさん:03/07/03 21:16 ID:???
ところで「日」と「曰」の区別できるようになったの?>えうC
226nobodyさん:03/07/03 21:52 ID:???
大と丈の区別は付くようになりました。
227 ◆hMJAPH9PWA :03/07/03 22:52 ID:???
>>223
あー、変換してからか。スマソ。

それでも個人的にはわかりやすいほうが良いな。
228nobodyさん:03/07/03 23:25 ID:z1S7djbc
217でいいんだよ
229あぼーん:あぼーん
あぼーん
230nobodyさん:03/07/04 11:23 ID:???
ブラクラ注意
231nobodyさん:03/07/04 12:28 ID:???
./tmp ディレクトリにあるファイルを全て削除するにはどうすればいいのでしょうか?
232nobodyさん:03/07/04 12:32 ID:???
>>227>>228
分かりやすさを採るか効率を採るかだと思うけど、
>>217は効率悪すぎ。

>>231
unlink <./tmp/*>;
233nobodyさん:03/07/04 13:01 ID:???
>>217はネタでしょ?
234nobodyさん:03/07/04 13:04 ID:???
このスレも盛り上がらなくなったな・・・。おまえら書けよ。
235nobodyさん:03/07/04 13:05 ID:???
>>233
ネタだと思いたいが、仕事で他人のコードを見る機会が多いと、
>>217が可愛く見えるくらいの想像を絶するコードに度々遭遇する。
236nobodyさん:03/07/04 13:10 ID:???
文字コード直接書くような糞コードよりはましだろ。。。
237nobodyさん:03/07/04 13:31 ID:???
なんかお題になるようなものないかな
238231:03/07/04 13:34 ID:???
>>232
unlink <./tmp/*>; やっても消えません。エラーメッセージもでません。
どうすればいいのでしょう?
239nobodyさん:03/07/04 13:40 ID:???
意識が朦朧としてるとな、
エレガントな方法よりも確実に間違わない方法を
取ったりするんだ
どうせ後で直すけどな
240nobodyさん:03/07/04 13:41 ID:???
>>238
tmpの1階層上で実行したか?
241231:03/07/04 14:02 ID:???
>>240
はい、もちろん。
lsすると
tmp.cgi
tmp
って感じになります。(実際はシェルを開放してませんが)

うち、lsとかのコマンドをcgiから実行できないようなんですが、
それって関係あります?
242nobodyさん:03/07/04 15:49 ID:???
>>236
Cだと普通に使われる手法だと思うけどな>直接文字コード
まぁ↓のようにしたって構わない訳だが。

my(@zero) = unpack("C2", "0");
$value =~ s/([0-9])/pack("C2", $zero[0], $zero[1]+$1)/eg;

>>241
パーミッションの問題じゃないのか?ファイルの所有者と
CGIスクリプトの実行者が違うとか。
243nobodyさん:03/07/04 16:20 ID:???
>>242
Cじゃなおさらそんなことしないよ・・・・
244nobodyさん:03/07/04 18:51 ID:???
unlink <./tmp/*> or die $!;
で見てみれば?
245231:03/07/04 19:16 ID:???
>>244
unlink <./tmp/*> or die $!;
したら、500 Internal Server Error になってしまいましいた。
アパッチのエラーログは、

glob failed (child exited with status 127) at tmp.cgi line 2.
Died at tmp.cgi line 2.
[Fri Jul 4 19:14:46 2003] [error] [client xxx.xxx.xxx.xxx] Premature end of script headers: /ここ略してます/tmp.cgi
とでました。

tmp.cgiの中身は、
------------------------------------------------------------
#!/usr/local/bin/perl
unlink <./tmp/*> or die $!;
print "Content-type: text/html\n\n";
print "これはテスト";
------------------------------------------------------------
です
246nobodyさん:03/07/04 19:20 ID:???
ヘッダ出す前に死んでどうすんだよ。
#!/usr/local/bin/perl
print "Content-type: text/plain\n\n";
unlink <./tmp/*> or die $!;
print "これはテスト";
247nobodyさん:03/07/04 22:03 ID:???
>>245
ワロタ
248nobodyさん:03/07/04 22:05 ID:???
>>245

>>246 で言われた事を修正して実行してみてそれでも解らなければ、
eval して $@ をチェッくらいとすればいい
249nobodyさん:03/07/04 22:27 ID:???
>>246>>248
エラーメッセージの内容くらい見ようよ。

>>245
> glob failed (child exited with status 127) at tmp.cgi line 2.

globに失敗してる。cshが使えない環境か、cshがglobに使う
一時領域にアクセスできないのが原因だと思う。
素直にglobは諦めて

opendir(DIR, "./tmp");
unlink (grep !/^./, readdir DIR);

とかした方が良いかも知れない。
250nobodyさん:03/07/05 00:36 ID:???
MLDBMを使おうとしています。

$database{"$id"} = %params;
で格納し、

foreach my $id ( keys %database ) {
print qq($id <BR>);
foreach my $key (keys %{ $database{$id} }){
print qq($key <BR>);
print qq($database{$id}{$key} <BR>);
}
}
で中身を確認しようとしていますが1個目の$idで表示が止まります。
$idは四つあり、%paramsのkeyは15個ほどあります。

foreach my $id ( keys %database ) {
print qq($id <BR>);
}
と、$idのみを全て見ようとすると三つとも表示されます。
入門 perl DBI を見て、
print Data::Dumper->Dump( [ \%database ] );
しましたが、
$VAR1 = { '2003415' => '1234 2003 game_year', '20031010' => '24/64', '20030606' => '18/32', '20030505' => '18/32' };
こんな表示です。。。。

2003415 20031010 20030606 20030505 は%databaseのkeyで、
あとは%paramsのkeyやらvalueやらの一部ですが全部じゃありません。

MLDBM初めて使うので、とりあえず格納して、それを表示させて
確かめる為のテストをしているのですが、
%{ $database{$$id} }のkeyとvalueを表示させるにはどうしたらいいのでしょうか。
251250:03/07/05 00:37 ID:???
>>250
> 三つとも表示されます。
は四つとも表示されます、の間違いです。
252nobodyさん:03/07/05 01:24 ID:???
>>250
$database{$id} = \%params;
こうだろ?
リファレンスの基礎からやりなおしてこいよ。

253nobodyさん:03/07/05 02:00 ID:???
基礎ができない(or 解らない)から、ここにカキコするんじゃねーの?
その為の初心者スレだと思うが…。流石に釣りやネタには俺はレスしないけどな
254nobodyさん:03/07/05 03:29 ID:???
基礎的なことにつまずくのはしょうがないよ。
そうやって一歩ずつ覚えていけばいいんだから。ただ、

  エラーメッセージは読め。
  英文だろうがなんだろうががんばって読め。
255nobodyさん:03/07/05 03:43 ID:???
そういうことだね。
英文のメッセージが読めないなら和訳のを探せばいいのに。

ttp://www.namazu.org/~tsuchiya/perl/info/perl-ja_109.html
256252じゃないが:03/07/05 12:13 ID:???
コーディング上の質問は>>252で解決したわけだ。
質問の本質が「リファレンスを理解してない」という事にあるので、それを指摘するのが何故悪い?
257nobodyさん:03/07/05 17:21 ID:jB+j5VLT
print <<ENDDOC;
 ・・・
ENDDOC

でENDDOCが見つからないと怒られるんですが
何か他にやらなければいけないことがあるんでしょうか?
258nobodyさん:03/07/05 17:23 ID:???
>>257
ENDDOCのあとに空白がある。
print <<ENDDOC;
 ・・・
ENDDOC ←ここ
259nobodyさん:03/07/05 17:52 ID:???
それはコピペの特性では
260257:03/07/05 17:58 ID:???
ソースでは入ってないです。
コピペしたわけでもないのですが・・謎

というかどの行も全部そういう風になってますね(^^;
261257:03/07/05 18:09 ID:???
わかりました!
先頭にタブ入れちゃいけないんですね。
後ろに付いちゃいけないという事は
前にも付いちゃいけないのかと思ってやってみたら。

参考書の
print <<" AAA"
の先頭の空白の意味がわかった・・・

どうもでした>258さん
262nobodyさん:03/07/06 02:53 ID:???
質問です。

eval{ flock(FILE,2); };
if($@){ &MkDIR ; }

これは期待通りに動きますか?
263262:03/07/06 03:01 ID:t//EFERU
age 忘れでした。
264nobodyさん:03/07/06 03:59 ID:???
>>262
どういう結果を期待してるのか分からんが、
とりあえずエラーは起きないだろう。
265250:03/07/06 09:49 ID:1R/hd8rn
>>252
アドバイスありがとうござました。
リファレンス、どうも今一理解していないようです。
何しろプログラム自体ちゃんと勉強したものじゃないもので、
どうしても書くものがフラットになりがちなのですが、ちょっと複雑なものを
strictに書こうとすると避けて通れないですよね。

本はもっぱらオライリーのものを、初めての〜とかプログラミングperlとか
CGIプログラミング、あと関係ないですけどjava scriptとか読んでますが、
なかなか奥が深いですよね。

僕としては大物で(僕にとってはですが)一から作った二つ目ですが、
アドバイスのおかげで何とかものになりそうで、ほっとしました。

クックブック欲しいなあと思ってますが、実用perl〜、は僕には難しすぎるでしょうか。
266nobodyさん:03/07/06 12:46 ID:???
>>265
その前にEffective Perl読んでおいたほうがいいと思うよ。
自信をもってプログラムを書けるようになる。安いし。
267nobodyさん:03/07/06 19:04 ID:AvDpfWTI
文字列を入力してweb上のテキストファイルにアクセスして検索し、
何行目にあるかを表示したいのですがうまくいきません
$name = $in{'name'};
&jcode'convert(*name,"sjis");
if(!open(OUT,"$file")){&error(err_file);}
flock(OUT,2);
@DATA = <OUT>;
flock(OUT,8);
close(OUT);
$count = @DATA;
$i = 0;
$found = -1;
while($i<$count){
($chk[$i]) = split(/\,/,$DATA[$i]);
if($chk[$i] eq $name){
$found = $i;
}
$i ++;
}
こうしたのですが該当するものを入力してテストしてみたのですが
全部 -1 になってしまうのですがどうしたらいいのでしょうか?
テキストファイルはこういう感じです。読み込みは出来ています。
データ1
データ2
データ3


268nobodyさん:03/07/06 19:08 ID:???
>>267
($chk[$i]) = split(/\,/,$DATA[$i]);
何がしたいんだ、ここんところ。
この行について自分の言葉で自分の意図するところを明確に書きなさい。
そしたら多分、解決できるから。
269nobodyさん:03/07/06 19:11 ID:???
flockするタイミングおかしくない?
270267:03/07/06 19:11 ID:AvDpfWTI
すみません覚えたてなので変な書き方してるかもしれません。。
$chkに$i行目のデータを$nameと比較するために読み込んで格納している
つもりなのですが・・
271nobodyさん:03/07/06 19:14 ID:???
$chk[$i]をprintして、何が入っているか確認すれば原因わかりそう
272267:03/07/06 19:21 ID:AvDpfWTI
>>271
whileのあとにprintしてみたら表示できるのですが
whileの中でprintしたらエラーになってしまいました・・
273267:03/07/06 19:25 ID:AvDpfWTI
printはなんとかできました。
テキストファイルの中身が全部読み込まれて表示はされました。
でも検索結果だけが出ません・・-1のままです。
274267:03/07/06 19:45 ID:AvDpfWTI
$count = @DATA;
$i = 0;
$found = -1;

while($i<$count){
 ($chk[$i]) = ($DATA[$i]);
 print $chk[$i];
 if($chk[$i] eq $name){
  $found = $i;
 }
 $i ++;
}

今こんな感じですが $found の値が -1 です・・
275nobodyさん:03/07/06 19:50 ID:???
while (<OUT>){
chop;
$_ eq $name and $found,last;
}
276275:03/07/06 19:51 ID:???
$_ eq $name and $found=$.,last;

まちがった
277nobodyさん:03/07/06 19:54 ID:???
>>267
なんか、メチャクチャだな…。
ひょっとして @chk に見つかった行を格納したいのか?

 ち ゃ ん と 期 待 し た い 結 果 を 明 記 し て く だ さ い

で、俺ならこうする

# @chk にヒットした行番号を格納
# 検索対象は $name
# $[ を 0 と仮定する

$i = $j = 0;
foreach ( @DATA ) {
 if ( $_ eq $name ) {
  $chk[ $i++ ] == $j;
 }
 ++$j;
}
278267:03/07/06 19:55 ID:AvDpfWTI
>>275
ありがとうございます。それでやってみたのですがやはり -1 のままでした。。
279nobodyさん:03/07/06 20:00 ID:???
まさか…。

/$name/
↑これで OK ってオチじゃねーだろーなぁ?

$_ eq $name は「完全に一致」ってこと解ってる? >>267
280nobodyさん:03/07/06 20:01 ID:???
>>277 chop; 抜けてた
281nobodyさん:03/07/06 20:02 ID:???
>テキストファイルの中身が全部読み込まれて表示はされました。
で、$nameが含まれてるものを知りたいんだろう?
$chk[$i] eq $name じゃなくて、マッチ演算子使うとか・・・

$KEKKA = $DATA[$i] =~ m/$name/;
282267:03/07/06 20:08 ID:AvDpfWTI
すみません。含むものじゃなく完全一致です。
$chkに一旦格納したものを$nameと比較して一致なら$foundに行数を格納というつもりでした。
277さんの方法でやってみてもだめでした・・
どこかおかしくて微妙に完全一致してないのかとも考えたのですがそうでもないような
気もしたりします。

ちょっと今から出かけますすみません・・・
283nobodyさん:03/07/06 20:16 ID:???
テキストファイルの文字コードはどうなってる?
あと、$found はマッチした行数のことか?

# [廃止] @chk にヒットした行番号を格納
# 検索対象は $name で完全一致
# $found にはマッチした行数が入る。0ならマッチなし
# $[ を 0 と仮定する
&jcode'convert( *DATA, 'sjis' );
$found = 0;
foreach ( @DATA ) {
 chop ; # 行末の \n を削除
 ++$found if ( $_ eq $name ) ;
}
284あぼーん:あぼーん
あぼーん
285nobodyさん:03/07/06 21:34 ID:???
 print $chk[$i];
 if($chk[$i] eq $name){

 print "!$chk[$i]!=!$name!"; ←文字列の両端に何か文字入れてprint
 if($chk[$i] eq $name){

にしてやってみろ。多分分かる。
286nobodyさん:03/07/06 21:35 ID:???
失敬。
 print "!$chk[$i]!=!$name!"; ←文字列の両端に何か文字入れてprint

 print "!$chk[$i]!=!$name!\n"; ←文字列の両端に何か文字入れてprint
に変えてくれ。
287nobodyさん:03/07/06 21:55 ID:???
一旦格納するなら何も配列でやるこたぁないんじゃないのか・・・
とにかく$chk[$i]があやしいことだけは確か
288nobodyさん:03/07/07 01:00 ID:???
諦めて最初から組みなおせ。
289267:03/07/07 01:07 ID:kYkAMaKH
今帰ってきました。今からやってみます。
290267:03/07/07 01:29 ID:kYkAMaKH
すみません解決しました・・
よく見たら改行が入っていました。おれの変なソースをわざわざ見ていただき
みなさんありがとうございました。

こういう風にしました
 $count = @DATA;
 $i = 0;
 $found = -1;
 while($i<$count){
  ($chk[$i]) = ($DATA[$i]);
  $chk[$i] =~ s/\n//g;
  if($chk[$i] eq $name){
   $found = $i + 1;
  }
  $i ++;
 }

かなり下手なやり方なんだろうと思いますが許してくださいごめんなさい・・
291267:03/07/07 01:29 ID:???
sageます・・すみません・・
292nobodyさん:03/07/07 01:31 ID:???
みなのアドバイスが無駄になったということで。

↓次に質問
293nobodyさん:03/07/07 01:36 ID:???
「ファイルを読んでsplit」ではよくあるトラブルではあるな>改行
294nobodyさん:03/07/07 01:38 ID:???
>>292
まったくだ…。死んでくれ
295nobodyさん:03/07/07 01:40 ID:???
>>267
大体、$chk って何のためのデータよ?
データをやたらコピーとかするからおかしくなったり混乱したりするんだよ。
変更しないデータならコピーして使うなよ
296nobodyさん:03/07/07 01:42 ID:???
chomp使わないのか。perl4?
297267:03/07/07 02:51 ID:???
しにまっす(^^o)=3!
298wakaba:03/07/07 08:49 ID:rYaKDTZH
GIFファイルに日本語文字列を描画したいです。

環境
FreeBSD
perl version 5.005_03
ImageMagick、GD、インストール済
ImageMagick、GDとも、基本的なコマンドが使えるのは確認済

自分的にやってみた方法
1)レンタルサーバ管理会社に
日本語TrueTypeFontのインストールを依頼。
-> ports で ja-truetypefont をインストール完了。

2)サーバを検索し、インストールされた日本語ttf は
/usr/X11R6/lib/X11/fonts/TrueType/wadalab-gothic.ttf
/usr/X11R6/lib/X11/fonts/TrueType/watanabe-mincho.ttf
であろうと見当を付る。
299wakaba:03/07/07 08:50 ID:rYaKDTZH
つづき

3)下記のようなスクリプトを作成、実行。
$imagemagick = Image::Magick->new;
$infile = "/hogehoge/infile.gif";
$outfile = "/hogehoge/outfile.gif";
$imagemagick->Read($infile);
$text = Jcode::convert('日本語を描画する試験','sjis');
$imagemagick->Annotate(font=>'/usr/X11R6/lib/X11/fonts/TrueType/watanabe-mincho.ttf', pointsize=>18, fill=>'green', text=>$text, x=>20, y=>100 );
$image->Write($outfile);

4)結果
エラーは出ませんが、日本語が文字化けして描画されています。

別にImageMagickやGDを使わなくても良いです。
何か良い解決策をご存知の方はいらっしゃいますでしょうか?
300nobodyさん:03/07/07 09:20 ID:???
シフトJISでやってるからじゃねーの?
それよりも、ImageMagick は日本語対応してるの?


300 GET ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
301nobodyさん:03/07/07 10:02 ID:???
>>299
Jcodeの使い方おかしいんじゃない?
レガシースタイルでconvert使うならjcode.plと同じだよね。

スカラで受けた場合は変換した結果ではなく、変換した文字コードが
戻り値だし、第一引数がそれだと何も返ってこない。

$text = '日本語を描画する試験';
$text = jcode::convert(\$text, 'sjis');
print $text;
出力 sjis

$text = jcode::sjis( '日本語を描画する試験');
print $text;
出力 日本語を描画する試験

手元にJcode.pm入ってるのなくてjcode.plでやったんだけど。
302wakaba:03/07/07 10:25 ID:rYaKDTZH
ご回答どうもありがとうございます。

>300 さんへ
ImageMagick の日本語対応の件は不明です。
レンタルサーバに問い合わせました。

>301 さんへ
$text = Jcode::convert('日本語を描画する試験','sjis');
は確かにレガシー記法ですが、当サーバでテキスト処理は出来ています。
しかし、念のためOOPで
$text = Jcode->new('日本語を描画する試験')->sjis;
のように文法を変え、
300さんの指摘通りjis、euc、utf8と確認しましたが
全て文字化けしました。
303nobodyさん:03/07/07 10:34 ID:???
Jcode.pmとjcode.plが同じだと思ってる香具師が紛れ込んでるな
Jcode.pmはconvert($text, $encoding)のような書き方にも対応してるが
304nobodyさん:03/07/07 10:43 ID:???
GD よく知らんけど、FreeBSD なら Ports に japanese/gd があるよ。
305nobodyさん:03/07/07 10:54 ID:???
>>303
違うのはわかるけど、マニュアルに

Jcode::convert($str, [$ocode, $icode, $opt]);

jcode.pl Users: This function is 100% upper-conpatible with jcode::convert() !

こう書いてあったからjcode.plでやってみただけ
306nobodyさん:03/07/07 11:00 ID:???
>>299
昔、knj2gifというCのソースを配ってる方がいらっしゃいましたが、
もう配布をやめちゃってるようです。10年くらい前の話ですが・・・。

少なくともImageMagickで日本語化に成功してる人はいるので、
何かしら設定ミスがあると思うのですが。

>>305
「Upper-Compatible」ってのは、
「jcode.plのスタイルで書いてもエラーを起こさない」
だけで、
「jcode.plのスタイルでエラーならJcode.pmのスタイルでもエラー」
って意味じゃない。

どうでもいいけど、こがいさん「compatible」の綴り間違えてるね>ドキュメント
307nobodyさん:03/07/07 12:18 ID:???
  $houselist[0] = {
    "bukken" => "EUCの文字",
    "basyo" => "EUCの文字",
    "comment" => "EUCの文字",
  };
  $houselist[1] = {
    "bukken" => "EUCの文字",
    "basyo" => "EUCの文字",
    "comment" => "EUCの文字",
  };
  $houselist[2] = {
    "bukken" => "EUCの文字",
    "basyo" => "EUCの文字",
    "comment" => "EUCの文字",
  };


っていうリファレンスの、「EUCの文字」という部分を、
jcode.plを使って全部sjisにしたいのですが、
どのようにすればいいのでしょうか?

for ($i=0;$i<=$#houselist;$i++){
  #この部分が不明です・・・・
}
308nobodyさん:03/07/07 14:00 ID:???
>>307
jcode'convert( *houselist, 'sjis' );


※基礎学習に時間をかけましょう
309nobodyさん:03/07/07 14:02 ID:???
>>308
& 抜けてた。

&jcode'convert( *houselist, 'sjis' );
310307:03/07/07 15:15 ID:???
>>308-309
とすると、hosuelistの中身がまったくなくなってしまうのですが・・・
(&jcode::convert(*houselist, 'sjis' ); の1行をコメントアウトすると、
文字化けした状態で表示されます)

(ちなみに、HTML:Template のLOOP使って表示させてます)
311nobodyさん:03/07/07 15:21 ID:???
最近勉強を始めた者なんですが疑問が出てきたので教えて下さい。

例えば(.*)は$1で取り出せる?訳ですが、
これを一度に複数扱う場合はどうすれば良いのでしょうか?
(.*)(.*)とあった場合は$1,$2って具合で良いのですか?
判り難いかもしれませんがお教え下さい。
312wakaba:03/07/07 15:35 ID:rYaKDTZH
298の件で、みなさんご回答どうもありがとうございます。

>304 さんへ
レンタルサーバ管理会社に
Ports の japanese/gd で GDが日本語化するか確認してみます。
ただ、GIFを使用したいので、
現在GDはあえてversionの古いものを使用しています。
(最新版のGDはGIFが使用出来ない、とのことでしたので。)
よってGDは今回の目的で使用出来ない可能性が高いです。

>306 さんへ
Cは当方よく解らないので、当座の解決として難かしいものがあります。
ImageMagickで日本語化に成功している人がいる、とのことですので、
レンタルサーバ管理会社にImageMagickの設定を再度チェックさせる方針で
臨んでみます。

みなさんどうもありがとうございました。
また解決しましたら、顛末を記入させて頂きます。
313nobodyさん:03/07/07 15:39 ID:???
>>311
それでええよ。
314wakaba:03/07/07 15:58 ID:rYaKDTZH
>>307 さんへ
盲人が盲人の手を引くようで気がひけますが。。。

foreach(@houselist){
jcode::convert(\$_->{bukken} , 'sjis' );
jcode::convert(\$_->{basho} , 'sjis' );
jcode::convert(\$_->{comment}, 'sjis' );
}

これで変換されませんか?
315nobodyさん:03/07/07 15:58 ID:???
>>307
ほい。
jcode::convert(\$houselist[$i]->{$_}, 'sjis') foreach (keys %{$houselist[$i]});

自分なら、ハッシュに展開する前か、表示する直前(フォーマットを整えてから)に
変換するけどね。
316307:03/07/07 16:34 ID:???
>>314-315
ありがとうございます。たすかります。
いちおう汎用的に、>>315さんの方法を使わせてもらいました。
317nobodyさん:03/07/07 16:39 ID:???
金額でよくやるように、
12345678 を、12,345,678 に変換するにはどうすればいいのでしょうか?
318nobodyさん:03/07/07 16:41 ID:???
>314
コシキタソですか?
まぁいいですが、、る
319nobodyさん:03/07/07 16:46 ID:???
>>317
Perlメモ嫁
320317:03/07/07 17:37 ID:???
>>319
お、どうもです
321nobodyさん:03/07/07 18:41 ID:???
perlメモに丸投げしたくなるほど面倒ではある
322nobodyさん:03/07/07 18:52 ID:???
GDってUniCodeのみじゃなかったっけ?
323nobodyさん:03/07/07 23:41 ID:C7AyQ56A
sort関数に関して、質問させていただきます。

sort {$form{$a} <=> $form{$b}} keys %form
このように定義したのですが、これでは未定義の値が数値より上に
きてしまいます。
sort {($form{$a} <=> $form{$b}) <=> ""} keys %form
こんな感じでやったりいろいろ試したのですが、どうしても数字が
上にきてくれません。

ご存知方がいらっしゃいましたら、教えてください。
宜しくお願いいたします。
324あぼーん:あぼーん
あぼーん
325 ◆hMJAPH9PWA :03/07/08 00:02 ID:???
>>323
未定義値は数値に変換すると0になるからだよ。
後ろに行って欲しいならありえないくらい大きな値にすればいい。
my $infinity = 10000 ** 10000;

# 方法その1

@result = sort {
(defined($form{$a}) ? $form{$a} : $infinity)
<=> (defined($form{$b}) ? $form{$b} : $infinity) } keys %form;

# 方法その2 "シュワルツ変換"イディオムを使う。
# データが多い場合はこっちの方が速い。

@result = map{ $_->[0] }
sort{ $a->[1] <=> $b->[1] }
map{ [ $_, defined($form{$_}) ? $form{$_} : $infinity ] } keys %form;


326nobodyさん:03/07/08 00:17 ID:???
@result =
sort { not defined $form{a} <=> not defined $form{b} }
sort { $form{$a} <=> $form{$b} } keys %form;
327nobodyさん:03/07/08 00:35 ID:???
>>323
sort {$form{$b} <=> $form{$a}} keys %form

にしる。
328nobodyさん:03/07/08 00:40 ID:???
>>325-326
うーん、どうもうまくいきません。
同じように数字が下にきてしまいます。
もう少し調べてみます。

>>327
ご返答有難うございます。
参考にさせていただきます。
329nobodyさん:03/07/08 00:42 ID:d6QOcge5
スタイルシートの
<input type="submit" value="送信"style="background:#ffffff"
onmouseover="this.style.background='#000000'"
onmouseout="this.style.background='#ffffff'"> 
を、.cgi内の
<input type=submit value=\"送信\"> 
に組み込みたいのですが
どこをどう変えればいいのでしょうか?
教えてください。
330nobodyさん:03/07/08 00:44 ID:???
>>329
Perlのコーディングとは全くもって関係ないので、
どっか失せてください。主にWeb製作板あたりに。
331329:03/07/08 00:53 ID:???
失礼しました。
逝ってきます。
332nobodyさん:03/07/08 01:05 ID:???
>>328
ごめんな。動作確認してなかった。

@result =
sort { !defined $form{$a} <=> !defined $form{$b} }
sort { $form{$a} <=> $form{$b} }
keys %form;

優先度がnotよりも<=>の方が高いし…
333nobodyさん:03/07/08 01:07 ID:???
あ、ソート後の順番は、元の順番が尊重されるという保証は無いか…思考中
334nobodyさん:03/07/08 02:11 ID:???
>>323
´−`).oO(素直に最初に分けたらあかんの…?)
my(@defined_key, @undef_key);
defined $_ ? push @defined_key, $_ : push @undef_key, $_ for keys %form;
my @result = (sort { $form{$a} <=> $form{$b} } @defined_key), @undef_key;
335250:03/07/08 02:26 ID:gC7FPuyS
>>266
Effective Perl
名前は聞いたことはありましたが、改めてネットでいろいろと
レビュー見てみました。
なんか、とってもそそられる本のようで、仰るとおり
値段もそんなに高くないし、何しろあまり厚そうじゃないのが
よさそうです。
何しろperl DBIと、あとプログラミングperl第三版のどっちかの
二冊抱えて電車乗ってるんです、最近。。。。
重いんですが、つい抱えて出かけてしまうのです。

紹介、ありがとうございました。
336nobodyさん:03/07/08 02:51 ID:???
>>332,334
それでやってもいきませんでした、、、
うーん、深いです、、、
考えるだけ考えてみたいと思います。
いろいろとご支援有難うございます。
337nobodyさん:03/07/08 03:21 ID:???
LWP に付いて質問です

#!/usr/bin/perl

use LWP::UserAgent;

$ua = LWP::UserAgent->new;
$ua->agent("$0/0.1 " . $ua->agent);

$req = HTTP::Request->new(GET => 'http://www.yahoo.co.jp/');
$req->header('Accept' => 'text/html');

# リクエストの送信
$res = $ua->request($req);

# 出力のチェック
if ($res->is_success) {
print $res->header; # ヘッダー全体を出したいっ!!
print $res->content;
}
else {
print "Error: " . $res->status_line . "\n";
}



print $res->header; のところで、レスポンスヘッダー全体を出力したいのですが、
何故か、空が返されます
338nobodyさん:03/07/08 03:38 ID:???
339262:03/07/08 10:48 ID:yiVOHQJT
>>262です。亀でスンマセン。
もう一度ソース貼ります。

eval{ flock(FILE,2); };
if($@){ &MkDIR ; }

$@ は直前の eval のエラーが格納されるということで
flock 関数が使えなかった場合の保険に mkdir でロックしたい。
ということなんです。
けど、エラーが出ないということは $@ には何も入らないという事になるんでしょうか?
結局はflock が使えるのか使えないのかを知りたいということなんですが判断の仕方が解らないんです。
最初から他のファイルロック方法を実現しろという話は無しの方向で。
ご意見お願いします。
340nobodyさん:03/07/08 11:11 ID:???
>>339
エラーなしならヌル
って単にevalの戻り値を知りたかっただけかよ
341339:03/07/08 11:31 ID:???
>>340
本当に $@ にエラーが入るのだろうか?
と思いまして。はい。
flock 関数のころし方も分らないんで確認できなくって。
342nobodyさん:03/07/08 11:51 ID:???
>>341
Windowsだと、9x系はエラー(かどうかは分からんが、evalらずに素で実行すると
スクリプトは停止)になるよ。
ちゃんと確認したいところだけど、うちは全部NT系にしちゃったんで。
343nobodyさん:03/07/08 12:17 ID:???
>>338
レスありがとうございます。しかし、期待したデータではありませんでした…。
期待するデータは HTTP/1.x 200 OK とかサーバーが返すレスポンスヘッダーなんです。
344nobodyさん:03/07/08 12:34 ID:???
>>343
ヘッダじゃなくレスポンスコードだろ

>print $res->header; # ヘッダー全体を出したいっ!!

print $res->code . $res->message;
345nobodyさん:03/07/08 13:02 ID:???
>>343
6.1 ステータスライン
レスポンスメッセージの最初の行は、プロトコルのバージョン、ステータスコード番号、それに関連したテキストフレーズからなるステータスラインで、それぞれの要素は、SP によって分けられる。最後の CRLF シーケンス以外には、CR も LF も許されない。

Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF

6.2 レスポンスヘッダフィールド
レスポンスヘッダフィールドを用いて、サーバはステータスラインに置けないレスポンスに関する追加的な情報を渡すことができる。これらのヘッダフィールドは、サーバについてや、 Request-URI によって識別されるリソースへの更なるアクセスに関する情報を与える。
346nobodyさん:03/07/08 13:11 ID:???
>>344
すいません…。

HTTP/1.0 200 OK
Date: Tue, 08 Jul 2003 04:10:07 GMT
Server: Apache/2.0.46 (Unix) mod_perl/1.99_09 Perl/v5.8.0 mod_ssl/2.0.46 OpenSSL/0.9.6g DAV/2 FrontPage/5.0.2.2634 PHP/4.3.2 mod_gzip/2.0.26.1a
Last-Modified: Tue, 08 Jul 2003 04:09:31 GMT
ETag: "84f45-3d4e-63ccb4c0"
Accept-Ranges: bytes
Content-Length: 15694
Vary: Accept-Encoding
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/plain

↑こういうのが欲しいんです。
347nobodyさん:03/07/08 13:49 ID:???
>>346
お前はアホか。
http://member.nifty.ne.jp/hippo2000/perltips/HTTP.html
をディスプレイに穴があくほど読め
348nobodyさん:03/07/08 14:22 ID:???
>>323
my @result = sort { !defined $form{$a} ? 1 :
(!defined $form{$b} ? -1 : $form{$a} <=> $form{$b}) } keys %form;

こういうことじゃなくて?
それとももっとスマートに書けってこと?
349nobodyさん:03/07/08 14:22 ID:+KcPoM6i
見ず知らずのサーバー上に置いてあるCGI(Perl)プログラムの
内容を見るって可能なの?
HTMLだったら簡単に見れるよね。それに、たとえば、abde.pl
ならば、その置き場がわかれば、ブラウザにURLを入力すると
ダウンロードできる。でも、cgiなら勝手に実行してしまう...。
何か方法あるのかな?
350nobodyさん:03/07/08 14:30 ID:???
う〜ん、解らないな…。

print $res->headers->header;

ってやっても何も表示されないし…
私の期待しているデータって入ってないのカナ?
351nobodyさん:03/07/08 14:30 ID:???
はるか昔ショボイサーバで、http://???.com/example.cgi/
最後に / を付けてアクセスすると、内容が表示されたという事がありました。
352あぼーん:あぼーん
あぼーん
353nobodyさん:03/07/08 14:49 ID:???
>>351
リムネットとかリムネットとか、あとリムネットとかですね。
354nobodyさん:03/07/08 14:56 ID:???
>>349
興味あるぞ、これ。
.pl ならDLして、.cgi や.html ならDLせず、画面に表示するという
事をどこで定義しているんだろうか?IEにはそんなのを
指定するところないぞ。
.pl に実行属性を持たせた後、ブラウザに入力したけど
やっぱりDLになった。という事は、クライアントサイドで
定義しているのは確か。
355nobodyさん:03/07/08 14:57 ID:???
>>354
ワラタ。ネタですか?
356nobodyさん:03/07/08 15:04 ID:???
同じくワラタ
357nobodyさん:03/07/08 15:04 ID:???
>355
だめだよ、そっとしておいてあげないと
358nobodyさん:03/07/08 15:19 ID:???
>>349>>354
そういうおもしろい話はPerl上級者コーナーとかでやってほしいなー
359nobodyさん:03/07/08 15:49 ID:+KcPoM6i
349ですけど、354さんはおかしい事言ってるんですか?
初心者なので、教えてください。
そして、もし、サーバー上のCGIソースを見る方法を
ご存知なら教えて頂けないでしょうか。
よろしくお願い致します。
360nobodyさん:03/07/08 15:53 ID:VzazIByi
>>359
みんなに怒られそうだけど、一応マジレスすると、CGIのソースが見られる
状態ってのはセキュリティ・ホールなわけ。だからマトモなサーバーで
CGIソース丸見えってのはありえないと考えてよい。

まぁ、間抜けな管理者のサーバーだと***.cgi/とか、***.cgi~ とか、***.cgi.bakとか探すと
あっさり見られたりするけど、そういうのは覗き見趣味と言ってあんまり良い趣味じゃないです。
361nobodyさん:03/07/08 15:59 ID:???
>>359
CGIがsuEXECで動作するサーバ(パーミッションが700でいいところ)では出来ない。
362349:03/07/08 16:02 ID:+KcPoM6i
>>360
マジレス、ありがとうございました。
大変参考になりました。
363nobodyさん:03/07/08 16:38 ID:???
>>354の出番
364nobodyさん:03/07/08 16:43 ID:???
RSSを表示したいんですが、文字コードの変換が上手くいってないらしく、

Wide character in print at 〜
と、エラーがでてしまいます。
たすけてっ



use LWP::Simple 'get';

use XML::RSS;

use Jcode;


$url = 'http://japan.linux.com/japanlinuxcom.rdf';

$rss = new XML::RSS;
eval { $rss->parse(get($url)); };

print Jcode->new(${$rss->{items}}[0]->{title})->sjis;
365nobodyさん:03/07/08 16:57 ID:???
文字列比較のcmp は、ひらがなやカタカナについてはあいうえお順になるのでしょうか?
366nobodyさん:03/07/08 17:00 ID:???
>>365
なぜ自分でやってみないんだ?
367364:03/07/08 17:00 ID:???
質問するばっかりじゃアレなんでマジレス。



>>354

Webサーバで設定します。

http://httpd.apache.org/docs-2.0/ja/mod/mod_cgi.html
368nobodyさん:03/07/08 18:15 ID:???
>>365
文字コード順。
どっかから文字コード表を探してきてよく見てみれ。
369nobodyさん:03/07/08 18:32 ID:???
cgiを指定した時間に勝手にwebサーバーで実行したいのですがどうすればいいでしょうか?
370nobodyさん:03/07/08 18:34 ID:???
>369
指定した時間に目覚ましで起きる!
or
cron

散々外出
371337:03/07/08 19:01 ID:???
あれから、色々やってもさっぱり解りません。疲れました…。

print $res->headers->header;

これやっても出ないってことは、無いという事でいいんでしょうか?
372nobodyさん:03/07/08 19:19 ID:???
as_string
373337:03/07/08 19:38 ID:???
>>372

$res->as_string だと、内容(content)も表示されてしまいます。
どっちにしろ $res->headers->as_string も Location: とかの
データがありませんし…。

HTTP/1.1 200 OK
Date: Tue, 08 Jul 2003 10:28:34 GMT
Location: http://www.google.co.jp/
Content-Type: text/html
Server: GWS/2.1
Content-length: 2716
↑Proxomitron 等で見た場合

HTTP/1.1 200 OK
Cache-Control: private
Date: Tue, 08 Jul 2003 10:26:56 GMT
Server: GWS/2.1
Content-Length: 2716
Content-Type: text/html
Content-Type: text/html; charset=Shift_JIS
Client-Date: Tue, 08 Jul 2003 10:26:47 GMT
Client-Peer: 216.239.57.99:80
Client-Response-Num: 1
Cneonction: Close
Title: Google
↑こんな感じで出てくる

LWP では勝手に間引きしたり、追加されたりするものと理解していいのでしょうか?
374nobodyさん:03/07/08 20:06 ID:???
>>369
おまいはiswebとかxareaで実行したい初心者か?
そんなとこじゃ、cronはないよ。
375nobodyさん:03/07/08 20:52 ID:???
>>369
クライアント自分で作れ。
>>374
そもそもcronから実行した時点でCGIとは呼ばないしね。
376nobodyさん:03/07/08 21:55 ID:EC6mm4rU
>>364
Help!!
377あぼーん:あぼーん
あぼーん
378nobodyさん:03/07/08 22:29 ID:SfDnct30
プログラムからcrontabにスケジュール追加する時、
通常はどうやって追記してますか。

var/spool/cronを直接いじってもいいのですが、
何か効率のいい方法がありましたら教えてください。
379あぼーん:あぼーん
あぼーん
380nobodyさん:03/07/08 22:30 ID:???
ああ、ごめんなさい。
/var/spool/cron内はroot以外入れないですね。
それだとなおさら何か方法あるのか疑問です。
381nobodyさん:03/07/08 22:33 ID:???
crontab -e
スレ違いだYO!
382nobodyさん:03/07/08 23:03 ID:???
$ORG[0]->{kana} = "カリフォルニア";
$ORG[1]->{kana} = "ロンドン";
$ORG[2]->{kana} = "アラバマ";
$ORG[3]->{kana} = "アラスカ";
・・・てかんじで、地名が入っているんですが、

これを並び替えたいと思ってます。
その基準は、
(1)あらかじめ定められたいくつかの地名は、優先的に、定められた順番で表示
(2)それ以外の地名は、その後にアイウエオ順で表示
です。

(1)の地名は、@seq = ("ニューヨーク","ロンドン","パリ"・・・・);
というように(この順番で)格納されているものとします。


(2)だけなら、

@tmp = sort { (${ORG[$a]->{kana}} cmp ${ORG[$b]->{kana}}) } 0 .. $#ORG;
foreach (@tmp) { push(@tmp_ORG,$ORG[$_]);}
@ORG = @tmp_ORG;
undef @tmp_ORG;
でいいとわかるんですが・・・。

これのどこに(1)を組み込めばいいのか・・・
383nobodyさん:03/07/08 23:11 ID:???
>>381
いや、ターミナル上ではなくてperlでスケジュールを追加したいの
ですが、何か方法はないですか
384nobodyさん:03/07/08 23:54 ID:???
>>375
クライアントを作るとはどういうことですか?
385:03/07/09 00:12 ID:6fG8Iq33
>>382
こんな感じか?

my @seq = ("ニューヨーク","ロンドン","パリ");
my %hseq;
my $n = 0;
foreach my $i (@seq) { $hseq{$i} = ++$n; }
my @ORG;
$ORG[0]->{kana} = "カリフォルニア";
$ORG[1]->{kana} = "ロンドン";
$ORG[2]->{kana} = "アラバマ";
$ORG[3]->{kana} = "アラスカ";
$ORG[4]->{kana} = "パリ";
sub ordfunc {
my $aa = $a->{kana};
my $bb = $b->{kana};
if (defined $hseq{$aa}) {
return defined $hseq{$bb}? ($hseq{$aa} <=> defined $hseq{$bb}):-1;
} else {
return defined $hseq{$bb}? 1:($aa cmp $bb);
}
}
my @a = sort ordfunc @ORG;
$n = 0;
foreach my $i (@a) {
printf "%d: \"%s\"\n", $n++, $i->{kana};
}
--
俺的ポータルサイトを作ろう
http://mysite.ddo.jp/
386あぼーん:あぼーん
あぼーん
387:03/07/09 00:20 ID:6fG8Iq33
>>385
すまん、一箇所間違ってた。
>return defined $hseq{$bb}? (defined $hseq{$aa} <=> $hseq{$bb} ):-1;
<return defined $hseq{$bb}? (defined $hseq{$bb} <=> $hseq{$aa} ):-1;
388あぼーん:あぼーん
あぼーん
389nobodyさん:03/07/09 07:37 ID:???
>>384
LWPモジュール使わずにソケット使って通信するプログラムを作れと言っている。
既存のモジュールの機能に満足できないのであれば、自作するしかないだろ?
390nobodyさん:03/07/09 13:02 ID:???
>>373
>Location: とかのデータがありませんし…。
ProxyomitronとLWPは全く同じリクエストを送ってるのか?
Host指定するとLocationは来ないぞ。↓参照

$ telnet www.google.com 80
Trying 216.239.39.101...
Connected to www.google.com.
Escape character is '^]'.
HEAD / HTTP/1.1
Host: www.google.co.jp
Connection: close

HTTP/1.1 200 OK
Content-Length: 2716
Server: GWS/2.1
Date: Wed, 09 Jul 2003 04:01:05 GMT
Content-Type: text/html
Cache-control: private
Set-Cookie: PREF=ID=2f2a324164376c04:LD=ja:TM=1057723265:LM=1057723265:S=N4MltwrSeSo_i7Vp; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.co.jp

Connection closed by foreign host.
391nobodyさん:03/07/09 13:05 ID:???
>>373
とりあえずLWP::UserAgent->new(parse_head => 0);にしたら

Content-Type: text/html; charset=Shift_JIS
Title: Google

は消える。
これはHTMLのHEAD内を解析して取ってくるオプションだから。

で、Client-XXXはソース見たらLWP::UserAgentが勝手に埋め込んでるみたいだな。
こいつは抜き取るしかなさそうだが、同じ名前で送られてこないとも限らないか。

Locationはリダイレクト。
http://www.google.com/にリクエストしてhttp://www.google.co.jp/に行けって言われてるんじゃないの
これはデフォルトがリダイレクト先を取得する設定になってるから出てこない。
リダイレクトしないように設定すればおけ。

Cneonctionについてはぐぐってくれ;-)
※Connectionじゃないのなw

というわけで、
$ua = LWP::UserAgent->new(parse_head => 0, requests_redirectable => []);
みたいにオプションつけて、HEADで取得、Client-XXXを適当に消す、って感じか。
オプションの意味についてはちゃんと自分で調べてくれよ。

あとリダイレクトなんかで$res->is_successが偽になる場合もあるから注意。
302 Foundとかね。


まあ、純粋なヘッダが欲しいんなら自分で作った方がいいかもしれないけどね。
392nobodyさん:03/07/09 13:20 ID:???
>>373
print $res->headers_as_string; じゃダメなの?

Cache-Control: private
Date: Wed, 09 Jul 2003 04:15:46 GMT
Server: GWS/2.1
Content-Length: 2716
Content-Type: text/html
Content-Type: text/html; charset=Shift_JIS
Client-Date: Wed, 09 Jul 2003 04:15:47 GMT
Client-Peer: 216.239.57.99:80
Client-Response-Num: 1
Cneonction: Close
Set-Cookie: PREF=ID=4bbf69507377e862:LD=ja:TM=1057724146:LM=1057724146:S=ISp-xtd
7MZcyLh4p; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.co.jp
Title: Google
393nobodyさん:03/07/09 13:31 ID:???
こっちはYahooね

Cache-Control: private
Connection: close
Date: Wed, 09 Jul 2003 04:28:10 GMT
Pragma: no-cache
Content-Type: text/html;charset=euc-jp
Client-Date: Wed, 09 Jul 2003 04:28:10 GMT
Client-Peer: 210.81.150.5:80
Client-Response-Num: 1
P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p.xml", CP="CAO DSP COR CUR ADM
DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY O
NL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
Title: Yahoo! JAPAN
394nobodyさん:03/07/09 13:55 ID:???
>>392
それは$res->headers->as_stringと同じだろ。
この結果は>>373でお気に召さないと書いてある。
395337:03/07/09 14:19 ID:???
>>391-394
レスありがとうございます。

> というわけで、
> $ua = LWP::UserAgent->new(parse_head => 0, requests_redirectable => []);
> みたいにオプションつけて、HEADで取得、Client-XXXを適当に消す、って感じか。
> オプションの意味についてはちゃんと自分で調べてくれよ。

おおかた、>>391 さんの言っている事が理解できました。
あとは、自分で調べてやってみます。

※使っている PC がへぼいせいかもしれませんけど、
LWP の最初のロードが遅いですね
396nobodyさん:03/07/09 18:32 ID:T8daMjJB
結局、perlスクリプトでcrontabを操ることは
不可能なのでしょうか。
できるならcrontab編集ツールとか作りたいの
だけど、、、
397nobodyさん:03/07/09 18:50 ID:???
「crontab -」で標準入力から突っ込むことができるから、たいして難しくないでしょ?
むしろ、運用の方が大変じゃないかなぁ。
何を突っ込まれるか分からないわけだし。
398nobodyさん:03/07/09 19:36 ID:???
>>387
お返事有難うございます。
ええと、初心者のためいまいちイメージが湧きません。
標準入力から書き込む、ということは具体的にどういったことでしょうか。
度重なる質問すみません。
399nobodyさん:03/07/09 20:14 ID:???
>>398
標準入力へ書き込むって事じゃ?

open( CRONPIPE, "| crontab - " );
 ・
 ・
 ・
close( CRONPIPE );
400nobodyさん:03/07/09 20:50 ID:???
400 GET

  _,,..i'"':,
  |\`、: i'、   ≡≡≡(´⌒;;;≡≡≡
  .\\`_',..-i
   .\|_,..-┘ ズサーーーーーー

401nobodyさん:03/07/09 20:57 ID:???
プラットフォームに依存しない CD-ROM ドライブアクセスモジュールって無い?
402nobodyさん:03/07/09 21:10 ID:PDgcqehQ
>>401
Perlじゃないよヴォケ。JavaScript逝けや
403nobodyさん:03/07/09 21:17 ID:???
>>402
ハァ?
404nobodyさん:03/07/09 21:26 ID:???
>>402
わざわざageで。ご苦労なこった。
405nobodyさん:03/07/09 21:39 ID:???
>>399
isweb,xareaはcrontabが禁止されてる。
406nobodyさん:03/07/09 23:31 ID:???
SQLの話かもしれないけど、
mysqlで、主キーにAUTO_INCREMENTついたテーブルに
insertした場合、insert後に主キーが何になったかを知る方法ってありますか?
DBIつかってて、今は、普通に$dbi->do(..でSQL文発行してます。。
407nobodyさん:03/07/10 00:34 ID:MG1pWe0Y
>>403=>>404
無能がそろいもそろって・・・・
408nobodyさん:03/07/10 02:24 ID:???
みんな書けよ。
409nobodyさん:03/07/10 02:25 ID:???
Perlスレを盛り上げよう。
410nobodyさん:03/07/10 02:30 ID:izTOLa86
掲示板で使っているクッキーを別のcgiで使う
ってことはできますか?
レスキューのminibbsのちょっと前のを使っているのですが
そのまま使うと掲示板自体を表示しちゃうんです
411nobodyさん:03/07/10 02:33 ID:???
意味わかんない
412nobodyさん:03/07/10 02:46 ID:izTOLa86
つまり
投稿してクッキーとして記録された名前などを、別のcgiで流用し
たいのです。
元のBBSのスクリプトのクッキー部分を移植すると動作はしますが、
その後にその掲示板が表示されてしまうのです。 これです、行間詰めてます。
$reloadに掲示板のURLが設定してあるのです。

$cookies= $ENV{'HTTP_COOKIE'};
@pairs = split(/;/,$cookies);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$name =~ s/ //g;
$DUMMY{$name} = $value;
}
@pairs = split(/,/,$DUMMY{$reload});
foreach $pair (@pairs) {
($name, $value) = split(/:/, $pair);
$COOKIE{$name} = $value;
}
413nobodyさん:03/07/10 02:52 ID:???
>>399
ありがとうございます。
なんとなくイメージが湧きました。
これからやってみますね
414nobodyさん:03/07/10 03:34 ID:???
>>412
cookieに何を書き込むかは発行するCGIが決める。
読んだcookieのどの部分を使うも読んだCGIが決める。
ルーチン丸ごと使うからそんなことになるんだよ。
415あぼーん:あぼーん
あぼーん
416あぼーん:あぼーん
あぼーん
417nobodyさん:03/07/10 06:46 ID:???
>412
頭悪いと大変ですね。
418nobodyさん:03/07/10 09:35 ID:wjfeVSSe
>>414
頭悪くて申し訳ないですけど、
解決策教えてもらえないですかね?
頼みます。
419nobodyさん:03/07/10 09:40 ID:???
>>418
通り掛りのもんだけど、
$reloadに新しいページを入れた?
420nobodyさん:03/07/10 10:45 ID:hGiFYAot
はい
いれるとクッキーの取得ができません
421nobodyさん:03/07/10 10:57 ID:???
あはは、別のCGIで取得したcookieを利用するんなら、
そっちのCGIをrequireするか、cookieで取得した値を
ファイルに書き出しとかなきゃだめじゃん。
requireするのは、やってる内容にもよるがたぶん無理。
つか、あなたの腕では、ファイルに書き出すのもたぶん
無理。
422nobodyさん:03/07/10 11:16 ID:DU/pTK24
そうですか、ファイルに書き出すとたぶん
環境変数で書き出した値と照合するしかないですよね?
これでは特定が完全ではないでしょう?

ならば、本体のbbsでルーチン組んで動作分離させるか、
別のcgiから一旦bbsを起動させて動作分技させます
htmlファイルを書き換える仕様にしているのですが、
すでに膨大なリンクがあるので後者で済ましたいです。

上手くいかなかったらまた質問します。
423あぼーん:あぼーん
あぼーん
424nobodyさん:03/07/10 11:41 ID:???
>>422
$cookies= $ENV{'HTTP_COOKIE'};
@pairs = split(/;/,$cookies);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$name =~ s/ //g;
$DUMMY{$name} = $value;
}

これだけ使えばいいじゃん
それぞれのCGIからcookieを書き込むときに

print "Set-Cookie: NAME=name; expires=$wday, $mday-$mon-$year 00:00:00 GMT; path=/\n";
print "Set-Cookie: MAIL=mail; expires=$wday, $mday-$mon-$year 00:00:00 GMT; path=/\n";

のようにしてpathを強制的にサイトのルートにしちゃえばいいんだよ
そうすればどのCGIからも同じcookieで読み書きできるようになる
425nobodyさん:03/07/10 11:49 ID:???
>>424
やるなら書き込み後にcookieのファイルを開いて自分のアカウントの
ルートになっているか確認してね。
426nobodyさん:03/07/10 12:52 ID:uIFBr8e3
<input type="radio" name="site_ja" value="1">あり
<input type="radio" name="site_ja" value="0">なし

から送られる値を、
$in{site_ja}に格納しているのですが、
どちらのボタンを押されていない場合、
エラーを出したいと思っています。

で、
if (!defined($in{site_ja})){$HtmlErrorText .= "<li>日本語版サイトを選択してください</li>";}
で判断しようとしたのですが、
if文が偽になってしまって、エラーが出せません。
どうしてなのでしょうか・・・?
427nobodyさん:03/07/10 12:55 ID:???
if ($in{site_ja} == 0)じゃいかんのか。
値が0でもdefineはされてるだろ。
428nobodyさん:03/07/10 12:59 ID:???
>>426
definedを使ったから。existsを使えばいい。
429nobodyさん:03/07/10 13:00 ID:???
<input type="radio" name="site_ja" value="1">あり
<input type="radio" name="site_ja" value="0" checked>なし
or
<input type="radio" name="site_ja" value="on">あり
<input type="radio" name="site_ja" value="off">なし

(´-`).。oO(こうすれば悩まなくて済むのになぁ・・・)
430あぼーん:あぼーん
あぼーん
431nobodyさん:03/07/10 14:14 ID:mUbItvZA
$p=int(rand(8));
について、連続で同じ数字は
出ない様にしたいです。
例えば1回目が3なら、
2回目は3が出ないように。
すいませんけど、どうやるのか、
教えて下さいませ。
432426:03/07/10 14:30 ID:???
>>427
どっちのボタンも押されてないと、値はNullだと思うのですが・・・かんちがいしてる?

>>428
if (!exists($in{site_ja})){$HtmlErrorText .= "<li>日本語版サイトを選択してください</li>";}
に変えてみたのですが、
症状が変わらないのですが・・・・
433nobodyさん:03/07/10 15:03 ID:???
>>432
どっちかボタンを押すように言え。
押さないような香具師はアボーン汁。
434nobodyさん:03/07/10 15:13 ID:???
>>432
チェックされていなければ、site_jaは送信されてこない。
よってvalueも存在しないからNull判定でやってはダメ。

definedでやった場合は変数が未定義ならいいが、予約された
変数の場合は保証されない。
existsならハッシュのキーの有無で判定できる。

テストしてみたが、!existsでちゃんと処理できた。
435nobodyさん:03/07/10 15:30 ID:???
>>431
まずはクッキーでもファイルでもセッションでも良いから
何かで記憶させておかないといけないでしょ。
それが出来たらまたおいで。
436426:03/07/10 15:50 ID:???
>>434 さんの言うことはすごく理解できました。(existsの意味勘違いしてた)
ありがとうございます。

しかし、
if (!exists($in{'site_ja'})) {$HtmlErrorText .= "<li>日本語版サイトを選択してください</li>";}

としても、スルーされてしまいます・・・
どこかケアレスミスしているんだろうか・・・
437436:03/07/10 15:52 ID:???
すいません、ケアレスミスでした。ごめんなさい。

if($HtmlErrorText) {&HtmlError($HtmlErrorText);}
の一文をいつのまにか消してました・・・

ごめんなさい。
if (!exists($in{'site_ja'})) {$HtmlErrorText .= "<li>日本語版サイトを選択してください</li>";}
でばっちりです。
438nobodyさん:03/07/10 17:04 ID:mUbItvZA
すいません。
$v -= int(sqrt($ud)) if($bst =~ /S/);
の意味を分かる範囲で教えて下さい。
因みに、$ud は防御力です。
439nobodyさん:03/07/10 18:11 ID:???
$bst =~ /S/ が真(true)だったら、$vからsqrt($ud)を引いたものを新しい$vとする。
440nobodyさん:03/07/10 18:14 ID:???
もし$bstにSという文字が入っていたら
防御力の平方根を求め、小数点以下を切り捨てる。
$vからその値を減算したものが$vになる。
441nobodyさん:03/07/10 18:54 ID:???
IDとパスワードをフォームに入力してもらったあと、
foo.cgiにとんで、そのあとアクセスをカウントしたあと、
そのIDとパスワードを、
保持したまま、別のlogin.cgiにとびたいんですが、
Location:http://www.xxx.ne.jp/login.cgi?id=$id&pass=$pass
だと、
idとpassがURL欄に丸見えでまずいじゃないですか。

で、別の方法(つまりは、getでなくpostメソッドで)
login.cgiに飛べて、
しかもidとpassを渡せる方法ってありませんか?

自分が考えつくのは、
ソケット通信で、
地道にpostメソッドで渡す方法くらいなんですが・・・。

よろしくお願いします。
442nobodyさん:03/07/10 19:23 ID:???
>>441
暗号化
443nobodyさん:03/07/10 19:43 ID:???
セッションで管理する
444nobodyさん:03/07/10 20:20 ID:???
>441
あなたがやりたい方法は JavaScript で出来ますが、
セッション管理やクッキー等、他の方法を利用した方がいいでしょう。
445nobodyさん:03/07/10 20:38 ID:???
>>431
それって乱数といえるのか?
ビンゴのようにするのだったら、必要な数字を配列に入れて乱数で取り出してみるとか。
446nobodyさん:03/07/10 21:39 ID:???
>>431
2つが連続してはいけないのなら、前回の数字を覚えておいて、
* 乱数を取り出したときに一致しているか調べて、一致しなくなるまで繰り返し取り出す
* 前回の数字が存在しないと仮定して、一つ少ない大きさまでの乱数を取り出す。それ>=前回ならば、1増やす

>>445のが答えなら、効率を上げるため、数字が入った配列をかき混ぜて(Perlメモ)前から取り出す。

>>441
順番を逆にすれば?
447nobodyさん:03/07/10 22:06 ID:???
はじめまして。
フォームから誕生日を入力して、その数字を元に占いをさせようと思っています。
数字によって異なる結果を書いたページに振り分けるために

@message = ("aa","bb","cc", 〜 );

として移動先のURLの一部を記述しておき、

$buf = $ENV{"QUERY_STRING"};
($year,$month,$day) = split(/&/,$buf);
($tmp,$value_year)=split(/=/,$year);
($tmp,$value_month)=split(/=/,$month);
($tmp,$value_day)=split(/=/,$day);

$point = ($value_year+$value_month+$value_day) % $num_of_shop;

として数値計算、その結果から

print "Location: http://www.hogehoge.com/result/\$message[\$point].html\n\n";

として振り分けようとしたところ、「ページを表示できません」になってしまうのですが
どうしてでしょうか?

当然ながら移動先のページ(aa.html等)は正しい位置にアップロードしてあります。
448nobodyさん:03/07/10 22:14 ID:???
>>447
そのLocationの値を画面に表示して、正しいURLが生成されているか確認してみよう。
449nobodyさん:03/07/10 22:40 ID:???
ツリー型掲示板の管理モードでツリー削除の他に「過去ログ送り」を
作ってみたのだが現行ログからの削除はできても過去ログへの書き込みがうまくいかないのです

@new=();
open(IN,"$log") || &error("Open Error : $log");

$top = <IN> if (!$in{'past'});
while (<IN>) {
     ($no) = split(/<>/);
     if ($in{'no'} != $no) { push(@new,$_); }
     }
     close(IN);
     unshift(@new,$top);
     open(OUT,">$log") || &error("Write Error : $log");
     print OUT @new;
     close(OUT);
     unlink("$logdir$in{'no'}\.cgi");

     open(OUT,">>$pastfile") || &error("Write Error : $pastfile");
     print OUT "$in{'res'}<>$sub<>$res<>\n";
     close(OUT);
450441:03/07/10 23:03 ID:???
>>443-444
ほんとはセッション管理したいんですけど、
他の部分は全部完成しちゃってるんで、
今さら無理なんですわ・・・(泣)

>>442
会社で>>441のカキコして、帰りの電車で自分も暗号化思いついたんですけど、
暗号化したID/PASS同士で照合するってことですか?

やり方としては、
foo..cgi の中で、
$id = crypt($id) #暗号化
$pass = crypt($pass) #暗号化
Location:http://www.xxx.ne.jp/login.cgi?id=$id&pass=$pass
して、
login.cgi の中で、
サーバに入ってるid と passのデータを暗号化させて、
そいつと、クエリーストリングとしてやってくる、暗号化IDと暗号化PASSを、
照合させると・・・いうことで問題ないですか?
451447:03/07/10 23:09 ID:???
>>448
http://www.hogehoge.com/cgi-bin/form.cgi?year=03&month=7&day=10
となっています。

URLの中に配列変数の中身を文字列として直接入れているのが
エラーの原因なのでしょうか?
452448:03/07/10 23:28 ID:???
>>451
いや、そういうことを言いたかったんじゃないんだが……

print "Location: http://www.hogehoge.com/result/\$message[\$point].html\n\n";
これをいきなりヘッダに出力して「ページが表示できない」じゃなくて、
まず画面にそのまま表示して見られる状態で目視して、変数の展開状況などが
正常かどうか調べてみるべきかと。
453nobodyさん:03/07/11 00:25 ID:???
キタ━━━━(゚∀゚)━━━━!!
http://cgi32.plala.or.jp/mg916/bbs.cgi
454nobodyさん:03/07/11 00:45 ID:???
>>452
print〜の文を画面出力して確認しながら修正を加え、無事動作させることができました。

勘違いが原因だったとは…こんな初歩的トラブルに
親切なご教示ありがとうございました。
455447:03/07/11 00:46 ID:???
>>454=>>447です
456nobodyさん:03/07/11 01:00 ID:???
>>454
大丈夫。Web系の開発で飯食って10年になるけど、エラーの大半は初歩的ミス。
だから、もし人に聞くときはこれでもかというくらい慎重にしなきゃならん。
457447:03/07/11 01:46 ID:???
>>456
どうもです。

また何かトラブったらお伺いするかもしれません。
そのときはよろしくお願いします。
458nobodyさん:03/07/11 02:28 ID:???
ホントだよね。
俺も3時間はまって、もういいや、寝よっと思って布団はいったとたんに気づいたよ。
外のループと内のループのカウンタ変数混同してた。。。。

それもちゃんと動いてたの途中で壊してやんの。

ずーーーとさかのぼっても駄目であきらめて寝よ、と思ったのに、

手許だよ、テモト!!

ぐしゃっ
459nobodyさん:03/07/11 08:27 ID:+GXxdBTx
おはよう。
460あぼーん:あぼーん
あぼーん
461nobodyさん:03/07/11 13:23 ID:XltnJZI3
すいません。
以下のPERLで、敵が普通に反撃する時の
条件はどの様になっているのか、
教えて下さい↓
http://gekiya77.gi-ga.net/cgi/oshiete.txt
見れば分かると思いますが、
$pに1〜6迄のランダムの数字を与え、
それに従い技を出します。
ただ、420行目からある普通の攻撃もして
くる場合があるので、それはどんな条件に
なった時なのか、教えて下さい。
宜しくお願い致します。
462nobodyさん:03/07/11 13:29 ID:???
>>461
600行近くあるソースを「見れば分かる」かよ……
それ以前に何を聞きたいのか不明。日本語の勉強をしてから出直してきてくれ。
463nobodyさん:03/07/11 13:30 ID:???
>>461
if elsif else がわからないのか?
上から条件式で判定してどれにもあてはまらないときに&bogu_bt;で
# 敵キャラ通常攻撃処理のサブルーチンに飛ぶだけだろ。
464401:03/07/11 13:35 ID:???
perlじゃできないってこと?
465461:03/07/11 13:35 ID:XltnJZI3
>>463
分からないから聞いてるんでしょうが。
まあ、とりあえず、どうもでした。
>>462
何を聞きたいのかは充分に書いて
あるでしょうが。
もう、その表現を使えば勝てると
思ってるね、この馬鹿はw
貴方が日本語の勉強をされた方が、
以下略・・・。
466441:03/07/11 13:35 ID:???
>>450にだれかおこたえプリーズ
467nobodyさん:03/07/11 13:47 ID:???
>>465
基本的な文法もわからないようじゃどうにもならんな。
何度か同じような初歩的質問をしているが、もう相手にしない。
ある程度勉強して理解できるようになるまで二度と来るなよ。
468nobodyさん:03/07/11 13:49 ID:???
>>464
「プラットフォームに依存しない」 ← 無理
469nobodyさん:03/07/11 13:52 ID:???
>>466
完璧な安全性が保たれるとは言えないけど、
実用レベルの強度は得られるんじゃない?
470nobodyさん:03/07/11 14:04 ID:???
>>465
まともなコードも書けない時点であんたは負けてんのよ。
471nobodyさん:03/07/11 14:10 ID:???
どうしたのこの子>>465
472nobodyさん:03/07/11 14:15 ID:???
>465 ??

$ whois gekiya77.jp
[ JPNIC & JPRS database provides information on network administration. Its ]
[ use is restricted to network administration purposes. For further infor- ]
[ mation, use 'whois -h whois.nic.ad.jp help'. To suppress Japanese output, ]
[ add'/e' at the end of command, e.g. 'whois -h whois.nic.ad.jp xxx/e'. ]

Domain Information: [ドメイン情報]
[Domain Name] GEKIYA77.JP

[登録者名] 西園修
[Registrant] Osamu Nishizono

[Name Server] ns.gekiya77.jp
[Name Server] dns.wadax.ne.jp

[登録年月日] 2003/06/23
[有効期限] 2004/06/30
[状態] Active
[最終更新] 2003/06/23 18:34:07 (JST)

Contact Information: [公開連絡窓口]
[名前] ワダックス
[Name] WADAX
[Email] [email protected]
[郵便番号] 556-0005
[住所] 大阪府大阪市浪速区日本橋4-1-4-903
[Postal Address] 4-1-4-903,Nipponbashi,Naniwa Ward,Osaka City,
[電話番号] +81(6)6630-6049
[FAX番号] +81(6)6630-6049
473nobodyさん:03/07/11 14:17 ID:???
if文もわからないやつが書いたソースじゃないだろ
拾い物でしょ
474401:03/07/11 14:18 ID:???
>>468
じゃぁ、依存するものでもいいからどっかに転がってませんか?
475466:03/07/11 14:21 ID:???
>>469
その安全性の強度ってのは、ctyptの安全性の強度に依存するって意味ですか?
476nobodyさん:03/07/11 14:28 ID:???
>>401
CD-ROM読むだけなら、モジュールいらねーぞ。普通にopen使えば?
477nobodyさん:03/07/11 14:31 ID:???
>>475
そういうことだね。
478401:03/07/11 15:21 ID:???
>>476
え?俺、リッピングしたいんだけど…
open でできるの?
479401:03/07/11 15:32 ID:???
>>477
ありがとうございます。
480nobodyさん:03/07/11 15:37 ID:???
>>478
依存するものでもいいとかリッピングとか後になってあれこれ言わずに
まとめて書け。
それにスレ違い。
481401:03/07/11 15:47 ID:???
で、どうやるの?
482nobodyさん:03/07/11 16:03 ID:???
>>450
それだと暗号化済みのIDとPASSをコピられたら同じことじゃないの?
あとid、passみたいな分かりやすい名前は止したほうがいいと思う。
483nobodyさん:03/07/11 16:10 ID:???
>>474
そんなモジュールは知らないが、依存してもいいならWin32::APIとか使えば
何かできそうな気がしなくもない。

漏れはリッピングのコードなんて書いたことないから、これで足りるのかも分からんが。
484nobodyさん:03/07/11 16:30 ID:???
485nobodyさん:03/07/11 16:57 ID:H65xN+pz

perlってどういう意味ですか?
486nobodyさん:03/07/11 16:58 ID:H65xN+pz

ていうか何ですか?
487nobodyさん:03/07/11 17:06 ID:???
なんでperlでリッピングするのだろう?
488nobodyさん:03/07/11 17:08 ID:???
>>485
プログラミング言語です。

english,japanease,perl
489nobodyさん:03/07/11 18:02 ID:???
漏れはエロゲーをperlで作りたいのですが、できますか?
490nobodyさん:03/07/11 18:28 ID:???
>>489
どんなゲーム形態なのか問わないのであればすぐに作れるぞ。
例えば標準出力にテキスト垂れ流しで、たまに分岐があるぐらいとか。
491nobodyさん:03/07/11 18:29 ID:???
>>489 できる。だから、おまいが作りなさい。
492nobodyさん:03/07/11 18:34 ID:???
>>489
TkとかWin32::APIとか使えば理論上は可能。
だからがんばれw
493nobodyさん:03/07/11 19:35 ID:???
print分さえ分かれば誰でも作れる
494nobodyさん:03/07/11 19:42 ID:jaAmfExn
ある一覧のデータを全表示した時に、
例えば年齢の高い順とかって言う風に、
出来るようにしたいです。
その様な場合には、どう記載したら
宜しいのでしょうか?
495nobodyさん:03/07/11 19:50 ID:???
>>494
ソートしる。
496nobodyさん:03/07/11 21:31 ID:???
>>494
提示したやりたいことが曖昧すぎて、>>495以上のことは言えない。
497nobodyさん:03/07/11 22:02 ID:???
そうっとしとけ。
498nobodyさん:03/07/11 22:36 ID:???
        \   |    /
         _┌┬┬┬┐_
       ――┴┴┴┴┴―、         __________
      //    ∧// ∧ ∧||. \      /
  __[//____(゚_//[ ].゚Д゚,,) || _ \__ <  >>497を逮捕しにきました
 lロ|=☆= |ロロ゚|■■|■■∪警視庁■■||   \__________
 | ∈口∋ ̄_l__l⌒l____|___l⌒l___||
   ̄ ̄`ー' ̄   `ー'  `ー'   `ー'
499450:03/07/12 11:20 ID:???
>>482
あ、そうだった・・・だめじゃん
500500:03/07/12 12:27 ID:???
500 GET ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
501441:03/07/12 13:00 ID:???
>>441 の質問を最初にしたものです。最初にもどってしまいますが、
自分が >>441 で言った、

>自分が考えつくのは、
>ソケット通信で、
>地道にpostメソッドで渡す方法くらいなんですが・・・。

だと、とくに問題ないですか?
・・・っていうか、これって、可能ですよね?
502nobodyさん:03/07/12 13:14 ID:???
perl で使える gzip, gunzip モジュール解説しているページ教えてくれませんか?
倶愚ったけど、ほとんどインストールの解説で gzip とかヒットして探すの疲れた…
503nobodyさん:03/07/12 13:31 ID:???
「perl open gzip」
504nobodyさん:03/07/12 13:44 ID:???
open( FILE, "| /usr/bin/gunzip -1 -c" );
↑こういうのは無し。外部プログラム呼び出さないで、
perl 内ですませたいので
505nobodyさん:03/07/12 13:58 ID:???
Compress::Zlib::memGzip( $buff );
Compress::Zlib::memGunzip( $buff );
506nobodyさん:03/07/12 15:56 ID:???
>>505

            ∫    _________
   ∧,,∧     ∬   /
   ミ,,゚Д゚彡っ━~  < ご苦労!
_と~,,  ~,,,ノ_.  ∀   \
    ミ,,,,/~), │ ┷┳━   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ .じ'J ̄ ̄| ┃
 ̄ ̄ ̄ ̄ ̄ ̄ ̄  ┻

507nobodyさん:03/07/12 15:57 ID:???
この店はなんでもあるな
508 ◆hMJAPH9PWA :03/07/12 16:02 ID:???
使った事ないけど、PerlIO::gzipってのもある。
509nobodyさん:03/07/12 17:34 ID:???
NOのパラメータから、ファイルに入っている該当の行を削除処理したいのですが、
全く反応が無いです。。。
エラーも出ないため、いや、何よりも初心者なので原因がつかめません。
ご教授お願い致しますm(__)m

sub dl{
if(!open(OUT,"$file")){&error(err_file);}
@DATA = <OUT>;
close(OUT);
$count = @DATA;
$delcount = $count - $in{'NO'};

if($delcount ne ""){
$no = $delcount;
$DATA[$no] = "";
}

if(!open(IN,">$file")){&error(err_file);}
print IN @DATA;
close(IN);
}
510nobodyさん:03/07/12 17:38 ID:???
>>509
INとOUTが逆だな。
それはともかく、$DATA[$no] = "";のところを
print $no;
print $DATA[$no];
$DATA[$no] = "";
print $DATA[$no];
とやってみれ。
511nobodyさん:03/07/12 17:49 ID:p/T5Jtg4
初心者スレの鉄則

「逆ギレする質問者は釣りか荒らし」

ということで。

>>478
デバイスファイルがあればできるよ。

% perl
open(FILE, "/dev/cd0a") or die $!;
print <FILE>;
^D
CD001EP@@@@@@@@@@@@@@@@@IWANAMI_K4@@@@@@@@@@@@@@@@@騷@IWANAMI_K4
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@IWANAMI SHOTEN
DAI NIPPON PRINTING CO,LTD
000000000000000
0000000000000000000000000000000000000000000000000�CD001
CDDIC?dPWCTLG 榲PWDEMOUROKUUIDEsKOUJIEN懼SCREEN?ツATAlGAIJI 殲TREAM
(略)

ほらね。ちなみに↑は広辞苑のCD-ROM。
512nobodyさん:03/07/12 18:11 ID:2K5dewso
質問させてください。
いま、JAVAアプレットでCGIを呼び出してファイルをCGIが読み込んでその内容はアプレットに
返すっていう内容のを作っているんですが、CGIが内容を返すときにヘッダーの内容まで
送られてしまって、困っています。
最悪、その部分はJAVAの方で消してもいいんですが、できればCGIからの送信内容は
通信量の面でも軽くしたいし、ヘッダーの内容は送らないようにしたいんですが
可能でしょうか?
513nobodyさん:03/07/12 18:16 ID:???
>>510さん
ありがとうございます。

print $no;------------@
print $DATA[$no];-----A
$DATA[$no] = "";
print $DATA[$no];-----B

NO=8を与えてみたところ、
@に[9]の表示のみとなりました。
$DATA[$no];-----Aが無いのはどうしてでしょうか?
(゜▽゜;)
514nobodyさん:03/07/12 18:25 ID:???
>>513
変数名が他の部分とかぶってるとか
515nobodyさん:03/07/12 18:27 ID:p/T5Jtg4
>>512
可能。nph使う。多くのサーバーでは、CGIスクリプトの名前の先頭に nph- と入れるだけでよい。

例: nph-test.cgi
#!/usr/bin/perl
print "data\n";
exit;

516nobodyさん:03/07/12 18:30 ID:???
ヽ(*`Д´)ノ なんでもかんでもここで質問するなー!

ちゃんと適当なスレに書け!
517512:03/07/12 18:31 ID:2K5dewso
>>515
ありがとうございます。
早速やってみます。多謝
518nobodyさん:03/07/12 18:44 ID:???
510>>
515>>
$DATA[$no];-----A

前の処理で、スカラーに代入してました(゜゜;)

基本は printですね。。。初心に返ります。
ありがとうございました
519nobodyさん:03/07/12 18:52 ID:???
>>515
おぉ!初めて知った。その根拠というか、メカニズム教えて
520nobodyさん:03/07/12 19:44 ID:???
G(o^-^o)gle < 「No Parsed Header」 or 「NPH」

nphでサーバゲットだぜっの時代があったねぇ
521nobodyさん:03/07/12 19:56 ID:???
ディレクトリ作成について質問

深い階層のディレクトリを作成する為に、
以下のコードを書いたんだけど、
もっと効率のいい方法は無い?

#!/usr/bin/perl

$d = './aaa/bbb/ccc/'; # まだ存在ディレクトリ構造

@list = split( /\//, $d );
shift @list;

foreach ( @list ) {
$t .= "$_\/";
mkdir( $t, 0755 );
print "$t\n";
}
522nobodyさん:03/07/12 19:57 ID:???
× $d = './aaa/bbb/ccc/'; # まだ存在ディレクトリ構造
○ $d = './aaa/bbb/ccc/'; # まだ存在しないディレクトリ構造

523nobodyさん:03/07/12 20:01 ID:p/T5Jtg4
>>522

system qw(mkdir -p $d);

とかじゃ駄目?そういやモジュールもあった気がするけど覚えてない。
524あぼーん:あぼーん
あぼーん
525nobodyさん:03/07/12 20:02 ID:p/T5Jtg4
訂正。
system("mkdir", "-p", $d);
526nobodyさん:03/07/12 20:02 ID:???
>>518
@DATA = <OUT>;
が嘘だったということか?
まあ解決したようなんで別にいいんだけども、ちょっと気になるんで。
527nobodyさん:03/07/12 20:08 ID:???
>>523 >>525
ごめん。それだと、win系じゃ動かないんだ…(´д⊂ヾ

確か、win のシステムコール(API) は一発で深い階層の
ディレクトリ作ってくれるんだよね。だから、perl にも俺の
知らない関数かモジュールあるかと思って聞いてみたんだ。

まぁ、chdir しながら mkdir するよりはマシかな
528nobodyさん:03/07/12 20:22 ID:???
#!/usr/bin/perl
って書いててもwin系なのか。難儀だな。
できないという結論?
529nobodyさん:03/07/12 20:28 ID:???
>>528
\usr\bin\perl.exe があるんです(w
530 ◆hMJAPH9PWA :03/07/12 21:22 ID:???
>>527
File::Pathモジュールをつかう。
ディレクトリの作成だけじゃなく、一括削除もできるよ。
531nobodyさん:03/07/12 21:31 ID:???
ま た モ ジュ ー ル か
532nobodyさん:03/07/12 21:32 ID:i3OrVbjx
q|ポテトサラダ|
というのがあるとエラーが出ました
それを
"ポテトサラダ"
にしたら正常に動くようになりました
何ででしょう?
533nobodyさん:03/07/12 22:06 ID:???
ポが駄目文字に違いない
534nobodyさん:03/07/12 22:12 ID:???
だめポ。。。
535nobodyさん:03/07/12 22:14 ID:???
>>532
「ポ」は 0x83 0x7c の2バイトで構成される。
qの区切り文字 | は 0x7c。

ポの2バイト目が区切り文字と同じコードのため、そこで q が閉じてしまうので
エラーになる。
536nobodyさん:03/07/12 22:16 ID:???
ちなみにこの手のトラブルは、シフトJISでソースを書く以上どうしても避けられない。
EUCで書くようにすると幸せになれるかも。
537nobodyさん:03/07/12 22:35 ID:???
こんなところでエムエクースの知識が役立とうとは
538nobodyさん:03/07/13 01:27 ID:cL3G8Wfc
だれも>>521にマジレスしないのはなぜだ?
mkpathしかなかろうに・・・・
539あぼーん:あぼーん
あぼーん
540nobodyさん:03/07/13 01:51 ID:???
>>538
>>530に回答あるじゃん
もしかして使い方まで?
541nobodyさん:03/07/13 02:41 ID:???
@aと@bに重複する要素を全て取り出したいです。

例えば
@a=(1,2,3,4);
@b=(2,3);
ならば、2と3が取り出せる。

いい方法ない?
542nobodyさん:03/07/13 02:58 ID:???
543541:03/07/13 03:17 ID:???
>>542
サンクス。
544nobodyさん:03/07/13 03:52 ID:???
545nobodyさん:03/07/13 04:27 ID:zHTguhVX
$ban_word='*';
if($comment=~ /$ban_word/){&error();}

上記ケースにおいて、$ban_wordに「*」や「+」が指定されると構文エラーになります。
$comment=~ /*/をやればエラーになるのは明白なので原因はまあいいんですが、
Perlの組み込み関数に「メタ文字をすべてエスケープしてくれる」関数はなかったでしょうか。確か、
&escMeta('文字列');
みたいな使い方をすると文字列中の「*」は「\*」にエスケープされるような・・・
うろ覚えなのですが、心当たりありましたらご教授願います。
546nobodyさん:03/07/13 04:37 ID:???
>>545
quotemeta
547nobodyさん:03/07/13 04:41 ID:nQJ8+8Yh
>>545
quotemeta。

> &escMeta('文字列');

ここまで分かってるんなら、人に聞く前にperldoc perlfuncを開いてmetaで検索するとか
してみよう。
548545:03/07/13 04:43 ID:???
朝早くからthx!
どうりでescapeで探しても当たらないわけだ・・・
549あぼーん:あぼーん
あぼーん
550nobodyさん:03/07/13 14:14 ID:eiBgp+ln

if(!$a && !$b)
は、どういう意味でしょうか?
551nobodyさん:03/07/13 14:23 ID:???
>>550
if(!($a != 0) && !($b != 0))
552nobodyさん:03/07/13 14:27 ID:???
>550
if($a=~/^0?$/ && $b=~/^0?$/)
553nobodyさん:03/07/13 14:34 ID:???
%uFF2D%uFF33 をエンコードしたいのですがどうすればいいでしょうか。
554nobodyさん:03/07/13 14:35 ID:???
>>553 エンコードではなく、デコードです…。
555nobodyさん:03/07/13 14:41 ID:???
556nobodyさん:03/07/13 15:37 ID:6NfNIHy+
perlのコマンドを検索できるサイト(できれば日本語で)はありませんか?
Unixのmanを検索できるサイトなら知ってますが、あんなかんじで
557nobodyさん:03/07/13 15:55 ID:???
本番では、unixのサーバ上で動かす予定のCGIを、
windows上で開発するときの、注意点はなんでしょうか?

自分が知ってるのは、
●flockはWinでは使えないので、
 eval(flock (LOCKF, LOCK_SH)); みたいにするってことくらいなのですが
558nobodyさん:03/07/13 16:17 ID:???
>557
パーミッションとか色々ありすぎて、並べ上げたらキリがないと思われ。
559あぼーん:あぼーん
あぼーん
560nobodyさん:03/07/13 16:30 ID:???
>>557
でもパーミッションは、perlそのものでなく、ファイルの問題だから、
FTPでアップするときに注意すればいいだけかと思うのですが・・・。

>並べ上げたらキリがないと思われ。
すいません、よかったら2,3、例を挙げていただけませんか?

自分には一個も他には思いつかず。

#ちなみに、Win2000です。
561nobodyさん:03/07/13 17:01 ID:???
>>550
お前、>>438>>461>>465だろ
わからない文が出てくるたび毎回ここで聞く気か?
本でも買ってじっくり読むか文法のサイトでも行って基礎から勉強しろ
562nobodyさん:03/07/13 17:09 ID:nQJ8+8Yh
>>551

$a = "0 but true";
$b = "0\n";
print ((!$a && !$b) ? "true\n" : "false\n");
print ((!($a != 0) && !($b != 0)) ? "true\n" : "false\n");

Perlの真偽はちゃんと覚えておかないと、そのうち火傷しまっせ。
563nobodyさん:03/07/13 17:37 ID:???
>>560
プログラム上でファイルやディレクトリを作成する場合もあるだろ。
巷のフリー掲示板みたいにログファイルを666でアップしてください、
ってんなら別にいいけど。


#W2kならflockは使えた気がするのは気のせいでつかそうでつか。
#でもEWOULDBLOCKとかはサポートしてないんだよな。
564nobodyさん:03/07/13 17:39 ID:???
>>563
そんな機種依存部分はなんとかするだろう普通。
565nobodyさん:03/07/13 17:41 ID:NX4Xoj87
>>562
それで説明したつもりなのか?
リファレンスでもコピペしたようだな(プゲラ
これだから無知は。。
どこに真偽が判定されてるんだよ?
横に結果出力ぐらいつけてやれヴォケ
そんなんもできんのならここに来るな夏房
566564:03/07/13 17:48 ID:???
ごめん直感でレスしてた。焦点がずれてる。

そもそもUNIXにできてWindowsにできないっていう事しか存在しないんだから、
UNIXで動かそうとしてもどうしても動かないっていう状況は起きないので、大丈夫(?)
567nobodyさん:03/07/13 17:51 ID:???
判定の仕方:

print !!$a . "\n";
print !!$b . "\n";
568nobodyさん:03/07/13 17:57 ID:???
>どこに真偽が判定されてるんだよ?
こりゃすげぇ
569nobodyさん:03/07/13 18:02 ID:???
もしかして>>565はネタじゃないのかねぇ?
570nobodyさん:03/07/13 18:22 ID:???
三項演算子って使ったことない気がする
571nobodyさん:03/07/13 18:29 ID:???
三項演算子とif〜elseの使い分けも腕のうちかな

どうやら>>565はそれ以前に三項演算子を知らな(ry…
572nobodyさん:03/07/13 18:45 ID:???
ネタというより、単に>>551=565の逆ギレじゃないか?
釣りにしちゃお粗末だし。
573nobodyさん:03/07/13 18:55 ID:???
お熱い所すいませんが、お願いします。c で以下の様なコードを
perl で実現するにはどうすればいいのでしょうか?

// c の場合
char * a [] = ( 'aaa', 'bbb', 'ccc' );
char * b = &a[1]; // b[0] = 'bbb'

;# perl の場合
@a = ( 'aaa', 'bbb', 'ccc' );
@b = @{ $a[1] }; # うまくいかない…

# @b にどう代入していいか解りません(´д⊂ヾ
574557:03/07/13 18:55 ID:???
どなたか、 >>560 のレスおながいします。
575nobodyさん:03/07/13 18:55 ID:???
ミスってますね

char ** b = &a[1]; // b[0] = 'bbb'
576nobodyさん:03/07/13 19:01 ID:???
>>560
socketの引数が違う
577nobodyさん:03/07/13 19:02 ID:???
>>573
Cの部分を何がしたいのか日本語でかけば誰か答えてくれるかもね
578nobodyさん:03/07/13 19:02 ID:???
>>568
>>565は、Perlでの真偽がどうかを説明するべき所で、
2つの論理和をとったものの真偽を表示するスクリプトを書いた点について怒ったのでしょう。
579nobodyさん:03/07/13 19:08 ID:???
>>573
勘で答えると、

$b[0]に$a[1]を代入したいんでしょ?なら、$b[0] = $a[1]

あ、同じデータを2箇所から参照したいっていうことか。それは今のところできないなぁ。

\$b[0] = \$a[1]、う。文法エラー
580nobodyさん:03/07/13 19:12 ID:???
>>577
コメントに書いてありますが

@b には @a[n] の様に添え字をして任意の位置から
参照できるようにしたいんです

@a = ( 'aaa', 'bbb', 'ccc' );
@b = $a[1]; # どう書いていいか解らない。@b には $a[1] からのリストとして代入したい

foreach ( @b ) {
print ;
}
581573:03/07/13 19:13 ID:???
説明がうまくできなくてすいません(´д⊂ヾ
582nobodyさん:03/07/13 19:25 ID:???
理解した。でもPerlはこういうのは得意では無いような…

*方法1
@b = $a[-1], @a;

*方法2
@b = @a[1 .. $#a, 0];
583nobodyさん:03/07/13 19:28 ID:???
あ。別に一周させる必要はないのか。
584nobodyさん:03/07/13 19:43 ID:lgv8WpE5
mkakikomitaiというBBSにttp://www.minicgi.net/yybbs/yybbs.cgiのようなアイコンプレビュー機能を付けたいので、YY-BOARDのCGI見てここかなと思う部分をmkakikomitai移植してりして、色々試してみたのですが、どうも上手くいきません。
まだPerl勉強し始めて、2ヶ月ぐらいですので、敷居の高い改造であるかとは思いますが、手助けのほどお願いできませんでしょうか?
585nobodyさん:03/07/13 19:49 ID:???
@b=('aaa','bbb','ccc')[1..2];
@b=@a[1..$#a];

$b=('aaa','bbb','ccc')[1];
@b=('aaa','bbb','ccc')[1..2];
で直接できると思った
$b=(localtime)[3];

見たいに必要な部分直接取ったりできるし。

($day,$mon)=(localtime)[3..4];
@data=(localtime)[3..4];

#($mon,$day)=(localtime)[4..3];#これは無理みたい
586nobodyさん:03/07/13 20:18 ID:???
>>584
スレ違い

【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
587565:03/07/13 20:22 ID:DslkH4qS
各文の後に結果を書いてやれ、といっただけ
わからない人のためにな
>>562のを実行してたしかめろ!っていうのは初心者にとって嫌だとおもったから
588nobodyさん:03/07/13 20:23 ID:???
>>573

my @a = ('aaa', 'bbb', 'ccc');
my @b = (\$a[1]);

printf("\${\$b[0]}\t%s\n", ${$b[0]});
printf("\$a[1] \t%s\n", $a[1]);

${$b[0]} = 'hoge';

printf("\${\$b[0]}\t%s\n", ${$b[0]});
printf("\$a[1] \t%s\n", $a[1]);

------------------------------
$ perl array.pl
${$b[0]} bbb
$a[1] bbb
${$b[0]} hoge
$a[1] hoge


C のソースから考えると、こういうこと?
589584:03/07/13 20:25 ID:lgv8WpE5
Σ (゚Д゚;)
スレ違いでしたか(汗
じゃあ案内先で再度質問させていただます
失礼しました(´Д`;)
590nobodyさん:03/07/13 20:26 ID:???
591nobodyさん:03/07/13 20:59 ID:???
>>587
初心者は喪前だ
592nobodyさん:03/07/13 21:02 ID:???
windowsつかってます。
cronを使いたいんですがどうすればいいでしょうか?
593nobodyさん:03/07/13 21:03 ID:???
>>592
板違い
594nobodyさん:03/07/13 21:06 ID:???
スケジューラ
595nobodyさん:03/07/13 21:07 ID:???
>>587
自力で理解しようとした形跡の無いヤシに親切心は必要なのか?
596nobodyさん:03/07/13 21:08 ID:???
落ち着こう。
597nobodyさん:03/07/13 22:02 ID:tSmK0WhU
スレ違いかもしれませんが。。
Apacheだとmod_auth_mysql等を使って、データベース
と連動した認証ができますけど、同じようなことを
IIS + SQLServerで行う方法ってあるのでしょうか?
598nobodyさん:03/07/13 22:11 ID:???
スレ違いです。
599nobodyさん:03/07/13 22:28 ID:???
>>597
知ってる人がうまい具合に読んでくれて答えてくれることを期待してるでしょ?
誘導を待つのもいいが、適切なスレを自力で探す手間を惜しんじゃいかんよ。
600nobodyさん:03/07/13 22:51 ID:???
600 GET ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
601nobodyさん:03/07/13 23:06 ID:???
おめでとう
602nobodyさん:03/07/14 00:03 ID:???
>>578=587
初心者必死だな(w
603nobodyさん:03/07/14 00:22 ID:???
WebProg板って、知ったかぶり(>>551)をして、無知を指摘(>>562)されると、
自作自演(>>578)してまで逆ギレ(>>565)する初心者丸出し(>>587)の人が多いよね・・・。
604nobodyさん:03/07/14 01:51 ID:???
と、粘着なレスをつける人もかなりたくさんいて
605nobodyさん:03/07/14 02:50 ID:???
平和でいいね
606nobodyさん:03/07/14 03:12 ID:???
>>551って明らかに初心者いびりのネタだろw
607556:03/07/14 03:21 ID:???
見事にスルーされてる>>556ですが、
みなさんはコマンド忘れたときどーしてるんでしょうか?
608nobodyさん:03/07/14 03:31 ID:???
>>607
ふつーにperldoc -f [command] だろ。

あと、googleで「perl マニュアル 日本語」辺りで引いてみな。
609nobodyさん:03/07/14 03:56 ID:???
>>607
すげー暇な時に、
http://www.namazu.org/~tsuchiya/perl/info/perl-ja_toc.html
からHTMLヘルプ作ったので、それ使ってる。
610556:03/07/14 04:41 ID:???
>>608
いや、うちの環境、
Win上でスクリプト書いて、いちいちテストサーバにアップしてるもんで・・・
SSHつながんないし。

まぁ、cygwin使うという手もあるのだろうけど。。。

>>609
いいですね、これ。
使わせていただきます。
611608:03/07/14 04:50 ID:???
>>610
Windowsって開発に使ったことないけど、Windows版のperlってperldoc同梱されてないん?
612nobodyさん:03/07/14 05:37 ID:???
>>611
もちろん同根されてますよ
613nobodyさん:03/07/14 09:58 ID:???
>>612
話題出たついでに。これの日本語版って無いの?
614nobodyさん:03/07/14 10:11 ID:???
4ac - b**2 = 0
615nobodyさん:03/07/14 11:20 ID:???
みんなlinux使ってるの?
616nobodyさん:03/07/14 11:31 ID:???
ターゲットはUNIX系が多いけど、開発は大抵Windowsでやってるよ。

で、Windows版にもperldocはある。
というかインスコしたディレクトリのbin見れ。色々入ってるから。
あとhtml以下もな。
617nobodyさん:03/07/14 11:48 ID:???
>>616
だから、それの日本語版が欲しいんだが
618nobodyさん:03/07/14 11:50 ID:???
判らなくなったらいつもとほほに繋いでるな
619nobodyさん:03/07/14 12:24 ID:???
perlからunixコマンドを呼び出せない環境なので、
unlink<./tmp/*>が使えないのですが、
別の手段(opendir?)で、

./tmp/* にあるファイルを削除する方法はないでしょうか?
620 ◆hMJAPH9PWA :03/07/14 12:46 ID:???
>>617
perldocの日本語版はないけど、有志で翻訳しようというプロジェクトがあるよ。
http://perldocjp.sourceforge.jp/

>>619
標準モジュールのFile::Pathを使う。
621nobodyさん:03/07/14 12:55 ID:???
unix使ってる人多いのかなぁ。
622nobodyさん:03/07/14 14:11 ID:???
>>615
端末はWindows。FreeBSDにtelnetで繋いでviで書いてる。
623nobodyさん:03/07/14 14:41 ID:???
レンタルサーバの引越しをしたのですが。
SSIの動作が異なっているために実行されません。。

SSI実行時のカレントディレクトリが異なっているようです。

サーバ側の設定などで修正は可能ですか?
ファイルの修正は多すぎて大変なので・・・。

解決策をご存知の方教えてください。
624nobodyさん:03/07/14 14:54 ID:???
>>623
CGI: Common Gateway Interface part 11
http://pc2.2ch.net/test/read.cgi/php/1055597189/l50
625nobodyさん:03/07/14 15:08 ID:???
@tmp = sort { (${ORG[$a]->{adanaid}} <=> ${ORG[$b]->{adanaid}}) } 0 .. $#ORG;
foreach (@tmp) {
    print 'person='. $ORG[$_]->{person}. "\n";
    print 'adana='. $ORG[$_]->{adana}. "\n";
    print 'adanaid='. $ORG[$_]->{adanaid}. "\n";
}

で、
なぜ、sortのときには
${ORG[$a]->{adanaid}}
なのに、printのときは、
$ORG[$_]->{adanaid}
のようになるのでしょうか?

つまり、なぜ
@tmp = sort { ($ORG[$a]->{adanaid} <=> $ORG[$b]->{adanaid}) } 0 .. $#ORG;
ではダメなんでしょう?

このときの{}にはどんな意味があるのでしょうか?
626nobodyさん:03/07/14 16:31 ID:hPGUS4Ez
if文で、$a,$b,$c,$d,$e の中に
0の数字が4つ入っていた場合と
指定したいんですが、
どうやれば良いのか、教えて下さい。
627nobodyさん:03/07/14 17:06 ID:???
if(&{sub{my $count=0;foreach(($a,$b,$c,$d)){if(m/0/){$count++;}}return $count==4;}}){
    #..
}
628nobodyさん:03/07/14 17:12 ID:???
629 ◆hMJAPH9PWA :03/07/14 17:20 ID:???
>>625
${ARRAY[$index]->{$key}} は $ARRAY[$index]->{$key} と同じ。
だからダメな理由なんて何も無い。
疑問に思ったら自分で確かめてみようね。

ちなみにその{}はデリファンレンスの為の構文。
リファレンスは便利だから、ちゃんと知ったっておいたほうがいいよ。

# というか、そんな奇怪な構文があったなんて知らなかった…

>>626
なんか二行目から三行目への文の流れがおかしいよ。意味がわからない。
投稿する前に文を見直したほうがいいよ。
630nobodyさん:03/07/14 17:31 ID:???
>>627 どういう結果期待してるの?

・4つの 0 が入っている変数を全て知りたい
・どれでもいいから、入っているかどうか知りたい

@poo = ( $a, $b, $c, $d );
foreach ( @poo ) {
print "Found.\n" if ( /0{4,4}/ ) ;
}
631nobodyさん:03/07/14 17:33 ID:???
print grep( /0{4,4}/, ( $a, $b, $c, $d ) );

これでもいけるだろ。
632nobodyさん:03/07/14 17:37 ID:???
質問者の日本語がおかしすぎる

>>1

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

これを示してくれ。最低でも




      1: 自 分 は こ う 言 う 事 が し た い。




って事をはっきりと解りやすく書いてくれ
633nobodyさん:03/07/14 17:49 ID:???
1: 自分はこのスレをかき回したい
2: それで意味不明な質問を書き込んでみたが、
3: スルーされてうまくいかなかった
634nobodyさん :03/07/14 20:20 ID:???
>>625

@tmp = sort { (${ORG[$a]->{adanaid}} <=> ${ORG[$b]->{adanaid}}) } 0 .. $#ORG;

ここ

@tmp = sort { $_[$a]->{'adanaid'} <=> $_[$b]->{'adanaid'} } @ORG;

のほうがよかないか?
635634:03/07/14 20:49 ID:???
>>625
あと、続きもこうなるな・・・

foreach (@tmp) {
    print 'person='. $_->{person}. "\n";
    print 'adana='. $_->{adana}. "\n";
    print 'adanaid='. $_->{adanaid}. "\n";
}

取敢えず、リファレンスの使い方がおかしいということで・・・
636nobodyさん:03/07/14 21:28 ID:???
sortの書き方からして、ド素人のコード。
637nobodyさん:03/07/14 21:45 ID:???
何もやらずにツッコミだけして去る方が恥ずかしいと思うけどな
638nobodyさん:03/07/14 22:01 ID:???
なんでそんなこと書くのかなぁ…

って思ってたら間違いに気づいた。
@tmp = sort { $a->{adanaid} <=> $b->{adanaid} } @ORG;

それと、
${ARRAY[$index]->{$key}}
についてだけど。これは、${hogehoge}の発展形で、
文字列をデリファレンスした時のことを言うソフトリファレンスだとも言えるけど、
Perlのマニュアルには、曖昧さをなくすためのものです。って書いてあるから、
その、デリファレンスという言い方は少しおかしい。
639 ◆hMJAPH9PWA :03/07/14 22:07 ID:???
う〜ん。確かにその式では{}はデリファレンスと直接は関係ないね。
他に適当な言葉が思いつかなかったからさ。

それにしても
${ARRAY[$index]->{$key}}
ってよく使われるんだろうか?
一瞬なにやってるのか分からなかったよ。
640nobodyさん:03/07/14 22:12 ID:???
そうせざるを得ない時しか括らないなぁ。
641nobodyさん:03/07/14 22:13 ID:???
全部推測で書いたんだけど、、、
そもそも、その書き方は正しいのだろうか…
642nobodyさん:03/07/14 22:15 ID:???
あ。OKだった。
643nobodyさん:03/07/14 23:18 ID:???
>>636 スレタイすら読めないヴァカ
644nobodyさん:03/07/15 00:09 ID:???
粘着か...
645nobodyさん:03/07/15 00:43 ID:???
>>639
こういう時は使う。
http://pc2.2ch.net/test/read.cgi/tech/1053053082/146-148n

私ゃ普段からデリファレンスは常に %{$hash_ref} みたく冗長に書くなぁ。
その方が入れ子になった時でも統一感が出る。

ソフトリファレンスを使う時は no strict 'refs' が入るし
%{"$hash_name"} みたくダブルクォートや . 演算子使って明示。
646nobodyさん:03/07/15 01:22 ID:m9/vaFbn
粘着としかいえないヴァカはけーん
早くも夏房の季節ですか(プゲラ
647nobodyさん:03/07/15 02:57 ID:???
アクセス者のプロバイダ名を取得しようとしています。

if ($ENV{REMOTE_HOST} eq $ENV{REMOTE_ADDR} or $ENV{REMOTE_HOST} eq '') {
$HOST
= gethostbyaddr(pack('C4',split(/\./,$ENV{REMOTE_ADDR})),2)
or $ENV{REMOTE_ADDR};
} else {
$HOST = $ENV{REMOTE_HOST};
}
という感じで、$ENV{'REMOTE_HOST'}に相当する文字列を抜き出す所までは
できるようになったのですが、そこからドメイン名のみを抜き出す方法が
思いつかず、困っています。

上の文の直後に
if ($HOST !~ /jp$/i) {
&jpigai();
}
といった分岐を入れたので、$HOSTに代入される文字列は全て"*.xxxx.??.jp"
といった形式だと思ってください。
その"*.xxxx.??.jp"の、xxxxの部分のみを取得して、別の変数に入れて
おきたいということです。

後方6文字目のピリオドから、次のピリオドまでの範囲を抜き出すことになるので
後方一致の$を使えば、なんとかなるのではないか?、という所までは
今の所思いついているんですが、そこから先がどうにも……。

perlを触って、まだ間もない者ですが、宜しくお願いします。
648nobodyさん:03/07/15 04:04 ID:???
($a, $b) = $HOST =~ /\.([^.]+)\.([^.]+)\.jp$/;
649647:03/07/15 06:37 ID:???
>>648
おおお……しかもご親切なことに、$bの中には!

([^.]+)の部分、1週間近く悩んでも、自分で書けなかったんです。
正規表現の勉強が、まだ全然足りていないようです。
今も、書いて下さった部分を、首っ引きで調べています。

2つの()でグループ化しておいて、$a, $bで参照しているんだな、という
所まではわかりました。$1や$2でなくても大丈夫なんですね。
[^.]+は…任意の一文字以外の文字列の、一回以上の繰り返し…でしょうか(自信なし)。

ともあれ、ここから先は、自力で調べることにします。
本当にありがとうございます。
650nobodyさん:03/07/15 08:21 ID:???
>>649
> [^.]+は…任意の一文字以外の文字列の、一回以上の繰り返し…でしょうか(自信なし)。
ちょとちがう。

がんがれ。
651nobodyさん:03/07/15 10:13 ID:???
オレも某超有名入門サイトで覚えたから、最初、[ ](文字クラス)いまいち理解できなかったなぁ。
652nobodyさん:03/07/15 10:28 ID:???
[] は perl でもなんでもないんだけどな…。正規表現スレ行けば?
653山崎 渉:03/07/15 11:05 ID:???

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
654nobodyさん:03/07/15 12:25 ID:BbnXwsym
age
655nobodyさん:03/07/15 14:08 ID:???
メモリが256MBのマシンで500MBくらいのcsvデータを先頭の数字に
よって行単位でソートをかけるときはどういうやり方がありますか?
656nobodyさん:03/07/15 14:21 ID:???
普通に
657nobodyさん:03/07/15 14:35 ID:???
>>656
データが10GBだったらどうでしょ?
658nobodyさん:03/07/15 14:40 ID:???
500MBのCSVデータっていうのが、もはや現実的じゃないな……
そういうデータは他のソフトでも普通に処理できるのだろうか。
659nobodyさん:03/07/15 14:47 ID:???
500MBもあったらローカルPC上でアプリでやっても果たして・・・
660nobodyさん:03/07/15 15:08 ID:???
Excelなんかはさっくり死にそうだな。
とりあえずRDBか何かに置き換えることをお勧めするよ。

そうじゃなくて、このCSVファイルを処理すること自体が目的だとしたら……
先頭要素、ファイルポインタ、行サイズあたりを記録していって2パスで処理とか?
661nobodyさん:03/07/15 16:02 ID:???
>>655
open CSV, '<' . $file or die;
my @line;
{
  my $pos = 0;
  while (<CSV>) {
    /^(\d+)/;
    push @line, "$1\t$pos";
    $pos = tell;
  }
}
for (sort { $a <=> $b } @line) {
  /(\d+)$/;
  seek CSV, $1, 0;
  print scalar <CSV>;
}
662atom:03/07/15 17:12 ID:3ahZXwjC
HTMLのタグを削除したいんですが、上手くいきません。
$tag =~ s/\<.*>$//g
で置換すると
あああ<B>いいい</B>が
あああになります。
これを
あああいいいと変換したいのです。
663nobodyさん:03/07/15 17:14 ID:???
>662
>>4のPerlメモ読め
664atom:03/07/15 17:20 ID:???
>>663
ゴメソ。見てくる
665nobodyさん:03/07/15 17:57 ID:???
Jcode.pmを使い配列内の値全ての文字コードを一回で変換するには
どうすれば良いのでしょうか。

Jcode::convert(\@file,'utf8');
とかやったのですがやっぱりダメなようで…。
666nobodyさん:03/07/15 18:34 ID:???
Jcode::convert(\$_,'utf8') foreach @file;
667nobodyさん:03/07/15 18:41 ID:???
Jcode::convert( *file, 'utf8' );
668nobodyさん:03/07/15 20:16 ID:???
>>662
$tag =~ s/\<.*?>$//g
669nobodyさん:03/07/15 20:22 ID:???
>>668
まぁ細かいこと言うと、

<IMG SRC="xx" ALT=">">

で失敗するけどね。
670nobodyさん:03/07/15 21:18 ID:???
>>669
そういう使い方あり?
671nobodyさん:03/07/15 21:40 ID:???
>>670
前にHTML4.01見て、アリなのを確認した記憶がある。
3.2は多分アリだろうし。
ちょっとうろ覚えだけど。
672nobodyさん:03/07/15 22:34 ID:???
>670
<IMG SRC="xx.gif" ALT="がんばった!o(>_<)o">
これなら納得いくか?
673nobodyさん:03/07/15 23:20 ID:???
>>671-672
まぁ、htmlspecialchar しとくのが無難だよ
674673:03/07/15 23:21 ID:???
あ、なにいってんだ自分、
htmlspecialchar ってPHPの関数だったw
675あぼーん:あぼーん
あぼーん
676あぼーん:あぼーん
あぼーん
677nobodyさん:03/07/16 00:08 ID:???
>>671-672
スレ違いだが一応突っ込んでおくか。

<q cite="http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/charset.html#h-5.3.2">
テキスト中に「<」記号を記したい場合、著者は「&lt;」(ASCII十進60)を用い、
タグの冒頭――開始タグの開始区切り子――と誤解される可能性を回避
するべきである。同様に、テキスト中に「>」記号を記したい場合、仮に二重
引用符で囲った属性値としてであっても、著者は「>」を直接記すのではなく
「&gt;」(ASCII十進62)を用い、古いユーザエージェントがこれをタグの末尾
――タグの終了区切り子 ――と誤解してしまう問題を、回避すべきである。
</q>
678nobodyさん:03/07/16 00:23 ID:???
>677
プログラマは、ユーザーが「想定外」の操作をする事も念頭においてプログラミングをしなければならない。
これ、プログラムの基礎。
679nobodyさん:03/07/16 00:28 ID:???
ユーザはプログラマがどんなに対策しても想定した以外の操作をする
680nobodyさん:03/07/16 00:54 ID:GrzUswHS
質問です
Perlで動かすCGIの掲示板みたいな物を参考書片手に作ってるのですが

プログラム自身が新しくディレクトリーやファイルを作る方法を探してます。
色々頑張ってディレクトリーは

mkdir $setdir,$setpm;

で作れるのですが
その作ったディレクトリーの中にプログラム自身でファイルを作成する方法が
よく判らないのです。

検索してみた所【touch】なるコマンドが出てきたのですがうまく作動してくれません

根本的に間違ってるのか、困り果ててます。
なにかヒントだけでもお願いします。
681nobodyさん:03/07/16 00:59 ID:???
open(FILE, '> ./hoge/fuga');

682nobodyさん:03/07/16 01:07 ID:???
>>678
プログラマ=ユーザーの場合でもですか?
683nobodyさん:03/07/16 01:09 ID:???
>682
100%入力ミスをしない自信があるんならいいんじゃない?
684nobodyさん:03/07/16 01:12 ID:???
<B>が消えねー!
って文句いうユーザー入るんだろうな・・・
685nobodyさん:03/07/16 04:19 ID:???
>>678-679
マーフィーだな
686nobodyさん:03/07/16 09:19 ID:???
何か質問しろ
687nobodyさん:03/07/16 09:28 ID:???
>>686
openでファイルを開いた後に書き込む方法を教えてください。
688nobodyさん:03/07/16 09:34 ID:???
>>687
print
689nobodyさん:03/07/16 11:13 ID:???
>>687
write
690nobodyさん:03/07/16 11:16 ID:???
>>687
カキコ
691655:03/07/16 11:26 ID:???
>>661
ありがとう。きれいなコードですね。
実際の処理は>>655で書いたのと違い、
ちょっとごたついているんですが、
ファイルポジションを確保するやり方を使うことにします。
比較対象フィールド(複数)の保持だけなら
今回はメモリの制約にかからないので。

これは個人的な質問ではありませんが、
もし比較対象フィールドを確保しようとするだけで
メモリの制約にかかる場合は、どういうやり方が考えられるでしょう?
>>686さん
692nobodyさん:03/07/16 11:47 ID:iP2fRAb3
自作CGIをwebで使用したいのですが
プロバイダはCGIの動作を見てから
使用許可を出すと言っています。
それで自宅サーバー構築を思い立ったのですが
自宅ではテスト環境が出来たんですが
先方に見せる事が出来ないんでしょうか。

CATVでプライベートIPアドレスとやらなので、
自宅サーバーを公開できない様ですが、本当ですか?

CGIテスト環境を貸してくれる所とかあるんでしょうか?

結構行き詰まってます。宜しく...。
693nobodyさん:03/07/16 11:49 ID:???
自力でメモリマップドファイルみたいなもんを構築してそこで処理するとか。
694nobodyさん:03/07/16 11:52 ID:???
>>693>>691へのレスね。

>>692
動作確認する必要があるというなら、向こうでやってくれるんじゃないの?
どっかに置いてあるのを外から見ただけじゃ何もわからんと思うんだが。
695nobodyさん:03/07/16 11:55 ID:???
>>692
そんなことはプロバイダと打ち合わせしてくれ
それにスレ違い
696nobodyさん:03/07/16 11:58 ID:???
>>692
このスレで”CGI”という単語を書けるはずが無い。一回死んで来い。
697692:03/07/16 12:32 ID:iP2fRAb3
>>694
ありがとうございました。

>>695 >>696
逝ってきます。

・・だって初心者質問ってタイトルだったしー。(;.;)
698nobodyさん:03/07/16 12:43 ID:???
初心者質問と書いてあれば、何でも受け付けるとでも思ってるのか。
そのうちお菓子作りの質問とかも来そうだな。
699nobodyさん:03/07/16 13:12 ID:???
>>697
初心者板へGo!
700nobodyさん:03/07/16 13:13 ID:???
>697
お前は初心者質問と書いてあったら、「801初心者質問スレ」でもCGIの質問をできるのか?
寝言は寝て言え。
701nobodyさん:03/07/16 15:23 ID:F4EDEscp
push(@hoge,[@array]);
こうしたら、@hogeには@arrayのリファレンスが入ったんですけど、
[@array]って書き方は一体なんでしょうか。
702nobodyさん:03/07/16 17:06 ID:???
>>701
[ ] は無名配列生成子。
@array のリファレンスを返しているのではなく、
(@array) というリストを生成し、そのリファレンスを返す。
703nobodyさん:03/07/16 20:47 ID:???
[ ]
{ }
sub { }
704701:03/07/17 09:21 ID:VmbYvhJN
無名配列生成子というんですか。

配列の中に配列を入れたいのですが、
sub makeArray{
@array1 = ("あ","い");
@array2 = ("か","き");
push(@arrayRef,[@array1]);
push(@arrayRef,[@array2]);
return(@arrayRef);
}

@arrayRef = &makeArray();

for($i=0;$i<@arrayRef;$i++){
foreach (@{@arrayRef[$i]}){
print "$_\n";
}
}

これで間違いや非効率なところはありませんか?
push(@arrayRef,@array1);
push(@arrayRef,@array2);
初め、こうやったら、@arrayRefはただの1個の配列になってしまって、"あ","い","か","き"が入ってしまったので、
なんかてきとうに[]とか付けたら偶然できたんですが。
705nobodyさん:03/07/17 10:37 ID:???
要素数にもよるが、
push(@arrayRef,[@array1]);
push(@arrayRef,[@array2]);
だと、無名配列を"生成"するプロセスが入るから、
push(@arrayRef,\@array1);
push(@arrayRef,\@array2);
としたほうが早いね。
あと、
foreach (@{@arrayRef[$i]}){
は一応動くけど
foreach (@{$arrayRef[$i]}){
が正しい。

あと、変数は基本的に局所化しようぜぃ。
特に同じ変数名引き回すなら、思わぬ動きをする可能性大。
706nobodyさん:03/07/17 10:45 ID:???
いっそ

sub makeArray{return (['あ','い'],['か','き']);}
とか
707nobodyさん:03/07/17 10:46 ID:AZTCTrFH
> あと、変数は基本的に局所化しようぜぃ。

use strict; すれば良いかと。これやって大域変数の使用を極力抑えれば
バグの入る余地をかなり減らせると思う。
708nobodyさん:03/07/17 13:11 ID:???
>>706
さらにもう一声
@arrayRef = (['あ', 'い'], ['か', 'き']);
とサブルーチンをとっぱらってみるとか…
709nobodyさん:03/07/17 13:12 ID:???
グローバル変数が気軽に使えるのがperlの利点なのに
710nobodyさん:03/07/17 13:29 ID:???
そうかい?メモリは消費するし遅くなるしあまりいいとは思えないが
711nobodyさん:03/07/17 13:35 ID:AZTCTrFH
>>709
使い捨ての書き捨てコードだったら俺もグローバル使いまくるけど、
大きいソースになったらバグが出やすいし保守しにくくなるよ。
712あぼーん:あぼーん
あぼーん
713 :03/07/17 16:50 ID:MTBsKFuL
『こんにちは(改行)私の名前は太郎です。』と表示したいのですが。。。

#!/cygwin/bin/perl

print <<end;
content-type: text/html

<html>
<body>
こんにちは<br>
私の名前は太郎です<br>
</body>
</html>
end

と入力し、IEで見てみると、『ページを表示できません』と出ました。どうすれば表示できるのでしょうか?
初心者で申し訳ないです<(_ _)>
714nobodyさん:03/07/17 17:03 ID:???
>>713
あなたの環境は?

> と入力し、
どこにどうやって入力したのか?

> IEで見てみると
どこを見たのか?

あまりに情報不足で答えようがありません
715nobodyさん:03/07/17 17:41 ID:???
> #!/cygwin/bin/perl

この辺おかしい気がするんだが?
716nobodyさん:03/07/17 17:50 ID:???
パーミッションは?
717nobodyさん:03/07/17 18:00 ID:???
cygwinってなっててパーミッションはないだろ
718nobodyさん:03/07/17 18:01 ID:???
cygwinだけでhttpdを入れていないに1票
719nobodyさん:03/07/17 18:03 ID:???
>>709
ありえねー
720nobodyさん:03/07/17 18:19 ID:???
>>718
うわ、それだったらステキ(藁
721nobodyさん:03/07/17 18:50 ID:m6zrRyqW
質問です。
Perl、それもバージョン5.80以下で、
モジュールを使わずに、つまりライブラリで、
eucからUTF-8への変換をするにはどうしたら良いでしょうか?
722 ◆hMJAPH9PWA :03/07/17 19:06 ID:???
> モジュールを使わずに、つまりライブラリで、

モジュールだってライブラリなわけだが…
723nobodyさん:03/07/17 19:23 ID:???
モジュールとライブラリの集合の関係が判らない
724nobodyさん:03/07/17 19:24 ID:???
ライブラリだってモジュールなわけだが……


あれか、標準ライブラリと言いたいのか?
725nobodyさん:03/07/17 20:06 ID:???
>>713
content-type: text/html の後に
\n\n わすれちょる・・・
とかマジレスしてみる・・・
726nobodyさん:03/07/17 20:06 ID:???
>>725
\r\n\r\nだろと。
727nobodyさん:03/07/17 20:06 ID:???
>725
ヒアドキュメントで2個分の改行が入ってるから無問題だろ
とかマジレスしてみる
728nobodyさん:03/07/17 20:25 ID:???
content-typeって大文字小文字とか区別しないのか?
729座敷荒氏:03/07/17 20:27 ID:???
以前こちらで相談し、スクリプトを作成しました。
パラメータファイルに書かれたファイルを削除するものです。
ファイル名*に対応できなかったので下記のように書き直して
テストでは問題なく成功したのですが
本番機ではなぜか一部のファイルを削除できずに
1を返して異常終了してしまいました。
原因や修正箇所を教えていただけませんか?


#! /usr/bin/perl

while (<>){
($cmd_para) = split;#パラメータファイルより確認対象取得
unless(unlink< $cmd_para >){#ファイルの削除
exit(100);#ファイルが削除できなければ異常終了
}
}
exit(0);#上記以外正常終了
730nobodyさん:03/07/17 20:32 ID:???
>>729
$!でエラー内容取れない?
エラー内容がわからんと……
731座敷荒氏:03/07/17 20:38 ID:???
>>730
即レスありがとうございます。

そうですね!
シェルから実行していてログみると
1で終了してるんですけど、
このスクリプトで1で抜けるってのが
ありえるのかと…

質問したのに情報欠けてますね。
もう一度調べて直して再度質問させてください。

宜しくお願いします。
732nobodyさん:03/07/17 21:42 ID:CeuxGVu0
>>726アフォ皿仕上げ
733あぼーん:あぼーん
あぼーん
734nobodyさん:03/07/17 21:55 ID:???
>>732
RFC読めるようになってからまた来て下さい。
735nobodyさん:03/07/17 21:56 ID:CeuxGVu0
>>734
お前ほどの無知は初めて見たよ
736nobodyさん:03/07/17 22:03 ID:???
>>735
なんか知らんが嫌なことでもあったのか?
737nobodyさん:03/07/17 22:07 ID:???
>735
「>725の間違いでした」とでも言っておけばよかったのに。
738nobodyさん:03/07/17 22:08 ID:CeuxGVu0
>>736
うん。今日はパパンにレイプされたちゃったんです
739nobodyさん:03/07/17 22:12 ID:???
>>738
今夜はお赤飯だな。
740nobodyさん:03/07/17 22:13 ID:CeuxGVu0
>>739
カレー食べました
741nobodyさん:03/07/17 22:30 ID:???
悪乗りも程ほどに
742nobodyさん:03/07/17 23:00 ID:???
しっ。本人は人気者のつもりなんだから。
743nobodyさん:03/07/17 23:16 ID:FCw7NcrO
がいうdぎうあsdんbをじぇわ

あだkdsんdlsdなksんだlんdさldあんだ

だdささ



藻前らアフォすぎ
744あぼーん:あぼーん
あぼーん
745nobodyさん:03/07/18 03:23 ID:???
@hoge = qw(a b c d e);
という中身の配列データを、
a(改行)
b(改行)
c(改行)
d(改行)
e(改行)
となるようにファイルに書き込ませたいのですが

if(!open(OUT,">$file")){print "ファイルが開けません";}
print OUT @hoge;
close(OUT);

としても、ファイルには「abcde」と改行無しで一行にまとめて書き込まれてしまいます(´・ω・`)ショボンリ
そこで、

if(!open(OUT,">$file")){print "ファイルが開けません";}
print OUT "";
close(OUT);
と、一回中身空っぽにして

if(!open(OUT,">>$file")){print "ファイルが開けません";}
 foreach(@hoge){
  $value = $_ ."\n";
  print OUT $value;
 }
close(OUT);
と、追加書きさせるようにしてるんですが、はっきりいって無様な感じがします(´・ω・`)
こういう手段しか無いのでしょうか・・・
746745:03/07/18 03:27 ID:???
あ、なぜ一度空っぽにするかというと、
CGIのゲームのデータを記録するファイルなので、前のデータを残しておけないからです。

なにかいい方法があったら教えてください。よろしくおながいします。
747nobodyさん:03/07/18 03:33 ID:NVnSzVH0
>>745

if(!open(OUT,">$file")){print "ファイルが開けません";}
print OUT join("\n", @hoge, "");
close(OUT);

こうか?
748745:03/07/18 03:59 ID:???
>>747
うわー バッチリです
ありがとうございます
たった3行にまとまるなんて・・・ヒデキ感激(つД`)
749nobodyさん:03/07/18 04:04 ID:???
>>748
それの注意点としては一番最後の行には改行がつかない点。
最後に改行つけたければ
print OUT join("\n", @hoge, "")."\n";
とか
foreach(@hoge){print "$_\n" ;}
750745:03/07/18 04:26 ID:???
>>749
そうでしたか。
でも、もう一度ソースを見直したところ、
最後の行には改行なくても大丈夫だということがわかりましたので
今回は>>747を使わせていただきます。
重々(ー人ー)多謝
751nobodyさん:03/07/18 11:17 ID:7SO5ZUkT
$message = qq|こんにちは\n|;

qq||; こういう書き方なんていうんですか。
752nobodyさん:03/07/18 11:28 ID:NVnSzVH0
>>749
> それの注意点としては一番最後の行には改行がつかない点。

つくよ。それはちゃんと考えてある。

> print OUT join("\n", @hoge, "")

そのために配列に空要素を加えてるわけで・・・。
753nobodyさん:03/07/18 11:29 ID:gzS3zVXD
ダブルクオート文字列
754nobodyさん:03/07/18 11:38 ID:???
>>751
きゅうきゅう。
755あぼーん:あぼーん
あぼーん
756nobodyさん:03/07/18 12:15 ID:NVnSzVH0
>>751
Generalized quote.
757nobodyさん:03/07/18 12:36 ID:???
>>745
解決したのはいいんだが、
自分で考えた案の方は、何故一度空にしてから追記で改めて書き込むような
処理になっているのかが気になる。
758nobodyさん:03/07/18 12:47 ID:???
>>757
確かにあの発想は不思議だな
理由を聞いてみたいものだ
759nobodyさん:03/07/18 13:20 ID:???
>$fileで開いて、配列が空の場合にforeachがそのまま抜けるので
何も書き込まないから内容が前のままになると勘違いしていた、と推測してみる。

と思ったけどそれならforeachの前にprint OUT ""挟むか。
やはりわからん。

と思ったら>>746に書いてあったw
やはり↑の推測でよかったのか。


#ちなみに>$fileで開いた時点でファイルは空になる。
760nobodyさん:03/07/18 13:53 ID:50GDA6Bl
そそ、開いたらからになるんだよね・
俺も、それでいろいろとまどったこともあった
761745:03/07/18 18:44 ID:???
ファイルに
a1
b1
c1
d1
e1
と書き込まれているとして、これを
a2
b2
c2
d2
e2
と書き直したいんです。

 if(!open(USER,">>$user_dir$FORM{'id'}.dat")){print "ユーザーファイルが開けません";}
  foreach(@user){
   $value = $_ ."\n";
   print USER $value;
  }
 close(USER);
とするだけだと
a1
(略
e1
a2
(略
となってしまうので、いったん空っぽにしてた訳です。(´・ω・`)ナンカ ヘン?
762745:03/07/18 18:48 ID:???
 if(!open(USER,">$user_dir$FORM{'id'}.dat")){print "ユーザーファイルが開けません";}
  foreach(@user){
   $value = $_ ."\n";
   print USER $value;
  }
 close(USER);

ぐはっ、これでも逝けたのか… (o_ _)o

ヽ(゚∀゚) アヒャヒャヒャヒャ ドンマイドンマイ
763nobodyさん:03/07/18 20:19 ID:Y8wtPXEB
番号 歴史 世界史 合計
1   50   10    60
2   60   80    140
3   10   60    70
これを各項目別にソートしたいです。

思いついたのは

$d[0][0]→1   $d[1][0]→0:50   $d[2][0]→0:10   $d[3][0]→0:60
$d[0][1]→2   $d[1][1]→1:60   $d[2][1]→1:80   $d[3][1]→1:140
$d[0][2]→3   $d[1][2]→2:10   $d[2][2]→2:60   $d[3][2]→2:70
多次元配列に入れる


歴史の順でソートする場合
sort(@d[1])←ここは自信ないです(d[1]の中をソートしたいんです)

foreach(@d[1]){
($num,$data) = split(/:/);
print "$d[0][$num]","$_","$d[2][$num]","$d[3][$num]";
}


と言う方法です。各要素に、はじめの添え字を記録して、それをsplitで分解して、それを添え字にする、とい方法ですが、
これは、かなり無駄な気がします・・・
もうすこしきれいなのはありませんか?
764nobodyさん:03/07/18 20:29 ID:Y8wtPXEB
あ、だめですね
×0:50
○50:0

こうかえないと、ソートできませんね
765nobodyさん:03/07/18 20:33 ID:???
連想配列の項目別にソートしたほうが解りやすくないか?
766nobodyさん:03/07/18 20:35 ID:Y8wtPXEB
>>765
えと、それだったら
バブルソート使わないとだめっぽくないですか??

というか、ハッシュがソートされると、添え字がどうなるとかわからないんですけど・・・
値を比べて、添え字と値が対でソートされるんですか?
767nobodyさん:03/07/18 20:49 ID:???
大人の男だけ
768nobodyさん:03/07/18 21:02 ID:???
ANHTTPD使ってますか?
769nobodyさん:03/07/18 21:31 ID:bi1QsuUD
友達から聞いた話で、多分デマだとは思うのですが、
$test =~ m/$pataann/;
こんな感じで正規表現パターンを変数化することなんて
無理ですよね?
770nobodyさん:03/07/18 21:48 ID:???
>>769 友達が正しい。
771nobodyさん:03/07/18 21:51 ID:???
>>769
やってみりゃいいだろ。

つーか、もう余計な部分まで答えてやる。出来る。

そして$patternの中身がそのまま正規表現パターンとして使われるから注意な。
$pattern = "a.";
なら"aa"や"ab"にもヒットする。
これを文字通り"a."にヒットさせたい場合は
$pattern = "a\\.";
としてやる。

さもなくば
$pattern = quotemeta($patter);
としておくとか、
$test =~ m/\Q$pattern\E/;
などとしろ。


いいか、pataannじゃなくてpatternだぞ!
772nobodyさん:03/07/18 21:56 ID:???
>>771
くそ。最後の一行言われたか!w
773nobodyさん:03/07/18 22:06 ID:???
>>761
open USER, '+<' . "$user_dir$FORM{'id'}.dat"
  or error('ユーザーファイルが開けません');
my %data;
while (<USER>) {
  /^(.)(.)$/;
  $data{$1} = $2;
}

foreach my $key (keys %data) {
  $data{$key} += 1; # a1 を a2 へ
}
delete $data{'e'}; # データを元より短くする実験

seek USER, 0, 0;
print USER "$_$data{$_}\n" for sort keys %data;
truncate USER, tell USER;
close USER;
774nobodyさん:03/07/18 22:23 ID:???
>>763
my %column = ('歴史' => 1, '世界史' => 2, '合計' => 3);
my @score = (
  [ 1, 50, 10, 60 ],
  [ 2, 60, 80, 140 ],
  [ 3, 10, 60, 70 ],
);

my $column = $column{'歴史'};
print join ' ',
  map $_->[0],
  sort { $b->[$column] <=> $a->[$column] }
  @score;
775nobodyさん:03/07/18 22:53 ID:???
>>770-772
たしかに、できた、な、、、
俺に負けを認めろ、というのか?
ぜってーできねぇと思っていたのに





スミマセンデシタ
776nobodyさん:03/07/18 22:54 ID:???

             (  )
              ( )
    /ノノ"\ヽ      ) 
    从*゚ー゚从   〜    
     /゙゙゙lll`y─┛        
    ノ. ノノ |
.    `〜rrrrー′
.      |_i|_(_

落ち着け。
777nobodyさん:03/07/18 23:11 ID:???
>>763
あまり関係ないけど、おいらならこんなデータ構造にしますな。

@score = (
 1 => {
  '歴史' => 10,
  '世界史' => 50,
 },
);

合計は計算する。
778nobodyさん:03/07/19 00:22 ID:???

There's more than one way to do it.
779nobodyさん:03/07/19 00:31 ID:???
番号 歴史 世界史 合計
1   50   10    60
2   60   80    140
3   10   60    70


随分と成績の悪いやつばかりですね
780nobodyさん:03/07/19 00:52 ID:???
番号 歴史 世界史 算数 合計
4   90   85    5   190
781nobodyさん:03/07/19 01:07 ID:???
つーかさ、

「これ(・・・コードの羅列・・・)って出来るんですか?」

って聞くやつってどういう思考回路してるんだ?

俺様がわざわざ試すのは面倒だから下々の暇そうな2chの
馬鹿どもにやらせておこうって考えなのかな?
782nobodyさん:03/07/19 01:12 ID:???
print "$a+$b"ってできますか?
783nobodyさん:03/07/19 01:18 ID:???
>>782
無理です。パールを動かしてるインターネットが暴走してCGIがフリーズします。
784nobodyさん:03/07/19 01:39 ID:???
マザーコンピュータが反乱を起こして日本列島が沈没します
785nobodyさん:03/07/19 01:43 ID:???
>>782
ダメだよ!インターネットがバグるよ!
786nobodyさん:03/07/19 01:48 ID:???
>>782
赤ちゃんできちゃうよ!
787nobodyさん:03/07/19 01:53 ID:???
>>786
めちゃめちゃワラタ
788nobodyさん:03/07/19 02:23 ID:???
燃料を補給してくれてるんだろ
789nobodyさん:03/07/19 02:39 ID:xDnFfAsd
〜を含まないっていうパールって
あったら教えてください。素人質問で
申し訳ありませんが。
790nobodyさん:03/07/19 02:56 ID:???
791nobodyさん:03/07/19 02:57 ID:???
>>789
パールのようなもの
792nobodyさん:03/07/19 03:42 ID:xDnFfAsd
>>790
有難うございました。
ただ良く理解できません。
例として、3と4は含むけど5は含まない
というのを教えていただける人がいれば、
よろしくお願いします。
793nobodyさん:03/07/19 04:01 ID:???
794nobodyさん:03/07/19 04:09 ID:xDnFfAsd
>>793
分からないなら分からないって言ってね。
795nobodyさん:03/07/19 04:11 ID:???
>>794
はい。>>789>>792もどういう質問を意図している日本語なのか全く分からないです。
796nobodyさん:03/07/19 04:18 ID:???
3と4を含むが5は含まない
-> 3と4を含み、かつ5は含まない
-> 3を含み、かつ4を含み、かつ5を含まない

実際にperlで表現する方法は>>790で既出なので略。

上の仕組みが分からない時は「集合」の勉強をしちゃってください。
「論理和 論理積」でググればいっぱいヒットします。

こんだけ丁寧に書けばもう問題ないでしょう。てことで次の質問者の方どうぞ。
797nobodyさん:03/07/19 05:16 ID:???
>>796
やーだからね、仮にそういう質問の意図だったとして、
それが配列の要素に対しての話なのか文字列の部分に対しての話なのか、
条件判定の話なのか、ついでにそもそもPerlSyntaxの中で話なのかどうかすら、
何が何だかさっぱり分からんでしょ。

そもそも>>789>>792からそういう解釈を導き出すのも無理あるし。

というわけで次の質問者どうぞ。
798nobodyさん:03/07/19 09:24 ID:???
こないだ、他人がつくっったプログラムの改修たのまれたんですが、
それみたら、そのスクリプト(もちperl)が、
商品を管理者画面から登録する際、
インデックスファイルみたいなものに、連番と商品名だけCSVで持たせて、
商品の詳しい内容は、
別のフォルダ「商品名」(もち日本語)っていうファイルを作らせて、
(たとえば、「ThinkPad1200特売品」とかいうファイル名)
で、「ThinkPad1200特売品」っていうファイルの中に、「<>」区切りで、
商品名の詳細がかいてあるんです・・・

自分、仕事としてperlをやりはじめたのがまだ1ヶ月だから、
わからないんだけど、こういう組み方って、アリなんですか?
それとも異常?

perlお仕事歴長いかた、教えてください。
799798:03/07/19 09:25 ID:???
1個typoしてますた

>別のフォルダ「商品名」(もち日本語)っていうファイルを作らせて、
じゃなく
別のフォルダの中に「商品名」(もち日本語)っていうファイルを作らせて、
800nobodyさん:03/07/19 09:33 ID:???
目の前に存在してるんだから、アリだろう。
801nobodyさん:03/07/19 09:45 ID:???
仕事としてperlをやりはじめて2ヶ月のやつが作ったのだろう
802798:03/07/19 11:07 ID:???
>>800-801
アリだけど、そいつはへたくそっていう結論でOK?
803nobodyさん:03/07/19 11:34 ID:???
>>798
ネットショッピングかな?
商品登録だけじゃなくて、販売とか在庫管理まで考慮して
ファイルを設計する必要がある。
他の部分がどうなってるのか分からないけど、
商品詳細情報を個別のファイルにしておくと、
商品番号から詳細情報を表示するリクエストがあったときに
「全商品詳細情報ファイル」を読んで検索して表示するより速い。
内容に不備・誤記があったときの訂正も楽。
完売したらインデックスファイルの該当個所だけ変更すればよい。
目的に合わせてファイルを分けるのは異常ではなく当然。
Perl というよりデータベース設計の問題だと思われる。
804798:03/07/19 17:38 ID:???
>>803
なるほどー、そういう利点があるんですね。
それは、すごく初耳だったので、勉強になりますた。

>販売とか在庫管理まで考慮してファイルを設計する必要がある。
これをつくった人は、
そこまでは、なにも考えてないみたいです。
ショッピングカート経由で注文があったらメールがいくだけみたいな。

>完売したらインデックスファイルの該当個所だけ変更すればよい。
っていう機能を管理者画面につけてないみたいですしね。
805nobodyさん:03/07/19 19:07 ID:???
>>804
将来的な機能追加を見越した設計だったのかもしれない。

メールを送るだけだからファイル管理だけで充分だけど、
単一ファイルじゃ拡張しにくくて気持ち悪いとか。
ある程度の規模や機能に達すればファイルでなくて本格的な
データベースを導入することになるんだろうけど。

>そこまでは、なにも考えてないみたいです。
在庫管理するかどうかのプログラマに決定権があったとは思いにくいなぁ。
単に初回作成時は、依頼主の予算やショッピングサイトの来客数の見込みから
簡単に済ましただけかも知れない。

実店舗がある個人商店の片手間なショッピングサイトとかなら、大枚はたいて初っ端から
大掛かりなシステムは依頼できないっしょ。
806795:03/07/19 19:53 ID:???
(´・ω・`)<俺、日本語が不自由なんだよ…。
807nobodyさん:03/07/19 21:46 ID:???
>>806

 `
808nobodyさん:03/07/19 21:54 ID:???
ime.nuや、cgiboy.comみたいに、
http://ime.nu/pc2.2ch.net/やhttp://cgiboy.com/pc2.2ch.net/のようなアドレスで
動的にページを出力するにはどうしたらいいんでしょうか?
PATH_INFOを使用するにしても、スクリプトの名前が入ると思うのですが・・・
809nobodyさん:03/07/19 22:09 ID:???
>>808
スレタイ嫁。
810nobodyさん:03/07/20 00:14 ID:gCjTktSy
掲示板のcgiファイルに「ー」を記載すると
アップ出来ないみたいなんですが、
どうしても表示したいので、やり方を教えて下さい。
\で囲んだりしても駄目だったので。
例えばクーラーを表示する場合とか。
811nobodyさん:03/07/20 00:16 ID:???
\Qー\E
812nobodyさん:03/07/20 02:13 ID:???
アップできないわきゃーないだろう。FTP送信時にエラーでも出るの?
質問は正確にね。
813nobodyさん:03/07/20 02:43 ID:???
>>810
エラー文面も載せてもらえるといいな。
FTPだとしたら取れないかな?

「クーラー perl 文字コード」でぐぐれば幸せになれるかもね。
814nobodyさん:03/07/20 09:35 ID:XGlmJStz
テキストファイルtestfileで、上一桁が同じなら、最初に現れる行だけを
残した別ファイルdatabaseを作りたいのです。
具体的には、
a:xxx
b:yyy
a:zzz
から、3行目を削除して
a:xxx
b:yyy
としたいのです。
そこで、正規表現とDBMハッシュの勉強を兼ねて、次のスクリプトを作って
みました。

dbmopen(%DB, "database", 0666);
open(IN, "testfile");
while (<IN>) {
if (/(\w):(.*)/) { $DB{$1} = ":" . $2 unless exists($DB{$1}); }
}

実行すると、
AnyDBM_File doesn't define an EXISTS method
というエラーメッセージが出ます。
DBMハッシュにexists関数は使えないのでしょうか?
どなたか、ご教示ください。
(exists($DB{$1})ではなく、$DB{$1}にすれば良いのですが、
existsを使ってみたかったのです。)
815nobodyさん:03/07/20 10:11 ID:???
>>814
dbmopenじゃなくtieを使えば?
816 ◆hMJAPH9PWA :03/07/20 11:32 ID:???
>>814
dbmopen()ってのは"幾つかのDBMライブラリのうち使えるものを使う"という仕様なので、
実際にどんな操作が可能かはそのDBMライブラリに実装によるんだよ。
で、困った事に大抵のUnixでのデフォルトであるNDBM_FileはEXISTSが(現時点では)実装されていないんだよね。
とりあえず、dbmopen()を使う前に、例えば"use DB_File"や、"use SDBM_FIle"などと
他のDBMモジュライブラリルを使う事を明示すればいいかな。

dbmopen()はAnyDBM_Fileをtie()するだけの関数なので、
perldoc AnyDBM_Fileとperldoc -f tieも参照されたし。
817nobodyさん:03/07/20 12:41 ID:???
dbmopenは、Perl4時代の遺物。>>815の言うようにtie使え
818814:03/07/20 13:18 ID:XGlmJStz
>>816
「実際にどんな操作が可能かはそのDBMライブラリの実装によるんだよ。
で、困った事に大抵のUnixでのデフォルトであるNDBM_FileはEXISTSが(現時点
では)実装されていないんだよね。」
良く分かりました。どうも有り難うございます。

>>815, >>817
私は「初めてのPerl」を読み終えたばかりの初心者です。タイ変数については
これから「プログラミングPerl」で勉強します。
819nobodyさん:03/07/20 18:21 ID:???

while( 1 ) {
 ・
 ・
 ・
}

…の部分はかなり大きな処理で、ループの上に戻ってくるまでに
時間がかかるスクリプトがあります。ループの上に戻ってきた時に
スクリプトの自分自身をリロードするような事ってできますか?

何故こんな事したいかと言うと、ループの上に戻って来る前に、
スクリプト修正とか入ると、一旦スクリプトを終了しないといけないので
リロードできないものかと…。因みに、 while の前後にも処理があります
820nobodyさん:03/07/20 18:28 ID:???
リロードしたら最初からやるのと同じだろ
821nobodyさん:03/07/20 18:28 ID:???
ループの上?
822闇主:03/07/20 18:40 ID:???
>>819
スクリプトファイルを変更しても
既に動いているプロセスのコードは変わらない。
変更後のスクリプトによる別プロセスを立ち上げ直す必要がある。
823nobodyさん:03/07/20 18:46 ID:???
何でそんなことがしたいのかは置いといて。

while内のコードを別ファイルにして、ループ内で毎回読み込んでevalブロックの中で
実行させるというのはどうだろう。
824nobodyさん:03/07/20 19:44 ID:???
>>823
確かにそのやり方でも可能だな。
処理にもよるが重いだろうな。レンタル鯖でやるのはどんなもんだろうか。
825nobodyさん:03/07/20 20:06 ID:???
>>824
while(1)の時点ですでに終わってると思うけどね・・・・
826nobodyさん:03/07/20 20:33 ID:???
レンタル鯖で動かすって誰が言ってるんだ?
Perlと言えばCGIしか思いつかないのか。
827nobodyさん:03/07/20 20:51 ID:???
>826
おまいさん、この板はWebProg板ですよ?
ム板と勘違いしてる?
828nobodyさん:03/07/20 20:55 ID:???
鯖にもいろいろあるわけで。。
829nobodyさん:03/07/20 21:00 ID:???
>>827
うひゃあ。思いっ切り勘違いしてました。スマソ
830nobodyさん:03/07/20 21:25 ID:???
俺もたまにム板と勘違いするから心配すんな。
向こうで正規表現スレに誘導したの、実は俺。
831nobodyさん:03/07/20 21:28 ID:???
2ちゃんねるの dat ファイル読み出しスクリプト作ったんですが、ちと、悩んでいます。何故か、gzip 転送されてこないんです。
どこがオカシイか教えてください
#!/usr/bin/perl
use LWP::UserAgent;
use Compress::Zlib;
{
$ua = LWP::UserAgent->new;
$ua->agent( "Monazilla/1.00 ( ´,_ゝ`)プッ/1.0" );
$ua->parse_head( 0 );
$req = HTTP::Request->new( GET => $ARGV[0] );
$req->protocol( 'HTTP/1.1' );
$req->header( 'Accept-Encoding' => 'gzip, deflate' );
$req->header( 'Connection' => 'keep-alive' );
print $req->as_string;
# リクエストの送信
$res = $ua->request($req);
# 出力のチェック
if ( $res->is_success ) {
print $res->headers->as_string;
if ( $res->headers->content_encoding =~ /gzip/ ) {
print "圧縮転送された\n";
$t = Compress::Zlib::memGunzip( $res->content );
}
else {
print "圧縮転送されてない\n";
$t = $res->content;
}
}
else { print "Error: " . $res->status_line . "\n"; }
}
832nobodyさん:03/07/20 21:39 ID:???
>>831
Accept-Encoding:gzip

Accept-Encoding:x-gzip
833nobodyさん:03/07/20 21:44 ID:???
>>832 今、やってみましたが、駄目でした

$req->header( 'Accept-Encoding' => '*' );

にしても、駄目でした。
834nobodyさん:03/07/20 22:00 ID:???
>>827
cgiは書いたことないが、web用のperlスクリプトは
いっぱい書いてるぞ
835nobodyさん:03/07/20 22:01 ID:???
>>831
subject.txt以外は今はgzip転送してないのでは?
836nobodyさん:03/07/20 22:05 ID:???
>>835
subject.txt も gzip 転送されてないようです
837nobodyさん:03/07/20 22:35 ID:???
そうだっけ。少し前に調べた結果だから変わってるかも。
838nobodyさん:03/07/20 22:39 ID:???
monazillaスレあたりを読んできたほうが
839nobodyさん:03/07/20 22:57 ID:ucM2tzJ9
簡単な暗号っぽいやつをやっているのですが
例えば $hoge = "\x53\x54\x2d\69" なら
\x69\x2d\x54\53 と逆転させてたいのですが
どうやってやるのがスマートなのでしょうか?

一応初心者ながら 1バイトずつ配列に読み込んでreverseでやるのを考えてみたんですが・・・
840あぼーん:あぼーん
あぼーん
841あぼーん:あぼーん
あぼーん
842nobodyさん:03/07/20 23:22 ID:???
>>839
スカラコンテキストでそのままreverseに入れれば、反転した文字列が得られる。
perldoc -f reverse もしくは「perl reverse」でぐぐる。
843634:03/07/20 23:40 ID:???
>>831
$req->header('ACCEPT_ENCODING'=>'gzip');
で試してみそ・・・
844nobodyさん:03/07/21 00:44 ID:???
perl2exeで配布できるようにしたperlのプログラムって
ソフトウェアと呼んでもいいの?
845nobodyさん:03/07/21 01:05 ID:???
少なくともハードウェアではない
846nobodyさん:03/07/21 01:13 ID:???
>>844
ソフトです
847nobodyさん:03/07/21 01:57 ID:???
>>838
一応、読んで見てきましたが、該当するような記述は見当たりませんでした。

>>843
それをやっても、駄目でした。LWP は何故か

Accept-Encoding: gzip

と、勝手に変更しますね。


まぁ、2ちゃんねる側の仕様が変わったのカナ?
848nobodyさん:03/07/21 10:23 ID:???
OOPでスクリプトを書こうと思い、せっせとスクリプトを書いているのですが、OOPで書く利点がぜんぜん見当たりません。
強いて言うならば「今風」ってだけです。

いま作っているモジュールが特定のスクリプト専用に作っている為、そういう風に思うのかもしれません。
それとも根本的に考え方が間違ってるのかもしれません。
それすらわからなくなってきてしまって。

OOPで書く利点をお教え頂ければ嬉しいです。
宜しくお願いします。
849ともちゃん:03/07/21 11:44 ID:O4IhS66K
クッキーを取得して、なければ違うページに移動するスクリプトを試しています。
うまくいかなくて最後の3行、$$cook{$key} = $value;}}の最後の所がsyntax errorだと表示されます。
]か}のミスなのだそうです(by CGIROOM・エラーチェック)。
でも、[や{の数とも合っているし、わたしは変だと思わないのです。
どこがどう変なのか分かりますか?
お願いします。

#!/usr/bin/perl
use strict; &main; exit;
sub main{
my $id = "abc
my %cook = ();
getcookie("abc",\%cook);
unless($ENV{'HTTP_COOKIE'} = ~/%cook/){
print "Location: http://aaa/cookie.html\n";}
sub getcookie{
my ($id,$cook) = @_;
my %cook = ();
my $cookie = $ENV{"HTTP_COOKIE"};
$cookie =~ tr/+/ /;
$cookie =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2',$1)/eg;
foreach my $x (split ";",$cookie){
my ($key,$value) = split "=",$x,2;
$key =~ tr/ //d; $cook{$key} = $value;}
foreach my $x (split ",",$cook{$id}){
my ($key,$value) = split ":",$x,2;
$$cook{$key} = $value;}}
850nobodyさん:03/07/21 11:46 ID:???
>>848
君には必要ないと。
851nobodyさん:03/07/21 12:10 ID:???
>>849
my $id = "abc

なんか閉じてないけど。
852848:03/07/21 12:20 ID:???
>>850
それはある意味正解なのですが、それを言っちゃうと・・・
でもOOPで書きたいんです。

>>849
どうがんばってみても「}」が一個足りません。
気のせいでしょうか?
853ともちゃん:03/07/21 12:31 ID:O4IhS66K
851番さんありがとうございます。
書き写す時のミスでmy $id = "abc";となっていました。<(_ _)>

852番さんありがとうございます。
わたし、下の行ばかり見ていました。わたし馬鹿ですね。
もっと上の行になかったの気が着かなかったです。(^^ゞ
直したらエラーの表示はなくなりましたが、全然動いていないみたいなんです。(;_;)
854nobodyさん:03/07/21 12:33 ID:???
OOPって要は関数と変数がセットになってるだけだからなあ
単に書き方が違うだけ
それが書きやすい訳でも大規模開発に適してる訳でもない
構造化プログラミングの流れは、ソフトウェアの品質向上に
大きく貢献したけど、OOPはそういうのとは別のような
855848:03/07/21 13:07 ID:???
>>854
実際問題としてperlでOOPな書き方すると、なんとなく直感に反するんですよね・・・
片方でuse strict;して汚染しないようにがんばってるのに、モジュール内では$self->{key}なんかで簡単に読み込めてしまう。
main的にはスパゲティにならないと思うけど、モジュール内ではもうすごい事になりそう。
まだ勉強途中なので、思い切り的外れな考えかとは思いますが・・・

>>853
動くかどうかは分かりませんが、参考までに。

#!/usr/bin/perl
use strict; &main; exit;
sub main{
my $id = 'abc';
my %cook;
if ($ENV{'HTTP_COOKIE'} =~ /$id/i){ %cook = getcookie($id); }
else { print "Location: http://aaa/cookie.html\r\n\r\n"; }
}
sub getcookie{
my %cook;
my $cookie = $ENV{"HTTP_COOKIE"};
$cookie =~ tr/+/ /;
$cookie =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2',$1)/eg;
foreach (split /;/, $cookie){ my ($key,$value) = split /=/; $key =~ tr/ //d; $cook{$key} = $value; }
foreach (split /,/, $cook{$_[0]}){ my ($key,$value) = split /:/; $cook{$key} = $value; }
%cook
}
856nobodyさん:03/07/21 13:17 ID:???
>>855
OOもオブジェクト間の関連とか考え出したらぐちゃぐちゃになります。

クラス作るのがOOとほざいているのならば今すぐ去ね。
857nobodyさん:03/07/21 13:24 ID:???
OOならオブジェクト指向の略だって知ってるんですけど、
OOPって?
オブジェクト指向プログラミングの略?
858848:03/07/21 13:31 ID:???
>>856
そうですか。
オブジェクト間はいくらでも絡まっていいけど、それが外からカプセル化して見えないようにすればいいと。
ますます難しくなってきました。

>>587
です。
859nobodyさん:03/07/21 13:39 ID:???
>>848
もっと簡単に考えれ。
リファレンスでアクセスするサーブルーチンて具合に。
860nobodyさん:03/07/21 14:02 ID:???
activeperl5.6.1以降はperl/tkをインストールする必要はなくなったの?
861848:03/07/21 14:04 ID:???
>>859
ありがとうございます。
本を読めば読むほど、サイトを見れば見るほどわからなくなってました。
基本に戻ってがんばってみます!
862nobodyさん:03/07/21 14:06 ID:???
sub new{
  my ($member1,$member2,$menber3);
  my $this={
    func1 => sub{$member1++;print "${member1}func1\n";},
    func2 => sub{$member1++;print "${member1}func2\n";},
    func3 => sub{$member1++;print "${member1}func3\n";},
  };
  return $this;
}
my $obj=new();
$obj->{func1}->();
$obj->{func1}->();
$obj->{func2}->();
$obj->{func3}->();
見たいにC++のprivateメンバーみたいなのも作れる。
protectedは作れなさそうだけど。
通常のprelのOOPと組み合わせることも出来るだろうし。
通常の方法以外のOOPを考えてみた

863nobodyさん:03/07/21 14:22 ID:???
>>860
まじでつか?
864nobodyさん:03/07/21 14:40 ID:???
サブルーチンへの引数渡しについて質問。

#!/usr/bin/perl
@a = ( '1aa', '2aa', '3aa', '4aa', '5aa', '6aa',);
$b = 'hello!!';
foo( @a, $b );
exit;

sub foo
{
my ( @one ) = @_;
my ( $two ) = pop( @one );
print "one = @one\n";
print "two = $two\n";
}

foo 内で @one, $two を分ける方法は上記の様なコードで正しいでしょうか?
865nobodyさん:03/07/21 14:41 ID:???
>>848
OOの考え方ができていればそれなりに利点はある。
責任をはっきりさせるように作れば保守性もあがるしね。
ただ、perlはもともとOOするためのスクリプトじゃないので
OOには不向き。
完璧なOOをしようとしても、いろいろと不都合がでて、結局
ぐちゃぐちゃなソースになってしまう。

ちなみに、モジュール内で
$self->{'key'}でアクセスできるのはOOとして正しい。
Javaでもthis.keyとかってアクセスできるしね。
ただ、問題なのがモジュールの外からでも
$object->{'key'}でアクセスできちゃうこと・・・・・

まぁ、所詮perlなのでその辺はあまり深く考えないほうがいいっす。
866nobodyさん:03/07/21 14:44 ID:???
>>864
どうなんだろう?うまくいくならいいんじゃない?
もれだったら以下のようにする

foo($b,@a);

sub foo {
my $b = shift;
my @a = @_;
・・・・・
}

もしくは
foo(\@a, $b);

sub foo {
my $aRef = shift;
my $b = shift;
my @a = @$a;
・・・・・
}

引数で渡した値はすべて@_に詰め込まれるので
確か
sub foo{
my @a = @_:
した時点で、$bも@aに入っちゃう気がする・・・・
867848:03/07/21 14:54 ID:???
>>865
>$object->{'key'}でアクセスできちゃうこと・・・・・
やっぱりこれが納得できなかったんですよ・・・

でもかなりなぞが解けてきました。
後はいかにOOPっぽく書くかだけです!
勉強になりました。

>>864
私も@aと$bは逆にします。

ちなみに確か$bはソートの時に使う変数なのであまり使わないほうがいいかもです。
868nobodyさん:03/07/21 14:54 ID:???
俺はこっちを使うな

foo($b,@a);

sub foo {
my $b = shift;
my @a = @_;
・・・・・
}
869nobodyさん:03/07/21 15:09 ID:???
>>866
>>868
即レスありがとう。

my $b = shift;
my @a = @_;

がスマートですね。こっち使います
870ともちゃん:03/07/21 15:33 ID:O4IhS66K
855番さん、わたしのためにありがとうございます。
> 動くかどうかは分かりませんが、参考までに。
> #!/usr/bin/perl
> use strict; &main; exit;

色々変更したのですが、残念ながら動かなかったんです。(T_T)
なので、その前にセットできているか確かめてみました。
そしたら、書き込めていないらしいのです。
#!/usr/bin/perl
use strict; &main; exit;
sub main{my $id = "abc";
my $value = "def";
print "Set-Cookie: ".setcookie($id,\$value);
print "Content-Type: text/plain\n\n";
print "Welcome !";}
sub setcookie{
my ($id,$cookie) = @_; my $expires = ""; my $day ="";
$$cookie =~ s/([^\w ])/'%'.unpack('H2',$1)/eg;
$$cookie =~ tr/ /+/;
if ($day > 0){
my ($mday,$month,$year,$youbi) = (localtime(time + (7200)));
$youbi = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat')[$youbi];
$month = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')[$month];
$year += 1900;
$mday = sprintf("%02d",$mday);
$expires = " expires=$youbi, $mday-$month-$year 00:00:00 GMT";}
return "$id=$$cookie;$expires\n";}
これで書き込めるはずだという事です。
こっちは変じゃないですよね?
871nobodyさん:03/07/21 15:45 ID:???
>>870
君の頭が変
変っていうかおめでたいね。

できるかできないか実際やってみればいいだろ
ヴォケ!
それで、書き込めなかったらどっか悪いんだよHAGE!
そもそも、Cookieについて理解してるのか???ぁあん(゚Д゚#)

my $day = "";してて
if($day > 0)
ってのがわけわからんけど
872nobodyさん:03/07/21 15:49 ID:???
>>871
病院いったほうがいいよ。
873871:03/07/21 15:53 ID:???
>>872
明日いってくる
874nobodyさん:03/07/21 18:35 ID:???


























875nobodyさん:03/07/21 18:48 ID:???
>>874
は?そりゃお前が悪いだけだろ。
3行目にprint $count;を入れてみろ。
876nobodyさん:03/07/21 19:35 ID:???
>>870
重要なことは、知りたい物をはっきり目に見える形にすること。
やり方はいろいろあるけどね。

>print "Content-Type: text/plain\n\n";
>print "Welcome !";}

の部分を以下に書き換えで、クッキーを見る。

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

<html><head><title>check</title></head><body>
<script language="JavaScript"><!--
alert("Cookie=\""+document.cookie+"\"");
//--></script>
</body></html>
EOF
}
877nobodyさん:03/07/21 19:54 ID:???
<script type="text/javascript"
と書く香具師は誰もいないのか鬱。
878nobodyさん:03/07/21 19:56 ID:???
>>877
Perlスレでわざわざ嘆くことでも無かろう。
879nobodyさん:03/07/21 19:57 ID:SiseSbMQ
ネットサーフレスキューの簡易データベースの項目を増やすにはどうすればいいですか?
880nobodyさん:03/07/21 20:00 ID:???
>>879
死ね。
881nobodyさん:03/07/21 20:09 ID:???
>>879
このスレは「perlコーディング初心者」の質問スレなので、レスキューやKENT等の
ヘボスクリプトをいじれないウルトラボは経験値上げてから来てください。
882nobodyさん:03/07/21 20:27 ID:???
ウルトラボ?
883nobodyさん:03/07/21 20:30 ID:???
>>877
何を考えてんだか
884nobodyさん:03/07/21 21:33 ID:7NpeSLR0
連想配列からキーをスカラー変数で指定して
値を取り出すことは不可能でしょうか?

$nedan = $F_NEDAN{$name};
これでやってみると
$nedanは空でした。
885nobodyさん:03/07/21 21:46 ID:???
>>884
はいはい、良かったね。氏ねバカ。

print $F_NEDAN{hoge},"\n";

$name = "hoge";
print $name,"\n";
print $F_NEDAN{$name},"\n";
886nobodyさん:03/07/21 21:46 ID:???
>>884
それはお前がミスしてるだけ。
$nameにブツが入っているのかどうかよく確認しろ。
887nobodyさん:03/07/21 22:28 ID:???
おまえらイライラすんなって。
888nobodyさん:03/07/21 22:48 ID:???
>>885
カルシウム タリナイナ (´д)ヒソ(´д`)ヒソ(д` )
889nobodyさん:03/07/21 23:05 ID:???
>>860
は本当?
890nobodyさん:03/07/21 23:50 ID:???
>>889
本当。使ってみればわかることじゃん。
891ともちゃん:03/07/22 01:21 ID:U6Ps44rq
871番さん
my $day = "";のif($day > 0)ですがif($day = 0)にしました。
でも、my $dayの記述はやめてしまいました。
日時の取得も{}から外に出して時間も取得する事にしました。(^_^)v
わたし馬鹿ですから・・・

876番さん、ありがとうございます。
時間の取得に関係する事は前にも書いたみたいにして
クッキーが入っているか試してみましたよ。
abc=defってアラートが出てきたので、書き込まれている事になると思います。
だから、それに対してのクッキーの読み込みの部分がうまくいかないみたいです。
私の最初の書き方がダメだったのかしら・・・(;_;)
855番さんにせっかく教えてもらえたのに〜。

分からなくて困ってしまいました。
892nobodyさん:03/07/22 02:02 ID:???
めちゃくちゃだな。if($day = 0)
893nobodyさん:03/07/22 02:04 ID:???
まだやってんのか・・・
cookieの読み書き使ってるスクリプトなんかいくらでもあるんだから、
それでも参考にしたほうが早い
894nobodyさん:03/07/22 03:10 ID:???
GETしに行って、デッドロックを避ける為に
タイムアウトさせたいのですが、
どう書いたらいいですか?
895nobodyさん:03/07/22 04:20 ID:???
>>891
クッキーを見えるようにスクリプトを書きかえて確認しる。
難しい所はないでしょ?

>>894
alarmとシグナルの使い方なら、
Perl クックブックのレシピ16.21
もしくは perldoc perlipc
http://www.kt.rim.or.jp/~kbk/perl5.005/perlipc.html#Signals
もしくは
http://pc2.2ch.net/test/read.cgi/php/1044717887/879-886
辺りで。
896nobodyさん:03/07/22 08:49 ID:I6YqyoJP
今、htmlファイルを読み込み、そこに新たなデータを付け加えてまたhtmlに書き出すスクリプトを作っています。

$name3 = '../../name.html';

open IN,"$name3";
@UP = <IN>;
close IN;

$temp = <<"TEMP";
<!--NEW UP-->
<div>
<p>$date</p>
<p>$name1</p>
<p>$name2</td>
</div>
TEMP

foreach $upd (@UP){
$upd =~ s/<!--NEW UP-->/$temp/;
}

open IN, ">$name3";
print IN @UP;
close IN;

というように書いてみたのですが、name3.htmlに書き出してくれません。
どう書いたら、htmlを書き出してくれるでしょうか?
897nobodyさん:03/07/22 09:44 ID:???
ActivePerl5.8を入れてPerl/tk使ってみますた。
Dos窓がビロビロと出てくるのが気になりイライラがつのります。
Perl/tkを何に使うおうか小一時間かんがえますた。

答え(妄想してください。): ・・・・・・・・・・・・・
898nobodyさん:03/07/22 10:22 ID:???
>>896
> $name3 = '../../name.html';
name3.html が定義されていません。

> <p>$name2</td>
</p>がありません。

> $upd =~ s/<!--NEW UP-->/$temp/;
$upd =~ s/<\!--NEW UP-->/$temp/;
と描くべきでしょう。

> print IN @UP;
print IN join("\n",@UP);
ではないでしょうか?

>>897
板違い。
電波・お花畑
http://etc.2ch.net/denpa/
899nobodyさん:03/07/22 10:29 ID:???
>>898
! はメタ文字じゃないぞ。
900nobodyさん:03/07/22 10:47 ID:???
>>896
はいはい、良かったね。氏ねバカ。

1.name.htmlに書き出しているのに、name3.htmlに書き出されると勘違いしている。

2.書き込み権限が無い
open IN, ">$name3" or die $!;

質問がめちゃくちゃだからこれ以上書き込みするな。礼も何もいらん。
質問すらまともにできないのは初心者未満だ。もう一度小学校行って来い。
901nobodyさん:03/07/22 11:13 ID:???
>>899
すまぬ。
?<! と勘違いしていたようだすた。∧||∧
902nobodyさん:03/07/22 12:21 ID:???
>>895
げ。windowsでは使えないって書いてある、、、
903nobodyさん:03/07/22 12:26 ID:???
>>900
おまえ病院はいった?
904nobodyさん:03/07/22 13:09 ID:???
みんなもちつけ
>>896
name3.htmlに>>で書き出さないとだめじゃないの?
それと書き出しただけじゃだめじゃないの?
クライアントのブラウザの更新をjavascriptでやったら?
905nobodyさん:03/07/22 13:56 ID:???
>>896で問題なく動く
単に書き込まれるファイル名を勘違いしてるだけ
906nobodyさん:03/07/22 13:59 ID:???
おっと、あくまで元ファイルに上書きで更新ね
907nobodyさん:03/07/22 14:10 ID:???
>>896
open NAME3, '+<' . $name3 or die;
{
  local $/ = "<!--NEW UP-->\n";
  <NAME3>; # NEW UP まで移動
  my $pos = tell; # NEW UP 直後のファイルポインタ
  my $old = <NAME3>; # NEW UP より下のデータ
  seek NAME3, $pos, 0; # NEW UP 直後まで戻る
  print NAME3 <<"NEW";
<div>
<p>$date</p>
<p>$name1</p>
<p>$name2</p>
</div>
NEW
  print NAME3 $old;
}
close NAME3;
908nobodyさん:03/07/22 14:53 ID:???
>>907
へそ曲がりだなw
909904:03/07/22 16:57 ID:???
そうか、上書きでいいのか。
>そこに新たなデータを付け加えて
なんて書いてあったから・・・
そうか、サーバ上のファイルに変更を加えないのか。
>またhtmlに書き出す
なんて書いてあったから・・・
でも、「もちつけ」はよかったでそ

910nobodyさん:03/07/22 20:06 ID:???
>>897
Dos窓を消す方法はあるぞ。
911nobodyさん:03/07/22 20:35 ID:???
DOS窓って、まだ95/98使ってるのか?
912nobodyさん:03/07/22 20:50 ID:???
>>911
Meでも。
913nobodyさん:03/07/22 21:09 ID:???
Dos窓消す方法ってないでしょ・・・。
914nobodyさん:03/07/22 21:12 ID:???
>>913
exitと入力。
915nobodyさん:03/07/22 21:23 ID:???
>>914
そういう意味じゃなくて
perl/tkつかったプログラム実行すると
tkウインドウの後ろでDos窓がずっとでてる。
どうやればDos窓を表示せずにtkウインドウだけ表示するか
ということを質問してるんじゃないかな。
916nobodyさん:03/07/22 21:31 ID:???
>>915
いいや、きっと閉じられなくなったんだ。
917nobodyさん:03/07/22 21:40 ID:???
>>916
はぁ・・・
918ともちゃん:03/07/22 21:42 ID:U6Ps44rq
895番さん
それができなくて困っているんですー。(~_~;)
どこか他の質問掲示板で良い場所ご存知ですか?
色々な場所で聞いてみたいのです。
919あぼーん:あぼーん
あぼーん
920あぼーん:あぼーん
あぼーん
921nobodyさん:03/07/22 22:14 ID:???
>>918
ずいぶん失礼な態度だな。
ここの人間が役に立たないと思うんなら早いとこ出て行ってくれ。
922nobodyさん:03/07/22 22:15 ID:???
第三者だが他の奴はともかく>>921が役に立つとは到底思えない。

923あぼーん:あぼーん
あぼーん
924nobodyさん:03/07/22 22:31 ID:???
897っす。 Dos窓が使えない奴もいるのね。
環境は、xp で、ActivePerl5.8 で、Perl/tk試しです。板違いで、ごめんよ。

use Tk;
$top = MainWindow->new();
$button = $top->Button( -text => 'EXIT', -command => \&exit );
$button->pack();

例えば、上のコードをtest.pl として起動すると、
tkウィンドウが表示される前に、
DOS窓が一瞬表示されフェードアウトするようにビロビロと消える動作をし、
それが、ただイライラすると書いた分けです。

誰か試さないかい?
925nobodyさん:03/07/22 22:32 ID:???
>>918
自分で何もやらない・言われたことを何もやらない。
そんな態度ではどこの掲示板へ行っても同じこと。
2ちゃんを特別だと思うなよ。モニタの前にいるのは人間だ。
926nobodyさん:03/07/22 22:32 ID:???
>>922
普通はわざわざ第三者を名乗らないと思うが。
927nobodyさん:03/07/22 22:41 ID:???
897っす。

>どこか他の質問掲示板で良い場所ご存知ですか?
>色々な場所で聞いてみたいのです。

ともちゃん、おもしろすぎ。みんなイライラするから、どっかいき。
928nobodyさん:03/07/22 23:04 ID:???
>>924
DOS窓も【コマンドプロンプト】も表示されないぞ。
って言うか、何も表示されないまま終わった

※DOS窓 = 95/98/Me
※コマンドプロンプト = NT/2000/Xp
929nobodyさん:03/07/22 23:13 ID:???
>>928
#!C:/Perl/bin/perl
use Tk;
$top = MainWindow->new();
$button = $top->Button( -text => 'EXIT', -command => \&exit );
$button->pack();

でどう?

>※DOS窓 = 95/98/Me
>※コマンドプロンプト = NT/2000/Xp

ああ、DOS窓で通じないのか。ごめんよ。
930nobodyさん:03/07/22 23:22 ID:???
>>929
3.1、3.0、2.0、1.0とCEが抜けてるぞ。
931nobodyさん:03/07/22 23:33 ID:???
うちのMeにはDOS窓という項目がありませんが、
どうやって呼び出すのですか?
932 ◆hMJAPH9PWA :03/07/22 23:34 ID:???
>>DOS窓が残ってイライラしてるやつ

perl.exeのかわりにwperl.exeを使えばいい。

でもあなたの態度はよくないよ。
質問する側が煽ってどうすんのさ。
もう少し礼儀を身に付けたほうがいい。
933nobodyさん:03/07/22 23:38 ID:???
>>929
use Tk;
$top = MainWindow->new();
#$button = $top->Button( -text => 'EXIT', -command => \&exit );
#$button->pack();
MainLoop();

こうだろ?
Win2000だが起動時にちょっとDos窓が表示されるな。
934nobodyさん:03/07/22 23:40 ID:???
>>929
Tkのウィンドウ表示しないよ

環境は w2k + perl v5.6.1

Tk 使ったことないから解らんけど、site/lib/Tk.html 見ると
そのサンプル、MainLoop が無いから、「一瞬」だけ表示して
すぐ終わっちゃうから、表示されてないようにみえるんだな

use Tk;
$top = MainWindow->new();
$button = $top->Button( -text => 'EXIT', -command => \&exit );
$button->pack();
MainLoop;
935nobodyさん:03/07/22 23:46 ID:???
俺の環境(w2k)だと、「DOS窓」も「コマンドプロンプト」も表示されないよ。
936nobodyさん:03/07/22 23:46 ID:???
>>932
Dos窓上でtk使ったプログラムを動かしたときじゃなくて
tk使ったプログラムのアイコンをダブルクリックしたときに
Dos窓がでてくるのが気になるんだと思う。
937nobodyさん:03/07/22 23:49 ID:???
>>935

最後にMainLoop();
938nobodyさん:03/07/22 23:50 ID:???
>>936
そりゃ、当然だろ。tk でウィンドウ表示する前に perl 起動してるんだから、
コマンドプロンプトウィンドウ出るのはしょうがないと思うが…
939nobodyさん:03/07/22 23:51 ID:???
どうにかしてでてこないようにはできないものか。
940nobodyさん:03/07/22 23:56 ID:???
ごめん、MainLoop();が落ちてました。

>>933
ありがとう。そうそう同症状です、納得しました。

>>934 
ありがとう。Perl5.8から標準だそうで、
MainLoop がないとtk自体もですね。

>>932
ご指摘ありがとう。
ここ>>897 質問でなく、もともとネタだったりするから。
941nobodyさん:03/07/23 00:10 ID:???
>>935
#!C:/Perl/bin/perl #いらないかも
use Tk;
$top = MainWindow->new();
$button = $top->Button( -text => 'EXIT', -command => \&exit );
$button->pack();
MainLoop;

>>936
どうもです。そうです。そういうことです。

>>938
どもです。確かにしょうがないとも思います。(w

>>939
どもです。できれば出て来ない方がね。(w
942nobodyさん:03/07/23 00:42 ID:???
>>941
plへのショートカット作って「プロパティ」で「起動時のウィンドウの大きさ」を「最小」にすれば?
943nobodyさん:03/07/23 00:55 ID:???
>>941
932さんが答え教えてくれてるじゃん。
{$Perlのインストールディレクトリ}\bin\wperl.exeを.plファイルに
関連付ければ、エクスプローラからダブルクリックで窓は開かないはず。
944896:03/07/23 01:45 ID:???
ありがとうございました。
無事、動くようになりました。
お礼が遅くなりまして、すみませんでした。
とんちんかんな質問にも回答くださった皆様に、感謝しています。
もっと勉強してから出直します。
945nobodyさん:03/07/23 02:00 ID:???
原因言わねーのかよ。回答する価値の無い人間だな。
946nobodyさん:03/07/23 05:51 ID:???
質問させてもらいに来ました。
記述その物ではありませんが、構成的なアルゴリズムの質問です。

初めに-----
CGIのゲーム
IDを用いて個人登録
参加者一名につきtxtFileが一つ
ゲーム全体のtxtFileが一つ(頻繁に書き換え)


この時、ある参加者の特定の行動により「参加者が保有するファイル」を書き換えたい場合があります。
1:そう言った時は、全体の情報ファイルになんらかの記録を残しておき「参加者がアクセスした時」に書き換えたほうが良いでしょうか?
2:それとも、書き換える原因となった処理の時、「その場で」全参加者のファイルを書き換えたほうが良いでしょうか?

前者の場合は実現が困難で、またバグも出そうな気がします。
また効率の良さそうなやり取りもピンと浮かびません(俺の実力では)

後者の場合は、実現が簡単そうで管理も比較的容易な気がしますが、
参加者が増えた時は多量のファイルを一気に検索&書き換えで微妙にコワイです。
それと、A君のアクセスにより、直でB君所有のデータファイルが書き換えられるのはなんか個人的に抵抗があります。


こんな場合、普通、プログラマーはどちらの処理方式を取るのでしょうか?
もしよろしければ、理由もつけて回答してくれると嬉しいです。
947nobodyさん:03/07/23 09:11 ID:???
好きな様にすればぁ?
948946:03/07/23 10:16 ID:???
すみません、今見なおしたら文書が変だったので訂正します。

この時、ある参加者の特定の行動により「参加者が保有するファイル」を書き換えたい場合があります。

この時、ある参加者の特定の行動により「他の参加者が保有するファイル」を書き換えたい場合があります。

949nobodyさん:03/07/23 12:20 ID:???
太いものには巻かれろ。
950nobodyさん:03/07/23 12:42 ID:???
>>946
データベース使え。
あと微妙にスレ違いかもしれん(・・・そうでもないか?
951nobodyさん:03/07/23 12:57 ID:???
ある参加者のイベントによって他の全参加者のファイルを扱わなければ
ならない構造が誤りの気がする
データベース使うならそれもありだろうけど
952nobodyさん:03/07/23 13:50 ID:???
で、それのどこが【Perl コーディング】と関係ある訳?
953nobodyさん:03/07/23 14:29 ID:???
ちょっち質問です。
HTMLを出力した後に一度バッファをフラッシュしてから
時間のかかる処理をしたいのですが
どのように書けばよいのでしょうか?
954953:03/07/23 14:37 ID:V4h+SVeU
ageわすれますた。

ついでにもう一つお伺いしたいんですが
複数の変数やら配列を undef する場合
一個づつ
undef $val; undef @array; undef %hash;
と書く以外に方法ってあるでしょうか?
ちょと面倒くさいなと思いまして。
955あぼーん:あぼーん
あぼーん
956nobodyさん:03/07/23 15:18 ID:???
undef $val @array %hash;
957nobodyさん:03/07/23 15:32 ID:???
>>953\
$| = 1; # flushする
958953:03/07/23 15:46 ID:???
>>956
ありがとです。

>>957
print $HTML;
$|=1;
sleep 5;

とやると出力を拝む前にシッカリ sleep していて
何だかフラッシュされていない気がするんですが
どういうコトなんでしょう?
959nobodyさん:03/07/23 16:22 ID:???
>>958
httpサーバが処理が全部終わるまで待ってる。
Perlが終了した時点で出力する。
960nobodyさん:03/07/23 16:27 ID:???
>>958
オートフラッシュはprintするより前で
場合によってはソースの先頭でもいいし
961967:03/07/23 16:48 ID:???
そだよ、960さんの言うように
$|=1;
print $HTML;
sleep 5;
ってしなきゃ。
962953:03/07/23 16:59 ID:???
なるほど。
print の前に書くんですね。
皆さんアリガトでした!
963nobodyさん:03/07/23 22:08 ID:???
Perl/tk[試し中]

>>942
ありがとう:こんな方法もあるんですね。勉強になりました。

>>943
ありがとう:バッチリ!です。スッキリ!です。感謝です。
気になるのは wperl.exe でも支障はないのでしょうか?
964nobodyさん:03/07/24 00:15 ID:???
>>6http://www.bekknet.ad.jp/~bero/docj/module_/ って消滅したの?
965nobodyさん:03/07/24 02:04 ID:???
リファレンス(?)で悩んでます

ニュースグループのグループリスト取得するものですが、$nntp->list の所の説明を読むと
> アクティブなすべてのニュースグループについての情報を取得する。戻り値は、
> グループ名をキー、配列へのリファレンスを値とする、ハッシュへのリファレンスである。
> 値が指す配列は、グループの最初の記事番号、グループの最後の記事番号、
> グループについての情報フラグを要素に持つ。

と、あるのですが @$group{$_} を print すると ARRAY(0x33174ec) とか表示されてしまいます
イメージ的に 最初の記事番号 最後の記事番号 フラグ と表示されると思ったんですが…

use strict;
use Net::NNTP;
{
my ( $nntp, $group );

$nntp = Net::NNTP->new( 'some.what.news', Debug => 1 );
$nntp->reader;

$group = $nntp->list;
foreach ( keys %$group ) {
print "N=$_ " . "V=" . @$group{$_} . "\n";
}
$nntp->quit;
}
966nobodyさん:03/07/24 02:09 ID:???
>>965
@{$group->{$_}}ちゃうんか。
967nobodyさん:03/07/24 02:58 ID:???
>>966
表示するようになったけど、全部同じデータでしかも、"3" というデータしかない…。
俺が思っているデータイメージは

$group = (
[ 'name', [ 1, 2, 3 ] ], # name はグループ名で、1,2,3 ... のリストがグループの記事番号とかのデータ
 ・
 ・
 ・
 (以下略)
);

と、思ってるんだけど、間違いないカナ?
968nobodyさん:03/07/24 03:05 ID:???
その語尾はやめれ
969nobodyさん:03/07/24 03:21 ID:???
なんで 3 というデータしか表示されないか解った。
print に渡した時にはスカラー値として、リストのデータが 3 あるから、
3 としか表示されなかった。foreach でもう一回ループを廻すか、
join とか使うしかないのね…。

# 青らくだ本買わないと駄目だぁ…。

$group = $nntp->list;
foreach $name ( keys %$group ) {
print "N=$name\n";
foreach ( @{$group->{$name}} ) {
print "\t$_\n";
}
}

# それにしても、グループの数が物凄いんですが…。
970nobodyさん:03/07/24 16:26 ID:kzmo+pjp
rand は時間で数字が決まります。
完全にランダムにするか、2回連続で
同じ数字は出ないようにする方法は?
971nobodyさん:03/07/24 16:40 ID:???
rand が時間によって乱数を生成するとはマニュアルのどこにも載ってないが?
972nobodyさん:03/07/24 16:48 ID:???
srandしてねーだろ。
973nobodyさん:03/07/24 16:50 ID:???
>>971
( ´,_ゝ`)プッ マニュアルダッテ
974nobodyさん:03/07/24 16:56 ID:???
>>973
( ´,_ゝ`)プッ マニュアルシラナイナンテ
http://www.perldoc.com/
Perl Manpage - Reference Manual
975nobodyさん:03/07/24 17:03 ID:???
>>974
( ´,_ゝ`)プッ ジカンデキマルノハマチガイナイヨ
      モットベンキョウシヨウナ… 
976nobodyさん:03/07/24 17:12 ID:???
>>975
( ´,_ゝ`)プッ マニュアルシラナイヤツニイワレタクナイヨ
         アトオレ971ジャナイカラ。モウソウハ ヤメヨウネ
977nobodyさん:03/07/24 17:18 ID:???
( ´,_ゝ`)プッ
http://www.perldoc.com/perl5.8.0/pod/func/rand.html
どこに時間で決まるなんて書いてあるんだ?
978nobodyさん:03/07/24 17:22 ID:???
>>970 ID:kzmo+pjp ヴァカ丸だし晒しあげ
979nobodyさん:03/07/24 17:28 ID:MQ0CG0Oj
>>978
なんでID出てないの
980nobodyさん:03/07/24 17:43 ID:???
>>967
$group はハッシュリファレンスだろ?
$group = { name1 => [ ... ], name2 => [ ... ], ... } じゃねーの?

> print に渡した時にはスカラー値として、リストのデータが 3 あるから、
自分で . 演算子使ってスカラーコンテキストにしてるだけじゃん。

while (my($name, $num) = each %$group) {
print "N=[$name] ", 'V=[ ', join(' / ', @$num), " ]\n";
}

この辺しっかり読め。
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perldata.html
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perldsc.html
981nobodyさん:03/07/24 18:02 ID:???
次スレまだぁ〜?
982nobodyさん:03/07/24 18:02 ID:???
randが時間で決まると言うか、perl5.004以降はsrandを省略すると
srand(time)が自動的に実行されるってことだろ

>>970
完全にランダムも続けて同じ数字が出ないようにするのも
なんらかで出た値を保持する以外にないよ
983nobodyさん:03/07/24 18:08 ID:???
次スレ立てないなら埋めるぞ
984nobodyさん:03/07/24 18:32 ID:???
>>982
<q cite="http://www.kt.rim.or.jp/~kbk/perl5.doc/perldelta.html">
srandのデフォルトの種はtimeが使われていましたが、これは変更され
ました。現在では、予測するのが困難なシステム依存な値の激しい
(heady)組み合わせで、大部分の everyday purpose に十分なものです。

5.004以前では、srandを最初に呼ぶことなしに引数なしでrandを 呼んだ
場合、ほとんど、ひょっとしたらすべてのマシンで同じ乱数列を得ること
になっていました。現在、perlがそれ以前にsrandを呼び出 していないのに
randを呼び出しているのを検出したときに、perlは デフォルトの種を使って
srandを呼びます。5.004以前のシステムで実行するかもしれないような
プログラムでは、今でも srand を手作 業で呼び出すべきですし、あなたが
デフォルト以外のものを種としたい場合にももちろんそうすべきなのです。
</q>
985nobodyさん:03/07/24 18:34 ID:???
うめ
986nobodyさん:03/07/24 18:35 ID:???
梅。
987nobodyさん:03/07/24 18:36 ID:???
うめー
988nobodyさん:03/07/24 18:38 ID:???
おっぱい
989nobodyさん:03/07/24 18:46 ID:???
ランダムに文を表示するやつを持ってるんだけど
その文章をリロードしても変わらないようにしたい。1日くらい。
そういうのって出来ませんかね。
↓今の状態
#! c:/perl/bin/perl

# おみくじを引く
$role = int(rand 6);

if($role == 0) {
$kuji = '大吉';
}
(略)
else {
$kuji = '凶';
}

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

# HTMLの出力
print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n";
print "<html>\n";
print "<head><title>Perlおみくじ</title></head>\n";
print "<body><p>今日のあなたの運勢は……<big>$kuji</big>です。</p>\n";
print "</html>";
990nobodyさん:03/07/24 18:52 ID:???
なんだ、ばかばかしい・・・
991nobodyさん:03/07/24 18:57 ID:???
>>989
クッキー
992nobodyさん:03/07/24 19:01 ID:???
>989
同じIP && 異なるマシン(同じ世帯の別マシン) → IPと日付を使った数字をsrandの種にする
異なるIP && 同じマシン(ダイヤルアップ接続) → クッキーを使う
異なるIP && 異なるマシン(誰が見ても変わらない) → 日付をsrandの種にする
993nobodyさん:03/07/24 19:02 ID:???
>>991
レス番がくっくいー
994nobodyさん:03/07/24 19:08 ID:???
995nobodyさん:03/07/24 19:12 ID:???
>>982
srandが実行されていない場合、最初に一度だけ初期化される。
実際にはpidやら色々な値を足してる。
あと、/dev/randomが使えるなら、timeよりそっちを優先して使うようになってるぽい。

rand自体はCライブラリのrand()を呼び出したりしてる。
オーバーライドできるので、実装によって違いがあるかも。

http://pc2.2ch.net/test/read.cgi/php/1042260745/9
乱数ならこの辺りを参照。
996nobodyさん:03/07/24 19:18 ID:???
                _∧_∧_∧_∧_∧_∧_∧_∧_
     デケデケ      |                          |
        ドコドコ   < 次スレまだーー?        >
   ☆      ドムドム |_  _  _ _ _ _ _ _ _ _|
        ☆   ダダダダ! ∨  ∨ ∨ ∨ ∨ ∨ ∨ ∨ ∨
  ドシャーン!  ヽ         オラオラッ!!    ♪
         =≡= ∧_∧     ☆
      ♪   / 〃(・∀・ #)    / シャンシャン
    ♪   〆  ┌\と\と.ヾ∈≡∋ゞ
         ||  γ ⌒ヽヽコ ノ  ||
         || ΣΣ  .|:::|∪〓  ||   ♪
        ./|\人 _.ノノ _||_. /|\
         ドチドチ!

997nobodyさん:03/07/24 19:21 ID:???
次スレ建てる人は >>4-6 辺りの dead link も調べてくれ(w
998nobodyさん:03/07/24 19:27 ID:???
>>980 あんがと。
すまんのぉ、青らくだ本持ってないから、その辺全然解らんのよ。
マニュアルサイト行ってもどこを読んでいいのやら、全然検討違いな所読んでた<俺
999nobodyさん:03/07/24 19:27 ID:???
( ゚∀゚)つ〃∩2ゲット2ゲット2ゲット
1000999:03/07/24 19:27 ID:???
999
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。