Perl コーディング初心者質問コーナー Part25
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
03/06/28 01:18ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
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
0002nobodyさん
03/06/28 01:18ID:???Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980 参照不能
DAT: http://tako.2ch.net/perl/dat/957208980.dat
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087 参照不能
DAT: http://tako.2ch.net/perl/dat/971817087.dat
Part3 http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521 参照不能
DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part4 http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156 参照不能
DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part5 http://pc.2ch.net/php/kako/988/988728069.html
Part6 http://pc.2ch.net/php/kako/996/996075607.html
Part7 http://pc.2ch.net/php/kako/1000/10002/1000267444.html
Part8 http://pc.2ch.net/php/kako/1003/10039/1003900311.html
Part9 http://pc.2ch.net/php/kako/1009/10095/1009549309.html
Part10 http://pc.2ch.net/php/kako/1014/10145/1014556702.html
Part11 http://pc.2ch.net/php/kako/1017/10172/1017201229.html
Part12 http://pc.2ch.net/php/kako/1019/10199/1019917048.html
Part13 http://pc.2ch.net/php/kako/1022/10227/1022731565.html
Part14 http://pc.2ch.net/php/kako/1026/10269/1026977659.html
Part15 http://pc.2ch.net/php/kako/1028/10288/1028816385.html
0003nobodyさん
03/06/28 01:18ID:???Part16 http://pc.2ch.net/php/kako/1032/10320/1032070299.html
part17 http://pc.2ch.net/php/kako/1034/10345/1034583844.html
part18 http://pc.2ch.net/php/kako/1037/10377/1037797479.html
part19 http://pc.2ch.net/php/kako/1042/10422/1042260745.html
part20 http://pc2.2ch.net/php/kako/1044/10447/1044717887.html (タイトルに19と誤記)
part21 http://pc2.2ch.net/php/kako/1047/10479/1047980851.html
part22 http://pc2.2ch.net/test/read.cgi/php/1050369328/l50
part23 http://pc2.2ch.net/test/read.cgi/php/1053051519/l50
part24 http://pc2.2ch.net/test/read.cgi/php/1054992610/
[ひまぢん氏のミラー]
Part1 http://www.angelfire.com/ak5/2ch-web-program/kako/957208980.html
Part2 http://www.angelfire.com/ak5/2ch-web-program/kako/971817087.html
Part3 http://www.angelfire.com/ak5/2ch-web-program/kako/979894521.html
Part4 http://www.angelfire.com/ak5/2ch-web-program/kako/984430156.html
Part5 http://www.angelfire.com/ak5/2ch-web-program/kako/988728069.html
0004nobodyさん
03/06/28 01:19ID:???・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/
0005nobodyさん
03/06/28 01:19ID:???・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/
0006nobodyさん
03/06/28 01:19ID:???・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/
0007nobodyさん
03/06/28 01:32ID:???0008nobodyさん
03/06/28 01:32ID:???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です。
00098
03/06/28 01:41ID:???packすればよかったんですね。。。
ゴミレスすいませんでした。
0010nobodyさん
03/06/28 01:41ID:???5cで終わってるヤツ
0011nobodyさん
03/06/28 01:42ID:???00128
03/06/28 01:43ID:???URLエンコード?されてたから、それを戻さないと使えなかったようです。
本当に、申し訳ないです。
0013nobodyさん
03/06/28 08:31ID:???パラメータのデコードや出力のエンコードを面倒見てくれるし、
HTMLの文法間違いや入れ子のミスも防げるから楽だよ。
http://perldocjp.sourceforge.jp/
0018nobodyさん
03/06/28 11:36ID:SawIuqpjうちの環境だと確かに読込に0.2秒ほどかかるな。
7年落ちのHDDとCPUが133MHzだけど。
0020nobodyさん
03/06/28 12:41ID:???俺の環境だと200KBくらいあるな。コメントが多いといっても、これはなかなかのものだ。
0021nobodyさん
03/06/28 12:54ID:???0022nobodyさん
03/06/28 13:16ID:SawIuqpj何が便利なん?
0024あぼーん
NGNG0029あぼーん
NGNG003027
03/06/28 14:34ID:???いや、俺25じゃないけど。でも答えてみる。
一応CGI.pmは使ってます。
でも特に楽というわけじゃなくて、俺が標準っぽいのが好きなだけです。
前は自作のライブラリ使ってたけど、大して変わらない。
特に不満は無いけど、強いて言えばパラメータを自動で保持してくれるのがちょっとうざかったり。
スクリプトの方で保持してもらいたくない奴を削除するのがマンドクセー。
0031nobodyさん
03/06/28 14:36ID:???0032nobodyさん
03/06/28 14:46ID:???0033nobodyさん
03/06/28 15:01ID:???自分用のコード(2,30行くらい)をrequireするくらいで、後は
CGI特有の処理でモジュール用意するほどのものって思いつかない。
ヘッダ出力のprint文とか、「こんたいぷれ」とか「こんたいえい」とかで漢字変換
するようになってるし。(text/plain text/html)
0035nobodyさん
03/06/28 15:16ID:???print "Content-Type: text/html; charset=EUC-JP\n\n";
print "Content-Type: text/html; charset=Shift_JIS\n\n";
まで出るようになってる。
「kontaiei」の方がはるかに早い。
0036nobodyさん
03/06/28 15:18ID:???なるほど。
まぁ、僕は、自分用のゴチャゴチャしたモジュールんなかにcontentってサブルーチン作ってるからそれでいいんだけど。
いちいち日本語に切り替えるのが面倒そう?そうでもない?
0037nobodyさん
03/06/28 15:19ID:???正確に入力できなそうで困らないかな。
0038nobodyさん
03/06/28 15:20ID:???そうでもない。慣れかも。一時的な短いスクリプトをさっと書きたい時とか
いちいちモジュール呼ばないので。
まぁこの辺は好き好きだと思うけど。
0040nobodyさん
03/06/28 16:47ID:???あと、
my($sec, $min, $hou, $day, $mon, $yea, $wek) = localtime();
なんかも入れておくと便利。
0041nobodyさん
03/06/28 16:53ID:???0043あぼーん
NGNG0045nobodyさん
03/06/28 17:53ID:???0048あぼーん
NGNG005025
03/06/28 19:47ID:???タグの閉じ忘れとかやだよー。
ファイルアップロード含む入力の取得でガチャガチャすんのやだよー。
要するに基本的な部分であれこれ悩むのやだよー。
アルゴリズムに労力割きたいよー。
開発時間短いよー。
……まあ、そんな感じでつ。
0051nobodyさん
03/06/29 00:51ID:x7Ccxqe1書けばいいのですか?
添付付きのメールの受信システムを作りたいのですが、ネットで探しても
なかなか情報が無かったためよろしくお願いします
0053nobodyさん
03/06/29 01:21ID:WiALlB7N1からちゃんとやりたいのであれば、
http://www.kt.rim.or.jp/~kbk/perl5.005/perlipc.html#Internet_TCP_Clients_and_Servers
これと、
http://www.ietf.org/rfc/rfc1939.txt
これ。あとは頑張れ。
0054あぼーん
NGNG0055nobodyさん
03/06/29 01:55ID:15+Vm9kHunicodeの文字列をURLエンコードするにはどうすればいいのでしょうか?
JavaScriptのescapeのように、あいうえお->%u3042%u3044%u3046%u3048%u304A
といった感じで変換したいのです。
$value =~ s/(\W)/'%' . unpack 'H2' , $1/eg;
とやっただけではムリでした。
どのようすればいいのでしょうか?
0058nobodyさん
03/06/29 03:58ID:???$value =~ s/(\W)/'%' . unpack 'H2' , $1/eg; が
何をしているか理解できていれば分かりそうなもんだが。
正規表現と pack/unpack について、もうちっと勉強すれ。
$value =~ s/(..)/'%u' . unpack 'H4' , $1/eg;
0059nobodyさん
03/06/29 08:56ID:???while(<FILE>) {
(置換とか)
}
open(WRITE, ">test.txt");
print WRITE <FILE>;
とやったのですがtest.txtにhoge.txtを処理した内容が書き込まれません。
何処が間違っているのでしょうか…。
Win2K、Apache1.3.27、ActivePerl5.6を使用。
0060nobodyさん
03/06/29 09:09ID:???で、***** が使えるかどうか評価する関数ってありますか?
0061nobodyさん
03/06/29 09:18ID:???open(FILE, "hoge.txt");
while(<FILE>) {
(置換とか)
push @new, $_; # ここ追加
}
open(WRITE, ">test.txt");
print WRITE @new; # ここ変更
こうだろ?
0062nobodyさん
03/06/29 09:21ID:???専用の関数はない。
@INCの中に、use(とrequire)がモジュールを探してくるディレクトリが入ってる。
それをreaddirとかで開いて使いたいモジュールがあるかどうかさがしなされ。
0063nobodyさん
03/06/29 10:14ID:???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);
}
0065nobodyさん
03/06/29 10:27ID:WiALlB7N>>62
そ、それは面倒くさすぎないか・・・?いつもそうやってんの?
eval("use MODULE");
error("Can't locale MODULE") if $@;
my $ins = new MODULE(xx,yy,zz);
これで済むじゃん。
0067nobodyさん
03/06/29 10:32ID:???ありがとうございます。
今回は61さんの方法でやって上手く行きました。
0069nobodyさん
03/06/29 13:34ID:???0071nobodyさん
03/06/29 14:44ID:???0073nobodyさん
03/06/29 21:22ID:???0074nobodyさん
03/06/29 21:34ID:15+Vm9kH&function($year,$mon,$day,$hour,$sec,$min);
とすると1056889951がリターンされてくるような。
0075nobodyさん
03/06/29 21:36ID:???0076nobodyさん
03/06/29 21:36ID:oIT5F8QqPOSIX::mktime()
ちなみに標準ライブラリ
007755
03/06/29 21:37ID:???>>56-58のみなさん
ありがとうございます。
解決しました。
UNICODEは%uに(4桁の16進数)が組み合わさるので、
Hで16進数、4で4桁ということでいいんですよね…?
007855=74
03/06/29 21:39ID:???>>75-76のお二人
ありがとうございました。
標準ライブラリももっと勉強した方がよさそうです(汗)。
0080あぼーん
NGNG0081119
03/06/29 22:52ID:tnHKF+kRこれをそのままフォームのボタンを押すことで同一のページに返したいのですが、
いちいち<input type="hidden" name="test" value="test">などとしないといけない
のでしょうか。
0082nobodyさん
03/06/30 00:13ID:???0083nobodyさん
03/06/30 00:19ID:???0084nobodyさん
03/06/30 01:01ID:???ググっても分かんないッス・・
0085nobodyさん
03/06/30 01:34ID:???0086nobodyさん
03/06/30 01:58ID:???0087nobodyさん
03/06/30 02:01ID:???>>84
coding
アルゴリズムや処理をコンピュータプログラムとして具現化すること。
または単にプログラムを作成すること。
0088nobodyさん
03/06/30 02:32ID:???0089nobodyさん
03/06/30 03:30ID:???0090nobodyさん
03/06/30 03:35ID:???0092座敷荒氏
03/06/30 06:49ID:???あのあと自分なりに勉強し、パラメータファイルを使用して
ファイル確認することができるように下のように書き換えました。
こちらはうまく動作しています。
#! /usr/bin/perl
while (<>){
($cmd_para) = split;
unless(-e $cmd_para){
exit(100);
}
}
exit(0);
そこで次にファイル削除を作成しようとおもい、
上記の箇所unlessをunlinkに書き換えたところ
シンタックスエラーが発生してしまいます。
どう修正すればいいのでしょうか。
よろしくお願い致します。
0093nobodyさん
03/06/30 07:04ID:???なんか基本がなってないような……
unlessは制御構造。unlinkは関数。名前は似てても、使い方は全く違うものだよ。
前スレ読めないんで、どうやりたいのかもうちょっと具体的に説明して。
それから今回はいいけど、エラーはできるだけ原文をそのまま書いてね。
カタカナで書くと、読み方を間違えていたり、肝心なところ(大抵読み方が分からない単語)を省略してたりして
意味が正しく伝わらないことがあるから。
0094nobodyさん
03/06/30 08:15ID:???0095nobodyさん
03/06/30 08:45ID:???いけないの?
0096座敷荒氏
03/06/30 10:20ID:???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.
と表示されてしまいます。
0097nobodyさん
03/06/30 10:31ID:???0099543
03/06/30 15:38ID:???お教え頂いたように修正しましたが
bash: ./Perltest: bad interpreter: Permission denied
と表示されてしまい、うまく動作しません。
使用したPerlファイル・パラメータファイル・削除対象ファイルの
パーミッションは設定済みです。
0100nobodyさん
03/06/30 16:03ID:???0101nobodyさん
03/06/30 16:05ID:???Content-Lengthが付いて無いファイルのサイズを取得する手段は無いものでしょうか。
0104nobodyさん
03/06/30 16:35ID:???おそらくHTTPヘッダのことを言ってるんだろうけど。
0105nobodyさん
03/07/01 09:06ID:???0106nobodyさん
03/07/01 12:57ID:???0107nobodyさん
03/07/01 13:18ID:???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
エラーの意味がわかりません、よろしくお願いします。
0108107
03/07/01 13:21ID:???Perlでbeep音を鳴らそうと
\aでアラーム音のエスケープシーケンスを使用しましたが
音が鳴りませんでした。
音を鳴らす方法が間違ってるでしょうか?
0109nobodyさん
03/07/01 13:56ID:???0110nobodyさん
03/07/01 14:07ID:???環境くらい書けよ。
意味がわからなかったら調べろよ。
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
0111nobodyさん
03/07/01 14:36ID:???ActivePerlで、\aで鳴る音をユーザ定義できない?
0112nobodyさん
03/07/01 15:13ID:???0113nobodyさん
03/07/01 15:36ID:???環境
ActivePerl v5.8.0.806 + Perlを始めよう! v.2.0.4.5
0114nobodyさん
03/07/01 15:52ID:???windows なんて厨房の使う os 知らんから、あとはヨロ
↓
0115nobodyさん
03/07/01 16:31ID:???systemで呼べばいいだけの話か
0116nobodyさん
03/07/01 16:42ID:hz3sfxOdWEB上の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 は
変換する必要があるか、という事です。
よろしくお願いします。
0118nobodyさん
03/07/01 17:17ID:???FROMはFORMのことでしょうが
IEやNetscapeブラウザではurlエンコードして送りますから普通はurlデコードしますね。
英数文字だけだったら問題ないけど一応やっとけ。
0119nobodyさん
03/07/01 17:51ID:9B8Cvuqqそんなものぐらいbatで書けよ・・・
0120座敷荒氏
03/07/01 17:54ID:???別にパラメータファイルを用意し
そのパラメータファイルにフルパスで書かれたファイルを
削除するPerlを作っているのですが、97さんに教わったとおりに
書き換えて下記のようにして実行したところ
エラーが発生してしまいます。
#! /home/perl/test
while (<>){
($cmd_para) = split;
unless(unlink($cmd_para)){
exit(100);
}
}
exit(0);
↓実行したものとエラー内容
$ ./Perl名 パラメータファイル名
bash: ./Perltest: bad interpreter: Permission denied
お力添えのほど、宜しくお願い致します。
0121nobodyさん
03/07/01 18:04ID:???関係ないが、珍しいものを見た
0122あぼーん
NGNG0124nobodyさん
03/07/01 18:09ID:F5KDEjxA#!の行がおかしいってエラーが出てるぞ。
0125nobodyさん
03/07/01 18:09ID:???何でもかんでも一度に書くな。
#! /home/perl/test
print "hello, world\n";
からやり直せ
0126あぼーん
NGNG0127nobodyさん
03/07/01 18:25ID:ycS3U73c0128座敷荒氏
03/07/01 18:27ID:???あ、できました。
どうもありがとうございます。
原因は本番環境から自前の環境に持ち込んだときに
書き換えたミスです。削除対処ファイルへのパスを記入していました。
124さん、他に助言してくださったみなさん、
本当にありがとうございました。
>>125
はい、仕事で作る事になったので
順番に勉強する暇がありませんでした。
これからもう一度勉強をしますので
宜しくお願い致します。
0129nobodyさん
03/07/01 19:43ID:hz3sfxOdCGIに送るのは数字だけなのですが、
念のために変換かませておきます。
ありがとうございました。
0130nobodyさん
03/07/01 19:58ID:???0-9a-zA-Z以外のものが入るのなら、変換しとけ。
0131nobodyさん
03/07/01 21:02ID:soOdqVTPpingはネットワークに負荷かけるぞ。
普通にsocket作ってbindしてconnectして失敗したらエラーでいいだろ。
モジュール使ったら3行くらいで作れそうな気がするが。
(使わなくても10行くらい)
0132nobodyさん
03/07/01 21:03ID:???0133nobodyさん
03/07/01 21:31ID:???0134コミュカレ
03/07/01 21:41ID:aHlU6obt一部の限られた組織等でしか利用されていなかったグループウェアを、
一般ユーザーも利用できるインターネット上のパーソナルグループウェアへ
「コミュカレ」はフリーソフトです。
ゴミの収集日等、地域の皆様どおしでも使えます。使い方はユーザー次第!!!
いろんな活用の仕方が考えられます。
その便利さを是非お試しになってみて下さい。
http://www.ecopig.jp/comucale/index.htm
0136nobodyさん
03/07/01 23:25ID:qNSyt42Zリンク先でどのように取得したらよいのですか?
よろしくおねがいします。
0137nobodyさん
03/07/01 23:27ID:???($y)=$ENV{QUERY_STRING}=~/y=([^=]*)/;
0140136
03/07/02 00:49ID:tWYlFrFCご回答ありがとうございました。
このようにしました。
($xdate,$ydate)=split(/&/,$ENV{QUERY_STRING});
($x)=$xdate=~/x=([^=]*)/;
($y)=$ydate=~/y=([^=]*)/;
0142nobodyさん
03/07/02 01:12ID:DMMsk6IB素直にReadParse使えや。
よっぽど簡単
0143nobodyさん
03/07/02 01:17ID:DMMsk6IBhttp://top.dmm.co.jp/
0145nobodyさん
03/07/02 11:29ID:UDPPCCYrFORM間違いの116です。
また、基本的なことで申し訳ありません。
> 0-9a-zA-Z以外のものが入るのなら、変換しとけ。
0-9a-zA-Z は変換する必要なしという事は、これらの文字を
バイナリで表現すれは、どのコード体系でも同じなのですか?
またCGIへの受け渡し文字列中に、「&」や「=」がよく使われますが
これらが含まれていれば変換する必要があるのでしょうか?
まあ、どんな場合でも変換しておけば問題ないのでしょうけど
実際のところが気になったのと、自分自身ではsjisでしか
試す事ができないので、ここでお聞きするしかありません
でした(^_^;)
0146あぼーん
NGNG0147nobodyさん
03/07/02 11:48ID:???1byte文字は文字コード関係ない
urlエンコードについては
http://techtips.belution.com/ja/perl/0000/
0148nobodyさん
03/07/02 11:59ID:???1byte文字でも文字コードは色々種類あるぞ。
よく使われるもので、JIS X 0201 Latinとか、JIS X 0201 Latin
とか、純粋なASCIIとかEBCDICとかあるわけだが。
ISO-646を含めると相当な種類があるわけだが。
まぁ殆どの環境で、JIS X 0201系とASCII系は同じ表示になって
しまうしEBCDICのパソコンなんてほとんど持ってる人がいないから
誰もあんまり気にしてないだけだと思うが。
でも例えば、\100-なんてのは、1byte文字だけど文字コードによっては
バックスラッシュになっちゃう場合もあるわけだが。
(今書いてる文章はShift_JISなので、円記号として使って問題ない)
0149nobodyさん
03/07/02 16:02ID:???どこのレス(スレ)かわからなくなってしまったので、要約して再質問させていただきます。
housemaster.csv から、各行を読み込んで、条件に合致するなら、
その行の文字を表示させるというありがちなものを組んでます。
で、どうしても一部分の行(レコード)のみ、全て文字化けしてしまいます。
なお、検索条件によらず、文字化けする行は、必ず決まってます。(ID1とID24の行、というように)
回答では、「条件」のなかで文字コード関係の処理をしてまちがえてるのでは?
というのがありましたが、条件の中では数字の比較しかしてません。
また、別の回答では、jcodeを自動判別でなくeuc2sjisのようにしたら?
というのがありましたが、これは、全てそのようにしましたが、改善されずです。
他に、どんな理由が考えられるのでしょうか・・・?
0150nobodyさん
03/07/02 16:29ID:???どうやって検索させてるかしらんが念のため確認。
元データ(〜csv)を読み込む際と、検索条件(キーワード?)の
両方ともjcodeは使ってるよな?
どっちか一方だけとかじゃなくて。
0151nobodyさん
03/07/02 16:36ID:???元質問は見てないが、スクリプトやCSVの文字コードが異なっていて
適切に変換されていないとかは?
あるいはCSVデータの中身に問題があるとか。
SJISでそのまま扱うと文字化け起こす文字とかは対策してる?
0152149
03/07/02 16:38ID:???ありがとうございます。
●元データ(〜csv)を読み込む際・・・&jcode::sjis2euc(\$value); してます。
●検索条件(キーワード?)の・・・検索条件といっても、文字でひっかけてるわけでなく、
idや数値の大小(値段ですが)で検索してるだけなので、
jcodeは1回も使ってませんが、ここんとこは問題ないですよねえ・・・・・
0153149
03/07/02 16:40ID:???ありがとうございます。
肝心なこと言い忘れてました。
CSVはすべてSJIS(CSVから読み出すときは&jcode::sjis2euc(\$value);)
スクリプトのコードは全てEUC、
HTMLに出力時は全てSJIS&jcode::euc2sjis(\$value);に変換してます。
0154149
03/07/02 16:43ID:???CSVデータが壊れている?のではと思ったのですが、
秀丸で開いてみたところ、問題はなさそうでした。
あるいは、秀丸で見ても見ることのできない特殊なコード?が紛れ込んでいると
いうことはあるのでしょうか?
もしそうだとしたら、そういった特殊なコードはどうやれば見ることができるのでしょうか
0155nobodyさん
03/07/02 16:44ID:???んじゃとりあえず、CVSを読み込んで、ただ出力するスクリプト書いて、
出力結果を確認してくだちい。
そこで問題がなければ、読み込みには成功してると。
で、あとは順次スクリプト内に、ちょこちょこprintを入れて、
どこで文字化けをしたかチェック。
文字化けした近辺を洗うとよろし。
もしCVSでこけてたら、CVSの文字コードとか、そこら辺をあさるよろし。
あとよくわからんが、半角カナとか使ってると危なそう。
注意されたし。
0157nobodyさん
03/07/02 16:45ID:???バイナリエディタ
> HTMLに出力時は全てSJIS&jcode::euc2sjis(\$value);に変換してます。
eucでなぜ吐かない?
0158155
03/07/02 16:46ID:???>んじゃとりあえず、CVSを読み込んで、ただ出力するスクリプト書いて、
>出力結果を確認してくだちい。
当然、今動かしてるスクリプトと同じ方法で処理して出力してね。
(jcodeとか使ってるなら、全く同じような処理で)
0159149
03/07/02 17:33ID:???以下のスクリプトで、正常に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;
0160149
03/07/02 17:35ID:???「スクリプト内はすべてEUCで通して、入出力のみSJISに変換」
というポリシーだと大丈夫だと聞いたことがあるのですが、
違います?
0161149
03/07/02 17:36ID:???あ、バイナリエディタ・・・使ったことないけど試してみます。
>eucでなぜ吐かない?
個人的にはそうしたいんですけどね・・・
サイト内の静的ページがみなSJISなので、CGIのページだけEUCというのも、
なんか変かなと。。。
0163149
03/07/02 18:15ID:???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文ならエラーにしてくれればいいのに・・・
ともかく、お騒がせしてすみませんでした。
0165155
03/07/02 18:18ID:???(俺もついさっきまで、連想配列のnameを間違っていて「動かねえ!」と
騒いでいたのは内緒)
こまめなチェックを心がけませう。
(人の事いえないけどネー)
ガンガレー
0166149
03/07/02 19:20ID:???いやいやほんとすんませんです。
なにげに、Perlを仕事としてやりはじめてまだ3ヶ月なもので、学ぶこと多いです。
(つーか、この部署プログラマ他にいないもんで、2chで質問してしまいましたw)
おたがいがんがりましょう
0168nobodyさん
03/07/02 21:03ID:???0169nobodyさん
03/07/02 21:05ID:???0172nobodyさん
03/07/02 22:54ID:???0173nobodyさん
03/07/02 23:23ID:???0174nobodyさん
03/07/03 00:06ID:???0176nobodyさん
03/07/03 00:10ID:???0177nobodyさん
03/07/03 00:42ID:???0178nobodyさん
03/07/03 01:30ID:???是非とも業務で活かしてくれ給え
0179nobodyさん
03/07/03 09:34ID:???(a: awk; p: perl; r: ruby; j: javascript)
a2p ある 糞
perlcc ある 糞
p2r
r2p
j2p
p2j
とくに、javascriptをperlCGIに変換したいと思っています。
0180nobodyさん
03/07/03 09:38ID:R4mGR+/mperlに挑戦しようと思っているのですが、
入門サイト等が見つかりません。
どこかおすすめないでしょうか
0182nobodyさん
03/07/03 09:49ID:???0183nobodyさん
03/07/03 10:30ID:???動作すれば良し
0184nobodyさん
03/07/03 12:43ID:LERgN2mAアフォには、「ありえない」だろな(ry
じゃ、自分で書くからいいよ。
もういくつか書いてるけど、その場しのぎの物になってる。
ある程度汎用性持たせてて書いてやろう。
0185nobodyさん
03/07/03 12:45ID:???0187nobodyさん
03/07/03 12:52ID:???指摘・批判されたら逆切れってパターンの奴。
多分釣りしてスレが荒れるのを楽しんでるだけだと思うので、スルーでお願いします。
0188nobodyさん
03/07/03 12:54ID:???0190nobodyさん
03/07/03 12:56ID:???これは嘘。
0191nobodyさん
03/07/03 13:57ID:???0192nobodyさん
03/07/03 14:00ID:???0193nobodyさん
03/07/03 14:02ID:???0194179=184
03/07/03 14:30ID:???君らち、そんなの意味ないよ。
漏れはサ、javascriptでな、自学自習の問題を出してるわけさ。
その中からな、多少変形しながら、CGIの問題を作ってるわけさ。
jsじゃな、外部ファイルにして読めないdirに置いた上にな、pragmaで
no-cache指定してもな、どうしてもcacheで見えちゃうんだな答えが。
Perl CGIでな、外との接続を絶ったコンピュータ室で試験させよう
としているわけさ。
perl2rubyはな、Perlユーザのためのruby入門って本、読んでな、
簡単な部分はP2Rに翻訳できそうだと思ったからだな。
君らちとは、レベルが違うわな。
0195nobodyさん
03/07/03 14:31ID:???0196nobodyさん
03/07/03 14:34ID:???0199nobodyさん
03/07/03 14:39ID:???それってASPとかじゃなくてクライアントサイドってことだよな?
だとするとアクセスできないディレクトリに置いたら動かないだろw
で、クライアントサイドとサーバサイドじゃ処理が違うのに変換???w
0200nobodyさん
03/07/03 14:40ID:???0202nobodyさん
03/07/03 14:43ID:???0203nobodyさん
03/07/03 14:44ID:???0204nobodyさん
03/07/03 14:46ID:???僕もがんばります!!
0205nobodyさん
03/07/03 14:49ID:???0206nobodyさん
03/07/03 14:54ID:???0207nobodyさん
03/07/03 15:01ID:???だけどお前の頭の中は、シンジュじゃ無くてPerlだよ、なら書いた
0208nobodyさん
03/07/03 15:08ID:Ctng5Cwyperl -pe 'chop; $_="print `\Q$_\E`;\n"'
0209107
03/07/03 15:39ID:???#!/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);
}
0210209
03/07/03 16:00ID:???0211nobodyさん
03/07/03 16:05ID:Ctng5Cwyその「適当なネットワークIP」って、他人のリソースじゃないだろうな?
Pingは負荷が大きいから、回線の生死にPingを打つのは問題ありだと
思うんだけど。LAN中ならいいけど、外に出すのはマナー上良くないと
思われる。
もし俺がネットワーク管理者で、どっかのクライアントからPingが垂れ流されて
きたら、いたずらか攻撃だと判断してフィルターかけるよ。
0212あぼーん
NGNG0213nobodyさん
03/07/03 16:30ID:???Net::Pingは、デフォルトでTCPのECHOにConnectするようになってるよ。
ICMP(いわゆるPing)は指定しないと使わない。
まあどのみち他人のホストを回線チェックに使うのは感心しないけど。
0214nobodyさん
03/07/03 17:13ID:83sptUFLprint $value;
HTMLの見栄え表示用に半角数字を全角数字に置き換えを行っていますが
文字化けします。元は一桁か二桁の半角数字です。
座、とか抗とか、、、
$value =~ tr/0-9/a-j/;
だと上手くいきます。
コードはEUC-JPで書いてます。
日本語処理の問題だと思うのですがいろいろ調べてみてもわかりませんでした。
ちなみに日本語関係はJcode.pm使えます。
どなたか教えて下さい
0215nobodyさん
03/07/03 17:27ID:???jperlでない限り、tr///は2バイト文字をサポートしていません。
したがって、>>214のtr文は、
・0の1バイト目
・0の2バイト目〜9の1バイト目
・9の2バイト目
が指定されたように受け取ります。Jcode.pmを使っているのなら、
jcode($value)->tr('0-9', '0-9');
を試してみてください。
0217nobodyさん
03/07/03 17:32ID:???$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
0219nobodyさん
03/07/03 17:42ID:???$value =~ s/([0-9])/('0','1','2','3','4','5','6','7','8','9')[$1]/eg;
つぅのはどうでしょう?
0220215
03/07/03 17:50ID:???それだったら
$value =~ s/([0-9])/pack("c2", 0xa3, 0xb0+$1)/eg;
の方が良くないか?
文字コードに依存するやりかたは良くないと思う。
0223nobodyさん
03/07/03 20:28ID:Ctng5Cwyその直前で$valueをEUCに変換してるという前提だから別に構わないでしょ。
>>217や219だってISO-2022-JPでやれば一発でエラー(or文字化け)がでるわけで。
0224nobodyさん
03/07/03 20:36ID:???常套手段と同様に、
EUCに揃えてから好きに加工、というのは
普通にアリだな
0225nobodyさん
03/07/03 21:16ID:???0226nobodyさん
03/07/03 21:52ID:???あー、変換してからか。スマソ。
それでも個人的にはわかりやすいほうが良いな。
0228nobodyさん
03/07/03 23:25ID:z1S7djbc0229あぼーん
NGNG0230nobodyさん
03/07/04 11:23ID:???0231nobodyさん
03/07/04 12:28ID:???0232nobodyさん
03/07/04 12:32ID:???分かりやすさを採るか効率を採るかだと思うけど、
>>217は効率悪すぎ。
>>231
unlink <./tmp/*>;
0234nobodyさん
03/07/04 13:04ID:???0235nobodyさん
03/07/04 13:05ID:???ネタだと思いたいが、仕事で他人のコードを見る機会が多いと、
>>217が可愛く見えるくらいの想像を絶するコードに度々遭遇する。
0236nobodyさん
03/07/04 13:10ID:???0237nobodyさん
03/07/04 13:31ID:???0239nobodyさん
03/07/04 13:40ID:???エレガントな方法よりも確実に間違わない方法を
取ったりするんだ
どうせ後で直すけどな
0241231
03/07/04 14:02ID:???はい、もちろん。
lsすると
tmp.cgi
tmp
って感じになります。(実際はシェルを開放してませんが)
うち、lsとかのコマンドをcgiから実行できないようなんですが、
それって関係あります?
0242nobodyさん
03/07/04 15:49ID:???Cだと普通に使われる手法だと思うけどな>直接文字コード
まぁ↓のようにしたって構わない訳だが。
my(@zero) = unpack("C2", "0");
$value =~ s/([0-9])/pack("C2", $zero[0], $zero[1]+$1)/eg;
>>241
パーミッションの問題じゃないのか?ファイルの所有者と
CGIスクリプトの実行者が違うとか。
0244nobodyさん
03/07/04 18:51ID:???で見てみれば?
0245231
03/07/04 19:16ID:???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 "これはテスト";
------------------------------------------------------------
です
0246nobodyさん
03/07/04 19:20ID:???#!/usr/local/bin/perl
print "Content-type: text/plain\n\n";
unlink <./tmp/*> or die $!;
print "これはテスト";
0249nobodyさん
03/07/04 22:27ID:???エラーメッセージの内容くらい見ようよ。
>>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);
とかした方が良いかも知れない。
0250nobodyさん
03/07/05 00:36ID:???$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を表示させるにはどうしたらいいのでしょうか。
0253nobodyさん
03/07/05 02:00ID:???その為の初心者スレだと思うが…。流石に釣りやネタには俺はレスしないけどな
0254nobodyさん
03/07/05 03:29ID:???そうやって一歩ずつ覚えていけばいいんだから。ただ、
エラーメッセージは読め。
英文だろうがなんだろうががんばって読め。
0255nobodyさん
03/07/05 03:43ID:???英文のメッセージが読めないなら和訳のを探せばいいのに。
ttp://www.namazu.org/~tsuchiya/perl/info/perl-ja_109.html
0256252じゃないが
03/07/05 12:13ID:???質問の本質が「リファレンスを理解してない」という事にあるので、それを指摘するのが何故悪い?
0257nobodyさん
03/07/05 17:21ID:jB+j5VLT・・・
ENDDOC
でENDDOCが見つからないと怒られるんですが
何か他にやらなければいけないことがあるんでしょうか?
0259nobodyさん
03/07/05 17:52ID:???0260257
03/07/05 17:58ID:???コピペしたわけでもないのですが・・謎
というかどの行も全部そういう風になってますね(^^;
0261257
03/07/05 18:09ID:???先頭にタブ入れちゃいけないんですね。
後ろに付いちゃいけないという事は
前にも付いちゃいけないのかと思ってやってみたら。
参考書の
print <<" AAA"
の先頭の空白の意味がわかった・・・
どうもでした>258さん
0262nobodyさん
03/07/06 02:53ID:???eval{ flock(FILE,2); };
if($@){ &MkDIR ; }
これは期待通りに動きますか?
0263262
03/07/06 03:01ID:t//EFERU0265250
03/07/06 09:49ID:1R/hd8rnアドバイスありがとうござました。
リファレンス、どうも今一理解していないようです。
何しろプログラム自体ちゃんと勉強したものじゃないもので、
どうしても書くものがフラットになりがちなのですが、ちょっと複雑なものを
strictに書こうとすると避けて通れないですよね。
本はもっぱらオライリーのものを、初めての〜とかプログラミングperlとか
CGIプログラミング、あと関係ないですけどjava scriptとか読んでますが、
なかなか奥が深いですよね。
僕としては大物で(僕にとってはですが)一から作った二つ目ですが、
アドバイスのおかげで何とかものになりそうで、ほっとしました。
クックブック欲しいなあと思ってますが、実用perl〜、は僕には難しすぎるでしょうか。
0267nobodyさん
03/07/06 19:04ID:AvDpfWTI何行目にあるかを表示したいのですがうまくいきません
$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
・
・
・
0268nobodyさん
03/07/06 19:08ID:???($chk[$i]) = split(/\,/,$DATA[$i]);
何がしたいんだ、ここんところ。
この行について自分の言葉で自分の意図するところを明確に書きなさい。
そしたら多分、解決できるから。
0269nobodyさん
03/07/06 19:11ID:???0270267
03/07/06 19:11ID:AvDpfWTI$chkに$i行目のデータを$nameと比較するために読み込んで格納している
つもりなのですが・・
0271nobodyさん
03/07/06 19:14ID:???0272267
03/07/06 19:21ID:AvDpfWTIwhileのあとにprintしてみたら表示できるのですが
whileの中でprintしたらエラーになってしまいました・・
0273267
03/07/06 19:25ID:AvDpfWTIテキストファイルの中身が全部読み込まれて表示はされました。
でも検索結果だけが出ません・・-1のままです。
0274267
03/07/06 19:45ID:AvDpfWTI$i = 0;
$found = -1;
while($i<$count){
($chk[$i]) = ($DATA[$i]);
print $chk[$i];
if($chk[$i] eq $name){
$found = $i;
}
$i ++;
}
今こんな感じですが $found の値が -1 です・・
0275nobodyさん
03/07/06 19:50ID:???chop;
$_ eq $name and $found,last;
}
0276275
03/07/06 19:51ID:???まちがった
0277nobodyさん
03/07/06 19:54ID:???なんか、メチャクチャだな…。
ひょっとして @chk に見つかった行を格納したいのか?
ち ゃ ん と 期 待 し た い 結 果 を 明 記 し て く だ さ い
で、俺ならこうする
# @chk にヒットした行番号を格納
# 検索対象は $name
# $[ を 0 と仮定する
$i = $j = 0;
foreach ( @DATA ) {
if ( $_ eq $name ) {
$chk[ $i++ ] == $j;
}
++$j;
}
0278267
03/07/06 19:55ID:AvDpfWTIありがとうございます。それでやってみたのですがやはり -1 のままでした。。
0279nobodyさん
03/07/06 20:00ID:???/$name/
↑これで OK ってオチじゃねーだろーなぁ?
$_ eq $name は「完全に一致」ってこと解ってる? >>267
0281nobodyさん
03/07/06 20:02ID:???で、$nameが含まれてるものを知りたいんだろう?
$chk[$i] eq $name じゃなくて、マッチ演算子使うとか・・・
$KEKKA = $DATA[$i] =~ m/$name/;
0282267
03/07/06 20:08ID:AvDpfWTI$chkに一旦格納したものを$nameと比較して一致なら$foundに行数を格納というつもりでした。
277さんの方法でやってみてもだめでした・・
どこかおかしくて微妙に完全一致してないのかとも考えたのですがそうでもないような
気もしたりします。
ちょっと今から出かけますすみません・・・
0283nobodyさん
03/07/06 20:16ID:???あと、$found はマッチした行数のことか?
# [廃止] @chk にヒットした行番号を格納
# 検索対象は $name で完全一致
# $found にはマッチした行数が入る。0ならマッチなし
# $[ を 0 と仮定する
&jcode'convert( *DATA, 'sjis' );
$found = 0;
foreach ( @DATA ) {
chop ; # 行末の \n を削除
++$found if ( $_ eq $name ) ;
}
0284あぼーん
NGNG0285nobodyさん
03/07/06 21:34ID:???if($chk[$i] eq $name){
を
print "!$chk[$i]!=!$name!"; ←文字列の両端に何か文字入れてprint
if($chk[$i] eq $name){
にしてやってみろ。多分分かる。
0286nobodyさん
03/07/06 21:35ID:???print "!$chk[$i]!=!$name!"; ←文字列の両端に何か文字入れてprint
を
print "!$chk[$i]!=!$name!\n"; ←文字列の両端に何か文字入れてprint
に変えてくれ。
0287nobodyさん
03/07/06 21:55ID:???とにかく$chk[$i]があやしいことだけは確か
0288nobodyさん
03/07/07 01:00ID:???0289267
03/07/07 01:07ID:kYkAMaKH0290267
03/07/07 01:29ID: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 ++;
}
かなり下手なやり方なんだろうと思いますが許してくださいごめんなさい・・
0291267
03/07/07 01:29ID:???0292nobodyさん
03/07/07 01:31ID:???↓次に質問
0293nobodyさん
03/07/07 01:36ID:???0295nobodyさん
03/07/07 01:40ID:???大体、$chk って何のためのデータよ?
データをやたらコピーとかするからおかしくなったり混乱したりするんだよ。
変更しないデータならコピーして使うなよ
0296nobodyさん
03/07/07 01:42ID:???0297267
03/07/07 02:51ID:???0298wakaba
03/07/07 08:49ID:rYaKDTZH環境
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
であろうと見当を付る。
0299wakaba
03/07/07 08:50ID:rYaKDTZH3)下記のようなスクリプトを作成、実行。
$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を使わなくても良いです。
何か良い解決策をご存知の方はいらっしゃいますでしょうか?
0300nobodyさん
03/07/07 09:20ID:???それよりも、ImageMagick は日本語対応してるの?
300 GET ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
0301nobodyさん
03/07/07 10:02ID:???Jcodeの使い方おかしいんじゃない?
レガシースタイルでconvert使うならjcode.plと同じだよね。
スカラで受けた場合は変換した結果ではなく、変換した文字コードが
戻り値だし、第一引数がそれだと何も返ってこない。
$text = '日本語を描画する試験';
$text = jcode::convert(\$text, 'sjis');
print $text;
出力 sjis
$text = jcode::sjis( '日本語を描画する試験');
print $text;
出力 日本語を描画する試験
手元にJcode.pm入ってるのなくてjcode.plでやったんだけど。
0302wakaba
03/07/07 10:25ID:rYaKDTZH>300 さんへ
ImageMagick の日本語対応の件は不明です。
レンタルサーバに問い合わせました。
>301 さんへ
$text = Jcode::convert('日本語を描画する試験','sjis');
は確かにレガシー記法ですが、当サーバでテキスト処理は出来ています。
しかし、念のためOOPで
$text = Jcode->new('日本語を描画する試験')->sjis;
のように文法を変え、
300さんの指摘通りjis、euc、utf8と確認しましたが
全て文字化けしました。
0303nobodyさん
03/07/07 10:34ID:???Jcode.pmはconvert($text, $encoding)のような書き方にも対応してるが
0304nobodyさん
03/07/07 10:43ID:???0305nobodyさん
03/07/07 10:54ID:???違うのはわかるけど、マニュアルに
Jcode::convert($str, [$ocode, $icode, $opt]);
jcode.pl Users: This function is 100% upper-conpatible with jcode::convert() !
こう書いてあったからjcode.plでやってみただけ
0306nobodyさん
03/07/07 11:00ID:???昔、knj2gifというCのソースを配ってる方がいらっしゃいましたが、
もう配布をやめちゃってるようです。10年くらい前の話ですが・・・。
少なくともImageMagickで日本語化に成功してる人はいるので、
何かしら設定ミスがあると思うのですが。
>>305
「Upper-Compatible」ってのは、
「jcode.plのスタイルで書いてもエラーを起こさない」
だけで、
「jcode.plのスタイルでエラーならJcode.pmのスタイルでもエラー」
って意味じゃない。
どうでもいいけど、こがいさん「compatible」の綴り間違えてるね>ドキュメント
0307nobodyさん
03/07/07 12:18ID:???"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++){
#この部分が不明です・・・・
}
0310307
03/07/07 15:15ID:???とすると、hosuelistの中身がまったくなくなってしまうのですが・・・
(&jcode::convert(*houselist, 'sjis' ); の1行をコメントアウトすると、
文字化けした状態で表示されます)
(ちなみに、HTML:Template のLOOP使って表示させてます)
0311nobodyさん
03/07/07 15:21ID:???例えば(.*)は$1で取り出せる?訳ですが、
これを一度に複数扱う場合はどうすれば良いのでしょうか?
(.*)(.*)とあった場合は$1,$2って具合で良いのですか?
判り難いかもしれませんがお教え下さい。
0312wakaba
03/07/07 15:35ID:rYaKDTZH>304 さんへ
レンタルサーバ管理会社に
Ports の japanese/gd で GDが日本語化するか確認してみます。
ただ、GIFを使用したいので、
現在GDはあえてversionの古いものを使用しています。
(最新版のGDはGIFが使用出来ない、とのことでしたので。)
よってGDは今回の目的で使用出来ない可能性が高いです。
>306 さんへ
Cは当方よく解らないので、当座の解決として難かしいものがあります。
ImageMagickで日本語化に成功している人がいる、とのことですので、
レンタルサーバ管理会社にImageMagickの設定を再度チェックさせる方針で
臨んでみます。
みなさんどうもありがとうございました。
また解決しましたら、顛末を記入させて頂きます。
0314wakaba
03/07/07 15:58ID:rYaKDTZH盲人が盲人の手を引くようで気がひけますが。。。
foreach(@houselist){
jcode::convert(\$_->{bukken} , 'sjis' );
jcode::convert(\$_->{basho} , 'sjis' );
jcode::convert(\$_->{comment}, 'sjis' );
}
これで変換されませんか?
0315nobodyさん
03/07/07 15:58ID:???ほい。
jcode::convert(\$houselist[$i]->{$_}, 'sjis') foreach (keys %{$houselist[$i]});
自分なら、ハッシュに展開する前か、表示する直前(フォーマットを整えてから)に
変換するけどね。
0317nobodyさん
03/07/07 16:39ID:???12345678 を、12,345,678 に変換するにはどうすればいいのでしょうか?
0318nobodyさん
03/07/07 16:41ID:???コシキタソですか?
まぁいいですが、、る
0321nobodyさん
03/07/07 18:41ID:???0322nobodyさん
03/07/07 18:52ID:???0323nobodyさん
03/07/07 23:41ID:C7AyQ56Asort {$form{$a} <=> $form{$b}} keys %form
このように定義したのですが、これでは未定義の値が数値より上に
きてしまいます。
sort {($form{$a} <=> $form{$b}) <=> ""} keys %form
こんな感じでやったりいろいろ試したのですが、どうしても数字が
上にきてくれません。
ご存知方がいらっしゃいましたら、教えてください。
宜しくお願いいたします。
0324あぼーん
NGNG未定義値は数値に変換すると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;
0326nobodyさん
03/07/08 00:17ID:???sort { not defined $form{a} <=> not defined $form{b} }
sort { $form{$a} <=> $form{$b} } keys %form;
0328nobodyさん
03/07/08 00:40ID:???うーん、どうもうまくいきません。
同じように数字が下にきてしまいます。
もう少し調べてみます。
>>327
ご返答有難うございます。
参考にさせていただきます。
0329nobodyさん
03/07/08 00:42ID:d6QOcge5<input type="submit" value="送信"style="background:#ffffff"
onmouseover="this.style.background='#000000'"
onmouseout="this.style.background='#ffffff'">
を、.cgi内の
<input type=submit value=\"送信\">
に組み込みたいのですが
どこをどう変えればいいのでしょうか?
教えてください。
0331329
03/07/08 00:53ID:???逝ってきます。
0332nobodyさん
03/07/08 01:05ID:???ごめんな。動作確認してなかった。
@result =
sort { !defined $form{$a} <=> !defined $form{$b} }
sort { $form{$a} <=> $form{$b} }
keys %form;
優先度がnotよりも<=>の方が高いし…
0333nobodyさん
03/07/08 01:07ID:???0334nobodyさん
03/07/08 02:11ID:???´−`).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;
0335250
03/07/08 02:26ID:gC7FPuySEffective Perl
名前は聞いたことはありましたが、改めてネットでいろいろと
レビュー見てみました。
なんか、とってもそそられる本のようで、仰るとおり
値段もそんなに高くないし、何しろあまり厚そうじゃないのが
よさそうです。
何しろperl DBIと、あとプログラミングperl第三版のどっちかの
二冊抱えて電車乗ってるんです、最近。。。。
重いんですが、つい抱えて出かけてしまうのです。
紹介、ありがとうございました。
0336nobodyさん
03/07/08 02:51ID:???それでやってもいきませんでした、、、
うーん、深いです、、、
考えるだけ考えてみたいと思います。
いろいろとご支援有難うございます。
0337nobodyさん
03/07/08 03:21ID:???#!/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; のところで、レスポンスヘッダー全体を出力したいのですが、
何故か、空が返されます
0338nobodyさん
03/07/08 03:38ID:???$res->headers->as_string; …かな。
ttp://member.nifty.ne.jp/hippo2000/perltips/HTTP/Response.html
ttp://member.nifty.ne.jp/hippo2000/perltips/HTTP/Message.html
ttp://member.nifty.ne.jp/hippo2000/perltips/HTTP/Headers.html
0339262
03/07/08 10:48ID:yiVOHQJTもう一度ソース貼ります。
eval{ flock(FILE,2); };
if($@){ &MkDIR ; }
$@ は直前の eval のエラーが格納されるということで
flock 関数が使えなかった場合の保険に mkdir でロックしたい。
ということなんです。
けど、エラーが出ないということは $@ には何も入らないという事になるんでしょうか?
結局はflock が使えるのか使えないのかを知りたいということなんですが判断の仕方が解らないんです。
最初から他のファイルロック方法を実現しろという話は無しの方向で。
ご意見お願いします。
0342nobodyさん
03/07/08 11:51ID:???Windowsだと、9x系はエラー(かどうかは分からんが、evalらずに素で実行すると
スクリプトは停止)になるよ。
ちゃんと確認したいところだけど、うちは全部NT系にしちゃったんで。
0343nobodyさん
03/07/08 12:17ID:???レスありがとうございます。しかし、期待したデータではありませんでした…。
期待するデータは HTTP/1.x 200 OK とかサーバーが返すレスポンスヘッダーなんです。
0344nobodyさん
03/07/08 12:34ID:???ヘッダじゃなくレスポンスコードだろ
>print $res->header; # ヘッダー全体を出したいっ!!
print $res->code . $res->message;
0345nobodyさん
03/07/08 13:02ID:???6.1 ステータスライン
レスポンスメッセージの最初の行は、プロトコルのバージョン、ステータスコード番号、それに関連したテキストフレーズからなるステータスラインで、それぞれの要素は、SP によって分けられる。最後の CRLF シーケンス以外には、CR も LF も許されない。
Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
6.2 レスポンスヘッダフィールド
レスポンスヘッダフィールドを用いて、サーバはステータスラインに置けないレスポンスに関する追加的な情報を渡すことができる。これらのヘッダフィールドは、サーバについてや、 Request-URI によって識別されるリソースへの更なるアクセスに関する情報を与える。
0346nobodyさん
03/07/08 13:11ID:???すいません…。
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
↑こういうのが欲しいんです。
0347nobodyさん
03/07/08 13:49ID:???お前はアホか。
http://member.nifty.ne.jp/hippo2000/perltips/HTTP.html
をディスプレイに穴があくほど読め
0348nobodyさん
03/07/08 14:22ID:???my @result = sort { !defined $form{$a} ? 1 :
(!defined $form{$b} ? -1 : $form{$a} <=> $form{$b}) } keys %form;
こういうことじゃなくて?
それとももっとスマートに書けってこと?
0349nobodyさん
03/07/08 14:22ID:+KcPoM6i内容を見るって可能なの?
HTMLだったら簡単に見れるよね。それに、たとえば、abde.pl
ならば、その置き場がわかれば、ブラウザにURLを入力すると
ダウンロードできる。でも、cgiなら勝手に実行してしまう...。
何か方法あるのかな?
0350nobodyさん
03/07/08 14:30ID:???print $res->headers->header;
ってやっても何も表示されないし…
私の期待しているデータって入ってないのカナ?
0351nobodyさん
03/07/08 14:30ID:???最後に / を付けてアクセスすると、内容が表示されたという事がありました。
0352あぼーん
NGNG0354nobodyさん
03/07/08 14:56ID:???興味あるぞ、これ。
.pl ならDLして、.cgi や.html ならDLせず、画面に表示するという
事をどこで定義しているんだろうか?IEにはそんなのを
指定するところないぞ。
.pl に実行属性を持たせた後、ブラウザに入力したけど
やっぱりDLになった。という事は、クライアントサイドで
定義しているのは確か。
0356nobodyさん
03/07/08 15:04ID:???0357nobodyさん
03/07/08 15:04ID:???だめだよ、そっとしておいてあげないと
0359nobodyさん
03/07/08 15:49ID:+KcPoM6i初心者なので、教えてください。
そして、もし、サーバー上のCGIソースを見る方法を
ご存知なら教えて頂けないでしょうか。
よろしくお願い致します。
0360nobodyさん
03/07/08 15:53ID:VzazIByiみんなに怒られそうだけど、一応マジレスすると、CGIのソースが見られる
状態ってのはセキュリティ・ホールなわけ。だからマトモなサーバーで
CGIソース丸見えってのはありえないと考えてよい。
まぁ、間抜けな管理者のサーバーだと***.cgi/とか、***.cgi~ とか、***.cgi.bakとか探すと
あっさり見られたりするけど、そういうのは覗き見趣味と言ってあんまり良い趣味じゃないです。
0362349
03/07/08 16:02ID:+KcPoM6iマジレス、ありがとうございました。
大変参考になりました。
0364nobodyさん
03/07/08 16:43ID:???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;
0365nobodyさん
03/07/08 16:57ID:???0367364
03/07/08 17:00ID:???>>354
Webサーバで設定します。
http://httpd.apache.org/docs-2.0/ja/mod/mod_cgi.html
0369nobodyさん
03/07/08 18:32ID:???0370nobodyさん
03/07/08 18:34ID:???指定した時間に目覚ましで起きる!
or
cron
散々外出
0371337
03/07/08 19:01ID:???print $res->headers->header;
これやっても出ないってことは、無いという事でいいんでしょうか?
0372nobodyさん
03/07/08 19:19ID:???0373337
03/07/08 19:38ID:???$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 では勝手に間引きしたり、追加されたりするものと理解していいのでしょうか?
0376nobodyさん
03/07/08 21:55ID:EC6mm4rUHelp!!
0377あぼーん
NGNG0378nobodyさん
03/07/08 22:29ID:SfDnct30通常はどうやって追記してますか。
var/spool/cronを直接いじってもいいのですが、
何か効率のいい方法がありましたら教えてください。
0379あぼーん
NGNG0380nobodyさん
03/07/08 22:30ID:???/var/spool/cron内はroot以外入れないですね。
それだとなおさら何か方法あるのか疑問です。
0381nobodyさん
03/07/08 22:33ID:???スレ違いだYO!
0382nobodyさん
03/07/08 23:03ID:???$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)を組み込めばいいのか・・・
0385の
03/07/09 00:12ID:6fG8Iq33こんな感じか?
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/
0386あぼーん
NGNG0387の
03/07/09 00:20ID:6fG8Iq33すまん、一箇所間違ってた。
>return defined $hseq{$bb}? (defined $hseq{$aa} <=> $hseq{$bb} ):-1;
<return defined $hseq{$bb}? (defined $hseq{$bb} <=> $hseq{$aa} ):-1;
0388あぼーん
NGNG0389nobodyさん
03/07/09 07:37ID:???LWPモジュール使わずにソケット使って通信するプログラムを作れと言っている。
既存のモジュールの機能に満足できないのであれば、自作するしかないだろ?
0390nobodyさん
03/07/09 13:02ID:???>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.
0391nobodyさん
03/07/09 13:05ID:???とりあえず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とかね。
まあ、純粋なヘッダが欲しいんなら自分で作った方がいいかもしれないけどね。
0392nobodyさん
03/07/09 13:20ID:???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
0393nobodyさん
03/07/09 13:31ID:???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
0395337
03/07/09 14:19ID:???レスありがとうございます。
> というわけで、
> $ua = LWP::UserAgent->new(parse_head => 0, requests_redirectable => []);
> みたいにオプションつけて、HEADで取得、Client-XXXを適当に消す、って感じか。
> オプションの意味についてはちゃんと自分で調べてくれよ。
おおかた、>>391 さんの言っている事が理解できました。
あとは、自分で調べてやってみます。
※使っている PC がへぼいせいかもしれませんけど、
LWP の最初のロードが遅いですね
0396nobodyさん
03/07/09 18:32ID:T8daMjJB不可能なのでしょうか。
できるならcrontab編集ツールとか作りたいの
だけど、、、
0397nobodyさん
03/07/09 18:50ID:???むしろ、運用の方が大変じゃないかなぁ。
何を突っ込まれるか分からないわけだし。
0398nobodyさん
03/07/09 19:36ID:???お返事有難うございます。
ええと、初心者のためいまいちイメージが湧きません。
標準入力から書き込む、ということは具体的にどういったことでしょうか。
度重なる質問すみません。
0399nobodyさん
03/07/09 20:14ID:???標準入力へ書き込むって事じゃ?
open( CRONPIPE, "| crontab - " );
・
・
・
close( CRONPIPE );
0400nobodyさん
03/07/09 20:50ID:???_,,..i'"':,
|\`、: i'、 ≡≡≡(´⌒;;;≡≡≡
.\\`_',..-i
.\|_,..-┘ ズサーーーーーー
0401nobodyさん
03/07/09 20:57ID:???0402nobodyさん
03/07/09 21:10ID:PDgcqehQPerlじゃないよヴォケ。JavaScript逝けや
0406nobodyさん
03/07/09 23:31ID:???mysqlで、主キーにAUTO_INCREMENTついたテーブルに
insertした場合、insert後に主キーが何になったかを知る方法ってありますか?
DBIつかってて、今は、普通に$dbi->do(..でSQL文発行してます。。
0408nobodyさん
03/07/10 02:24ID:???0409nobodyさん
03/07/10 02:25ID:???0410nobodyさん
03/07/10 02:30ID:izTOLa86ってことはできますか?
レスキューのminibbsのちょっと前のを使っているのですが
そのまま使うと掲示板自体を表示しちゃうんです
0411nobodyさん
03/07/10 02:33ID:???0412nobodyさん
03/07/10 02:46ID: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;
}
0414nobodyさん
03/07/10 03:34ID:???cookieに何を書き込むかは発行するCGIが決める。
読んだcookieのどの部分を使うも読んだCGIが決める。
ルーチン丸ごと使うからそんなことになるんだよ。
0415あぼーん
NGNG0416あぼーん
NGNG0417nobodyさん
03/07/10 06:46ID:???頭悪いと大変ですね。
0418nobodyさん
03/07/10 09:35ID:wjfeVSSe頭悪くて申し訳ないですけど、
解決策教えてもらえないですかね?
頼みます。
0420nobodyさん
03/07/10 10:45ID:hGiFYAotいれるとクッキーの取得ができません
0421nobodyさん
03/07/10 10:57ID:???そっちのCGIをrequireするか、cookieで取得した値を
ファイルに書き出しとかなきゃだめじゃん。
requireするのは、やってる内容にもよるがたぶん無理。
つか、あなたの腕では、ファイルに書き出すのもたぶん
無理。
0422nobodyさん
03/07/10 11:16ID:DU/pTK24環境変数で書き出した値と照合するしかないですよね?
これでは特定が完全ではないでしょう?
ならば、本体のbbsでルーチン組んで動作分離させるか、
別のcgiから一旦bbsを起動させて動作分技させます
htmlファイルを書き換える仕様にしているのですが、
すでに膨大なリンクがあるので後者で済ましたいです。
上手くいかなかったらまた質問します。
0423あぼーん
NGNG0424nobodyさん
03/07/10 11:41ID:???$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で読み書きできるようになる
0426nobodyさん
03/07/10 12:52ID:uIFBr8e3<input type="radio" name="site_ja" value="0">なし
から送られる値を、
$in{site_ja}に格納しているのですが、
どちらのボタンを押されていない場合、
エラーを出したいと思っています。
で、
if (!defined($in{site_ja})){$HtmlErrorText .= "<li>日本語版サイトを選択してください</li>";}
で判断しようとしたのですが、
if文が偽になってしまって、エラーが出せません。
どうしてなのでしょうか・・・?
0427nobodyさん
03/07/10 12:55ID:???値が0でもdefineはされてるだろ。
0429nobodyさん
03/07/10 13:00ID:???<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(こうすれば悩まなくて済むのになぁ・・・)
0430あぼーん
NGNG0431nobodyさん
03/07/10 14:14ID:mUbItvZAについて、連続で同じ数字は
出ない様にしたいです。
例えば1回目が3なら、
2回目は3が出ないように。
すいませんけど、どうやるのか、
教えて下さいませ。
0432426
03/07/10 14:30ID:???どっちのボタンも押されてないと、値はNullだと思うのですが・・・かんちがいしてる?
>>428
if (!exists($in{site_ja})){$HtmlErrorText .= "<li>日本語版サイトを選択してください</li>";}
に変えてみたのですが、
症状が変わらないのですが・・・・
0434nobodyさん
03/07/10 15:13ID:???チェックされていなければ、site_jaは送信されてこない。
よってvalueも存在しないからNull判定でやってはダメ。
definedでやった場合は変数が未定義ならいいが、予約された
変数の場合は保証されない。
existsならハッシュのキーの有無で判定できる。
テストしてみたが、!existsでちゃんと処理できた。
0435nobodyさん
03/07/10 15:30ID:???まずはクッキーでもファイルでもセッションでも良いから
何かで記憶させておかないといけないでしょ。
それが出来たらまたおいで。
0436426
03/07/10 15:50ID:???ありがとうございます。
しかし、
if (!exists($in{'site_ja'})) {$HtmlErrorText .= "<li>日本語版サイトを選択してください</li>";}
としても、スルーされてしまいます・・・
どこかケアレスミスしているんだろうか・・・
0437436
03/07/10 15:52ID:???if($HtmlErrorText) {&HtmlError($HtmlErrorText);}
の一文をいつのまにか消してました・・・
ごめんなさい。
if (!exists($in{'site_ja'})) {$HtmlErrorText .= "<li>日本語版サイトを選択してください</li>";}
でばっちりです。
0438nobodyさん
03/07/10 17:04ID:mUbItvZA$v -= int(sqrt($ud)) if($bst =~ /S/);
の意味を分かる範囲で教えて下さい。
因みに、$ud は防御力です。
0439nobodyさん
03/07/10 18:11ID:???0440nobodyさん
03/07/10 18:14ID:???防御力の平方根を求め、小数点以下を切り捨てる。
$vからその値を減算したものが$vになる。
0441nobodyさん
03/07/10 18:54ID:???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メソッドで渡す方法くらいなんですが・・・。
よろしくお願いします。
0443nobodyさん
03/07/10 19:43ID:???0444nobodyさん
03/07/10 20:20ID:???あなたがやりたい方法は JavaScript で出来ますが、
セッション管理やクッキー等、他の方法を利用した方がいいでしょう。
0446nobodyさん
03/07/10 21:39ID:???2つが連続してはいけないのなら、前回の数字を覚えておいて、
* 乱数を取り出したときに一致しているか調べて、一致しなくなるまで繰り返し取り出す
* 前回の数字が存在しないと仮定して、一つ少ない大きさまでの乱数を取り出す。それ>=前回ならば、1増やす
>>445のが答えなら、効率を上げるため、数字が入った配列をかき混ぜて(Perlメモ)前から取り出す。
>>441
順番を逆にすれば?
0447nobodyさん
03/07/10 22:06ID:???フォームから誕生日を入力して、その数字を元に占いをさせようと思っています。
数字によって異なる結果を書いたページに振り分けるために
@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等)は正しい位置にアップロードしてあります。
0449nobodyさん
03/07/10 22:40ID:???作ってみたのだが現行ログからの削除はできても過去ログへの書き込みがうまくいかないのです
@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);
0450441
03/07/10 23:03ID:???ほんとはセッション管理したいんですけど、
他の部分は全部完成しちゃってるんで、
今さら無理なんですわ・・・(泣)
>>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を、
照合させると・・・いうことで問題ないですか?
0451447
03/07/10 23:09ID:???http://www.hogehoge.com/cgi-bin/form.cgi?year=03&month=7&day=10
となっています。
URLの中に配列変数の中身を文字列として直接入れているのが
エラーの原因なのでしょうか?
0452448
03/07/10 23:28ID:???いや、そういうことを言いたかったんじゃないんだが……
print "Location: http://www.hogehoge.com/result/\$message[\$point].html\n\n";
これをいきなりヘッダに出力して「ページが表示できない」じゃなくて、
まず画面にそのまま表示して見られる状態で目視して、変数の展開状況などが
正常かどうか調べてみるべきかと。
0453nobodyさん
03/07/11 00:25ID:???http://cgi32.plala.or.jp/mg916/bbs.cgi
0454nobodyさん
03/07/11 00:45ID:???print〜の文を画面出力して確認しながら修正を加え、無事動作させることができました。
勘違いが原因だったとは…こんな初歩的トラブルに
親切なご教示ありがとうございました。
0456nobodyさん
03/07/11 01:00ID:???大丈夫。Web系の開発で飯食って10年になるけど、エラーの大半は初歩的ミス。
だから、もし人に聞くときはこれでもかというくらい慎重にしなきゃならん。
0458nobodyさん
03/07/11 02:28ID:???俺も3時間はまって、もういいや、寝よっと思って布団はいったとたんに気づいたよ。
外のループと内のループのカウンタ変数混同してた。。。。
それもちゃんと動いてたの途中で壊してやんの。
ずーーーとさかのぼっても駄目であきらめて寝よ、と思ったのに、
手許だよ、テモト!!
ぐしゃっ
0459nobodyさん
03/07/11 08:27ID:+GXxdBTx0460あぼーん
NGNG0461nobodyさん
03/07/11 13:23ID:XltnJZI3以下のPERLで、敵が普通に反撃する時の
条件はどの様になっているのか、
教えて下さい↓
http://gekiya77.gi-ga.net/cgi/oshiete.txt
見れば分かると思いますが、
$pに1〜6迄のランダムの数字を与え、
それに従い技を出します。
ただ、420行目からある普通の攻撃もして
くる場合があるので、それはどんな条件に
なった時なのか、教えて下さい。
宜しくお願い致します。
0462nobodyさん
03/07/11 13:29ID:???600行近くあるソースを「見れば分かる」かよ……
それ以前に何を聞きたいのか不明。日本語の勉強をしてから出直してきてくれ。
0463nobodyさん
03/07/11 13:30ID:???if elsif else がわからないのか?
上から条件式で判定してどれにもあてはまらないときに&bogu_bt;で
# 敵キャラ通常攻撃処理のサブルーチンに飛ぶだけだろ。
0464401
03/07/11 13:35ID:???0465461
03/07/11 13:35ID:XltnJZI3分からないから聞いてるんでしょうが。
まあ、とりあえず、どうもでした。
>>462
何を聞きたいのかは充分に書いて
あるでしょうが。
もう、その表現を使えば勝てると
思ってるね、この馬鹿はw
貴方が日本語の勉強をされた方が、
以下略・・・。
0467nobodyさん
03/07/11 13:47ID:???基本的な文法もわからないようじゃどうにもならんな。
何度か同じような初歩的質問をしているが、もう相手にしない。
ある程度勉強して理解できるようになるまで二度と来るなよ。
0472nobodyさん
03/07/11 14:15ID:???$ 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] info@wadax.ne.jp
[郵便番号] 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
0473nobodyさん
03/07/11 14:17ID:???拾い物でしょ
0481401
03/07/11 15:47ID:???0482nobodyさん
03/07/11 16:03ID:???それだと暗号化済みのIDとPASSをコピられたら同じことじゃないの?
あとid、passみたいな分かりやすい名前は止したほうがいいと思う。
0483nobodyさん
03/07/11 16:10ID:???そんなモジュールは知らないが、依存してもいいならWin32::APIとか使えば
何かできそうな気がしなくもない。
漏れはリッピングのコードなんて書いたことないから、これで足りるのかも分からんが。
0485nobodyさん
03/07/11 16:57ID:H65xN+pzperlってどういう意味ですか?
0486nobodyさん
03/07/11 16:58ID:H65xN+pzていうか何ですか?
0487nobodyさん
03/07/11 17:06ID:???0489nobodyさん
03/07/11 18:02ID:???0490nobodyさん
03/07/11 18:28ID:???どんなゲーム形態なのか問わないのであればすぐに作れるぞ。
例えば標準出力にテキスト垂れ流しで、たまに分岐があるぐらいとか。
0493nobodyさん
03/07/11 19:35ID:???0494nobodyさん
03/07/11 19:42ID:jaAmfExn例えば年齢の高い順とかって言う風に、
出来るようにしたいです。
その様な場合には、どう記載したら
宜しいのでしょうか?
0497nobodyさん
03/07/11 22:02ID:???0498nobodyさん
03/07/11 22:36ID:???_┌┬┬┬┐_
――┴┴┴┴┴―、 __________
// ∧// ∧ ∧||. \ /
__[//____(゚_//[ ].゚Д゚,,) || _ \__ < >>497を逮捕しにきました
lロ|=☆= |ロロ゚|■■|■■∪警視庁■■|| \__________
| ∈口∋ ̄_l__l⌒l____|___l⌒l___||
 ̄ ̄`ー' ̄ `ー' `ー' `ー'
0500500
03/07/12 12:27ID:???0501441
03/07/12 13:00ID:???自分が >>441 で言った、
>自分が考えつくのは、
>ソケット通信で、
>地道にpostメソッドで渡す方法くらいなんですが・・・。
だと、とくに問題ないですか?
・・・っていうか、これって、可能ですよね?
0502nobodyさん
03/07/12 13:14ID:???倶愚ったけど、ほとんどインストールの解説で gzip とかヒットして探すの疲れた…
0503nobodyさん
03/07/12 13:31ID:???0504nobodyさん
03/07/12 13:44ID:???↑こういうのは無し。外部プログラム呼び出さないで、
perl 内ですませたいので
0505nobodyさん
03/07/12 13:58ID:???Compress::Zlib::memGunzip( $buff );
0506nobodyさん
03/07/12 15:56ID:???∫ _________
∧,,∧ ∬ /
ミ,,゚Д゚彡っ━~ < ご苦労!
_と~,, ~,,,ノ_. ∀ \
ミ,,,,/~), │ ┷┳━  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ .じ'J ̄ ̄| ┃
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ┻
0507nobodyさん
03/07/12 15:57ID:???0509nobodyさん
03/07/12 17:34ID:???全く反応が無いです。。。
エラーも出ないため、いや、何よりも初心者なので原因がつかめません。
ご教授お願い致します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);
}
0510nobodyさん
03/07/12 17:38ID:???INとOUTが逆だな。
それはともかく、$DATA[$no] = "";のところを
print $no;
print $DATA[$no];
$DATA[$no] = "";
print $DATA[$no];
とやってみれ。
0511nobodyさん
03/07/12 17:49ID: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
0000000000000000000000000000000000000000000000000CD001
CDDICdPWCTLG 榲PWDEMOUROKUUIDEsKOUJIEN懼SCREENツATAlGAIJI 殲TREAM
(略)
ほらね。ちなみに↑は広辞苑のCD-ROM。
0512nobodyさん
03/07/12 18:11ID:2K5dewsoいま、JAVAアプレットでCGIを呼び出してファイルをCGIが読み込んでその内容はアプレットに
返すっていう内容のを作っているんですが、CGIが内容を返すときにヘッダーの内容まで
送られてしまって、困っています。
最悪、その部分はJAVAの方で消してもいいんですが、できればCGIからの送信内容は
通信量の面でも軽くしたいし、ヘッダーの内容は送らないようにしたいんですが
可能でしょうか?
0513nobodyさん
03/07/12 18:16ID:???ありがとうございます。
print $no;------------@
print $DATA[$no];-----A
$DATA[$no] = "";
print $DATA[$no];-----B
NO=8を与えてみたところ、
@に[9]の表示のみとなりました。
$DATA[$no];-----Aが無いのはどうしてでしょうか?
(゜▽゜;)
0515nobodyさん
03/07/12 18:27ID:p/T5Jtg4可能。nph使う。多くのサーバーでは、CGIスクリプトの名前の先頭に nph- と入れるだけでよい。
例: nph-test.cgi
#!/usr/bin/perl
print "data\n";
exit;
0516nobodyさん
03/07/12 18:30ID:???ちゃんと適当なスレに書け!
0517512
03/07/12 18:31ID:2K5dewsoありがとうございます。
早速やってみます。多謝
0518nobodyさん
03/07/12 18:44ID:???515>>
$DATA[$no];-----A
前の処理で、スカラーに代入してました(゜゜;)
基本は printですね。。。初心に返ります。
ありがとうございました
0520nobodyさん
03/07/12 19:44ID:???nphでサーバゲットだぜっの時代があったねぇ
0521nobodyさん
03/07/12 19:56ID:???深い階層のディレクトリを作成する為に、
以下のコードを書いたんだけど、
もっと効率のいい方法は無い?
#!/usr/bin/perl
$d = './aaa/bbb/ccc/'; # まだ存在ディレクトリ構造
@list = split( /\//, $d );
shift @list;
foreach ( @list ) {
$t .= "$_\/";
mkdir( $t, 0755 );
print "$t\n";
}
0522nobodyさん
03/07/12 19:57ID:???○ $d = './aaa/bbb/ccc/'; # まだ存在しないディレクトリ構造
0523nobodyさん
03/07/12 20:01ID:p/T5Jtg4system qw(mkdir -p $d);
とかじゃ駄目?そういやモジュールもあった気がするけど覚えてない。
0524あぼーん
NGNG0525nobodyさん
03/07/12 20:02ID:p/T5Jtg4system("mkdir", "-p", $d);
0527nobodyさん
03/07/12 20:08ID:???ごめん。それだと、win系じゃ動かないんだ…(´д⊂ヾ
確か、win のシステムコール(API) は一発で深い階層の
ディレクトリ作ってくれるんだよね。だから、perl にも俺の
知らない関数かモジュールあるかと思って聞いてみたんだ。
まぁ、chdir しながら mkdir するよりはマシかな
0528nobodyさん
03/07/12 20:22ID:???って書いててもwin系なのか。難儀だな。
できないという結論?
File::Pathモジュールをつかう。
ディレクトリの作成だけじゃなく、一括削除もできるよ。
0531nobodyさん
03/07/12 21:31ID:???0532nobodyさん
03/07/12 21:32ID:i3OrVbjxというのがあるとエラーが出ました
それを
"ポテトサラダ"
にしたら正常に動くようになりました
何ででしょう?
0533nobodyさん
03/07/12 22:06ID:???0534nobodyさん
03/07/12 22:12ID:???0535nobodyさん
03/07/12 22:14ID:???「ポ」は 0x83 0x7c の2バイトで構成される。
qの区切り文字 | は 0x7c。
ポの2バイト目が区切り文字と同じコードのため、そこで q が閉じてしまうので
エラーになる。
0536nobodyさん
03/07/12 22:16ID:???EUCで書くようにすると幸せになれるかも。
0537nobodyさん
03/07/12 22:35ID:???0538nobodyさん
03/07/13 01:27ID:cL3G8Wfcmkpathしかなかろうに・・・・
0539あぼーん
NGNG0541nobodyさん
03/07/13 02:41ID:???例えば
@a=(1,2,3,4);
@b=(2,3);
ならば、2と3が取り出せる。
いい方法ない?
0542nobodyさん
03/07/13 02:58ID:???ttp://www.pure.co.jp/~learner/program/Perl_tips.html#array_ope
0544nobodyさん
03/07/13 03:52ID:???0545nobodyさん
03/07/13 04:27ID:zHTguhVXif($comment=~ /$ban_word/){&error();}
上記ケースにおいて、$ban_wordに「*」や「+」が指定されると構文エラーになります。
$comment=~ /*/をやればエラーになるのは明白なので原因はまあいいんですが、
Perlの組み込み関数に「メタ文字をすべてエスケープしてくれる」関数はなかったでしょうか。確か、
&escMeta('文字列');
みたいな使い方をすると文字列中の「*」は「\*」にエスケープされるような・・・
うろ覚えなのですが、心当たりありましたらご教授願います。
0547nobodyさん
03/07/13 04:41ID:nQJ8+8Yhquotemeta。
> &escMeta('文字列');
ここまで分かってるんなら、人に聞く前にperldoc perlfuncを開いてmetaで検索するとか
してみよう。
0548545
03/07/13 04:43ID:???どうりでescapeで探しても当たらないわけだ・・・
0549あぼーん
NGNG0550nobodyさん
03/07/13 14:14ID:eiBgp+lnif(!$a && !$b)
は、どういう意味でしょうか?
0552nobodyさん
03/07/13 14:27ID:???if($a=~/^0?$/ && $b=~/^0?$/)
0553nobodyさん
03/07/13 14:34ID:???0555nobodyさん
03/07/13 14:41ID:???http://pc2.2ch.net/test/read.cgi/php/1057947512/15-16
0556nobodyさん
03/07/13 15:37ID:6NfNIHy+Unixのmanを検索できるサイトなら知ってますが、あんなかんじで
0557nobodyさん
03/07/13 15:55ID:???windows上で開発するときの、注意点はなんでしょうか?
自分が知ってるのは、
●flockはWinでは使えないので、
eval(flock (LOCKF, LOCK_SH)); みたいにするってことくらいなのですが
0558nobodyさん
03/07/13 16:17ID:???パーミッションとか色々ありすぎて、並べ上げたらキリがないと思われ。
0559あぼーん
NGNG0560nobodyさん
03/07/13 16:30ID:???でもパーミッションは、perlそのものでなく、ファイルの問題だから、
FTPでアップするときに注意すればいいだけかと思うのですが・・・。
>並べ上げたらキリがないと思われ。
すいません、よかったら2,3、例を挙げていただけませんか?
自分には一個も他には思いつかず。
#ちなみに、Win2000です。
0561nobodyさん
03/07/13 17:01ID:???お前、>>438>>461>>465だろ
わからない文が出てくるたび毎回ここで聞く気か?
本でも買ってじっくり読むか文法のサイトでも行って基礎から勉強しろ
0562nobodyさん
03/07/13 17:09ID:nQJ8+8Yh$a = "0 but true";
$b = "0\n";
print ((!$a && !$b) ? "true\n" : "false\n");
print ((!($a != 0) && !($b != 0)) ? "true\n" : "false\n");
Perlの真偽はちゃんと覚えておかないと、そのうち火傷しまっせ。
0563nobodyさん
03/07/13 17:37ID:???プログラム上でファイルやディレクトリを作成する場合もあるだろ。
巷のフリー掲示板みたいにログファイルを666でアップしてください、
ってんなら別にいいけど。
#W2kならflockは使えた気がするのは気のせいでつかそうでつか。
#でもEWOULDBLOCKとかはサポートしてないんだよな。
0565nobodyさん
03/07/13 17:41ID:NX4Xoj87それで説明したつもりなのか?
リファレンスでもコピペしたようだな(プゲラ
これだから無知は。。
どこに真偽が判定されてるんだよ?
横に結果出力ぐらいつけてやれヴォケ
そんなんもできんのならここに来るな夏房
0566564
03/07/13 17:48ID:???そもそもUNIXにできてWindowsにできないっていう事しか存在しないんだから、
UNIXで動かそうとしてもどうしても動かないっていう状況は起きないので、大丈夫(?)
0567nobodyさん
03/07/13 17:51ID:???print !!$a . "\n";
print !!$b . "\n";
0568nobodyさん
03/07/13 17:57ID:???こりゃすげぇ
0570nobodyさん
03/07/13 18:22ID:???0573nobodyさん
03/07/13 18:55ID:???perl で実現するにはどうすればいいのでしょうか?
// c の場合
char * a [] = ( 'aaa', 'bbb', 'ccc' );
char * b = &a[1]; // b[0] = 'bbb'
;# perl の場合
@a = ( 'aaa', 'bbb', 'ccc' );
@b = @{ $a[1] }; # うまくいかない…
# @b にどう代入していいか解りません(´д⊂ヾ
0575nobodyさん
03/07/13 18:55ID:???char ** b = &a[1]; // b[0] = 'bbb'
0578nobodyさん
03/07/13 19:02ID:???>>565は、Perlでの真偽がどうかを説明するべき所で、
2つの論理和をとったものの真偽を表示するスクリプトを書いた点について怒ったのでしょう。
0579nobodyさん
03/07/13 19:08ID:???勘で答えると、
$b[0]に$a[1]を代入したいんでしょ?なら、$b[0] = $a[1]
あ、同じデータを2箇所から参照したいっていうことか。それは今のところできないなぁ。
\$b[0] = \$a[1]、う。文法エラー
0580nobodyさん
03/07/13 19:12ID:???コメントに書いてありますが
@b には @a[n] の様に添え字をして任意の位置から
参照できるようにしたいんです
@a = ( 'aaa', 'bbb', 'ccc' );
@b = $a[1]; # どう書いていいか解らない。@b には $a[1] からのリストとして代入したい
foreach ( @b ) {
print ;
}
0581573
03/07/13 19:13ID:???0582nobodyさん
03/07/13 19:25ID:???*方法1
@b = $a[-1], @a;
*方法2
@b = @a[1 .. $#a, 0];
0583nobodyさん
03/07/13 19:28ID:???0584nobodyさん
03/07/13 19:43ID:lgv8WpE5まだPerl勉強し始めて、2ヶ月ぐらいですので、敷居の高い改造であるかとは思いますが、手助けのほどお願いできませんでしょうか?
0585nobodyさん
03/07/13 19:49ID:???@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];#これは無理みたい
0586nobodyさん
03/07/13 20:18ID:???スレ違い
【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
0587565
03/07/13 20:22ID:DslkH4qSわからない人のためにな
>>562のを実行してたしかめろ!っていうのは初心者にとって嫌だとおもったから
0588nobodyさん
03/07/13 20:23ID:???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 のソースから考えると、こういうこと?
0589584
03/07/13 20:25ID:lgv8WpE5スレ違いでしたか(汗
じゃあ案内先で再度質問させていただます
失礼しました(´Д`;)
0590nobodyさん
03/07/13 20:26ID:???http://www.roppongi-tv.net/00004/007.shtml
http://www.roppongi-tv.net/00004/hara.shtml
http://www.roppongi-tv.net/00004/shi.shtml
0592nobodyさん
03/07/13 21:02ID:???cronを使いたいんですがどうすればいいでしょうか?
0594nobodyさん
03/07/13 21:06ID:???0596nobodyさん
03/07/13 21:08ID:???0597nobodyさん
03/07/13 22:02ID:tSmK0WhUApacheだとmod_auth_mysql等を使って、データベース
と連動した認証ができますけど、同じようなことを
IIS + SQLServerで行う方法ってあるのでしょうか?
0598nobodyさん
03/07/13 22:11ID:???0599nobodyさん
03/07/13 22:28ID:???知ってる人がうまい具合に読んでくれて答えてくれることを期待してるでしょ?
誘導を待つのもいいが、適切なスレを自力で探す手間を惜しんじゃいかんよ。
0600nobodyさん
03/07/13 22:51ID:???0601nobodyさん
03/07/13 23:06ID:???0603nobodyさん
03/07/14 00:22ID:???自作自演(>>578)してまで逆ギレ(>>565)する初心者丸出し(>>587)の人が多いよね・・・。
0604nobodyさん
03/07/14 01:51ID:???0605nobodyさん
03/07/14 02:50ID:???0608nobodyさん
03/07/14 03:31ID:???ふつーにperldoc -f [command] だろ。
あと、googleで「perl マニュアル 日本語」辺りで引いてみな。
0609nobodyさん
03/07/14 03:56ID:???すげー暇な時に、
http://www.namazu.org/~tsuchiya/perl/info/perl-ja_toc.html
からHTMLヘルプ作ったので、それ使ってる。
0610556
03/07/14 04:41ID:???いや、うちの環境、
Win上でスクリプト書いて、いちいちテストサーバにアップしてるもんで・・・
SSHつながんないし。
まぁ、cygwin使うという手もあるのだろうけど。。。
>>609
いいですね、これ。
使わせていただきます。
0614nobodyさん
03/07/14 10:11ID:???0615nobodyさん
03/07/14 11:20ID:???0616nobodyさん
03/07/14 11:31ID:???で、Windows版にもperldocはある。
というかインスコしたディレクトリのbin見れ。色々入ってるから。
あとhtml以下もな。
0618nobodyさん
03/07/14 11:50ID:???0619nobodyさん
03/07/14 12:24ID:???unlink<./tmp/*>が使えないのですが、
別の手段(opendir?)で、
./tmp/* にあるファイルを削除する方法はないでしょうか?
perldocの日本語版はないけど、有志で翻訳しようというプロジェクトがあるよ。
http://perldocjp.sourceforge.jp/
>>619
標準モジュールのFile::Pathを使う。
0621nobodyさん
03/07/14 12:55ID:???0623nobodyさん
03/07/14 14:41ID:???SSIの動作が異なっているために実行されません。。
SSI実行時のカレントディレクトリが異なっているようです。
サーバ側の設定などで修正は可能ですか?
ファイルの修正は多すぎて大変なので・・・。
解決策をご存知の方教えてください。
0624nobodyさん
03/07/14 14:54ID:???CGI: Common Gateway Interface part 11
http://pc2.2ch.net/test/read.cgi/php/1055597189/l50
0625nobodyさん
03/07/14 15:08ID:???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;
ではダメなんでしょう?
このときの{}にはどんな意味があるのでしょうか?
0626nobodyさん
03/07/14 16:31ID:hPGUS4Ez0の数字が4つ入っていた場合と
指定したいんですが、
どうやれば良いのか、教えて下さい。
0627nobodyさん
03/07/14 17:06ID:???#..
}
${ARRAY[$index]->{$key}} は $ARRAY[$index]->{$key} と同じ。
だからダメな理由なんて何も無い。
疑問に思ったら自分で確かめてみようね。
ちなみにその{}はデリファンレンスの為の構文。
リファレンスは便利だから、ちゃんと知ったっておいたほうがいいよ。
# というか、そんな奇怪な構文があったなんて知らなかった…
>>626
なんか二行目から三行目への文の流れがおかしいよ。意味がわからない。
投稿する前に文を見直したほうがいいよ。
0630nobodyさん
03/07/14 17:31ID:???・4つの 0 が入っている変数を全て知りたい
・どれでもいいから、入っているかどうか知りたい
@poo = ( $a, $b, $c, $d );
foreach ( @poo ) {
print "Found.\n" if ( /0{4,4}/ ) ;
}
0631nobodyさん
03/07/14 17:33ID:???これでもいけるだろ。
0632nobodyさん
03/07/14 17:37ID:???>>1 の
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:こんなエラーが出て上手く行かなかった。
これを示してくれ。最低でも
1: 自 分 は こ う 言 う 事 が し た い。
って事をはっきりと解りやすく書いてくれ
0633nobodyさん
03/07/14 17:49ID:???2: それで意味不明な質問を書き込んでみたが、
3: スルーされてうまくいかなかった
0634nobodyさん
03/07/14 20:20ID:???@tmp = sort { (${ORG[$a]->{adanaid}} <=> ${ORG[$b]->{adanaid}}) } 0 .. $#ORG;
ここ
@tmp = sort { $_[$a]->{'adanaid'} <=> $_[$b]->{'adanaid'} } @ORG;
のほうがよかないか?
0635634
03/07/14 20:49ID:???あと、続きもこうなるな・・・
foreach (@tmp) {
print 'person='. $_->{person}. "\n";
print 'adana='. $_->{adana}. "\n";
print 'adanaid='. $_->{adanaid}. "\n";
}
取敢えず、リファレンスの使い方がおかしいということで・・・
0636nobodyさん
03/07/14 21:28ID:???0637nobodyさん
03/07/14 21:45ID:???0638nobodyさん
03/07/14 22:01ID:???って思ってたら間違いに気づいた。
@tmp = sort { $a->{adanaid} <=> $b->{adanaid} } @ORG;
それと、
${ARRAY[$index]->{$key}}
についてだけど。これは、${hogehoge}の発展形で、
文字列をデリファレンスした時のことを言うソフトリファレンスだとも言えるけど、
Perlのマニュアルには、曖昧さをなくすためのものです。って書いてあるから、
その、デリファレンスという言い方は少しおかしい。
他に適当な言葉が思いつかなかったからさ。
それにしても
${ARRAY[$index]->{$key}}
ってよく使われるんだろうか?
一瞬なにやってるのか分からなかったよ。
0640nobodyさん
03/07/14 22:12ID:???0641nobodyさん
03/07/14 22:13ID:???そもそも、その書き方は正しいのだろうか…
0642nobodyさん
03/07/14 22:15ID:???0644nobodyさん
03/07/15 00:09ID:???0645nobodyさん
03/07/15 00:43ID:???こういう時は使う。
http://pc2.2ch.net/test/read.cgi/tech/1053053082/146-148n
私ゃ普段からデリファレンスは常に %{$hash_ref} みたく冗長に書くなぁ。
その方が入れ子になった時でも統一感が出る。
ソフトリファレンスを使う時は no strict 'refs' が入るし
%{"$hash_name"} みたくダブルクォートや . 演算子使って明示。
0646nobodyさん
03/07/15 01:22ID:m9/vaFbn早くも夏房の季節ですか(プゲラ
0647nobodyさん
03/07/15 02:57ID:???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を触って、まだ間もない者ですが、宜しくお願いします。
0648nobodyさん
03/07/15 04:04ID:???0649647
03/07/15 06:37ID:???おおお……しかもご親切なことに、$bの中には!
([^.]+)の部分、1週間近く悩んでも、自分で書けなかったんです。
正規表現の勉強が、まだ全然足りていないようです。
今も、書いて下さった部分を、首っ引きで調べています。
2つの()でグループ化しておいて、$a, $bで参照しているんだな、という
所まではわかりました。$1や$2でなくても大丈夫なんですね。
[^.]+は…任意の一文字以外の文字列の、一回以上の繰り返し…でしょうか(自信なし)。
ともあれ、ここから先は、自力で調べることにします。
本当にありがとうございます。
0651nobodyさん
03/07/15 10:13ID:???0652nobodyさん
03/07/15 10:28ID:???0653山崎 渉
03/07/15 11:05ID:???__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0654nobodyさん
03/07/15 12:25ID:BbnXwsym0655nobodyさん
03/07/15 14:08ID:???よって行単位でソートをかけるときはどういうやり方がありますか?
0656nobodyさん
03/07/15 14:21ID:???0658nobodyさん
03/07/15 14:40ID:???そういうデータは他のソフトでも普通に処理できるのだろうか。
0659nobodyさん
03/07/15 14:47ID:???0660nobodyさん
03/07/15 15:08ID:???とりあえずRDBか何かに置き換えることをお勧めするよ。
そうじゃなくて、このCSVファイルを処理すること自体が目的だとしたら……
先頭要素、ファイルポインタ、行サイズあたりを記録していって2パスで処理とか?
0661nobodyさん
03/07/15 16:02ID:???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>;
}
0662atom
03/07/15 17:12ID:3ahZXwjC$tag =~ s/\<.*>$//g
で置換すると
あああ<B>いいい</B>が
あああになります。
これを
あああいいいと変換したいのです。
0665nobodyさん
03/07/15 17:57ID:???どうすれば良いのでしょうか。
Jcode::convert(\@file,'utf8');
とかやったのですがやっぱりダメなようで…。
0666nobodyさん
03/07/15 18:34ID:???0667nobodyさん
03/07/15 18:41ID:???0672nobodyさん
03/07/15 22:34ID:???<IMG SRC="xx.gif" ALT="がんばった!o(>_<)o">
これなら納得いくか?
0674673
03/07/15 23:21ID:???htmlspecialchar ってPHPの関数だったw
0675あぼーん
NGNG0676あぼーん
NGNG0677nobodyさん
03/07/16 00:08ID:???スレ違いだが一応突っ込んでおくか。
<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>
0678nobodyさん
03/07/16 00:23ID:???プログラマは、ユーザーが「想定外」の操作をする事も念頭においてプログラミングをしなければならない。
これ、プログラムの基礎。
0679nobodyさん
03/07/16 00:28ID:???0680nobodyさん
03/07/16 00:54ID:GrzUswHSPerlで動かすCGIの掲示板みたいな物を参考書片手に作ってるのですが
プログラム自身が新しくディレクトリーやファイルを作る方法を探してます。
色々頑張ってディレクトリーは
mkdir $setdir,$setpm;
で作れるのですが
その作ったディレクトリーの中にプログラム自身でファイルを作成する方法が
よく判らないのです。
検索してみた所【touch】なるコマンドが出てきたのですがうまく作動してくれません
根本的に間違ってるのか、困り果ててます。
なにかヒントだけでもお願いします。
0681nobodyさん
03/07/16 00:59ID:???0683nobodyさん
03/07/16 01:09ID:???100%入力ミスをしない自信があるんならいいんじゃない?
0684nobodyさん
03/07/16 01:12ID:???って文句いうユーザー入るんだろうな・・・
0686nobodyさん
03/07/16 09:19ID:???0691655
03/07/16 11:26ID:???ありがとう。きれいなコードですね。
実際の処理は>>655で書いたのと違い、
ちょっとごたついているんですが、
ファイルポジションを確保するやり方を使うことにします。
比較対象フィールド(複数)の保持だけなら
今回はメモリの制約にかからないので。
これは個人的な質問ではありませんが、
もし比較対象フィールドを確保しようとするだけで
メモリの制約にかかる場合は、どういうやり方が考えられるでしょう?
>>686さん
0692nobodyさん
03/07/16 11:47ID:iP2fRAb3プロバイダはCGIの動作を見てから
使用許可を出すと言っています。
それで自宅サーバー構築を思い立ったのですが
自宅ではテスト環境が出来たんですが
先方に見せる事が出来ないんでしょうか。
CATVでプライベートIPアドレスとやらなので、
自宅サーバーを公開できない様ですが、本当ですか?
CGIテスト環境を貸してくれる所とかあるんでしょうか?
結構行き詰まってます。宜しく...。
0693nobodyさん
03/07/16 11:49ID:???0694nobodyさん
03/07/16 11:52ID:???>>692
動作確認する必要があるというなら、向こうでやってくれるんじゃないの?
どっかに置いてあるのを外から見ただけじゃ何もわからんと思うんだが。
0698nobodyさん
03/07/16 12:43ID:???そのうちお菓子作りの質問とかも来そうだな。
0700nobodyさん
03/07/16 13:13ID:???お前は初心者質問と書いてあったら、「801初心者質問スレ」でもCGIの質問をできるのか?
寝言は寝て言え。
0701nobodyさん
03/07/16 15:23ID:F4EDEscpこうしたら、@hogeには@arrayのリファレンスが入ったんですけど、
[@array]って書き方は一体なんでしょうか。
0702nobodyさん
03/07/16 17:06ID:???[ ] は無名配列生成子。
@array のリファレンスを返しているのではなく、
(@array) というリストを生成し、そのリファレンスを返す。
0703nobodyさん
03/07/16 20:47ID:???{ }
sub { }
0704701
03/07/17 09:21ID: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個の配列になってしまって、"あ","い","か","き"が入ってしまったので、
なんかてきとうに[]とか付けたら偶然できたんですが。
0705nobodyさん
03/07/17 10:37ID:???push(@arrayRef,[@array1]);
push(@arrayRef,[@array2]);
だと、無名配列を"生成"するプロセスが入るから、
push(@arrayRef,\@array1);
push(@arrayRef,\@array2);
としたほうが早いね。
あと、
foreach (@{@arrayRef[$i]}){
は一応動くけど
foreach (@{$arrayRef[$i]}){
が正しい。
あと、変数は基本的に局所化しようぜぃ。
特に同じ変数名引き回すなら、思わぬ動きをする可能性大。
0706nobodyさん
03/07/17 10:45ID:???sub makeArray{return (['あ','い'],['か','き']);}
とか
0707nobodyさん
03/07/17 10:46ID:AZTCTrFHuse strict; すれば良いかと。これやって大域変数の使用を極力抑えれば
バグの入る余地をかなり減らせると思う。
0708nobodyさん
03/07/17 13:11ID:???さらにもう一声
@arrayRef = (['あ', 'い'], ['か', 'き']);
とサブルーチンをとっぱらってみるとか…
0709nobodyさん
03/07/17 13:12ID:???0710nobodyさん
03/07/17 13:29ID:???0711nobodyさん
03/07/17 13:35ID:AZTCTrFH使い捨ての書き捨てコードだったら俺もグローバル使いまくるけど、
大きいソースになったらバグが出やすいし保守しにくくなるよ。
0712あぼーん
NGNG0713
03/07/17 16:50ID:MTBsKFuL#!/cygwin/bin/perl
print <<end;
content-type: text/html
<html>
<body>
こんにちは<br>
私の名前は太郎です<br>
</body>
</html>
end
と入力し、IEで見てみると、『ページを表示できません』と出ました。どうすれば表示できるのでしょうか?
初心者で申し訳ないです<(_ _)>
0714nobodyさん
03/07/17 17:03ID:???あなたの環境は?
> と入力し、
どこにどうやって入力したのか?
> IEで見てみると
どこを見たのか?
あまりに情報不足で答えようがありません
0715nobodyさん
03/07/17 17:41ID:???この辺おかしい気がするんだが?
0716nobodyさん
03/07/17 17:50ID:???0717nobodyさん
03/07/17 18:00ID:???0718nobodyさん
03/07/17 18:01ID:???0721nobodyさん
03/07/17 18:50ID:m6zrRyqWPerl、それもバージョン5.80以下で、
モジュールを使わずに、つまりライブラリで、
eucからUTF-8への変換をするにはどうしたら良いでしょうか?
0723nobodyさん
03/07/17 19:23ID:???0724nobodyさん
03/07/17 19:24ID:???あれか、標準ライブラリと言いたいのか?
0727nobodyさん
03/07/17 20:06ID:???ヒアドキュメントで2個分の改行が入ってるから無問題だろ
とかマジレスしてみる
0728nobodyさん
03/07/17 20:25ID:???0729座敷荒氏
03/07/17 20:27ID:???パラメータファイルに書かれたファイルを削除するものです。
ファイル名*に対応できなかったので下記のように書き直して
テストでは問題なく成功したのですが
本番機ではなぜか一部のファイルを削除できずに
1を返して異常終了してしまいました。
原因や修正箇所を教えていただけませんか?
#! /usr/bin/perl
while (<>){
($cmd_para) = split;#パラメータファイルより確認対象取得
unless(unlink< $cmd_para >){#ファイルの削除
exit(100);#ファイルが削除できなければ異常終了
}
}
exit(0);#上記以外正常終了
0731座敷荒氏
03/07/17 20:38ID:???即レスありがとうございます。
そうですね!
シェルから実行していてログみると
1で終了してるんですけど、
このスクリプトで1で抜けるってのが
ありえるのかと…
質問したのに情報欠けてますね。
もう一度調べて直して再度質問させてください。
宜しくお願いします。
0732nobodyさん
03/07/17 21:42ID:CeuxGVu00733あぼーん
NGNG0735nobodyさん
03/07/17 21:56ID:CeuxGVu0お前ほどの無知は初めて見たよ
0737nobodyさん
03/07/17 22:07ID:???「>725の間違いでした」とでも言っておけばよかったのに。
0738nobodyさん
03/07/17 22:08ID:CeuxGVu0うん。今日はパパンにレイプされたちゃったんです
0740nobodyさん
03/07/17 22:13ID:CeuxGVu0カレー食べました
0741nobodyさん
03/07/17 22:30ID:???0742nobodyさん
03/07/17 23:00ID:???0743nobodyさん
03/07/17 23:16ID:FCw7NcrOあだkdsんdlsdなksんだlんdさldあんだ
だdささ
藻前らアフォすぎ
0744あぼーん
NGNG0745nobodyさん
03/07/18 03:23ID:???という中身の配列データを、
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);
と、追加書きさせるようにしてるんですが、はっきりいって無様な感じがします(´・ω・`)
こういう手段しか無いのでしょうか・・・
0746745
03/07/18 03:27ID:???CGIのゲームのデータを記録するファイルなので、前のデータを残しておけないからです。
なにかいい方法があったら教えてください。よろしくおながいします。
0747nobodyさん
03/07/18 03:33ID:NVnSzVH0if(!open(OUT,">$file")){print "ファイルが開けません";}
print OUT join("\n", @hoge, "");
close(OUT);
こうか?
0749nobodyさん
03/07/18 04:04ID:???それの注意点としては一番最後の行には改行がつかない点。
最後に改行つけたければ
print OUT join("\n", @hoge, "")."\n";
とか
foreach(@hoge){print "$_\n" ;}
0750745
03/07/18 04:26ID:???そうでしたか。
でも、もう一度ソースを見直したところ、
最後の行には改行なくても大丈夫だということがわかりましたので
今回は>>747を使わせていただきます。
重々(ー人ー)多謝
0751nobodyさん
03/07/18 11:17ID:7SO5ZUkTqq||; こういう書き方なんていうんですか。
0752nobodyさん
03/07/18 11:28ID:NVnSzVH0> それの注意点としては一番最後の行には改行がつかない点。
つくよ。それはちゃんと考えてある。
> print OUT join("\n", @hoge, "")
そのために配列に空要素を加えてるわけで・・・。
0753nobodyさん
03/07/18 11:29ID:gzS3zVXD0755あぼーん
NGNG0756nobodyさん
03/07/18 12:15ID:NVnSzVH0Generalized quote.
0757nobodyさん
03/07/18 12:36ID:???解決したのはいいんだが、
自分で考えた案の方は、何故一度空にしてから追記で改めて書き込むような
処理になっているのかが気になる。
0759nobodyさん
03/07/18 13:20ID:???何も書き込まないから内容が前のままになると勘違いしていた、と推測してみる。
と思ったけどそれならforeachの前にprint OUT ""挟むか。
やはりわからん。
と思ったら>>746に書いてあったw
やはり↑の推測でよかったのか。
#ちなみに>$fileで開いた時点でファイルは空になる。
0760nobodyさん
03/07/18 13:53ID:50GDA6Bl俺も、それでいろいろとまどったこともあった
0761745
03/07/18 18:44ID:???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
(略
となってしまうので、いったん空っぽにしてた訳です。(´・ω・`)ナンカ ヘン?
0762745
03/07/18 18:48ID:???foreach(@user){
$value = $_ ."\n";
print USER $value;
}
close(USER);
ぐはっ、これでも逝けたのか… (o_ _)o
ヽ(゚∀゚) アヒャヒャヒャヒャ ドンマイドンマイ
0763nobodyさん
03/07/18 20:19ID:Y8wtPXEB1 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で分解して、それを添え字にする、とい方法ですが、
これは、かなり無駄な気がします・・・
もうすこしきれいなのはありませんか?
0764nobodyさん
03/07/18 20:29ID:Y8wtPXEB×0:50
○50:0
こうかえないと、ソートできませんね
0765nobodyさん
03/07/18 20:33ID:???0766nobodyさん
03/07/18 20:35ID:Y8wtPXEBえと、それだったら
バブルソート使わないとだめっぽくないですか??
というか、ハッシュがソートされると、添え字がどうなるとかわからないんですけど・・・
値を比べて、添え字と値が対でソートされるんですか?
0767nobodyさん
03/07/18 20:49ID:???0768nobodyさん
03/07/18 21:02ID:???0769nobodyさん
03/07/18 21:31ID:bi1QsuUD$test =~ m/$pataann/;
こんな感じで正規表現パターンを変数化することなんて
無理ですよね?
0771nobodyさん
03/07/18 21:51ID:???やってみりゃいいだろ。
つーか、もう余計な部分まで答えてやる。出来る。
そして$patternの中身がそのまま正規表現パターンとして使われるから注意な。
$pattern = "a.";
なら"aa"や"ab"にもヒットする。
これを文字通り"a."にヒットさせたい場合は
$pattern = "a\\.";
としてやる。
さもなくば
$pattern = quotemeta($patter);
としておくとか、
$test =~ m/\Q$pattern\E/;
などとしろ。
いいか、pataannじゃなくてpatternだぞ!
0773nobodyさん
03/07/18 22:06ID:???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;
0774nobodyさん
03/07/18 22:23ID:???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;
0776nobodyさん
03/07/18 22:54ID:???( )
( )
/ノノ"\ヽ )
从*゚ー゚从 〜
/゙゙゙lll`y─┛
ノ. ノノ |
. `〜rrrrー′
. |_i|_(_
落ち着け。
0777nobodyさん
03/07/18 23:11ID:???あまり関係ないけど、おいらならこんなデータ構造にしますな。
@score = (
1 => {
'歴史' => 10,
'世界史' => 50,
},
);
合計は計算する。
0778nobodyさん
03/07/19 00:22ID:???There's more than one way to do it.
0779nobodyさん
03/07/19 00:31ID:???1 50 10 60
2 60 80 140
3 10 60 70
随分と成績の悪いやつばかりですね
0780nobodyさん
03/07/19 00:52ID:???4 90 85 5 190
0781nobodyさん
03/07/19 01:07ID:???「これ(・・・コードの羅列・・・)って出来るんですか?」
って聞くやつってどういう思考回路してるんだ?
俺様がわざわざ試すのは面倒だから下々の暇そうな2chの
馬鹿どもにやらせておこうって考えなのかな?
0782nobodyさん
03/07/19 01:12ID:???0784nobodyさん
03/07/19 01:39ID:???0788nobodyさん
03/07/19 02:23ID:???0789nobodyさん
03/07/19 02:39ID:xDnFfAsdあったら教えてください。素人質問で
申し訳ありませんが。
0790nobodyさん
03/07/19 02:56ID:???http://www.din.or.jp/~ohzaki/regex.htm
0792nobodyさん
03/07/19 03:42ID:xDnFfAsd有難うございました。
ただ良く理解できません。
例として、3と4は含むけど5は含まない
というのを教えていただける人がいれば、
よろしくお願いします。
0793nobodyさん
03/07/19 04:01ID:???http://www.geocities.jp/leeobasan/mokuji-kokugo.htm
0794nobodyさん
03/07/19 04:09ID:xDnFfAsd分からないなら分からないって言ってね。
0796nobodyさん
03/07/19 04:18ID:???-> 3と4を含み、かつ5は含まない
-> 3を含み、かつ4を含み、かつ5を含まない
実際にperlで表現する方法は>>790で既出なので略。
上の仕組みが分からない時は「集合」の勉強をしちゃってください。
「論理和 論理積」でググればいっぱいヒットします。
こんだけ丁寧に書けばもう問題ないでしょう。てことで次の質問者の方どうぞ。
0797nobodyさん
03/07/19 05:16ID:???やーだからね、仮にそういう質問の意図だったとして、
それが配列の要素に対しての話なのか文字列の部分に対しての話なのか、
条件判定の話なのか、ついでにそもそもPerlSyntaxの中で話なのかどうかすら、
何が何だかさっぱり分からんでしょ。
そもそも>>789や>>792からそういう解釈を導き出すのも無理あるし。
というわけで次の質問者どうぞ。
0798nobodyさん
03/07/19 09:24ID:???それみたら、そのスクリプト(もちperl)が、
商品を管理者画面から登録する際、
インデックスファイルみたいなものに、連番と商品名だけCSVで持たせて、
商品の詳しい内容は、
別のフォルダ「商品名」(もち日本語)っていうファイルを作らせて、
(たとえば、「ThinkPad1200特売品」とかいうファイル名)
で、「ThinkPad1200特売品」っていうファイルの中に、「<>」区切りで、
商品名の詳細がかいてあるんです・・・
自分、仕事としてperlをやりはじめたのがまだ1ヶ月だから、
わからないんだけど、こういう組み方って、アリなんですか?
それとも異常?
perlお仕事歴長いかた、教えてください。
0799798
03/07/19 09:25ID:???>別のフォルダ「商品名」(もち日本語)っていうファイルを作らせて、
じゃなく
別のフォルダの中に「商品名」(もち日本語)っていうファイルを作らせて、
0800nobodyさん
03/07/19 09:33ID:???0801nobodyさん
03/07/19 09:45ID:???0803nobodyさん
03/07/19 11:34ID:???ネットショッピングかな?
商品登録だけじゃなくて、販売とか在庫管理まで考慮して
ファイルを設計する必要がある。
他の部分がどうなってるのか分からないけど、
商品詳細情報を個別のファイルにしておくと、
商品番号から詳細情報を表示するリクエストがあったときに
「全商品詳細情報ファイル」を読んで検索して表示するより速い。
内容に不備・誤記があったときの訂正も楽。
完売したらインデックスファイルの該当個所だけ変更すればよい。
目的に合わせてファイルを分けるのは異常ではなく当然。
Perl というよりデータベース設計の問題だと思われる。
0804798
03/07/19 17:38ID:???なるほどー、そういう利点があるんですね。
それは、すごく初耳だったので、勉強になりますた。
>販売とか在庫管理まで考慮してファイルを設計する必要がある。
これをつくった人は、
そこまでは、なにも考えてないみたいです。
ショッピングカート経由で注文があったらメールがいくだけみたいな。
>完売したらインデックスファイルの該当個所だけ変更すればよい。
っていう機能を管理者画面につけてないみたいですしね。
0805nobodyさん
03/07/19 19:07ID:???将来的な機能追加を見越した設計だったのかもしれない。
メールを送るだけだからファイル管理だけで充分だけど、
単一ファイルじゃ拡張しにくくて気持ち悪いとか。
ある程度の規模や機能に達すればファイルでなくて本格的な
データベースを導入することになるんだろうけど。
>そこまでは、なにも考えてないみたいです。
在庫管理するかどうかのプログラマに決定権があったとは思いにくいなぁ。
単に初回作成時は、依頼主の予算やショッピングサイトの来客数の見込みから
簡単に済ましただけかも知れない。
実店舗がある個人商店の片手間なショッピングサイトとかなら、大枚はたいて初っ端から
大掛かりなシステムは依頼できないっしょ。
0806795
03/07/19 19:53ID:???0808nobodyさん
03/07/19 21:54ID:???http://ime.nu/pc2.2ch.net/やhttp://cgiboy.com/pc2.2ch.net/のようなアドレスで
動的にページを出力するにはどうしたらいいんでしょうか?
PATH_INFOを使用するにしても、スクリプトの名前が入ると思うのですが・・・
0810nobodyさん
03/07/20 00:14ID:gCjTktSyアップ出来ないみたいなんですが、
どうしても表示したいので、やり方を教えて下さい。
\で囲んだりしても駄目だったので。
例えばクーラーを表示する場合とか。
0811nobodyさん
03/07/20 00:16ID:???0812nobodyさん
03/07/20 02:13ID:???質問は正確にね。
0813nobodyさん
03/07/20 02:43ID:???エラー文面も載せてもらえるといいな。
FTPだとしたら取れないかな?
「クーラー perl 文字コード」でぐぐれば幸せになれるかもね。
0814nobodyさん
03/07/20 09:35ID:XGlmJStz残した別ファイル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を使ってみたかったのです。)
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も参照されたし。
0818814
03/07/20 13:18ID:XGlmJStz「実際にどんな操作が可能かはそのDBMライブラリの実装によるんだよ。
で、困った事に大抵のUnixでのデフォルトであるNDBM_FileはEXISTSが(現時点
では)実装されていないんだよね。」
良く分かりました。どうも有り難うございます。
>>815, >>817
私は「初めてのPerl」を読み終えたばかりの初心者です。タイ変数については
これから「プログラミングPerl」で勉強します。
0819nobodyさん
03/07/20 18:21ID:???while( 1 ) {
・
・
・
}
…の部分はかなり大きな処理で、ループの上に戻ってくるまでに
時間がかかるスクリプトがあります。ループの上に戻ってきた時に
スクリプトの自分自身をリロードするような事ってできますか?
何故こんな事したいかと言うと、ループの上に戻って来る前に、
スクリプト修正とか入ると、一旦スクリプトを終了しないといけないので
リロードできないものかと…。因みに、 while の前後にも処理があります
0820nobodyさん
03/07/20 18:28ID:???0821nobodyさん
03/07/20 18:28ID:???0822闇主
03/07/20 18:40ID:???スクリプトファイルを変更しても
既に動いているプロセスのコードは変わらない。
変更後のスクリプトによる別プロセスを立ち上げ直す必要がある。
0823nobodyさん
03/07/20 18:46ID:???while内のコードを別ファイルにして、ループ内で毎回読み込んでevalブロックの中で
実行させるというのはどうだろう。
0826nobodyさん
03/07/20 20:33ID:???Perlと言えばCGIしか思いつかないのか。
0827nobodyさん
03/07/20 20:51ID:???おまいさん、この板はWebProg板ですよ?
ム板と勘違いしてる?
0828nobodyさん
03/07/20 20:55ID:???0830nobodyさん
03/07/20 21:25ID:???向こうで正規表現スレに誘導したの、実は俺。
0831nobodyさん
03/07/20 21:28ID:???どこがオカシイか教えてください
#!/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"; }
}
0833nobodyさん
03/07/20 21:44ID:???$req->header( 'Accept-Encoding' => '*' );
にしても、駄目でした。
0837nobodyさん
03/07/20 22:35ID:???0838nobodyさん
03/07/20 22:39ID:???0839nobodyさん
03/07/20 22:57ID:ucM2tzJ9例えば $hoge = "\x53\x54\x2d\69" なら
\x69\x2d\x54\53 と逆転させてたいのですが
どうやってやるのがスマートなのでしょうか?
一応初心者ながら 1バイトずつ配列に読み込んでreverseでやるのを考えてみたんですが・・・
0840あぼーん
NGNG0841あぼーん
NGNG0842nobodyさん
03/07/20 23:22ID:???スカラコンテキストでそのままreverseに入れれば、反転した文字列が得られる。
perldoc -f reverse もしくは「perl reverse」でぐぐる。
0844nobodyさん
03/07/21 00:44ID:???ソフトウェアと呼んでもいいの?
0845nobodyさん
03/07/21 01:05ID:???0847nobodyさん
03/07/21 01:57ID:???一応、読んで見てきましたが、該当するような記述は見当たりませんでした。
>>843
それをやっても、駄目でした。LWP は何故か
Accept-Encoding: gzip
と、勝手に変更しますね。
まぁ、2ちゃんねる側の仕様が変わったのカナ?
0848nobodyさん
03/07/21 10:23ID:???強いて言うならば「今風」ってだけです。
いま作っているモジュールが特定のスクリプト専用に作っている為、そういう風に思うのかもしれません。
それとも根本的に考え方が間違ってるのかもしれません。
それすらわからなくなってきてしまって。
OOPで書く利点をお教え頂ければ嬉しいです。
宜しくお願いします。
0849ともちゃん
03/07/21 11:44ID: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;}}
0852848
03/07/21 12:20ID:???それはある意味正解なのですが、それを言っちゃうと・・・
でもOOPで書きたいんです。
>>849
どうがんばってみても「}」が一個足りません。
気のせいでしょうか?
0853ともちゃん
03/07/21 12:31ID:O4IhS66K書き写す時のミスでmy $id = "abc";となっていました。<(_ _)>
852番さんありがとうございます。
わたし、下の行ばかり見ていました。わたし馬鹿ですね。
もっと上の行になかったの気が着かなかったです。(^^ゞ
直したらエラーの表示はなくなりましたが、全然動いていないみたいなんです。(;_;)
0854nobodyさん
03/07/21 12:33ID:???単に書き方が違うだけ
それが書きやすい訳でも大規模開発に適してる訳でもない
構造化プログラミングの流れは、ソフトウェアの品質向上に
大きく貢献したけど、OOPはそういうのとは別のような
0855848
03/07/21 13:07ID:???実際問題として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
}
0857nobodyさん
03/07/21 13:24ID:???OOPって?
オブジェクト指向プログラミングの略?
0858848
03/07/21 13:31ID:???そうですか。
オブジェクト間はいくらでも絡まっていいけど、それが外からカプセル化して見えないようにすればいいと。
ますます難しくなってきました。
>>587
です。
0860nobodyさん
03/07/21 14:02ID:???0862nobodyさん
03/07/21 14:06ID:???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を考えてみた
0864nobodyさん
03/07/21 14:40ID:???#!/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 を分ける方法は上記の様なコードで正しいでしょうか?
0865nobodyさん
03/07/21 14:41ID:???OOの考え方ができていればそれなりに利点はある。
責任をはっきりさせるように作れば保守性もあがるしね。
ただ、perlはもともとOOするためのスクリプトじゃないので
OOには不向き。
完璧なOOをしようとしても、いろいろと不都合がでて、結局
ぐちゃぐちゃなソースになってしまう。
ちなみに、モジュール内で
$self->{'key'}でアクセスできるのはOOとして正しい。
Javaでもthis.keyとかってアクセスできるしね。
ただ、問題なのがモジュールの外からでも
$object->{'key'}でアクセスできちゃうこと・・・・・
まぁ、所詮perlなのでその辺はあまり深く考えないほうがいいっす。
0866nobodyさん
03/07/21 14:44ID:???どうなんだろう?うまくいくならいいんじゃない?
もれだったら以下のようにする
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に入っちゃう気がする・・・・
0867848
03/07/21 14:54ID:???>$object->{'key'}でアクセスできちゃうこと・・・・・
やっぱりこれが納得できなかったんですよ・・・
でもかなりなぞが解けてきました。
後はいかにOOPっぽく書くかだけです!
勉強になりました。
>>864
私も@aと$bは逆にします。
ちなみに確か$bはソートの時に使う変数なのであまり使わないほうがいいかもです。
0868nobodyさん
03/07/21 14:54ID:???foo($b,@a);
sub foo {
my $b = shift;
my @a = @_;
・・・・・
}
0870ともちゃん
03/07/21 15:33ID:O4IhS66K> 動くかどうかは分かりませんが、参考までに。
> #!/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";}
これで書き込めるはずだという事です。
こっちは変じゃないですよね?
0871nobodyさん
03/07/21 15:45ID:???君の頭が変
変っていうかおめでたいね。
できるかできないか実際やってみればいいだろ
ヴォケ!
それで、書き込めなかったらどっか悪いんだよHAGE!
そもそも、Cookieについて理解してるのか???ぁあん(゚Д゚#)
my $day = "";してて
if($day > 0)
ってのがわけわからんけど
0874nobodyさん
03/07/21 18:35ID:???0876nobodyさん
03/07/21 19:35ID:???重要なことは、知りたい物をはっきり目に見える形にすること。
やり方はいろいろあるけどね。
>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
}
0877nobodyさん
03/07/21 19:54ID:???と書く香具師は誰もいないのか鬱。
0879nobodyさん
03/07/21 19:57ID:SiseSbMQ0881nobodyさん
03/07/21 20:09ID:???このスレは「perlコーディング初心者」の質問スレなので、レスキューやKENT等の
ヘボスクリプトをいじれないウルトラボは経験値上げてから来てください。
0882nobodyさん
03/07/21 20:27ID:???0884nobodyさん
03/07/21 21:33ID:7NpeSLR0値を取り出すことは不可能でしょうか?
$nedan = $F_NEDAN{$name};
これでやってみると
$nedanは空でした。
0885nobodyさん
03/07/21 21:46ID:???はいはい、良かったね。氏ねバカ。
print $F_NEDAN{hoge},"\n";
$name = "hoge";
print $name,"\n";
print $F_NEDAN{$name},"\n";
0887nobodyさん
03/07/21 22:28ID:???0891ともちゃん
03/07/22 01:21ID:U6Ps44rqmy $day = "";のif($day > 0)ですがif($day = 0)にしました。
でも、my $dayの記述はやめてしまいました。
日時の取得も{}から外に出して時間も取得する事にしました。(^_^)v
わたし馬鹿ですから・・・
876番さん、ありがとうございます。
時間の取得に関係する事は前にも書いたみたいにして
クッキーが入っているか試してみましたよ。
abc=defってアラートが出てきたので、書き込まれている事になると思います。
だから、それに対してのクッキーの読み込みの部分がうまくいかないみたいです。
私の最初の書き方がダメだったのかしら・・・(;_;)
855番さんにせっかく教えてもらえたのに〜。
分からなくて困ってしまいました。
0892nobodyさん
03/07/22 02:02ID:???0893nobodyさん
03/07/22 02:04ID:???cookieの読み書き使ってるスクリプトなんかいくらでもあるんだから、
それでも参考にしたほうが早い
0894nobodyさん
03/07/22 03:10ID:???タイムアウトさせたいのですが、
どう書いたらいいですか?
0895nobodyさん
03/07/22 04:20ID:???クッキーを見えるようにスクリプトを書きかえて確認しる。
難しい所はないでしょ?
>>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
辺りで。
0896nobodyさん
03/07/22 08:49ID:I6YqyoJP$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を書き出してくれるでしょうか?
0897nobodyさん
03/07/22 09:44ID:???Dos窓がビロビロと出てくるのが気になりイライラがつのります。
Perl/tkを何に使うおうか小一時間かんがえますた。
答え(妄想してください。): ・・・・・・・・・・・・・
0898nobodyさん
03/07/22 10:22ID:???> $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/
0900nobodyさん
03/07/22 10:47ID:???はいはい、良かったね。氏ねバカ。
1.name.htmlに書き出しているのに、name3.htmlに書き出されると勘違いしている。
2.書き込み権限が無い
open IN, ">$name3" or die $!;
質問がめちゃくちゃだからこれ以上書き込みするな。礼も何もいらん。
質問すらまともにできないのは初心者未満だ。もう一度小学校行って来い。
0904nobodyさん
03/07/22 13:09ID:???>>896
name3.htmlに>>で書き出さないとだめじゃないの?
それと書き出しただけじゃだめじゃないの?
クライアントのブラウザの更新をjavascriptでやったら?
0906nobodyさん
03/07/22 13:59ID:???0907nobodyさん
03/07/22 14:10ID:???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;
0909904
03/07/22 16:57ID:???>そこに新たなデータを付け加えて
なんて書いてあったから・・・
そうか、サーバ上のファイルに変更を加えないのか。
>またhtmlに書き出す
なんて書いてあったから・・・
でも、「もちつけ」はよかったでそ
0911nobodyさん
03/07/22 20:35ID:???0913nobodyさん
03/07/22 21:09ID:???0915nobodyさん
03/07/22 21:23ID:???そういう意味じゃなくて
perl/tkつかったプログラム実行すると
tkウインドウの後ろでDos窓がずっとでてる。
どうやればDos窓を表示せずにtkウインドウだけ表示するか
ということを質問してるんじゃないかな。
0918ともちゃん
03/07/22 21:42ID:U6Ps44rqそれができなくて困っているんですー。(~_~;)
どこか他の質問掲示板で良い場所ご存知ですか?
色々な場所で聞いてみたいのです。
0919あぼーん
NGNG0920あぼーん
NGNG0923あぼーん
NGNG0924nobodyさん
03/07/22 22:31ID:???環境は、xp で、ActivePerl5.8 で、Perl/tk試しです。板違いで、ごめんよ。
use Tk;
$top = MainWindow->new();
$button = $top->Button( -text => 'EXIT', -command => \&exit );
$button->pack();
例えば、上のコードをtest.pl として起動すると、
tkウィンドウが表示される前に、
DOS窓が一瞬表示されフェードアウトするようにビロビロと消える動作をし、
それが、ただイライラすると書いた分けです。
誰か試さないかい?
0925nobodyさん
03/07/22 22:32ID:???自分で何もやらない・言われたことを何もやらない。
そんな態度ではどこの掲示板へ行っても同じこと。
2ちゃんを特別だと思うなよ。モニタの前にいるのは人間だ。
0927nobodyさん
03/07/22 22:41ID:???>どこか他の質問掲示板で良い場所ご存知ですか?
>色々な場所で聞いてみたいのです。
ともちゃん、おもしろすぎ。みんなイライラするから、どっかいき。
0928nobodyさん
03/07/22 23:04ID:???DOS窓も【コマンドプロンプト】も表示されないぞ。
って言うか、何も表示されないまま終わった
※DOS窓 = 95/98/Me
※コマンドプロンプト = NT/2000/Xp
0929nobodyさん
03/07/22 23:13ID:???#!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窓で通じないのか。ごめんよ。
0931nobodyさん
03/07/22 23:33ID:???どうやって呼び出すのですか?
perl.exeのかわりにwperl.exeを使えばいい。
でもあなたの態度はよくないよ。
質問する側が煽ってどうすんのさ。
もう少し礼儀を身に付けたほうがいい。
0933nobodyさん
03/07/22 23:38ID:???use Tk;
$top = MainWindow->new();
#$button = $top->Button( -text => 'EXIT', -command => \&exit );
#$button->pack();
MainLoop();
こうだろ?
Win2000だが起動時にちょっとDos窓が表示されるな。
0934nobodyさん
03/07/22 23:40ID:???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;
0935nobodyさん
03/07/22 23:46ID:???0936nobodyさん
03/07/22 23:46ID:???Dos窓上でtk使ったプログラムを動かしたときじゃなくて
tk使ったプログラムのアイコンをダブルクリックしたときに
Dos窓がでてくるのが気になるんだと思う。
0938nobodyさん
03/07/22 23:50ID:???そりゃ、当然だろ。tk でウィンドウ表示する前に perl 起動してるんだから、
コマンドプロンプトウィンドウ出るのはしょうがないと思うが…
0939nobodyさん
03/07/22 23:51ID:???0940nobodyさん
03/07/22 23:56ID:???>>933
ありがとう。そうそう同症状です、納得しました。
>>934
ありがとう。Perl5.8から標準だそうで、
MainLoop がないとtk自体もですね。
>>932
ご指摘ありがとう。
ここ>>897 質問でなく、もともとネタだったりするから。
0941nobodyさん
03/07/23 00:10ID:???#!C:/Perl/bin/perl #いらないかも
use Tk;
$top = MainWindow->new();
$button = $top->Button( -text => 'EXIT', -command => \&exit );
$button->pack();
MainLoop;
>>936
どうもです。そうです。そういうことです。
>>938
どもです。確かにしょうがないとも思います。(w
>>939
どもです。できれば出て来ない方がね。(w
0943nobodyさん
03/07/23 00:55ID:???932さんが答え教えてくれてるじゃん。
{$Perlのインストールディレクトリ}\bin\wperl.exeを.plファイルに
関連付ければ、エクスプローラからダブルクリックで窓は開かないはず。
0944896
03/07/23 01:45ID:???無事、動くようになりました。
お礼が遅くなりまして、すみませんでした。
とんちんかんな質問にも回答くださった皆様に、感謝しています。
もっと勉強してから出直します。
0945nobodyさん
03/07/23 02:00ID:???0946nobodyさん
03/07/23 05:51ID:???記述その物ではありませんが、構成的なアルゴリズムの質問です。
初めに-----
CGIのゲーム
IDを用いて個人登録
参加者一名につきtxtFileが一つ
ゲーム全体のtxtFileが一つ(頻繁に書き換え)
この時、ある参加者の特定の行動により「参加者が保有するファイル」を書き換えたい場合があります。
1:そう言った時は、全体の情報ファイルになんらかの記録を残しておき「参加者がアクセスした時」に書き換えたほうが良いでしょうか?
2:それとも、書き換える原因となった処理の時、「その場で」全参加者のファイルを書き換えたほうが良いでしょうか?
前者の場合は実現が困難で、またバグも出そうな気がします。
また効率の良さそうなやり取りもピンと浮かびません(俺の実力では)
後者の場合は、実現が簡単そうで管理も比較的容易な気がしますが、
参加者が増えた時は多量のファイルを一気に検索&書き換えで微妙にコワイです。
それと、A君のアクセスにより、直でB君所有のデータファイルが書き換えられるのはなんか個人的に抵抗があります。
こんな場合、普通、プログラマーはどちらの処理方式を取るのでしょうか?
もしよろしければ、理由もつけて回答してくれると嬉しいです。
0947nobodyさん
03/07/23 09:11ID:???0948946
03/07/23 10:16ID:???この時、ある参加者の特定の行動により「参加者が保有するファイル」を書き換えたい場合があります。
↓
この時、ある参加者の特定の行動により「他の参加者が保有するファイル」を書き換えたい場合があります。
0949nobodyさん
03/07/23 12:20ID:???0951nobodyさん
03/07/23 12:57ID:???ならない構造が誤りの気がする
データベース使うならそれもありだろうけど
0952nobodyさん
03/07/23 13:50ID:???0953nobodyさん
03/07/23 14:29ID:???HTMLを出力した後に一度バッファをフラッシュしてから
時間のかかる処理をしたいのですが
どのように書けばよいのでしょうか?
0954953
03/07/23 14:37ID:V4h+SVeUついでにもう一つお伺いしたいんですが
複数の変数やら配列を undef する場合
一個づつ
undef $val; undef @array; undef %hash;
と書く以外に方法ってあるでしょうか?
ちょと面倒くさいなと思いまして。
0955あぼーん
NGNG0956nobodyさん
03/07/23 15:18ID:???0958953
03/07/23 15:46ID:???ありがとです。
>>957
print $HTML;
$|=1;
sleep 5;
とやると出力を拝む前にシッカリ sleep していて
何だかフラッシュされていない気がするんですが
どういうコトなんでしょう?
0961967
03/07/23 16:48ID:???$|=1;
print $HTML;
sleep 5;
ってしなきゃ。
0962953
03/07/23 16:59ID:???print の前に書くんですね。
皆さんアリガトでした!
0963nobodyさん
03/07/23 22:08ID:???>>942
ありがとう:こんな方法もあるんですね。勉強になりました。
>>943
ありがとう:バッチリ!です。スッキリ!です。感謝です。
気になるのは wperl.exe でも支障はないのでしょうか?
0964nobodyさん
03/07/24 00:15ID:???0965nobodyさん
03/07/24 02:04ID:???ニュースグループのグループリスト取得するものですが、$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;
}
0967nobodyさん
03/07/24 02:58ID:???表示するようになったけど、全部同じデータでしかも、"3" というデータしかない…。
俺が思っているデータイメージは
$group = (
[ 'name', [ 1, 2, 3 ] ], # name はグループ名で、1,2,3 ... のリストがグループの記事番号とかのデータ
・
・
・
(以下略)
);
と、思ってるんだけど、間違いないカナ?
0968nobodyさん
03/07/24 03:05ID:???0969nobodyさん
03/07/24 03:21ID:???print に渡した時にはスカラー値として、リストのデータが 3 あるから、
3 としか表示されなかった。foreach でもう一回ループを廻すか、
join とか使うしかないのね…。
# 青らくだ本買わないと駄目だぁ…。
$group = $nntp->list;
foreach $name ( keys %$group ) {
print "N=$name\n";
foreach ( @{$group->{$name}} ) {
print "\t$_\n";
}
}
# それにしても、グループの数が物凄いんですが…。
0970nobodyさん
03/07/24 16:26ID:kzmo+pjp完全にランダムにするか、2回連続で
同じ数字は出ないようにする方法は?
0971nobodyさん
03/07/24 16:40ID:???0972nobodyさん
03/07/24 16:48ID:???0974nobodyさん
03/07/24 16:56ID:???( ´,_ゝ`)プッ マニュアルシラナイナンテ
http://www.perldoc.com/
Perl Manpage - Reference Manual
0977nobodyさん
03/07/24 17:18ID:???http://www.perldoc.com/perl5.8.0/pod/func/rand.html
どこに時間で決まるなんて書いてあるんだ?
0979nobodyさん
03/07/24 17:28ID:MQ0CG0OjなんでID出てないの
0980nobodyさん
03/07/24 17:43ID:???$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
0981nobodyさん
03/07/24 18:02ID:???0982nobodyさん
03/07/24 18:02ID:???srand(time)が自動的に実行されるってことだろ
>>970
完全にランダムも続けて同じ数字が出ないようにするのも
なんらかで出た値を保持する以外にないよ
0983nobodyさん
03/07/24 18:08ID:???0984nobodyさん
03/07/24 18:32ID:???<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>
0985nobodyさん
03/07/24 18:34ID:???0986nobodyさん
03/07/24 18:35ID:???0987nobodyさん
03/07/24 18:36ID:???0988nobodyさん
03/07/24 18:38ID:???0989nobodyさん
03/07/24 18:46ID:???その文章をリロードしても変わらないようにしたい。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>";
0990nobodyさん
03/07/24 18:52ID:???0992nobodyさん
03/07/24 19:01ID:???同じIP && 異なるマシン(同じ世帯の別マシン) → IPと日付を使った数字をsrandの種にする
異なるIP && 同じマシン(ダイヤルアップ接続) → クッキーを使う
異なるIP && 異なるマシン(誰が見ても変わらない) → 日付をsrandの種にする
0994nobodyさん
03/07/24 19:08ID:???0995nobodyさん
03/07/24 19:12ID:???srandが実行されていない場合、最初に一度だけ初期化される。
実際にはpidやら色々な値を足してる。
あと、/dev/randomが使えるなら、timeよりそっちを優先して使うようになってるぽい。
rand自体はCライブラリのrand()を呼び出したりしてる。
オーバーライドできるので、実装によって違いがあるかも。
http://pc2.2ch.net/test/read.cgi/php/1042260745/9
乱数ならこの辺りを参照。
0996nobodyさん
03/07/24 19:18ID:???デケデケ | |
ドコドコ < 次スレまだーー? >
☆ ドムドム |_ _ _ _ _ _ _ _ _ _|
☆ ダダダダ! ∨ ∨ ∨ ∨ ∨ ∨ ∨ ∨ ∨
ドシャーン! ヽ オラオラッ!! ♪
=≡= ∧_∧ ☆
♪ / 〃(・∀・ #) / シャンシャン
♪ 〆 ┌\と\と.ヾ∈≡∋ゞ
|| γ ⌒ヽヽコ ノ ||
|| ΣΣ .|:::|∪〓 || ♪
./|\人 _.ノノ _||_. /|\
ドチドチ!
0998nobodyさん
03/07/24 19:27ID:???すまんのぉ、青らくだ本持ってないから、その辺全然解らんのよ。
マニュアルサイト行ってもどこを読んでいいのやら、全然検討違いな所読んでた<俺
0999nobodyさん
03/07/24 19:27ID:???1000999
03/07/24 19:27ID:???10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。