Perl コーディング初心者質問コーナー Part37
Perlのコーディングで困ってる人のスレです。
誰もが最初は初心者。
だからって、初心者に甘んじた質問の仕方は意味がないよ。
【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは
>>2-10
2 :
1:04/08/22 01:43 ID:???
3 :
1:04/08/22 01:43 ID:???
4 :
1:04/08/22 01:44 ID:???
5 :
1:04/08/22 01:45 ID:???
6 :
1:04/08/22 01:45 ID:???
補足
コーディング 【coding】
プログラミング言語を使ってソフトウェアの設計図にあたるソースコードを作成すること。
「プログラミング」とほぼ同義だが、仕様書やフローチャートなど抽象的な設計文書の内容を、
プログラミング言語を使って具体的なコードに変換していく、という意味合いが強い。
(e-Wordsより)
自分の質問がPerlに関することなのか、
それともPerlではなくCGIやHTMLについてなのかを切り分けした上で、
質問して下さい。
7 :
1:04/08/22 01:47 ID:???
>>1 氏ねよマヌケ野郎が!
テンプレはてめーの日記じゃねーぞ!
このスレは糞が勝手に
>>1を書き換えたので次スレを立てる時は注意してください。
いらっしゃーい、Perlのコーディングで困ってる人のスレです。
【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは
>>2-10
すいません、前スレの 5 もお願いできますか?
さっきから貼ろうとしてるんだけど Time out が出るばかりで貼れないんです...orz
テンプレも満足に貼れないやつが立てちまったか・・・
グダグダなスレになっちまったな。
「漏れ」って何?
漏れって漏れのことさ 厨はカエレー
16 :
966:04/08/22 13:14 ID:???
前スレの996だけどとりあえずブロックの返り血ってのは最後の行で。
ブロックないではreturnは使えないからそれようのルーチンでも作る。
ってことでok?
>>16 > 前スレの996だけどとりあえずブロックの返り血ってのは最後の行で。
わかってるだろうけど、最後に実行した行。
で、おk
19 :
1:04/08/22 14:11 ID:???
正直、すまんかった。
################
#ここから言い訳#
################
#いや、5の張り忘れに気づいて張ろうと思ったら
#連続投稿規制に引っかかっちゃったのよ。ゴメソ
#
#たださ、聞きたいんだけど
>>1って書き換えちゃいけないもんなの?
#過去にも何度か変わってきてるから、概要があってりゃいいと思ったんだけど。
#無意味な中傷はキニシ(・∀・)ナーイ
>>19 内容に納得いかないとスレ乱立になるときがある。
だから書き変えるときは前スレでちゃんと同意をとれ。
とりあえずスレ立てご苦労様。
>>19 > 誰もが最初は初心者。
こんなこと書くなよタコ。
「誰もが最初は初心者」=「回答者は質問者に尽くすべし」っていう脳内変換が起きるんだから。
次の行で何か書いてるけど意味ねぇよ。一度↑こうなったら何を言っても無駄。
>>21 >>1を弁護するわけじゃないが、そういう脳内変換する奴はそもそも
>>1を読まないので影響ない。
書く必要性は全くないが。
23 :
10:04/08/22 15:40 ID:???
何はさておき
Perl コーディング初心者質問コーナー Part37
http://pc5.2ch.net/test/read.cgi/php/1093134840/ ↑これ立てて 2 で挫折した人は早急に削除依頼へゴー。
>>19 とりあえずスレ立て乙。自分は立てられなかったし。
テンプレ部の改定は当然可だけど、他の人の意見もあるからね。
Part35→36のときは
「改定点は?」「スレ違いのお客さんが多いよね」みたいな話があったうえで
>>6の補足が入ったから、もめたりしなかったわけですよ。
個人的には
>>1 は構わないけど
>>2 を見たときに「お礼はうれしいけど、そこに書いたらあかん!」と
思ったのと、あと
>>7 が余分かな。
# 初心者さんは見に行かないし、回答者はURL見ただけで「あー、はいはい」だからね。
とりあえず、この状況が続くと質問者さんが来づらいだろから、事態の収拾を考えましょ。
24 :
1:04/08/22 16:01 ID:???
>>20-23 やっぱり、このスレの人たちは教えるのに向いてるよ。色々ありがとう。
こんな状態でアレなんだけど、2つ目の中途半端なスレの方が上にあると、
どうしようもないだろうから一応ageとくことにする。
age
誰かネタ投下しる。新スレになっていきなり勢いが落ちたな。
28 :
nobodyさん:04/08/22 20:18 ID:Bvv0gWWG
foo(@x, @y) で、
sub foo 内で @x と @y を別に受け取ることはできますか?
@_ だと結合されているので・・・
30 :
28:04/08/22 20:39 ID:Bvv0gWWG
あ、無理ですか。
素直にリファレンスを使います。
どうも。
ここが本スレですよってことでOK?
もひとつの Part37 を立てた人がほったらかしてるっぽいんで、
こちらへの誘導貼り付け&削除依頼して来ようかと思うんだけど、
皆さんのご意見は?
>>29 それじゃせっかくの餌も台無し。
プロトタイプ使えとか言えよ。
>>31 あっちの1だけどよろしく。
テンプレミスッタんで放置してた。
じゃそういうことで
>>32 レスThx.
ともあれ仕事のほうはやっつけてきますた。
そろそろ回答者もヒマしてるはずなので、
次の質問者さん、どうぞー。
>>28 perldoc perlsub
sub foo(\@\@) {
my ($x, $y) = @_;
print "x: @$x\n";
print "y: @$y\n";
}
foo(@x, @y);
便乗質問
リファレンスの場合は、sub foo($$); で宣言して、foo([1..10], [1..10]) みたいに直接値を渡せるけど。
sub foo(\@\@); の場合って、配列変数に値を入れてからじゃないと無理?
そんなイレギュラーな使い方をするところにプロトタイプなんか使わん。
>>37 >>28 に「perldoc perlsub」とか書いておいて自分は読まないのか?
<q cite="
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlsub.html#Prototypes">
バックスラッシュが付けられたプロトタイプキャラクターは、実引数がその
キャラクターで始まるものでなければならないことを表します。
<snip>
$で表される引数はスカラーコンテキストを強制されます。
</q>
sub mypush(\@$) { push @{ shift @_ }, @_ }
my $array = [0..3];
my @array = (6..9);
my $rv = mypush @{$array}, @array;
print join ',', @{$array}, "$rv\n"; # 0,1,2,3,4,5
40 :
nobodyさん:04/08/23 23:46 ID:73HB43dm
Can't declare constant item in "my" at index.cgi line 191, near ");"
index.cgi had compilation errors.
こんなのがでます。なにが悪いんですか?
>>40 デクレアできないぞボケェ!
ってPerlが叫んでるw
>>41 悔しいけど、ちょとワロタ。でも、もすこしサービスしなさいな。
>>40 これだけではなにが悪いのかわかりませんよ。
index.cgiの191行めに
my (1, 2, 3);
↑例えばこんな行がありそうな気はするけれど。
44 :
40:04/08/24 01:36 ID:a9PEnejB
解決しますた
>>40 ここは質問と回答で成り立つスレです。
後から同じ状況に陥った人が参考にできるように
何をどうしたら解決したのか、
原因は何だったのか、
かわいい妹がいるのかどうか、
そういった事をきちんと書きなさい。
>>47 どうでもいいだろ
どうせアフォなミスだって
49 :
nobodyさん:04/08/24 18:35 ID:nkf/AOE6
おまいらメールのSubjectに日本語使う時にMINEエンコードするのってなにでやってる?
mime_pls?モジュール?自作?
自作ってカッコイイよな。
MINEってカッコワルイよな。
>>51 お前のPCで
「ちゅう」
って打って変換したら常に初めに「厨」になるんだろうな・・・・・
>>49 mime_plsはRFC2047を満たさないので自作してますが。
55 :
いらすま:04/08/24 21:03 ID:Hn5K2dOO
えーとですね。改造自由な掲示板のソースを手に入れたとですよ。
掲示板の背景の色をかえたいのですが、どうしたらよいので??
>>49 オレはIM::Iso2022jp使ってる
>>55 まずは、あちこちの板に駄スレを立てまくるのをやめれ。
おまえらJcode使えない環境か?
ってまあ74バイト区切りで改行いれなきゃいけないとか面倒なことがあってそれだけじゃたりないんだっけ?
フォームメールなんて作ったことないからわからんなw
ここはナイスな回答者が揃っていて好き
>>57 それじゃあ背景以外も変わっちまうだろボケェ!
おまいはセンスはいいんだが、いつも後一歩だな。
おいおい ちょーまじれす
おまいらPerlの場合ってモジュールとただのライブラリってどっちがいいと思う?
最近オブジェクト指向でモジュールを1個作ってみたんだけど、確かに再利用性は高いし
インターフェースだけ覚えとくだけで便利なのは間違いないけど、それってライブラリもそんなに大差ないよね。
ライブラリの方が手軽だしさ。
まあDBIくらいになるとオブジェクト指向の方がいいんだけど、みんなはどんな感じで使ってる?
やっぱ小中規模であれば、1個モジュール1個ライブラリってのがいいと思うんだけどさ。
サブルーチンを再利用したいなら、普通の関数呼び出しのライブラリの方が手軽でいいかも。
メインルーチンを再利用したいなら、クラスモジュールにしとく方が有利かも。
>>65 ほう!そうゆう考え方が主流なのね。
基本的にある程度の振る舞いをもったオブジェクトが欲しい時とか
一貫性のある処理でそれだけで独立させたいときがムジュール。
ちょっとこれだけ再利用。みたいなものの集まりをライブラリとするってのが賢いよね。
ボンジュ〜ル?
オブジェクトだろうと、関数の集まりだろうとモジュール。。。
69 :
nobodyさん:04/08/25 10:09 ID:piXV00NL
画像のカウンタプログラムを書いていますが、
画像連結ライブラリを使うと本当に読み込みが早くなるのでしょうか?
返答よろしくお願いします
何故試さん
71 :
69:04/08/25 11:23 ID:???
調べたり、テストしたりしましたが、わかりません
画像連結ライブラリって、内部でGIFを連結してprint OUTで一気に出力するアレでしょ?
カウンタなんて小さい画像の集まりだから、HTTPヘッダによるオーバーヘッド分がなくなるだけでも有利でしょうな。
大きな画像連結なら負荷やメモリを気にするところだが。
Perlの手始めは向いてるね。カウンタ。
73 :
69:04/08/25 11:27 ID:???
>>72 ありがとうございます。失礼ですが、もしPHPだといったいどうなのでしょうか?
いっしょだよ
テストしたいんだったら、1000ファイルくらい画像連結させて比較すれば差がでるんじゃないの。
76 :
69:04/08/25 11:37 ID:???
っと、1000ファイルすべて違うファイル名にしないと意味ないけどさ。ブラウザにはキャッシュというものがあるからね。
>>69 お前みたいにくだらない部分にこだわるやつに限ってゴミソースで重かったりする。
だまってテーブルレイアウトやめればそんなくだらない差は気にならなくなる。
ついでに言うと連結処理あり、なしのベンチとってそれもちゃんと考慮に入れろや。
>>75 1000ファイルもあると I/O のコストの方が高くならない?
逆にHTTPサーバーの方のキャッシュが期待できる連結なしの方が早くなりそうだし、
最適化の仕方次第で結果が代わったりするんじゃないかな。(予想だけど
ベンチマークとるなら実際の運用環境に近い条件でやらないと意味がないと思う
>>69 GIF画像の連結はやったことないので、一般的な回答になるけど。
アルゴリズムの優劣とかならはっきりとした一般答がでるかもしれない、
でも、こういった、環境や実装に大きく依存するベンチマークは自分でとらないと役にたたない。
画像連結の方法だけとってみても、perlでやるのか、ライブラリか、外部プログラムに頼るのかで結果が代わってくるはず。
>>77 この場合、キャッシュは考慮すべきといっても、offにすべきではないと思う。
連結なしの場合、httpヘッダでcache controlや期限を適切に設定していれば、
ファイルを送る必要はなく文字列出力だけで済む事もあるのだから。
クライアント数とアクセス数を分けて考えてテストする必要がある。
(再訪問者が多い場合にクライアント側のキャッシュの効果が期待できる)
>78
今回に限って言えば、ベンチは意味が薄いのではないだろうか。
サーバとの経路とかでも結果が大きく変わるだろうし。
クライアントから一回だけ要求を受け取って、
2種類のレスポンスを返す方法ってありますか?
例えば
GETで要求されたURLの応答に
200 OK
を返した直後にクライアントとの接続を閉じずに
304 Not Modified
を返せるような。
どなたかお知恵を貸してください。お願いします。
>>84 無理。
どういう理由でそういうことをしたいのかを明確に書けば別解のアドバイスが出てくるかも知れず。
でも、ここはperlコーディングスレなので、webprog 初心者スレの方がいいんじゃないかな。
>>85 そっちできいてみます。ありがとうございます。
87 :
nobodyさん:04/08/27 07:40 ID:gO3gmMRy
SSIで、9桁の乱数を生成して表示するスクリプトはどのようにして
作ればよいのでしょうか?
例えばどこかのhtmlから<!--#exec cmd="ransuu.cgi"-->を呼び出すと
253145968や040104580とかランダムな9桁の数値を返すものです。
全くの初心者で困っています。教えて下さい、お願いします。
rand;rand;printf "Content-type: text/plain\n\n%09d",rand(10**9);
89 :
87:04/08/27 08:43 ID:???
>>88 本当にありがとうございます!!!!!!!!
>>83 遅レスだけど、ベンチはローカルでやるのが普通だろ。
>>88 あたまでrandを2回呼んでるのはなぜ?
92 :
88:04/08/27 15:08 ID:???
3回目のrandが返す値が好きだからー!!
<FORM method="POST" action="hogehoge">
<INPUT type="submit" name="Reload" value="再読込">
</FORM>
こんな感じでホームページに設置されているボタンを押すPerlスクリプトって作れないでしょうか。
>>93 そのスクリプトの用途を聞かせ願えないか?
すみません。物騒な聞き方でしたね。
こういう感じのサーバなのです
1.FTPサーバーに管理ファイルをアップする。
2.社内のローカルホスト(
http://192.168.0.200:8080/reload.html)にアクセスして更新ボタンを押して更新完了
3.上記をファイルの数だけ繰り返す
私のところに1の管理ファイルがバイトから1日10件くらい集まるので、
これをいちいちアップして更新して・・・というのは、かなり面倒なのですが、
社内鯖の仕様を変更するのは問題があるので、自動でアップ処理してくれるスクリプトを組もうと思った次第です。
最終的には
1.設定フォルダ内のファイルを社内鯖にアップする
2.更新ボタンを押す
3.これを毎朝9時に行う
ということをしたいのです。
96 :
nobodyさん:04/08/27 18:17 ID:ScoK2mkg
>>95 対策@私の場合
1.バイト君にFTPサーバーの特定のディレクトリにファイルをうpするように指示をする。
2.その特定のディレクトリを監視するスクリプトを、例えばcronで1時間ごとに起動して、
ファイルが存在すれば何らかの更新作業をさせる。
3.私は他の作業をする。
ボタンを押すというのは難しいから、そのデータPOSTを自前でやった方が良いと思われ。
へたれですみません。どうやったらいいんでしょうか > データPOST
getではだめなの?
getならリクエスト1個で終わるんだけどね
Net::FTPとLWPがあればささっと書けそうだけどな。
>>97 ボタンを押すほうが簡単じゃないでしょうか??
102 :
93:04/08/27 19:15 ID:???
LWPで普通に出来ないか?
104 :
nobodyさん:04/08/27 22:09 ID:ScoK2mkg
>>102 > 支給されてるクライアントがNTなので、タスクマネージャーで実行しようと思ってます。
ではそれで毎日9時に動くようにすれば?
でもってなぜCGIが必要なんだろう?
確認ならばメールで通知、返信すれば自動で更新作業させるなりと方法はあるのに。
なんで「ボタンを押す」ことが必要なのだろうか。
ブラウザ立ち上げておかないといけないし、強制終了してしまっていたら立ち上げなおしたりしなきゃいかんし。
>104-105
おまえら少しは文章を嫁
107 :
93:04/08/27 23:10 ID:???
>>101 ボタンを押すのが簡単ってのは人間が操作する場合で、プログラムにとっては、POSTリクエスト送る方が簡単。
プログラムでそういったことをエミュレートしたいなら、ブラウザのオートメーションを調べてみるといい。
冗長になるは言うまでもないけど。一応フォローしておくと、
HTTPの仕組みを知らない人にとってはこっちの方がコードが簡潔だったりする、
ちょっとした用途にスクリプトを書く場合でもコードを大幅に節約できるといった利点がある.
なんでもいいから犯罪者にアドバイスはヤメレ
検索CGIを作っているのですが、
エスケープが必要な文字の検索で詰まってます。
$str =~ s/($key)/<$1>/g;
こんな感じで、ヒットしたキーの前後に文字を追加してるんですが、
これだと、正規表現の文字(ドット. や プラス+ )自体を検索することが
できません。
何かいい方法ありますでしょうか
114 :
112:04/08/29 23:11 ID:???
>>113 ありがとうございます!
quotemetaなんて便利なものがあったんですね。
そういえば、ひさびさPerlスレ見た
117 :
nobodyさん:04/08/30 13:20 ID:WEq7wEdz
@data = split(/\//, $_);
"/" でセパレートされた文字列を分解してそれぞれ配列に入れたいのですが、
どうすればいいか教えてください。
すいません。
分かりました。。。
>>117の1行目が答えなんですね。(-_-;)
何が起こったんだ
123 :
nobodyさん:04/08/30 17:29 ID:I+lehIeA
すみません、3つ以上の数が等しいかどうか調べたいのですが、
以下のようにやってもエラーになります。
perl -e '$var=1; $var1=1; $var2=1; print "Ok!\n" if ($var==$var1==$var2==1);'
どうやったらいいのでしょうか。おせーてください。
>>124 えっと、
>>123の場合は、1なので、==をandに代えればできますが、他の数の場合
まずいです。
perl -e '$var=1; $var1=1; $var2=2; print "Ok!\n" if ($var and $var1 and $var2 and 2);'
これでもOk!になってしまいます。
あそうか、一個ずつandでやるんですね。
($var == 1 and $var1 == 1 and $var2 == 1)
もっと簡単な方法がないかと思ったものですから。
24ケースくらいあるんで書くのたいへん(TT)
>>126 my @var1 = (3, 3, 3, 3, 3, 3);
my %tmp = (); @tmp{@var1} = ();
print "var1 ", 1 == keys %tmp ? 'ok.' : 'no.', "\n";
my @var2 = (2, 2, 2, 2, 4, 2);
%tmp = (); @tmp{@var2} = ();
print "var2 ", 1 == keys %tmp ? 'ok.' : 'no.', "\n";
よいこは1 == keys %tmpと書かずにkeys %tmp == 1と書こうね。
読みにくいから
>>130 比較では不確定なモノを左に書くのが一般的。
これを逆に書くと何となく気持ちが悪い。
それを何とも感じないヤシはセンスが悪い。
もしその人がバカだったらぶん殴ってやる
もしバカがその人だったらぶん殴ってやる
CPAN落ちてない?
>>127 高度な技を伝授いただきありがとうございます。
@tmp{@var1} = ();
というところですが、ハッシュの配列ということでしょうか。
これは、らくだ本にも出ていますでしょうか。今手元にない
のですが。
定数を左辺に書くと==と=を間違えたときにすぐわかるけどね
>>135 ハッシュのスライスだね。ぐぐれば出てくるよ。
139 :
nobodyさん:04/08/30 21:33 ID:c+ZgByNi
$name2が、$name3[0]〜$name3[$i]のどれかの値と一致した場合にある動作をするようにしたいのですが
どうやればよいでしょうか。
>>136 その言い訳は何年も前に死滅したはずだが?
Found = in conditional, should be == at -e line 1.
頭が化石になってますよ。
141 :
nobodyさん:04/08/30 23:29 ID:WEq7wEdz
for(0..10) {
for(0..10) {
・・・・・
}
}
ネストさせると、最初のfor文は$_ですが、中のfor文は何になるのですか?
>>139 for(@name3){
print"bingo\n" if($_ eq $name2);
}
>>141 変な質問ですみません。
>>143 ネストしてても一緒なんですか。
for(0..10) {
for(0..10) {
$data[$_][$__] = ・・・
・・・・・
}
}
だったらいいなと勝手に思ってました。
そうすると
for(0..10) {
for($i=0; $i<10; $i++) {
$data[$_][$i] = ・・・
・・・・・
}
}
とすべきなんですね。
>>145 for(0..10) {
for my $i (0..10) {
$data[$_][$i] = ・・・
・・・・・
}
}
147 :
nobodyさん:04/08/31 04:35 ID:nQH60qUM
truncateについて教えてください。
winxpにversion 5.005_03 built for MSWin32-x86-objectですが、思ったとおりにtruncateが動作しません。
open(FILE,'>aaa.txt');
print FILE "aaaaaaaa";
seek(FILE,0,0);
truncate(FILE,0);
print FILE "bbbb";
close(FILE);
これは、思ったとおりに動きます。aaa.txtは「bbbb[eof]」の4バイトになります。
$aaa='FILE';
open($aaa,'>aaa.txt');
print $aaa "aaaaaaaa";
seek($aaa,0,0);
truncate($aaa,0);
print $aaa "bbbb";
close($aaa);
これは、なぜか「bbbbaaaa[eof]」の8バイトになります。
seekは正しく機能して、truncateは機能していないからこの結果だと思うのですが、なぜ機能しないのでしょうか。
上の例を見ても、truncate機能自体はあると思うのですが・・・
truncate($aaa,0) or die $!;
>>147 $aaa='FILE'; → $aaa = *FILE;
151 :
145:04/08/31 08:36 ID:???
>>146 ありがとう。
もとめていたスマートなコードです。
152 :
nobodyさん:04/09/01 00:24 ID:IFM26Jlf
だれか教えてください。
ダウンロードというボタンをおしたら、CSVがダウンロードできる仕組みにしたいです、
155 :
nobodyさん:04/09/01 01:15 ID:IFM26Jlf
すまん。152だ。
だれか教えてください。
ダウンロードというボタンをおしたら、CSVがダウンロードできる仕組みにしたいです。
が正解でした。といううことでおしえてください
>155
教えてやろう。
PerlもCGIも使わなくてもできる。
よって板違い。
157 :
nobodyさん:04/09/01 01:47 ID:IFM26Jlf
156よ。よく考えれば単にリンクを張ればよいな。アドバイスあんがと
print <<"END";
...
END
と終端文字列を記述すると何も表示されないのに、
print "...";
print <<"END";
...
END
とすると表示されます。(print"...";の内容は表示されません)
これは何故なんでしょうか??
初心者ですいません…。
そこより前のコードで"が開きっぱなしと見た。
160 :
nobodyさん:04/09/01 12:01 ID:VNRqZmig
perlでのoop時の属性についてなんですが、
hashでの実装、use fieldsでの実装
どちらがいいんでしょうか?
fieldsのが便利だと思うんですが、
内部でpseudo-hashを使ってる?らしく
pseudo-hashは今後推奨されなくなるようで
その辺り困ってます。
--------------------------------------
sub new {
my( $class, $name, $height ) = @_;
my $this = {
'name' => $name,
'height' => $height
};
bless $this, $class;
}
--------------------------------------
use fields qw( name height );
>>160 5.9.0以降ではpseudo-hash使わない実装に変更されたので
普通に使う分には問題ないんじゃなかったっけ。内部の
phash直接触るような行儀悪いプログラム書いてりゃ別だけど。
162 :
nobodyさん:04/09/01 12:33 ID:VNRqZmig
>>161 ありがとうございます!
なるほど、確かに、phashを直接使うなみたいな事は書いてありました。
perl6になったらこの辺も変わりそう?ですし、
perl5では、これでいいってことで!
163 :
nobodyさん:04/09/01 18:16 ID:GIk9V8QY
sendmailを使ったプログラムを作ってるんですが、どうやらメールの件名に
日本語を使う時には特別な処理が必要なのですね。
今いろいろなサイト見てますが、皆さんのオススメの解説サイトがありましたら教えてください。
おながいしますm(_ _)m
特別な処理???
メール送信の基本はperlに限ったことではないが
>>163 解説サイト?
無いよ。
嘘だと思うんなら自分で探してみ?
166 :
163:04/09/01 19:59 ID:GIk9V8QY
>>164 件名の分だけ他とは違うエンコードをしないといけないという意味です。
>>165 そうなのです。あまりいいところが見つからないのです。
実際のサンプルソースとかを載せながら解説してるサイトがあるといいなと思ったのですが;
RFC嫁
168 :
nobodyさん:04/09/01 21:49 ID:Fq5X9xKH
170 :
nobodyさん:04/09/01 22:06 ID:3SqQ1yBx
171 :
>>163:04/09/01 22:26 ID:5tu92ZqP
$subj = Jcode::convert(\$subj, 'jis');
$subj = MIME::Words::encode_mimeword($subj, 'B', 'iso-2022-jp');
今5.8のサーバは少ないだろ。。つーか、ほとんど無いと思われ。
174 :
168:04/09/01 22:51 ID:Fq5X9xKH
175 :
163:04/09/02 01:14 ID:hfUgeMHv
>>169 英語よめません;
>>171>>173 >$subj = MIME::Words::encode_mimeword($subj, 'B', 'iso-2022-jp');
これって5.8でないと駄目なんですか?使用サーバのperlは5.6ですが。
後、このモジュール?ライブラリ?ってRFC2047の
1.encoded-word は 75バイト以内でなければならない.
2.encoded-word を含む行は 76バイト以内でなければならない.
をクリアしてないですよね?PERLメモ読んでて、とりあえずBASE64エンコードは
なんかのモジュールでやるとしても1と2をどうしようかと迷ってます。
みなさんはちゃんと1と2に対応したサブルーチン等を作ったりしてるんでしょうか?
>>175 いいから自分で作ったというコードを晒せよ。
特別な処理とか、何を勘違いしてるのかわからん。
178 :
163:04/09/02 01:50 ID:hfUgeMHv
<input type="text" name="to">
<input type="text" name="subject">
<textarea name="body"></textarea>
use MIME::Base64;
require "jcode.pl";
受け取ったフォームデータをデコード+JIS変換して%formを作成。(コード省略)
$encode_word = encode_base64($form{subject});
open MAIL,"|sendmail -t";
print MAIL<<END;
From:
[email protected] To: $form{to}
Cc:
Bcc:
Subject: =?ISO-2022-JP?B?$encode_word?=
$form{body}
END
これでは
1.encoded-word は 75バイト以内でなければならない.
2.encoded-word を含む行は 76バイト以内でなければならない.
をクリアできないですので。
179 :
>>163:04/09/02 02:09 ID:LLw2NK0r
180 :
163:04/09/02 02:14 ID:hfUgeMHv
>>163 はい。エンコードは別にたいした問題はないのです。
1.encoded-word は 75バイト以内でなければならない.
2.encoded-word を含む行は 76バイト以内でなければならない.
3.encoded-word はそれぞれ独立してデコード可能でなければならない.
4.encoded-text をデコードした文字列の文字コードは,最後に ASCII が指定された状態でなければならない.
5.encoded-word が現れる出現位置に関する決まり.
Subject や Comment のヘッダフィールドなどの, 'text' 内に出現.
"(" と ")" で区切られた 'comment' 内に出現.
From や To,CC ヘッダなどで,'phrase' 内に出現.
'addr-spec' 内で出現してはならない.
'quoted-string' 内で出現してはならない.などなど.
6.隣り合う encoded-word の間の 'linear-white-space' は無視する.
これらをクリアするのに皆さんは自分でエンコード前の準備用としてのルーチンを
自作してるんでしょうか?というのが
>>175での質問です。
181 :
↑:04/09/02 02:30 ID:???
182 :
163:04/09/02 02:40 ID:hfUgeMHv
>>181 >このサブルーチンは、RFC2047に完全には準拠していません。RFC2047では、ASCII文字列は、エンコードしないことを推奨していますが、このスクリプトでは、簡略化するために、すべてをエンコードしています。
紹介のサイトでは上記以外の違反はしてないみたいですが
企業でのメーラーとして使う場合はどの程度準拠すればいいのでしょうか?
ところで
>>181さんは
>>180の1〜6をどこまで守ってsendmailを利用されてますか?
一般的なレベルが知りたくなってきました。
>>182 おまいperlメモ読んでるなら、そこにあるソースをそのままもらえばいいのに。
あれならほぼokだろ。まあちょっと長いけどな。
>>181のサイトは俺も見たが
asciiもエンコードしちゃう点を除けばかなりいい。jcode.plさえあれば誰でも
できるってのが手軽だしな。
そもそもPERLメモの方はsubject以外でも使えるし、デコードまでやれるルーチイだから
比べてもしょうがないな。ちなみに俺はフォームメールなど作ったことなし!
185 :
nobodyさん:04/09/02 11:21 ID:3eXmd8V2
#!/usr/local/bin/perl
$logfile = "./sizecount.dat";
$count = -1;
$count += (-s "$logfile");
open(OUT,">>$logfile");
print OUT "\n";
close(OUT);
print "Content-type: text/html\n\n";
print "countdate=$count\n";
参考書通りに作ったカウンターなんですけど
アップロードして動作確認したら正常に動いたので
flashMX2004でダイナミックテキスト、変数dispcountに
表示させたいんですけど、出来ません。
チェック用の一応変数checkにはloadcompleteと表示されました。
アクションスクリプト
System.useCodepage = true;
CGIfile = "sizeount.cgi";
myLoadVars = new LoadVars();
myLoadVars.onLoad = function(){
dispcount = myLoadVars.countdate;
check = "loadcomplete";
}
myLoadVars.load(CGIfile);
186 :
185:04/09/02 11:25 ID:3eXmd8V2
続き
CGIの下から2行目はprint "Content-type: text/plain\n\n";
に変更してからフラッシュでやったんですけどなぜか表示されません、、、
これまで変数を受け取るだけや送るだけのサンプルは参考書通り出来てたのですが
お願いします。
187 :
185:04/09/02 11:31 ID:3eXmd8V2
追加
ブラウザのキャッシュ関係ではありません。
お願いします。
188 :
185:04/09/02 11:35 ID:3eXmd8V2
度々すいません
ダイナミックテキスト,変数dispcountにはundefineと表示されます。
お願いします。
ぱっと見だが、Perl のコードに問題は無いと思う。
おそらく Flash の方に何らかの問題があると思われるが、
残念ながら Flash についてはこのスレで扱う範囲ではない。
190 :
185:04/09/02 11:42 ID:???
>>189 わかりました。
ありがとうございました。
フラッシュ板言ってきます。
>>180 俺は1〜6全部クリアしたライブラリ作ったが、たいていはそこまで必要ないので
作る奴はそういないだろうな。特に何が問題なのかも分からんような奴しか集まらん
このスレには。
ちなみに1〜6を完全に満たしたままだと、そうでないアホなエンジンが5を
無視してエンコードしたものを戻せないので、X-Mailerが自身ならstrictモード、
他ならlooseモードで動くようにしてる。
商用なので公開はせんが。
192 :
nobodyさん:04/09/02 18:06 ID:LZDH898f
193 :
nobodyさん:04/09/02 22:18 ID:0Sj0dIST
ActivePerl5.8.4を使っています。
ShiftJISのデータをDBから取得して、そのデータを使って
UTF-8のXMLファイルを作成したいのですが、うまくできません。
いろんなサイトを見てみましたが、うまくできないので
方法をご存知な方がいましたら、教えてください。
UTF-8に変換してください
195 :
nobodyさん:04/09/02 23:59 ID:0Sj0dIST
普通にやるとできるみたいです。
DBからできないのはなぜでしょうか?
use Encode;
my $a = "あああ";
Encode::from_to($a, "shiftjis","utf8");
$xml =<<"EOF";
<?xml version="1.0" encoding="UTF-8" ?>
<test>$a</test>
EOF
print $xml;
196 :
nobodyさん:04/09/03 02:42 ID:d4bnE4Tf
@array = (1,5,8,6,2,1,3,8,6,4) #任意の数字
から、中央値、最頻値を求めるには、どうすればいいですか?
モジュールは見つかったのですが、レンタルサーバーなので使えません。
誰かわかる人いたら教えてください。
よろしくお願いします。
>>196 "中央値","最頻値","アルゴリズム"でググってみてください.
>>196 @array = (1,5,8,6,2,1,3,8,6,4); #任意の数字
# 中央値
$#array % 2 ? $m=($#array+1)/2 : $m=$#array/2;
$median=(sort @array)[$m];
print "中央値は、$median。\n";
# 最頻値
for(@array){
$hindo{$_}++;
}
foreach $key (keys %hindo){
$max=$hindo{$key} if $hindo{$key} >= $max;
}
foreach $key (keys %hindo){
push(@max, $key) if $hindo{$key} == $max;
}
print "最頻値は、@max。\n";
>>195 DBから取り出したものがそのテストプログラムで
想定してるのと同じものかは確認したか?
201 :
196:04/09/03 11:54 ID:???
>>199 ありがとうございました!
やっぱり結構難しいプログラムになるんですね。
とても自分のプログラミングテクニックじゃできませんでした・・・
これで難しいってか
わかりやすくかけば
204 :
nobodyさん:04/09/03 22:27 ID:qXHB0Gmy
Perl最新版をインスコして.plファイルをデスクトップに置いたら
トカゲのアイコンがポコチンに見えた
結局163は作りたくないのか?
よくわからんが、選択肢は3つってとこか
1. このまま放置(案外これかもな)
2. JISじゃなくてUnicodeにしてMIME-Headerエンコする(作り込みなしで完璧)
3. 頑張ってJISと2047に固執する(作ったらcpanにあげてくれw)
> $header = encode('MIME-Header', $utf8);
206 :
174:04/09/04 01:17 ID:jFFI5mOb
>>206 meta refreshじゃなくてLocation使う理由は?
208 :
nobodyさん:04/09/04 11:47 ID:zUjRJg63
>>208 で、それがperlコーディングに何か関係あるのかね?
210 :
nobodyさん:04/09/04 11:55 ID:zUjRJg63
ハングル板ってこんなことで祭りになるのか。
ま、スレ違い。
スレ違いでも答えてあげるのが人情
214 :
nobodyさん:04/09/04 15:42 ID:llgg8ga3
|・ω・`)
>>208 >>210 俺が使っている
カウンターは
1日1000以上回ることが保証されている。
アンケートは
人がいなくてもリロードするだけで増えていく。
チャットは
必ず知らない人がいる。
プログラムは作られたとおりにしか動かないのです。
216 :
nobodyさん:04/09/04 16:26 ID:L+DB05Rw
フォームから送られてくるデータの中にある改行コードを\nに置換したいんだけど、
$str =~ s/\r\n|\r/\n/g;
でいいっけ?なんか自分が書いた以前のコードに
$str =~ s/\n\r|\r/\n/g;
っていう逆になってるのがあって色々調べたら、\r\nの方が圧倒的に多いけどたまに
\n\rって書いてるコードもあった・・・・・
\r\n || \x0D\x0A
で正規表現するのが正解だよね?
\r\nでいい
>>215 で、そのカウンターは1分で1000以上回ることは保証されているわけ?
219 :
nobodyさん:04/09/04 17:34 ID:uW2eM/jV
FreeBSD5.2.1 perl5.6.1
でperlスクリプトを書いています。
ファイルにある$$に囲まれた文字列をキーにして
ハッシュから値を取り出して出力しようとしていますが、
うまくいきません。
単純な置換ならうまくいくのですが、どうすればそのようなことが
可能なのでしょうか?
うまくいかないコード↓
while(<FILE>){
s/\$\$(.+)\$\$/$hash{\1}/g;
print $_;
}
目的の出力↓
hash("key1","val1","key2","val2")
FILE
文字列$$key1$$文字列
文字列$$key2$$文字列
出力結果
val1
val2
221 :
174:04/09/04 17:47 ID:jFFI5mOb
>>207 metaをどのように使うか分からないんです涙
metaにする利点はあるのでしょうか?
223 :
174:04/09/04 19:49 ID:jFFI5mOb
>>222 申し訳ないですが、
htmlでなら分かりますが、perlでは分かりません。
氏ね
.htaccessにErrorDocumentを記述して
オリジナルのエラーページを作成しています。
エラーの元になっているファイル/フォルダのURLをオリジナルのエラーページに表示させようと
http://<!--#echo var="SERVER_NAME" --><!--#echo var="REQUEST_URI" -->
というコマンドと環境変数を使っていますが、
オリジナルのエラーページのURLが表示されます
ステップサーバー(
http://stepserver.jp)というレンタルサーバーを利用しており、
そのサポートに問合せましたが、上記の記述で問題ない、との回答でした。
何かアドバイス・ヒントを頂けないでしょうか?
>>223 申し訳ないですが、なにが分からないのか分かりません。
>>225 申し訳ないですが、それのどこがperlに関する質問なのか分かりません。
228 :
nobodyさん:04/09/04 20:55 ID:DfAuufFl
CGI で Perl 使って画像を出力したい(具体的にはグラフが描きたい)んですが
どうやればいいのでしょうか?
229 :
174:04/09/04 20:57 ID:jFFI5mOb
ていうか、最初の質問がperl上でのhtmlタグの出力の仕方が分からないっていう
内容なんだけど、アフォですか?
meta分かったらそもそもこの質問してねーだろ??
>>224 おまえが(以下略
>>229 metaにperlは無関係
まだ夏は終わらんのか?
ていうか
>>174のレベルが初心者の域じゃない
>htmlタグの出力の仕方が分からないっていう
なんだこれ?おちょくってんのか
DQNが発生するたびに「夏が」とかいうヤシきもいよ?
>>230 GifGraphの解説がありましたが、最初の方に、
「CPANには他にもChart-PNGgraph、GDgraphといったものもあり、
どれが今後も残っていくのかよくわからない状態です。(2000/1/5)」
と書かれています。いったいどのモジュールが現在主流なので
しょうか。質問ばかり申し訳ありません。
>>234 主流なモジュールを使わないといけない理由は?
237 :
nobodyさん:04/09/04 23:09 ID:mKo8NLNs
cygwinのbashコンソールから、あるソフトをperlで立ち上げたとき、
そのソフトが終わらないと、そのコンソールがperlに乗っ取られた
まま使えなくなっちゃうんですが、これは仕方ないのでしょうか。
exit;入れてもダメですた。
system("Desktopmem.exe");
exit;
>>236 後々まで使っていきたいから、サポートっていうか、情報が
たくさん得られそうなものを選ぼうと思って・・・
239 :
nobodyさん:04/09/04 23:51 ID:DfAuufFl
>>237 そういうものです。
コマンドの後ろに & をつけてバックグランドで実行するか、
デーモン化するのが、常套手段です。
xcalのその日のスケジュールをdesktopmemoのスケジュール形式に
perlで変更して保存、それをdesktopmemoに読み込ませて起動と
いうことをやりたいので(スタートアップに登録)、すると、
バッチファイルかシェルスクリプトしかないですかね。
>>239 ありがとうございます。
今は、GDGraphなんですね。実は、オライリーの「perlによるwebプログラミング」
とかいう本、かなり前に買ってあって、あれには、GifGraph、Gimpが中心に説明
してあったので、うーむ、ちょっと隔世の感。やってないのがいけないんだけど。
244 :
210:04/09/05 00:15 ID:7pvSYkfO
>215
スレ違いなのに回答ありがとうございます。
ただ、結局何をおっしゃりたいのか今ひとつよくわからなかったんですが
プログラムの想定外の事態が起こったということでしょうか?
さぁ、何か聞いて来い
247 :
nobodyさん:04/09/05 10:26 ID:gdlM8Pd7
掲示板のcgiで、下記のように引用された箇所の色を変えたいのですが、
どのように実現したら良いか方法をお教えください。
例えば、変数$textに下記のデータが入っているとして
--------------------------
> 引用元のテキスト1
> 引用元のテキスト2
> 引用元のテキスト3
返信テキスト
--------------------------
1桁目に半角の'>'があった行を下記のようなデータに置き換えたいと
考えております。
--------------------------
<span class="quoted">> 引用元のテキスト1
> 引用元のテキスト2
> 引用元のテキスト3</span>
返信テキスト
--------------------------
また、スレ違いの質問でしたら誘導していただけると嬉しいです。
>>247 俺なら一行ごとに
<span class="quoted">> 引用元のテキスト1</span>
ってやってから
</span><BR>\n<span class="quoted">
だのを削除するかもなあ。
正規表現ひとつだとややこしくなりそう。
250 :
247:04/09/05 13:00 ID:???
>>247 $text =~ s|(^>.*(?:\n^>.*)*)|<span class="quoted">$1</span>|gm;
252 :
247:04/09/05 19:15 ID:???
>>251 おお、
>>247の条件はバッチリでした。
ただ引用ブロックが複数あると、2つ目以降に適用されないので、
もう1条件つけ加えることで、完全に期待通りの動作ができました。
>>248 >>249 >>251さん、とても助かりました。ありがとうございます。
253 :
nobodyさん:04/09/06 00:59 ID:WMpYnmeW
断る!
書き込むごとにスロットが作動して、当たったら
何かプレゼントするとか。●とか
規制機能は作れるのに、おみくじが作れないというのはこれいかに。
259 :
nobodyさん:04/09/06 22:24 ID:Oq1gFU4V
1: use strict;
2:
3: for my $s (1..10)
4: {
5: print $s."\n";
6: }
これをやると、3行目でエラーになります。
Missing $ on loop variable at C:\hoge\test.pl line 3.
2: my $s
3: for $s (1..10)
とすれば正常に動くのですが、上のようにforの後ろでmyを使用しているサンプルを良く見るので、原因を知りたいです。
OSはWinXPです。お願いします。
>>259 俺んとこの ActivePerl 5.6.0 build623 (我ながらクソ古いバージョンだな) では
for my $s (1..10) でも問題なく動くんだが
君んとこの perl はどのバージョンのを使ってるんだ?
261 :
nobodyさん:04/09/06 22:49 ID:xItUojLf
つーかそろそろ2ちゃんもCGI以外のアプローチを考えてみたらどうよ
262 :
253:04/09/06 23:31 ID:anPS9KLr
VIPで今までに導入された新機能
・1001の文章変更
・おみくじ機能:メール欄に!omikuji
・Load Average表示機能:メール欄に!uptime
・レベル表示:メール欄に!power
・名前のカラー機能:名前欄に@XXXXXX@(XXXXXXは16進カラーコード)
・スレ立てた1が名無しの名前を決められる機能
(派生で強制フシアナスレ、強制名無しスレ、名無しフシアナスレ、ID非表示スレなどが可能)
・IDがひらがな
・ひらがなトリップ
・本文で<tt><pre>タグ使用可能(!tt, !pre使用で)
詳細はまとめサイトで
http://www3.tokai.or.jp/ss295/vip/ 便利な機能等ができれば他板にも導入されるかも。
公開テストみたいな感じになってます。
・1001の文章変更
↑は新機能と言えるのだろうか。
265 :
253:04/09/06 23:35 ID:???
>>264 1001のテキストを外部ファイルにして板毎に設定可能ということらしいです。
266 :
259:04/09/06 23:44 ID:Oq1gFU4V
>260
5.003_07
でした。今から新しいのに変えてみます。
267 :
259:04/09/06 23:57 ID:Oq1gFU4V
m(__)m
動きました!有難うございます。
ちなみにバージョンは5.8.4が最新だったのでそっちを入れました。
269 :
259:04/09/07 09:16 ID:vClBsqv3
たびたびスイマセン。
Perlのバージョンによる機能の差分を紹介しているページを知りたいのですが、どなたかご存じないでしょうか?
サーバのPerlがv5.00502なので、色々とエラーが出て困ってます。
質問です。
perlの処理で、”Enterキーを押す”っていう操作は
perlでは、どう記述するのでしょうか?
ご存知の方是非教えて頂きたいのですが?
Enterキーが押されたことによって起きる結果を記述すればいいだろ
>>272 質問です。
1分も経たないうちにCGIとかPerlとか超初心者なんだけどスレとマルチポストしちゃうのは
どういう狙いがあるのでしょうか?
277 :
nobodyさん:04/09/07 19:44 ID:MmA4CFyc
643 :nobodyさん :04/09/07 18:58 ID:???
>>642 こ こ は 質 問 ス レ で は あ り ま せ ん
質問です。
1分も経たないうちにPerlコーディングスレとマルチポストしちゃうのは
どういう狙いがあるのでしょうか?
PHPのstrtrと同様の関数をperlで使いたいのですが、
おながします
279 :
nobodyさん:04/09/07 20:27 ID:KfcdHICt
質問で手抜きしやがる。ばからしい。
↑ここまで独り言↑
↓ここから質問↓
>>278 PHP:
$str = "3SHRUNYAXA";
print strtr(\$str,"AIUEO", "aiueo"), " ", $str;
Perl:
$str = "3SHRUNYAXA";
print $str =~ tr/AIUEO/aiueo/ . " " . $str;
どちらも3 3SHRuNYaXaと表示。
282 :
259:04/09/08 00:54 ID:mcKNZ5q4
>>270,271
有難うございます。
って、全部英語なんですね・・・ 読めません(w;
( -д-)=3 ハァ〜
ぴゅう太てなんすか。
日本語Gベーシック(・∀・)イイ!!
289 :
nobodyさん:04/09/08 21:38 ID:bxg/BX6l
指定したテキストファイルに記載してある
[email protected] [email protected] ・・・
などのメールアドレスを読み込ませて、
一致しなければ、”未登録です”と表示させたいのですが、
ファイルに登録してあるメールアドレスも未登録だと表示されてしまいます。
もう半日以上いろんなサイトを見ながら試行錯誤していますが、
一向に解りませんでした。
どなたかご教授ください。
#メールアドレスの登録チェック
$a=0;
open(IN,"$mailfile") || &error("Open Error: $mailfile");
while (<IN>) {
($eml) = split(/\n/);
if ($in{'eml1'} ne $eml) { $a++; last; }
}
close(IN);
if ($a) {
&error("$in{'eml1'}は未登録です。");
>>289 ne → eq
if ($a) → if (!$a)
291 :
289:04/09/08 21:53 ID:bxg/BX6l
>>290 素早いレスありがとうございます!
長時間悩んでいた自分が馬鹿でした・・・orz
&uho;と&uho();は全く同じですか?
意味不明
292で言いたかったのは、
引数が空なのにわざわざ()を付ける意味はあるんですか?
()は書いても書かなくても同じですか?
ということです。
コードの見易さが全然違う。
レスありがとうございます。
納得しました。
&foo(); # 空リストを渡す
&foo; # &foo(@_) と同じ
よって、&foo ≠ &foo()
299 :
nobodyさん:04/09/09 17:36 ID:wkS7yjyl
時間について質問
$tim = time;
で$timに「1094716247」といった10桁の数字が入りますが
この数字の内訳(? というかしくみを教えて欲しい・・・
やりたいことは
$dat = date('Y.m.d H:i', time());
で$datに入る「2002.09.09 15:00」といった文字列を
上の10桁の数字に変換することなのですが。
おねがいします。
>>299 localtimeの逆をやりたいなら
use Time::Localをしてtimelocal関数を使う
テスト的に作ったtimelocalもどき。もっとマシなロジックにしたいのぉ。
sub timelocal {
my ($sec,$min,$hour,$day,$mon,$year) = @_;
my @month = (31,28,31,30,31,30,31,31,30,31,30,31);
$year += int($mon/12); $mon = $mon%12; $hour -= (localtime(0))[2];
my $days = -719162;
$year += 1899; $days += $year*365 + int($year/4) - int($year/100) + int($year/400);
++$year; if ($mon > 1 && (!($year%400) || (!($year%4) && ($year%100)))) {++$days}
while (--$mon >= 0) {$days += $month[$mon]}
$days += $day-1;
return((($days*24+$hour)*60+$min)*60+$sec);
}
>>302 うんうん、見ただけで使いたとは思わなくなる。
コード読む気にもナラネ
308 :
弱杉:04/09/10 03:32 ID:+ZeQb9+r
(ここへの書き込みとしてふさわしいかは分らないのですが...)
perl (ver.5.00503)で、特定デレクトリを丸ごと圧縮(zipかlzhが希望)する必要が在り調べたのですが、
Archive::zipというモジュールが必要らしいと分りました。
しかし、このスクリプトの置き場所はレンタルサーバ(ア_ル)で、モジュールの追加インストールが出来ません。
zipもしくはlzh圧縮が可能なライブラリって無いでしょうか?
ご存知の方がいらっしゃったら教えていただけると大変、大変助かります。
どうぞよろしくお願いします。
(この質問はモジュール板の方が適切なのでしょうか? それさえも分らんのデス...)
Archive::zipはデフォルトでperlに入っているようだが。
310 :
弱杉:04/09/10 04:49 ID:+ZeQb9+r
鯖内のモジュールの検索したんですが見当たりませんでした。。。
ア_ルから、ちょっと前にもらったモジュール一覧にも入ってなかったでんす。
私の勘違いでしょうか。。。
312 :
299 :04/09/10 11:56 ID:???
>>300-302 最初のリンク参考になりました。
自分にはまだ難しすぎるようです・・・
他の方法を考えます。
ありがとうございました。
>>312 数字(秒数)のまま扱うってこともあり。
2chのスレNoみたいに。
>>299 Time::ParseDate使えば一発だよ。
use Time::ParseDate;
print parsedate("2002.09.09 15:00");
316 :
弱杉:04/09/10 19:31:54 ID:+ZeQb9+r
>>311 お返事ありがとうございます&カメレスですんませんです。
Archive::Zipで必要とされているモジュールで、やはりCompress::Zlibのみありませんでした。
そこで、Compress::Zlib::perl ver.0.02 (不安なバージョンですが..)をCPANからDLしました。
でも、解凍するとMakefile.PLとかPerl.pmとかが入っていてそこでお手上げです...(レンタル鯖しかいじった事無い厨なので、Makeとか分らんのです)
Zip.pmとcompress_zip.pm(?) を置いて、Zip.pmからuseの代わりにrequireするだけとか勘違いしてました。
Compress::Zlib::perlはMake(?)しないとライブラリファイルにはならないのでしょうか?
また、鯖内のコマンド検索をしたら、gzipというのがは使えるみたいですが(pathは /usr/bin/gzip)、これは通信時の圧縮専用のものでアーカイブを作るのには使えないのでしょうか?
引き続きご指南いただければ幸いです。宜しくお願いします。
318 :
弱杉:04/09/10 20:46:34 ID:+ZeQb9+r
>>317 お返事ありがとうございます。gzipに関しては参考URLで理解出来ました。
もう一点の『perlでのzipアーカイブの作成方法』についても
余所で訪ねた方がよろしいでしょうか?(モジュール関連スレとかに行けばよろしいですか?)
いちいちつまらん質問ですみません。。。
320 :
弱杉:04/09/11 02:38:55 ID:cyd1fAb1
>>319 ご指南ありがとうございました。そちらの板にいってきます。
スレ汚し、大変失礼しました。
失礼します。クッキーを用いて、入力したフォームの情報を一時記憶させようと思っています。
しかし、以下のソースだと何故かクッキーには書き込まれるのにフォームに既入力の状態になりません。
何がおかしいのか見ていただけないでしょうか?一つ目のソースはこれです。
$cookie_id = 'regist';
&get_cookie();
$name = $cookie{ 'name' };
print "<meta http-equiv='Content-Type' content='text/html; charset=Shift_JIS'>\n\n";
print <<"HTML_TAG";
<html><head></head><body>
<Form action="registration.cgi" method="POST">
<table width="600">
<tr><td><input type="text" name="name" size="20" value="$name"><input type="submit" name="regist" value="確認画面"></td></tr>
</table>
</FORM>
</body>
</html>
HTML_TAG
sub get_cookie {
my( $cookie_name, $value );
foreach ( split( /; /, $ENV{ 'HTTP_COOKIE' } ) ) {
( $cookie_name, $value ) = split( /=/ );
$cookies{ $cookie_name } = $value;
}
foreach ( split( /&/, $cookies{ $cookie_id } ) ) {
( $cookie_name, $value ) = split( /:/ );
$cookie{ &unescape( $cookie_name ) } = &unescape( $value );
}
}
sub unescape {
my( $data ) = @_;
$data =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1) )/ge;
return $data;
}
exit;
HTML_TAG
sub get_cookie {
my( $cookie_name, $value );
foreach ( split( /; /, $ENV{ 'HTTP_COOKIE' } ) ) {
( $cookie_name, $value ) = split( /=/ );
$cookies{ $cookie_name } = $value;
}
foreach ( split( /&/, $cookies{ $cookie_id } ) ) {
( $cookie_name, $value ) = split( /:/ );
$cookie{ &unescape( $cookie_name ) } = &unescape( $value );
}
}
sub unescape {
my( $data ) = @_;
$data =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1) )/ge;
return $data;
}
exit;
二つ目のソースはこれです。ここで、クッキーに書き込みはされるのですが、一つ前に戻ると
クッキーには確かに情報が入っているにもかかわらず、テキストボックスには何も表示されません…。
require "./sub_getparam.pl";# データ取得用サブルーチン
require 'jcode.pl';
$cookie_id = 'regist';
read( STDIN, $query, $ENV{ 'CONTENT_LENGTH' } );
&getparam( $query );
$name = $param{ 'name' };
$cookie{ 'name' } = $name;
&set_cookie();
print "<meta http-equiv='Content-Type' content='text/html; charset=Shift_JIS'>\n\n";
print <<"END";
<html><head></head><body>
<p><B><font color="red">内容を確認してください。</font></B></p>
<Form action="registration_complete.cgi" method="POST">
<table><tr><td>名前</td><td>$name</td></tr></table>
<input type="hidden" name="name" value="$name">
</form></BODY></HTML>
END
sub set_cookie {
my( $new_cookie, $date );
@pairs = ();
foreach( sort keys %cookie ) {
push( @pairs, &escape( $_ ).":".&escape( $cookie{ $_ } ) );
}
$new_cookie = join( '&', @pairs );
$date = &gmt_date( time + 86400 * 120 );
if ( $new_cookie ne $cookies{ $cookie_id } ) {
print "Set-Cookie: $cookie_id=$new_cookie; expires=$date\n";
}
}
sub escape {
my( $data ) = @_;
$data =~ s/(\W)/sprintf( "%%%02X", unpack('C', $1 ) )/ge;
return $data;
}
sub gmt_date {
my( $data ) = @_;
( $sec, $min, $hour, $day, $mon, $year, $wday ) = gmtime( $data );
return sprintf( "%s, %02d %s %04d %02d:%02d:%02d GMT",
( Sun, Mon, Tue, Wed, Thu, Fri, Sat )[ $wday ], $day,
( Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec )[ $mon ],
$year + 1900, $hour, $min, $sec );
}
exit;
sub set_cookie {
my( $new_cookie, $date );
@pairs = ();
foreach( sort keys %cookie ) {
push( @pairs, &escape( $_ ).":".&escape( $cookie{ $_ } ) );
}
$new_cookie = join( '&', @pairs );
$date = &gmt_date( time + 86400 * 120 );
if ( $new_cookie ne $cookies{ $cookie_id } ) {
print "Set-Cookie: $cookie_id=$new_cookie; expires=$date\n";
}
}
sub escape {
my( $data ) = @_;
$data =~ s/(\W)/sprintf( "%%%02X", unpack('C', $1 ) )/ge;
return $data;
}
sub gmt_date {
my( $data ) = @_;
( $sec, $min, $hour, $day, $mon, $year, $wday ) = gmtime( $data );
return sprintf( "%s, %02d %s %04d %02d:%02d:%02d GMT",
( Sun, Mon, Tue, Wed, Thu, Fri, Sat )[ $wday ], $day,
( Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec )[ $mon ],
$year + 1900, $hour, $min, $sec );
}
exit;
age
え〜と、、、
ソースを見ずにレス。
(´-`).。oO(見る気がおきねーよ)
「一つ前に戻ると」と書いてある。
つまりキャッシュされたページを見てると…
(;゚Д゚)
くっきー発酵と同一セッションで読み込んでんじゃねーの?
ソースみてないから推測だが
CGI.pm使って書き直してダメならもう一回来い
本当にクッキー読み込めているのか?
値を取り出して表示させるとか切り分けしてみ。
読む気にならんからこんなとこだな。
334 :
nobodyさん:04/09/11 19:54:24 ID:3nx87n19
Perlのバージョンは4.0.1.8です。バージョンが古い為なのか、
以下の様なsprintfを含んだスクリプトが使用できずエラーと
なってしまいます。どなたか、Perlの環境は変えずに、代わり
となるスクリプトがあれば教えて頂けませんか?
&SUB(sprintf "%02", $a - 1);
sub SUB{
my $value = shift @_;
system "$SHELL_COMMAND $value";
}
335 :
nobodyさん:04/09/11 19:58:22 ID:3nx87n19
>>334です。
すいません。スクリプトが間違えていました。
&SUB(sprintf "%02d", $a - 1);
sub SUB{
my $value = shift @_;
system "$SHELL_COMMAND $value";
}
( )
337 :
nobodyさん:04/09/11 20:41:24 ID:3nx87n19
>>334です。
何度もすいません。335のコメントが紛らわしかったので
再度書き込みました。
335で書いたスクリプトが正しいのですが、それでもエラーと
なっていますので、どなたか、代替のスクリプトがありましたら
教えて下さい。宜しくお願いします。
my
あっさり解決か
342 :
334:04/09/11 23:32:18 ID:3nx87n19
>>336,338
レスありがとうございました。
本日確認出来ない為、後日試してみます。
自演と言い始めるやつが自演
まじめに答えてくれる人に申し訳ないんでもうやめないか?
調子に乗って暴言吐いたのはマジですまんかった
お前毎回すまんかっただろ
誤ればなんでもどうにかなると思ってるのか?
掲示板を作っていまして、書き込みdataファイルに体裁用のhtmlタグも入れて、ブラウザから読み出すだけにしたいのですが、
新しいものを上に書くには、書き込み時に、まずファイルの内容を変数にいれ、その書き込みの内容をファイルに上書きした後追加でそれ以前のを書くしか方法はないですか?
あと、こちらはブラウザから直読みじゃないのですが、ファイルの上から何行を読む、正規表現でマッチしたところだけを読むにはどうすればよいのでしょうか?
よろしくお願いしますm(_ _)m
-
↑のハイフンってハッシュのキーに使えますか?頭文字にはできないのは知ってますが、
2文字目以降にも使えないんですか?
>>354 考え方は一緒だが
open LOCK, '>' . $lock_file or die $!;
flock LOCK, 2;
open LOG, '<' . $log_file or die $!;
open TEMP, '>' . $tmp_file or die $!;
print TEMP $new_article;
print TEMP <LOG>;
close TEMP;
close LOG;
rename $tmp_file => $log_file or die $!;
close LOCK;
>>355 my %hash = ('-' => 'foo', -a => 'bar', '-a-' => 'baz');
print @hash{'-', '-a', '-a-'};
357 :
355:04/09/13 07:34:16 ID:???
>>356 あれ?使えた・・・・;
-が初めか最後の時にはクォートしなきゃいけなかったのか;
それが面倒であまり使われてないんですかね?それとも他にも何かの処理中に面倒なことが
起こる可能性があったりするんですか?
358 :
355:04/09/13 07:36:22 ID:???
a-aもクォートがいるのか・・・・orz
クォートがいるのではなくクォートがなくても動くと言った方が正しいと思うが。
なんでクォートごときでそんなにへこむんだよ。
文字列をクォートするのはどんな言語でも当たり前のことだろうに。
361 :
355:04/09/13 09:29:42 ID:???
>>359 ?
%form = ( a-a => 1 );
エラーになる。use strict環境下だからかもしれないけど。
>>360 通販サイトのCGIだから商品名、商品価格とか色々商品番号をキーとしたハッシュを作る時に
いちいちクォートを入れてると見づらいし、書きづらいorz
ハイフンなしでもいいがCSV形式に変換して落とす時にいちいちハイフンを追加するのもちょっと億劫orz
Perlって結構自由?ゆるい?からマルチバイトかメタ文字以外でクォートすることはないんだorz
だって面倒でしょ。JAVA畑の人は慣れてるかもしれないけどさ。
362 :
355:04/09/13 09:30:13 ID:???
my %form = ( a-a => 1 );
の間違いね。
363 :
nobodyさん:04/09/13 09:33:33 ID:aK+3swHZ
Perl5.8.5をソースからインストールしようとしたとき、
「あなたのメアドは?」って聞かれたのですが、
これって何に使うのでしょうか?
>>363 >>364が言うように請求書が来るが、先払いも可能だよ。クレジット決済でやるのがまあ普通だね。
昔俺はメアドだけなら払わずに無視してもどこの誰だかわからないだろうと思っていたが、
IP+メアドで実は十分個人を特定できるようだ。(もちろん裁判所に申請して住所などの情報を調べる許可を得るみたいだが。)
>>365 たかが86.00$なんだから素直に払えよボケ。
>>361 細かいことを気にしないなら
my %form = qw{
a-a 1
b-b 2
};
とか。
データから、カンマを取り除いた数値のみを切り出したいんですけど
if ($key eq 'log'){
$val =~ s/\,//;
if ($val =~ m/[0-9,]{1,10}/){
$number = $val;
}
}
ではうまくいきません。どの辺がおかしいかご教授願います。
>>369 $val =~ s/\,//;
にgオプションつけるとか?
ダメです カンマの前しか取得されません・・・
元のデータは123245,6789,4567,みたいなの?
そこから123245と6789と4567を別々に取り出したいの?
それとも12324567894567て続けて?
こんな感じか?
my $val = "datadata1,234,567datadata....,456,789";
my @tmp = $val =~ /(\d{1,3}(?:,\d{3})*)/g;
foreach (@tmp){
$_ =~ s/,//g;
print "$_\n";
}
XXXX:1234,5677 みたいな形で
12345677 てカンマだけを抜かした形で取得したいす
じゃあね。
>>370の言うとおり。
if ($key eq 'log'){
$val =~ s/,//g;
$number = $val;
}
意見のすれ違いがおおいね・・・。
379 :
nobodyさん:04/09/13 14:45:23 ID:Dm3Qguqc
$a
が数値かどうかを判定するいい方法Plz。
$a =~ /^\d+$/
381 :
379:04/09/13 14:56:19 ID:Dm3Qguqc
>380
その意味を理解するのに手間取ってしまいました。
if($a =~ /^\d+$/){
#数値
}
ですね、ありがとうございました。
my @vals = qw/5.88 -50 300 s51 51s/;
foreach (@vals){
if($_ eq $_-0){
print "$_ = Number\n";
}
}
どう?
警告を気にしない場合にはいいんじゃないの?
>>361 bare word として許されるのは [A-Za-z]\w* にマッチする文字列のみ。
これに加え単項演算子としての - を bare word の頭に付ける事ができる。
<q cite="
http://perldoc.com/perl5.8.4/pod/perlop.html#Symbolic-Unary-Operators">
Otherwise, if the string starts with a plus or minus,
a string starting with the opposite sign is returned.
One effect of these rules is that -bareword is equivalent
to "-bareword".
</q>
=> 演算子は左辺の (- が頭に付くものも含めた) *bare word を*
クォートしてくれるが、何でもかんでも文字列リテラルにしてくれる
わけではない。
>>388 use warningsすると出る。
Argument "s51" isn't numeric in subtraction (-) at numberp.pl line 6.
Argument "51s" isn't numeric in subtraction (-) at numberp.pl line 6.
>>390 =~ s/\[A-Za-z\]/[A-Z_a-z]/;
393 :
nobodyさん:04/09/13 17:34:07 ID:nbuBgplM
ショッピングカートで現在のカゴの中身を表示するのに、
クッキーやファイルを使わないでする方法は無いですか?
m/^[-+]?\d+(.\d+)?$/
397 :
nobodyさん:04/09/13 20:01:22 ID:UGDBY8bj
訂正
m/^[-+]?\d+(\.\d+)?$/
n進数や指数付きの数値はどうすんのよ?
399 :
nobodyさん:04/09/13 21:08:13 ID:ZFdPbvGg
外部からのdatファイルを読み込むサブルーチンが働きません。
何十回も関数リファレンスや講座サイトを見比べても、どこが悪いのかがわかりません。
ちなみに、下記のコードの結果、$cs_xの値が-1になりました。$st_ffで出るパスは正しいです。
もしよろしければ教えて頂きたいなと思います。
sub st{
open(IN,"$st_ff") || &error("stファイルが見つかりません"); # $st_ff はstファイルの位置(相対パス)
@st_d = <IN>;
close(IN);
$i=0;
foreach (@st_d){
($name,$c_no,$hp,$lov,$his,$age) = split(/<>/);
$c_status[$i] = [$name,$c_no,$hp,$lov,$his,$age];
$i++;
}
$i--;
$cs_x = $i; # $cs_xは元データ(st)の行数を出す・チェック用
}
数値のマッチングも満足にできないおまいらって・・・・・カコイイね。
>>399 -1になってるならforeachが一度も処理されてないってことだろ。
foreach前に
print @st_d;
でも加えて確認してみ?
>>401 考えてみたらそうですね。
エラーメッセージが出ないので大丈夫と先入観を持ってました。(ちなみに、ファイル名を変えて、エラーが出るのは確認しました。)
ちなみに@st_dは無表示なので、1〜3行内に間違いがありそうです。
レベル低すぎる質問って自覚したので精進して出直して、ここにお世話にならないように頑張ります。
失礼しました。
>>402 俺の環境では動いたぞ
全然問題無い
しいて言うならchompしとけってくらいかな
$c_status[$i] = [$name,$c_no,$hp,$lov,$his,$age];
本当にわかっていてこうしているのか甚だ疑問なんだが
>>399 いちいち$iとか使わないで、
push @c_status, ほげほげ
とやる方がらくちんだよ。最後の$cs_xも、@c_statusの
大きさで読み込んだ行数わかるから冗長。
えっと、テストするファイルを間違えたみたいでした。
改変前のコピーを取っておいたフォルダで試してました。
本気で申し訳ありません。
>>404 それは後のサブルーチンで、$c_status[$i][$j]みたいなかんじで使おうと思って。
何か他にいい方法があれば教えていただけますか?
日本語文の中から最頻出単語を選ぶにはどうしたら良いのでしょうか。
英文と違ってスペースで区切られていないので、どこからどこまでが
単語か判断できないのですが…
>>408 「あの犬ちゃうちゃうちゃう?」
「ちゃうちゃうちゃう、ちゃうちゃうちゃう!」
「えー、ちゃうちゃうちゃう?ちゃうちゃうちゃうん?」
「ちゃうちゃうちゃうんって、ちゃうちゃうちゃうんとちゃうん?」
「ちゃうちゃうちゃうんとちゃうんって、ちゃうちゃうちゃうんな?」
分節してみてください。
人間が「どう分節するか」を定義できなければ、プログラムは分節できませんよ。
便利なモジュール等があるかどうかはともかくとして。
ちゃうちゃうちゃうちゃうちゃう・・・?_?
>>408 ぱんつくったよ
分節してみてください。
413 :
nobodyさん:04/09/14 15:39:19 ID:NAYEHf5j
初級質問失礼します
test.cgiというCGIで、?mode=viewの時viewのサブルーチンに
切り替えたいのですが、リンクを押してもindexの部分が表示されます
---
$mode = $in{'mode'};
if ($mode eq "view") { &view; }
&index;
sub index {
print "<a href=\"test.cgi?mode=view\">テスト</a>\n";
}
sub view {
print "this is a view\n";
}
---
すいませんがお願いします
>>413 exitするかmodeに何もなかったらindexと設定
416 :
413 :04/09/14 15:57:35 ID:NAYEHf5j
>>415 elseif ($mode eq "") { &index; }
としても、サブルーチンの最後にexit;つけても駄目でした。
前者ではindexも表示されなくなってしまいました。
釣りお疲れさん
419 :
413:04/09/14 16:09:01 ID:NAYEHf5j
>>419 indexだけで「Content-Type:」〜「</HTML>」までprintしてるんでしょ?
ヘッダーとかを別のサブルーチンにしてないならindex内で分岐しなきゃ。
elseif
422 :
413:04/09/14 16:45:28 ID:NAYEHf5j
>>420 すいませんindex内で分岐の意味が・・・。
sub index {
$mode = $in{'mode'};
if ($mode eq "view") { &view; }
print "<a href=\"test.cgi?mode=view\">テスト</a>\n";
}
こういうことじゃないですよね?動きません(TT)
CGIは
#!/usr/bin/perl
print "Content-Type: text/html\n\n";
print "<html><body>\n";
〜
print "</body></html>\n";
です。<html></html>タグの行はさっき付け足しました。
423 :
413 :04/09/14 16:46:11 ID:???
$mode = $in{'mode'};
if ($mode eq "view") { &view; }
&index;
sub index {
print "<a href=\"test.cgi?mode=view\">テスト</a>\n";
}
sub view {
print "this is a view\n";
exit; #←★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
}
釣りじゃなかったの?こうしたら?
#!/usr/bin/perl
require 'cgi-lib.pl';
$mode = $in{'mode'};
if ($mode eq "view") { &view; }
elsif ($mode eq "") { &index; }
sub index {
print "Content-Type: text/html\n\n"; #次に一行開けなけりゃだめ
print "<html><body>\n";
print "<a href=\"test.cgi?mode=view\">テスト</a>\n";
print "</body></html>\n";
}
sub view {
print "Content-Type: text/html\n\n"; #次に一行開けなけりゃだめ
print "<html><body>\n";
print "this is a view\n";
print "</body></html>\n";
}
おい、どうなんだ?
最初、elsifがないからいつもindexが実行されてた。
次に、だめだったのは、content-type出力しなかったから。
というお粗松くんじゃないのか?
>#次に一行開けなけりゃだめ
なんだりゃ・・・
428 :
413:04/09/14 17:36:16 ID:NAYEHf5j
>>424 >>425 いずれも駄目なのですが・・・(TT)なぜでしょう!?
後者は
require 'cgi-lib.pl';
の行は削除してコピペしました(エラーが・・)
>>425 紛らわしいので念のため言っておくと
>print "Content-Type: text/html\n\n"; #次に一行開けなけりゃだめ
># ここに空行を作るんじゃなくて ~~改行2個で空行ができてる
>>428 ちょっと確認
クエリ無ければindexを表示するのはわかったけど、
mode=viewならindex+"this is a view"?
それとも"this is a view"だけ表示?
>>428 ちょっと確認
mode=hogeなら?
>print "Content-Type: text/html\n\n"; #次に一行開けなけりゃだめ
>
ワロタ
ソース全体晒せやヴォケ
>>430 「次に一行開けなけりゃだめ」と出力されます
434 :
413:04/09/14 18:03:13 ID:NAYEHf5j
>>429 >mode=viewならindex+"this is a view"?
>それとも"this is a view"だけ表示?
this is a viewだけ表示です。
ページを切り替えるような感じで。
435 :
413:04/09/14 18:11:36 ID:???
>>432 いくつもやりましたがとりあえず駄目その1です(test.cgi)
#!/usr/bin/perl
$mode = $in{'mode'};
if ($mode eq "view") { &view; }
elsif ($mode eq "") { &index; }
sub index {
print "Content-Type: text/html\n\n"; #次に一行開けなけりゃだめ
print "<html><body>\n";
print "<a href=\"test.cgi?mode=view\">テスト</a>\n";
print "</body></html>\n";
}
sub view {
print "Content-Type: text/html\n\n"; #次に一行開けなけりゃだめ
print "<html><body>\n";
print "this is a view\n";
print "</body></html>\n";
}
$inはどこの世界からやってきたのでしょう(メルヘン
Content-typeはPerlのパスの下に書いたら?2回書くのマンドクセ
#!/usr/bin/perl
$|=1;
print "Content-Type: text/html\n\n";
require 'cgi-lib.pl';
&ReadParse(\%in);
if($in{'mode'} eq 'view'){ &view();}
&index();
sub index {
print "<html><body>\n";
print "<a href=\"test.cgi?mode=view\">テスト</a>\n";
print "</body></html>\n";
}
sub view {
print "<html><body>\n";
print "this is a view\n";
print "</body></html>\n";
exit(0);
}
exit(0);
441 :
413:04/09/14 18:36:18 ID:NAYEHf5j
>>440 エラーが出ます。
require 'cgi-lib.pl';
&ReadParse(\%in);
これをコメントアウトするとエラーは出ませんが、動作変わりません。
cgi-lib.plの記述は必要なのでしょうか?
参考にしてるフリーCGIではどれも使われて無いので・・・
なんか長くなってすいません。
>>441 その2行で?mode=viewというクエリを変数に格納している。
PHPだといきなり変数に入ってるから惜しいと言えば惜しいのかも。
「クエリ GET POST」あたりでググって勉強したほうがいい。
#! /usr/bin/perl
print "Content-Type: text/html\n\n<HTML><BODY>";
if($ENV{'QUERY_STRING'} eq "view"){
print "this is a view";
}else{
print "<A href=\"test.cgi?view\">view</A>";
}
print "</BODY></HTML>";
つーか、お前はcgi-lib.plって何か知ってるか?
知らなかったらぐぐれ
PHPは
$_GETとかに勝手に入ってくれるけど、perlは自分でしないとだめだよ
require "./cgi-lib.pl";
&ReadParse(*in);
$hoge = "$in{'hoge'}";
445 :
440:04/09/14 18:46:39 ID:???
446 :
440:04/09/14 18:48:42 ID:???
#!/usr/bin/perl
$|=1;
print "Content-Type: text/html\n\n";
($dust, $in{'mode'}) = split(/=/, $ENV{'QUERY_STRING'}, 2);
if($in{'mode'} eq 'view'){ &view();}
&index();
sub index {
print "<html><body>\n";
print "<a href=\"test.cgi?mode=view\">テスト</a>\n";
print "</body></html>\n";
}
sub view {
print "<html><body>\n";
print "this is a view\n";
print "</body></html>\n";
exit(0);
}
exit(0);
447 :
413:04/09/14 19:02:05 ID:NAYEHf5j
>>442-446 442, 446で出来ました・・・!!
仰る通りクエリというのが解ってませんでした。
説明とリンクありがとうございました。
勉強します。
お手数おかけしました。><
>>447 cgi-lib.plにパスが通ってなかっただけだろ。
cgi-lib.plすら入れてなかったりして
今の時代にcgi-lib.plかよ
CGIもぢゅるとかダサい
クエリも理解してないお子様にはcgi-lib.plがお似合いだ
理解してなかったらもじゅる使わない方がいいと思うのだけども
>>452 理解して使ってる俺はお子様ですかそうですか。
mainルーチンで decode() とかやってる方がまぬけ
まぬけのinルーチン
457 :
nobodyさん:04/09/14 21:53:20 ID:IqNnzcu2
CGIでアクセス制限するサイトを作っていますが、
認証後のページを表示している段階では〜〜.cgiと表示されているのですが、
ページからリンクへ飛ぶとIDとPASSがURLに表示されてしまいます。
なんとかIDとPASSを表示させないような方法はないのでしょうか?
検索すると表示されないようにするにはセッション管理の方法がある
という事で調べています。
perlでセッション管理するには
ttp://www.atmarkit.co.jp/fsecurity/rensai/webhole03/webhole01.html を見たところ
#!/usr/bin/perl
require 5.004;
use Digest::MD5 'md5_hex';
print md5_hex rAnd;
を加えればいいようなのですが、上手くいきません。
なかなか目的のページも見つからず途方にくれています。
どなたかご教授お願いします。
post
>>457 よく読め、そのページのどこにそれを加えれば
セッション管理ができるって書いてあるんだ?
ただ単に表示されないようにしたいだけなら
>>458
cookieとかcookieとかcookie
@list = ('a','i','u','e','o');
foreach $a(@list){
print "$_ = $a\n";
}
上のように書いて期待する結果が
0 = a
1 = i...なんですが、、、
現在、何個目かという情報はどこかに入ってないんでしょうか。
いちいちカウントしてやらないとダメですか?
462 :
457:04/09/14 22:32:38 ID:IqNnzcu2
>>459 POSTってform形式でしか使えないですよね?
認証後のページでは確かにPOST使うと表示されないのですが、
認証後のページの中のリンクをクリックすると表示されてしまうのです。
リンクはたくさんあるのですが全てフォームボタン等作成するという事なのでしょうか?
464 :
457:04/09/14 22:51:13 ID:IqNnzcu2
>>463 ありがとうございます。
やはりcookieとセッションIDなんですね。
セッションIDとかcookieという言葉自体は調べたので
理解は出来ているんですが、
具体的な方法がなかなか検索しても見つからないもので・・・
perlを使うんですよね・・・うーん、難しい
>>463 ありがとうございます。
foreachでないとちと面倒なので、なんとかしてみます...
>>464 ただIDをクッキーにくわせてそれ見るだけでそ
>>465 $iつけるだけなのにそんなに面倒かね
my $i = 0;
foeach (@list) {
print $i++." = $_";
}
forつかって無駄に$iを使わなくてもいぃような。
printf qq|%d = %s\n|, $a, $list[$a] foreach my $a (0..$#list);
無駄に$a使わなくてもいぃような。
>>464 CGI::Sessionとか使えばあんたみたいなアフォでも
セッション管理できると思うよ
>>468 foreach 修飾子はループ変数名に $_ 以外を使えない上、
その語順では my $a より前に $a が出てくるので文法エラー。
恥掻かずに済むよう、動作確認してから書こうよ。
>>468 初期化的な意味合いの0を行の先頭(あるいは上)ではなくて、
尻にもってこようとする上に変数の宣言部分が使用部分より
後にあるとは。。。
こういうやつが書くプログラムは300行程度で、もう意味不明。
Perlがそう書けるという悪い部分を勧めるべきではない。
>>472 sort,grep,mapつかってりゃざらやん。
@ayaya = sort{ }
grep { }
map{ } @ayaya;
こんなふうに書くと見やすくていいぞ。
print <<EOF if( ... );
うんこ
うんこ
EOF
儂は1万行超えるソースかいてるが
見にくいってのはグローバル変数を別モジュールで使いまわされて、
変数が何処からきてるんか解らんような描き方するやつのほうが困るな。
無論パッケージもooもされとらんようなやつ。
取敢えず読み慣れてないんなら慣れるしかなかんべ。
アルゴリズムがおかしいんならそこ突っ込むべき。
print "$_ = $list[$_]\n" foreach (0..$#list);
初心者スレだし
for (0..$#list){
print "$_ = $list[$_]\n";
}
でいいんじゃない?
>>473 東北の人ここにもイタ━━(゚∀゚)━━!!
477 :
457:04/09/15 12:29:12 ID:OFkP/WKY
>>450 >今の時代にcgi-lib.plかよ
CGI.pmの方が処理が重い。utf8,16なんぞも入ってるからな。
cgi-lib.plで済むところでは、あえてCGI.pmを避けるのがプロ。
>>462 kent-webのcosmoでも参考にし(使っ)たら。
>>477 CGI::Session説明してるサイトが見つからないだと?
試しにCGI::Sessionでググったらトップにきましたが。
それ見てわからないんだったら入門書見直した方がいい。
481 :
457:04/09/15 13:25:08 ID:OFkP/WKY
>>480 そういうページは既に見ました。
どういう仕組みかは書いてありますが、
具体的にどこで入手したりとかそういった方法も解らなくて、
perl/cgi入門書にも載ってなくて、CGIセッションの本があるなら是非買いたいのですが、
Amazonで検索しても見つからないので途方に暮れているのです。
気に障ったようですいません。
483 :
457:04/09/15 13:36:33 ID:OFkP/WKY
>>479 そのソフトも試してみましたが、
やはり認証後ページからリンクをクリックするとIDとPASSがURLに追加され
表示されてしまいます。
段々、スレ違いになってきているようなので退散します。
すいませんでした
具体的な方法ってただコピペしたいだけちゃうんかと
>>478 それでも普通CGI::Liteつかうべ、
Perl4しか使えない環境ならともかく
どうしてもログの頭に半角スペースが入ってしまいます。
どうすればスペースが開かないようにできますか?
>>488知らん。
本当に解決したいのなら情報を小出しするな。
>>488 print "@arr";
↓
print @arr;
まぁ、質問スレだから教えて君だろw
ありがちなミスだからじゃね
先生!質問です
datファイルの5行目をいきなり(1から4行目は読ませず)変数に読み込ませるにはどうしたらいいですか?seek関数では無理ですか?
datファイルの例
[0001](\n)
04/09/15(\n)
Name(\n)
http://www.〜〜(\n)
〜@〜.co.jp(\n)
Pass(\n)
IP(\n)
……
>>490 >>494 ログの「頭」だから違うんじゃないかなあ。($arr[0] eq ''ってオチはあるかもしれんが)
>>498 どうせ1行目だけ開いてないことになんか気付いてないよ
500 :
500:04/09/16 07:33:57 ID:???
SSIで呼び出す #exec cmd は perlの場合 require で出来たんですけど、
他の #exec cgi と #include virtual は何を使えば実行してくれるのでしょうか?
>>500 何言ってるかわからんぞ。
SSIとかCGIなどは、httpdサーバ(たぶんApache)の設定で実行できるか
どうかが決まる。
それと#exec cmd とか、#exec cgi とか、 #include virtualって何だ?
#はコメント記号だが。Perlスクリプトに何て書いたか書いてみろ。
502 :
500:04/09/16 09:10:41 ID:???
分かりにくくてすいません…
ssiのコマンド exec 引数 cmd を perl で実行するには require で出来ますよね?
ssiの他の、#exec cgi や #include virtual は perl ではどうやって呼び出したら実行してくれるのか。と言う事です。
503 :
500:04/09/16 09:16:23 ID:???
と言うか全体的に考え方間違ってたらすいません(汗
>>502 近いものを選ぶとこんな感じになるのかな。
<!--#exec cmd="test.pl"--> →require
<!--#exec cgi="cgi-bin/test.cgi"--> →socket
<!--#include virtual="test.txt"--> →open
505 :
nobodyさん:04/09/16 11:06:40 ID:kf2OMroI
cgiを呼び出す時に"**.cgi?keyword"として
渡した"keyword"を受け取ったcgiのほうで
変数に入れる方法が知りたいのですが・・・。
よければその方法(?で何か渡す)を何と呼ぶのか
キーワードだけでも教えてもらえれば調べます、
初歩的ですいません。よろしくおねがいします。
506 :
505 :04/09/16 11:15:26 ID:???
>>505 キーワードは「クエリ メソッド」
GETの場合既に$ENV{'QUERY_STRING'}に"keyword"が入ってる
>>505 ってか、面倒だからCGIモジュール使いなYO
509 :
500:04/09/16 14:35:39 ID:???
>>504 さんありがとうございます。
ただ socket を使った事が無くて検索してみましたけど、意味もあんまり分からなかったです。
どう記述したら良いのでしょうか?
読み込むファイルによって異なる記述になるんでしょうか?
510 :
505 :04/09/16 14:52:29 ID:???
>>507 ありがPございます。
またクエリだヽ(`Д´)ノ
>>509 1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
512 :
500:04/09/16 15:15:35 ID:???
今までssiで <!--#exec cgi="../xx/xx.cgi"--> と呼び出していたのを、perl内で作動させたいんです。
require '../xx/xx.cgi';
でやったらログファイルへのパスが上手くいきませんでした。
xx.cgiの中には
$logfile = "xx.txt";
if(!open (DATA,"$logfile")){&output("error404"); exit;}
と言うのを書いてるので、error404 と出ます。
同じフォルダに持ってくると出来ますが、違うフォルダじゃなければいけないので…。
それで、
>>504さんの解答をもらったので socket ではどうやって記述したら良いのかなと。
ディレクト構造は、
+folder1
┣xx.cgi
┗xx.txt
+folder2
┗xx.cgiを呼び出したい.cgiファイル
です。
> ただ socket を使った事が無くて検索してみましたけど、
> 意味もあんまり分からなかったです。
( ´ー`)フゥー...
>>512 socketを使うまでもないな。
$logfile = "xx.txt"; → $logfile = "../folder1/xx.txt";
でどうだろう。
515 :
nobodyさん:04/09/16 15:32:26 ID:kf2OMroI
別件で度々すみません、
このようにファイルを読み込んで、追加書き込みしているのですが
open(IN, "$outfile");
@data = <IN>;
close(IN);
open(OUT, "> $outfile");
print(OUT "<div>new</div>\n@data");
close(OUT);
こうしてデータを追加していくと$outfileの中が
<div>new</div>
<div>new</div>
<div>new</div>
このようにスペースが入り込んでズレていくんです。
原因わかりますでしょうか。
517 :
515 :04/09/16 15:55:35 ID:???
>>516 print(OUT "<div>new</div>\n", @data);
で問題なくいきました。ありがとうございますた。
518 :
500:04/09/16 16:05:00 ID:???
>>514 表示出来ました(^^;
ありがとうございます。
と言うか思いつかなかった自分が恥ずかしいです…。
>>513 socket ってそんなに使う物なんですか?
socket 使ってる配布CGI一個しか見た事ないんですけど…
敷居が高いとか?
今勉強している本にも無かったです(汗
LWPとかIO::Socketはサルでも分かるよ
520 :
500:04/09/16 16:31:27 ID:???
>>519 そうなんですか…
自分がまだまだなだけですね!
ありがとう御座いました。
>>518 他のサーバーのページやらcgiの出力結果を取得できるので
単語(含
>>519)だけでも覚えておけばいいと思う。
522 :
500:04/09/16 16:35:58 ID:???
523 :
nobodyさん:04/09/16 16:58:25 ID:TnwBmEsg
GDモジュールを使って作成した画像をさらに
Image::Magickモジュールを使って画像サイズを変更することは可能でしょうか。
#Image::Magick
use Image::Magick;
$width = 120;
$img = Image::Magick->new;
$img->Read("xxx.cgi");
$img = $img->Transform(geometry => $width);
print "content-type:image/png\n\n";
binmode(STDOUT);
$img->Write("png:-");
Image::Magickがcgiファイルを読み込めないみたいなので
GDモジュールの方でxxx.pngといったような画像ファイル名を
吐き出させる方法がわかりません。
#GD
use GD;
$w = 500;
$h = 500;
$im = new GD::Image($gw,$gh);
(描画処理)
$im->png(-1);
524 :
その(1):04/09/17 00:29:48 ID:iw09y7mQ
cgiを作ろうと思ってるんですけども、
#!/usr/local/bin/perl
require "./cgi-lib.pl";
&ReadParse();
$number_2 = $in{'number_1'};
#置き換え開始
$number_2 =~ s/イチ/1/g;
#$number_2 =~ s/ニー/2/g;
$number_2 =~ s/サン/3/g;
$number_2 =~ s/ヨン/4/g;
#$number_2 =~ s/ゴー/5/g;
$number_2 =~ s/ロク/6/g;
$number_2 =~ s/ナナ/7/g;
$number_2 =~ s/ハチ/8/g;
#$number_2 =~ s/キュー/9/g;
#$number_2 =~ s/ゼロ/0/g;
525 :
その(2):04/09/17 00:30:12 ID:iw09y7mQ
#結果の表示
print <<"ABCD";
Content-type: text/html
<html>
<body>
$number_2<br>
</body>
</html>
ABCD
これが本文です、number1には「ナナニーサンニーイチキューハチキューゼロ」の
ような文字(htmlのformからとってくる)が入っていて、それを数字に直したいです。
しかし、なぜか2、5、9、0の置き換えをしようとするとエラーになってしまいます。
なぜなのでしょうか
ニー ゴー キュー
↑ ↑ ↑
Shift_JISだと
'ー' 0x815B
'ゼ' 0x835B
# 0x5B → [
だからコケるのでしょう。
むしろ、「ニー」「ゴー」が関西ローカルなことに注意してください。
>cgiを作ろうと思ってるんですけども、
どんなCGIを作ろうとしてるのか気になりますなぁ
イチ ニ サン ヨン ゴ ロク ナナ ハチ キュウ ジュウ
なら大丈夫。
イー リャン サン スー ウー リュー チー パー・・・
ならもっといい
532 :
525:04/09/17 04:26:09 ID:iw09y7mQ
>>527 >>530 >>531 イチ ニー サン ヨン ゴー ロク ナナ ハチ キュー ゼロ
から成る文字列は、自分で作るのではなくコピペしてformにもってくるものなので
できればこのまま使いたいのです。それじゃないと、この変換を頭でやったほうが
速くなってしまう
しかし、”ー”と”ゼ”が入っていては正規表現は使えないってことですよね、
どうしたらいいんだか。。
皆、ふざけてるだけだ。漏れがまじめに答えてやる。
require 'jcode.pl';
$number_2 = $in{'number_1'};
&jcode::convert("*number_2", "euc");
この上と下の2行を加えればよい。jcode.plでググルこと。
文字コード変えればええやん
535 :
534:04/09/17 05:05:45 ID:???
ぎゃあ、かぶたよorz
\Qでクォートすれば?
UTF-8で書けばいいじゃーん
538 :
nobodyさん:04/09/17 12:32:25 ID:fDDxvp6Z
@ura = ("$answer{'team2'}","$answer{'1u'}","$answer{'2u'}","$answer{'3u'}","$answer{'4u'}","$answer{'5u'}","$answer{'6u'}","$answer{'7u'}","$answer{'8u'}","$answer{'9u'}","$answer{'totalu'}",);
すいません、上の配列をフォームで送った時にEUCに書き換えようと
した場合、&jcode'convert(*ura,'euc');でやると文字化けします。
どの部分を指定してやればよいのですか?
@uraは配列じゃん。jcode::convertの第一引数は変数。
540 :
nobodyさん:04/09/17 13:36:28 ID:442/c2rw
DBMを使って検索ベースのアプリを作ってるんですが、
use strict;していると、Fcntlの定数O_RDONRYなどに
引っかかりエラーが出てしまうんですが、これってしょうがないんでしょうか?
use strict 'vars';
だと大丈夫なのですが・・・。
すんません、おながいします。
Software error--------------------------------------
Bareword "O_RDONRY" not allowed while "strict subs"
----------------------------------------------------
tie(my %h, 'SDBM_File', $dbm_name, O_RDONRY, 0600);
ここの、O_RDONRYの部分です。
>>538 jcode::convert(\$_, 'euc')
for @answer{qw(team2 1u 2u 3u 4u 5u 6u 7u 8u 9u totalu)};
>>540 s/O_RDONRY/O_RDONLY/g;
542 :
540:04/09/17 14:13:35 ID:???
>>541 あぁぁ・・・、すいません、ホント申し訳ない・・・。
そしてありがとうございます。
>>540 use Fcntlのあとで別のパッケージに切り替えたりしてない?
544 :
543:04/09/17 14:24:49 ID:???
そんな難しく考える問題じゃなかったかonz...
545 :
540:04/09/17 15:10:51 ID:???
>>543 ほんとすんません・・・。
O_RDWRだと大丈夫なのにどうして!?
とかしばらく、strictとFcntlについて調べてました・・。
onry
547 :
538:04/09/17 16:06:15 ID:fDDxvp6Z
>>541 ありがとうございました。無事解決しました。
まだperlはじめたばかりで、教科書にも載っていない事だったので
感激です。
アクセスカウンターで2回に1回カウントするようにするにはどうしたらいいでしょうか?
0.5足す
それだと2回に1回のカウントじゃなくて1回ずつカウントしてしかも、
アクセスカウンターが
2412351.5
みたいになっておかしくなるのでダメなんです。
内部的に覚えておいて、出力時に切り捨てる
とある理由でperlを覚えたほうがいいということになったのですが、perlとは具体的になにができるのでしょうか
いきなりテンプレのプログラムのための文字列を覚えてもさっぱりです
>>552 お前には無理。
早く諦めて別のことに青春を燃やせ。
>548
出力時に1ビット右シフト。
>>552 まずPerlが何の略かを調べればそれが答えになるかも。
つーか他に何か知ってる言語あるの?
それ書いてくれたら答えやすいかもしらん。
>>552 えーっとね、エロゲとかエミュレータとか作れる
ファイルからread関数で変数にnバイト読み込んだとき、もし改行が入っていたら、その前後で分けて配列に代入するにはどうすればいいですか?
>>560 @a = split /\r?\n/, $in;
>561
dクス
563 :
538:04/09/19 01:32:18 ID:n0F83URY
>>552 僕も初心者なんですが、テンプレを丸写ししても何もわからないです。
僕が今している事は、よく使われるような関数(25個くらい)と、構文(10個くらい)
それと、正規表現、サブルーチン、ライブラリの使い方、これらを徹底的に
覚えようと思っています。いきなり完成されたテンプレからはじめるよりも
パーツから覚えていくほうが絶対にいいと思います。それと、ローカルで
CGIを動かせるように、perlやhttpd、apachなんかを入れておくと、htmlを
ローカルで動かすよに手軽にコーディングして動作確認できます。
お互いに、挫折せずに頑張りましょう
ここはコーディングの質問スレなのよね
565 :
nobodyさん:04/09/19 05:10:18 ID:vPjLXO2Q
if(index $a,"pc"){ $b= $pcbnr;};
上記のような文字列検索を行っています。
$aの中身は"pc imode voda ezweb"です。
if(index $a,"ezweb"){ $b= $pcbnr;};の場合は正常に動作します。
"pc"と言う文字列だけは上手く判断出来ないようです。
何故でしょうか?
$pcbnrはどっからきたのだ?
検索して何をしたいの?
それと最後の";"いらないよ
>>565 index $a,"pc"の返り値が0だから
つーか、indexが何をする関数か調べろ。
ただマッチングしたいんだったら
if($a =~ /pc/){
…
}
>>563 cgiでやるよりコンソール(.plファイル)でやったほうが効率いいかもよ。
行数少ないし、すぐにエラー行数分かるし。
569 :
nobodyさん:04/09/19 21:10:27 ID:8Bm3sZnu
掲示板を作っているのですが、大きな壁に当たりまして、
書き込みを保存しているファイルから、指定した件数(仮に5件とします)だけ読み込み、続きも"次の5件"のようなリンクで5件ずつ読み込んで行きたいのです。
いろいろ参考書を読んでみましたが、方法が思いうかびません…
よろしくお願いしますm(_ _)m
あと、HTTPヘッダ排出のあとは2行あけないといけないと言われたのですが、なぜなのでしょうか?
ファイルから全部読み込み5件ずつ表示すれば
cgi?page=2
>>569 ちゃんと最初からPerl勉強した方がいいと思う
>あと、HTTPヘッダ排出のあとは2行あけないといけないと言われたのですが、なぜなのでしょうか?
2行?1行じゃなかったっけ?とりあえずRFC嫁
行で言えば1行だね
569は改行コードが二つっていいたかったのかな。
574 :
565:04/09/20 00:38:39 ID:WP+I8Woy
>>567 if関数でも出来たんですね、パターンマッチ演算子は配列じゃないと駄目かと思っていました。
index $a,"pc"の返り値が0と言うのが解らないのです、$aは"pc imode voda ezweb"です。
自分で色々やってみた所、if(index $a," pc"){ $b= $pcbnr;};とすると思い通りに動作しました。
なぜ、半角スペースを入れるとするのでしょうか?
>>574 >>567が
> index $a,"pc"の返り値が0だから
と解説しているだろうが、このバカチン。
>>574 -1が返ってくるから。
indexが何する関数なのか調べろと567が言ってるだろ。
あと、おそらくおまいの思い通りには動いてないからな。
ためしにマッチしない文字でやってみなはれ。
ついでにifも調べて来い。
577 :
565:04/09/20 03:24:21 ID:WP+I8Woy
>>575,576
勘違いしていたようです。汗
indexは文字列検索に使う関数だと思っていたのですが、文字列の位置を返す関数なのですね。
CGIの本に書かれていたサンプルソースがパターンマッチっぽい例だったので、文字列検索向けの関数かと思っていました。
ifは数値が 「0」 か 「空」 の場合には偽、それ以外の場合には真なんですよね。
負の値も偽と判断されると思い込んでいました。
>>567さんのやり方で確実に動作する事を確認しました。
結構、適当にPearlを勉強していたのですが、もっと真面目にやろうと思います。汗
有り難う御座いました。
久しぶりに見たな。
実際にはPearlと名づけたかったんだが、すでにあったからPerlに無理にしたから
そお遠いわけでもないがな。
ばかだな
>577
まあ、ガンガレ
下のcgiを実行すると
3
と表示されました。どうなっているんでしょうか?
print "Content-type:text/html\n\n";
@_ = ("あ<>か","い<>き","う<>く");
@value = split(<>, @_);
print $value[0],<br>;
print $value[1],<br>;
print $value[2],<br>;
print $value[3],<br>;
print $value[4],<br>;
print $value[5],<br>;
print $value[6],<br>;
print $value[7],<br>;
splitの第2引数にリストは使えんのだが
push @value, split(/<>/, $_) foreach (@array);
push @value, split /<>/ for @_;
>584
え、そうなんですか(;_;)
>586
404は出ませんでした。httpdとinfoseekで確認しました。
>585>587
ありがとうございます。今携帯から見ているので、後で試してみます。
共用サーバでCGIの実験するな。師ね。
@_には3個入ってるんだから、
@value = split(<>, '3');
と同じ
これくらいローカルでやってくれよ。
593 :
583:04/09/20 22:31:17 ID:???
>589
403でしたorz
>590
httpdがバグった、と思ったので…httpdで試してsyntax errorが出ず、永久ループでなくてもダメですか?
>591
ありがとうございます。それも調べてみます
>592
ローカルとはmyのことですか?だとしたらどこをローカル化すればいいんですか?
|
|
∩___∩ |
| ノ _, ,_ ヽ (( | プラプラ
/ ● ● | (=)
| ( _●_) ミ _ (⌒) J ))
彡、 |∪| ノ
⊂⌒ヽ / ヽノ ヽ /⌒つ
\ ヽ / ヽ /
\_,,ノ |、_ノ
2重の釣りか
print "Content-type:text/html\n\n";
@_ = ("あ<>か","い<>き","う<>く");
foreach(@_){
$baka .= $_;
}
@value = split(<>, $baka);
print $value[0],<br>;
print $value[1],<br>;
print $value[2],<br>;
print $value[3],<br>;
print $value[4],<br>;
print $value[5],<br>;
print $value[6],<br>;
print $value[7],<br>;
>>597 君アホでしょ
せめて確認してから貼れよw
@_ = ("あ<>か","い<>き","う<>く");
print "Content-type:text/html\n\n";
print $_."<br>",for split /<>/ ,join("<>",@_);
join関数を知らなかった俺はバカです
joinとか以前に動かないから
>>583のスクリプトを*そのまま* aa.plという名前で保存する。
echo hage| perl aa.plすると、確かに3と出力される。
何が起こっているか誰か解説してくれ。
605 :
602:04/09/20 23:42:47 ID:???
606 :
583:04/09/20 23:55:49 ID:???
>593
よく強制終了するので…クロック数300rヘルツ鯖(´・ω・`)
>599
join関数なんてあったんですね。知りませんでした
>591
>603で気付いた、前スレ誤解スマソ
>604
そういうことだったのか…
>>606 use strict;するともっともっと気付く。
608 :
nobodyさん:04/09/21 21:16:47 ID:UQFv84yK
レンタル鯖で、セション管理のモジュールがインスコされてない&インスコ禁止なので、
ナイスなライブラリがないでしょうか・・・
もう自分で書くしか?
>>608 CGI::Session::AuthはPurePerlじゃなかったか?
失礼。CGI::Session::AuthじゃなくてCGI::Sessionだ。
ディレクトリのフォルダとかファイルとか
判別したり、容量、日時を読み出しているのですが
どこかにそういう関数とか解説されたHPないですか
>>1あたりのリンクにはなかったです
613 :
nobodyさん:04/09/21 23:24:42 ID:VDADrx76
Perlでのメール送信プログラムについて、質問です。
ヘッダを作成し、その内容にそってメールを送信するようにしているのですが、
特定の環境下で文字化けが発生してしまうようです。
ヘッダに
Content-Type: text/plain; charset="ISO-2022-JP"
と追加しているのですが、コレだけではダメなのでしょうか?
もう一点、質問なのですが、Beckyなどのメーラーから送信するとヘッダに
Content-Transfer-Encoding: 7bit
が付属されていますが、この内容も文字化けに関係しているのでしょうか?
質問内容が、Perlとちょっと離れているかもしれませんが・・・
よろしくお願いします。
>>613 ちょっとどころではありませんのでRFCを舐めるようにして読んでみましょう。
615 :
608:04/09/21 23:38:12 ID:UQFv84yK
>>609さん
PurePerlだと、PPMとか使ってインストールしなくても、
任意の場所にモジュールファイルを置いて、requireすればOKなんでしょうか?
requireって…
617 :
nobodyさん:04/09/21 23:59:06 ID:VDADrx76
>>614 スイマセン、RFCって何でしょうか・・・・
このような質問は、そちらですれば良いと言う事ですか?
わからない言葉があったらまずは何をすべきか
人に聞く
>>613 文字コードとか
文字コードとか
文字コード勉強した方がいいよ
スイマセン、RFC板が見つかりませんm(_ _)m
ググってみたんですが良く分かりません。
Perlを使用してDBアクセスを行いたいのですが、
開発環境はどのように作成したら宜しいのでしょうか?
インタプリタ等、必要ですよね・・・
PerlインストールしてDBインストールすればいいが。
>>624 環境構築は特に必要ないのでしょうか?
何も入っていないPCに
PerlインスコしてOracleインスコして
それから、FTPでCgiをUpすれば良いということでしょうか?
>>629 おぉ!$0ってのはなんだか使えそうですね。
試行錯誤してみます。
ありがとうございました。
$0ではファイル名しか取得できないようでした。
んー、難しい。
>>631 あれ!?そうだっけ、すまん。
んじゃ
$ENV{'SCRIPT_FILENAME'}, $ENV{'SCRIPT_NAME'}, $ENV{'REQUEST_URI'}
でどお?
>>632 マジサンクスです!
勉強になりました!
"ググったら"山ほど出てくると思うんだが
何もわからん奴は本買えよ
>>634 まず、CGIとPerlの違いを理解してから出直して来い。
exit関数の質問です。exit; exit(); exit(0); などいろんな書き方を見かけるんですが、意味は違うんでしょうか?
まぁプログラムの基本としてexit(1);は異常終了を示す物だと覚えていて欲しい
640 :
nobodyさん:04/09/23 13:49:58 ID:+nr7omoU
デコードについて質問です。
URIエンコードされてる文字列を元に戻すコードは
$buffer =~ s/%([a-zA-Z0-9][a-zA-Z0-9])/pack "H2",$1/eg;
$buffer =~ s/%([a-zA-Z0-9][a-zA-Z0-9])/pack "C",hex($1)/eg;
この二つのどちらでもデコードできますが、どちらがおすすめですか?
前者の方が処理は速いです。でもだいたいの入門サイトには後者のコードが載ってます。
そこらへんで悩んでます。みなさんあどちらを使ってますか?
642 :
nobodyさん:04/09/23 13:52:47 ID:+nr7omoU
644 :
nobodyさん:04/09/23 14:06:57 ID:+nr7omoU
>>643 そんなっ・・・・・
Cでやるのは明らかにに非効率で、処理時間も倍かかるのに何故かCの方がスタンダードな
理由をあたしと話してみてもいいじゃないですかっ!
もういいもん。あたし帰るからねっ!
646 :
nobodyさん:04/09/23 14:30:55 ID:+nr7omoU
>>645 何よあんたっ!?すっごいむかつくっ!信じらんない!
もうやめて!あなたここにこないで!絶対にこないでよ。
さっさと帰れ
648 :
nobodyさん:04/09/23 14:50:28 ID:qhT0f5z2
my で複数の変数を一気に初期化したい場合はどうすればいいのでしょうか?
my ($a=1,$b=2); だとエラーになります
定義したあとに一つ一つ代入していくしかないのでしょうか?
649 :
nobodyさん:04/09/23 14:52:57 ID:+nr7omoU
>>648 my ($a,$b) = (1,2);
my $a = 1,$b = 2;
すみません。
my @a = qw/ a b c/;
my @b = qw/ a b c d/;
二つの配列があって、@bには@aの持ってない値を持つことを禁じたいのです。
なので@aにない値なら削除したいのですが、どうかけばよろしいですか?
for ( 0..$#b)
とかやるとブロック内で@bの要素を減らすと問題がありますよね・・・おねがいします。
あ、あと追加で済みませんが、
my $a = [qw/1 2 3 4/];
のような場合のラストインデクスの求め方は
@$#a
でうまくいかないのですが、どうかくのですか?
>>640 $buffer =~ s/%([a-f0-9][a-f0-9])/chr(hex($1))/ieg;
654 :
651:04/09/23 15:13:10 ID:???
>>653 ・・・どう応用すればいいんでしょうか?
655 :
nobodyさん:04/09/23 15:28:26 ID:+nr7omoU
>>651 my @c;
foreach my $value (@b){
if ( map /$value/, @a ) { push @c,$value }
}
これで@cの中には@aにあるものしか入らないよ。
>>653はむかつくやつだから
無視した方がいいよっ!だって私回答したんだから、それくらい言う権利あるわよね!
>>651 前半:
my %a;
map $a{$_}++, @a;
@b = grep !$a{$_}, @b;
後半:
$#$a
657 :
nobodyさん:04/09/23 15:33:08 ID:+nr7omoU
>>656 何あんたっ!もう私が答えてるのよ!失礼なことしないでよっ!バカじゃないの!
658 :
651:04/09/23 15:41:12 ID:???
>>656 そういうことでしたか;勉強不足ですみません。ありがとうございました。
釣り師としては3流
660 :
651:04/09/23 16:04:15 ID:+nr7omoU
思いっきりつれてるけどなw
$varに$num=123、$cha="abc"をくっつけて$var123="abc"を作りたいんですが、どうすればいいですか?
663 :
nobodyさん:04/09/23 17:06:44 ID:EIIt3BOR
GD::Graphについて質問です。
簡易的なサンプルのグラフが出力でき、目的の棒グラフを作ろうと
思って、棒グラフと、点ぐらふで、左軸と右軸にそれぞれ違った
数値を持たせようと思い、オプションのセットの部分で、
$graph->set(
(略)
two_axes => true,
y1_max_value =>100,
y1_min_value =>0,
y2_max_value =>50,
y2_min_value =>0
);
と表してみたのですが、左の軸しか出力されません。
true_axesの値がtrueの時と言うことは、書いてあったので、
そこがおかしいのかと思い、two_axes => "true",としてみたり
two_axes => 1,としてみたり、色々試してみたのですが、
だめでした。どのようにしたら、左右別々の軸の値を出すことが
できるでしょうか?ご教授お願いいたします。
$a = "abcdeFGRYEHDU-sss-";
もしも$aの値の中にa-zA-Zとハイフン(-)以外を含んでたら処理発動ていうのがしたいんですが、
$a =~ /[a-zA-Z\-]/;
としてもうまくいきません。ハイフンをエスケープできてないのでしょうか?
if ($a =~ /[^a-zA-Z\-]/){
処理
}
[^A-Za-z-]
667 :
664:04/09/23 20:46:29 ID:???
>>665-666 すみません。そこ書き間違えてました。
[^a-zA-Z\-]としてます。
my $a = "abcdeFGRYEHDU-sss-";
print "ok" if $a =~ /[^a-zA-Z\-]/;
これだと普通にうまくいくようなので、どうやら初めから他の部分のコーディングにミスがあったんだと思います。
すみません。
フォームからsubmitしたCGIの中で、
CGI::Liteのparse_cookiesを呼ぶと、
なぜかフォームの内容までが取得されてきてしまったり、
逆にparse_form_dataでクッキーの内容まで取得されたり、ということが起きています。
parse_cookiesは、parse_form_dataとほとんど同じ動きをする、
というのをどこかで見ましたが、同じ内容が取得されるということなのでしょうか?
$a $b $c $d $eの中で一番大きな数字を$xに格納したいのですが
いちいちif文で$a>=$b && ...... とやる以外に方法はありますか?
>>669 map { $x = $_ if($_ > $x);} ($a,$b,$c,$d,$e);
671 :
669:04/09/24 00:49:04 ID:???
672 :
nobodyさん:04/09/24 01:07:35 ID:AJG/3HYE
あるCGIをダウンロードしたのですが
Editorでいじろうかと思ったのですが
文字が文字化けして何を書いてあるのかわからないのですが
この文字化けを解決する方法ないでしょうか?
TeraPadでも使ってろ
674 :
nobodyさん:04/09/24 01:26:51 ID:QHIu4qbQ
連番の key を持つ連想配列の中から、先頭か最後の key の data を取り出したいのですが
なにか手軽な方法はないでしょうか?
キーは不定なので直接指定することはできません
今は↓のようにいったん key を配列にしてからソートして目的の key を
指定してるんですが他に何かいい方法はないでしょうか?
my @tmp = sort keys(%abc);
my $data1 = $abc{$tmp[0]};
my $data2 = $abc{$tmp[$#tmp]};
>>674 ハッシュのキーには順番はないんだからそれでもしょうがないんじゃない?
ところで連番って、キーは数字なのか?
もしそうならそれだと最後は得られないけど。
sortだけだとキーが1〜10としたら 1 10 2 3 4 ・・・になってしまう。
@tmp = sort { $a <=> $b } keys(%abc); にしないと。
>>674 sortを1回やるのとmax,minをそれぞれ求めるのはどっちが得だろうか
sortはO(n log n)でmin,maxを求めるのはO(n)になるのかなあ
sortは最悪O(n^2)
nが十分大きくなればオーダーきいてくるので明らかにsort不利っぽいけど、
小さいときどうかは微妙だよな。perlのsort意外に速いし...
use strict;
use Benchmark;
use vars '%Hash';
my %rand;
$rand{ int rand 100000 }++ while keys %rand < $ARGV[0];
@Hash{ keys %rand } = values %rand;
timethese(-5, {
each => sub {
my $min_key = 100000;
my $max_key;
for (keys %Hash) {
$max_key < $_ and $max_key = $_;
$min_key > $_ and $min_key = $_;
}
my($min_value, $max_value) = @Hash{$min_key, $max_key};
},
sort => sub {
my @key = sort { $a <=> $b } keys %Hash;
my($min_value, $max_value) = @Hash{@key[0, -1]};
},
});
use URI::Escape;
$buffer = uri_unescape($buffer);
おまいらifの条件文が長くなった場合ってどうやって書いてる?(見やすくするための書き方)
if ( $a == 1 && $b == 1 or $c == 1 ){...}
とか
if ( $a ==1 &&
$b == 1 or
$c ==1 ){..}
どっちもイマイチ見づらい。おまいらはifの条件文がやむを得ず長くなってしまったときに
どうやって視認性を確保してる?
>>683 なんで or のときは || 使わないで
and のときは && 使ってるの?
合わせたほうがよくない?
685 :
683:04/09/24 19:55:58 ID:???
>>684 そうだったorzごめん。
それで何かいい書き方ないかな?一番いいのは冗長な条件文にしないことだけど、
たまにどうしようもないときってあるでしょ?
時間がないから妥協とかするときにでも、とっさにできる最低限のこととして
読みやすさだけは確保したいよね。
687 :
683:04/09/24 20:07:59 ID:???
>>686 そういう話ではないんだ^^;
条件文を冗長でないものにする方法じゃなくて、
冗長な条件文の読みやすくするための書き方みたいな感じ;
690 :
689:04/09/24 21:19:18 ID:???
>@ct = <COUNT>;
ここで改行削除されてないから。
こうするとよくわかるんじゃない?
foreach $_ ( @count ) {
print COUNT "[$_:]";
}
foreach $_ ( @ip ) {
print COUNT "[$_:]";
}
692 :
689:04/09/25 08:34:52 ID:???
>691
おぉ!出来ました!ありがとうございました!
>>687 > 冗長な条件文の読みやすくするための書き方みたいな感じ;
冗長だったら最適化しろよ。
とあるハッシュのキーの中に
test
というキーがあるかないかを調べるにはどう書くのが一番ですか?
if ( map/^test$/,keys %hash ) {
print "ありました";
}
もっと簡単な方法はありますか?
>>694 if (exists $hash{test}) {
print "ありました";
}
>>693 お前・・・・
最適化する時間も、才能も、素質も、スキルも・・・・・・・ないorz
そんなとき、そんな俺でも読みやすいソースにしたいっていってんだよボケ!
出直してこいや
さぁ、香ばしくなってまいりました。
どれが一番読みやすい?
if ($a == 1 and $b == 1 or $c == 1) {print 'ok'}
if ($a == 1 && $b == 1 || $c == 1) {print 'ok'}
if (($a == 1) * ($b == 1) + ($c == 1)) {print 'ok'}
if ($a == 1 and $b == 1) {print 'ok'} elsif ($c == 1) {print 'ok'}
視認性は、全体のアルゴリズムとコメントで解決するのが一番で、
if文をどう記述するかは二の次だと思うんだけど?
>>696 見易さ(=見た目スッキリ)と読みやすさ(=処理内容のつかみやすさ)は別でしょう。
話の流れを追っても、あなたがどっちを優先したいのかがもひとつ見えないよ。
ここの人に最適化してもらうよりも、自分がわかりやすいと思うコード・記述に
しとけばいいと思うんだけどな。適度に冗長性を確保するのも大事だろうし。
>>698も書いてるけど、コメントのほうで整理しとけば条件文が長いことぐらいは
気にならないと思う。
と、
>>686が一瞬「三浦理恵子」に見えた人が書いてみる。
700 :
683 696:04/09/25 18:11:58 ID:f8iWY7is
>>699 >見易さ(=見た目スッキリ)と読みやすさ(=処理内容のつかみやすさ)は別でしょう。
>話の流れを追っても、あなたがどっちを優先したいのかがもひとつ見えないよ。
別なの?同じだと思ってた。
一番いいのはスキルアップして、最適なコーディングを瞬時にできるようになることなんだけど、
実際Perlばかりに時間を割けないので、とりあえず見やすさ&&読みやすさ%%把握しやすさだけ
なんとかならないかなと思って。
もちろん最適なコーディングに勝るものは無理だけど、少しはいい書き方ってあるのかなと。
いわゆる改行の入れ方、スペースの明けかた、揃え方。
まああいまいすぎだよね。絶対的な回答ではなく、みんなの習慣的な書き方の解答とかが
ほしかったけど・・・しつれいしますた。
★= 頼むから言語論争はマ板でしてね =★
だれも言語論争などしていない。
ぶっちゃけ多めにコメントいれておけば問題ない。
少なくて意味がわからんかったときは時間かぐっとかるが、
多めなのは読み手が消せばいいだけだから問題ないし。
アルゴリズムの問題は書法の範囲の記法とは別次元だわな。
それは非常に大きな課題だし。
704 :
nobodyさん:04/09/26 18:13:38 ID:tuEyJcFU
すみません、以下の要件を満たすためにはどのように書けばよろしいでしょうか。
・テキストの中から<div align="left">という文字列が含まれる行を探す
・みつかった<div align="left"> の行から、その次の </div> までのテキストを
抜き出してprintする
-<div align="left"> はテキスト中に1つのみです。
-</div> は何度も出てきます。
現状 @stringlist に突っ込んで、行数固定で抜き出していますが、
これだと(動的に生成されるページである為)内容が変わってしまうと
対応できません(当たり前)^-^;
よい方法があればお教えくださいm(_ _;)m
>>704 正規表現を体得するのぢゃ、若きヂェダイよ
706 :
704:04/09/26 18:31:00 ID:tuEyJcFU
はい。マスター。
いま、こんなかんじです^-^;
--------------------------------------------------
#!c:\perl\bin\perl.exe
open(IN, "bin.html") || die "cannnot open!\n";
@stringlist = <IN>;
#読み出す行数
$end = 10;
for ($begin=1;$begin<$end;$begin++){
print @stringlist[$begin];
}
close(IN);
--------------------------------------------------
707 :
704:04/09/26 18:31:31 ID:???
sage忘れすいませんマスター
( ● ・3・ ● ) エェー @text = <IN>; $text = join('', @text);
$text =~ s|.*<div align="left">(.*?)</div>.*|$1|s;
709 :
704:04/09/26 18:53:56 ID:???
1.$begin = @stringlistから、<div align="left"> を探して、その行数を返す。
2.$end = 1の行数から検索を開始して</div>が見つかった行数を返す
で、実現できそうな気がするのですが、
・配列から任意の文字列を含む行を探す
・別の文字列を含む行を、特定の行(1で見つけた行)以降で探す
方法はないでしょうか。
711 :
704:04/09/26 19:01:06 ID:???
>>708 2行ーッ!!!??
バチーリですた。
なちじょあ ◆yEbBEcuFOU マスター。
でも何やってるかびっくりするぐらいさっぱりです。
…<div align..> と、</div> 行を含んだものを出すには、どこを
どういじればよいのでしょうか。
現状--------------------------------------------
open(IN, "bin.html") || die "cannnot open!\n";
@text = <IN>;
$text = join('', @text);
$text =~ s|.*<div align="left">(.*?)</div>.*|$1|s;
print $text;
---------------------------------------------------
712 :
704:04/09/26 19:19:13 ID:???
解読試みるス。マスター。
$text = join('', @text); #''という文字列で区切って挿入。1行に纏めたんスねマスター。
$text =~ s|.*<div align="left">(.*?)</div>.*|$1|s; # ~ <^-^;???
>>711-712 「出力されてるのは <div 〜>(かっこの中身ですか)</div> ?」と思いながら
ぐりぐりしてみましょう。
というか、正規表現って何なのさと思いながら激しく調べてみてください。
714 :
704:04/09/26 20:35:15 ID:???
$text =~ s|.*<div align="left">(.*?)</div>.*|$1|s;
↑この行がさぱりです。
$text =~ s :$textの中身を置換する
| :or
.* :拡張子は問わない??
まず、なぜ 置換とそれ以降がorで分けられるのでしょうか??
715 :
704:04/09/26 20:51:59 ID:???
>>マスター
.*<div align="left">(.*?)</div>.*
これの意味がなんとなくわかりますた!
拡張子全然関係ないですねm(_ _;)m
-----------------------------------------------------------------
任意の文字列の後に<div align="left">がきて(?不明)<div>がきて、
その後にまた任意の文字列
-----------------------------------------------------------------
で、あっていますか?
いい加減スレ違いだから
704を見て思ったんですけど、
外部ファイルの、改行の3つ目まで読み込む
にはどんな手順を踏めば出来ますか?
719 :
717:04/09/27 00:18:45 ID:???
>718 forでどうすればいいか分からないです。。。
>>719 ファイル操作,perlでググってこい
そして一回コード書いてから質問しろ
あ、書き忘れていましたが、外部記録ファイルの中身は1000行くらいあるので、全部読み込むのは避けたいんです。@buf=<IN>以外で3行だけ読む方法はありませんか?
声優が岩男潤子で
サリー・セイント・フォードか。
これは偶然なんですか!
超誤爆
>>722 1000行なんかなにも気にする必要ないぞ?
ファイルサイズ 50k とかでしょ?
10万行とかいかない限り、気にしてもしょうがない。
727 :
nobodyさん:04/09/27 04:34:02 ID:77N/SlLL
はじめまして。
Perlのデータ受け取りに関しての質問です。
<input type="hidden" name="com" value="$in{com}">
の$in{com}部分に、改行を入れても、一般的に問題はないでしょうか?
htmlに
<input type="hidden" name="com" value="あ
い
う
え
お
">
のように記述しています。
あ\nい\nう\nえ\nお\n
のようにデータを受け取ってくれますでしょうか?
質問する前にやってみればいいじゃん
>>722 while(<>) {
exit if $. > 3;
print;
}
がいいんじゃあない?
指定ディレクトリにあるファイル名一覧を配列に取得するのはどのように書けばいいでしょうか?
>>731 とりあえずこんなとこだろう
opendir(DIR, $some_dir) || die "can't opendir $some_dir: $!";
@filenames = readdir(DIR);
closedir DIR;
>>732 ありがとうございます!
家に帰ったら試してみます!
CSVファイルを読み込んでそれをX件ずつ表示するプログラムを組みたいのですが
(Googleの次のX件とかみたいの)どういう風に組めばいいのかさっぱりわかりません。
参考になりそうなソースとかないでしょうか?
735 :
722:04/09/27 16:50:03 ID:???
>723
出てきた出てきた^^;ググルって要らないサイトばっかマッチする糞検索鯖だと思ってました(ショボーン
>729>730
ものすごく簡潔で驚きました^^;;;
はぁ…
↓次の質問どうぞ
>>735 帰れ^^;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:;;;;;;;;;;;;;;;;;;;;;;
質問させてください。
サブルーチンからハッシュを返す方法がどうにもわかりません。
いろんなサイトをググってみたのですが、実際に試しても上手くいませんでした。
---------------------------------------------
%hashA = ("aaa","0","bbb","1","ccc","2") ;
%hashB = &hash_return() ;
print %hashA ;
print "\n";
print %hashB ; #←渡ってないので何も表示されない・・・(´・ω・`) ショボーン
sub hash_return{
%hoge = ("aaa","0","bbb","1","ccc","2") ;
return \%hoge;
}
---------------------------------------------
sub hash_return{
%hoge = ("aaa","0","bbb","1","ccc","2") ;
return \%hoge; #★★★ この \ を取れクズ野郎 ★★★
}
\%hogeで返すんなら、受け側は$hashBになるわな
>738
うざい氏ね^^;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:;;;;;;;;;;;;;;;;;;;;;;
:イラネ(・△・)
おお?
それも試したはずなんですが・・・
ありがとうエロいおじちゃん!
>>740
負荷計測とかしたいのですが、やり方とかあるのでしょうか?
教えて!偉い人!
745 :
nobodyさん:04/09/27 19:32:56 ID:j0XZIPtZ
無名配列の配列数を得るにはどうすればいいのでしょうか?
$#hoge だとエラーになります
データのソートで悩んでます。
100の1
1000の2
100の3
500の1
1000の1
500の2
100の2
みたいに数字と日本語が混ざったデータを
100の1
100の2
100の3
500の1
500の2
1000の1
1000の2
にしたいのですが、<=> cmp どちらでやってもこのようになりません(当たり前なんですが…)。
どうやったらこんなソートが出来ますか?
748 :
nobodyさん:04/09/27 20:44:35 ID:kQMIC0Dw
foreach(@chinko){
my $seieki;
$seieki++;
print "$seieki";
}
とやると毎回、$seiekiが1になります。
my $seieki;
の部分、一般的には、$seieki=0;とするのが普通でしょうか?
my〜は数値をリセットするためにも使用するものなのでしょうか?
詳しい方がいたら教えて下さい。
749 :
747:04/09/27 21:01:06 ID:???
力技(?)で解決しちゃいました。
100の1
1000の2
を
100.1
1000.2
のように日本語の部分を小数点にしてソートしてあとで小数点を日本語に戻しました。
もっといい解決策がありましたら教えてちょ。
>>749 100の100と
100の2の大小関係は?
>>747 print
map "$_->[2]\n",
sort { $a->[0] <=> $b->[0] || $a->[1] <=> $b->[1] }
map [ /(\d+)/g, $_ ],
qw(100の1 1000の2 100の3 500の1 1000の1 500の2 100の2);
>>748 my $count;
foreach (@data) { $count++; print $count }
print 1..@data;
753 :
nobodyさん:04/09/28 05:45:24 ID:pXXg1bBk
行数を減らすと処理速度は速くなるのでしょうか?
試せ。
ストップウォッチ持ったか?
真中のは時計のスイッチだぞ。間違えんな
756 :
nobodyさん:04/09/28 06:09:05 ID:B5P8Vfsa
おはようございます。
現在win2kにてActivePerl-5.8.4.810-MSWin32-x86.msi
を入れて使っています。
9桁以上の10進数正数(例えば36089479532304)を
16進数変換したいのですが
$a = sprintf "%X", $a;
のようにすると8桁までしか変換できず、オーバーフローした場合はFFFFFFFFとなってしまいます。
どうにか9桁以上を変換できないものかと色々検索したのですが
みつからず・・お力を貸していただけないでしょうか。
アドバイスいただければ幸いです。
757 :
756:04/09/28 08:06:42 ID:???
Hex(36089479532304);
sub Hex {
my $val = shift @_;
my @hx = (0..9,'A'..'F');
my $hex;
while ($val > 15) {
$hex = $hx[$val % 16].$hex;
$val = ($val - ($val % 16)) / 16;
}
$hex = $hx[$val]. $hex;
return $hex;
}
先ほどの9桁以上の10進数→16進数変換はこのような形でなんとか
いけました。
そしてもう一つの問題が・・
巨大整数計算なのですが
3164311364の二乗 3164311364**
みたいなことをやると
1.00128664083395e+019
のような形になってしまいます。
use bigint;
や
use Math::BigInt;
も宣言してみたのですが結果は同じです。
きちんとした整数を出してやるにはどうしたらよいのでしょうか。
1.00128664083395e+019に関してはオーバーフローしている部分が
019にはみ出しているのかと思い、
19100128664083395としてみたのですが
これでは二乗の答えになっていません。
あぼーん
あぼーん
760 :
758:04/09/28 10:44:15 ID:???
一般的にjcodeが一番負荷かかるのかな?
>>761 わたくしがその難問に答えてしんぜよう。
で、jcode と何を比べた場合??
>>757 「1.00128664083395e+019」とは、「1.00128664083395×10^19」の意味だ。
BigIntは使い方が間違っているのでは?
次のようにすると、「+10012866408339540496」と出力される。
use Math::BigInt;
my $x = Math::BigInt->new('3164311364');
print $x->bpow(2);
小数点での四捨五入の処理について質問です。
(該当件数 / 合計件数)をパーセントで表示しようと思っています。
例えば、合計3件の該当1件ならば33.33333%となります。
# 小数点第二位での四捨五入処理
$percent = ($count / $total * 100);
$percent = $percent * 10;
$percent = (int ($percent + 0.5) / 10);
こうすると、33.3%となりますが、これを3回繰り返しても合計100%にはなりません。
割り切れない数(無限小数でしたっけ?)を含むパーセンテージが存在する場合、
合計を100%にするということは不可能なのでしょうか。
765 :
747:04/09/28 17:40:11 ID:???
>>750 おっと、ドツボに嵌るところでした。
指摘サンクス
>>751 完璧です。
すばらしい!
ありがとうございましたぁあ!
758-759
ってなにが有ったんだ?(w
googleのURLエンコードされた文字列をeucに変換したくて色々とやっているのですがうまくいきません
perl4とunicode.plとjcode.plを利用しています
(jcode.pmの利用許可が下りませんでした)
#!/usr/local/bin/perl
require './unicode.pl';
require './jcode.pl';
$googleurl = "%E5%AE%9F%E9%A8%93";
$teststr = "実験";
$googleurl =~ s/%[0-9A-F][0-9A-F]/pack("C",hex($1))/eg;
@googleuni = &unicode::UTF8toUTF16($googleurl);
$googleurl = &unicode::u2e(@googleuni);
print "$googleurl\n";
としているのですが何も出力されません
>>766 電話番号の数字をある規則で文字に置き換えるプログラムとかいう
お題だったんだけど、サンプルに電話番号のような文字列が含まれ
ていたのであぼーんされたようです。
770 :
767:04/09/28 22:22:13 ID:???
うわ、すいませんperl自体は5.005_03の様です・・・
/usr/binが先にパス通っててそっちでperl -vしてました・・・
771 :
nobodyさん:04/09/28 22:25:55 ID:YPzWwkuA
コマンドラインの代用となるようなCGIスクリプト
を書こうと思ってます。
フォームから簡単なスクリプトを送るとその結果をブラウザに
返すようなプログラムです。
で、perlのスクリプト上でperlのスクリプトを評価するような
処理をしなければいけないのですが、どのように実現すればいいでしょうか?
eval
>>767 × $googleurl =~ s/%[0-9A-F][0-9A-F]/pack("C",hex($1))/eg;
○ $googleurl =~ s/%([0-9A-F][0-9A-F])/pack("C",hex($1))/eg;
掲示板で、読むときCGIによる記録ファイル読み込みではなくHTML出力にして、書き込む時だけCGIを使うようにしたら多少は負担が減るんですか?
一定時間に@5人に1人が書くときA100人に1人が書くとき(チャット) で教えてください
1. 読むときCGIによる記録ファイル読み込みではなくHTML出力にして、書き込む時だけCGIを使う
2. 読むときCGIによる記録ファイル読み込みではなくHTML出力にして、書き込む時だけCGIを使う
フツーに考えれば掲示板だろうがチャットだろうがトータル負荷は減る。
だがしかし、ファイルが壊れるリスクを考慮すると、書き込み時の処理はシンプルにしたいところ。
よって掲示板には有効だが、ほいほい書き込みが発生するチャットには向かない。
>775
すみません
>776
ありがとうございました
778 :
nobodyさん:04/09/29 03:57:33 ID:6EqyI/FO
(1)変数へ代入する処理を減らす
(2)print "〜";文をなるべく1つにまとめる
みなさんはどちらを優先しますか?
またどちらの方が負荷は減るでしょうか?
詳しい方、意見お聞かせ下さい。
そんなことはどうでもいいので
アルゴリズムの改善を汁
>>779 に同意
CGIで一番負荷がかかるのはperl自身のプロセス起動
次はファイルの入出力
代入だのprintだのは誤差の範囲
>>780 プロセス起動なんて軽くでけるん?
mod_perl使えってのは無しな(w
ファイル入出力は同意。
いや、ファイル入出力はどのように入出力してるか見れば、あまり軽くは出来ないだろう。
と言うか、ファイル入出力を見直して軽く出来たら書いた人間が糞。
と言うわけで
>>781 mod_perl使えw
mod_perlも扱いが難しい。
掲示板程度のスクリプトでも長いこと動かしていると、プロセスの
メモリ占有量が馬鹿みたいに膨れ上がる。
グローバル変数はほとんど使わないように組んでるし、
my で宣言したものはスコープを外れた時点で解放して欲しいんだけど、
ちゃんと領域を回収してくれてないのかな。
そういえばPerlのGCって意識したことなかった。
世の中の全ての
全てのPerlで書かれたCGIが
use strictしてあって
動いてたなら
世界はもっと平和だったのに
>>781 肥え太った 5.6.x 以降を使わず 5.005_0x を使うと少しは
軽くなるかも知れない。Perl4 スタイルな小規模スクリプト
がメインなら、無闇に Apache::PerlRun で走らせるよりも
CGI にした方が軽い場合もある。
まぁ全てはケースバイケースだから、Apache Bench で
計るなりして最適な選択を。
Apache BenchってDoS攻撃ツールじゃなかったの?
>>783 PerlのGCは中での再利用はするけどOSには返さないって昔聞いた気が
する。ほんとかどうか知らんけど......
>>787 Perlに限らず大抵の処理系はGCしてもプロセスが終了するまで
メモリをOSに返さないと思われ。
例えば掲示板で記事を表示する時に
while(<TAKESI>){
($a,$b,$c,$d,$e,$f,$g,$h,$i,$k)=split(〜);
いろいろ表示
}
こういう処理がありますが
my($a,$b,$c,$d,$e,$f,$g,$h,$i,$k)=split(〜);
このようにmyを付けた方が処理は早くなるのですか?
みなさんは付けてますか?
790 :
771:04/09/29 11:11:05 ID:2geLnUuH
print "あいうえお".($a-6)."かきくけこ";
こういうのってperl4でも使えるのかな
使ったら出来ちゃってるけど
>>791 は?myはlocalより早いってとこ?
シンボルテーブルに登録されないから、グローバル変数や
local変数より早いって理解でいいでつか?
localはブロックを出入りするときに元の値を退避して戻す
処理が入るのでさらに遅いのです。
>>794-795 ひょっとしてここの人達って、ループ中のサブルーチン呼び出しを
インライン展開しなくちゃいけないくらい激しくチューニングしてるわけ?
>>793 mod_perl の問題じゃないんだとしたら、Apache::Registryモジュールのせい?
頭のいい漏れはぜんーぶグローバルで書く。それが一番速い。
>>797 ファイルの先頭でmyしてグローバルっぽく使う方が微妙に速いんじゃない?
※※※↓次の質問ドゾー※※※
なんか面白いことないんかか?とも思われるのでとりあえずこんなことを。
Perlのコンパイラって何言語で書かれてるの?おまら知ってる?
そもそもどうやってプログラムがうごくのかよくわかあんよな。
CGIいくら組んでも根本的な部分をしらないとだめだな。
ところでCSV形式って区切り子がカンマでしょ?まあ名前の通りだけど。
でも改行も区切り子になるの?
a,s,d
s,d,f
↑これとかってdとsがくっついたりしないの?まあPerlでは
open CSV "hoge.csv";
while ( <CSV> ){
chomp;
printf "大地%s 空%s 海%s <br>\n" ,split/,/;
}
ってchomp意味内やン家!なんか久しぶりにperlのコーディングでもしよ尾も運だすので
カメハネml?
※※※↓
>>1 をよく読んでから次の質問ドゾー※※※
オブジェクト指向は出来るだけ使ったほうがいいんですか?
好きにしろよ
質問です。
テキストフィールドに書かれた文字をファイルに保存しようと思っているのですが、
作成されたファイルを開くと、ファイルの先頭部分にNULL文字がセットされてしまいます。
$text = $FORM{"text"};
$text =~ s/\r\n|\r|\n/\n/g;
open (DATA, ">>$filename");
flock (DATA, 2);
seek (DATA, 0, 0);
print DATA $text;
truncate (DATA, tell (DATA));
close (DATA);
chmod (0666, $filename);
環境は ActivePerl5.6.1 IE6.0SP1 AN HTTP Daemon 1.42k でテストしていて、
ローカルですと正常にファイル保存がされるのですが、鯖に上げるとファイル先頭部分にNULL文字がセットされてしまいます。
どなたか考えられる原因をご存知の方はいないでしょうか。
>>805 ご存知ではないので一般論で。
まず$textにNULL文字が入っていないか切り分けよう。
printする前に、$text =~ s/\0/<null>/g; とかしとけば
もしはじめからNULLが入っていれば見えるようになるはず。
あともう1つあやしいのは >> で開くとO_APPENDになるので、
OSによるかもしれないがどこにシークしていても必ず書き込み
はファイルの末尾からになってしまう。その辺の問題かも
しれない。
はじめから'>'で開けばその問題はないが、省略してるが実は
読み出しもやってるとするとその手は使えないので、長さ0に
truncateしてからprintするか、sysopen使って
sysopen(DATA, $filename, O_RDWR|O_CREAT) or die;
みたいにすれば回避できると思う。
>>でopenしてseek(DATA, 0, 0)するのは無駄手間にしか見えないが。
808 :
805:04/09/30 13:12:09 ID:???
返答ありがとうございます。
補足になりますが、テキストフィールドの内容をファイルに新規保存するだけのものでして、読み出しは行いません。
また、ローカルでテストする際のOSはWin2000Proです。
$text =~ s/\0/<null>/g;を試してみたところ、<null>という文字列は入りませんでしたので、入力内容にNULL文字はないようです。
>>でopenしてseekは無意味と言うことで、seekを外してみましたが、結果は変わりませんでした。
また、>でopenしてみたところ、正常に動作しました。
>>806,807氏、ヒントをありがとうございました。
( ● ・3・ ● ) エェー XREAでは広告入ると空行入るけど違うかNA
( ● ・3・ ● ) エェー あ、解決してたスマSO
811 :
803:04/09/30 14:56:10 ID:???
>804
そうですか、友達に負担がかかるからやめろと言われましたが、騙されたようですね_no
もう一つ質問ですが、kent-webのCGIはダメポと聞きますが、Perlとしてどこがダメポなんですか?
使ったこと無いから落としてみた。
出力されるHTMLのインデントとかはもう見てらんないな。
Perlについては詳しく無いから↓の人詳細よろ
>>811 そんなこと聞いてどうするよ?
kent最高だから使っとけ
ついでにレスキューも使っとけ
815 :
811:04/09/30 15:58:51 ID:???
>812
トンクス!なるほど、たしかにすごいHTML…
>813
スマソ
>814
そうでつか
使い勝手とかで選ぶんならkentだっていいだろう
ただしソースは見るなよ
KENT陛下は厨にも見易いよう、わざと糞ソースをお書きになられておるのであります
おまいら、MattさんのGuestbook使えよw
久しぶりにyybbs見たけど相変わらずザルだね
スパゲッティー度上がってるし
820 :
nobodyさん:04/09/30 22:21:44 ID:ByT9cFMW
モジュールの中にある頭にアンダーバーがついてる関数っていうのは
そのモジュールの中でしか使わない関数っていうことでよかったですよね?
>>820 そういうローカルルールを採用する人もいる。
しかし Perl は君が他人の私物を拝借しても咎めない。
>>820 privateのつもりなのかprotectedレベルなのかは分かんないけどね。
finalかも(ry
まあ820-821の理解で十分じゃね。
もともと印程度のいいかげんなものだし、
なんやかんやで読んじゃったりするし。
>>821 他人の私物を拝借したら咎めるようにするモジュールもある
<input type="hidden" name="foo" value="bar#hoge">
というのをform要素内の最後尾につけて、IDに対してののアンカーにしたいんですが、
〜foo=bar#hoge
とならず、
〜foo=bar%23hoge
とバケてしまいます。
どう記述したらバケずにできますか?
何だかよくわからんがurlエンコードされてるだけかと
>>825 生成されたHTML側でJavaScript使って飛ばせば?
perlscriptでWEBブラウザからtracertやnetstat等、システムコマンドを使い、その結果を新しいウィンドウで表示したいのですが、
以下のようにしても結果が表示されません。表示する変数には実行結果の最後の行だけが入っている模様です。
他の方の質問と比べて低LVで申し訳ありませんが、お助けください_no
<html><head><title>TraceRoute</title></head>
<script language = "PerlScript">
sub button1_click{
$form = $window->document->form;
$host = $form->host->{'value'};
@traceroute = `tracert $host`;
$window->document->write("@traceroute");}
</script>
<body>
<h2>TraceRoute</h2><hr>
<form name="form"><table>
<tr><td>IPアドレス or ドメインネーム:</td>
<td><input type="text" name="host" size=50 value=""></td></tr>
</table><p>
<input type="button" name="button1" value=" 実行 " onclick="button1_click()">
</p></form></body></html>
>825
アンカーくっつけるためのもんじゃないから無理
>828
クライアントプログラミングはム板に逝ったほうがいい
>827
JS使わんと無理ですか?
832 :
828:04/10/01 12:14:58 ID:???
>>830 お手数掛けました。あちらで聞いてみますね。
833 :
825:04/10/01 12:56:20 ID:???
渡されるアドレス内の#をバケさせない方法はないんですかね。
質問です。テキストフィールドに選択したテキストファイルを読み込んで表示させようと思っており、
選択されたファイルがバイナリファイルであればエラーを返す処理をしようと思っています。
しかしながら、テキストファイルにもかかわらずバイナリファイルと判定されてしまい、
ファイルを展開できないことがあります。
opendir (DIR, "."); # カレントディレクトリ
while ($filename = readdir (DIR)) {
if (-d $filename) { # ディレクトリ
next;
}
if (-B $filename) { # バイナリ
next;
}
push (@files, $filename); # ファイルの一覧
}
全てが半角英数字のテキストの場合は、テキストファイルであると正常に判定されるようです。
選択したファイル内に2バイト文字があると-Bでは正確に判定できないのでしょうか。
>>835 入ってるんだよ。バイナリコードが。ほら、そこにネ。
>>836 わかんねぇカスはすっこんでろよ(pgr
>>835 JPerlが使えるのならば、そちらだと確か正常に動いたと思う。
ファイルを展開するんなら、ファイルを読みこんだ後、
表示させる前にNULL文字のチェックをしてみるのはどうだろうか。
拡張子を制限するとか、対策は色々あると思うぞ
携帯の絵文字(100個以上)を画像のURLに置換したいんですが、まとめて置換できませんか?今は1個1個(s//<img src=\/img\/001.gif>)でやっています…
841 :
825:04/10/02 00:17:02 ID:???
>>834 有難う御座います。
そっち行って聞いて見ます。
foreachの逆ってありますか?
配列を後ろから読む、というような。
>>842 ありません。
reverseで逆順に並べ替えれば済むし。
>>843 即答ありがとうございます。
reverseですね。それを使うことにします。
フォームの窓AからPOST > 窓Bに結果表示 > 窓Cを再読込
ということをしたいのですが…。出力したときにjavascriptを埋め込むとかでしょうか。うーん。
846 :
nobodyさん:04/10/02 06:31:48 ID:iwLkYg8H
Active PerlをWin2000のC:\PerlにインストールしましたがCGIが動きません。
CGIはInetpub/cgi-bin/に置いています。
Prelのバージョンは多分5.6だと思います。
Perlへのパスは#!/user/local/bin/perlにしてます。
どうすればよいでしょうか?
ちなみにPerlインストール後は設定を何もいじってません。
よろしくお願いします。
>>846 IISの設定は知らないがとりあえずPerlのパスは
#!C:/Perl/bin/perlだろ
#!/Perl/bin/perlでもいいかも
>>846 httpdは?
Perlだけ入れてもCGIとしては動かんよ。
849 :
nobodyさん:04/10/02 08:03:38 ID:iwLkYg8H
>>848 httpdってどこをどのように変更するのでしょうか?
よろしくお願いします。
850 :
849:04/10/02 08:45:47 ID:iwLkYg8H
IISが入っているのですがhttpdが必要なのでしょうか?
851 :
nobodyさん:04/10/02 08:55:46 ID:xWycr4I2
亡くなったのはミケネコ本人じゃなくてサーブル研究員らしい
そですか。あのサイトはいろいろお世話になったから復活してほしい。
関係ないのでsage
855 :
849:04/10/02 09:55:27 ID:iwLkYg8H
>>851 返信ありがとうございます。
早速サイトを見ます。
857 :
nobodyさん:04/10/02 19:17:38 ID:IDTr6xb8
Redhat9
apache2
/usr/bin/perl
↑の環境でperlを使ってるのですが、最近急に掲示板の表示速度が
激しく遅くなりました。
普通のhtmlは普通に表示される、servletも動いてますがそちらも普通。
perlの掲示板のみが激しく遅いのですが、原因追及の為にどこを
調べたらいいでしょうか?
>>857 アクセス数,データの量等が影響するので、原因を特定するには情報不足だけど。多分設計の問題。
ありがちなのが、ログ等のデータをすべてメモリ上(配列など)に取り込んでるタイプの掲示版。
プロファイルとってみるといいよ。とりあえず続きは他のスレでどうぞ。スレ違い
859 :
nobodyさん:04/10/02 20:09:46 ID:IDTr6xb8
>>858 レスどうもです。
どこのスレで聞いたらいいでしょうか?
cgiは以前は普通に動いてたんです。それからデータサイズも大して
変わってないので原因がよくわからないんです。
何もいじってないですし・・・
>>859 だからプロファイルとってみるといいって書いてくれてるだろ
>>860 それはわかってるんですけど、スレ違いってことなので
続きの質問はそっちでするべきなんでしょ?
#!/usr/bin/perl -dDProf
でプロファイルとって、dprofppで解析か。
perlつーのは至れり尽せりだな。
863 :
nobodyさん:04/10/03 01:05:09 ID:lnyRtEhY
とあるスクリプトにCMS.pmというのが入っていたのですが、
これって何の略で具体的にどういう役割なんですか?
LWPを使って行単位でファイルを読み込むことができるでしょうか?
callback を使えば一定サイズ毎に区切って読み込むことはできるが
行単位にはならないだろうな
一旦普通に全部読み込んでから改行コードで分割しる
868 :
866:04/10/03 04:25:29 ID:???
>867
ありがとうございました
PerlでPDF扱いたいんだけどいい方法ない?
>>869 PDF_lib
ライセンスには気をつけろ
>>870-871 PDFをHTMLorTEXTに変換したいんですが
どちらが向いてますか?
ほらな、スレ違いは相手にすんなって。
教わっても調べようとしない
>>872みたいなバカしかいないんだから。
>>874 つまらないレスつけるぐらいなら誘導してくれ
>>862 #!/usr/bin/perl -d:DProf
だね
>>875 そんなのはスレ違いの回答をしてるバカにやらせろ
つーか、お前がやればいいだろ
>>877 文句ばっかり書いて暇そうなお前がやってくれてもいいじゃないか
俺は正しいスレがどこかわからん
eval関数の意味がググってもいまいち分かりません。
〜or〜と同じですか?またJAVAのtry catchと同じですか?
えばるんだよ
882 :
nobodyさん:04/10/04 23:06:02 ID:YvzQlu9k
>>882 おばさんをバイトに雇って、EXCELに入力させる。
>>882 まずお前に聞きたい。
URLを入力したら、HTMLを読み込むってことがお前にできるか?
>>885 いや、それは誰でもできるんじゃないか?
ライブラリや関数を使えば。
perlもphpのように、ローカルファイルとネット上のURLのファイルを
表面的にでもシームレスに扱えるようにしてほしい。
LWPとか使うこと自体がだるいんだよ・・・
888 :
nobodyさん:04/10/05 07:28:09 ID:9Q+F9VOE
http://xxx.jp/?mode=0001 にアクセスした時に0001の画像を。
0002にアクセスした時は0002の画像を表示させたい思って、
if($FORM{'mode'} eq "0001"){$img = "01.gif";}
elsif($FORM{'mode'} eq "0002"){$img = "02.gif";}
elsif($FORM{'mode'} eq "0003"){$img = "03.gif";}
else{$img = "04.gif";}
print "<img src=\"$img\">";
と書いたんですけど出来ませんでした…。
どの番号にアクセスしても
04.gif
の画像が出てしまいます。
どうやったら上手くいくでしょうか?
お願いしますm(__)m
889 :
nobodyさん:04/10/05 07:44:38 ID:/XKjVdNT
>>885 とりあえずは、ダウンロードツールとかブラウザでHTMLを取得して
ローカルファイルにしたものを処理対象にしようとおもってます
ソケットオープンしてGETすればできるんでしょうか?
chankedと聞いて何も思い浮かばないなら素直にLWP::UserAgent使え
open をオーバーライドしちゃいなさい。
>>888 データ受け取れてますか?
$ENV{'QUERY_STRING'};
>>892 データは受け取れてるはずだが
$FORM{'mode'}は空っぽだと思われる
894 :
888:04/10/05 11:21:13 ID:9Q+F9VOE
確かにカラッポでした…
modeを使わないでそのまま$ENV{'QUERY_STRING'}と数字だけを使ってやった方が簡単でしたね。
ありがとうございましたm(__)m
XP proマシンにIISとActive Perl入れて動作検証してますが、
次のようなエラーになってしまいます。
'c:\inetpub\wwwroot\cgi-bin\apply.cgi' script produced no output
webサーバーでは正常に動いているのですが、IISでディレクトリの設定を
変える必要があるのでしょうか?
IIS開いてみたけどよく分かりませんでした。
どこを変えればよいでしょうか。
※テキストファイルを書き出すプログラムを書いています。
よろしくお願いします。
script produced no output でググればあるじゃん
ロジックに関する質問いいでしょうか。
例えばこのようなフォルダ構造がある場合、
index.cgiが全ディレクトリ内のファイルの一覧を取得する事は可能でしょうか。
[root]
├ index.cgi
├ [data]
│ ├ [data_bak]
│ │ └ log.log
│ ├ data.log
│ └ data2.log
├ [file]
│ ├ file.txt
│ └ file2.txt
└ [img]
├ img.gif
└ img2.gif
index.cgiでreaddirで一覧を取得し、その中にディレクトリがあれば、その中の一覧も取得し、
さらにその中にディレクトリがあれば・・・といった形の構造にしたいのです。
>897
どうしたの?
>>897 「ディレクトリ+再帰+PHP」でググれ
あとはディレクトリのパーミッションに気をつけること
>>897 >可能でしょうか。
可能でしょう。
>・・・といった形の構造にしたいのです。
そういった構造で、可能でしょう。
プログラムとは、といった構造だと出来るのではないか、可能ではないか、
と考えて作り、動かしてみて、思った通りに行かなければ、
なぜそう行かないのかを探り、修正し、、、、
といった積み重ねで出来上がるものなのです。
>>900 0から聞かれるよりかは、可能か不可能かだけを聞いてやり方を各自で模索してくれる方がありがたいのだが・・・w
>>901 だから、実際書いて見てつまずいた所を
聞いてこなきゃ進まないわな。
可能ですか?…といった構造にしたいのです。
なら「可能です」で終わるよ。
たぶんこれ期待した答えじゃないよな。
といって具体的な質問でもないとすると、
そこまで考えてて、一から教えろって話?
質問方法なんて質問者次第だからどーでもよくねぇ?
みんなログ保存はタブで分けてる?それとも<>で分けてる
一番いいのってなんだろ
何のログだYO
その辺のヘボいBBSの名前欄とかにタブ文字入れるとログが壊れて面白いなw
>>906 掲示板とかの
タブというかログ分けのコードを消去してない奴なんているのか
俺は<>かな。理由は2chがそうだからってだけ。
俺はオブジェクトのまんまdump
910 :
897:04/10/05 15:56:46 ID:???
成功しました。
サブルーチンの中でサブルーチンを呼んで、、、という方法だったのですね。
ヒントを下さった
>>899氏、ありがとうございます。
911 :
nobodyさん:04/10/05 16:53:35 ID:eG43Pgsa
BEGIN{
if ( $ENV{'REMOTE_ADDR'} eq '127.0.0.1' ) {
push @INC, 'C:\Program Files\Apache Group\Apache\htdocs\public_html\cgi-bin';
}else{
push @INC, '/home/public_html/cgi-bin';
}
}
サーバでもローカルでも問題なく動かせるようにするために、自作のモジュールの場所を
上記のようにやってみた。しかしローカルでエラーが出た。多分プロンプトからやると
アドレスがおかしなことになるからだと思う。
どうやればいい?
>>911 BEGIN {
push @INC, defined $ENV{'REMOTE_ADDR'} && $ENV{'REMOTE_ADDR'} ne '127.0.0.1'
? '/home/public_html/cgi-bin'
: 'C:\Program Files\Apache Group\Apache\htdocs\public_html\cgi-bin'
}
913 :
911:04/10/05 17:19:18 ID:eG43Pgsa
>>912 そうかdefinedか。
しかし&&ではなく||じゃないか?
まあ俺が間違ってそうだからテストしてみる
914 :
911:04/10/05 17:23:40 ID:eG43Pgsa
う〜ん
&&だとローカルで成功
||だとサーバで成功
どちらも不完全・・・orz
915 :
911:04/10/05 17:29:18 ID:eG43Pgsa
もしかしてSSHでには対応できてない?
サーバでもできるっていうのはサーバにシェルでつないで
perl -c
でっていうことなんだけど、それは無理かな?
判断基準がないのかな?REMOTE_ADDRだけでは無理だよね。
アホか・・・
>>915 じゃあ
$ENV{'DOCUMENT_ROOT'}
とか使ってみたら?俺の場合はローカルではc:始まりだけどサーバでは/usr始まりだから
それで簡単にできるけどね。
HTTP_HOST
919 :
915:04/10/05 17:35:49 ID:???
すみまそん・・・初歩的な質問で恐縮なのですが
コマンドプロンプトにPerlの構文を直接打っても機能するということを
もききにはさんだのですが、どうやればよいのでしゅか?
perl -e "print 'nullpo';"
922 :
920:04/10/05 17:46:37 ID:???
>>921 ありがとうございます。できましたけど失礼しますm(_ _)m
「ガッ!」
ところで10行くらいになる場合はどうやればいいのでしょうか?
print -e "
ここdEnterを押すと何故かキャンセルされてしまうのですが。
あと print =e "
このダブルクォートは他の記号で代替できませんか?
923 :
911:04/10/05 17:56:43 ID:eG43Pgsa
>>922 > ところで10行くらいになる場合はどうやればいいのでしょうか?
何が10行くらいになるのよ?perlのコード?出力?
perl -e "print qq/a\n/; print qq/b\n/; print qq/c\n/"
> このダブルクォートは他の記号で代替できませんか?
あんたの使ってるシェルによる。シェルの話は板違い。
$ENV{'GATEWAY_INTERFACE'}
>>923 手探りしてないでそれぞれの環境で
環境変数吐き出させて違いを調べたらどうよ。
927 :
920:04/10/05 20:00:39 ID:???
>>924 windowsXPです。
>何が10行くらいになるのよ?
つまり
print 1;
print 2;
print 3;
print 4;
のような時に見栄えのために改行をしたいのですが、-eでやるとenterは実行になってしまって
改行にはなりません。
いわゆるmysqlでのEnterキーの昨日を求めています。
>>927 C:\hogehoge\>perl
print "(゚д゚)";
print "<";
print "シメジ\n";
^Z ← Ctrl + Z
(゚д゚)<シメジ
C:\hogehoge\>
> いわゆるmysqlでのEnterキーの昨日を求めています。
( ゚д゚) ?
>>928 ^D では。cmd.exe だとどうかは知らんけど。
930 :
920:04/10/05 20:20:57 ID:???
>>928 よくわかりません・・・
全然できないです
例えば掲示板において強制改行されない半角文字
(いわゆるテーブルのデザインを崩す文字)
は正規表現でどう表せますか?
ピックアップしてみましたが
\ ^ . $ * ? | ( ) [ ] { }
0-9 a-z A-z
これで全部でしょうか?
もぅ半角全部でいいじゃん
環境変数について質問です。
perl では ASP で言う ALL_HTTP に相当するものは無いんですか?
仕事のテストの都合でクライアントのリクエストを画面に出力したくて
print <<EOF;
Content-Type: text/html
<HTML>
<HEAD>
</HEAD>
<BODY>
$ENV{'ALL_HTTP'}
</BODY>
</HTML>
EOF
↑のようにコードを書いたんですが、何も出力されなかったので。
どなたかお知恵を貸してください。お願いします。
すみません、環境変数では無理だったようです。
お騒がせして申し訳ありませんでした…。
my $test = 'localhost/hoge/';
print "ここのURLは$testtest.cgiです";
みたいな時にコンパイラが間違わないように変数名をはっきりさせるにはどうすればいいですか?
print "ここのURLは{$test}test.cgiです";
勘でやりましたらエラーになりました;
>>936 > 勘でやりましたらエラーになりました;
${勘に頼るな、マニュアル嫁}
print 'ここのURLは'.$test.'test.cgiです';
それしかないかって試しもせずに質問したのかよ。
しかも後出しで日亜ドキュメントとか・・・
それしかないかって言われて気づいたんだろ
>>937の意味が分かってなくて、「勘に頼るな、マニュアル嫁」に対して「やっぱそれしかないか」って言っただけだろ。
>>936 print "ここのURLは${test}test.cgiです";
943 :
nobodyさん:04/10/06 08:07:40 ID:JNRSDhvA
>>895です
script produced no outputでググってみたけど
参考となる答えが見つかりませんでした。
参考となるサイトありましたら教えてください。
おねがいします。
>>943 ウソつけ。
ぐぐったら答えはいくつも見つかったぞ。
見つかるサイトをもっとよく読め。
ついでに、スレ違い。