Perl コーディング初心者質問コーナー Part25
CGIについての質問もじゃんじゃん待ってます。
#!/perl/bin/perl open( DATA, "ls -1 . | " ); @aList = <DATA>; close( DATA ); @aArg = split( /=/, <STDIN> ); print "Content-type: text/html\n\n"; print << "END_OF_HTML"; <HTML> <BODY> <FORM action="test.pl" name=testform method="POST"> END_OF_HTML print "<SELECT name=file onChange=submit();>"; foreach $file (@aList) { print "<OPTION value=".$file.">".$file; } print "</SELECT>"; print "<BR>"; print "プルダウン名称:".$aArg[0]."<BR>"; print "プルダウンの値:".$aArg[1]."<BR>"; print << "END_OF_HTML"; </FORM> </BODY> </HTML> END_OF_HTML これを実行するとファイル一覧のプルダウンが作成されて、選択すると内容が表示されます。 ただ、日本語ファイル名が含まれていると文字化けします。 どうすればよいか分かる方、おられましたらご教示願います。 環境はWinXP Apache1.3 ActivePerl5.8です。
9 :
8 :03/06/28 01:41 ID:???
自己レスすいません。 packすればよかったんですね。。。 ゴミレスすいませんでした。
文字化けする文字だからじゃない? 5cで終わってるヤツ
あら、解決してた
12 :
8 :03/06/28 01:43 ID:???
ごめんなさい_(._.)_ URLエンコード?されてたから、それを戻さないと使えなかったようです。 本当に、申し訳ないです。
せっかくだから use CGI; しようよ。 パラメータのデコードや出力のエンコードを面倒見てくれるし、 HTMLの文法間違いや入れ子のミスも防げるから楽だよ。
>>13 CGI.pmって読み込むだけで0.2秒くらいかからない?
18 :
nobodyさん :03/06/28 11:36 ID:SawIuqpj
>>16-17 うちの環境だと確かに読込に0.2秒ほどかかるな。
7年落ちのHDDとCPUが133MHzだけど。
>>18 1000MHzで時間かかるんですが。てか、とにかく重いんですが。
全部読んでるから?
あれはかなり重い。 俺の環境だと200KBくらいあるな。コメントが多いといっても、これはなかなかのものだ。
メモリもくう
22 :
nobodyさん :03/06/28 13:16 ID:SawIuqpj
使ったことないし、使う必要性を感じたこともないのだが>CGI.pm 何が便利なん?
あぼーん
>>22 楽
Perl使いにとっては重要な要素だと思うが。
>>25 22じゃないけど、楽か?
お前は使いこなせてない、とか言うなよ
あぼーん
30 :
27 :03/06/28 14:34 ID:???
>>28 いや、俺25じゃないけど。でも答えてみる。
一応CGI.pmは使ってます。
でも特に楽というわけじゃなくて、俺が標準っぽいのが好きなだけです。
前は自作のライブラリ使ってたけど、大して変わらない。
特に不満は無いけど、強いて言えばパラメータを自動で保持してくれるのがちょっとうざかったり。
スクリプトの方で保持してもらいたくない奴を削除するのがマンドクセー。
print('A');マンドクセ
自分用の物は、CGI::Minimalしか使いません。
うーん、CGIスクリプト書く時って、パラメタ切り分けるのに 自分用のコード(2,30行くらい)をrequireするくらいで、後は CGI特有の処理でモジュール用意するほどのものって思いつかない。 ヘッダ出力のprint文とか、「こんたいぷれ」とか「こんたいえい」とかで漢字変換 するようになってるし。(text/plain text/html)
>>33 わざわざそんなことせんでも
Content-type: text/html
って撃ったほうが早くないか?
>>34 print "Content-Type: text/html; charset=EUC-JP\n\n";
print "Content-Type: text/html; charset=Shift_JIS\n\n";
まで出るようになってる。
「kontaiei」の方がはるかに早い。
>>35 なるほど。
まぁ、僕は、自分用のゴチャゴチャしたモジュールんなかにcontentってサブルーチン作ってるからそれでいいんだけど。
いちいち日本語に切り替えるのが面倒そう?そうでもない?
確かに早いと思うけど、違う環境になると 正確に入力できなそうで困らないかな。
>>36 そうでもない。慣れかも。一時的な短いスクリプトをさっと書きたい時とか
いちいちモジュール呼ばないので。
まぁこの辺は好き好きだと思うけど。
>>39 あと、
my($sec, $min, $hou, $day, $mon, $yea, $wek) = localtime();
なんかも入れておくと便利。
#!/usr/bin/perl = いつもの
あぼーん
>>41 そんなもんファイルを新規作成した時点で自動的に書かれる。
CGI.pm をやたら use したがるヤシは基礎的なコーディングできないから楽したいだけでは?
>>45 「基礎的なコーディングできない」と「楽したい」につながりがありませんよ。
できる人ほど楽をするための努力をするものです。
>>40 my @dates = localtime();
にしる!
あぼーん
49 :
33 :03/06/28 19:40 ID:???
>>41 俺もソレは登録してない。
>>44 さすが。
>>47 コードが読みにくいからやだ(好みの問題)。なんかよく間違うし。
50 :
25 :03/06/28 19:47 ID:???
HTMLべたがきすんのやだよー。 タグの閉じ忘れとかやだよー。 ファイルアップロード含む入力の取得でガチャガチャすんのやだよー。 要するに基本的な部分であれこれ悩むのやだよー。 アルゴリズムに労力割きたいよー。 開発時間短いよー。 ……まあ、そんな感じでつ。
51 :
nobodyさん :03/06/29 00:51 ID:x7Ccxqe1
perl でpop3のメールを受信するにはどのようなコードを 書けばいいのですか? 添付付きのメールの受信システムを作りたいのですが、ネットで探しても なかなか情報が無かったためよろしくお願いします
53 :
nobodyさん :03/06/29 01:21 ID:WiALlB7N
あぼーん
55 :
nobodyさん :03/06/29 01:55 ID:15+Vm9kH
前スレでも質問しましたが、1000行ってしまったようなのでもう一度。 unicodeの文字列をURLエンコードするにはどうすればいいのでしょうか? JavaScriptのescapeのように、あいうえお->%u3042%u3044%u3046%u3048%u304A といった感じで変換したいのです。 $value =~ s/(\W)/'%' . unpack 'H2' , $1/eg; とやっただけではムリでした。 どのようすればいいのでしょうか?
>>55 $value =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg;
>>55 $value =~ s/(\W)/'%' . unpack 'H2' , $1/eg; が
何をしているか理解できていれば分かりそうなもんだが。
正規表現と pack/unpack について、もうちっと勉強すれ。
$value =~ s/(..)/'%u' . unpack 'H4' , $1/eg;
open(FILE, "hoge.txt"); while(<FILE>) { (置換とか) } open(WRITE, ">test.txt"); print WRITE <FILE>; とやったのですがtest.txtにhoge.txtを処理した内容が書き込まれません。 何処が間違っているのでしょうか…。 Win2K、Apache1.3.27、ActivePerl5.6を使用。
use ***** で、***** が使えるかどうか評価する関数ってありますか?
>>59 open(FILE, "hoge.txt");
while(<FILE>) {
(置換とか)
push @new, $_; # ここ追加
}
open(WRITE, ">test.txt");
print WRITE @new; # ここ変更
こうだろ?
>>60 専用の関数はない。
@INCの中に、use(とrequire)がモジュールを探してくるディレクトリが入ってる。
それをreaddirとかで開いて使いたいモジュールがあるかどうかさがしなされ。
>>59 hoge.txt 全てをオンメモリにしたくなければこう。
open IN, '<' . 'hoge.txt' or error();
open OUT, '>' . 'test.txt' or error();
while (<IN>) {
...
print OUT $_;
}
>>60 use Foo @arg; は
BEGIN { require Foo; Foo->import(@arg) } と等価。
BEGIN {
eval { require Foo } or error();
Foo->import(@arg);
}
65 :
nobodyさん :03/06/29 10:27 ID:WiALlB7N
>>60 について
>>62 そ、それは面倒くさすぎないか・・・?いつもそうやってんの?
eval("use MODULE");
error("Can't locale MODULE") if $@;
my $ins = new MODULE(xx,yy,zz);
これで済むじゃん。
>61,63 ありがとうございます。 今回は61さんの方法でやって上手く行きました。
レスありがd
>>62 さんの方法は「実行しないで」確認する方法として関数化して使う事にしました
そしたらさア
>>69 ナンダッテ━━━━ヽ('A`)ノ ( ;゜Å゜)n‘∀‘)η´Д`)゚∀゚)=3━━━━
厨な質問で申し訳ないですが、PerlはSMAPで言うと誰ですか?
>>65 >>68 の言うとおりです。
あらかじめこれで実行環境を確認してからスクリプト組むようにしてます。
evalは少しだけ遅いような気がするから、::を/に直してrequireして戻り値を調べるっていうのはどう?
74 :
nobodyさん :03/06/29 21:34 ID:15+Vm9kH
入力された日付をtime形式にして変換するようなライブラリかモジュールはありませんか? &function($year,$mon,$day,$hour,$sec,$min); とすると1056889951がリターンされてくるような。
timelocal
76 :
nobodyさん :03/06/29 21:36 ID:oIT5F8Qq
>>74 POSIX::mktime()
ちなみに標準ライブラリ
77 :
55 :03/06/29 21:37 ID:???
ごめんなさい。途中で送信してしまいました。
>>56-58 のみなさん
ありがとうございます。
解決しました。
UNICODEは%uに(4桁の16進数)が組み合わさるので、
Hで16進数、4で4桁ということでいいんですよね…?
って書き込んでる間に返答着きてますね。ありがとうございます。
>>75-76 のお二人
ありがとうございました。
標準ライブラリももっと勉強した方がよさそうです(汗)。
あぼーん
81 :
119 :03/06/29 22:52 ID:tnHKF+kR
POSTされるデータは$HTTP_POST_VARSにあると思いますが、 これをそのままフォームのボタンを押すことで同一のページに返したいのですが、 いちいち<input type="hidden" name="test" value="test">などとしないといけない のでしょうか。
JavaScript使えばいいんでない
誤爆のような気もする
すんません、コーディングって何ですか? ググっても分かんないッス・・
表面塗装のこと
「コーディング 用語」でぐぐれ
そりゃ、コーテ…(ry
>>84 coding
アルゴリズムや処理をコンピュータプログラムとして具現化すること。
または単にプログラムを作成すること。
おっ、さっそく新スレタイの効果が出てきてるようだね
コーディングという単語を世に広めるスレはここですか?
その単語を知らない人が来る板じゃないですよ〜♥
>>90 いや全くその通り。
ぐぐるとか、辞書引くとかできない人間未満がきちゃいかんよ。
92 :
座敷荒氏 :03/06/30 06:49 ID:???
前スレでも大変お世話になりました。 あのあと自分なりに勉強し、パラメータファイルを使用して ファイル確認することができるように下のように書き換えました。 こちらはうまく動作しています。 #! /usr/bin/perl while (<>){ ($cmd_para) = split; unless(-e $cmd_para){ exit(100); } } exit(0); そこで次にファイル削除を作成しようとおもい、 上記の箇所unlessをunlinkに書き換えたところ シンタックスエラーが発生してしまいます。 どう修正すればいいのでしょうか。 よろしくお願い致します。
>>92 なんか基本がなってないような……
unlessは制御構造。unlinkは関数。名前は似てても、使い方は全く違うものだよ。
前スレ読めないんで、どうやりたいのかもうちょっと具体的に説明して。
それから今回はいいけど、エラーはできるだけ原文をそのまま書いてね。
カタカナで書くと、読み方を間違えていたり、肝心なところ(大抵読み方が分からない単語)を省略してたりして
意味が正しく伝わらないことがあるから。
returnやgotoなどは制御構文かと思いきや関数なのね。
真か偽かを返すのが制御子、それ以外の価を返すのが関数と言っては いけないの?
96 :
座敷荒氏 :03/06/30 10:20 ID:???
>>93 92に記載したのは確認したいファイルのフルパスを記載した
パラメータファイルを用意し、そのファイル名を指定して実行すると
ファイルがある場合には0を返して終了し、ない場合には100を返して終了する、
というプログラムです。
これと同じように、削除したいファイルのフルパスを記載した
パラメータファイルを用紙し、そのファイル名を指定して実行したときに
ファイルが削除できた場合には0を返して、ない場合には100を返して終了する、
というように動作するものを作りたいと思います。
92に記載したようにunlessをunlinkに書き換えただけで実行すると
syntax error at ./test line 4, near "){"
syntax error at ./test line 5, near "}}"
Execution of ./test aborted due to compilation errors.
と表示されてしまいます。
unless( unlink($cmd_para) ){
99 :
543 :03/06/30 15:38 ID:???
>>97 お教え頂いたように修正しましたが
bash: ./Perltest: bad interpreter: Permission denied
と表示されてしまい、うまく動作しません。
使用したPerlファイル・パラメータファイル・削除対象ファイルの
パーミッションは設定済みです。
100get (・∀・)
perlで外部ファイルのサイズを取得したいのですが、 Content-Lengthが付いて無いファイルのサイズを取得する手段は無いものでしょうか。
>>101 Content-Lengthって何?Perlにそんなの無いよ。
103 :
101 :03/06/30 16:30 ID:???
どこで実装されてるかくらい意識して欲しいね。 おそらくHTTPヘッダのことを言ってるんだろうけど。
どうしたんだ、発言止まっちゃってる。
Perlやろうぜ!
実現したいこと 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 エラーの意味がわかりません、よろしくお願いします。
108 :
107 :03/07/01 13:21 ID:???
あと Perlでbeep音を鳴らそうと \aでアラーム音のエスケープシーケンスを使用しましたが 音が鳴りませんでした。 音を鳴らす方法が間違ってるでしょうか?
ふぅ…。ヤレヤレ
\aで思い出したけど、 ActivePerlで、\aで鳴る音をユーザ定義できない?
\x07
implementの方法はどうやればいいのでしょうか? 環境 ActivePerl v5.8.0.806 + Perlを始めよう! v.2.0.4.5
あんたの使ってるプラットフォームじゃ alarm はインプリメントされてない windows なんて厨房の使う os 知らんから、あとはヨロ ↓
まあ、\aを使う代わりに、何か音が鳴るようなのを systemで呼べばいいだけの話か
116 :
nobodyさん :03/07/01 16:42 ID:hz3sfxOd
Prel初心者です。
WEB上のFROMから入力された文字や数字は、さまざまなコードで入力されるため
jcode.pl 等を使いコード変換する必要性は理解できます。
しかし、自分が作成したHTMLから自分が作成したCGIをパラメータ付きで呼び出すとき
CGI側はその受け取ったデータをコード変換する必要はあるのでしょうか?
例えは、index.html 内に <a href="
http://aaa.com/test.cgi?id=123&name=abc ">
があり、これをクリックした場合、test.cgi で受け取る id=123&name=abc は
変換する必要があるか、という事です。
よろしくお願いします。
>>116 from?
from?
from?
答え:必要ある時もあるし無い時もあるのでやっておいた方がいい
>>116 FROMはFORMのことでしょうが
IEやNetscapeブラウザではurlエンコードして送りますから普通はurlデコードしますね。
英数文字だけだったら問題ないけど一応やっとけ。
119 :
nobodyさん :03/07/01 17:51 ID:9B8Cvuqq
何度も申し訳ありません。 別にパラメータファイルを用意し そのパラメータファイルにフルパスで書かれたファイルを 削除するPerlを作っているのですが、97さんに教わったとおりに 書き換えて下記のようにして実行したところ エラーが発生してしまいます。 #! /home/perl/test while (<>){ ($cmd_para) = split; unless(unlink($cmd_para)){ exit(100); } } exit(0); ↓実行したものとエラー内容 $ ./Perl名 パラメータファイル名 bash: ./Perltest: bad interpreter: Permission denied お力添えのほど、宜しくお願い致します。
>#! /home/perl/test 関係ないが、珍しいものを見た
あぼーん
124 :
nobodyさん :03/07/01 18:09 ID:F5KDEjxA
>>120 #!の行がおかしいってエラーが出てるぞ。
>>120 何でもかんでも一度に書くな。
#! /home/perl/test
print "hello, world\n";
からやり直せ
あぼーん
127 :
nobodyさん :03/07/01 18:25 ID:ycS3U73c
ヒントはstdin
>>124 あ、できました。
どうもありがとうございます。
原因は本番環境から自前の環境に持ち込んだときに
書き換えたミスです。削除対処ファイルへのパスを記入していました。
124さん、他に助言してくださったみなさん、
本当にありがとうございました。
>>125 はい、仕事で作る事になったので
順番に勉強する暇がありませんでした。
これからもう一度勉強をしますので
宜しくお願い致します。
129 :
nobodyさん :03/07/01 19:43 ID:hz3sfxOd
FORM間違いの116です^^; CGIに送るのは数字だけなのですが、 念のために変換かませておきます。 ありがとうございました。
数字は変換しても数字だから、いじらなくてもいいのでは。 0-9a-zA-Z以外のものが入るのなら、変換しとけ。
131 :
nobodyさん :03/07/01 21:02 ID:soOdqVTP
>>107 pingはネットワークに負荷かけるぞ。
普通にsocket作ってbindしてconnectして失敗したらエラーでいいだろ。
モジュール使ったら3行くらいで作れそうな気がするが。
(使わなくても10行くらい)
bindするの??
し・ば・る!!
134 :
コミュカレ :03/07/01 21:41 ID:aHlU6obt
オープンソースです
一部の限られた組織等でしか利用されていなかったグループウェアを、
一般ユーザーも利用できるインターネット上のパーソナルグループウェアへ
「コミュカレ」はフリーソフトです。
ゴミの収集日等、地域の皆様どおしでも使えます。使い方はユーザー次第!!!
いろんな活用の仕方が考えられます。
その便利さを是非お試しになってみて下さい。
http://www.ecopig.jp/comucale/index.htm
>>131 相手に嫌がらせするのが目的なんじゃない?
成功したらアラームがピッ!ってね
136 :
nobodyさん :03/07/01 23:25 ID:qNSyt42Z
「〜hoge.cgi?x=hage&y=hoge」として渡した「x」と「y」は リンク先でどのように取得したらよいのですか? よろしくおねがいします。
($x)=$ENV{QUERY_STRING}=~/x=([^=]*)/; ($y)=$ENV{QUERY_STRING}=~/y=([^=]*)/;
>>136 $ENV{'QUERY_STRING'}を&で分割してから=で分割する
>>137 $x = hage&y
$y = hoge
140 :
136 :03/07/02 00:49 ID:tWYlFrFC
>>137-139 ご回答ありがとうございました。
このようにしました。
($xdate,$ydate)=split(/&/,$ENV{QUERY_STRING});
($x)=$xdate=~/x=([^=]*)/;
($y)=$ydate=~/y=([^=]*)/;
142 :
nobodyさん :03/07/02 01:12 ID:DMMsk6IB
>>140 素直にReadParse使えや。
よっぽど簡単
143 :
nobodyさん :03/07/02 01:17 ID:DMMsk6IB
145 :
nobodyさん :03/07/02 11:29 ID:UDPPCCYr
>>130 FORM間違いの116です。
また、基本的なことで申し訳ありません。
> 0-9a-zA-Z以外のものが入るのなら、変換しとけ。
0-9a-zA-Z は変換する必要なしという事は、これらの文字を
バイナリで表現すれは、どのコード体系でも同じなのですか?
またCGIへの受け渡し文字列中に、「&」や「=」がよく使われますが
これらが含まれていれば変換する必要があるのでしょうか?
まあ、どんな場合でも変換しておけば問題ないのでしょうけど
実際のところが気になったのと、自分自身ではsjisでしか
試す事ができないので、ここでお聞きするしかありません
でした(^_^;)
あぼーん
>>147 1byte文字でも文字コードは色々種類あるぞ。
よく使われるもので、JIS X 0201 Latinとか、JIS X 0201 Latin
とか、純粋なASCIIとかEBCDICとかあるわけだが。
ISO-646を含めると相当な種類があるわけだが。
まぁ殆どの環境で、JIS X 0201系とASCII系は同じ表示になって
しまうしEBCDICのパソコンなんてほとんど持ってる人がいないから
誰もあんまり気にしてないだけだと思うが。
でも例えば、\100-なんてのは、1byte文字だけど文字コードによっては
バックスラッシュになっちゃう場合もあるわけだが。
(今書いてる文章はShift_JISなので、円記号として使って問題ない)
数日前に質問と回答をいただいたのですが、 どこのレス(スレ)かわからなくなってしまったので、要約して再質問させていただきます。 housemaster.csv から、各行を読み込んで、条件に合致するなら、 その行の文字を表示させるというありがちなものを組んでます。 で、どうしても一部分の行(レコード)のみ、全て文字化けしてしまいます。 なお、検索条件によらず、文字化けする行は、必ず決まってます。(ID1とID24の行、というように) 回答では、「条件」のなかで文字コード関係の処理をしてまちがえてるのでは? というのがありましたが、条件の中では数字の比較しかしてません。 また、別の回答では、jcodeを自動判別でなくeuc2sjisのようにしたら? というのがありましたが、これは、全てそのようにしましたが、改善されずです。 他に、どんな理由が考えられるのでしょうか・・・?
>>149 どうやって検索させてるかしらんが念のため確認。
元データ(〜csv)を読み込む際と、検索条件(キーワード?)の
両方ともjcodeは使ってるよな?
どっちか一方だけとかじゃなくて。
>>149 元質問は見てないが、スクリプトやCSVの文字コードが異なっていて
適切に変換されていないとかは?
あるいはCSVデータの中身に問題があるとか。
SJISでそのまま扱うと文字化け起こす文字とかは対策してる?
152 :
149 :03/07/02 16:38 ID:???
>>150 ありがとうございます。
●元データ(〜csv)を読み込む際・・・&jcode::sjis2euc(\$value); してます。
●検索条件(キーワード?)の・・・検索条件といっても、文字でひっかけてるわけでなく、
idや数値の大小(値段ですが)で検索してるだけなので、
jcodeは1回も使ってませんが、ここんとこは問題ないですよねえ・・・・・
153 :
149 :03/07/02 16:40 ID:???
>>151 ありがとうございます。
肝心なこと言い忘れてました。
CSVはすべてSJIS(CSVから読み出すときは&jcode::sjis2euc(\$value);)
スクリプトのコードは全てEUC、
HTMLに出力時は全てSJIS&jcode::euc2sjis(\$value);に変換してます。
154 :
149 :03/07/02 16:43 ID:???
検索条件によらず、CSVファイルの、必ず同じ行(レコード)が文字化けしていることから、 CSVデータが壊れている?のではと思ったのですが、 秀丸で開いてみたところ、問題はなさそうでした。 あるいは、秀丸で見ても見ることのできない特殊なコード?が紛れ込んでいると いうことはあるのでしょうか? もしそうだとしたら、そういった特殊なコードはどうやれば見ることができるのでしょうか
>>152 んじゃとりあえず、CVSを読み込んで、ただ出力するスクリプト書いて、
出力結果を確認してくだちい。
そこで問題がなければ、読み込みには成功してると。
で、あとは順次スクリプト内に、ちょこちょこprintを入れて、
どこで文字化けをしたかチェック。
文字化けした近辺を洗うとよろし。
もしCVSでこけてたら、CVSの文字コードとか、そこら辺をあさるよろし。
あとよくわからんが、半角カナとか使ってると危なそう。
注意されたし。
>>153 SJIS→EUC→SJISじゃ、SJISでの文字化けの問題がそのまま
現れるでしょ。
>>154 バイナリエディタ
> HTMLに出力時は全てSJIS&jcode::euc2sjis(\$value);に変換してます。
eucでなぜ吐かない?
158 :
155 :03/07/02 16:46 ID:???
追記 >んじゃとりあえず、CVSを読み込んで、ただ出力するスクリプト書いて、 >出力結果を確認してくだちい。 当然、今動かしてるスクリプトと同じ方法で処理して出力してね。 (jcodeとか使ってるなら、全く同じような処理で)
159 :
149 :03/07/02 17:33 ID:???
>>155 以下のスクリプトで、正常にSJISではきだされました・・・
ちょこちょこprintを入れて、ためしてみたいとおもいます・・・
open(IN, "< ./housemaster.csv") or die("cannot open:$!"); # 読みのみモードで開く
while ($line = <IN>){
#Perlメモ様様
$line .= <IN> while ($line =~ tr/"// % 2 and !eof(IN));
$line =~ s/(?:\x0D\x0A|[\x0D\x0A])?$/,/;
@values = map {/^"(.*)"$/s ? scalar($_ = $1, s/""/"/g, $_) : $_}
($line =~ /("[^"]*(?:""[^"]*)*"|[^,]*),/g);
#必要なものだけをEUCにして、出力時にSJISにする
foreach $value (@values){
&jcode::sjis2euc(\$value);
}
#必要なものだけをEUCにして、出力時にSJISにする
foreach $value (@values){
&jcode::euc2sjis(\$value);
}
#Perlメモ様様
$line = join ',', map {(s/"/""/g or /[\r\n,]/) ? qq("$_") : $_} @values;
print qq|$line a\n|;
}
close IN;
160 :
149 :03/07/02 17:35 ID:???
>>156 「スクリプト内はすべてEUCで通して、入出力のみSJISに変換」
というポリシーだと大丈夫だと聞いたことがあるのですが、
違います?
161 :
149 :03/07/02 17:36 ID:???
>>157 あ、バイナリエディタ・・・使ったことないけど試してみます。
>eucでなぜ吐かない?
個人的にはそうしたいんですけどね・・・
サイト内の静的ページがみなSJISなので、CGIのページだけEUCというのも、
なんか変かなと。。。
>>161 ブラウザはそんなサイト内で統一された文字集合(?)は気にしないぞ。
変だと思うのは人間だけ。
163 :
149 :03/07/02 18:15 ID:???
print とか「=cut」しまくってたら、おかしい場所がわかりますた・・・ for ($i=0;$i<=$#houselist;$i++){ foreach $key (keys %{$houselist[$i]}){ &jcode::euc2sjis(\$houselist[$i]->{$key}); } } としなくちゃいけないのを、 for ($i<=0;$i<=$#houselist;$i++){ のように、「$i<=0」 となってました。。。 変なfor文ならエラーにしてくれればいいのに・・・ ともかく、お騒がせしてすみませんでした。
164 :
161 :03/07/02 18:16 ID:???
>>162 いや、昔のブラウザは、同じサイト内でSJISからEUCのページにとんだら、
化けてたんですよ。。。そのトラウマかもw
165 :
155 :03/07/02 18:18 ID:???
まあ、良くある事ですな。 (俺もついさっきまで、連想配列のnameを間違っていて「動かねえ!」と 騒いでいたのは内緒) こまめなチェックを心がけませう。 (人の事いえないけどネー) ガンガレー
166 :
149 :03/07/02 19:20 ID:???
>>165 いやいやほんとすんませんです。
なにげに、Perlを仕事としてやりはじめてまだ3ヶ月なもので、学ぶこと多いです。
(つーか、この部署プログラマ他にいないもんで、2chで質問してしまいましたw)
おたがいがんがりましょう
解決おめ。
ところで「CVS」ではないと思うぞ
>>155
漏れも CVS と CSV は良く混乱する
間違って打ってるときはあるな。
170 :
155 :03/07/02 21:39 ID:???
>>164 吐き出したHTMLで、キチンと文字コードの指定をすれ。
ブラウザの自動判別なんぞいう間抜けにまかせるからそうなる。
漏れも キチン と チキン は良く混乱する
CVSが Concurrent Version System の略だと最近知ったオレ。
漏れもコンマとマン*はよく混乱する
>>174 どっかのサポセンに説明するとき使ってみようかな
CVS = ConVenience Store = コンビニエンス・ストア
超ブサの略だろ普通。
若い人は頭がやわらかいねえ 是非とも業務で活かしてくれ給え
ある/ない、使える/糞 で答えてくれ。 (a: awk; p: perl; r: ruby; j: javascript) a2p ある 糞 perlcc ある 糞 p2r r2p j2p p2j とくに、javascriptをperlCGIに変換したいと思っています。
180 :
nobodyさん :03/07/03 09:38 ID:R4mGR+/m
perlが全くわかりません。 perlに挑戦しようと思っているのですが、 入門サイト等が見つかりません。 どこかおすすめないでしょうか
>>180 マジレスすると、とほほで良いんじゃないかと
179 ありえない アホ
perlの言語仕様が、a2pが通るようにできてるからな 動作すれば良し
184 :
nobodyさん :03/07/03 12:43 ID:LERgN2mA
>>182 アフォには、「ありえない」だろな(ry
じゃ、自分で書くからいいよ。
もういくつか書いてるけど、その場しのぎの物になってる。
ある程度汎用性持たせてて書いてやろう。
JavaScriptのコードををPerlのコードに変換することは不可能と言っているんだと思うけど・・・・
>>184 =他人に聞くだけ聞いといて、自分からは何も情報を出さないクレクレ厨
危うく
>>179 にマジレスするところだったよ。
WebProgスレの方にも居たよな、いかにも初心者っぽい中途半端な質問して 指摘・批判されたら逆切れってパターンの奴。 多分釣りしてスレが荒れるのを楽しんでるだけだと思うので、スルーでお願いします。
JavaScriptで書いたものをPerlに変換し、しかもCGIとして使いたい理由が分からない(^_^;)
> もういくつか書いてるけど、その場しのぎの物になってる。 これは嘘。
漏れもn88-basicをperlに変換するのはいくつか書いた
漏れもマシン語をperlに変換するのはいくつか書いた
俺もHTMLをPerlに変換するのはいくつか書いた。
>>191-
>>193 君らち、そんなの意味ないよ。
漏れはサ、javascriptでな、自学自習の問題を出してるわけさ。
その中からな、多少変形しながら、CGIの問題を作ってるわけさ。
jsじゃな、外部ファイルにして読めないdirに置いた上にな、pragmaで
no-cache指定してもな、どうしてもcacheで見えちゃうんだな答えが。
Perl CGIでな、外との接続を絶ったコンピュータ室で試験させよう
としているわけさ。
perl2rubyはな、Perlユーザのためのruby入門って本、読んでな、
簡単な部分はP2Rに翻訳できそうだと思ったからだな。
君らちとは、レベルが違うわな。
漏れもバッチファイルとシェルスクリプトをperlに変換するのはいくつか書いた
漏れもゴッホのひまわりをperlに変換するのはいくつか書いた
>>194 確かに、ネタにそこまでマジレスできる君と俺とでは
かなりレベルが違うようだ。
>>194 それってASPとかじゃなくてクライアントサイドってことだよな?
だとするとアクセスできないディレクトリに置いたら動かないだろw
で、クライアントサイドとサーバサイドじゃ処理が違うのに変換???w
俺もダンディ坂野のギャグをPerlに変換するのはいくつか書いた。
俺もパチンコ玉を真珠に変換するのはいくつか書いた
漏れもマスならカイた
プロフェッショナルってすごいなぁ。 僕もがんばります!!
漏れも金と銀をパールに変換してプレゼントした
俺もPerlをドラクエ風に変換するのはいくつか書いた。
漏れも、とても綺麗な真珠だね、もっと綺麗な牧シンジュ! だけどお前の頭の中は、シンジュじゃ無くてPerlだよ、なら書いた
208 :
nobodyさん :03/07/03 15:08 ID:Ctng5Cwy
>>195 perl -pe 'chop; $_="print `\Q$_\E`;\n"'
209 :
107 :03/07/03 15:39 ID:???
作ってみました。 #!/perl/bin/perl use Net::Ping; #適当なネットワークIP $host = "210.***.***.***"; #IPを数えるカウント $count = 0; ($sec, $min, $hou, $day, $mon, $yea, $wek) = localtime(); $yea=$yea+1900; $mon=$mon+1; while (1) { if (pingecho($host, 5)) { $count=0; print "$yea/$mon/$day $hou:$min:$sec Count:$count IP:$host is alive.\n"; }else{ $count++; print "$yea/$mon/$day $hou:$min:$sec Count:$count IP:$host is no return.\n"; } if ($count > 3) { print "$yea/$mon/$day $hou:$min:$sec Count:$count IP:$host is dead.\n"; last; } sleep(5); } while (1) { print "モデムが停止しましたー\a\n"; sleep(1); }
210 :
209 :03/07/03 16:00 ID:???
ログの時間が動いていないことが今判明したTT
211 :
nobodyさん :03/07/03 16:05 ID:Ctng5Cwy
>>209 その「適当なネットワークIP」って、他人のリソースじゃないだろうな?
Pingは負荷が大きいから、回線の生死にPingを打つのは問題ありだと
思うんだけど。LAN中ならいいけど、外に出すのはマナー上良くないと
思われる。
もし俺がネットワーク管理者で、どっかのクライアントからPingが垂れ流されて
きたら、いたずらか攻撃だと判断してフィルターかけるよ。
あぼーん
>>211 Net::Pingは、デフォルトでTCPのECHOにConnectするようになってるよ。
ICMP(いわゆるPing)は指定しないと使わない。
まあどのみち他人のホストを回線チェックに使うのは感心しないけど。
214 :
nobodyさん :03/07/03 17:13 ID:83sptUFL
$value =~ tr/0-9/0-9/; print $value; HTMLの見栄え表示用に半角数字を全角数字に置き換えを行っていますが 文字化けします。元は一桁か二桁の半角数字です。 座、とか抗とか、、、 $value =~ tr/0-9/a-j/; だと上手くいきます。 コードはEUC-JPで書いてます。 日本語処理の問題だと思うのですがいろいろ調べてみてもわかりませんでした。 ちなみに日本語関係はJcode.pm使えます。 どなたか教えて下さい
>>214 jperlでない限り、tr///は2バイト文字をサポートしていません。
したがって、
>>214 のtr文は、
・0の1バイト目
・0の2バイト目〜9の1バイト目
・9の2バイト目
が指定されたように受け取ります。Jcode.pmを使っているのなら、
jcode($value)->tr('0-9', '0-9');
を試してみてください。
>>215 >jperlでない限り、tr///は2バイト文字をサポートしていません。
これちょっと嘘だったかも。
>>214 $value =~ s/0/0/g;
$value =~ s/1/1/g;
$value =~ s/2/2/g;
$value =~ s/3/3/g;
$value =~ s/4/4/g;
$value =~ s/5/5/g;
$value =~ s/6/6/g;
$value =~ s/7/7/g;
$value =~ s/8/8/g;
$value =~ s/9/9/g;
(w
218 :
214 :03/07/03 17:41 ID:???
>>215 早速ありがとうございました。
御指摘の方法で上手くいきました。
>>214 $value =~ s/([0-9])/('0','1','2','3','4','5','6','7','8','9')[$1]/eg;
つぅのはどうでしょう?
220 :
215 :03/07/03 17:50 ID:???
>>217 >>219 それだったら
$value =~ s/([0-9])/pack("c2", 0xa3, 0xb0+$1)/eg;
の方が良くないか?
>>214 はテンプレ見てねーな
漏れもヘタレだけど、リンク先たどれば解決策はザクザク出るのに
>>220 文字コードに依存するやりかたは良くないと思う。
223 :
nobodyさん :03/07/03 20:28 ID:Ctng5Cwy
>>222 その直前で$valueをEUCに変換してるという前提だから別に構わないでしょ。
>>217 や219だってISO-2022-JPでやれば一発でエラー(or文字化け)がでるわけで。
アルファベットを一旦全部大文字にしてから処理、とかの 常套手段と同様に、 EUCに揃えてから好きに加工、というのは 普通にアリだな
ところで「日」と「曰」の区別できるようになったの?>えうC
大と丈の区別は付くようになりました。
>>223 あー、変換してからか。スマソ。
それでも個人的にはわかりやすいほうが良いな。
228 :
nobodyさん :03/07/03 23:25 ID:z1S7djbc
217でいいんだよ
あぼーん
ブラクラ注意
./tmp ディレクトリにあるファイルを全て削除するにはどうすればいいのでしょうか?
このスレも盛り上がらなくなったな・・・。おまえら書けよ。
>>233 ネタだと思いたいが、仕事で他人のコードを見る機会が多いと、
>>217 が可愛く見えるくらいの想像を絶するコードに度々遭遇する。
文字コード直接書くような糞コードよりはましだろ。。。
なんかお題になるようなものないかな
238 :
231 :03/07/04 13:34 ID:???
>>232 unlink <./tmp/*>; やっても消えません。エラーメッセージもでません。
どうすればいいのでしょう?
意識が朦朧としてるとな、 エレガントな方法よりも確実に間違わない方法を 取ったりするんだ どうせ後で直すけどな
241 :
231 :03/07/04 14:02 ID:???
>>240 はい、もちろん。
lsすると
tmp.cgi
tmp
って感じになります。(実際はシェルを開放してませんが)
うち、lsとかのコマンドをcgiから実行できないようなんですが、
それって関係あります?
>>236 Cだと普通に使われる手法だと思うけどな>直接文字コード
まぁ↓のようにしたって構わない訳だが。
my(@zero) = unpack("C2", "0");
$value =~ s/([0-9])/pack("C2", $zero[0], $zero[1]+$1)/eg;
>>241 パーミッションの問題じゃないのか?ファイルの所有者と
CGIスクリプトの実行者が違うとか。
>>242 Cじゃなおさらそんなことしないよ・・・・
unlink <./tmp/*> or die $!; で見てみれば?
245 :
231 :03/07/04 19:16 ID:???
>>244 unlink <./tmp/*> or die $!;
したら、500 Internal Server Error になってしまいましいた。
アパッチのエラーログは、
glob failed (child exited with status 127) at tmp.cgi line 2.
Died at tmp.cgi line 2.
[Fri Jul 4 19:14:46 2003] [error] [client xxx.xxx.xxx.xxx] Premature end of script headers: /ここ略してます/tmp.cgi
とでました。
tmp.cgiの中身は、
------------------------------------------------------------
#!/usr/local/bin/perl
unlink <./tmp/*> or die $!;
print "Content-type: text/html\n\n";
print "これはテスト";
------------------------------------------------------------
です
ヘッダ出す前に死んでどうすんだよ。 #!/usr/local/bin/perl print "Content-type: text/plain\n\n"; unlink <./tmp/*> or die $!; print "これはテスト";
>>245 >>246 で言われた事を修正して実行してみてそれでも解らなければ、
eval して $@ をチェッくらいとすればいい
>>246 >>248 エラーメッセージの内容くらい見ようよ。
>>245 > glob failed (child exited with status 127) at tmp.cgi line 2.
globに失敗してる。cshが使えない環境か、cshがglobに使う
一時領域にアクセスできないのが原因だと思う。
素直にglobは諦めて
opendir(DIR, "./tmp");
unlink (grep !/^./, readdir DIR);
とかした方が良いかも知れない。
MLDBMを使おうとしています。 $database{"$id"} = %params; で格納し、 foreach my $id ( keys %database ) { print qq($id <BR>); foreach my $key (keys %{ $database{$id} }){ print qq($key <BR>); print qq($database{$id}{$key} <BR>); } } で中身を確認しようとしていますが1個目の$idで表示が止まります。 $idは四つあり、%paramsのkeyは15個ほどあります。 foreach my $id ( keys %database ) { print qq($id <BR>); } と、$idのみを全て見ようとすると三つとも表示されます。 入門 perl DBI を見て、 print Data::Dumper->Dump( [ \%database ] ); しましたが、 $VAR1 = { '2003415' => '1234 2003 game_year', '20031010' => '24/64', '20030606' => '18/32', '20030505' => '18/32' }; こんな表示です。。。。 2003415 20031010 20030606 20030505 は%databaseのkeyで、 あとは%paramsのkeyやらvalueやらの一部ですが全部じゃありません。 MLDBM初めて使うので、とりあえず格納して、それを表示させて 確かめる為のテストをしているのですが、 %{ $database{$$id} }のkeyとvalueを表示させるにはどうしたらいいのでしょうか。
251 :
250 :03/07/05 00:37 ID:???
>>250 > 三つとも表示されます。
は四つとも表示されます、の間違いです。
>>250 $database{$id} = \%params;
こうだろ?
リファレンスの基礎からやりなおしてこいよ。
基礎ができない(or 解らない)から、ここにカキコするんじゃねーの? その為の初心者スレだと思うが…。流石に釣りやネタには俺はレスしないけどな
基礎的なことにつまずくのはしょうがないよ。 そうやって一歩ずつ覚えていけばいいんだから。ただ、 エラーメッセージは読め。 英文だろうがなんだろうががんばって読め。
コーディング上の質問は
>>252 で解決したわけだ。
質問の本質が「リファレンスを理解してない」という事にあるので、それを指摘するのが何故悪い?
257 :
nobodyさん :03/07/05 17:21 ID:jB+j5VLT
print <<ENDDOC; ・・・ ENDDOC でENDDOCが見つからないと怒られるんですが 何か他にやらなければいけないことがあるんでしょうか?
>>257 ENDDOCのあとに空白がある。
print <<ENDDOC;
・・・
ENDDOC ←ここ
それはコピペの特性では
260 :
257 :03/07/05 17:58 ID:???
ソースでは入ってないです。 コピペしたわけでもないのですが・・謎 というかどの行も全部そういう風になってますね(^^;
261 :
257 :03/07/05 18:09 ID:???
わかりました! 先頭にタブ入れちゃいけないんですね。 後ろに付いちゃいけないという事は 前にも付いちゃいけないのかと思ってやってみたら。 参考書の print <<" AAA" の先頭の空白の意味がわかった・・・ どうもでした>258さん
質問です。 eval{ flock(FILE,2); }; if($@){ &MkDIR ; } これは期待通りに動きますか?
263 :
262 :03/07/06 03:01 ID:t//EFERU
age 忘れでした。
>>262 どういう結果を期待してるのか分からんが、
とりあえずエラーは起きないだろう。
265 :
250 :03/07/06 09:49 ID:1R/hd8rn
>>252 アドバイスありがとうござました。
リファレンス、どうも今一理解していないようです。
何しろプログラム自体ちゃんと勉強したものじゃないもので、
どうしても書くものがフラットになりがちなのですが、ちょっと複雑なものを
strictに書こうとすると避けて通れないですよね。
本はもっぱらオライリーのものを、初めての〜とかプログラミングperlとか
CGIプログラミング、あと関係ないですけどjava scriptとか読んでますが、
なかなか奥が深いですよね。
僕としては大物で(僕にとってはですが)一から作った二つ目ですが、
アドバイスのおかげで何とかものになりそうで、ほっとしました。
クックブック欲しいなあと思ってますが、実用perl〜、は僕には難しすぎるでしょうか。
>>265 その前にEffective Perl読んでおいたほうがいいと思うよ。
自信をもってプログラムを書けるようになる。安いし。
267 :
nobodyさん :03/07/06 19:04 ID:AvDpfWTI
文字列を入力してweb上のテキストファイルにアクセスして検索し、 何行目にあるかを表示したいのですがうまくいきません $name = $in{'name'}; &jcode'convert(*name,"sjis"); if(!open(OUT,"$file")){&error(err_file);} flock(OUT,2); @DATA = <OUT>; flock(OUT,8); close(OUT); $count = @DATA; $i = 0; $found = -1; while($i<$count){ ($chk[$i]) = split(/\,/,$DATA[$i]); if($chk[$i] eq $name){ $found = $i; } $i ++; } こうしたのですが該当するものを入力してテストしてみたのですが 全部 -1 になってしまうのですがどうしたらいいのでしょうか? テキストファイルはこういう感じです。読み込みは出来ています。 データ1 データ2 データ3 ・ ・ ・
>>267 ($chk[$i]) = split(/\,/,$DATA[$i]);
何がしたいんだ、ここんところ。
この行について自分の言葉で自分の意図するところを明確に書きなさい。
そしたら多分、解決できるから。
flockするタイミングおかしくない?
270 :
267 :03/07/06 19:11 ID:AvDpfWTI
すみません覚えたてなので変な書き方してるかもしれません。。 $chkに$i行目のデータを$nameと比較するために読み込んで格納している つもりなのですが・・
$chk[$i]をprintして、何が入っているか確認すれば原因わかりそう
272 :
267 :03/07/06 19:21 ID:AvDpfWTI
>>271 whileのあとにprintしてみたら表示できるのですが
whileの中でprintしたらエラーになってしまいました・・
273 :
267 :03/07/06 19:25 ID:AvDpfWTI
printはなんとかできました。 テキストファイルの中身が全部読み込まれて表示はされました。 でも検索結果だけが出ません・・-1のままです。
274 :
267 :03/07/06 19:45 ID:AvDpfWTI
$count = @DATA; $i = 0; $found = -1; while($i<$count){ ($chk[$i]) = ($DATA[$i]); print $chk[$i]; if($chk[$i] eq $name){ $found = $i; } $i ++; } 今こんな感じですが $found の値が -1 です・・
while (<OUT>){ chop; $_ eq $name and $found,last; }
276 :
275 :03/07/06 19:51 ID:???
$_ eq $name and $found=$.,last; まちがった
>>267 なんか、メチャクチャだな…。
ひょっとして @chk に見つかった行を格納したいのか?
ち ゃ ん と 期 待 し た い 結 果 を 明 記 し て く だ さ い
で、俺ならこうする
# @chk にヒットした行番号を格納
# 検索対象は $name
# $[ を 0 と仮定する
$i = $j = 0;
foreach ( @DATA ) {
if ( $_ eq $name ) {
$chk[ $i++ ] == $j;
}
++$j;
}
278 :
267 :03/07/06 19:55 ID:AvDpfWTI
>>275 ありがとうございます。それでやってみたのですがやはり -1 のままでした。。
まさか…。
/$name/
↑これで OK ってオチじゃねーだろーなぁ?
$_ eq $name は「完全に一致」ってこと解ってる?
>>267
>テキストファイルの中身が全部読み込まれて表示はされました。 で、$nameが含まれてるものを知りたいんだろう? $chk[$i] eq $name じゃなくて、マッチ演算子使うとか・・・ $KEKKA = $DATA[$i] =~ m/$name/;
282 :
267 :03/07/06 20:08 ID:AvDpfWTI
すみません。含むものじゃなく完全一致です。 $chkに一旦格納したものを$nameと比較して一致なら$foundに行数を格納というつもりでした。 277さんの方法でやってみてもだめでした・・ どこかおかしくて微妙に完全一致してないのかとも考えたのですがそうでもないような 気もしたりします。 ちょっと今から出かけますすみません・・・
テキストファイルの文字コードはどうなってる? あと、$found はマッチした行数のことか? # [廃止] @chk にヒットした行番号を格納 # 検索対象は $name で完全一致 # $found にはマッチした行数が入る。0ならマッチなし # $[ を 0 と仮定する &jcode'convert( *DATA, 'sjis' ); $found = 0; foreach ( @DATA ) { chop ; # 行末の \n を削除 ++$found if ( $_ eq $name ) ; }
あぼーん
print $chk[$i]; if($chk[$i] eq $name){ を print "!$chk[$i]!=!$name!"; ←文字列の両端に何か文字入れてprint if($chk[$i] eq $name){ にしてやってみろ。多分分かる。
失敬。 print "!$chk[$i]!=!$name!"; ←文字列の両端に何か文字入れてprint を print "!$chk[$i]!=!$name!\n"; ←文字列の両端に何か文字入れてprint に変えてくれ。
一旦格納するなら何も配列でやるこたぁないんじゃないのか・・・ とにかく$chk[$i]があやしいことだけは確か
諦めて最初から組みなおせ。
289 :
267 :03/07/07 01:07 ID:kYkAMaKH
今帰ってきました。今からやってみます。
290 :
267 :03/07/07 01:29 ID:kYkAMaKH
すみません解決しました・・ よく見たら改行が入っていました。おれの変なソースをわざわざ見ていただき みなさんありがとうございました。 こういう風にしました $count = @DATA; $i = 0; $found = -1; while($i<$count){ ($chk[$i]) = ($DATA[$i]); $chk[$i] =~ s/\n//g; if($chk[$i] eq $name){ $found = $i + 1; } $i ++; } かなり下手なやり方なんだろうと思いますが許してくださいごめんなさい・・
291 :
267 :03/07/07 01:29 ID:???
sageます・・すみません・・
みなのアドバイスが無駄になったということで。 ↓次に質問
「ファイルを読んでsplit」ではよくあるトラブルではあるな>改行
>>267 大体、$chk って何のためのデータよ?
データをやたらコピーとかするからおかしくなったり混乱したりするんだよ。
変更しないデータならコピーして使うなよ
chomp使わないのか。perl4?
297 :
267 :03/07/07 02:51 ID:???
しにまっす(^^o)=3!
298 :
wakaba :03/07/07 08:49 ID:rYaKDTZH
GIFファイルに日本語文字列を描画したいです。 環境 FreeBSD perl version 5.005_03 ImageMagick、GD、インストール済 ImageMagick、GDとも、基本的なコマンドが使えるのは確認済 自分的にやってみた方法 1)レンタルサーバ管理会社に 日本語TrueTypeFontのインストールを依頼。 -> ports で ja-truetypefont をインストール完了。 2)サーバを検索し、インストールされた日本語ttf は /usr/X11R6/lib/X11/fonts/TrueType/wadalab-gothic.ttf /usr/X11R6/lib/X11/fonts/TrueType/watanabe-mincho.ttf であろうと見当を付る。
299 :
wakaba :03/07/07 08:50 ID:rYaKDTZH
つづき 3)下記のようなスクリプトを作成、実行。 $imagemagick = Image::Magick->new; $infile = "/hogehoge/infile.gif"; $outfile = "/hogehoge/outfile.gif"; $imagemagick->Read($infile); $text = Jcode::convert('日本語を描画する試験','sjis'); $imagemagick->Annotate(font=>'/usr/X11R6/lib/X11/fonts/TrueType/watanabe-mincho.ttf', pointsize=>18, fill=>'green', text=>$text, x=>20, y=>100 ); $image->Write($outfile); 4)結果 エラーは出ませんが、日本語が文字化けして描画されています。 別にImageMagickやGDを使わなくても良いです。 何か良い解決策をご存知の方はいらっしゃいますでしょうか?
シフトJISでやってるからじゃねーの? それよりも、ImageMagick は日本語対応してるの? 300 GET ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
>>299 Jcodeの使い方おかしいんじゃない?
レガシースタイルでconvert使うならjcode.plと同じだよね。
スカラで受けた場合は変換した結果ではなく、変換した文字コードが
戻り値だし、第一引数がそれだと何も返ってこない。
$text = '日本語を描画する試験';
$text = jcode::convert(\$text, 'sjis');
print $text;
出力 sjis
$text = jcode::sjis( '日本語を描画する試験');
print $text;
出力 日本語を描画する試験
手元にJcode.pm入ってるのなくてjcode.plでやったんだけど。
302 :
wakaba :03/07/07 10:25 ID:rYaKDTZH
ご回答どうもありがとうございます。 >300 さんへ ImageMagick の日本語対応の件は不明です。 レンタルサーバに問い合わせました。 >301 さんへ $text = Jcode::convert('日本語を描画する試験','sjis'); は確かにレガシー記法ですが、当サーバでテキスト処理は出来ています。 しかし、念のためOOPで $text = Jcode->new('日本語を描画する試験')->sjis; のように文法を変え、 300さんの指摘通りjis、euc、utf8と確認しましたが 全て文字化けしました。
Jcode.pmとjcode.plが同じだと思ってる香具師が紛れ込んでるな Jcode.pmはconvert($text, $encoding)のような書き方にも対応してるが
GD よく知らんけど、FreeBSD なら Ports に japanese/gd があるよ。
>>303 違うのはわかるけど、マニュアルに
Jcode::convert($str, [$ocode, $icode, $opt]);
jcode.pl Users: This function is 100% upper-conpatible with jcode::convert() !
こう書いてあったからjcode.plでやってみただけ
>>299 昔、knj2gifというCのソースを配ってる方がいらっしゃいましたが、
もう配布をやめちゃってるようです。10年くらい前の話ですが・・・。
少なくともImageMagickで日本語化に成功してる人はいるので、
何かしら設定ミスがあると思うのですが。
>>305 「Upper-Compatible」ってのは、
「jcode.plのスタイルで書いてもエラーを起こさない」
だけで、
「jcode.plのスタイルでエラーならJcode.pmのスタイルでもエラー」
って意味じゃない。
どうでもいいけど、こがいさん「compatible」の綴り間違えてるね>ドキュメント
$houselist[0] = { "bukken" => "EUCの文字", "basyo" => "EUCの文字", "comment" => "EUCの文字", }; $houselist[1] = { "bukken" => "EUCの文字", "basyo" => "EUCの文字", "comment" => "EUCの文字", }; $houselist[2] = { "bukken" => "EUCの文字", "basyo" => "EUCの文字", "comment" => "EUCの文字", }; っていうリファレンスの、「EUCの文字」という部分を、 jcode.plを使って全部sjisにしたいのですが、 どのようにすればいいのでしょうか? for ($i=0;$i<=$#houselist;$i++){ #この部分が不明です・・・・ }
>>307 jcode'convert( *houselist, 'sjis' );
※基礎学習に時間をかけましょう
>>308 & 抜けてた。
&jcode'convert( *houselist, 'sjis' );
310 :
307 :03/07/07 15:15 ID:???
>>308-309 とすると、hosuelistの中身がまったくなくなってしまうのですが・・・
(&jcode::convert(*houselist, 'sjis' ); の1行をコメントアウトすると、
文字化けした状態で表示されます)
(ちなみに、HTML:Template のLOOP使って表示させてます)
最近勉強を始めた者なんですが疑問が出てきたので教えて下さい。 例えば(.*)は$1で取り出せる?訳ですが、 これを一度に複数扱う場合はどうすれば良いのでしょうか? (.*)(.*)とあった場合は$1,$2って具合で良いのですか? 判り難いかもしれませんがお教え下さい。
312 :
wakaba :03/07/07 15:35 ID:rYaKDTZH
298の件で、みなさんご回答どうもありがとうございます。 >304 さんへ レンタルサーバ管理会社に Ports の japanese/gd で GDが日本語化するか確認してみます。 ただ、GIFを使用したいので、 現在GDはあえてversionの古いものを使用しています。 (最新版のGDはGIFが使用出来ない、とのことでしたので。) よってGDは今回の目的で使用出来ない可能性が高いです。 >306 さんへ Cは当方よく解らないので、当座の解決として難かしいものがあります。 ImageMagickで日本語化に成功している人がいる、とのことですので、 レンタルサーバ管理会社にImageMagickの設定を再度チェックさせる方針で 臨んでみます。 みなさんどうもありがとうございました。 また解決しましたら、顛末を記入させて頂きます。
314 :
wakaba :03/07/07 15:58 ID:rYaKDTZH
>>307 さんへ
盲人が盲人の手を引くようで気がひけますが。。。
foreach(@houselist){
jcode::convert(\$_->{bukken} , 'sjis' );
jcode::convert(\$_->{basho} , 'sjis' );
jcode::convert(\$_->{comment}, 'sjis' );
}
これで変換されませんか?
>>307 ほい。
jcode::convert(\$houselist[$i]->{$_}, 'sjis') foreach (keys %{$houselist[$i]});
自分なら、ハッシュに展開する前か、表示する直前(フォーマットを整えてから)に
変換するけどね。
316 :
307 :03/07/07 16:34 ID:???
金額でよくやるように、 12345678 を、12,345,678 に変換するにはどうすればいいのでしょうか?
>314 コシキタソですか? まぁいいですが、、る
320 :
317 :03/07/07 17:37 ID:???
perlメモに丸投げしたくなるほど面倒ではある
GDってUniCodeのみじゃなかったっけ?
323 :
nobodyさん :03/07/07 23:41 ID:C7AyQ56A
sort関数に関して、質問させていただきます。 sort {$form{$a} <=> $form{$b}} keys %form このように定義したのですが、これでは未定義の値が数値より上に きてしまいます。 sort {($form{$a} <=> $form{$b}) <=> ""} keys %form こんな感じでやったりいろいろ試したのですが、どうしても数字が 上にきてくれません。 ご存知方がいらっしゃいましたら、教えてください。 宜しくお願いいたします。
あぼーん
>>323 未定義値は数値に変換すると0になるからだよ。
後ろに行って欲しいならありえないくらい大きな値にすればいい。
my $infinity = 10000 ** 10000;
# 方法その1
@result = sort {
(defined($form{$a}) ? $form{$a} : $infinity)
<=> (defined($form{$b}) ? $form{$b} : $infinity) } keys %form;
# 方法その2 "シュワルツ変換"イディオムを使う。
# データが多い場合はこっちの方が速い。
@result = map{ $_->[0] }
sort{ $a->[1] <=> $b->[1] }
map{ [ $_, defined($form{$_}) ? $form{$_} : $infinity ] } keys %form;
@result = sort { not defined $form{a} <=> not defined $form{b} } sort { $form{$a} <=> $form{$b} } keys %form;
>>323 sort {$form{$b} <=> $form{$a}} keys %form
にしる。
>>325-326 うーん、どうもうまくいきません。
同じように数字が下にきてしまいます。
もう少し調べてみます。
>>327 ご返答有難うございます。
参考にさせていただきます。
329 :
nobodyさん :03/07/08 00:42 ID:d6QOcge5
スタイルシートの <input type="submit" value="送信"style="background:#ffffff" onmouseover="this.style.background='#000000'" onmouseout="this.style.background='#ffffff'"> を、.cgi内の <input type=submit value=\"送信\"> に組み込みたいのですが どこをどう変えればいいのでしょうか? 教えてください。
>>329 Perlのコーディングとは全くもって関係ないので、
どっか失せてください。主にWeb製作板あたりに。
331 :
329 :03/07/08 00:53 ID:???
失礼しました。 逝ってきます。
>>328 ごめんな。動作確認してなかった。
@result =
sort { !defined $form{$a} <=> !defined $form{$b} }
sort { $form{$a} <=> $form{$b} }
keys %form;
優先度がnotよりも<=>の方が高いし…
あ、ソート後の順番は、元の順番が尊重されるという保証は無いか…思考中
>>323 ´−`).oO(素直に最初に分けたらあかんの…?)
my(@defined_key, @undef_key);
defined $_ ? push @defined_key, $_ : push @undef_key, $_ for keys %form;
my @result = (sort { $form{$a} <=> $form{$b} } @defined_key), @undef_key;
335 :
250 :03/07/08 02:26 ID:gC7FPuyS
>>266 Effective Perl
名前は聞いたことはありましたが、改めてネットでいろいろと
レビュー見てみました。
なんか、とってもそそられる本のようで、仰るとおり
値段もそんなに高くないし、何しろあまり厚そうじゃないのが
よさそうです。
何しろperl DBIと、あとプログラミングperl第三版のどっちかの
二冊抱えて電車乗ってるんです、最近。。。。
重いんですが、つい抱えて出かけてしまうのです。
紹介、ありがとうございました。
>>332 ,334
それでやってもいきませんでした、、、
うーん、深いです、、、
考えるだけ考えてみたいと思います。
いろいろとご支援有難うございます。
LWP に付いて質問です
#!/usr/bin/perl
use LWP::UserAgent;
$ua = LWP::UserAgent->new;
$ua->agent("$0/0.1 " . $ua->agent);
$req =
HTTP::Request- >new(GET => '
http://www.yahoo.co.jp/ ');
$req->header('Accept' => 'text/html');
# リクエストの送信
$res = $ua->request($req);
# 出力のチェック
if ($res->is_success) {
print $res->header; # ヘッダー全体を出したいっ!!
print $res->content;
}
else {
print "Error: " . $res->status_line . "\n";
}
print $res->header; のところで、レスポンスヘッダー全体を出力したいのですが、
何故か、空が返されます
339 :
262 :03/07/08 10:48 ID:yiVOHQJT
>>262 です。亀でスンマセン。
もう一度ソース貼ります。
eval{ flock(FILE,2); };
if($@){ &MkDIR ; }
$@ は直前の eval のエラーが格納されるということで
flock 関数が使えなかった場合の保険に mkdir でロックしたい。
ということなんです。
けど、エラーが出ないということは $@ には何も入らないという事になるんでしょうか?
結局はflock が使えるのか使えないのかを知りたいということなんですが判断の仕方が解らないんです。
最初から他のファイルロック方法を実現しろという話は無しの方向で。
ご意見お願いします。
>>339 エラーなしならヌル
って単にevalの戻り値を知りたかっただけかよ
341 :
339 :03/07/08 11:31 ID:???
>>340 本当に $@ にエラーが入るのだろうか?
と思いまして。はい。
flock 関数のころし方も分らないんで確認できなくって。
>>341 Windowsだと、9x系はエラー(かどうかは分からんが、evalらずに素で実行すると
スクリプトは停止)になるよ。
ちゃんと確認したいところだけど、うちは全部NT系にしちゃったんで。
>>338 レスありがとうございます。しかし、期待したデータではありませんでした…。
期待するデータは HTTP/1.x 200 OK とかサーバーが返すレスポンスヘッダーなんです。
>>343 ヘッダじゃなくレスポンスコードだろ
>print $res->header; # ヘッダー全体を出したいっ!!
print $res->code . $res->message;
>>343 6.1 ステータスライン
レスポンスメッセージの最初の行は、プロトコルのバージョン、ステータスコード番号、それに関連したテキストフレーズからなるステータスラインで、それぞれの要素は、SP によって分けられる。最後の CRLF シーケンス以外には、CR も LF も許されない。
Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
6.2 レスポンスヘッダフィールド
レスポンスヘッダフィールドを用いて、サーバはステータスラインに置けないレスポンスに関する追加的な情報を渡すことができる。これらのヘッダフィールドは、サーバについてや、 Request-URI によって識別されるリソースへの更なるアクセスに関する情報を与える。
>>344 すいません…。
HTTP/1.0 200 OK
Date: Tue, 08 Jul 2003 04:10:07 GMT
Server: Apache/2.0.46 (Unix) mod_perl/1.99_09 Perl/v5.8.0 mod_ssl/2.0.46 OpenSSL/0.9.6g DAV/2 FrontPage/5.0.2.2634 PHP/4.3.2 mod_gzip/2.0.26.1a
Last-Modified: Tue, 08 Jul 2003 04:09:31 GMT
ETag: "84f45-3d4e-63ccb4c0"
Accept-Ranges: bytes
Content-Length: 15694
Vary: Accept-Encoding
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/plain
↑こういうのが欲しいんです。
>>323 my @result = sort { !defined $form{$a} ? 1 :
(!defined $form{$b} ? -1 : $form{$a} <=> $form{$b}) } keys %form;
こういうことじゃなくて?
それとももっとスマートに書けってこと?
349 :
nobodyさん :03/07/08 14:22 ID:+KcPoM6i
見ず知らずのサーバー上に置いてあるCGI(Perl)プログラムの 内容を見るって可能なの? HTMLだったら簡単に見れるよね。それに、たとえば、abde.pl ならば、その置き場がわかれば、ブラウザにURLを入力すると ダウンロードできる。でも、cgiなら勝手に実行してしまう...。 何か方法あるのかな?
う〜ん、解らないな…。 print $res->headers->header; ってやっても何も表示されないし… 私の期待しているデータって入ってないのカナ?
あぼーん
>>351 リムネットとかリムネットとか、あとリムネットとかですね。
>>349 興味あるぞ、これ。
.pl ならDLして、.cgi や.html ならDLせず、画面に表示するという
事をどこで定義しているんだろうか?IEにはそんなのを
指定するところないぞ。
.pl に実行属性を持たせた後、ブラウザに入力したけど
やっぱりDLになった。という事は、クライアントサイドで
定義しているのは確か。
同じくワラタ
>355 だめだよ、そっとしておいてあげないと
359 :
nobodyさん :03/07/08 15:49 ID:+KcPoM6i
349ですけど、354さんはおかしい事言ってるんですか? 初心者なので、教えてください。 そして、もし、サーバー上のCGIソースを見る方法を ご存知なら教えて頂けないでしょうか。 よろしくお願い致します。
360 :
nobodyさん :03/07/08 15:53 ID:VzazIByi
>>359 みんなに怒られそうだけど、一応マジレスすると、CGIのソースが見られる
状態ってのはセキュリティ・ホールなわけ。だからマトモなサーバーで
CGIソース丸見えってのはありえないと考えてよい。
まぁ、間抜けな管理者のサーバーだと***.cgi/とか、***.cgi~ とか、***.cgi.bakとか探すと
あっさり見られたりするけど、そういうのは覗き見趣味と言ってあんまり良い趣味じゃないです。
>>359 CGIがsuEXECで動作するサーバ(パーミッションが700でいいところ)では出来ない。
362 :
349 :03/07/08 16:02 ID:+KcPoM6i
>>360 マジレス、ありがとうございました。
大変参考になりました。
RSSを表示したいんですが、文字コードの変換が上手くいってないらしく、
Wide character in print at 〜
と、エラーがでてしまいます。
たすけてっ
use LWP::Simple 'get';
use XML::RSS;
use Jcode;
$url = '
http://japan.linux.com/japanlinuxcom.rdf ';
$rss = new XML::RSS;
eval { $rss->parse(get($url)); };
print Jcode->new(${$rss->{items}}[0]->{title})->sjis;
文字列比較のcmp は、ひらがなやカタカナについてはあいうえお順になるのでしょうか?
367 :
364 :03/07/08 17:00 ID:???
>>365 文字コード順。
どっかから文字コード表を探してきてよく見てみれ。
cgiを指定した時間に勝手にwebサーバーで実行したいのですがどうすればいいでしょうか?
>369 指定した時間に目覚ましで起きる! or cron 散々外出
371 :
337 :03/07/08 19:01 ID:???
あれから、色々やってもさっぱり解りません。疲れました…。 print $res->headers->header; これやっても出ないってことは、無いという事でいいんでしょうか?
as_string
373 :
337 :03/07/08 19:38 ID:???
>>372 $res->as_string だと、内容(content)も表示されてしまいます。
どっちにしろ $res->headers->as_string も Location: とかの
データがありませんし…。
HTTP/1.1 200 OK
Date: Tue, 08 Jul 2003 10:28:34 GMT
Location:
http://www.google.co.jp/ Content-Type: text/html
Server: GWS/2.1
Content-length: 2716
↑Proxomitron 等で見た場合
HTTP/1.1 200 OK
Cache-Control: private
Date: Tue, 08 Jul 2003 10:26:56 GMT
Server: GWS/2.1
Content-Length: 2716
Content-Type: text/html
Content-Type: text/html; charset=Shift_JIS
Client-Date: Tue, 08 Jul 2003 10:26:47 GMT
Client-Peer: 216.239.57.99:80
Client-Response-Num: 1
Cneonction: Close
Title: Google
↑こんな感じで出てくる
LWP では勝手に間引きしたり、追加されたりするものと理解していいのでしょうか?
>>369 おまいはiswebとかxareaで実行したい初心者か?
そんなとこじゃ、cronはないよ。
>>369 クライアント自分で作れ。
>>374 そもそもcronから実行した時点でCGIとは呼ばないしね。
376 :
nobodyさん :03/07/08 21:55 ID:EC6mm4rU
あぼーん
378 :
nobodyさん :03/07/08 22:29 ID:SfDnct30
プログラムからcrontabにスケジュール追加する時、 通常はどうやって追記してますか。 var/spool/cronを直接いじってもいいのですが、 何か効率のいい方法がありましたら教えてください。
あぼーん
ああ、ごめんなさい。 /var/spool/cron内はroot以外入れないですね。 それだとなおさら何か方法あるのか疑問です。
crontab -e スレ違いだYO!
$ORG[0]->{kana} = "カリフォルニア"; $ORG[1]->{kana} = "ロンドン"; $ORG[2]->{kana} = "アラバマ"; $ORG[3]->{kana} = "アラスカ"; ・・・てかんじで、地名が入っているんですが、 これを並び替えたいと思ってます。 その基準は、 (1)あらかじめ定められたいくつかの地名は、優先的に、定められた順番で表示 (2)それ以外の地名は、その後にアイウエオ順で表示 です。 (1)の地名は、@seq = ("ニューヨーク","ロンドン","パリ"・・・・); というように(この順番で)格納されているものとします。 (2)だけなら、 @tmp = sort { (${ORG[$a]->{kana}} cmp ${ORG[$b]->{kana}}) } 0 .. $#ORG; foreach (@tmp) { push(@tmp_ORG,$ORG[$_]);} @ORG = @tmp_ORG; undef @tmp_ORG; でいいとわかるんですが・・・。 これのどこに(1)を組み込めばいいのか・・・
>>381 いや、ターミナル上ではなくてperlでスケジュールを追加したいの
ですが、何か方法はないですか
>>375 クライアントを作るとはどういうことですか?
385 :
の :03/07/09 00:12 ID:6fG8Iq33
>>382 こんな感じか?
my @seq = ("ニューヨーク","ロンドン","パリ");
my %hseq;
my $n = 0;
foreach my $i (@seq) { $hseq{$i} = ++$n; }
my @ORG;
$ORG[0]->{kana} = "カリフォルニア";
$ORG[1]->{kana} = "ロンドン";
$ORG[2]->{kana} = "アラバマ";
$ORG[3]->{kana} = "アラスカ";
$ORG[4]->{kana} = "パリ";
sub ordfunc {
my $aa = $a->{kana};
my $bb = $b->{kana};
if (defined $hseq{$aa}) {
return defined $hseq{$bb}? ($hseq{$aa} <=> defined $hseq{$bb}):-1;
} else {
return defined $hseq{$bb}? 1:($aa cmp $bb);
}
}
my @a = sort ordfunc @ORG;
$n = 0;
foreach my $i (@a) {
printf "%d: \"%s\"\n", $n++, $i->{kana};
}
--
俺的ポータルサイトを作ろう
http://mysite.ddo.jp/
あぼーん
387 :
の :03/07/09 00:20 ID:6fG8Iq33
>>385 すまん、一箇所間違ってた。
>return defined $hseq{$bb}? (defined $hseq{$aa} <=> $hseq{$bb} ):-1;
<return defined $hseq{$bb}? (defined $hseq{$bb} <=> $hseq{$aa} ):-1;
あぼーん
>>384 LWPモジュール使わずにソケット使って通信するプログラムを作れと言っている。
既存のモジュールの機能に満足できないのであれば、自作するしかないだろ?
>>373 >Location: とかのデータがありませんし…。
ProxyomitronとLWPは全く同じリクエストを送ってるのか?
Host指定するとLocationは来ないぞ。↓参照
$ telnet www.google.com 80
Trying 216.239.39.101...
Connected to www.google.com.
Escape character is '^]'.
HEAD / HTTP/1.1
Host: www.google.co.jp
Connection: close
HTTP/1.1 200 OK
Content-Length: 2716
Server: GWS/2.1
Date: Wed, 09 Jul 2003 04:01:05 GMT
Content-Type: text/html
Cache-control: private
Set-Cookie: PREF=ID=2f2a324164376c04:LD=ja:TM=1057723265:LM=1057723265:S=N4MltwrSeSo_i7Vp; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.co.jp
Connection closed by foreign host.
>>373 とりあえずLWP::UserAgent->new(parse_head => 0);にしたら
Content-Type: text/html; charset=Shift_JIS
Title: Google
は消える。
これはHTMLのHEAD内を解析して取ってくるオプションだから。
で、Client-XXXはソース見たらLWP::UserAgentが勝手に埋め込んでるみたいだな。
こいつは抜き取るしかなさそうだが、同じ名前で送られてこないとも限らないか。
Locationはリダイレクト。
http://www.google.com/にリクエストして http://www.google.co.jp/に行けって言われてるんじゃないの ?
これはデフォルトがリダイレクト先を取得する設定になってるから出てこない。
リダイレクトしないように設定すればおけ。
Cneonctionについてはぐぐってくれ;-)
※Connectionじゃないのなw
というわけで、
$ua = LWP::UserAgent->new(parse_head => 0, requests_redirectable => []);
みたいにオプションつけて、HEADで取得、Client-XXXを適当に消す、って感じか。
オプションの意味についてはちゃんと自分で調べてくれよ。
あとリダイレクトなんかで$res->is_successが偽になる場合もあるから注意。
302 Foundとかね。
まあ、純粋なヘッダが欲しいんなら自分で作った方がいいかもしれないけどね。
>>373 print $res->headers_as_string; じゃダメなの?
Cache-Control: private
Date: Wed, 09 Jul 2003 04:15:46 GMT
Server: GWS/2.1
Content-Length: 2716
Content-Type: text/html
Content-Type: text/html; charset=Shift_JIS
Client-Date: Wed, 09 Jul 2003 04:15:47 GMT
Client-Peer: 216.239.57.99:80
Client-Response-Num: 1
Cneonction: Close
Set-Cookie: PREF=ID=4bbf69507377e862:LD=ja:TM=1057724146:LM=1057724146:S=ISp-xtd
7MZcyLh4p; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.co.jp
Title: Google
こっちはYahooね
Cache-Control: private
Connection: close
Date: Wed, 09 Jul 2003 04:28:10 GMT
Pragma: no-cache
Content-Type: text/html;charset=euc-jp
Client-Date: Wed, 09 Jul 2003 04:28:10 GMT
Client-Peer: 210.81.150.5:80
Client-Response-Num: 1
P3P: policyref="
http://privacy.yahoo.co.jp/w3c/p3p.xml ", CP="CAO DSP COR CUR ADM
DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY O
NL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
Title: Yahoo! JAPAN
>>392 それは$res->headers->as_stringと同じだろ。
この結果は
>>373 でお気に召さないと書いてある。
395 :
337 :03/07/09 14:19 ID:???
>>391-394 レスありがとうございます。
> というわけで、
> $ua = LWP::UserAgent->new(parse_head => 0, requests_redirectable => []);
> みたいにオプションつけて、HEADで取得、Client-XXXを適当に消す、って感じか。
> オプションの意味についてはちゃんと自分で調べてくれよ。
おおかた、
>>391 さんの言っている事が理解できました。
あとは、自分で調べてやってみます。
※使っている PC がへぼいせいかもしれませんけど、
LWP の最初のロードが遅いですね
396 :
nobodyさん :03/07/09 18:32 ID:T8daMjJB
結局、perlスクリプトでcrontabを操ることは 不可能なのでしょうか。 できるならcrontab編集ツールとか作りたいの だけど、、、
「crontab -」で標準入力から突っ込むことができるから、たいして難しくないでしょ? むしろ、運用の方が大変じゃないかなぁ。 何を突っ込まれるか分からないわけだし。
>>387 お返事有難うございます。
ええと、初心者のためいまいちイメージが湧きません。
標準入力から書き込む、ということは具体的にどういったことでしょうか。
度重なる質問すみません。
>>398 標準入力へ書き込むって事じゃ?
open( CRONPIPE, "| crontab - " );
・
・
・
close( CRONPIPE );
400 GET _,,..i'"':, |\`、: i'、 ≡≡≡(´⌒;;;≡≡≡ .\\`_',..-i .\|_,..-┘ ズサーーーーーー
プラットフォームに依存しない CD-ROM ドライブアクセスモジュールって無い?
402 :
nobodyさん :03/07/09 21:10 ID:PDgcqehQ
>>401 Perlじゃないよヴォケ。JavaScript逝けや
>>399 isweb,xareaはcrontabが禁止されてる。
SQLの話かもしれないけど、 mysqlで、主キーにAUTO_INCREMENTついたテーブルに insertした場合、insert後に主キーが何になったかを知る方法ってありますか? DBIつかってて、今は、普通に$dbi->do(..でSQL文発行してます。。
407 :
nobodyさん :03/07/10 00:34 ID:MG1pWe0Y
みんな書けよ。
Perlスレを盛り上げよう。
410 :
nobodyさん :03/07/10 02:30 ID:izTOLa86
掲示板で使っているクッキーを別のcgiで使う ってことはできますか? レスキューのminibbsのちょっと前のを使っているのですが そのまま使うと掲示板自体を表示しちゃうんです
意味わかんない
412 :
nobodyさん :03/07/10 02:46 ID:izTOLa86
つまり 投稿してクッキーとして記録された名前などを、別のcgiで流用し たいのです。 元のBBSのスクリプトのクッキー部分を移植すると動作はしますが、 その後にその掲示板が表示されてしまうのです。 これです、行間詰めてます。 $reloadに掲示板のURLが設定してあるのです。 $cookies= $ENV{'HTTP_COOKIE'}; @pairs = split(/;/,$cookies); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $name =~ s/ //g; $DUMMY{$name} = $value; } @pairs = split(/,/,$DUMMY{$reload}); foreach $pair (@pairs) { ($name, $value) = split(/:/, $pair); $COOKIE{$name} = $value; }
>>399 ありがとうございます。
なんとなくイメージが湧きました。
これからやってみますね
>>412 cookieに何を書き込むかは発行するCGIが決める。
読んだcookieのどの部分を使うも読んだCGIが決める。
ルーチン丸ごと使うからそんなことになるんだよ。
あぼーん
あぼーん
>412 頭悪いと大変ですね。
418 :
nobodyさん :03/07/10 09:35 ID:wjfeVSSe
>>414 頭悪くて申し訳ないですけど、
解決策教えてもらえないですかね?
頼みます。
>>418 通り掛りのもんだけど、
$reloadに新しいページを入れた?
420 :
nobodyさん :03/07/10 10:45 ID:hGiFYAot
はい いれるとクッキーの取得ができません
あはは、別のCGIで取得したcookieを利用するんなら、 そっちのCGIをrequireするか、cookieで取得した値を ファイルに書き出しとかなきゃだめじゃん。 requireするのは、やってる内容にもよるがたぶん無理。 つか、あなたの腕では、ファイルに書き出すのもたぶん 無理。
422 :
nobodyさん :03/07/10 11:16 ID:DU/pTK24
そうですか、ファイルに書き出すとたぶん 環境変数で書き出した値と照合するしかないですよね? これでは特定が完全ではないでしょう? ならば、本体のbbsでルーチン組んで動作分離させるか、 別のcgiから一旦bbsを起動させて動作分技させます htmlファイルを書き換える仕様にしているのですが、 すでに膨大なリンクがあるので後者で済ましたいです。 上手くいかなかったらまた質問します。
あぼーん
>>422 $cookies= $ENV{'HTTP_COOKIE'};
@pairs = split(/;/,$cookies);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$name =~ s/ //g;
$DUMMY{$name} = $value;
}
これだけ使えばいいじゃん
それぞれのCGIからcookieを書き込むときに
print "Set-Cookie: NAME=name; expires=$wday, $mday-$mon-$year 00:00:00 GMT; path=/\n";
print "Set-Cookie: MAIL=mail; expires=$wday, $mday-$mon-$year 00:00:00 GMT; path=/\n";
のようにしてpathを強制的にサイトのルートにしちゃえばいいんだよ
そうすればどのCGIからも同じcookieで読み書きできるようになる
>>424 やるなら書き込み後にcookieのファイルを開いて自分のアカウントの
ルートになっているか確認してね。
426 :
nobodyさん :03/07/10 12:52 ID:uIFBr8e3
<input type="radio" name="site_ja" value="1">あり <input type="radio" name="site_ja" value="0">なし から送られる値を、 $in{site_ja}に格納しているのですが、 どちらのボタンを押されていない場合、 エラーを出したいと思っています。 で、 if (!defined($in{site_ja})){$HtmlErrorText .= "<li>日本語版サイトを選択してください</li>";} で判断しようとしたのですが、 if文が偽になってしまって、エラーが出せません。 どうしてなのでしょうか・・・?
if ($in{site_ja} == 0)じゃいかんのか。 値が0でもdefineはされてるだろ。
>>426 definedを使ったから。existsを使えばいい。
<input type="radio" name="site_ja" value="1">あり <input type="radio" name="site_ja" value="0" checked>なし or <input type="radio" name="site_ja" value="on">あり <input type="radio" name="site_ja" value="off">なし (´-`).。oO(こうすれば悩まなくて済むのになぁ・・・)
あぼーん
431 :
nobodyさん :03/07/10 14:14 ID:mUbItvZA
$p=int(rand(8)); について、連続で同じ数字は 出ない様にしたいです。 例えば1回目が3なら、 2回目は3が出ないように。 すいませんけど、どうやるのか、 教えて下さいませ。
432 :
426 :03/07/10 14:30 ID:???
>>427 どっちのボタンも押されてないと、値はNullだと思うのですが・・・かんちがいしてる?
>>428 if (!exists($in{site_ja})){$HtmlErrorText .= "<li>日本語版サイトを選択してください</li>";}
に変えてみたのですが、
症状が変わらないのですが・・・・
>>432 どっちかボタンを押すように言え。
押さないような香具師はアボーン汁。
>>432 チェックされていなければ、site_jaは送信されてこない。
よってvalueも存在しないからNull判定でやってはダメ。
definedでやった場合は変数が未定義ならいいが、予約された
変数の場合は保証されない。
existsならハッシュのキーの有無で判定できる。
テストしてみたが、!existsでちゃんと処理できた。
>>431 まずはクッキーでもファイルでもセッションでも良いから
何かで記憶させておかないといけないでしょ。
それが出来たらまたおいで。
436 :
426 :03/07/10 15:50 ID:???
>>434 さんの言うことはすごく理解できました。(existsの意味勘違いしてた)
ありがとうございます。
しかし、
if (!exists($in{'site_ja'})) {$HtmlErrorText .= "<li>日本語版サイトを選択してください</li>";}
としても、スルーされてしまいます・・・
どこかケアレスミスしているんだろうか・・・
437 :
436 :03/07/10 15:52 ID:???
すいません、ケアレスミスでした。ごめんなさい。 if($HtmlErrorText) {&HtmlError($HtmlErrorText);} の一文をいつのまにか消してました・・・ ごめんなさい。 if (!exists($in{'site_ja'})) {$HtmlErrorText .= "<li>日本語版サイトを選択してください</li>";} でばっちりです。
438 :
nobodyさん :03/07/10 17:04 ID:mUbItvZA
すいません。 $v -= int(sqrt($ud)) if($bst =~ /S/); の意味を分かる範囲で教えて下さい。 因みに、$ud は防御力です。
$bst =~ /S/ が真(true)だったら、$vからsqrt($ud)を引いたものを新しい$vとする。
もし$bstにSという文字が入っていたら 防御力の平方根を求め、小数点以下を切り捨てる。 $vからその値を減算したものが$vになる。
IDとパスワードをフォームに入力してもらったあと、
foo.cgiにとんで、そのあとアクセスをカウントしたあと、
そのIDとパスワードを、
保持したまま、別のlogin.cgiにとびたいんですが、
Location:
http://www.xxx.ne.jp/login.cgi?id=$id&pass=$pass だと、
idとpassがURL欄に丸見えでまずいじゃないですか。
で、別の方法(つまりは、getでなくpostメソッドで)
login.cgiに飛べて、
しかもidとpassを渡せる方法ってありませんか?
自分が考えつくのは、
ソケット通信で、
地道にpostメソッドで渡す方法くらいなんですが・・・。
よろしくお願いします。
セッションで管理する
>441 あなたがやりたい方法は JavaScript で出来ますが、 セッション管理やクッキー等、他の方法を利用した方がいいでしょう。
>>431 それって乱数といえるのか?
ビンゴのようにするのだったら、必要な数字を配列に入れて乱数で取り出してみるとか。
>>431 2つが連続してはいけないのなら、前回の数字を覚えておいて、
* 乱数を取り出したときに一致しているか調べて、一致しなくなるまで繰り返し取り出す
* 前回の数字が存在しないと仮定して、一つ少ない大きさまでの乱数を取り出す。それ>=前回ならば、1増やす
>>445 のが答えなら、効率を上げるため、数字が入った配列をかき混ぜて(Perlメモ)前から取り出す。
>>441 順番を逆にすれば?
はじめまして。
フォームから誕生日を入力して、その数字を元に占いをさせようと思っています。
数字によって異なる結果を書いたページに振り分けるために
@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等)は正しい位置にアップロードしてあります。
>>447 そのLocationの値を画面に表示して、正しいURLが生成されているか確認してみよう。
ツリー型掲示板の管理モードでツリー削除の他に「過去ログ送り」を 作ってみたのだが現行ログからの削除はできても過去ログへの書き込みがうまくいかないのです @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);
450 :
441 :03/07/10 23:03 ID:???
>>443-444 ほんとはセッション管理したいんですけど、
他の部分は全部完成しちゃってるんで、
今さら無理なんですわ・・・(泣)
>>442 会社で
>>441 のカキコして、帰りの電車で自分も暗号化思いついたんですけど、
暗号化したID/PASS同士で照合するってことですか?
やり方としては、
foo..cgi の中で、
$id = crypt($id) #暗号化
$pass = crypt($pass) #暗号化
Location:
http://www.xxx.ne.jp/login.cgi?id=$id&pass=$pass して、
login.cgi の中で、
サーバに入ってるid と passのデータを暗号化させて、
そいつと、クエリーストリングとしてやってくる、暗号化IDと暗号化PASSを、
照合させると・・・いうことで問題ないですか?
451 :
447 :03/07/10 23:09 ID:???
452 :
448 :03/07/10 23:28 ID:???
>>452 print〜の文を画面出力して確認しながら修正を加え、無事動作させることができました。
勘違いが原因だったとは…こんな初歩的トラブルに
親切なご教示ありがとうございました。
455 :
447 :03/07/11 00:46 ID:???
>>454 大丈夫。Web系の開発で飯食って10年になるけど、エラーの大半は初歩的ミス。
だから、もし人に聞くときはこれでもかというくらい慎重にしなきゃならん。
457 :
447 :03/07/11 01:46 ID:???
>>456 どうもです。
また何かトラブったらお伺いするかもしれません。
そのときはよろしくお願いします。
ホントだよね。 俺も3時間はまって、もういいや、寝よっと思って布団はいったとたんに気づいたよ。 外のループと内のループのカウンタ変数混同してた。。。。 それもちゃんと動いてたの途中で壊してやんの。 ずーーーとさかのぼっても駄目であきらめて寝よ、と思ったのに、 手許だよ、テモト!! ぐしゃっ
459 :
nobodyさん :03/07/11 08:27 ID:+GXxdBTx
おはよう。
あぼーん
461 :
nobodyさん :03/07/11 13:23 ID:XltnJZI3
すいません。
以下のPERLで、敵が普通に反撃する時の
条件はどの様になっているのか、
教えて下さい↓
http://gekiya77.gi-ga.net/cgi/oshiete.txt 見れば分かると思いますが、
$pに1〜6迄のランダムの数字を与え、
それに従い技を出します。
ただ、420行目からある普通の攻撃もして
くる場合があるので、それはどんな条件に
なった時なのか、教えて下さい。
宜しくお願い致します。
>>461 600行近くあるソースを「見れば分かる」かよ……
それ以前に何を聞きたいのか不明。日本語の勉強をしてから出直してきてくれ。
>>461 if elsif else がわからないのか?
上から条件式で判定してどれにもあてはまらないときに&bogu_bt;で
# 敵キャラ通常攻撃処理のサブルーチンに飛ぶだけだろ。
464 :
401 :03/07/11 13:35 ID:???
perlじゃできないってこと?
465 :
461 :03/07/11 13:35 ID:XltnJZI3
>>463 分からないから聞いてるんでしょうが。
まあ、とりあえず、どうもでした。
>>462 何を聞きたいのかは充分に書いて
あるでしょうが。
もう、その表現を使えば勝てると
思ってるね、この馬鹿はw
貴方が日本語の勉強をされた方が、
以下略・・・。
466 :
441 :03/07/11 13:35 ID:???
>>465 基本的な文法もわからないようじゃどうにもならんな。
何度か同じような初歩的質問をしているが、もう相手にしない。
ある程度勉強して理解できるようになるまで二度と来るなよ。
>>464 「プラットフォームに依存しない」 ← 無理
>>466 完璧な安全性が保たれるとは言えないけど、
実用レベルの強度は得られるんじゃない?
>>465 まともなコードも書けない時点であんたは負けてんのよ。
>465 ??
$ whois gekiya77.jp
[ JPNIC & JPRS database provides information on network administration. Its ]
[ use is restricted to network administration purposes. For further infor- ]
[ mation, use 'whois -h whois.nic.ad.jp help'. To suppress Japanese output, ]
[ add'/e' at the end of command, e.g. 'whois -h whois.nic.ad.jp xxx/e'. ]
Domain Information: [ドメイン情報]
[Domain Name] GEKIYA77.JP
[登録者名] 西園修
[Registrant] Osamu Nishizono
[Name Server] ns.gekiya77.jp
[Name Server] dns.wadax.ne.jp
[登録年月日] 2003/06/23
[有効期限] 2004/06/30
[状態] Active
[最終更新] 2003/06/23 18:34:07 (JST)
Contact Information: [公開連絡窓口]
[名前] ワダックス
[Name] WADAX
[Email]
[email protected] [郵便番号] 556-0005
[住所] 大阪府大阪市浪速区日本橋4-1-4-903
[Postal Address] 4-1-4-903,Nipponbashi,Naniwa Ward,Osaka City,
[電話番号] +81(6)6630-6049
[FAX番号] +81(6)6630-6049
if文もわからないやつが書いたソースじゃないだろ 拾い物でしょ
474 :
401 :03/07/11 14:18 ID:???
>>468 じゃぁ、依存するものでもいいからどっかに転がってませんか?
475 :
466 :03/07/11 14:21 ID:???
>>469 その安全性の強度ってのは、ctyptの安全性の強度に依存するって意味ですか?
>>401 CD-ROM読むだけなら、モジュールいらねーぞ。普通にopen使えば?
478 :
401 :03/07/11 15:21 ID:???
>>476 え?俺、リッピングしたいんだけど…
open でできるの?
479 :
401 :03/07/11 15:32 ID:???
>>478 依存するものでもいいとかリッピングとか後になってあれこれ言わずに
まとめて書け。
それにスレ違い。
481 :
401 :03/07/11 15:47 ID:???
で、どうやるの?
>>450 それだと暗号化済みのIDとPASSをコピられたら同じことじゃないの?
あとid、passみたいな分かりやすい名前は止したほうがいいと思う。
>>474 そんなモジュールは知らないが、依存してもいいならWin32::APIとか使えば
何かできそうな気がしなくもない。
漏れはリッピングのコードなんて書いたことないから、これで足りるのかも分からんが。
485 :
nobodyさん :03/07/11 16:57 ID:H65xN+pz
perlってどういう意味ですか?
486 :
nobodyさん :03/07/11 16:58 ID:H65xN+pz
ていうか何ですか?
なんでperlでリッピングするのだろう?
>>485 プログラミング言語です。
english,japanease,perl
漏れはエロゲーをperlで作りたいのですが、できますか?
>>489 どんなゲーム形態なのか問わないのであればすぐに作れるぞ。
例えば標準出力にテキスト垂れ流しで、たまに分岐があるぐらいとか。
>>489 TkとかWin32::APIとか使えば理論上は可能。
だからがんばれw
print分さえ分かれば誰でも作れる
494 :
nobodyさん :03/07/11 19:42 ID:jaAmfExn
ある一覧のデータを全表示した時に、 例えば年齢の高い順とかって言う風に、 出来るようにしたいです。 その様な場合には、どう記載したら 宜しいのでしょうか?
そうっとしとけ。
\ | /
_┌┬┬┬┐_
――┴┴┴┴┴―、 __________
// ∧// ∧ ∧||. \ /
__[//____(゚_//[ ].゚Д゚,,) || _ \__ <
>>497 を逮捕しにきました
lロ|=☆= |ロロ゚|■■|■■∪警視庁■■|| \__________
| ∈口∋ ̄_l__l⌒l____|___l⌒l___||
 ̄ ̄`ー' ̄ `ー' `ー' `ー'
499 :
450 :03/07/12 11:20 ID:???
500 :
500 :03/07/12 12:27 ID:???
500 GET ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
501 :
441 :03/07/12 13:00 ID:???
>>441 の質問を最初にしたものです。最初にもどってしまいますが、
自分が
>>441 で言った、
>自分が考えつくのは、
>ソケット通信で、
>地道にpostメソッドで渡す方法くらいなんですが・・・。
だと、とくに問題ないですか?
・・・っていうか、これって、可能ですよね?
perl で使える gzip, gunzip モジュール解説しているページ教えてくれませんか? 倶愚ったけど、ほとんどインストールの解説で gzip とかヒットして探すの疲れた…
「perl open gzip」
open( FILE, "| /usr/bin/gunzip -1 -c" ); ↑こういうのは無し。外部プログラム呼び出さないで、 perl 内ですませたいので
Compress::Zlib::memGzip( $buff ); Compress::Zlib::memGunzip( $buff );
>>505 ∫ _________
∧,,∧ ∬ /
ミ,,゚Д゚彡っ━~ < ご苦労!
_と~,, ~,,,ノ_. ∀ \
ミ,,,,/~), │ ┷┳━  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ .じ'J ̄ ̄| ┃
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ┻
この店はなんでもあるな
使った事ないけど、PerlIO::gzipってのもある。
NOのパラメータから、ファイルに入っている該当の行を削除処理したいのですが、 全く反応が無いです。。。 エラーも出ないため、いや、何よりも初心者なので原因がつかめません。 ご教授お願い致しますm(__)m sub dl{ if(!open(OUT,"$file")){&error(err_file);} @DATA = <OUT>; close(OUT); $count = @DATA; $delcount = $count - $in{'NO'}; if($delcount ne ""){ $no = $delcount; $DATA[$no] = ""; } if(!open(IN,">$file")){&error(err_file);} print IN @DATA; close(IN); }
>>509 INとOUTが逆だな。
それはともかく、$DATA[$no] = "";のところを
print $no;
print $DATA[$no];
$DATA[$no] = "";
print $DATA[$no];
とやってみれ。
511 :
nobodyさん :03/07/12 17:49 ID:p/T5Jtg4
初心者スレの鉄則
「逆ギレする質問者は釣りか荒らし」
ということで。
>>478 デバイスファイルがあればできるよ。
% perl
open(FILE, "/dev/cd0a") or die $!;
print <FILE>;
^D
CD001EP@@@@@@@@@@@@@@@@@IWANAMI_K4@@@@@@@@@@@@@@@@@騷@IWANAMI_K4
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@IWANAMI SHOTEN
DAI NIPPON PRINTING CO,LTD
000000000000000
0000000000000000000000000000000000000000000000000�CD001
CDDIC?dPWCTLG 榲PWDEMOUROKUUIDEsKOUJIEN懼SCREEN?ツATAlGAIJI 殲TREAM
(略)
ほらね。ちなみに↑は広辞苑のCD-ROM。
512 :
nobodyさん :03/07/12 18:11 ID:2K5dewso
質問させてください。 いま、JAVAアプレットでCGIを呼び出してファイルをCGIが読み込んでその内容はアプレットに 返すっていう内容のを作っているんですが、CGIが内容を返すときにヘッダーの内容まで 送られてしまって、困っています。 最悪、その部分はJAVAの方で消してもいいんですが、できればCGIからの送信内容は 通信量の面でも軽くしたいし、ヘッダーの内容は送らないようにしたいんですが 可能でしょうか?
>>510 さん
ありがとうございます。
print $no;------------@
print $DATA[$no];-----A
$DATA[$no] = "";
print $DATA[$no];-----B
NO=8を与えてみたところ、
@に[9]の表示のみとなりました。
$DATA[$no];-----Aが無いのはどうしてでしょうか?
(゜▽゜;)
515 :
nobodyさん :03/07/12 18:27 ID:p/T5Jtg4
>>512 可能。nph使う。多くのサーバーでは、CGIスクリプトの名前の先頭に nph- と入れるだけでよい。
例: nph-test.cgi
#!/usr/bin/perl
print "data\n";
exit;
ヽ(*`Д´)ノ なんでもかんでもここで質問するなー! ちゃんと適当なスレに書け!
517 :
512 :03/07/12 18:31 ID:2K5dewso
>>515 ありがとうございます。
早速やってみます。多謝
510>> 515>> $DATA[$no];-----A 前の処理で、スカラーに代入してました(゜゜;) 基本は printですね。。。初心に返ります。 ありがとうございました
>>515 おぉ!初めて知った。その根拠というか、メカニズム教えて
G(o^-^o)gle < 「No Parsed Header」 or 「NPH」 nphでサーバゲットだぜっの時代があったねぇ
ディレクトリ作成について質問 深い階層のディレクトリを作成する為に、 以下のコードを書いたんだけど、 もっと効率のいい方法は無い? #!/usr/bin/perl $d = './aaa/bbb/ccc/'; # まだ存在ディレクトリ構造 @list = split( /\//, $d ); shift @list; foreach ( @list ) { $t .= "$_\/"; mkdir( $t, 0755 ); print "$t\n"; }
× $d = './aaa/bbb/ccc/'; # まだ存在ディレクトリ構造 ○ $d = './aaa/bbb/ccc/'; # まだ存在しないディレクトリ構造
523 :
nobodyさん :03/07/12 20:01 ID:p/T5Jtg4
>>522 system qw(mkdir -p $d);
とかじゃ駄目?そういやモジュールもあった気がするけど覚えてない。
あぼーん
525 :
nobodyさん :03/07/12 20:02 ID:p/T5Jtg4
訂正。 system("mkdir", "-p", $d);
>>518 @DATA = <OUT>;
が嘘だったということか?
まあ解決したようなんで別にいいんだけども、ちょっと気になるんで。
>>523 >>525 ごめん。それだと、win系じゃ動かないんだ…(´д⊂ヾ
確か、win のシステムコール(API) は一発で深い階層の
ディレクトリ作ってくれるんだよね。だから、perl にも俺の
知らない関数かモジュールあるかと思って聞いてみたんだ。
まぁ、chdir しながら mkdir するよりはマシかな
#!/usr/bin/perl って書いててもwin系なのか。難儀だな。 できないという結論?
>>528 \usr\bin\perl.exe があるんです(w
>>527 File::Pathモジュールをつかう。
ディレクトリの作成だけじゃなく、一括削除もできるよ。
ま た モ ジュ ー ル か
532 :
nobodyさん :03/07/12 21:32 ID:i3OrVbjx
q|ポテトサラダ| というのがあるとエラーが出ました それを "ポテトサラダ" にしたら正常に動くようになりました 何ででしょう?
ポが駄目文字に違いない
だめポ。。。
>>532 「ポ」は 0x83 0x7c の2バイトで構成される。
qの区切り文字 | は 0x7c。
ポの2バイト目が区切り文字と同じコードのため、そこで q が閉じてしまうので
エラーになる。
ちなみにこの手のトラブルは、シフトJISでソースを書く以上どうしても避けられない。 EUCで書くようにすると幸せになれるかも。
こんなところでエムエクースの知識が役立とうとは
538 :
nobodyさん :03/07/13 01:27 ID:cL3G8Wfc
だれも
>>521 にマジレスしないのはなぜだ?
mkpathしかなかろうに・・・・
あぼーん
@aと@bに重複する要素を全て取り出したいです。 例えば @a=(1,2,3,4); @b=(2,3); ならば、2と3が取り出せる。 いい方法ない?
543 :
541 :03/07/13 03:17 ID:???
545 :
nobodyさん :03/07/13 04:27 ID:zHTguhVX
$ban_word='*'; if($comment=~ /$ban_word/){&error();} 上記ケースにおいて、$ban_wordに「*」や「+」が指定されると構文エラーになります。 $comment=~ /*/をやればエラーになるのは明白なので原因はまあいいんですが、 Perlの組み込み関数に「メタ文字をすべてエスケープしてくれる」関数はなかったでしょうか。確か、 &escMeta('文字列'); みたいな使い方をすると文字列中の「*」は「\*」にエスケープされるような・・・ うろ覚えなのですが、心当たりありましたらご教授願います。
547 :
nobodyさん :03/07/13 04:41 ID:nQJ8+8Yh
>>545 quotemeta。
> &escMeta('文字列');
ここまで分かってるんなら、人に聞く前にperldoc perlfuncを開いてmetaで検索するとか
してみよう。
548 :
545 :03/07/13 04:43 ID:???
朝早くからthx! どうりでescapeで探しても当たらないわけだ・・・
あぼーん
550 :
nobodyさん :03/07/13 14:14 ID:eiBgp+ln
if(!$a && !$b) は、どういう意味でしょうか?
>>550 if(!($a != 0) && !($b != 0))
>550 if($a=~/^0?$/ && $b=~/^0?$/)
%uFF2D%uFF33 をエンコードしたいのですがどうすればいいでしょうか。
556 :
nobodyさん :03/07/13 15:37 ID:6NfNIHy+
perlのコマンドを検索できるサイト(できれば日本語で)はありませんか? Unixのmanを検索できるサイトなら知ってますが、あんなかんじで
本番では、unixのサーバ上で動かす予定のCGIを、 windows上で開発するときの、注意点はなんでしょうか? 自分が知ってるのは、 ●flockはWinでは使えないので、 eval(flock (LOCKF, LOCK_SH)); みたいにするってことくらいなのですが
>557 パーミッションとか色々ありすぎて、並べ上げたらキリがないと思われ。
あぼーん
>>557 でもパーミッションは、perlそのものでなく、ファイルの問題だから、
FTPでアップするときに注意すればいいだけかと思うのですが・・・。
>並べ上げたらキリがないと思われ。
すいません、よかったら2,3、例を挙げていただけませんか?
自分には一個も他には思いつかず。
#ちなみに、Win2000です。
562 :
nobodyさん :03/07/13 17:09 ID:nQJ8+8Yh
>>551 $a = "0 but true";
$b = "0\n";
print ((!$a && !$b) ? "true\n" : "false\n");
print ((!($a != 0) && !($b != 0)) ? "true\n" : "false\n");
Perlの真偽はちゃんと覚えておかないと、そのうち火傷しまっせ。
>>560 プログラム上でファイルやディレクトリを作成する場合もあるだろ。
巷のフリー掲示板みたいにログファイルを666でアップしてください、
ってんなら別にいいけど。
#W2kならflockは使えた気がするのは気のせいでつかそうでつか。
#でもEWOULDBLOCKとかはサポートしてないんだよな。
>>563 そんな機種依存部分はなんとかするだろう普通。
565 :
nobodyさん :03/07/13 17:41 ID:NX4Xoj87
>>562 それで説明したつもりなのか?
リファレンスでもコピペしたようだな(プゲラ
これだから無知は。。
どこに真偽が判定されてるんだよ?
横に結果出力ぐらいつけてやれヴォケ
そんなんもできんのならここに来るな夏房
566 :
564 :03/07/13 17:48 ID:???
ごめん直感でレスしてた。焦点がずれてる。 そもそもUNIXにできてWindowsにできないっていう事しか存在しないんだから、 UNIXで動かそうとしてもどうしても動かないっていう状況は起きないので、大丈夫(?)
判定の仕方: print !!$a . "\n"; print !!$b . "\n";
>どこに真偽が判定されてるんだよ? こりゃすげぇ
三項演算子って使ったことない気がする
三項演算子とif〜elseの使い分けも腕のうちかな
どうやら
>>565 はそれ以前に三項演算子を知らな(ry…
ネタというより、単に
>>551 =565の逆ギレじゃないか?
釣りにしちゃお粗末だし。
お熱い所すいませんが、お願いします。c で以下の様なコードを perl で実現するにはどうすればいいのでしょうか? // c の場合 char * a [] = ( 'aaa', 'bbb', 'ccc' ); char * b = &a[1]; // b[0] = 'bbb' ;# perl の場合 @a = ( 'aaa', 'bbb', 'ccc' ); @b = @{ $a[1] }; # うまくいかない… # @b にどう代入していいか解りません(´д⊂ヾ
574 :
557 :03/07/13 18:55 ID:???
ミスってますね char ** b = &a[1]; // b[0] = 'bbb'
>>573 Cの部分を何がしたいのか日本語でかけば誰か答えてくれるかもね
>>568 >>565 は、Perlでの真偽がどうかを説明するべき所で、
2つの論理和をとったものの真偽を表示するスクリプトを書いた点について怒ったのでしょう。
>>573 勘で答えると、
$b[0]に$a[1]を代入したいんでしょ?なら、$b[0] = $a[1]
あ、同じデータを2箇所から参照したいっていうことか。それは今のところできないなぁ。
\$b[0] = \$a[1]、う。文法エラー
>>577 コメントに書いてありますが
@b には @a[n] の様に添え字をして任意の位置から
参照できるようにしたいんです
@a = ( 'aaa', 'bbb', 'ccc' );
@b = $a[1]; # どう書いていいか解らない。@b には $a[1] からのリストとして代入したい
foreach ( @b ) {
print ;
}
581 :
573 :03/07/13 19:13 ID:???
説明がうまくできなくてすいません(´д⊂ヾ
理解した。でもPerlはこういうのは得意では無いような… *方法1 @b = $a[-1], @a; *方法2 @b = @a[1 .. $#a, 0];
あ。別に一周させる必要はないのか。
584 :
nobodyさん :03/07/13 19:43 ID:lgv8WpE5
@b=('aaa','bbb','ccc')[1..2]; @b=@a[1..$#a]; $b=('aaa','bbb','ccc')[1]; @b=('aaa','bbb','ccc')[1..2]; で直接できると思った $b=(localtime)[3]; 見たいに必要な部分直接取ったりできるし。 ($day,$mon)=(localtime)[3..4]; @data=(localtime)[3..4]; #($mon,$day)=(localtime)[4..3];#これは無理みたい
587 :
565 :03/07/13 20:22 ID:DslkH4qS
各文の後に結果を書いてやれ、といっただけ
わからない人のためにな
>>562 のを実行してたしかめろ!っていうのは初心者にとって嫌だとおもったから
>>573 my @a = ('aaa', 'bbb', 'ccc');
my @b = (\$a[1]);
printf("\${\$b[0]}\t%s\n", ${$b[0]});
printf("\$a[1] \t%s\n", $a[1]);
${$b[0]} = 'hoge';
printf("\${\$b[0]}\t%s\n", ${$b[0]});
printf("\$a[1] \t%s\n", $a[1]);
------------------------------
$ perl array.pl
${$b[0]} bbb
$a[1] bbb
${$b[0]} hoge
$a[1] hoge
C のソースから考えると、こういうこと?
589 :
584 :03/07/13 20:25 ID:lgv8WpE5
Σ (゚Д゚;) スレ違いでしたか(汗 じゃあ案内先で再度質問させていただます 失礼しました(´Д`;)
windowsつかってます。 cronを使いたいんですがどうすればいいでしょうか?
スケジューラ
>>587 自力で理解しようとした形跡の無いヤシに親切心は必要なのか?
落ち着こう。
597 :
nobodyさん :03/07/13 22:02 ID:tSmK0WhU
スレ違いかもしれませんが。。 Apacheだとmod_auth_mysql等を使って、データベース と連動した認証ができますけど、同じようなことを IIS + SQLServerで行う方法ってあるのでしょうか?
スレ違いです。
>>597 知ってる人がうまい具合に読んでくれて答えてくれることを期待してるでしょ?
誘導を待つのもいいが、適切なスレを自力で探す手間を惜しんじゃいかんよ。
600 GET ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
おめでとう
と、粘着なレスをつける人もかなりたくさんいて
平和でいいね
607 :
556 :03/07/14 03:21 ID:???
見事にスルーされてる
>>556 ですが、
みなさんはコマンド忘れたときどーしてるんでしょうか?
>>607 ふつーにperldoc -f [command] だろ。
あと、googleで「perl マニュアル 日本語」辺りで引いてみな。
610 :
556 :03/07/14 04:41 ID:???
>>608 いや、うちの環境、
Win上でスクリプト書いて、いちいちテストサーバにアップしてるもんで・・・
SSHつながんないし。
まぁ、cygwin使うという手もあるのだろうけど。。。
>>609 いいですね、これ。
使わせていただきます。
611 :
608 :03/07/14 04:50 ID:???
>>610 Windowsって開発に使ったことないけど、Windows版のperlってperldoc同梱されてないん?
>>612 話題出たついでに。これの日本語版って無いの?
4ac - b**2 = 0
みんなlinux使ってるの?
ターゲットはUNIX系が多いけど、開発は大抵Windowsでやってるよ。 で、Windows版にもperldocはある。 というかインスコしたディレクトリのbin見れ。色々入ってるから。 あとhtml以下もな。
判らなくなったらいつもとほほに繋いでるな
perlからunixコマンドを呼び出せない環境なので、 unlink<./tmp/*>が使えないのですが、 別の手段(opendir?)で、 ./tmp/* にあるファイルを削除する方法はないでしょうか?
unix使ってる人多いのかなぁ。
>>615 端末はWindows。FreeBSDにtelnetで繋いでviで書いてる。
レンタルサーバの引越しをしたのですが。 SSIの動作が異なっているために実行されません。。 SSI実行時のカレントディレクトリが異なっているようです。 サーバ側の設定などで修正は可能ですか? ファイルの修正は多すぎて大変なので・・・。 解決策をご存知の方教えてください。
@tmp = sort { (${ORG[$a]->{adanaid}} <=> ${ORG[$b]->{adanaid}}) } 0 .. $#ORG; foreach (@tmp) { print 'person='. $ORG[$_]->{person}. "\n"; print 'adana='. $ORG[$_]->{adana}. "\n"; print 'adanaid='. $ORG[$_]->{adanaid}. "\n"; } で、 なぜ、sortのときには ${ORG[$a]->{adanaid}} なのに、printのときは、 $ORG[$_]->{adanaid} のようになるのでしょうか? つまり、なぜ @tmp = sort { ($ORG[$a]->{adanaid} <=> $ORG[$b]->{adanaid}) } 0 .. $#ORG; ではダメなんでしょう? このときの{}にはどんな意味があるのでしょうか?
626 :
nobodyさん :03/07/14 16:31 ID:hPGUS4Ez
if文で、$a,$b,$c,$d,$e の中に 0の数字が4つ入っていた場合と 指定したいんですが、 どうやれば良いのか、教えて下さい。
if(&{sub{my $count=0;foreach(($a,$b,$c,$d)){if(m/0/){$count++;}}return $count==4;}}){ #.. }
>>625 ${ARRAY[$index]->{$key}} は $ARRAY[$index]->{$key} と同じ。
だからダメな理由なんて何も無い。
疑問に思ったら自分で確かめてみようね。
ちなみにその{}はデリファンレンスの為の構文。
リファレンスは便利だから、ちゃんと知ったっておいたほうがいいよ。
# というか、そんな奇怪な構文があったなんて知らなかった…
>>626 なんか二行目から三行目への文の流れがおかしいよ。意味がわからない。
投稿する前に文を見直したほうがいいよ。
>>627 どういう結果期待してるの?
・4つの 0 が入っている変数を全て知りたい
・どれでもいいから、入っているかどうか知りたい
@poo = ( $a, $b, $c, $d );
foreach ( @poo ) {
print "Found.\n" if ( /0{4,4}/ ) ;
}
print grep( /0{4,4}/, ( $a, $b, $c, $d ) ); これでもいけるだろ。
質問者の日本語がおかしすぎる
>>1 の
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:こんなエラーが出て上手く行かなかった。
これを示してくれ。最低でも
1: 自 分 は こ う 言 う 事 が し た い。
って事をはっきりと解りやすく書いてくれ
1: 自分はこのスレをかき回したい 2: それで意味不明な質問を書き込んでみたが、 3: スルーされてうまくいかなかった
>>625 @tmp = sort { (${ORG[$a]->{adanaid}} <=> ${ORG[$b]->{adanaid}}) } 0 .. $#ORG;
ここ
@tmp = sort { $_[$a]->{'adanaid'} <=> $_[$b]->{'adanaid'} } @ORG;
のほうがよかないか?
635 :
634 :03/07/14 20:49 ID:???
>>625 あと、続きもこうなるな・・・
foreach (@tmp) {
print 'person='. $_->{person}. "\n";
print 'adana='. $_->{adana}. "\n";
print 'adanaid='. $_->{adanaid}. "\n";
}
取敢えず、リファレンスの使い方がおかしいということで・・・
sortの書き方からして、ド素人のコード。
何もやらずにツッコミだけして去る方が恥ずかしいと思うけどな
なんでそんなこと書くのかなぁ… って思ってたら間違いに気づいた。 @tmp = sort { $a->{adanaid} <=> $b->{adanaid} } @ORG; それと、 ${ARRAY[$index]->{$key}} についてだけど。これは、${hogehoge}の発展形で、 文字列をデリファレンスした時のことを言うソフトリファレンスだとも言えるけど、 Perlのマニュアルには、曖昧さをなくすためのものです。って書いてあるから、 その、デリファレンスという言い方は少しおかしい。
う〜ん。確かにその式では{}はデリファレンスと直接は関係ないね。 他に適当な言葉が思いつかなかったからさ。 それにしても ${ARRAY[$index]->{$key}} ってよく使われるんだろうか? 一瞬なにやってるのか分からなかったよ。
そうせざるを得ない時しか括らないなぁ。
全部推測で書いたんだけど、、、 そもそも、その書き方は正しいのだろうか…
あ。OKだった。
粘着か...
646 :
nobodyさん :03/07/15 01:22 ID:m9/vaFbn
粘着としかいえないヴァカはけーん 早くも夏房の季節ですか(プゲラ
アクセス者のプロバイダ名を取得しようとしています。 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を触って、まだ間もない者ですが、宜しくお願いします。
($a, $b) = $HOST =~ /\.([^.]+)\.([^.]+)\.jp$/;
649 :
647 :03/07/15 06:37 ID:???
>>648 おおお……しかもご親切なことに、$bの中には!
([^.]+)の部分、1週間近く悩んでも、自分で書けなかったんです。
正規表現の勉強が、まだ全然足りていないようです。
今も、書いて下さった部分を、首っ引きで調べています。
2つの()でグループ化しておいて、$a, $bで参照しているんだな、という
所まではわかりました。$1や$2でなくても大丈夫なんですね。
[^.]+は…任意の一文字以外の文字列の、一回以上の繰り返し…でしょうか(自信なし)。
ともあれ、ここから先は、自力で調べることにします。
本当にありがとうございます。
>>649 > [^.]+は…任意の一文字以外の文字列の、一回以上の繰り返し…でしょうか(自信なし)。
ちょとちがう。
がんがれ。
オレも某超有名入門サイトで覚えたから、最初、[ ](文字クラス)いまいち理解できなかったなぁ。
[] は perl でもなんでもないんだけどな…。正規表現スレ行けば?
__∧_∧_ |( ^^ )| <寝るぽ(^^) |\⌒⌒⌒\ \ |⌒⌒⌒~| 山崎渉 ~ ̄ ̄ ̄ ̄
654 :
nobodyさん :03/07/15 12:25 ID:BbnXwsym
age
メモリが256MBのマシンで500MBくらいのcsvデータを先頭の数字に よって行単位でソートをかけるときはどういうやり方がありますか?
普通に
500MBのCSVデータっていうのが、もはや現実的じゃないな…… そういうデータは他のソフトでも普通に処理できるのだろうか。
500MBもあったらローカルPC上でアプリでやっても果たして・・・
Excelなんかはさっくり死にそうだな。 とりあえずRDBか何かに置き換えることをお勧めするよ。 そうじゃなくて、このCSVファイルを処理すること自体が目的だとしたら…… 先頭要素、ファイルポインタ、行サイズあたりを記録していって2パスで処理とか?
>>655 open CSV, '<' . $file or die;
my @line;
{
my $pos = 0;
while (<CSV>) {
/^(\d+)/;
push @line, "$1\t$pos";
$pos = tell;
}
}
for (sort { $a <=> $b } @line) {
/(\d+)$/;
seek CSV, $1, 0;
print scalar <CSV>;
}
662 :
atom :03/07/15 17:12 ID:3ahZXwjC
HTMLのタグを削除したいんですが、上手くいきません。 $tag =~ s/\<.*>$//g で置換すると あああ<B>いいい</B>が あああになります。 これを あああいいいと変換したいのです。
Jcode.pmを使い配列内の値全ての文字コードを一回で変換するには どうすれば良いのでしょうか。 Jcode::convert(\@file,'utf8'); とかやったのですがやっぱりダメなようで…。
Jcode::convert(\$_,'utf8') foreach @file;
Jcode::convert( *file, 'utf8' );
>>662 $tag =~ s/\<.*?>$//g
>>668 まぁ細かいこと言うと、
<IMG SRC="xx" ALT=">">
で失敗するけどね。
>>670 前にHTML4.01見て、アリなのを確認した記憶がある。
3.2は多分アリだろうし。
ちょっとうろ覚えだけど。
>670 <IMG SRC="xx.gif" ALT="がんばった!o(>_<)o"> これなら納得いくか?
674 :
673 :03/07/15 23:21 ID:???
あ、なにいってんだ自分、 htmlspecialchar ってPHPの関数だったw
あぼーん
あぼーん
>677 プログラマは、ユーザーが「想定外」の操作をする事も念頭においてプログラミングをしなければならない。 これ、プログラムの基礎。
ユーザはプログラマがどんなに対策しても想定した以外の操作をする
680 :
nobodyさん :03/07/16 00:54 ID:GrzUswHS
質問です Perlで動かすCGIの掲示板みたいな物を参考書片手に作ってるのですが プログラム自身が新しくディレクトリーやファイルを作る方法を探してます。 色々頑張ってディレクトリーは mkdir $setdir,$setpm; で作れるのですが その作ったディレクトリーの中にプログラム自身でファイルを作成する方法が よく判らないのです。 検索してみた所【touch】なるコマンドが出てきたのですがうまく作動してくれません 根本的に間違ってるのか、困り果ててます。 なにかヒントだけでもお願いします。
open(FILE, '> ./hoge/fuga');
>>678 プログラマ=ユーザーの場合でもですか?
>682 100%入力ミスをしない自信があるんならいいんじゃない?
<B>が消えねー! って文句いうユーザー入るんだろうな・・・
何か質問しろ
>>686 openでファイルを開いた後に書き込む方法を教えてください。
691 :
655 :03/07/16 11:26 ID:???
>>661 ありがとう。きれいなコードですね。
実際の処理は
>>655 で書いたのと違い、
ちょっとごたついているんですが、
ファイルポジションを確保するやり方を使うことにします。
比較対象フィールド(複数)の保持だけなら
今回はメモリの制約にかからないので。
これは個人的な質問ではありませんが、
もし比較対象フィールドを確保しようとするだけで
メモリの制約にかかる場合は、どういうやり方が考えられるでしょう?
>>686 さん
692 :
nobodyさん :03/07/16 11:47 ID:iP2fRAb3
自作CGIをwebで使用したいのですが プロバイダはCGIの動作を見てから 使用許可を出すと言っています。 それで自宅サーバー構築を思い立ったのですが 自宅ではテスト環境が出来たんですが 先方に見せる事が出来ないんでしょうか。 CATVでプライベートIPアドレスとやらなので、 自宅サーバーを公開できない様ですが、本当ですか? CGIテスト環境を貸してくれる所とかあるんでしょうか? 結構行き詰まってます。宜しく...。
自力でメモリマップドファイルみたいなもんを構築してそこで処理するとか。
>>693 は
>>691 へのレスね。
>>692 動作確認する必要があるというなら、向こうでやってくれるんじゃないの?
どっかに置いてあるのを外から見ただけじゃ何もわからんと思うんだが。
>>692 そんなことはプロバイダと打ち合わせしてくれ
それにスレ違い
>>692 このスレで”CGI”という単語を書けるはずが無い。一回死んで来い。
697 :
692 :03/07/16 12:32 ID:iP2fRAb3
初心者質問と書いてあれば、何でも受け付けるとでも思ってるのか。 そのうちお菓子作りの質問とかも来そうだな。
>697 お前は初心者質問と書いてあったら、「801初心者質問スレ」でもCGIの質問をできるのか? 寝言は寝て言え。
701 :
nobodyさん :03/07/16 15:23 ID:F4EDEscp
push(@hoge,[@array]); こうしたら、@hogeには@arrayのリファレンスが入ったんですけど、 [@array]って書き方は一体なんでしょうか。
>>701 [ ] は無名配列生成子。
@array のリファレンスを返しているのではなく、
(@array) というリストを生成し、そのリファレンスを返す。
[ ] { } sub { }
704 :
701 :03/07/17 09:21 ID:VmbYvhJN
無名配列生成子というんですか。 配列の中に配列を入れたいのですが、 sub makeArray{ @array1 = ("あ","い"); @array2 = ("か","き"); push(@arrayRef,[@array1]); push(@arrayRef,[@array2]); return(@arrayRef); } @arrayRef = &makeArray(); for($i=0;$i<@arrayRef;$i++){ foreach (@{@arrayRef[$i]}){ print "$_\n"; } } これで間違いや非効率なところはありませんか? push(@arrayRef,@array1); push(@arrayRef,@array2); 初め、こうやったら、@arrayRefはただの1個の配列になってしまって、"あ","い","か","き"が入ってしまったので、 なんかてきとうに[]とか付けたら偶然できたんですが。
要素数にもよるが、 push(@arrayRef,[@array1]); push(@arrayRef,[@array2]); だと、無名配列を"生成"するプロセスが入るから、 push(@arrayRef,\@array1); push(@arrayRef,\@array2); としたほうが早いね。 あと、 foreach (@{@arrayRef[$i]}){ は一応動くけど foreach (@{$arrayRef[$i]}){ が正しい。 あと、変数は基本的に局所化しようぜぃ。 特に同じ変数名引き回すなら、思わぬ動きをする可能性大。
いっそ sub makeArray{return (['あ','い'],['か','き']);} とか
707 :
nobodyさん :03/07/17 10:46 ID:AZTCTrFH
> あと、変数は基本的に局所化しようぜぃ。 use strict; すれば良いかと。これやって大域変数の使用を極力抑えれば バグの入る余地をかなり減らせると思う。
>>706 さらにもう一声
@arrayRef = (['あ', 'い'], ['か', 'き']);
とサブルーチンをとっぱらってみるとか…
グローバル変数が気軽に使えるのがperlの利点なのに
そうかい?メモリは消費するし遅くなるしあまりいいとは思えないが
711 :
nobodyさん :03/07/17 13:35 ID:AZTCTrFH
>>709 使い捨ての書き捨てコードだったら俺もグローバル使いまくるけど、
大きいソースになったらバグが出やすいし保守しにくくなるよ。
あぼーん
713 :
:03/07/17 16:50 ID:MTBsKFuL
『こんにちは(改行)私の名前は太郎です。』と表示したいのですが。。。 #!/cygwin/bin/perl print <<end; content-type: text/html <html> <body> こんにちは<br> 私の名前は太郎です<br> </body> </html> end と入力し、IEで見てみると、『ページを表示できません』と出ました。どうすれば表示できるのでしょうか? 初心者で申し訳ないです<(_ _)>
>>713 あなたの環境は?
> と入力し、
どこにどうやって入力したのか?
> IEで見てみると
どこを見たのか?
あまりに情報不足で答えようがありません
> #!/cygwin/bin/perl この辺おかしい気がするんだが?
パーミッションは?
cygwinってなっててパーミッションはないだろ
cygwinだけでhttpdを入れていないに1票
721 :
nobodyさん :03/07/17 18:50 ID:m6zrRyqW
質問です。 Perl、それもバージョン5.80以下で、 モジュールを使わずに、つまりライブラリで、 eucからUTF-8への変換をするにはどうしたら良いでしょうか?
> モジュールを使わずに、つまりライブラリで、 モジュールだってライブラリなわけだが…
モジュールとライブラリの集合の関係が判らない
ライブラリだってモジュールなわけだが…… あれか、標準ライブラリと言いたいのか?
>>713 content-type: text/html の後に
\n\n わすれちょる・・・
とかマジレスしてみる・・・
>725 ヒアドキュメントで2個分の改行が入ってるから無問題だろ とかマジレスしてみる
content-typeって大文字小文字とか区別しないのか?
以前こちらで相談し、スクリプトを作成しました。 パラメータファイルに書かれたファイルを削除するものです。 ファイル名*に対応できなかったので下記のように書き直して テストでは問題なく成功したのですが 本番機ではなぜか一部のファイルを削除できずに 1を返して異常終了してしまいました。 原因や修正箇所を教えていただけませんか? #! /usr/bin/perl while (<>){ ($cmd_para) = split;#パラメータファイルより確認対象取得 unless(unlink< $cmd_para >){#ファイルの削除 exit(100);#ファイルが削除できなければ異常終了 } } exit(0);#上記以外正常終了
>>729 $!でエラー内容取れない?
エラー内容がわからんと……
>>730 即レスありがとうございます。
そうですね!
シェルから実行していてログみると
1で終了してるんですけど、
このスクリプトで1で抜けるってのが
ありえるのかと…
質問したのに情報欠けてますね。
もう一度調べて直して再度質問させてください。
宜しくお願いします。
732 :
nobodyさん :03/07/17 21:42 ID:CeuxGVu0
あぼーん
>>732 RFC読めるようになってからまた来て下さい。
735 :
nobodyさん :03/07/17 21:56 ID:CeuxGVu0
>>735 なんか知らんが嫌なことでもあったのか?
>735 「>725の間違いでした」とでも言っておけばよかったのに。
738 :
nobodyさん :03/07/17 22:08 ID:CeuxGVu0
>>736 うん。今日はパパンにレイプされたちゃったんです
740 :
nobodyさん :03/07/17 22:13 ID:CeuxGVu0
悪乗りも程ほどに
しっ。本人は人気者のつもりなんだから。
743 :
nobodyさん :03/07/17 23:16 ID:FCw7NcrO
がいうdぎうあsdんbをじぇわ あだkdsんdlsdなksんだlんdさldあんだ だdささ 藻前らアフォすぎ
あぼーん
@hoge = qw(a b c d e); という中身の配列データを、 a(改行) b(改行) c(改行) d(改行) e(改行) となるようにファイルに書き込ませたいのですが if(!open(OUT,">$file")){print "ファイルが開けません";} print OUT @hoge; close(OUT); としても、ファイルには「abcde」と改行無しで一行にまとめて書き込まれてしまいます(´・ω・`)ショボンリ そこで、 if(!open(OUT,">$file")){print "ファイルが開けません";} print OUT ""; close(OUT); と、一回中身空っぽにして if(!open(OUT,">>$file")){print "ファイルが開けません";} foreach(@hoge){ $value = $_ ."\n"; print OUT $value; } close(OUT); と、追加書きさせるようにしてるんですが、はっきりいって無様な感じがします(´・ω・`) こういう手段しか無いのでしょうか・・・
746 :
745 :03/07/18 03:27 ID:???
あ、なぜ一度空っぽにするかというと、 CGIのゲームのデータを記録するファイルなので、前のデータを残しておけないからです。 なにかいい方法があったら教えてください。よろしくおながいします。
747 :
nobodyさん :03/07/18 03:33 ID:NVnSzVH0
>>745 if(!open(OUT,">$file")){print "ファイルが開けません";}
print OUT join("\n", @hoge, "");
close(OUT);
こうか?
748 :
745 :03/07/18 03:59 ID:???
>>747 うわー バッチリです
ありがとうございます
たった3行にまとまるなんて・・・ヒデキ感激(つД`)
>>748 それの注意点としては一番最後の行には改行がつかない点。
最後に改行つけたければ
print OUT join("\n", @hoge, "")."\n";
とか
foreach(@hoge){print "$_\n" ;}
750 :
745 :03/07/18 04:26 ID:???
>>749 そうでしたか。
でも、もう一度ソースを見直したところ、
最後の行には改行なくても大丈夫だということがわかりましたので
今回は
>>747 を使わせていただきます。
重々(ー人ー)多謝
751 :
nobodyさん :03/07/18 11:17 ID:7SO5ZUkT
$message = qq|こんにちは\n|; qq||; こういう書き方なんていうんですか。
752 :
nobodyさん :03/07/18 11:28 ID:NVnSzVH0
>>749 > それの注意点としては一番最後の行には改行がつかない点。
つくよ。それはちゃんと考えてある。
> print OUT join("\n", @hoge, "")
そのために配列に空要素を加えてるわけで・・・。
753 :
nobodyさん :03/07/18 11:29 ID:gzS3zVXD
ダブルクオート文字列
あぼーん
756 :
nobodyさん :03/07/18 12:15 ID:NVnSzVH0
>>745 解決したのはいいんだが、
自分で考えた案の方は、何故一度空にしてから追記で改めて書き込むような
処理になっているのかが気になる。
>>757 確かにあの発想は不思議だな
理由を聞いてみたいものだ
>$fileで開いて、配列が空の場合にforeachがそのまま抜けるので
何も書き込まないから内容が前のままになると勘違いしていた、と推測してみる。
と思ったけどそれならforeachの前にprint OUT ""挟むか。
やはりわからん。
と思ったら
>>746 に書いてあったw
やはり↑の推測でよかったのか。
#ちなみに>$fileで開いた時点でファイルは空になる。
760 :
nobodyさん :03/07/18 13:53 ID:50GDA6Bl
そそ、開いたらからになるんだよね・ 俺も、それでいろいろとまどったこともあった
761 :
745 :03/07/18 18:44 ID:???
ファイルに a1 b1 c1 d1 e1 と書き込まれているとして、これを a2 b2 c2 d2 e2 と書き直したいんです。 if(!open(USER,">>$user_dir$FORM{'id'}.dat")){print "ユーザーファイルが開けません";} foreach(@user){ $value = $_ ."\n"; print USER $value; } close(USER); とするだけだと a1 (略 e1 a2 (略 となってしまうので、いったん空っぽにしてた訳です。(´・ω・`)ナンカ ヘン?
762 :
745 :03/07/18 18:48 ID:???
if(!open(USER,">$user_dir$FORM{'id'}.dat")){print "ユーザーファイルが開けません";} foreach(@user){ $value = $_ ."\n"; print USER $value; } close(USER); ぐはっ、これでも逝けたのか… (o_ _)o ヽ(゚∀゚) アヒャヒャヒャヒャ ドンマイドンマイ
763 :
nobodyさん :03/07/18 20:19 ID:Y8wtPXEB
番号 歴史 世界史 合計 1 50 10 60 2 60 80 140 3 10 60 70 これを各項目別にソートしたいです。 思いついたのは $d[0][0]→1 $d[1][0]→0:50 $d[2][0]→0:10 $d[3][0]→0:60 $d[0][1]→2 $d[1][1]→1:60 $d[2][1]→1:80 $d[3][1]→1:140 $d[0][2]→3 $d[1][2]→2:10 $d[2][2]→2:60 $d[3][2]→2:70 多次元配列に入れる 歴史の順でソートする場合 sort(@d[1])←ここは自信ないです(d[1]の中をソートしたいんです) foreach(@d[1]){ ($num,$data) = split(/:/); print "$d[0][$num]","$_","$d[2][$num]","$d[3][$num]"; } と言う方法です。各要素に、はじめの添え字を記録して、それをsplitで分解して、それを添え字にする、とい方法ですが、 これは、かなり無駄な気がします・・・ もうすこしきれいなのはありませんか?
764 :
nobodyさん :03/07/18 20:29 ID:Y8wtPXEB
あ、だめですね ×0:50 ○50:0 こうかえないと、ソートできませんね
連想配列の項目別にソートしたほうが解りやすくないか?
766 :
nobodyさん :03/07/18 20:35 ID:Y8wtPXEB
>>765 えと、それだったら
バブルソート使わないとだめっぽくないですか??
というか、ハッシュがソートされると、添え字がどうなるとかわからないんですけど・・・
値を比べて、添え字と値が対でソートされるんですか?
大人の男だけ
ANHTTPD使ってますか?
769 :
nobodyさん :03/07/18 21:31 ID:bi1QsuUD
友達から聞いた話で、多分デマだとは思うのですが、 $test =~ m/$pataann/; こんな感じで正規表現パターンを変数化することなんて 無理ですよね?
>>769 やってみりゃいいだろ。
つーか、もう余計な部分まで答えてやる。出来る。
そして$patternの中身がそのまま正規表現パターンとして使われるから注意な。
$pattern = "a.";
なら"aa"や"ab"にもヒットする。
これを文字通り"a."にヒットさせたい場合は
$pattern = "a\\.";
としてやる。
さもなくば
$pattern = quotemeta($patter);
としておくとか、
$test =~ m/\Q$pattern\E/;
などとしろ。
いいか、pataannじゃなくてpatternだぞ!
>>761 open USER, '+<' . "$user_dir$FORM{'id'}.dat"
or error('ユーザーファイルが開けません');
my %data;
while (<USER>) {
/^(.)(.)$/;
$data{$1} = $2;
}
foreach my $key (keys %data) {
$data{$key} += 1; # a1 を a2 へ
}
delete $data{'e'}; # データを元より短くする実験
seek USER, 0, 0;
print USER "$_$data{$_}\n" for sort keys %data;
truncate USER, tell USER;
close USER;
>>763 my %column = ('歴史' => 1, '世界史' => 2, '合計' => 3);
my @score = (
[ 1, 50, 10, 60 ],
[ 2, 60, 80, 140 ],
[ 3, 10, 60, 70 ],
);
my $column = $column{'歴史'};
print join ' ',
map $_->[0],
sort { $b->[$column] <=> $a->[$column] }
@score;
>>770-772 たしかに、できた、な、、、
俺に負けを認めろ、というのか?
ぜってーできねぇと思っていたのに
スミマセンデシタ
( ) ( ) /ノノ"\ヽ ) 从*゚ー゚从 〜 /゙゙゙lll`y─┛ ノ. ノノ | . `〜rrrrー′ . |_i|_(_ 落ち着け。
>>763 あまり関係ないけど、おいらならこんなデータ構造にしますな。
@score = (
1 => {
'歴史' => 10,
'世界史' => 50,
},
);
合計は計算する。
There's more than one way to do it.
番号 歴史 世界史 合計 1 50 10 60 2 60 80 140 3 10 60 70 随分と成績の悪いやつばかりですね
番号 歴史 世界史 算数 合計 4 90 85 5 190
つーかさ、 「これ(・・・コードの羅列・・・)って出来るんですか?」 って聞くやつってどういう思考回路してるんだ? 俺様がわざわざ試すのは面倒だから下々の暇そうな2chの 馬鹿どもにやらせておこうって考えなのかな?
print "$a+$b"ってできますか?
>>782 無理です。パールを動かしてるインターネットが暴走してCGIがフリーズします。
マザーコンピュータが反乱を起こして日本列島が沈没します
燃料を補給してくれてるんだろ
789 :
nobodyさん :03/07/19 02:39 ID:xDnFfAsd
〜を含まないっていうパールって あったら教えてください。素人質問で 申し訳ありませんが。
792 :
nobodyさん :03/07/19 03:42 ID:xDnFfAsd
>>790 有難うございました。
ただ良く理解できません。
例として、3と4は含むけど5は含まない
というのを教えていただける人がいれば、
よろしくお願いします。
794 :
nobodyさん :03/07/19 04:09 ID:xDnFfAsd
>>793 分からないなら分からないって言ってね。
3と4を含むが5は含まない
-> 3と4を含み、かつ5は含まない
-> 3を含み、かつ4を含み、かつ5を含まない
実際にperlで表現する方法は
>>790 で既出なので略。
上の仕組みが分からない時は「集合」の勉強をしちゃってください。
「論理和 論理積」でググればいっぱいヒットします。
こんだけ丁寧に書けばもう問題ないでしょう。てことで次の質問者の方どうぞ。
>>796 やーだからね、仮にそういう質問の意図だったとして、
それが配列の要素に対しての話なのか文字列の部分に対しての話なのか、
条件判定の話なのか、ついでにそもそもPerlSyntaxの中で話なのかどうかすら、
何が何だかさっぱり分からんでしょ。
そもそも
>>789 や
>>792 からそういう解釈を導き出すのも無理あるし。
というわけで次の質問者どうぞ。
こないだ、他人がつくっったプログラムの改修たのまれたんですが、 それみたら、そのスクリプト(もちperl)が、 商品を管理者画面から登録する際、 インデックスファイルみたいなものに、連番と商品名だけCSVで持たせて、 商品の詳しい内容は、 別のフォルダ「商品名」(もち日本語)っていうファイルを作らせて、 (たとえば、「ThinkPad1200特売品」とかいうファイル名) で、「ThinkPad1200特売品」っていうファイルの中に、「<>」区切りで、 商品名の詳細がかいてあるんです・・・ 自分、仕事としてperlをやりはじめたのがまだ1ヶ月だから、 わからないんだけど、こういう組み方って、アリなんですか? それとも異常? perlお仕事歴長いかた、教えてください。
799 :
798 :03/07/19 09:25 ID:???
1個typoしてますた >別のフォルダ「商品名」(もち日本語)っていうファイルを作らせて、 じゃなく 別のフォルダの中に「商品名」(もち日本語)っていうファイルを作らせて、
目の前に存在してるんだから、アリだろう。
仕事としてperlをやりはじめて2ヶ月のやつが作ったのだろう
802 :
798 :03/07/19 11:07 ID:???
>>798 ネットショッピングかな?
商品登録だけじゃなくて、販売とか在庫管理まで考慮して
ファイルを設計する必要がある。
他の部分がどうなってるのか分からないけど、
商品詳細情報を個別のファイルにしておくと、
商品番号から詳細情報を表示するリクエストがあったときに
「全商品詳細情報ファイル」を読んで検索して表示するより速い。
内容に不備・誤記があったときの訂正も楽。
完売したらインデックスファイルの該当個所だけ変更すればよい。
目的に合わせてファイルを分けるのは異常ではなく当然。
Perl というよりデータベース設計の問題だと思われる。
804 :
798 :03/07/19 17:38 ID:???
>>803 なるほどー、そういう利点があるんですね。
それは、すごく初耳だったので、勉強になりますた。
>販売とか在庫管理まで考慮してファイルを設計する必要がある。
これをつくった人は、
そこまでは、なにも考えてないみたいです。
ショッピングカート経由で注文があったらメールがいくだけみたいな。
>完売したらインデックスファイルの該当個所だけ変更すればよい。
っていう機能を管理者画面につけてないみたいですしね。
>>804 将来的な機能追加を見越した設計だったのかもしれない。
メールを送るだけだからファイル管理だけで充分だけど、
単一ファイルじゃ拡張しにくくて気持ち悪いとか。
ある程度の規模や機能に達すればファイルでなくて本格的な
データベースを導入することになるんだろうけど。
>そこまでは、なにも考えてないみたいです。
在庫管理するかどうかのプログラマに決定権があったとは思いにくいなぁ。
単に初回作成時は、依頼主の予算やショッピングサイトの来客数の見込みから
簡単に済ましただけかも知れない。
実店舗がある個人商店の片手間なショッピングサイトとかなら、大枚はたいて初っ端から
大掛かりなシステムは依頼できないっしょ。
806 :
795 :03/07/19 19:53 ID:???
(´・ω・`)<俺、日本語が不自由なんだよ…。
810 :
nobodyさん :03/07/20 00:14 ID:gCjTktSy
掲示板のcgiファイルに「ー」を記載すると アップ出来ないみたいなんですが、 どうしても表示したいので、やり方を教えて下さい。 \で囲んだりしても駄目だったので。 例えばクーラーを表示する場合とか。
\Qー\E
アップできないわきゃーないだろう。FTP送信時にエラーでも出るの? 質問は正確にね。
>>810 エラー文面も載せてもらえるといいな。
FTPだとしたら取れないかな?
「クーラー perl 文字コード」でぐぐれば幸せになれるかもね。
814 :
nobodyさん :03/07/20 09:35 ID:XGlmJStz
テキストファイルtestfileで、上一桁が同じなら、最初に現れる行だけを 残した別ファイルdatabaseを作りたいのです。 具体的には、 a:xxx b:yyy a:zzz から、3行目を削除して a:xxx b:yyy としたいのです。 そこで、正規表現とDBMハッシュの勉強を兼ねて、次のスクリプトを作って みました。 dbmopen(%DB, "database", 0666); open(IN, "testfile"); while (<IN>) { if (/(\w):(.*)/) { $DB{$1} = ":" . $2 unless exists($DB{$1}); } } 実行すると、 AnyDBM_File doesn't define an EXISTS method というエラーメッセージが出ます。 DBMハッシュにexists関数は使えないのでしょうか? どなたか、ご教示ください。 (exists($DB{$1})ではなく、$DB{$1}にすれば良いのですが、 existsを使ってみたかったのです。)
>>814 dbmopenじゃなくtieを使えば?
>>814 dbmopen()ってのは"幾つかのDBMライブラリのうち使えるものを使う"という仕様なので、
実際にどんな操作が可能かはそのDBMライブラリに実装によるんだよ。
で、困った事に大抵のUnixでのデフォルトであるNDBM_FileはEXISTSが(現時点では)実装されていないんだよね。
とりあえず、dbmopen()を使う前に、例えば"use DB_File"や、"use SDBM_FIle"などと
他のDBMモジュライブラリルを使う事を明示すればいいかな。
dbmopen()はAnyDBM_Fileをtie()するだけの関数なので、
perldoc AnyDBM_Fileとperldoc -f tieも参照されたし。
dbmopenは、Perl4時代の遺物。
>>815 の言うようにtie使え
818 :
814 :03/07/20 13:18 ID:XGlmJStz
>>816 「実際にどんな操作が可能かはそのDBMライブラリの実装によるんだよ。
で、困った事に大抵のUnixでのデフォルトであるNDBM_FileはEXISTSが(現時点
では)実装されていないんだよね。」
良く分かりました。どうも有り難うございます。
>>815 ,
>>817 私は「初めてのPerl」を読み終えたばかりの初心者です。タイ変数については
これから「プログラミングPerl」で勉強します。
while( 1 ) { ・ ・ ・ } …の部分はかなり大きな処理で、ループの上に戻ってくるまでに 時間がかかるスクリプトがあります。ループの上に戻ってきた時に スクリプトの自分自身をリロードするような事ってできますか? 何故こんな事したいかと言うと、ループの上に戻って来る前に、 スクリプト修正とか入ると、一旦スクリプトを終了しないといけないので リロードできないものかと…。因みに、 while の前後にも処理があります
リロードしたら最初からやるのと同じだろ
ループの上?
822 :
闇主 :03/07/20 18:40 ID:???
>>819 スクリプトファイルを変更しても
既に動いているプロセスのコードは変わらない。
変更後のスクリプトによる別プロセスを立ち上げ直す必要がある。
何でそんなことがしたいのかは置いといて。 while内のコードを別ファイルにして、ループ内で毎回読み込んでevalブロックの中で 実行させるというのはどうだろう。
>>823 確かにそのやり方でも可能だな。
処理にもよるが重いだろうな。レンタル鯖でやるのはどんなもんだろうか。
>>824 while(1)の時点ですでに終わってると思うけどね・・・・
レンタル鯖で動かすって誰が言ってるんだ? Perlと言えばCGIしか思いつかないのか。
>826 おまいさん、この板はWebProg板ですよ? ム板と勘違いしてる?
鯖にもいろいろあるわけで。。
>>827 うひゃあ。思いっ切り勘違いしてました。スマソ
俺もたまにム板と勘違いするから心配すんな。 向こうで正規表現スレに誘導したの、実は俺。
2ちゃんねるの dat ファイル読み出しスクリプト作ったんですが、ちと、悩んでいます。何故か、gzip 転送されてこないんです。
どこがオカシイか教えてください
#!/usr/bin/perl
use LWP::UserAgent;
use Compress::Zlib;
{
$ua = LWP::UserAgent->new;
$ua->agent( "Monazilla/1.00 ( ´,_ゝ`)プッ/1.0" );
$ua->parse_head( 0 );
$req =
HTTP::Request- >new( GET => $ARGV[0] );
$req->protocol( 'HTTP/1.1' );
$req->header( 'Accept-Encoding' => 'gzip, deflate' );
$req->header( 'Connection' => 'keep-alive' );
print $req->as_string;
# リクエストの送信
$res = $ua->request($req);
# 出力のチェック
if ( $res->is_success ) {
print $res->headers->as_string;
if ( $res->headers->content_encoding =~ /gzip/ ) {
print "圧縮転送された\n";
$t = Compress::Zlib::memGunzip( $res->content );
}
else {
print "圧縮転送されてない\n";
$t = $res->content;
}
}
else { print "Error: " . $res->status_line . "\n"; }
}
>>831 Accept-Encoding:gzip
か
Accept-Encoding:x-gzip
>>832 今、やってみましたが、駄目でした
$req->header( 'Accept-Encoding' => '*' );
にしても、駄目でした。
>>827 cgiは書いたことないが、web用のperlスクリプトは
いっぱい書いてるぞ
>>831 subject.txt以外は今はgzip転送してないのでは?
>>835 subject.txt も gzip 転送されてないようです
そうだっけ。少し前に調べた結果だから変わってるかも。
monazillaスレあたりを読んできたほうが
839 :
nobodyさん :03/07/20 22:57 ID:ucM2tzJ9
簡単な暗号っぽいやつをやっているのですが 例えば $hoge = "\x53\x54\x2d\69" なら \x69\x2d\x54\53 と逆転させてたいのですが どうやってやるのがスマートなのでしょうか? 一応初心者ながら 1バイトずつ配列に読み込んでreverseでやるのを考えてみたんですが・・・
あぼーん
あぼーん
>>839 スカラコンテキストでそのままreverseに入れれば、反転した文字列が得られる。
perldoc -f reverse もしくは「perl reverse」でぐぐる。
843 :
634 :03/07/20 23:40 ID:???
>>831 $req->header('ACCEPT_ENCODING'=>'gzip');
で試してみそ・・・
perl2exeで配布できるようにしたperlのプログラムって ソフトウェアと呼んでもいいの?
少なくともハードウェアではない
>>838 一応、読んで見てきましたが、該当するような記述は見当たりませんでした。
>>843 それをやっても、駄目でした。LWP は何故か
Accept-Encoding: gzip
と、勝手に変更しますね。
まぁ、2ちゃんねる側の仕様が変わったのカナ?
OOPでスクリプトを書こうと思い、せっせとスクリプトを書いているのですが、OOPで書く利点がぜんぜん見当たりません。 強いて言うならば「今風」ってだけです。 いま作っているモジュールが特定のスクリプト専用に作っている為、そういう風に思うのかもしれません。 それとも根本的に考え方が間違ってるのかもしれません。 それすらわからなくなってきてしまって。 OOPで書く利点をお教え頂ければ嬉しいです。 宜しくお願いします。
849 :
ともちゃん :03/07/21 11:44 ID:O4IhS66K
クッキーを取得して、なければ違うページに移動するスクリプトを試しています。
うまくいかなくて最後の3行、$$cook{$key} = $value;}}の最後の所がsyntax errorだと表示されます。
]か}のミスなのだそうです(by CGIROOM・エラーチェック)。
でも、[や{の数とも合っているし、わたしは変だと思わないのです。
どこがどう変なのか分かりますか?
お願いします。
#!/usr/bin/perl
use strict; &main; exit;
sub main{
my $id = "abc
my %cook = ();
getcookie("abc",\%cook);
unless($ENV{'HTTP_COOKIE'} = ~/%cook/){
print "Location:
http://aaa/cookie.html\n ";}
sub getcookie{
my ($id,$cook) = @_;
my %cook = ();
my $cookie = $ENV{"HTTP_COOKIE"};
$cookie =~ tr/+/ /;
$cookie =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2',$1)/eg;
foreach my $x (split ";",$cookie){
my ($key,$value) = split "=",$x,2;
$key =~ tr/ //d; $cook{$key} = $value;}
foreach my $x (split ",",$cook{$id}){
my ($key,$value) = split ":",$x,2;
$$cook{$key} = $value;}}
>>849 my $id = "abc
なんか閉じてないけど。
852 :
848 :03/07/21 12:20 ID:???
>>850 それはある意味正解なのですが、それを言っちゃうと・・・
でもOOPで書きたいんです。
>>849 どうがんばってみても「}」が一個足りません。
気のせいでしょうか?
853 :
ともちゃん :03/07/21 12:31 ID:O4IhS66K
851番さんありがとうございます。 書き写す時のミスでmy $id = "abc";となっていました。<(_ _)> 852番さんありがとうございます。 わたし、下の行ばかり見ていました。わたし馬鹿ですね。 もっと上の行になかったの気が着かなかったです。(^^ゞ 直したらエラーの表示はなくなりましたが、全然動いていないみたいなんです。(;_;)
OOPって要は関数と変数がセットになってるだけだからなあ 単に書き方が違うだけ それが書きやすい訳でも大規模開発に適してる訳でもない 構造化プログラミングの流れは、ソフトウェアの品質向上に 大きく貢献したけど、OOPはそういうのとは別のような
855 :
848 :03/07/21 13:07 ID:???
>>854 実際問題としてperlでOOPな書き方すると、なんとなく直感に反するんですよね・・・
片方でuse strict;して汚染しないようにがんばってるのに、モジュール内では$self->{key}なんかで簡単に読み込めてしまう。
main的にはスパゲティにならないと思うけど、モジュール内ではもうすごい事になりそう。
まだ勉強途中なので、思い切り的外れな考えかとは思いますが・・・
>>853 動くかどうかは分かりませんが、参考までに。
#!/usr/bin/perl
use strict; &main; exit;
sub main{
my $id = 'abc';
my %cook;
if ($ENV{'HTTP_COOKIE'} =~ /$id/i){ %cook = getcookie($id); }
else { print "Location:
http://aaa/cookie.html\r\n\r\n "; }
}
sub getcookie{
my %cook;
my $cookie = $ENV{"HTTP_COOKIE"};
$cookie =~ tr/+/ /;
$cookie =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2',$1)/eg;
foreach (split /;/, $cookie){ my ($key,$value) = split /=/; $key =~ tr/ //d; $cook{$key} = $value; }
foreach (split /,/, $cook{$_[0]}){ my ($key,$value) = split /:/; $cook{$key} = $value; }
%cook
}
>>855 OOもオブジェクト間の関連とか考え出したらぐちゃぐちゃになります。
クラス作るのがOOとほざいているのならば今すぐ去ね。
OOならオブジェクト指向の略だって知ってるんですけど、 OOPって? オブジェクト指向プログラミングの略?
858 :
848 :03/07/21 13:31 ID:???
>>856 そうですか。
オブジェクト間はいくらでも絡まっていいけど、それが外からカプセル化して見えないようにすればいいと。
ますます難しくなってきました。
>>587 です。
>>848 もっと簡単に考えれ。
リファレンスでアクセスするサーブルーチンて具合に。
activeperl5.6.1以降はperl/tkをインストールする必要はなくなったの?
861 :
848 :03/07/21 14:04 ID:???
>>859 ありがとうございます。
本を読めば読むほど、サイトを見れば見るほどわからなくなってました。
基本に戻ってがんばってみます!
sub new{ my ($member1,$member2,$menber3); my $this={ func1 => sub{$member1++;print "${member1}func1\n";}, func2 => sub{$member1++;print "${member1}func2\n";}, func3 => sub{$member1++;print "${member1}func3\n";}, }; return $this; } my $obj=new(); $obj->{func1}->(); $obj->{func1}->(); $obj->{func2}->(); $obj->{func3}->(); 見たいにC++のprivateメンバーみたいなのも作れる。 protectedは作れなさそうだけど。 通常のprelのOOPと組み合わせることも出来るだろうし。 通常の方法以外のOOPを考えてみた
サブルーチンへの引数渡しについて質問。 #!/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 を分ける方法は上記の様なコードで正しいでしょうか?
>>848 OOの考え方ができていればそれなりに利点はある。
責任をはっきりさせるように作れば保守性もあがるしね。
ただ、perlはもともとOOするためのスクリプトじゃないので
OOには不向き。
完璧なOOをしようとしても、いろいろと不都合がでて、結局
ぐちゃぐちゃなソースになってしまう。
ちなみに、モジュール内で
$self->{'key'}でアクセスできるのはOOとして正しい。
Javaでもthis.keyとかってアクセスできるしね。
ただ、問題なのがモジュールの外からでも
$object->{'key'}でアクセスできちゃうこと・・・・・
まぁ、所詮perlなのでその辺はあまり深く考えないほうがいいっす。
>>864 どうなんだろう?うまくいくならいいんじゃない?
もれだったら以下のようにする
foo($b,@a);
sub foo {
my $b = shift;
my @a = @_;
・・・・・
}
もしくは
foo(\@a, $b);
sub foo {
my $aRef = shift;
my $b = shift;
my @a = @$a;
・・・・・
}
引数で渡した値はすべて@_に詰め込まれるので
確か
sub foo{
my @a = @_:
した時点で、$bも@aに入っちゃう気がする・・・・
867 :
848 :03/07/21 14:54 ID:???
>>865 >$object->{'key'}でアクセスできちゃうこと・・・・・
やっぱりこれが納得できなかったんですよ・・・
でもかなりなぞが解けてきました。
後はいかにOOPっぽく書くかだけです!
勉強になりました。
>>864 私も@aと$bは逆にします。
ちなみに確か$bはソートの時に使う変数なのであまり使わないほうがいいかもです。
俺はこっちを使うな foo($b,@a); sub foo { my $b = shift; my @a = @_; ・・・・・ }
>>866 >>868 即レスありがとう。
my $b = shift;
my @a = @_;
がスマートですね。こっち使います
870 :
ともちゃん :03/07/21 15:33 ID:O4IhS66K
855番さん、わたしのためにありがとうございます。 > 動くかどうかは分かりませんが、参考までに。 > #!/usr/bin/perl > use strict; &main; exit; 〜 色々変更したのですが、残念ながら動かなかったんです。(T_T) なので、その前にセットできているか確かめてみました。 そしたら、書き込めていないらしいのです。 #!/usr/bin/perl use strict; &main; exit; sub main{my $id = "abc"; my $value = "def"; print "Set-Cookie: ".setcookie($id,\$value); print "Content-Type: text/plain\n\n"; print "Welcome !";} sub setcookie{ my ($id,$cookie) = @_; my $expires = ""; my $day =""; $$cookie =~ s/([^\w ])/'%'.unpack('H2',$1)/eg; $$cookie =~ tr/ /+/; if ($day > 0){ my ($mday,$month,$year,$youbi) = (localtime(time + (7200))); $youbi = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat')[$youbi]; $month = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')[$month]; $year += 1900; $mday = sprintf("%02d",$mday); $expires = " expires=$youbi, $mday-$month-$year 00:00:00 GMT";} return "$id=$$cookie;$expires\n";} これで書き込めるはずだという事です。 こっちは変じゃないですよね?
>>870 君の頭が変
変っていうかおめでたいね。
できるかできないか実際やってみればいいだろ
ヴォケ!
それで、書き込めなかったらどっか悪いんだよHAGE!
そもそも、Cookieについて理解してるのか???ぁあん(゚Д゚#)
my $day = "";してて
if($day > 0)
ってのがわけわからんけど
873 :
871 :03/07/21 15:53 ID:???
>>874 は?そりゃお前が悪いだけだろ。
3行目にprint $count;を入れてみろ。
>>870 重要なことは、知りたい物をはっきり目に見える形にすること。
やり方はいろいろあるけどね。
>print "Content-Type: text/plain\n\n";
>print "Welcome !";}
の部分を以下に書き換えで、クッキーを見る。
print <<'EOF';
Content-type: text/html
<html><head><title>check</title></head><body>
<script language="JavaScript"><!--
alert("Cookie=\""+document.cookie+"\"");
//--></script>
</body></html>
EOF
}
<script type="text/javascript" と書く香具師は誰もいないのか鬱。
>>877 Perlスレでわざわざ嘆くことでも無かろう。
879 :
nobodyさん :03/07/21 19:57 ID:SiseSbMQ
ネットサーフレスキューの簡易データベースの項目を増やすにはどうすればいいですか?
>>879 このスレは「perlコーディング初心者」の質問スレなので、レスキューやKENT等の
ヘボスクリプトをいじれないウルトラボは経験値上げてから来てください。
ウルトラボ?
884 :
nobodyさん :03/07/21 21:33 ID:7NpeSLR0
連想配列からキーをスカラー変数で指定して 値を取り出すことは不可能でしょうか? $nedan = $F_NEDAN{$name}; これでやってみると $nedanは空でした。
>>884 はいはい、良かったね。氏ねバカ。
print $F_NEDAN{hoge},"\n";
$name = "hoge";
print $name,"\n";
print $F_NEDAN{$name},"\n";
>>884 それはお前がミスしてるだけ。
$nameにブツが入っているのかどうかよく確認しろ。
おまえらイライラすんなって。
>>885 カルシウム タリナイナ (´д)ヒソ(´д`)ヒソ(д` )
891 :
ともちゃん :03/07/22 01:21 ID:U6Ps44rq
871番さん my $day = "";のif($day > 0)ですがif($day = 0)にしました。 でも、my $dayの記述はやめてしまいました。 日時の取得も{}から外に出して時間も取得する事にしました。(^_^)v わたし馬鹿ですから・・・ 876番さん、ありがとうございます。 時間の取得に関係する事は前にも書いたみたいにして クッキーが入っているか試してみましたよ。 abc=defってアラートが出てきたので、書き込まれている事になると思います。 だから、それに対してのクッキーの読み込みの部分がうまくいかないみたいです。 私の最初の書き方がダメだったのかしら・・・(;_;) 855番さんにせっかく教えてもらえたのに〜。 分からなくて困ってしまいました。
めちゃくちゃだな。if($day = 0)
まだやってんのか・・・ cookieの読み書き使ってるスクリプトなんかいくらでもあるんだから、 それでも参考にしたほうが早い
GETしに行って、デッドロックを避ける為に タイムアウトさせたいのですが、 どう書いたらいいですか?
896 :
nobodyさん :03/07/22 08:49 ID:I6YqyoJP
今、htmlファイルを読み込み、そこに新たなデータを付け加えてまたhtmlに書き出すスクリプトを作っています。 $name3 = '../../name.html'; open IN,"$name3"; @UP = <IN>; close IN; $temp = <<"TEMP"; <!--NEW UP--> <div> <p>$date</p> <p>$name1</p> <p>$name2</td> </div> TEMP foreach $upd (@UP){ $upd =~ s/<!--NEW UP-->/$temp/; } open IN, ">$name3"; print IN @UP; close IN; というように書いてみたのですが、name3.htmlに書き出してくれません。 どう書いたら、htmlを書き出してくれるでしょうか?
ActivePerl5.8を入れてPerl/tk使ってみますた。 Dos窓がビロビロと出てくるのが気になりイライラがつのります。 Perl/tkを何に使うおうか小一時間かんがえますた。 答え(妄想してください。): ・・・・・・・・・・・・・
>>896 > $name3 = '../../name.html';
name3.html が定義されていません。
> <p>$name2</td>
</p>がありません。
> $upd =~ s/<!--NEW UP-->/$temp/;
$upd =~ s/<\!--NEW UP-->/$temp/;
と描くべきでしょう。
> print IN @UP;
print IN join("\n",@UP);
ではないでしょうか?
>>897 板違い。
電波・お花畑
http://etc.2ch.net/denpa/
>>896 はいはい、良かったね。氏ねバカ。
1.name.htmlに書き出しているのに、name3.htmlに書き出されると勘違いしている。
2.書き込み権限が無い
open IN, ">$name3" or die $!;
質問がめちゃくちゃだからこれ以上書き込みするな。礼も何もいらん。
質問すらまともにできないのは初心者未満だ。もう一度小学校行って来い。
>>899 すまぬ。
?<! と勘違いしていたようだすた。∧||∧
>>895 げ。windowsでは使えないって書いてある、、、
みんなもちつけ
>>896 name3.htmlに>>で書き出さないとだめじゃないの?
それと書き出しただけじゃだめじゃないの?
クライアントのブラウザの更新をjavascriptでやったら?
>>896 で問題なく動く
単に書き込まれるファイル名を勘違いしてるだけ
おっと、あくまで元ファイルに上書きで更新ね
>>896 open NAME3, '+<' . $name3 or die;
{
local $/ = "<!--NEW UP-->\n";
<NAME3>; # NEW UP まで移動
my $pos = tell; # NEW UP 直後のファイルポインタ
my $old = <NAME3>; # NEW UP より下のデータ
seek NAME3, $pos, 0; # NEW UP 直後まで戻る
print NAME3 <<"NEW";
<div>
<p>$date</p>
<p>$name1</p>
<p>$name2</p>
</div>
NEW
print NAME3 $old;
}
close NAME3;
909 :
904 :03/07/22 16:57 ID:???
そうか、上書きでいいのか。 >そこに新たなデータを付け加えて なんて書いてあったから・・・ そうか、サーバ上のファイルに変更を加えないのか。 >またhtmlに書き出す なんて書いてあったから・・・ でも、「もちつけ」はよかったでそ
DOS窓って、まだ95/98使ってるのか?
Dos窓消す方法ってないでしょ・・・。
>>914 そういう意味じゃなくて
perl/tkつかったプログラム実行すると
tkウインドウの後ろでDos窓がずっとでてる。
どうやればDos窓を表示せずにtkウインドウだけ表示するか
ということを質問してるんじゃないかな。
>>915 いいや、きっと閉じられなくなったんだ。
918 :
ともちゃん :03/07/22 21:42 ID:U6Ps44rq
895番さん それができなくて困っているんですー。(~_~;) どこか他の質問掲示板で良い場所ご存知ですか? 色々な場所で聞いてみたいのです。
あぼーん
あぼーん
>>918 ずいぶん失礼な態度だな。
ここの人間が役に立たないと思うんなら早いとこ出て行ってくれ。
第三者だが他の奴はともかく
>>921 が役に立つとは到底思えない。
あぼーん
897っす。 Dos窓が使えない奴もいるのね。 環境は、xp で、ActivePerl5.8 で、Perl/tk試しです。板違いで、ごめんよ。 use Tk; $top = MainWindow->new(); $button = $top->Button( -text => 'EXIT', -command => \&exit ); $button->pack(); 例えば、上のコードをtest.pl として起動すると、 tkウィンドウが表示される前に、 DOS窓が一瞬表示されフェードアウトするようにビロビロと消える動作をし、 それが、ただイライラすると書いた分けです。 誰か試さないかい?
>>918 自分で何もやらない・言われたことを何もやらない。
そんな態度ではどこの掲示板へ行っても同じこと。
2ちゃんを特別だと思うなよ。モニタの前にいるのは人間だ。
>>922 普通はわざわざ第三者を名乗らないと思うが。
897っす。 >どこか他の質問掲示板で良い場所ご存知ですか? >色々な場所で聞いてみたいのです。 ともちゃん、おもしろすぎ。みんなイライラするから、どっかいき。
>>924 DOS窓も【コマンドプロンプト】も表示されないぞ。
って言うか、何も表示されないまま終わった
※DOS窓 = 95/98/Me
※コマンドプロンプト = NT/2000/Xp
>>928 #!C:/Perl/bin/perl
use Tk;
$top = MainWindow->new();
$button = $top->Button( -text => 'EXIT', -command => \&exit );
$button->pack();
でどう?
>※DOS窓 = 95/98/Me
>※コマンドプロンプト = NT/2000/Xp
ああ、DOS窓で通じないのか。ごめんよ。
>>929 3.1、3.0、2.0、1.0とCEが抜けてるぞ。
うちのMeにはDOS窓という項目がありませんが、 どうやって呼び出すのですか?
>>DOS窓が残ってイライラしてるやつ perl.exeのかわりにwperl.exeを使えばいい。 でもあなたの態度はよくないよ。 質問する側が煽ってどうすんのさ。 もう少し礼儀を身に付けたほうがいい。
>>929 use Tk;
$top = MainWindow->new();
#$button = $top->Button( -text => 'EXIT', -command => \&exit );
#$button->pack();
MainLoop();
こうだろ?
Win2000だが起動時にちょっとDos窓が表示されるな。
>>929 Tkのウィンドウ表示しないよ
環境は w2k + perl v5.6.1
Tk 使ったことないから解らんけど、site/lib/Tk.html 見ると
そのサンプル、MainLoop が無いから、「一瞬」だけ表示して
すぐ終わっちゃうから、表示されてないようにみえるんだな
use Tk;
$top = MainWindow->new();
$button = $top->Button( -text => 'EXIT', -command => \&exit );
$button->pack();
MainLoop;
俺の環境(w2k)だと、「DOS窓」も「コマンドプロンプト」も表示されないよ。
>>932 Dos窓上でtk使ったプログラムを動かしたときじゃなくて
tk使ったプログラムのアイコンをダブルクリックしたときに
Dos窓がでてくるのが気になるんだと思う。
>>936 そりゃ、当然だろ。tk でウィンドウ表示する前に perl 起動してるんだから、
コマンドプロンプトウィンドウ出るのはしょうがないと思うが…
どうにかしてでてこないようにはできないものか。
ごめん、MainLoop();が落ちてました。
>>933 ありがとう。そうそう同症状です、納得しました。
>>934 ありがとう。Perl5.8から標準だそうで、
MainLoop がないとtk自体もですね。
>>932 ご指摘ありがとう。
ここ
>>897 質問でなく、もともとネタだったりするから。
>>935 #!C:/Perl/bin/perl #いらないかも
use Tk;
$top = MainWindow->new();
$button = $top->Button( -text => 'EXIT', -command => \&exit );
$button->pack();
MainLoop;
>>936 どうもです。そうです。そういうことです。
>>938 どもです。確かにしょうがないとも思います。(w
>>939 どもです。できれば出て来ない方がね。(w
>>941 plへのショートカット作って「プロパティ」で「起動時のウィンドウの大きさ」を「最小」にすれば?
>>941 932さんが答え教えてくれてるじゃん。
{$Perlのインストールディレクトリ}\bin\wperl.exeを.plファイルに
関連付ければ、エクスプローラからダブルクリックで窓は開かないはず。
944 :
896 :03/07/23 01:45 ID:???
ありがとうございました。 無事、動くようになりました。 お礼が遅くなりまして、すみませんでした。 とんちんかんな質問にも回答くださった皆様に、感謝しています。 もっと勉強してから出直します。
原因言わねーのかよ。回答する価値の無い人間だな。
質問させてもらいに来ました。 記述その物ではありませんが、構成的なアルゴリズムの質問です。 初めに----- CGIのゲーム IDを用いて個人登録 参加者一名につきtxtFileが一つ ゲーム全体のtxtFileが一つ(頻繁に書き換え) この時、ある参加者の特定の行動により「参加者が保有するファイル」を書き換えたい場合があります。 1:そう言った時は、全体の情報ファイルになんらかの記録を残しておき「参加者がアクセスした時」に書き換えたほうが良いでしょうか? 2:それとも、書き換える原因となった処理の時、「その場で」全参加者のファイルを書き換えたほうが良いでしょうか? 前者の場合は実現が困難で、またバグも出そうな気がします。 また効率の良さそうなやり取りもピンと浮かびません(俺の実力では) 後者の場合は、実現が簡単そうで管理も比較的容易な気がしますが、 参加者が増えた時は多量のファイルを一気に検索&書き換えで微妙にコワイです。 それと、A君のアクセスにより、直でB君所有のデータファイルが書き換えられるのはなんか個人的に抵抗があります。 こんな場合、普通、プログラマーはどちらの処理方式を取るのでしょうか? もしよろしければ、理由もつけて回答してくれると嬉しいです。
好きな様にすればぁ?
948 :
946 :03/07/23 10:16 ID:???
すみません、今見なおしたら文書が変だったので訂正します。 この時、ある参加者の特定の行動により「参加者が保有するファイル」を書き換えたい場合があります。 ↓ この時、ある参加者の特定の行動により「他の参加者が保有するファイル」を書き換えたい場合があります。
太いものには巻かれろ。
>>946 データベース使え。
あと微妙にスレ違いかもしれん(・・・そうでもないか?
ある参加者のイベントによって他の全参加者のファイルを扱わなければ ならない構造が誤りの気がする データベース使うならそれもありだろうけど
で、それのどこが【Perl コーディング】と関係ある訳?
ちょっち質問です。 HTMLを出力した後に一度バッファをフラッシュしてから 時間のかかる処理をしたいのですが どのように書けばよいのでしょうか?
954 :
953 :03/07/23 14:37 ID:V4h+SVeU
ageわすれますた。 ついでにもう一つお伺いしたいんですが 複数の変数やら配列を undef する場合 一個づつ undef $val; undef @array; undef %hash; と書く以外に方法ってあるでしょうか? ちょと面倒くさいなと思いまして。
あぼーん
undef $val @array %hash;
958 :
953 :03/07/23 15:46 ID:???
>>956 ありがとです。
>>957 print $HTML;
$|=1;
sleep 5;
とやると出力を拝む前にシッカリ sleep していて
何だかフラッシュされていない気がするんですが
どういうコトなんでしょう?
>>958 httpサーバが処理が全部終わるまで待ってる。
Perlが終了した時点で出力する。
>>958 オートフラッシュはprintするより前で
場合によってはソースの先頭でもいいし
961 :
967 :03/07/23 16:48 ID:???
そだよ、960さんの言うように $|=1; print $HTML; sleep 5; ってしなきゃ。
962 :
953 :03/07/23 16:59 ID:???
なるほど。 print の前に書くんですね。 皆さんアリガトでした!
Perl/tk[試し中]
>>942 ありがとう:こんな方法もあるんですね。勉強になりました。
>>943 ありがとう:バッチリ!です。スッキリ!です。感謝です。
気になるのは wperl.exe でも支障はないのでしょうか?
リファレンス(?)で悩んでます ニュースグループのグループリスト取得するものですが、$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; }
>>965 @{$group->{$_}}ちゃうんか。
>>966 表示するようになったけど、全部同じデータでしかも、"3" というデータしかない…。
俺が思っているデータイメージは
$group = (
[ 'name', [ 1, 2, 3 ] ], # name はグループ名で、1,2,3 ... のリストがグループの記事番号とかのデータ
・
・
・
(以下略)
);
と、思ってるんだけど、間違いないカナ?
その語尾はやめれ
なんで 3 というデータしか表示されないか解った。 print に渡した時にはスカラー値として、リストのデータが 3 あるから、 3 としか表示されなかった。foreach でもう一回ループを廻すか、 join とか使うしかないのね…。 # 青らくだ本買わないと駄目だぁ…。 $group = $nntp->list; foreach $name ( keys %$group ) { print "N=$name\n"; foreach ( @{$group->{$name}} ) { print "\t$_\n"; } } # それにしても、グループの数が物凄いんですが…。
970 :
nobodyさん :03/07/24 16:26 ID:kzmo+pjp
rand は時間で数字が決まります。 完全にランダムにするか、2回連続で 同じ数字は出ないようにする方法は?
rand が時間によって乱数を生成するとはマニュアルのどこにも載ってないが?
srandしてねーだろ。
>>971 ( ´,_ゝ`)プッ マニュアルダッテ
>>974 ( ´,_ゝ`)プッ ジカンデキマルノハマチガイナイヨ
モットベンキョウシヨウナ…
>>975 ( ´,_ゝ`)プッ マニュアルシラナイヤツニイワレタクナイヨ
アトオレ971ジャナイカラ。モウソウハ ヤメヨウネ
>>970 ID:kzmo+pjp ヴァカ丸だし晒しあげ
979 :
nobodyさん :03/07/24 17:28 ID:MQ0CG0Oj
次スレまだぁ〜?
randが時間で決まると言うか、perl5.004以降はsrandを省略すると
srand(time)が自動的に実行されるってことだろ
>>970 完全にランダムも続けて同じ数字が出ないようにするのも
なんらかで出た値を保持する以外にないよ
次スレ立てないなら埋めるぞ
>>982 <q cite="
http://www.kt.rim.or.jp/~kbk/perl5.doc/perldelta.html ">
srandのデフォルトの種はtimeが使われていましたが、これは変更され
ました。現在では、予測するのが困難なシステム依存な値の激しい
(heady)組み合わせで、大部分の everyday purpose に十分なものです。
5.004以前では、srandを最初に呼ぶことなしに引数なしでrandを 呼んだ
場合、ほとんど、ひょっとしたらすべてのマシンで同じ乱数列を得ること
になっていました。現在、perlがそれ以前にsrandを呼び出 していないのに
randを呼び出しているのを検出したときに、perlは デフォルトの種を使って
srandを呼びます。5.004以前のシステムで実行するかもしれないような
プログラムでは、今でも srand を手作 業で呼び出すべきですし、あなたが
デフォルト以外のものを種としたい場合にももちろんそうすべきなのです。
</q>
うめ
梅。
うめー
おっぱい
ランダムに文を表示するやつを持ってるんだけど その文章をリロードしても変わらないようにしたい。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>";
なんだ、ばかばかしい・・・
>989 同じIP && 異なるマシン(同じ世帯の別マシン) → IPと日付を使った数字をsrandの種にする 異なるIP && 同じマシン(ダイヤルアップ接続) → クッキーを使う 異なるIP && 異なるマシン(誰が見ても変わらない) → 日付をsrandの種にする
梅
_∧_∧_∧_∧_∧_∧_∧_∧_ デケデケ | | ドコドコ < 次スレまだーー? > ☆ ドムドム |_ _ _ _ _ _ _ _ _ _| ☆ ダダダダ! ∨ ∨ ∨ ∨ ∨ ∨ ∨ ∨ ∨ ドシャーン! ヽ オラオラッ!! ♪ =≡= ∧_∧ ☆ ♪ / 〃(・∀・ #) / シャンシャン ♪ 〆 ┌\と\と.ヾ∈≡∋ゞ || γ ⌒ヽヽコ ノ || || ΣΣ .|:::|∪〓 || ♪ ./|\人 _.ノノ _||_. /|\ ドチドチ!
次スレ建てる人は
>>4-6 辺りの dead link も調べてくれ(w
>>980 あんがと。
すまんのぉ、青らくだ本持ってないから、その辺全然解らんのよ。
マニュアルサイト行ってもどこを読んでいいのやら、全然検討違いな所読んでた<俺
( ゚∀゚)つ〃∩2ゲット2ゲット2ゲット
999
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。