>>5 テンプレのほうに足すの忘れてしまった。スマン
7 :
nobodyさん :03/04/15 15:12 ID:wdeZFKcA
前スレの最後の方の質問者ですが、 あの環境変数のスクリプト動きました。 どうやら仕様(?)変わったらしく、以前はcgi-binに入れなくてよかったんですが、 入れないといけなくなったらしいです。 それで、また質問なんですが、指定した環境変数だけ表示するにはどうすればいいんですか? よろしくお願いします。
>7 表示したい環境変数を指定する。
9 :
nobodyさん :03/04/15 16:02 ID:F/iCEAMk
このスレで聞くことじゃないかもしれないんですが・・・ 私はサーバを借りてて、(Kagoyaのスタンダード40です) サイトにPerlでランダムに文面を表示するスクリプトを設置してました。 20個くらいページがあって1ページにつき4つほどそのスクリプトを 設置してたところ、サーバに負荷がかかりすぎだと サポートの人から注意されてしまいました。 Perlで書いたCGIを使うとそんなに負荷ってかかるもんなんでしょうか? まあ1ページに4つも設置した私が一番馬鹿だとは思うのですが。
>>9 まーどんなスクリプトかしらんから答えようが無い。
一般的にはそれなりに負荷はかけるものだと思ったほうがいいよ。
# というかランダム文字列とかはサーバーサイドでやるよりクライアントサイドでやったほうがいいんじゃ?
>>9 どのぐらいアクセスあるかもわからないので、なんとも言えないね。
ランダムな文面がそんなに各ページに必要な理由もわからないし。
12 :
nobodyさん :03/04/15 16:36 ID:F/iCEAMk
>>10-11 さん
そうですか。私が設置してたのは携帯用サイトのランダムテキスト広告です。
長いので引用はやめときますが、こういう広告ってやっぱり
スクリプトの文章の長さによって負荷の大きさって違うんでしょうか?
今度から以下のようなランダム表示スクリプトを使おうかと思うんですが。
#!/usr/local/bin/perl5
$txtfile = "ranod,.txt";
open(FILE, "$txtfile");
chop(@lines = <FILE>);
close(FILE);
srand(time + $$);
$aaa = int(rand($#lines + 1));
print $lines[$aaa];
exit;
あと、クライアントサイドっていうのもあるんですね。
今の私にはさっぱりわかりませんが勉強しようっと。
あ・・・なんかファイル名のとこが変ですいません
携帯端末だとJavaScriptは使えないから、サーバサイドで任意のメッセージを 吐き出すように、なおかつメモリを食い過ぎないようにするしかない。
これを4つずつ使ってりゃ注意も来るかもな。 1つで4つ分の広告をまとめて吐くようにすればいいのに。
どうもです。まとめてCGIとして作ったほうが良いんですね。 そっちのほうが負荷が大きいものだと思ってました。 調べてやってみたいと思います。ありがとうございましたー。
18 :
nobodyさん :03/04/15 18:25 ID:0B+FeJbY
配列について躓いています。 ・やりたいこと 24bitsカラーコードを、無作為に選んで並び替えたい。 ・やってみたこと。 24bits分の配列を用意して、無作為に選び、別の配列へ代入させてみた。 my @src_colors=(0..16777215); my @dist_colors; foreach(0..16777215){ push(@dist_colors,splice(@src_colors,int(rand($#src_colors+1)),1)); } ・結果 Out of memoryとなる。 そもそも64MBytesもある配列を用意している時点でアウトなんだと思うのですが、ほかに良い方法が思い浮かびませんでした。 (外部ファイルを使って同じ方法を。と思ってみたのですが、こちらも「重複するカラーコードを排除する」という点で同じような配列を使ったためにOut of memoryとなってしまいました。) そこで、別の方法論がありましたらご教授いただけるとありがたいです。 それではよろしくおねがいいたします。
19 :
Perl3級 :03/04/15 18:40 ID:bx4RfdeG
一週間がんばりましたが、どうしてもわかりません。 最後の望みを託してエキスパートのみなさんにすがります。宜しくお願い 致します。 #/usr/local/bin/perl @i = ( "AAA 100 80", "BBB 500 500", "AAA 400 420"); foreach $line (@i) { split(/\s/, $line); $key = $_[0]; $hash{$key} = $line; print "$key $hash{$key}\n"; } これを実行すると、 AAA => AAA 100 80 BBB => BBB 500 500 AAA => AAA 400 420 となります。あとは、AAA,BBBごとに右の数字を足していきたいのです。 簡単に言えば集計プログラムです。最終的に AAA => AAA 500 500 BBB => BBB 500 500 となれば成功です。どんなにやってもわかりません。頭も痛くなって きました。ぼくに秘伝を伝授して下さい。どうか、お願いします。
>>18 並べ替えできたとして何に利用するの?
九九の範囲内で足りるものを、それ以上の桁数で答を
用意しておいても無駄なだけでしょ
用途に対する根本的な設計がうまくないのでは?
my @i = ( "AAA 100 80", "BBB 500 500", "AAA 400 420", "AAA 120 150", "BBB 30 420" ); my %hash = (); foreach my $line (@i) { my @temp = split(/\s/, $line); my $key = shift @temp; if( exists $hash{ $key }){ $hash{ $key }->[ 0 ] += $temp[ 0 ]; $hash{ $key }->[ 1 ] += $temp[ 1 ]; } else { $hash{$key} = [ @temp ]; } } foreach my $key(keys %hash){ print $key, $hash{$key}->[ 0 ],$hash{$key}->[ 1 ], "\n"; }
この場合、exists は definedにするべき。undefに加算することを避けていることをはっきりさせる。 それから、my @tempで新しいメモリに置いてるのに、[ @temp ]は勿体ない。
undefをdereference
24 :
21 :03/04/15 19:28 ID:???
>>21-22 この場合は暗黙の内に生成しちまっても問題ないと思うんだけど
駄目なんでしょうか。
@record = ("AAA 100 80", "BBB 500 500", "AAA 400 420");
my %sum;
foreach (@record) {
my($key, @value) = split /\s/;
for (my $i = 0; $i <= $#value; $i++) {
$sum{$key}->[$i] += $value[$i];
}
}
foreach my $key (sort keys %sum) {
print"$key => $key @{$sum{$key}}\n";
}
つか
>>19 のコードは興味深いな。一つ勉強になったよ。
use strictの時は、undefのreferenceがランタイムエラーになる。
27 :
25 :03/04/15 22:13 ID:???
>>26 上のコードに use strict つけて @record を my 宣言して
走らせたけど、エラーになりませんでしたよ。
5.005_03 と 5.8.0 で確認。
リストリファレンスでないものを無理矢理リストとして
デリファレンスしたらエラーになるけど、代入時は
勝手にやってくれますよね?
use strict;
my $foo;
print @{$foo}; # ランタイムエラー
$foo->[2]{'bar'}[10] = 'baz';
print join '/', ($foo, $foo->[3], $foo->[2]{'bar'}, $foo->[2]{'bar'}[10]); # OK
あ。。。+=は代入扱いだな。鬱
質問させてください。 例えば、あいうえおかきくけこ という文章の時、5文字目までを残して、 あいうえお までを表示させて最後に・・・を付けるというような形です。 あいうえおかきくけこ ↓ あいうえお・・・ みたいにする方法を教えてください。
>29 どのような文字が入っているかによって変わる。 全て2バイト文字だと断言できるならsubstrでもできる。 1バイト文字と2バイト文字が混ざるなら、文字コードを読んで判断させなければならない。
>>30 早速お返事をありがとうございます。
ホームページの名前なので英語だったり日本語だったりしますので
下のにあたりますでしょうか?できればその方法を教えてください。
>>32 ありがとうございます。
URLのホームページを拝見したのですが難解でどこの事なのか分かりませんでした。
リンク集のログデータをトップページに表示させるためのデータをまとめるスクリプトを書いています。
どなたか方法を教えてください。お願いします。
>33 クリックせずにコピペしてみろ。 ちゃんとどこを見るかまで教えてくれている。 それ以上は自分で考えれ。
基本的にこのスレは「自分で解決しようと努力してるけどできない」人には優しいが、
「最初から全部教えてもらおうとしている」人には冷たい。
Perlのサポートセンターじゃないんだから。
回答側もボランティアだ。
よぉく
>>1 を読んでくれ。
>一緒に勉強しましょう。
勉強するのは教わる事じゃない。
考える事だ。
>基本的にこのスレは「自分で解決しようと努力してるけどできない」人には優しいが、 >「最初から全部教えてもらおうとしている」人には冷たい。 このスレに限ったことじゃないよね。 後者に優しいのは宿題任せろスレぐらいだ。
コピペしようとはもうとう考えておりませんので、 substrの方法はわかりましたが、 1バイト文字と2バイト文字が混ざると駄目なようで。 この方法をどうか教えてください。
何か反論みたいになってしまったがそうではなくて、
>>35 には概ね同意。
39 :
nobodyさん :03/04/16 00:28 ID:g3p2EJXO
>>36 ウソだけど、はしのえみのヌード持ってるぞ
>37 >32のリンク先になにがあった? 文字単位に分割できれば、そこで文字数を数える事はできるよな? そうしたら、最初5文字だけ残して、その後ろを消して置き換え。 あとは自分でやってくれ。
ありがとうございます。 その部分は既にsubstrを教えて頂いたのできてます。
43 :
39 :03/04/16 00:54 ID:g3p2EJXO
>>40 最初にウソだけどって書いたのに・・・・・・
ウンコーーーーーー
44 :
Perl3級 :03/04/16 00:55 ID:Zmk9zNa+
21-27 みなさん。ありがとうございました。 お陰さまで無事プログラムか完成しました(涙 ありがとう、ほんとうにありがとう(涙
ここってヌードやウンコで盛り上がれば教えてくれますか?
$title = "あいうえおかきくけこ"; $title = mb_strimwidth("$title",0,10,"...");
>>47 これは何でしょうか?試してみましたが動きませんでした。
現状はsubstrで・・・に変換する事が出来ましたが、
substrが、1バイトづつで指定していますので、
1バイト文字と2バイト文字の組合せでは場合によって、
文字化けが発生しまいます。先ほどホームページを教えて頂いたのですが、
今の私の力では読み取る力がありませんでした。
思考錯誤してみます。お騒がせして申し訳ありませんでした。
50 :
nobodyさん :03/04/16 02:26 ID:+e/kztES
自己解決しました。
>>20 例えが良く判りませんでした。すみません。
52 :
chuu :03/04/16 11:42 ID:???
ユーザ名からホームディレクトリが存在するかをチェック知りたくて、 $username = "hoge"; if (-e "~$username") {・・・ とやっても、hogeというユーザが存在するにもかかわらずfalseになります。 チルダを使わずフルパスで指定すれば当然うまくいくわけですが、 ユーザ名からホームへのフルパスを得るようなことはできますか? /etc/passwdを開いて検索しなければならないのでしょうか・・・ よろしくお願いいたします。
~(チルダ)を展開するのはシェルのお仕事。Perlは知らんぷりっ /home/$username でイーンジャネーノ?
もしくはgrep $username /etc/passwd。あとは野となれ山となれ
55 :
chuu :03/04/16 12:04 ID:???
>>53 様、すばやい回答ありがとうございます。
変な環境でして、/home/*で統一されているわけではないんです。
passwdファイル検索の方向で試してみます。
ありがとうございました。
>>55 /etc/passwd用組み込み関数があるよ。
perldoc -f getpwent
perldoc User::pwent
およびgetpwent(3) man pageを参照のこと。
58 :
nobodyさん :03/04/16 13:20 ID:fv/dMt9b
HTTP-Liteを入れようと思い、コマンドプロンプトで ppm>install HTTP-Lite と打ち込んだのですが、 Error installing package 'HTTP-Lite': Could not locate a PPM binary of 'HTTP-Lit e' for this platform となってエラーになってしまいます。 検索はしてみましたが、さっぱり見当違いなものしか検索できませんでした。 どうかどうすればインストールできるか、ご教授お願いします。
Perl串ってなんですか? レンタルサーバーに置いて2ch書き込むのに使ってる人いる?
( ゚д゚)ポカーン
62 :
58 :03/04/16 19:20 ID:???
通ってなかったです、超初歩的ミスですみません^^;
63 :
nobodyさん :03/04/16 22:53 ID:NR7Y4aEI
>>49 そういういじめか・・・
でもまじでヌードは見たいがな、俺も。
あいつは何かむらっとくるもんがあるあいつはもう30なのに・・・・・
写真集出せ
64 :
nobodyさん :03/04/17 00:24 ID:qoz0Pxr2
Perlで作ったプログラムをcgiとして使うときって通常ファイルの拡張子は.plで使うのですか? それとも何かコンパイラみたいので.cgiに変えるとかなんですか? お願いします教えてください。 あとそのうち作ったcgiを配布してみたいと考えているのですが、そのときも拡張子が.cgiのほうが良いのですか?
.cgiじゃないと動かんだろ? .plで動けば.plでいいじゃない?
>>63 漏れ年上でかつ可愛い人が好き。はしのえみは理想だな。
>>64 スレ違い。ここははしのえみについて語るスレです。
Webサーバの設定で、拡張子".cgi"というファイルのリクエストを受けるとそれ用に処理するようになってる。
だから、設定によっては".pl"でもOKな時もある。
どっちにしろ".cgi"にしておけば安心。ファイル名を変えるだけでOKよ。
やれやれ・・・
スレ違い。ここははしのえみについて語るスレです。
漏れは坂下千里子が好きかも。 型グロ部ってイマイチ何かよくわかりません。 とあるCGIをDLして、それを解読中なのだが、 たとえば、 *option_pnt = $_[0]; *config_pnt = $_[1]; $ctl_sock = $config_pnt{"ctl_sock"}; $before = $option_pnt{"before"}; $after = $option_pnt{"after" }; $path = $option_pnt{"path" }; &jcode'convert(*before,"sjis"); &jcode'convert(*after ,"sjis"); &jcode'convert(*path ,"sjis"); のような部分があるのですが、 漏れ敵には、文脈に応じて柔軟に型を識別してくれるもの くらいの認識なのですが、いまいちシックリきません。 どんなときに型グロ部使うと激ウマーなのか、どなたかご教授ください。
70 :
nobodyさん :03/04/17 00:59 ID:qoz0Pxr2
そうか、ただ拡張子を変えただけか。 いやてっきりPerlプログラムをコンパイルしているのかと思っていたから。 サンクスみんな ついでにいうと63=64=俺や。 どうでもいいがな。 オマエがすれ違いやで。
配布するときは、圧縮してるサイトが多いね。lzh,zip,tar.gz 圧縮しないときはtxtにしてるところが多いね。 cgiだと多くの場合、実行されちゃうから。
それで、Perlのコーディングの話はどこに? CGIの話はCGIスレに。
73 :
nobodyさん :03/04/17 01:07 ID:qoz0Pxr2
>>71 そうなんすか。ありがとう
助かった。俺の勘違いだったらしいすべてがね。
まじありがとうさようなら
>>73 配布なんていう不相応の夢もかなり勘違いだと(ry
>>69 型グロブを理解したかったらシンボルテーブルの勉強。
http://www.kt.rim.or.jp/~kbk/perl5.doc/perlmod.html 標準モジュールの Symbol.pm や、IO::なんちゃらってのも
参考になるよ。
まぁ Perl4 と違い、リファレンスが使える Perl5 では
型グロブを使っておいしい場面って減った。強いて挙げるなら
サブルーチンにデカいデータを渡す時ぐらいかな。
my %orig_hash = qw(...); # デカいハッシュ
my @orig_array = qw(...); # デカいリスト
hoge(\%orig_hash, \@orig_array);
sub hoge {
no strict 'vars';
local(*hash, *array) = @_;
# %orig_hash を直接書き換える
# デリファレンスしなくて済むので高速
$hash{$_} = uc $hash{$_} for @array;
}
たまーに予約語の先頭につける程度かなあ。 print "Content-type: text/html\n\n" if(select == *STDOUT);
定数で使うとかあるっぽい *PI = \3.14159265358979; 最適化出来ないらしいんだけどね
78 :
山崎渉 :03/04/17 11:58 ID:???
(^^)
よく使われるサブルーチンを .plファイルで中身をpackage abc;として、&abc::abc; と呼び込むのと .cgiにして require'./aaa.cgi';して &abc; と呼び込むのでは どちらがよいのでしょうか? 何か違いがあるのでしょうか?
>>80 requireするなら、拡張子は関係ないが……
.plファイルだって、packageせずmainパッケージに読み込めば後者のように使えるし。
82 :
nobodyさん :03/04/18 00:39 ID:fDlmNlyH
83 :
29 :03/04/18 00:58 ID:???
>>46 >>47 さん、今ごろですがありがとうございました。
動かない動かないと色々試行錯誤してやっと意味がわかりました。
PHPで書いたらあっさり出来ました。
他にも色々便利なコマンドが山ほどあるので使って行こうと思います。
84 :
nobodyさん :03/04/18 11:25 ID:5L+C97mW
質問なんですが、例えば、 $x ~= s/abc(.*)xyz/`hoge $1`/g の`hoge $1` って動的に展開してくれるんですか? それとも、はじめに展開してそれっきりですか? 誰か教えて!!!
>>84 動的とかはじめとか言ってることわからんのだけど?
86 :
84 :03/04/18 12:07 ID:???
>>85 分かりずらくて御免なさい。
つまり、マッチした時点で、`hoge $1` を展開してくれるのか、
命令文を解釈するときに、`hoge $1` を展開しちゃうのか、どっちかなぁ?
と思って。
87 :
84 :03/04/18 12:10 ID:???
あぁぁあぁ〜〜 ~= は、=~ の間違いです。
>>86 余計にわからん?
マッチしたものを置き換える←これが命令文でしょ。
そもそも、マッチしなきゃ$1は未定義なんだから。
89 :
84 :03/04/18 12:28 ID:???
>マッチしなきゃ$1は未定義なんだから あ、そうか。 すいません、色々やってみたら、そもそも置換文字列は、コマンド展開されない んですね。 はぁ〜。面倒になる予感。
>>84 $x =~ s/abc(.*)xyz/system "hoge",$1/eg;
で、どないだ?
91 :
84 :03/04/18 15:00 ID:???
>>90 さん
ありがとう、e の意味調べてみます。
しかし、perl は難しい、、、、
多分、Perlの関数の仕組みがわかってないんだと思いますが、 PHPのnl2br(改行を<br>に置換)を自作しようとして、 sub nl2br{ my ($letter) = $_[0]; $letter =~ s/\r\n/<br>/g; $letter =~ s/\r/<br>/g; $letter =~ s/\n/<br>/g; return $letter; } を作ったのですが、 これだと、 print nl2br($sentence); としても動かず、 $sentence = &nl2br($sentence); print $sentence; としないと動きません。これを、前者のようにするには、関数をどうつくればいいのでしょう?
93 :
84 :03/04/18 15:23 ID:???
割り込みごめん。
>>90 さん、ありがとう。
s///ge で、目的が達成できそうです。感謝です。
>>92 俺、それで動いたけど。
他で変なことやってんじゃないの?
>>92 print &nl2br($sentence); だろ
()があれば&付ける必要は無いと思ったけど
require './jcode.pl'; して jcode::convert(\$buffer, 'euc'); とするのと &jcode'convert(\$buffer, 'euc'); とするのでは どう違うのでしょうか?
grepさせるときに、 grep( /^$hoge$/, @hage ); @hageの中に'+1'つー文字列があったとして $hogeが'+1'つー文字列だと、マッチしません。 $hogeを'1'にしてやればマッチします。 これを変な小細工しないで、文字列としてマッチさせる方法はないでしょうか?
grep( /^\Q$hoge\E$/, @hage ); で駄目か?
>>97 Perl4の頃はリファレンスが無かったので型グロブで代用してた。
また、パッケージデリミタには ' が使われていた。サブルーチン
を呼び出す際には & が必ず必要だった。なので
&jcode'convert(*buffer, 'euc');
という書き方をしていた。
Perl5では互換性の為に上記の文法を許容するけど、推奨される
今風の書き方は
jcode::convert(\$buffer, 'euc');
になる。更に言うなら jcode.pl よりは Jcode.pm を、Jcode.pm
よりは Perl 5.8.0 から標準になった Encode モジュールを
使った方がいい。
>>100 なるほど。
詳しい解説ありがとうございました。
過去ログ探したら2度と来るな!って書かれてませんでした。 どこかで記憶が変わってしまってました。 激しく鬱だ。。
103 :
102 :03/04/19 02:00 ID:???
誤解してうらんでしまった人へ、 すみませんでした。
104 :
102 :03/04/19 02:07 ID:???
106 :
nobodyさん :03/04/19 05:26 ID:uaYurtrR
>>106 CGIの話は他のスレでやってください。
108 :
106 :03/04/19 12:37 ID:EJZQKwDz
>>107 あれ、Perlの話のつもりだったんだけど、そーでなかった?
とりあえず他スレ逝ってきます
>>106 .htaccessとかmod_rewriteスレへ
110 :
nobodyさん :03/04/19 13:16 ID:eaFpa2kJ
>106 Perl的に言うなら、index.cgiの中身をhoge.plに移して、各index.cgiから hoge.plをrequireするとか。
112 :
110 :03/04/19 13:17 ID:eaFpa2kJ
アドレス逆でした、、、
>>110 Google→Unicode
Yahoo→EUC
この違い
いらっしゃーい、Perlのコーディングで困ってる人のスレです。 【投稿する際の注意】 質問するときは内容をよく吟味してから投稿してください。 1:自分はこう言う事がしたい。 2:それでこんな風にやってみたが・・・ 3:それだとこんなエラーが出て上手く行かなかった。 最低でも1と3が無いと誰も答えられないよ。 良い回答は良い質問から。一緒に勉強しましょう。
115 :
110 :03/04/19 13:31 ID:eaFpa2kJ
>>113 早速のレス、ありがとうございます。
Unicodeの文字列をデコードするために参考になる
ページ等ありますでしょうか?
よろしくお願いします。
>115 教えてもらったんだろ、 後はてめえで探せよノータリン!
117 :
117? :03/04/19 14:31 ID:W+zt+CQT
119 :
115 :03/04/19 15:04 ID:JU0nnBeK
>>118 どうもご親切にありがとうございました!
あちこち辿ってみます。
121 :
117 :03/04/19 15:45 ID:W+zt+CQT
117か171か知らないが、 そのCGIは一行目から間違ってるぞ
>>121 そのCGIがSELECTから受け取る引数をちゃんと処理しないからでしょ
124 :
117 :03/04/19 15:57 ID:DRRtSmLA
117です。打ち間違いです。1行目は変更してるので とくに問題はないと思うのですが プルダウンメニューを携帯で使いたくて cgiを探してやっとで見つけたのがこれなのですが 動作しないんです(>_<)
125 :
117 :03/04/19 16:11 ID:DRRtSmLA
及川奈央 田丸愛 上原里香 のエロ動画upするから教えてください
foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('H2',$1)/eg; if( $name eq "jumpto" ) { $jumpto = $value;# 移動先 } }
教えたから早くエロ動画よこせ
128 :
nobodyさん :03/04/19 16:15 ID:SET3u/9L
129 :
117 :03/04/19 16:23 ID:DRRtSmLA
>>129 foreachの中に2行追加するんだぞ?
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('H2',$1)/eg;
RealMediaじゃ見られねぇ・・・・ MPEGにしる!
132 :
117 :03/04/19 16:32 ID:???
プロなのか・・・ いいなあ就職できて。
その会社が可哀想だ
>>117 そんな、直リンでUPしましたとか言われてもなぁ。
>>117 ここはCGI質問スレじゃない。
帰れ。
及川奈央 萌え萌え 俺もPerl入れようかな。
画像アップロード付きの掲示板はどういう仕組みなんでしょうか?
えらく漠然とした質問だな どう答えればいいんだ? どこかのスクリプト落としてきてソースを見てください ってとこか
140 :
nobodyさん :03/04/20 01:04 ID:RhiZ2LD4
Perl初心者を大切に育てよう!
大切に育てるために種から不良品をより分けているだけだ
そんな事いってたら種がなくなるよ。 Perl初心者を大切にしようよ。
種は腐るほどある。っていうか腐った種が多過ぎ。
腐ったのはよけとかないと、せっかくの種まで腐ってしまうもんな
ここはPerl初心者スレであり、日本語初心者スレじゃないから。
そんな事いってたら腐った種もなくなるよ。 Perl初心者を大切にしようよ。
腐った種はなくなっていいじゃないか
>>148 画像アップロード付きの掲示板はどういう仕組みなんでしょうか?
教えてください。
誰も教えないのか? Perlする人がいなくなるぞ。 まず掲示板のフォームからCGIに画像ファイルを送るね。 そしたらCGIに画像ファイルが到着するとその画像を扱う処理をします、 (その処理はCGI_Lite.pm等を介して画像ファイルの名前やら大きさやら保存場所やら・・・ね。) それで保存できてるから画像を表示するのであれば 保存したルート指定すれば表示されるわけですよ。 簡単な説明だけど理解してよ。もう来ないから。 やっぱPHPのほうが楽だな。
いらっしゃーい、Perlのコーディングで困ってる人のスレです。 【投稿する際の注意】 質問するときは内容をよく吟味してから投稿してください。 1:自分はこう言う事がしたい。 2:それでこんな風にやってみたが・・・ 3:それだとこんなエラーが出て上手く行かなかった。 最低でも1と3が無いと誰も答えられないよ。 良い回答は良い質問から。一緒に勉強しましょう。
教えないさ。 ここはコーディングの初心者を相手にするスレだ。
良い回答は良い質問から。一緒に勉強しましょう。
>>151 ちゃんと教えてやってるじゃないか。
不適切なところに書くと期待する結果は得られないという
コーディングの基本を。
エロネタはOK
>151 ニヤニヤ(・∀・)
>>151 >まず掲示板のフォームからCGIに画像ファイルを送るね。
それをどうやってPerlで実現するんですか?初心者なので分かりません。
>そしたらCGIに画像ファイルが到着するとその画像を扱う処理をします、
>(その処理はCGI_Lite.pm等を介して画像ファイルの名前やら大きさやら保存場所やら・・・ね。)
CGI_Lite.pmって何ですか?
保存場所とは?マイドキュメントでいいんですか?
>>151 すみませんがもっと簡単に説明してもらえませんか?初心者なので・・・
>>142 ,
>>144 ,
>>148 さんでもいいです。
ネタでも本当でもかまわんだろ。 そろそろ放置して寝るか。
>>158 最低限の「コーディング」が出来ない人は帰ってください。
初心者だから?それが何?
>>161 そんな事いってたら種がなくなるよ。
Perl初心者を大切にしようよ。
ネタだってば 放置プレーべ
164 :
山崎渉 :03/04/20 05:57 ID:???
∧_∧ ( ^^ )< ぬるぽ(^^)
CSV形式( ,で区切られた)のデータが1行に30項目ずつあり、複数行存在します。 詳細表示で10項目全部表示することとし、概略表示で行の始めから5項目ずつを表示したいと考えてます。 詳細表示と概略表示ではそれぞれ別のスクリプトで実行します。 この概略表示でデータを読み込む際、30項目全部を配列にセットするのではなく、始めから5項目ずつだけを配列にセットするほうが負荷がかからないのかな?って思ったんですが、始めから5項目ずつだけを配列にセットする方法が思いつきません。 正規表現かな?と思うのですが、それよりも前に進むことが出来ません。 何卒こんな私に良い知恵を御授けくださいませ。 それと、こういうことは負荷軽減に意味があるのかないのかもあわせてお答え願えれば幸いです。 ちなみに現状は以下で読み込んでます。 open(IN,"$Datafile") while (<IN>){ chomp; if(!$_){next;} @data = split(/,/); } close(IN);
>>165 split の第3引数。
(@data, undef) = split /,/, $_, 6;
余計な分割をしない分 CPU 負荷は減るし、
配列に余計なデータを入れない分、使用メモリも減る。
行数によっては微々たる差だけど、こういう細かい
節約に気を使うのはいい事だよ。
167 :
165 :03/04/20 07:07 ID:???
ミスプリントです。 2行目: 誤 詳細表示で10項目 正 詳細表示で30項目 5,6行目: 誤 始めから5項目 正 各行の始めから5項目 寝てないから苦しい。
>始めから5項目ずつだけを配列にセット なら @data = (split(/,/))[0..4]; とか。
169 :
165 :03/04/20 07:09 ID:???
>>166 ありがとうございます!
さっそく使ってみます。
170 :
165 :03/04/20 07:11 ID:???
>>168 ありがとうございます!
さっそく使ってみます。 (コピペ
172 :
165 :03/04/20 07:29 ID:???
>>168 目的は得られるがそれじゃ余計な負荷は変わらない
174 :
nobodyさん :03/04/20 13:56 ID:jyoFgOQ4
foreach $count (0..1000000) { $dat[$count]; } と、 while($count < 1000000){ $dat[$count] = $count++; } 後者の方が目盛り消費量が倍ほど違うのはなぜ?
>>174 行われる処理が同じになるコードじゃないから
>>174 whileは毎回比較してるから遅いのは当然
>>174 ソースを見た段階で違いに気づけよ....
そんなコードの違いがわからないやつが言うメモリってどうやって調べたのだろう?
>178 タスクマネージャーとかじゃね?
Subroutine ABCDEFG redefined ってどういうエラー?
>180 辞書(英和辞典)をひけばわかりそうなものだが。
183 :
nobodyさん :03/04/20 20:14 ID:Nmb8JQyi
34 → 0000034 123 → 0000123 のように、 ある数字を、7桁の文字にするにはどうすればいいのでしょうか?
$answer= substr('0000000'.$n, -7);
>183 sprintf
>>183 sprintf
$s=sprintf("%07d",34);
x_ 以外で始まり、 .cgi で終わる正規表現を教えてください。 x_acdef.cgi にはマッチしない abcdef.cgi にはマッチする aacdef.csv にはマッチしない x_aaad.csv にはマッチしない xabcdef.cgi にはマッチする
!/^x_/ and /\.cgi$/
190 :
金正日 :03/04/20 21:44 ID:???
,rn
r「l l h. / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| 、. !j |
ゝ .f _ |
| | ,r'⌒ ⌒ヽ、. │
http://www.freeweb2.kakiko.com/saitama/ ,」 L_ f ,,r' ̄ ̄ヾ. ヽ. │ こんなのあったニダ
ヾー‐' | ゞ‐=H:=‐fー)r、) |
| じ、 ゙iー'・・ー' i.トソ |
\ \. l ; r==i; ,; |' .人_
\ ノリ^ー->==__,..-‐ヘ___
\ ノ ハヽ |_/oヽ__/ /\
\ / / / |.
y' /o O ,l |
>>189 やはり、andを使わないとだめなのか。
/^[^x_].*\.cgi$/
>>192 $a = 'xabcde.cgi';
if($a =~ /^[^x_].*\.cgi$/){
print 'マッチしました';
}else{
print 'だめ';
}
これで「だめ」と表示されたので、失敗。
正規表現の勘所は、冗長になり過ぎないこと
/^[^x][^_].*\.cgi$/
$a = 'xabcde.cgi'; if($a =~ /^[^x][^_].*\.cgi$/){ print 'マッチしました'; }else{ print 'だめ'; } だめと表示された。やっぱ無理なのか。 すまんかった。
すいまそん。あてくし、初心者なんです。 調子に乗って答えてしまいますた。 ムズイネ・・・
^(?:x(?!_)|[^x]).*\.cgi$
189程度なら正規表現使う方が間違ってる
>>199 同意
あれで正規表現しか方法が思いつかないのは情けない
if (/^(?!x_).*\.cgi$/) {
漏れ、久々にPerl触ることになったんですけど 5.2以降、基本的な構造とか変わりまつたか? ライブラリ周りとか、参照とかハッシュ(連想配列だっけか?)とか・・・
x_ 以外で始まる。
>>202 5.6、5.8あたりで動きがあったけど
205 :
202 :03/04/20 23:21 ID:???
>>204 多謝
化石化した脳が再利用出来ることを願って、その辺調べてみまつ
>>202 5.6なら基本的に大きく変わってないと思うよ
5.8はエンコードとか大きく変わってる
207 :
nobodyさん :03/04/21 00:53 ID:dkK8VA+7
Arseno ver2.1.4 のような辞書を借りたいのですが 何処に行けば無料レンタルできますか?
209 :
_ :03/04/21 01:37 ID:???
210 :
nobodyさん :03/04/21 01:59 ID:qjNDcweN
< 174 説明が間抜けでスマソ 再度朝鮮。 @dat = (); foreach $count (0..1000000) { $dat[$count] = $count; } と、 $count = 0; @dat = (); while($count < 1000000){ $dat[$count] = $count++; } 前者では、配列が 32bits整数 * 約1MB = 4MB となるのでその分のメモリを使用しているということをモニタで納得できたのですが、 後者の方では、2 倍の 8MB 程使用しているようなのです。 この場合なぜ後者は 2 倍のメモリを使用するのでしょうか? 環境はVineLinux2.6(kernel 2.4.20-0vl29.1) Perl 5.6.1 です。
211 :
nobodyさん :03/04/21 17:48 ID:kls4aiji
ある文字列に abが存在するかつcdが存在するかつefが存在しないかつghが存在しない という条件を書きたいとき 論理積などを使わず正規表現一発で現すにはどうしたらいいでしょう。 というかperlっぽい書き方はどんな感じなんでしょう。教えてください。
性器文自体に論理積がないから無理
論理和だけに命題を置き換えればいいが、
perlの話じゃない
∴
>>211 は放置
>>210 プログラム板のPerlスレで聞いた方がいいと思う・・・
ムズイよ
俺も知りたい
>>211 スレ違いなんだよボケ
失せろキチガイ
(・∀・)ラッキー!
/^(?:(?!ef|gh).)*(?:ab(?:(?!ef|gh).)*cd|cd(?:(?!ef|gh).)*ab)(?:(?!ef|gh).)*$/
222 :
221 :03/04/21 21:08 ID:???
余裕だな
>>215 スレ違いでもないんじゃないの?
少なくともコーディングに関する質問だし。
CGIのエラーの原因を聞いてくる馬鹿よりはマシだよ。
InternalServerErrorって出るんですけど誰か助けてくれません?
226 :
nobodyさん :03/04/21 23:20 ID:VRXCXV3j
URLから特定の文字を抜き出す例題で、正規表現の勉強をしていますが、どう
もうまくいきません。例題は以下のとおり。
【例題】
<DT><A HREF="
http://www.yahoo.co.jp/ ">Yahoo! JAPAN</A>
<DT><A HREF="
http://mailcity.lycos.co.jp/ ">MailCity へようこそ!</A>
<DT><A HREF="
http://www.google.com/ ">Google</A>
<DT><A HREF="
http://www.infoseek.co.jp/ ">インフォシーク</A>
以上のHTMLタグからURLとタイトルのみ抜き出しなさい。
【答え】
if (/<DT><a href=\"(.*?)\">(.*?)</a>/) {
$i = join (",", ($1, $2));
$i .= "\n";
push (@i, $i);
}
<DT>の一行が</A>で改行されていればこれでうまく行きますが、まったく改行されて
いない場合はそうも行きません。
if (/(<DT><a href=\"(.*?)\">(.*?)</a>)+/)
や
if (/(<DT><a href=\"(.*?)\">(.*?)</a>){0,}/)
など、いろいろ試しているのですが、どうもうまく行きません。
一行の中のパターン化された文字列のなかから、特定の文字列を複数抜き出す場合はどうすればいいので
しょうか?
よろしくお願いします。
227 :
226 :03/04/21 23:22 ID:VRXCXV3j
すみません。 perl内のHTMLは全て大文字にして読みかえて下さい。
228 :
nobodyさん :03/04/21 23:34 ID:FAJq1ej9
>>226 /<a href=\"(.*?)\">(.*?)</a>/i
難しくしなくてもこれでいいんじゃないの?
大文字小文字どちらもokだし。
229 :
226 :03/04/21 23:54 ID:UkhLM6bF
>>228 いえ、そうではないのです。
私が訊きたかったのは、
>>226 で示したとおり、<DT>から</A>までを一行として改行されているのではなく、
まったく改行されていない場合のURLとタイトルの抜き出し方を知りたかった
のです。
230 :
nobodyさん :03/04/21 23:55 ID:mc4GwSLK
ifより前の部分が書かれてないが、状況から察するに while (/<a href=\"(.*?)\">(.*?)<\/a>/ig) {push (@i,"$1,$2\n")}
>>229 「以上のHTMLタグから・・・」って例題が改行されているのに
なんで余計なことまで考えるの?
232 :
226 :03/04/22 00:11 ID:yfHpFKfL
>>230 できました!
うわーい!うわーい!
ありがとうございます!
「もし<DT>...</A>に当てはまるなら」という具合で、ずっとif文に縛られて
いました・・・。すみません。でも勉強になりました!
ああ、我知らず、熱い涙が押し出されてきよる・・・(滂沱の涙)。
>>231 最初はブラウザのブックマークからURLとタイトルを抜き出すという課題を自
分に課したのです。それがうまくいって一息ついたときに、「こうするとど
うなるんだろう?」と思い付いてしまったのでした。
ゆるせよ(遠山の金さん)。
233 :
nobodyさん :03/04/22 01:59 ID:8UmhU43L
タグを使わないでKENTの掲示板を改造してimgを掲示板に貼り付けるには? どうすれば良いですか?
>>233 意味不明だし、ここはそういうスレじゃない。
とても改造できそうにも思えないので素直に画像貼れる掲示板を使いなさいな。
235 :
nobodyさん :03/04/22 04:41 ID:Jj2tlT0c
\ が入った文字列のマッチングをおこないたいのですが $rootdir = "\\newfolder"; $workdir = "\\newfolder"; if ($rootdir == $workdir) { print "OK\n"; # 表示されます } if ($workdir !~ m#$rootdir#i) { print "NG\n"; # 表示されます・・・ } これはなぜ NG が表示されるのでしょうか? 環境は、PERL 5.6.1 を Win2000 のコマンドプロンプトで動かしています。 よろしくおねがいします。
>>235 # 「\newfolder」という文字列
$rootdir = "\\newfolder";
$workdir = "\\newfolder";
# 正規表現は /\newfolder/ =「[改行]ewfolder」
# 「\newfolder」という文字列は「[改行]ewfolder」にマッチしない。
if ($workdir !~ /$rootdir/) { print "NG\n" }
# 本当に改行になってしまっているか確認
$workdir = "\n" . 'ewfolder';
if ($workdir =~ /$rootdir/) { print "OK\n" }
# 対策1
$workdir = "\\newfolder";
if ($workdir =~ /\Q$rootdir\E/) { print "OK\n" }
# 対策2
$rootdir = quotemeta($rootdir);
if ($workdir =~ /$rootdir/) { print "OK\n" }
それでは $rootdir = "\\newfolder"; print ">$rootdir<\n"; 結果 >\newfolder<(改行) なぜここでは $rootdir の先頭の \n が改行に展開されないのでしょうか? と、もう一つ質問を書いたら多分分かりました。正規表現じゃないからですね どうもありがとうございました うーんややこしい・・・
>>237 \で\をエスケープしてるからだろ
ややこしくもなんともない
ブラウザからファイルを選んで ある書式にフォーマットして出力したいんですけど なぜかエラー500がでます。 何か一般的な原因があれば教えて
>>239 間違っているから。としか言いようがない。
>>239 ブラウザの出す「エラー500」から原因を突き止めるのは困難。
「Perlの出すエラー」を書いてくれないとわからん。
>>238 あんた235の意味を解ってないな
/\\newfolder/
こうなる事を期待したって事だろ
243 :
238 :03/04/22 16:16 ID:???
>>242 確かにお前みたいな知障が考えていることは解らないなぁ
>>239 「エラーを出すスクリプト」を晒してくれないとわからん。
perlでcsvを編集してメールで転送するプログラムを 作成しようと思ったのだが、全くの初心者のため paerl自体の実行が失敗している。 誰かなんとかしてくれ。
m/ / => 変数展開してから正規表現担当に渡す qq/ / => 変数展開とエスケープされた文字の復活を同時に行う 正規表現担当の部分は、エスケープされた文字を元に戻してから処理する。 $pattern = '\\n_hoge'; ($pattern は \n_hoge) print "$pattern\n"; print "match!\n" if $pattern =~ /^$pattern$/; 正規表現中と、ダブルクオートの中身は、展開の仕方が違うということ。
せんせ〜質問。 cgiのパスワードの逆変換って、できるんですかー? スクリプトはあります。変換後のワードもあります。 おねがいします。
John the ripper
>>247 crypt関数のdecrypt基本的に無理
仕様的には、Desはdecrypt出来るんだがperlでは出来な威実装をしてある。
あと、MD5は絶対できないといった感じ
ジョンか・・・
>>247 みたいなやつには13金のジェイソンのほうが
そんなことないよ。あぁ、解読っていうより、同じものになる
値の1つを見つける、っていうことなんだけど。
>>248 でやれ
253 :
252 :03/04/23 00:45 ID:???
ファイルのrenameしようとおもったんだけど消えてしまった。 元に戻す方法ある?
255 :
250 :03/04/23 00:49 ID:???
>>253 質問の意味そのままであるが?
cryptの照合方法はどうすればいいかってなら別の答えも出来るんだがねぇ
>>254 意味わからんって。
チョンは日本語覚えてから来てください。
257 :
247 :03/04/23 00:51 ID:???
ども、助かりました。とっとと消えます。 まともに答えてくれたからサンクス。 13金・・・古!!!
renameで変更後のファイル名のファイルが存在したら、消えることになる。あきらめろ。
259 :
254 :03/04/23 00:57 ID:???
>>256 ハァ?
チョンってなあに?
元に戻す方法がわからないなら
返答すんなよ。
ば〜〜か。
261 :
250 :03/04/23 01:02 ID:???
>>259 つーか、しょーも無い事で腹立てる前に、ちゃんとperlの関数を勉強してこいよ・・・
掲示板に自動で書き込むツールを作りたいんですけど 方法がさっぱりわかりません。 ヒントでいいんでわかりやすく教えてください。 お願いいたします。
さっぱりわからない = 学習する気は無い
>>262 ここはPerlスレなので、あなたの質問はスレ違いです。
>>265 なぜ?
perlでプログラム組むんですけど・・。
荒らしは帰れ
>>266 Perlのコーディングで困ってる人のスレです。
まったくのゼロから質問するなや
質問させてください。 今、Perlのコメント部分を削除するスクリプトを組んでるんですが、 #から始まる文字を削る事はできるのですが、 $#演算子まで削られてしまいます。 $len =~ s/((\$#)*.*)#.*$/$1/g; ・・・と、こんな事もしてみたのですが、ダメでした・・・ どんな風に表現すれば、$#を削らずに行けるでしょうか? よろしくお願いします。
一行ずつ読み込むとして while(<PERLFILE>){ if($_ =~ /^#/){ $_ = ''; } #出力処理 } じゃ駄目ですか?
>>268 $len = <<'EOL';
my @array = ('a' ,'b', 'c'); # コメント1
print STDOUT @array if $#array > 1; # コメント2
# push(@array, 'ぬるぽ');
EOL
$len =~ s/(?<!\$)#.*//gm;
print STDOUT $len;
# ----出力結果----
my @array = ('a' ,'b', 'c');
print STDOUT @array if $#array > 1;
# ----出力結果----
271 :
250 :03/04/23 17:17 ID:???
>>269 必ずしも、先頭に有るわけじゃ無いからのぉ
$data =~ s/(?<!\$)#.*$//g;
とか・・・
>>269 >>270 >>271 お答えいただきありがとうございます。
正常に動くようになりました・・・が、
(?<・・・)←これってなんですか???
(?=・・・) とか (?!・・・) とかなら分かるのですが・・・
本にも載ってない・・・
よろしければ、お答えを・・・
273 :
272 :03/04/23 18:41 ID:???
・・・と、いろいろネットで調べた結果、なんなのか分かりました。 しかし・・・ラクダ本にも載ってなかった・・・ なぜ???探し方が悪かったのかな・・・??? とにかく、ありがとうございました。
なんでみんな弱者に厳しいのに 最弱者である自分には甘いの?
何も無い所でつまづくドジっ娘特性を感じたからだろ
perl初めて1週間の初心者です。 web掲示板のパスワードを総当たりで調べていくスクリプトが欲しいです。 持っている方、もしくは落ちている場所を教えてください。 但し難しいスクリプトは却下ですので、簡単で直感的に使えるもののみに限定させて頂きます。
perl始めて1週間の小心者です。
>>278 どこの掲示板で使うのか教えてくれたら
配布場所も教えてあげる(はぁと
>>278 こんなCGI探してますスレッド Ver8へ逝け!
この板のローカルルールって甘いね。ム板には >ウイルス、ハッキング・クラッキングを求めるような発言は禁止です。 ってのがあるんだから、WebProg板にもこんな感じのルールがあってもいいんじゃないか。 と言ってみるチェスト
そういう発言者をオモチャにする楽しみを奪われては寂しい
ええと、ヘタな説明になるんですが、 以下のような感じであったとします。 while($form{"k$no"}){ ${"party_2$party[$no]"}{'数字'}; $no ++; } 余計な記述が含まれてますが、見るところは$noが一つづつ増えていって、 んで数字が一つづつ順番に返って来る所です。 で、数字を多いほうから少ないほうへと順番に並べたいわけなのですが… $no = 1; ${"party_2$party[$no]"}{'数字'} = 2; $no = 2; ${"party_2$party[$no]"}{'数字'} = 5; $no = 3; ${"party_2$party[$no]"}{'数字'} = 4; 上記の場合、$noが2、3、1の順番で大きいわけですよね。 この時の$noの番号を出したいんです。 つまり、結果としては $aaa[0] = 2; $aaa[1] = 3; $aaa[2] = 1; みたいな感じでソートしたいのです。 どうすればよろしいでしょうか?
285 :
動画直リン :03/04/23 22:29 ID:wyYrHR5Q
>284 ${"party_2$party[$no]"}{'数字'}; ここは $party_2{"$party[$no]"}{'数字'}; こうした方がいいかも。 ともあれ、 foreach( sort{${"party_2$party[$b]"}{'数字'} <=> ${"party_2$party[$a]"}{'数字'}} (1 .. 3) ){ push(@aaa,$_); } ってとこかな?
287 :
284 :03/04/23 23:16 ID:???
>>284 にゅっぱ〜ん。
ありがとでした。
って言うか、微妙に意味が分からん所があったので
どーなってんのかちゃんと考えてから使わせてもらおうかと思います。
288 :
272 :03/04/24 02:08 ID:???
289 :
動画直リン :03/04/24 02:29 ID:vV02vP1k
291 :
272 :03/04/24 02:53 ID:???
>>290 マジっすか!
俺の持ってるラクダ本、もう古いの???
5000円ちょっともしたのに・・・
第2版って書いてる・・・って事は、
俺の知識はPerl5.003くらいかな・・・。
またラクダ本買うなんて、なんだか罠にはまった感じが・・・
教えてくれて、ありがとうございました。
295 :
272 :03/04/24 04:24 ID:???
>>294 これは失礼しました。。。
誘導、ありがとうございます。
でも、誘導先も、自作CGIですね。
・・・でも、ここよりかは、少しは近いかも・・・
って事で、移動します。
誰かすごい改造してくれないかな・・・。
自動的にコメント付けてくれるスクリプト欲しいな。
質問させて頂きます srand(); @salts = ("A".."Z", "a".."z", "0".."9", ".", "/"); $salt = $salts[int(rand(64))] . $salts[int(rand(64))]; $epasswd = crypt($password, $salt); と処理しごく普通に文字列を暗号化した後 if (crypt($password, $epasswd) eq $epasswd) で識別するのですが、入力された暗号化前の文字列の始め4文字辺りまで入力すると 移行何も入力しない場合・適当な文字を入力した場合に照合OKとなってしまいます... これは暗号化に不備があるのか、若しくは照合方法に問題があるのでしょうか 尚、動作環境は下記の通りです Win98 + AnHTTPd 1.38c + ActivePerl 522
>>297 よくわからんけど
if (crypt($password, $epasswd) eq $epasswd)
は
if (crypt($password, substr($epasswd, 0, 2)) eq $epasswd)
じゃないか?
>>298 いや、わざわざ2文字切り取る必要はないよ。
(crypt関数側で先頭2文字以降を無視してくれるはず)
具体的にどんなパスワードがダメなのか教えて欲しい。
300 :
297 :03/04/24 13:49 ID:???
パスワード文字列に利用する文字列は様々なのですが 例として "kakikukeko" としますと "kakikuke" まで入力された時点で照合OKの場合に用意している処理に流れてしまいます。 これ移行の文字列を入力しない場合も、あるいは何も入力しない場合でも 照合OKと認識されてしまいます いろいろPerlで組んで見たいのですが、何回試みてみてもこの部分で引っかかってしまい 作業が一向に進まなくて困っております T_T
301 :
250 :03/04/24 13:59 ID:???
>>300 cryptの使い方間違ってないかい?
確か、des方式だと文字列長の限界が有るはず
それが嫌ならMD5でやるのが正解なんだけど
それはOSに依存する
303 :
250 :03/04/24 14:01 ID:???
>>300 んで、なんでそうなったかというと、切り捨てられてるってことじゃないかと思われ
304 :
302 :03/04/24 14:02 ID:???
てめぇ
>>297 で「4文字」つったじゃねーか!
・・・ってもしかして2バイト文字で4文字?
>>302 は「おい!8バイトまでだ!」に訂正しますです。
305 :
297 :03/04/24 14:24 ID:???
申し訳ありません、ローマ字入力になっちゃってますが 日本語で入力した場合で4文字って事でした とはいえ、DESにて文字列の制限が存在するとは知らず ずっと問答しておりましたのでマジ泣きしそうです... どうも有難うございました!!
>>305 暗号前の文字列が8バイト以上になるんだったら、
強引に8バイトごとに切っちゃって別々に同じ種で暗号化して最後に繋げるとか。
>306 無駄
309 :
250 :03/04/24 18:08 ID:???
それなら最初からMD5使え Win系の実装なら使えんが種値に $1$ を付けるだけで済む
DESだからデス
MD5=マジで出そう5秒前
312 :
オーディーン :03/04/25 00:02 ID:8w/Lt+kf
315 :
250 :03/04/25 04:45 ID:???
>>312 リファラー取れてるんであれば、別cgiを作ってみれるようにしたほうが楽なんじゃないだろうか・・・
316 :
オーディーン :03/04/25 06:33 ID:8w/Lt+kf
312は 【 スクリプト改造工房 PART 6 】 に移動しました。よろしく。
ファイルの読み込みで質問したいのですが 1000行あるファイルから途中の10行だけ取り出したい場合、 whileで目的の行まで読み込む @でファイル全体を読み込んでから目的の行を取り出す 二つのうちどちらが負荷や処理スピードの面でいいのでしょうか? あともし他にもやり方がある場合はそれも教えていただけるとありがたいです。
>>317 普通に考えて、whileで10行目を読むのが早いと思うが?
10行目を読んだら、それ以降は読まずループ抜ける事できるし。
配列で全部読んでたら、メモリの無駄だし。
319 :
nobodyさん :03/04/25 07:28 ID:Ai2lxSHs
320 :
bloom :03/04/25 08:29 ID:pCM0Odok
321 :
nobodyさん :03/04/25 09:15 ID:Ai2lxSHs
322 :
nobodyさん :03/04/25 10:38 ID:CjHipUDv
初心者な質問ですいません。 foreach $value (keys %in){ $in{$value}; $in{$value}について、&;`'\"|*?~<>^()[]{}$があったら、すべて全角にする } の3行目って、どうやって組めばいいのでしょうか?
324 :
322 :03/04/25 10:58 ID:???
>>323 ってことは、
foreach $value (keys %in){
$in{$value};
&jcode::tr(\$in{$value}, '&;`'\"|*?~<>^()[]{}$', '&;`’¥”|*? ̄<>^()[]{}$');
}
だけでOKってことですか?
まず、やってみなよ。 テストするソースぐらいすぐ書けるでしょ。
326 :
322 :03/04/25 13:10 ID:???
>>325 そりゃそうですね。しつれいしますた。
で、
>>324 にでやったら
foreach $value (keys %in){
$in{$value};
&jcode::tr(\$in{$value}, '&;`'\"|*?~<>^()[]{}$', '&;`’¥”|*? ̄<>^()[]{}$');
}
Backslash found where operator expected at /foo/index2.cgi line 48, near "'&;'\"
[index2.cgi:48:warn] (Missing operator before \?)
理由は、'・・・・・'の中に、'を入れてたからなので、
\' とエスケープして↓のようにやったら、うまくいきました。
ありがとうございます。
foreach $value (keys %in){
&jcode::tr(\$in{$value}, '&;`\'\"|*?~<>^()[]{}$', '&;`’¥”|*? ̄<>^()[]{}$');
}
めでたしめでたし
エラーの英文が読めないとか馬鹿の多い昨今、痛みに負けずよく頑張った! 感動した!
>>326 エスケープが面倒な場合、qq!文字列! にしてみるのもどうよ。([!]が使われていないから)
>329 qqにしたら、逆にダメになる単語が増えないか?
qqって便利なようで実は逆に使い辛いよな・・・ 手癖でダブルクォート打ってまうし(´ヘ`;)
332 :
nobodyさん :03/04/26 00:52 ID:1PdRr1Bn
たとえば $n = 13 のとき 「000013」 と表示させるのにはどうしたらいいでしょうか?
>332 print "0000$n";
335 :
nobodyさん :03/04/26 00:55 ID:1PdRr1Bn
私は前からqq多用してたなぁ…
ダブルクォートをいちいちエスケープするぐらいならqq使ったほうが簡単だな。
SSIからCGIを呼んでるんですけど、[an error occurred while processing this directive]のエラーが出てしまいます。 <!--#exec cmd="./xxx.cgi hoge" --> <!--#exec cmd="./xxx.cgi?hoge" --> <!--#exec cgi="./xxx.cgi hoge" --> <!--#exec cgi="./xxx.cgi?hoge" --> なぜですか? 時間がないので12:00までにお願いします。
>>338 >時間がないので12:00までにお願いします。
・・・お前、アフォか・・・
ここは、サポセンでもなんでもない。
とりあえず、マジレスするとしたら、
「SSIでCGIを呼び出す事すらできないなら使うな」だ。
>>338 Perl以外の話は他でやってください。
>時間がないので12:00までにお願いします。 ワロタ
昨日吉野家いったんd
ファイナルアンザー? ざ〜んね〜ん
「12時過ぎたから教えてやるか」という香具師が出てくるのを待つ作戦。 本当の締め切りは午後5時。 課題は 「ホームページを作成せよ。さらに訪問者をカウントするためにカウンタを設置せよ」 あほな専門学校の課題。
早く答えてぇ.......もう答えていいか?ハァハァ
347 :
nobodyさん :03/04/26 17:06 ID:5Ob9rcEz
GDモジュールをppmでインストールしようとしても Error: PPD for 'GD.ppd' could not be found. と出てインストールできません。どうすればいいのでしょうか?
cgi.pmでテキストをエンコードする使い方がよくわからないので どなたかわかりやすく説明してください。 よろしくお願いいたします。
甘いな。俺達はいつでも全力投球さ♥ミ
353 :
250 :03/04/26 18:43 ID:???
>>351 いっぺんその質問はには答えたので過去スレ読めでもよかったんだけど、
馬鹿馬鹿しいのでほっといたわけであるが・・・
ダサ
355 :
nobodyさん :03/04/26 23:29 ID:ThLo0Ki9
sample.cgi ---- #!/usr/bin/perl -w use strict; require "./util.pl"; my %anHash = &util::getHash( $ENV{'HTTP_COOKIE'} ); --------------- util.pl ------- package util; sub getHash { my( $k, $v, $key, $val, %hash ); foreach ( split( /;/, $_[0] ) ) { ( $k, $v ) = split ( /=/ ); 以下略 } } ---------------- 上記のスクリプトで、「Use of uninitialized value in split at ./util.pl line 27.」 というエラーになってしまい、困っています。 思うに、$_[0]が初期化されていないと言いたいんでしょうが、 どうすればいいんでしょう? 足りない脳が悲鳴を上げています。助けて下さい。
>>355 foreach ( split( /;/, $_)[0] ) {
ハッシュで $data{'hoge'} = 3; $data{'hage'} = 2; $data{'baka'} = 5; とあって ソートして baka 5 hoge 3 hage 2 と出力したいのですが うまいやり方が見つかりません どんな書き方をすればいいのでしょうか?
>>357 ($key, $value) = each(%data);
以下略
360 :
nobodyさん :03/04/27 00:23 ID:BGNE0ecd
Windowsでperlからパイプでsendmail使いたいんですけど、 できますかねぇ?
while ( ( $key , $value ) = each %data ){ print "$key $value \n " ; } とか foreach $key ( keys( %data ) ) { print "$key $data{$key} \n " }
362 :
bloom :03/04/27 00:29 ID:3nPIuagT
363 :
355 :03/04/27 00:34 ID:AWb8yDTe
>>356 さん、即レスありがとうです。でも…
syntax error at ./util.pl line 28, near ")["
syntax error at ./util.pl line 45, near "}"
と、perlは逝っております。
>>357 foreach $key (sort {$a cmp $b} keys %data) {
printf "$key $data{$$key} \n;
}
>>363 省略して書いてるんだから行番号でエラー書かれたってわからんよ。
>>364 foreach $key (sort {$a cmp $b} keys %data) {
print "$key $data{$key} \n;
}
ゴミが混じってしまった
367 :
355 :03/04/27 00:59 ID:AWb8yDTe
>>365 さん、失礼しました。
syntax error at ./util.pl line 28, near ")["
これは、「foreach ( split( /;/, $_)[0] ) {」をいっています。
syntax error at ./util.pl line 45, near "}"
これは、util.plの最後の「}」です。
>>367 それぐらい自分でなんとかしろよ
foreach ( (split( /;/, $_))[0] ) {
あと
>>355 は何もエラー出なかったぞ?>355
>Use of uninitialized value in split at ./util.pl line 27.」
↓
>思うに、$_[0]が初期化されていないと言いたいんでしょうが
は本当か?
>>368 ああいけね。キーで並べるのかと思った。値の降順か。
ま、あとは本人がなんとかできるだろ。
できないに10円賭けますた。
375 :
355 :03/04/27 01:37 ID:AWb8yDTe
>>369 いやはや、申し訳ないです。ド初心者なもんで。
>>371 どうやら、それ以外にマズーな所が有るようですね。
大体、どう考えても、本来エラーは出ないと思うんです。
頭を冷やしてきます。
レスをしていただいた皆様、ありがとうです。
376 :
355 :03/04/27 01:39 ID:???
無意味にageてしまった。ごめんなさい。
377 :
356 :03/04/27 01:43 ID:???
>>370 失礼な!
ちょっと、間違ってしまっただけでネタ扱いか!
スマソ
なにがなにやら
379 :
370 :03/04/27 02:27 ID:???
>>377 foreachにスカラーを渡すのを教えるなんて素敵な初心者いじめだなあと思ってしまいますた。
スマソ
380 :
nobodyさん :03/04/27 05:22 ID:a4qvC/X7
■これだとループさせれるけど、キーを指定しての値表示ができない。 use constant HOGE => ('hoge'=>'aaa','hoge2'=>'bbb','hoge3'=>'ccc'); foreach(HOGE){ print; } ■これだと、キーを指定しての値表示ができるけどループさせられない。 use constant HONGE => {'hoge'=>'aaa','hoge2'=>'bbb','hoge3'}; print HONGE->{'hoge'}; どうにかしてループOK、個々の値抜き出しOK な方法は無いでしょうか?
381 :
250 :03/04/27 05:43 ID:???
>>380 use constant HONGE => ('hoge'=>'aaa','hoge2'=>'bbb','hoge3'=>'efh');
%hage = HONGE;
print $hage{'hoge'};
use constant HOGE => {'hoge'=>'aaa','hoge2'=>'bbb','hoge3'=>'efh'};
$hage = HOGE;
foreach(keys(%{$hage})){
print $hage->{$_};
}
CONST使わなければよいってのは駄目なん?
382 :
380 :03/04/27 05:51 ID:a4qvC/X7
>>381 ありがとうございます。
その方法でできました。
けど、他の変数に代入せずに表示させるというのは無理なんですかね?
CONST使わなければ良いんですけど勉強の為という事で。。
383 :
380 :03/04/27 05:55 ID:???
定数だとすぐ分かる、というのと 定数として扱うなら変数にぶち込むより、なにかが良いらしい、というのと へっぽこな自分にとってはなんかかっこ良く見える(結構なウエイトを占める) というのも理由の一つですw
384 :
250 :03/04/27 06:04 ID:???
グロブとか昔の仕様(Perl4)絡みっぽいので、詳しい事はわからないのだけど・・・ { my $hage = {'hoge'=>'aaa','hoge2'=>'bbb','hoge3'=>'efh'}; foreach(keys(%{$hage})){ print $hage->{$_}; } } とか定数だとこうやっちゃうことが多いから、使う所無かったりします
385 :
380 :03/04/27 06:13 ID:???
>>384 その方法で行こうと思います。
こんな時間にどうもありがとうございました。
386 :
nobodyさん :03/04/27 06:35 ID:MIfRpB25
<血液型A型の一般的な特徴>(見せかけのもっともらしさ(偽善)に騙されるな!!) ●とにかく神経質で気が小さい、了見が狭い(臆病、二言目には「世間」(「世間」と言っても、一部のA型を中心とした一部の人間の動向に過ぎない)) ●他人に異常に干渉して自分たちの古いシキタリを押し付け、それから少しでも外れる奴に対しては好戦的でファイト満々な態度をとり、かなりキモイ(自己中心、硬直的でデリカシーがない) ●妙に気位が高く、自分が馬鹿にされるとカッと怒るくせに平気で他人を馬鹿にしようとする(ただし、相手を表面的・形式的にしか判断できず(早合点・誤解の名人)、実際にはたいてい、内面的・実質的に負けていることが多い) ●権力・強者には平身低頭だが、弱者に対しては八つ当たり等していじめる(強い者にはへつらい、弱い者に対してはいじめる(特に人が見ていない場合)) ●あら探しだけは名人級でウザく、とにかく否定的(例え10の長所があっても褒めることをせず、たった1つの短所を見つけては貶す) ●基本的に悲観主義でマイナス思考に支配されているため性格が鬱陶しい(根暗) ●何でも「右へ習え」で、単独では何もできない(群れでしか行動できないヘタレ) ●少数派の異質・異文化を理解しようとせず、あるいは理解を示さず、排斥する(差別主義者、狭量、視野が狭い、多数派=正しい と信じて疑わない) ●集団によるいじめのリーダーとなり皆を先導する(陰湿かつ陰険で狡猾) ●他人の悪口・陰口を好むと同時に、自分は他人からどう見られているか、人の目を異常に気にする(自分がそうだから容易に他人を信用できない、ポーズだけで中身を伴っていない、世間体命) ●たとえ友達が多くても、いずれも浅い付き合いでしかなく、心の友達はおらず孤独(心の感度が低く、包容力がなく、冷酷だから) ●頭が硬く融通が利かないためストレスを溜め込みやすく、また短気で、地雷持ちが多い(不合理な馬鹿) ●たとえ後で自分の誤りに気づいても、素直に謝れず強引に筋を通し、こじつけの言い訳ばかりする(もう腹を切るしかない!) ●男は、女々しいあるいは女の腐ったみたいな考えのやつが多い(例:「俺のほうが男前やのに、なんでや!(あの野郎の足を引っ張ってやる!!)」)
use constant HASH => (hoge => 'aaa', hoge2 => 'bbb', hoge3 =>'efh'}; use constant HASHREF => {hoge => 'aaa', hoge2 => 'bbb', hoge3 =>'efh'}; print ${{+HASH}}{hoge}; # print {+HASH}->{hoge};は出来ない… foreach (keys %{HASHREF()}) { print HASHREF->{$_}; } foreach (keys %{+HASHREF}) { print HASHREF->{$_}; }
389 :
nobodyさん :03/04/27 20:30 ID:AxMzTUBk
*.cgi?a とかありますよね? このように、?aならαという処理をする、?bならβという処理をする というふうにするにはどうすればいいのでしょうか? あと、これってGET,POST関係ありますよね? トクトクです。動作可能かもお願いします
>>389 *.cgi?a だと$ENV{QUERY_STRING}に"a"が入ってる。
$ENV{REQUEST_METHOD}はGETになる。
391 :
nobodyさん :03/04/27 20:38 ID:AxMzTUBk
>>390 ありがとうございます。
$ENV{QUERY_STRING}は環境変数だからGET POST関係ないですね。
$ENV{REQUEST_METHOD}がGET専用ということですか?
>>391 どっちも環境変数だよ!
わけわからねえよ!氏ねよヴォケ!
394 :
nobodyさん :03/04/27 20:49 ID:AxMzTUBk
>>392 わざわざプログラム板からご苦労です。( ´,_ゝ`)
>>391 違う$ENV{REQUEST_METHOD}はGETなら"GET"が、POSTなら"POST"が入ってる。
で、何がしたいの?自分でスクリプトを組みたいのか、
どっかから拾ってきたやつを動かしたいのかどっちだ?
397 :
nobodyさん :03/04/27 20:54 ID:AxMzTUBk
>>395 丁寧にありがとうございます。
自分で組んでいるんです。
中身がopenなら、テキストにipを書き込み、
closeならcloseと書き込むスクリプトです。
自宅鯖の公開中かどうかというのを表示するスクリプトです。
398 :
_ :03/04/27 20:55 ID:???
Perlスレは大型連休になるとあからさまに初心者が増えるよな。
連休でCGI作ろうっていう学生が多いんだろうが、自分で努力する前に聞こうとする奴が多いのは萎えるな。
>>1 も読めないような奴が多い。
まぁ、そんなバカでも挑戦しようと思える程、Perlが優しいってことなのかもしれないが。
>>397 $ENV{'QUERY_STRING'}に何が入るか分かってる?
プログラム技術板とこっちにマルチポストしたうえに、Perlとは関係ない話だし。 しかも悪びれる様子もない。
402 :
nobodyさん :03/04/27 21:04 ID:AxMzTUBk
>>401 間違えてプログラム板にカキコしてしまい、こちらに書き直しました。
申し訳ありませんでした。
>>397 半角英数だけなんだったらデコードする必要は無いよ。
その後の処理は$ENV{'QUERY_STRING'}にどんな値が入っているか分かれば簡単ですよ。
404 :
nobodyさん :03/04/27 21:10 ID:AxMzTUBk
>>403 ありがとうございました。マルチポストでご迷惑おかけしました。。
405 :
404 :03/04/27 21:46 ID:AxMzTUBk
すみません。問題が生じました。 #!/usr/bin/perl open(FILE, ">ip.txt"); $addr = $ENV{REMOTE_ADDR}; $mode = $ENV{QUERY_STRING}; if($mode eq 'open'){print FILE "$addr\n";} elsif($mode eq 'close'){print FILE "close\n";} close(FILE); open(FILE2, "ip.txt"); $data = <FILE2>; if($data =~ /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/){ &connection; } else{ &unconnection; }
406 :
404 続き :03/04/27 21:47 ID:AxMzTUBk
sub connection
{
print "content-type: text/html\n\n";
print "<html><head><title>公開中</title></head>\n";
print "<body><a href=\"
http:\/\/$data\ "><font color=\"blue\">公開中です。</font></a>\n";
print "</html>\n";
exit;
}
sub unconnection
{
print "content-type: text/html\n\n";
print "<html><head><title>非公開中</title></head>\n";
print "<body><font size=\"2\" color=\"red\">非公開中です。</font></body>\n";
print "</html>\n";
exit;
}
とすると、.cgiに?つけないでアクセスしたらテキストファイルの中身を消してしまいます。
どうしてでしょうか?
>>406 消さないようにすればいい。
消すようにしてるから悪い。
ちゃんと勉強しろ。
408 :
404 続き :03/04/27 21:55 ID:AxMzTUBk
>>408 どの時点でファイルが消えてるのかをちゃんと把握しよう。
410 :
404 続き :03/04/27 22:22 ID:AxMzTUBk
>>409 open(FILE, ">ip.txt");
の時点できえるんですよね。。。
うーん。どうするべきか・・・
411 :
動画直リン :03/04/27 22:29 ID:3nPIuagT
412 :
404 続き :03/04/27 22:32 ID:AxMzTUBk
解決しました。openより前で分岐しなければならなかったんですね。勉強になりました。ありがとうございました。 $addr = $ENV{REMOTE_ADDR}; $mode = $ENV{QUERY_STRING}; if($mode eq 'open'){ open(FILE, ">ip.txt"); print FILE "$addr\n"; close(FILE); } elsif($mode eq 'close'){ open(FILE, ">ip.txt"); print FILE "close\n"; close(FILE); } open(FILE, "ip.txt"); $data = <FILE>; if($data =~ /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/){ &connection; } else{ ・ ・ ・ ・
413 :
__ :03/04/27 22:34 ID:???
>>412 前に来たやつだろ?
しかし、無駄なやり方してんなぁ
415 :
404 続き :03/04/27 23:12 ID:AxMzTUBk
>>414 まだ初めて間もないもので・・・・
1ヶ月・・かな
1ヶ月もやってんのか。
417 :
nobodyさん :03/04/28 01:21 ID:Gjra4FR3
JavaScriptのように、リアルタイムでブラウザ表示させる ようなプログラミングはPerlやPHPではできないのでしょ うか。 初心者過ぎて申し訳ございません。
>417 リアルタイムに「上から順番に」表示するだけ(単純に表示を遅らせるだけ)なら できなくもないが、基本的には無理。 HTTPの仕様。 というかスレ違い。
cgi-libのようなもので、もう少し強化した Htmlソースを書き出してくれるモジュールってありませんか?
ブラウザの解放の話もわからないレベル低い奴らだから このスレでは無理ぽ
>>422 へぇ〜、君ってすごいんだね( ´,_ゝ`)プッ
424 :
nobodyさん :03/04/28 02:43 ID:Gjra4FR3
>>419 そうですよね。
厨房過ぎて恥ずかしい次第です。
カウントダウンの表示とかは、JavaScriptとか
アプレットとかFlashとかでクライアント操作
させて、指定時刻になったらcgiに渡す操作を
するしかないのですよね。
厨房質問に答えていただき有難うございました。
425 :
sage :03/04/28 02:45 ID:Gjra4FR3
>>418 質問にわざわざ答えていただき有難うございます。
そしてsage忘れてすみません。
やはり厨房丸出し。。。
>>422 このスレの住人は、browser_release.pmの使い方も知らないDQNだから
あまり相手にしないほうがいいよ。
error()でexitじゃなくて、Error.pmとかを使って例外処理が入ってる 掲示板などを配布してる所ってありませんか?知ってたら教えてください。
>>429 よーわからん。
例外処理って何がしたいのさせたいの?
そもそも「例外処理」の意味自体もはき違えてそうだけど。
いやその前にスレ違いだな。藁
出力中に、ファイル開けなかったぽい、って出て中途半端な状態で表示されたり、 もうちょっと上品に(致命的な)エラーを伝えたいなーって思って… 具体的なやりかたを教えて、、って書いてもいいんですが、もしそういうのがあれば いちいち説明してもらわなくてもいいからいいかなって思って。。
>431 まずは日本語を正確に伝えられるようになってくれ。
頭がサスペンドしてるんでー…1行目と2行目がつながってないな。。 自分がやりたいのは、どのerror()で強制終了しても、後始末をすることを 考慮に入れてるスクリプトが全然無いから、そういうのを自分で作るということ。 それが広まれば、少しは、そんなことを考慮に入れたものが作られるようになるかなって思ったから。
434 :
bloom :03/04/29 00:29 ID:23csOg+c
436 :
ライラ :03/04/29 03:30 ID:???
最近、ホームページ作ろうと思いそれに伴って BBSを付けたいのです。 それで、この2chのBBSをまねようと思うのですが、 どこで、どうやればいいのですか? 出来れば、分かりやすく教えて下さい。
438 :
ライラ :03/04/29 04:14 ID:???
さんきゅ
>>429 改造したいのか?
でなければどう実装されていようがどうでもいいはずだけど。
PerlにこだわらなければRubyで書かれたものを探せば見つかるんじゃないかな。
440 :
bloom :03/04/29 04:29 ID:23csOg+c
>>433 どこまで慎重にエラー処理するかはプログラムやそれで
扱うデータの重要度にもよる。
ランタイムエラーを起こす可能性がある箇所を全て把握
するには結構な知識が必要だし、そもそもいつシグナルが
飛んできて殺されるか分からん。トラップにコストをかける
意義があるか無いかを判断した上で、要らんと思ったら省く。
まぁどんなスクリプトを見てきた上で、「後始末をすることを
考慮に入れてるスクリプトが全然無い」という感想を持つに
至ったかは知らんが。(w
>>439 Ruby自体はいいと思うんだが、最新Ver.を導入している鯖が少ないんだよな。
444 :
nobodyさん :03/04/29 10:02 ID:j97vjhfH
446 :
nobodyさん :03/04/29 16:00 ID:qzwrs6CU
素朴な疑問なんですが、ハッシュなどの添え字の部分 $abc{xxx} / $abc{'xxx'} 添え字が英数字だけの場合、「''」をつけない場合のデメリットってありますか? 今まではつけるようにしていたんですが、 特にデメリットがないなら、別に付けなくてもいいかなと・・・。
449 :
nobodyさん :03/04/29 16:19 ID:qzwrs6CU
>>447 Perl5.8未満の場合、JPerl使わないと正規表現に一部日本語が使えなかった筈
450 :
nobodyさん :03/04/29 16:20 ID:7QU29USV
452 :
nobodyさん :03/04/29 17:10 ID:jjc4BdFL
>>452 あいまいな記憶だが、+はデコード時に半角スペースにしてた気が・・・
+を %20 に変更すればその場をしのげるが、 どのみち、0-9 a-z A-Z _ - . * 以外の文字を使われると破錠する。 詳しくは、URLエンコードでググって。
455 :
独り言 :03/04/29 17:26 ID:???
448を見て、ちょっと思ったのだが、 プログラミングPerl改訂版の4章(リファレンス)を読んでも全然意味がわからないよ。 C言語のポインタとか分かってる方が理解が早いのかな?(Cは全然知らんが) リファレンスがスッキリ分かる書籍とかないかなぁ。 以前、オブジェクト指向ってどんなんかなぁと思って、 PerlとかJavaのそれ関連の本読んで全然意味が分からなかったことがあったが、 Rubyプログラミング入門って本を読んだらちょっと理解できたことがあったな。 それを読むまでは、 オブジェクト?はぁ? メソッド?はぁ? クラス?はぁ? って感じだったんだが、その本では、自動販売機を例にしていて すごく分かりやすかったなぁ。 クラスとは自販機の設計図です。 オブジェクトはそれをもとに作られた自販機そのものです。 メソッドは自販機のボタンです。と。 オブジェクトは機能とデータを持っていて、メソッドで機能を呼ぶと。 自販機だったらボタンを押す(メソッド)とジュース(データ)が出てくる(機能)と。。。 ちょっと感動したもんだ。 そんな感動するような、リファレンスの解説があったら読みたいもんだ。
クラスもオブジェクトだけどな。 自販機そのものはインスタンスだろ
>>455 リファレンスとは、Cのポインタ相当。
変数に入ってるデータのメモリアドレスを返す。
変数の中に、長文の文字列が入ってるとする。
それを、サブルーチンに引数として渡す場合、すべての長文の文字列をコピーする。
リファレンスで渡すと、文字列の先頭のアドレスだけを渡す。
文字列は、連続したアドレスに入ってるので、先頭のアドレスが分かれば、文字列すべてがわかる。
・・・わかるか?
458 :
250 :03/04/30 01:20 ID:???
$data = ayaya->new($hanya)->hoe->return; ってかけるとカッコいいしとかいってみる・・・
かっこいいか?
あああ!しまった。よく考えなくてもネタだよな。
つい条件反射で・・・。
>>459 は忘れてくれ。
461 :
455 :03/04/30 12:16 ID:???
>>456 漏れの中ではインスタンスとオブジェクトは同じモノ扱いになってる(w
漏れ、まだ分かってない???(´・ω・`)
けどね、その本読んでから、Perlのblessの意味がちょこ〜っとだけ
わかった気がする。ネ申の息吹で無機物が有機物になって命を持つようなイメージ(w
>>457 ちょっとわかったような・・・
変数の中身をまるごとサブルーチンに渡すやり方はメモリ食いまくると?
巷で配布されてる糞CGIプログラムを理解するためのPerlの知識と
より洗練されたプログラムを書くための知識はケッコウ違いがあるなぁ。
463 :
nobodyさん :03/04/30 20:25 ID:hqsLMrDJ
すみません。どなたか教えて下さい。 区切り文字で区切られた行を、行ごと削除したいのですが... $H,$I,$D $H,$I,$D $H,$I,$D 上記のようなデータファイルを1行ずつwhileで読み込んで $Hの中に例えば”AA”という文字を含む場合、その1行全てを 削除したいのですが可能でしょうか? while (<ANEWFILE>) { s/(AA,.*,.*)//g; s/BB,/CC,/g; ($H,$I,$D) = split(/,/); $HOST = $H; $HOST =~ tr/a-z/A-Z/; print BNEWFILE "$HOST,$I,$D"; } このようなscriptを作ったのですが、",,"という行が残ってしました。 区切り文字を\tなど他の文字に変えてみましたがだめでした。 区切り文字は削除できないのでしょうか?
464 :
nobodyさん :03/04/30 20:27 ID:hqsLMrDJ
あ、あげちゃった。まずかったかしら。 ごめんなさい。
465 :
bloom :03/04/30 20:29 ID:amWoVOiY
467 :
nobodyさん :03/04/30 22:22 ID:ryfRd/ki
行き詰まってしまったので、どなたかヘルプお願いします。 $datにはIPを含むテキストデータが入っています。 (BBSのログファイルみたいな物と考えてください) IPをHOSTに変換する物を作って見ました。 IPが5つくらい含まれていて、$datのサイズが1Kバイト程度ならしっかり動きます。 しかしそれ以上だと処理が終了しなくなってしまいます。 どうしたらいいかアドバイスお願いします。 while ($dat =~ m/([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/i) { $ip="$1.$2.$3.$4"; $host = &IP2Host($ip); $dat =~ s/$ip/$host/g; } IP2Host部分にも問題があるんですかね…?
468 :
動画直リン :03/04/30 22:29 ID:amWoVOiY
>467 エラーログは?
470 :
467 :03/04/30 22:35 ID:???
早速…本当に助かります。 エラーログが出ません(汗 なんか無限ループしているような感じです。 なので結構たちが悪い…
471 :
467 :03/04/30 22:40 ID:???
あああああああああああああ。
済みません。事故解決してしまいました(汗
一生懸命GETで送ってました。
サイズの限界超えてました。
POSTにしたらOKでした。
何こんなので2時間迷っていたんだろう…
>>469 さん
本当に申し訳ないです。
>466さん 逝ってきます。
ものすごく初心者な質問でごめんなさい。 テーブルを使って掛け算の九九を表示させようとしています。 for($kuku1 = 1; $kuku1<=9 ; $kuku1 = $kuku1 + 1) { for($kuku2 = 1; $kuku2<=9 ; $kuku2++) { $kotae = $kuku1 * $kuku2; print "$kuku1*$kuku2=$kotae\n"; } } これだと動くのですが、テーブルにしようと思って、最初のforと 次のforの間にif($kuku1 = 1) {print "テーブルタグ"}(←やや略)や 最後の}と}の間にif($kuku1 = 9) {print "テーブルタグ"}を入れると 途端に中のforが実行されなくなってしまいます。持っている本には そこまで解説がなく、検索してもわかりませんでした。入れ子の時は 途中に挟んだらいけないのでしょうか。
475 :
473 :03/05/01 12:32 ID:???
あっ! そうか! ありがとうございます
476 :
473 :03/05/01 12:37 ID:???
動きますた!m(_ _)m
477 :
T-T :03/05/01 14:13 ID:???
初めまして、 3時間検索しまくったんですが解決できませんでした、助けて下さい、 @なぜか関数同士の、しかも割算が動きません -------↓やってみた命令文-------- $temp = $test1; $test1 = $temp / $test2; --------------------------------- #結果:エラーも出ずにそこで処理が止まります。 /や%を使った文を消すとCGIは最後まで正常に動きます・・。 +,-,*は動作しました、/,%だけ動きません、 Aifで複数の文章を連続で書き直す命令作ってみたんですが・・ -------↓やってみた命令文-------- if ($syurui1 eq 'デジカメ') { $syurui1 = 'dezikame';} elsif ($syurui1 eq 'ネット') { $syurui1 = 'net';} elsif ($syurui1 eq 'スキャナ') { $syurui1 = 'scaner';} --------------------------------- #結果:他の項目まで全部 dezikame になってしまいました、 データ整理したいけど知識なかったので とあるBBSを改造して ------------------------------------------------------------- open(IL,"$logfile") || &error("Open Error : $logfile"); while (<IL>) {($〜〜,$〜〜,$〜〜) = split(/<>/); ------------------------------------------------------------- こんな感じにlogファイルから関数にうつしています。 JavaScriptでファイル整頓してた性で変な先入観あるのかもしれません、 誰か もしかしたら 程度でもいいのでアドバイスをー、、
(1)$test1、$test2にはどんなデータが入ってるの? 関数じゃなくてスカラーデータね。 (2)やってみたという命令文自体に問題はない。 他の項目まで全部 dezikame になってしまうってことは、 そこ以外での処理がまずいんでしょ。 ログファイルを読み込むとこから、処理をして、ログファイルに 書き込むとこまでのソース書いてみて
>>476 ちなみに、代入式は代入した値を返すのでif($i=1)とやれば真になるし、if($i=0)とやれば偽になる。
こういう書き方をする場合もあるので覚えておいて損はないかも。もちろん定数を入れては意味がないけど、関数の戻り値とかをね。
>>477 > なぜか関数同士の、しかも割算が動きません
変数同士に見えるんだけど。$test2が0なんじゃないの?
コーディングスタイルに関しての質問なんですが、 みんなprint関数だけは括弧をつけずに呼び出しているのはなぜですか? 教科書(?)がそう書かれていることが多いから?
481 :
480 :03/05/01 14:51 ID:???
スレ違いだったかもしれません。すみませんでした。
483 :
480 :03/05/01 15:02 ID:???
>>482 printfと区別するためということですか?
484 :
bloom :03/05/01 15:10 ID:YcBKOzoM
485 :
nobodyさん :03/05/01 16:16 ID:l9KEH29r
486 :
T-T :03/05/01 17:02 ID:???
477です、 @の件 >478さん >(1)$test1、$test2にはどんなデータが入ってるの? >関数じゃなくてスカラーデータね。 $が付いてたらスカラー関数・・ではないんですね; >479さん、 >変数同士に見えるんだけど。$test2が0なんじゃないの? ちゃんと入ってる!・・とおもったら、、 BBSのを使った性でログの1行目のデータがからっぽな性だったみたいです、、 0以前に""(ナシ)な感じだったのかも、、 おかげさまで問題点気付けて正常動作しましたぁ〜〜、、/(_ _ / ペコリ ログ入力をメモ帳でやってて、 見易くするためにスペース入れてたのも 何か影響あったみたいです、(ワードパッドで一括削除しました、) 数字じゃなく文字列扱いになってたのかも、(でも足算、掛算はできたし・・?)
477です、(2 Aの件 >478さん >(2)やってみたという命令文自体に問題はない。 >他の項目まで全部 dezikame になってしまうってことは、 >そこ以外での処理がまずいんでしょ。 >ログファイルを読み込むとこから、処理をして、ログファイルに >書き込むとこまでのソース書いてみて syntax errorとか1度出て文法がおかしいんだと必死になってたんですが 問題は無いと助言いただけたので、他の処理を少し書き直してみたら 全部変換されてしまうのが止まりました、、 T―T でもifに反応しないなと思ったらこっちも列揃えて見易くなるように ログ打ち込みで半角スペース使いまくってた性があったみたいで スペース消したら正常動作しました・・! ヽT―Tノ 読み込んだ時に縦列合わせに入れたスペースの存在を忘れた事と 何も入って無いものは掛,足,引はできるけど割算系はできないと勉強になりました、、 助言いただけたおかげで気付けて空回りを終れました〜、、 ありがとうございました > <ノ (またすぐにエラーでて来そうケド;
$_ が 「から」 もしくは、半角スペース、全角スペース、タブのみの組み合わせで構成されている時、「処理1」を行うというif文を作ってください。 半角スペース、全角スペース、タブがあるならばというのならできるのですが、のみというのに苦労してます。 よろぴくおながいします。
>>488 「から」って何? そのままの日本語の通り
から
っていう4バイトの文字列のことでいいの?
何もないっていう意味
本当の意味のぬるぽ?
>>488 >半角スペース、全角スペース、タブがあるならばというのならできるのですが
まずそれを書いてみろ。話はそれからだ。
>488 宿題くらい自分でやろうな。
494 :
477 :03/05/01 22:52 ID:IITpZ0lX
質問です、、 自作ログを配列に直してCGIに取りこんだんですが、 ----↓こんな感じに------------------------------ @gyou01 = ('photo','pic','scan' 続く⇒); @gyou02 = ('ph0001','pic001a','scan001'); @gyou03 = ('ph0002','pic001b','scan002a'); @gyou04 = ('ph0003','pic002','scan002b'); (50行くらい続く) ------------------------------------------------ 種類別にリストに書き出そうと思ってforを使ったんですが ----------------------------- for ($i = 1; $i <=51; $i++) { print "$gyou$i[$i]\n"; ----------------------------- 配列の部分の指定に関数使ったんですが動かず・・、(JavaScriptでは出来たのに、、 あと、 --------------------------- for ($i = 1; $i <=51; $i++){ j = i + 1; if ($gyou$i[5] < $gyou$j[5]){ @temp = @gyou$i; @gyou$i = @gyou$j; @gyou$j = @temp; } --------------------------- こんな感じで配列の入れ替え整頓もできる状態にしたくて あまり激しく変えたくないのですけれど・・・ 無理でしょうか?、 よろしくおねがいします、、
>>480 俺は括弧は極力省く派だから「みんな」には入らんようだが、
print は直後にファイルハンドルが来る事が多いから、
それらと統一感を出す為じゃないか?
>>494 二次元配列にすれ。
@gyou = (
['photo','pic','scan'],
['ph0001','pic001a','scan001'],
['ph0002','pic001b','scan002a'],
['ph0003','pic002','scan002b'],
);
# photo, ph0001, ph0002...
foreach (@gyou) { print $_->[0] }
# 入れ替えはスライスで。
@gyou[2,1] = @gyou[1,2];
あと「変数」を「関数」と覚え間違えてるのは直そうな。
>480 $rtn = print "hello,world"; #rtn 戻り値 私の持ってる超ド級初心者用の本の説明・・・ 関数printはまず失敗しないから、使わないだけ。らすぃ・・
質問です。 変数$hogeの文字列のうち、 文字列"FOO"と一致する内容を、変数$bに置換するにはどうすればいいですか?
>497 正規表現。 あとは検索すればいくらでも出てくる。
499 :
477 :03/05/02 01:33 ID:???
494です、 495様ありがとうございます> <ノ C++かじった時出てたけど色んなとこで紹介さえなかったからCGIに2次元は無いと思ってました、 でも入れ替えも簡単で嬉しくて嬉しくて> <、 でも foreach (@gyou) { print $_->[0] } の機能が試したけど不明、、 $_->はどんな意味があるのでしょうか? >あと「変数」を「関数」と覚え間違えてるのは直そうな。 はい、、 まだしばらく間違えそうな気がするけど気を付けます、 なにはともあれ、本当に助かります ありがとうございます〜、 ノ(_ _ ノ
>>499 >CGIに2次元は無いと思ってました、
PerlとCGIを混同してないか?
Java/JavaScriptと同じで、時と場合によっては叩かれるから注意な。
$hoge = '/home/user/public_html/hoge.jpg'; を $hoge = '/home/user/public_html; にする一番スマートなやり方ってどんなのがありますか?
>>501 「する」ってどういう意味で言ってるのか??
そのまま下の代入をすればできるでしょ。
置き換えでもいいし。
本来の意味での二次元配列のない言語はCでは?直行的だし
>>506 (´-`).。oO(本来の意味の二次元配列ってなんだろ・・・?)
>>499 # [ ] で無名配列のリファレンスを生成
@gyou = (
['photo','pic','scan'],
['ph0001','pic001a','scan001'],
['ph0002','pic001b','scan002a'],
);
# 同じ事を別のやり方で。\ でリファレンスを得る
@gyou1 = ('photo','pic','scan');
@gyou2 = ('ph0001','pic001a','scan001');
@gyou3 = ('ph0002','pic001b','scan002a');
@gyou = (\@gyou1, \@gyou2, \@gyou3);
foreach $line (@gyou) {
# リファレンスをそのまま見ると、型とアドレスが返される
print "$line - ";
# デリファレンスする事で元のデータにアクセスできる
print "(@{$line}) - ";
# リストの要素を個別に見る
print "${$line}[1] - ";
# デリファレンスに矢印演算子を使う
print "$line->[0]\n";
}
あとは上に出したような単語で調べてくれ。
Cの[][]こそが本来の意味の二次元配列なのだが。 PerlとかJavaとかは配列の配列と言う。
Perlのは、多次元配列とは少し違うみたいな事 解説書とかに書いてあるね。 私はPerlとPHPしかやった事が無いので 本当の2次元配列が、どういうものなのか分からない(´〜`) Cだとどういう風に書くの?ってスレ違いか…。
うpろだで入力フォームの確認を行いたいんですが
fileの初期値が指定できないことがネックになってます
結局は確認の時点で保存、その後、本書き込みの時点でコピー
ということでファイナルアンサーでしょうか
>>510 C・・・きれいな長方形
Perl・・・棒グラフ
漏れの中ではこんなイメージ
>>511 Perlの話じゃねえだろが。
そうだな。確認の時に一時ファイルに保存して、
本書き込みでリネームするなりコピーするなりかな。
一時ファイルの削除を忘れるなよー。
>>512 どもです。まぁ、Perlで作ってるんでw
じゃぁ、やぱーり一時ファイル作成→コピーかぁ
ただ、これをやると確認アタックかけられると一時ファイルが膨大になる罠
本書き込みがなくとも10分程度でファイルを自動的に消す仕様にしたとして
10分以内にアホほどうpられるとどうしようかと
投稿制限と併用が妥当ですか?
514 :
250 :03/05/02 12:28 ID:???
>>510 C 綺麗な配列はいいんじゃない?
Perl はどっちかというとツリー構造
>>513 fileの中身をhiddenで送り返してやれ。(藁
っていうか スレ違い
Cの場合は二次元配列というか二重配列って感じ。テーブルじゃないし。
二 重 配 列 ワロタ
>>518 なんかおかしい?
配列を要素に持つ配列だからイメージとしてそんな感じだと言ったんだけど。
もちろんそんな呼び方はしていないぞ。
>>519 >Cの場合は二次元配列というか二重配列って感じ。
何か勘違いしてないか?
君の言う二重配列はint **hogeだろう?
で、二次元配列はint hoge[][] だろ。
”というか”はおかしい。
スレ違いは帰れ。 はい、次の質問。 いらっしゃーい、Perlのコーディングで困ってる人のスレです。 【投稿する際の注意】 質問するときは内容をよく吟味してから投稿してください。 1:自分はこう言う事がしたい。 2:それでこんな風にやってみたが・・・ 3:それだとこんなエラーが出て上手く行かなかった。 最低でも1と3が無いと誰も答えられないよ。 良い回答は良い質問から。一緒に勉強しましょう。
>>520 それは二重ポインタだろうが。
Cでの二次元配列はメモリー上にまっすぐ並んでいるんだよ。おまえこそ分かっているのか?
>>521 スマソ もうやめる。
523 :
522 :03/05/02 21:35 ID:???
まっすぐ並んでいるんじゃ二次元と呼ぶにはふさわしくないだろと。 これで本当に最後
私は緑茶よりほうじ茶が好きだ
>>522 >それは二重ポインタだろうが。
>>519 に対してレスしてるんだよ?スレを嫁。(そして俺はスレタイを嫁。
>メモリー上にまっすぐ
なんじゃそりゃ。メモリの配置方法は関係ないだろ?
そんなこと言ったらそもそも「配列」なんて意味を持たない。
配列の各要素について等サイズのメモリが割り当てられてるのが多次元配列。
>>519 の言ってる「二重配列」は配列の各要素でサイズが違うもの。お分かり?
511だが仕様が固まったんで一応、書き込んどくyo 確認時にtempディレクトリを作って、そこに画像を保存 画像の名前はIPからcryptしたユニークIDにすることで同じIPからの 投稿は上書き処理にすることで無効化する 一時保存の前にtempディレクトリをstatして10分以上更新がなければ tempディレクトリごと消去することで仮に確認だけを行って一時ファイルを無作為に増やすような 嵐行為は10分以上時間が空けば無駄になる仕組み 一時ファイルは本書き込みの際に移動&リネームで本来の画像名を与える もっといい案があればくれろ。 てかこの板ってまともな質問できるスレ少ないな
527 :
250 :03/05/03 00:57 ID:???
>>526 cryptだと重複すること有るな・・・
画像の名前からMD5をとって、md5のファイル名の一時ファイルを作成。
それと同時に、md5ファイル名対応ファイルを作成。
んで本書きこみは対応表から本ファイル名にリネーム保存、んでリストから対応データを削除つーのはいかが?
>>527 う〜ん、10分程度の時間ならそれほど重複することもないかなとか
というか、問題は確認時に保存した一時ファイルの処理だったり
本書き込みの際に処理をさせるとなると確認だけで本書き込みに移行されない場合は
そのファイルが永遠に残ってしまうので
確認時に保存したファイルをどう削除するかスリープさせて一定時間で消去ってのも・・・
529 :
250 :03/05/03 01:16 ID:???
>>527 それよりか、ファイルのバイナリデータ自体にMD5をかければ連投さけれるな・・・
例えば
12a6de24c6aec73c5c23da03c135a3c0.png
12a6de24c6aec73c5c23da03c135a3c0.txt
つーのをつくって、12a6de24c6aec73c5c23da03c135a3c0.txt
ファイル名を記述しとく。
ayaya.png
とか・・・
んで、statなりつかってリネーム、txtファイルは削除とかどうよ・・・
530 :
477 :03/05/03 01:43 ID:???
>508さん ありがとうございます^^ 配列を配列に入れられる物なんですね〜、、 下半分はまだ駆け出しにはよくわかんないのでメモして調べて見ます、 あと、質問です、、 ----------------------------------------- @gyou([〜間〜'day'], [〜間〜'20030202'], [〜間〜'20021231'], [〜間〜'20030101'], ); for ($i = 0; $i <= 51; $i++) { $j += $i; if ($head[$i][7] < $head[$j][7]){ @temp1 = @head[$i]; @head[$i] = @head[$j]; @head[$j] = @temp1; } } ------------------------------------------ 日付順に並べかえしようと思ったんですが、1部しか並べ変わりません、、 (日付をわざわざ打つのも自動にできればいいけど無理でしょうか?、 それはそれで、 入替えってすぐ頭がこんがらがってしまって上手く構想さえ練れません、、 52列は有るんですが、変数i+1 i+2 i+3 〜〜 と52個取得して forを51度も置いて並べ替えしなきゃだめでしょうか?、 前教えてもらった$〜[○,○]での変換がまだ上手く使えなくって・・T T できれば助言ください〜、、
531 :
250 :03/05/03 02:15 ID:???
>>530 何故に@gyou なのに@headをソートしてるにょ?
それはおいといて、もっと簡単に
@gyou([〜間〜'day'],
[〜間〜'20030202'],
[〜間〜'20021231'],
[〜間〜'20030101'],
);
@gyou = @gyou[sort{ $gyou[$a]->[7] <=> $gyou[$b]->[7]} 0 .. $#gyou ];
これでいけるよ。
533 :
477 :03/05/03 12:42 ID:???
>250さん 実はややこしい配列使ってるからちょっと内容変えてたらミスを TT 内容変えてた性と構文と専門用語よくわかってないせいでまったく動かずパニック、 ちょっと別の手段さぐってみます T T ごめんなさい、、
534 :
477 :03/05/03 12:58 ID:???
あ・・動いた!; Sortのこと調べてたら$aと$bはSort用のなんですね、、 forで$aつかって$b += $aなんて作ってたから動かなかったみたいです、 繰返したりしなくても単品で全て入れかえるんですね、、 C++少しかじったのが仇になった気分です、 中身を宣言しなくてもいい変数が有ると覚えておきます、(_ _、 ありがとうございました〜、
ちょっと質問なんだけど perlでクッキー使わずにセッション管理って出来るのかな? URLでセッションIDとかを引き継ぐのもアレだしどうしたもんかと >1:自分はこう言う事がしたい 適当なページでログインした後はログイン状態の維持 スレ違いだったらスマソ
536 :
動画直リン :03/05/03 13:10 ID:TBhkUsV+
537 :
250 :03/05/03 13:34 ID:???
>>535 formのhiddenで回すとか・・・
cookieはブラウザからの確認が来るから自分的には使わず
538 :
535 :03/05/03 14:06 ID:???
レスthx やっぱそれぐらいしか無いのね・・・ 出来ればhtmlはそのままでSSIぐらいで片付く方法探してたんだけど リンク元・ホスト・IPなんかで絞る方法ってのも無理だろうなぁ・・・
いらっしゃーい、Perlのコーディングで困ってる人のスレです。
541 :
動画直リン :03/05/03 21:10 ID:TBhkUsV+
542 :
途方にくれています :03/05/03 22:51 ID:40KqJ28q
Socketで他のサイトのHTMLを読みにいってます。 cgiファイルに書いてたときは問題なく動いてたのですが 関数をplファイルに移し変えたとたん↓の行が動かなくなりました。 select(SOCKET); $|=1; select(stdout); なんもエラーメッセージ出てないが、ここで処理が中断されてしまう。 なぜ?
Perlの入門書でお勧めありますか?
545 :
542 :03/05/03 23:19 ID:40KqJ28q
おしえてくれよ〜。
>>545 そこで処理が中断されている証拠を見せろ。
予想では君の証言が間違ってる。
恐らくスクリプトが実行すらされていないんだろう。違いますか?
547 :
542 :03/05/03 23:35 ID:40KqJ28q
接続部分コードをぬきだしたもの。
# URL分解
$SrcFileName =~ /
http:\/\/ ([^:\/]*)(:([0-9]+))?(\/.*)?/;
$host = $1;
$port = ($3 ne "") ? $3 : 80;
$path = ($4 ne "") ? $4 : "/";
# 接続先情報構築
$addr = (gethostbyname($host));
$name = sockaddr_in($port,inet_aton($host));
# 接続
print "0<br>";
socket(S, PF_INET, SOCK_STREAM, 0);
print "1<br>";
connect(S, $name);
print "2<br>";
binmode(S);
print "3<br>";
select(S);
print "4<br>";
$| = 1;
print "5<br>";
select(stdout);
print "6<br>";
実行すると"3"までプリントされる。
サーバのerror.logには
DBD::mysql::st execute failed:
が出てるけど関係ないよなぁ〜?
548 :
542 :03/05/04 00:12 ID:???
あー、もしかしてプリントされない理由はselectしてるから?
な?全部貼ればわかりやすいんだから、適当に省略しないこと
550 :
nobodyさん :03/05/04 00:23 ID:GUaqk5wH
あるAサーバに置いてあるサイトから SSIコマンドでCGI/SSIが動く他サーバにあるCGIを動かせて処理結果を Aサーバのサイトに表示させたいんですがどうすればよいでしょうか? exec cgiでフルパスを指定したんですが間違いですか? 他サーバにはちゃんとcontent-typeヘッダの出力はしてます。 同じサーバにおいたらちゃんと実行できたのでプログラムの処理自体はまちがってないはずなんですが
552 :
542 :03/05/04 00:34 ID:???
>>548 selectも関係ないよな〜??
>>549 まだ何も解決してないyo!
たとえば、
「Perl サブルーチン集」
ttp://www.antun.net/tips/cgi/perl.html ここにあるget_homepageをcgiファイル上にコピペして
(すこしバグ修正して)動くようにする。
で、get_homepageを別のplファイルにカット&ペースト。
するとアラ不思議。
select(SOCKET); $|=1; select(stdout);から先が動かねええぇっ!!
なぜ?
>>550 間違ってるからできないんだろうよ
レンタルカウンターとか考えてみ
SSIで別鯖の呼び出しできたっけ? まぁ、スレ違いなのだが。
>>552 >関数をplファイルに移し変えたとたん
だからどこか間違ってるんだろ。
一部分だけ書いてなぜって聞かれて誰がわかるってんだ。
556 :
542 :03/05/04 00:42 ID:???
>>555 たとえば何が考えられるの?
最初からソース全部アップするのもアレでしょ。
>>556 どこかコーディング間違えてるしかないじゃん
>>550 >exec cgi
できないよ。includeでも使いな。
559 :
542 :03/05/04 00:56 ID:???
>>557 たとえばどういうとこが?
ちなみに
select(SOCKET); $|=1; select(stdout);
のあたりはWebページ読み込みの紋切り型の処理の一部のようだから
判る人にはわかるにちがいないと思ったんだよ〜。
もしかしたらpl化するときのFAQ的なことなんじゃないだろうかと思ったので
バグがどうとか言うより、plではselectがうまく動作しないとかいうことがあるのかな、とか
そんな話が聞きたかった。
>>559 >バグがどうとか言うより、plではselectがうまく動作しないとかいうことがあるのかな
そんなことはない。
どっちにしても全ソース晒さなければ答えようがない。
あ、俺思いついちゃった。 .plがCGIとして実行されていないのでは? どうせsub get_homepageに渡す引数は$ENVから取ってるんでしょ? 空っぽだったりしてね。
ぐはっ。違うわ。空っぽだったら途中でreturnされるな。>542が変な改造してない限り。
いや、待てよ。
>>547 を見る限り変な改造してそうだ。
print "0<br>";
の前に
print "$SrcFileName<br>";
print "$host<br>";
print "$port<br>";
print "$addr<br>";
print "$name<br>";
を付け足して.cgi,.pl両方の結果を晒してみろ。
564 :
542 :03/05/04 01:51 ID:???
565 :
542 :03/05/04 01:53 ID:???
cgiソース。
#! /usr/local/bin/perl
require "test2.pl";
use Socket;
{
# HTMLヘッダ
print "Content-type: text/html\n\n";
print '<html><head>'.
'<meta http-equiv="content-type" content="text/html;charset=x-sjis">'.
'<title>$strProject</title>'.
'</head><body>';
if ( 1 )
{
# cgi版
my $html= get_homepage('
http://www.geocities.co.jp/AnimeComic-Tone/4606/index.html ');
print "$html<br>";
}
else
{
# pl版
my $html= &test2'get_homepage('
http://www.geocities.co.jp/AnimeComic-Tone/4606/index.html ');
print "$html<br>";
}
# HTMLフッタ
print '</body></html>';
exit;
}
#この後ろにget_homepageが来る
#ただし、return値は $homepage{"body"} にしてある
566 :
542 :03/05/04 01:55 ID:???
plファイル。(test2.pl) package test2; use Socket; $system_agent = 'unknown'; sub get_homepage { # get_homepage # ただし、return値は $homepage{"body"} にしてある } 1;
>>565 もーめんどくせーから固めてどっかにうpしろ。
>>542 当然のこと聞くけど、CGIじゃなくてコマンドとして実行したよね?
569 :
250 :03/05/04 05:40 ID:???
多分、拡張子をplに変えただけで動かないので、あるのならば、cgiで自分のファイル名 を指定してるところを書き変えてないとかしょーも無いところでないの? おおよそ、解ってないんであればソースを全部アプロダなりに上げるぐらいするべきでは? スレ汚れすぎてみる気もせんわい・・・
関数をplファイルにしてrequireしたら動かないって言うんじゃ コーディングミスしかないわな
あるサンプルスクリプトを見て疑問に思ったことがあるので質問します。 代入された値が数字でないものを インクリメントするというのはどういうことなのでしょうか?
あ、
>>571 は俺の読み間違いだったみたいです。スミマセン
574 :
nobodyさん :03/05/04 21:17 ID:SY2E/p10
use strict; use Socket; my $host = 'live2.2ch.net'; my $port = 80; my $path = '/news/subback.html'; 〜省略〜 print SOCKET "GET $path HTTP/1.0\r\n"; print SOCKET "\r\n"; while (<SOCKET>){ m/^\r\n$/ and last; } print "Content-type: text/html\n\n"; while (<SOCKET>){ print ($_); } socketでニュー速のsubback.htmlを取得したいのですが, 変なページに飛ばされてしまいます. イラク情勢のsubback.htmlは問題なく取得できるのですが・・ どうやったらニュー速のsubback.htmlを取得できるんでしょうか?
ブラウザで見る時は、 GET /news/subback.html HTTP/1.1 Host: live2.2ch.net を出してるみたいだね
576 :
nobodyさん :03/05/04 21:33 ID:SY2E/p10
>>575 print SOCKET "GET $path HTTP/1.1\r\n";
print SOCKET "Host: live2.2ch.net\r\n";
print SOCKET "\r\n";
こんなふうにしたらできるようになりました.どうもありがとうございました.
GETでファイルを一つずつ取ってくるのではなく、 複数同時にやって処理を高速化したいと考えています。 forkを使って作ってみたのですが、プロセスの終了を待たずに forkを繰り返すスクリプトでは、どうしても途中でエラーになってしまいます。 (win2kでActivePerlを使用) forkを使う何かうまい回避方法か、 forkを使わないなるべく簡単な方法はありませんか?
>>577 forkのことは全然知らないんだけど、
孫プロセスを作って子プロセスを殺す。
っていうのはどうですか?
殺し方そのものが判らないですが、 子プロセスのプロセスIDを知ってるのが子プロセスだけなので、 自殺してもらうしかないような気がします。 っていうか、exitはさせてます。でもゴーストが溜まります。
forkの親プロセス側の戻り値は子プロセスのIDだろ? Windows2000だと違うのか?
582 :
bloom :03/05/04 23:10 ID:c6ZqX6LO
583 :
nobodyさん :03/05/04 23:15 ID:digHu/wF
ドキュメントは読んだ? どのバージョンか知らんが、Windows版ActivePerlのforkは いくつか注意点あるぞ。
子プロセス:孫プロセスを生成して終了。 孫プロセス:やりたい処理(GETでファイルをとってくる)。 親プロセス:子プロセスをwait待ちのあと、子をkill。 孫は自分の親を失ったときから孤児になり、あとは孤児院(ていうかOS)が面倒をみてくれる。 と思う。わからんけど。
>>581 あ、そうですね。なんか逆に思ってた。
unless ($pid = fork()) {子}
という書き方をしたからか。
>>585 forkを二段にするのは、やってみれとどこかに書いてあったので
試してみましたが、結果は同じでした。
そらそうだろうなあ、とその時は納得したのですが、
OSが孫の面倒を見てくれるという背景があるとは知りませんでした。
かなり処理系に依存しそうな話なので、うちでは無理なのかもしれません。
という感じで fork に頼るのは半ば諦めているのですが、
fork 以外の方法もお願いします。
system() で別のperlを呼んじゃうのもアリかな、と考えてますが。
>>586 system()は確かに別プロセスが立ち上がるが、それが終わるまでwaitする。
従って、今回の目的には使えない。
そうなんですよね。呼ばれた側で終わったフリとか できないかな、と思ったんですが。 そうすると、本当に例えば10のソケットを作って、 順番に様子を見ていく、みたいな処理を書かないといけないのかな。 print SOCKET だけしといて、 <SOCKET> は後回しにして、whileは使わずにEOFを調べる、みたいな。
589 :
nobodyさん :03/05/05 05:19 ID:LXl5aCv3
質問です htmlで作ったForm(input,textarea,select,radio,submitとか)のデータを 受け取ったり逆にデータ手渡す方法orガイドしてるHPとかないですか? JavaScriptでは作った事有るんですがやっぱりCGIだとかなり便利だし、 何か知ってる方いらっしゃられたら些細な事でも教えて下さい、、
いらっしゃーい、Perlのコーディングで困ってる人のスレです。
592 :
初心者です :03/05/05 10:25 ID:MabQ6h0K
教えて頂きたいのですが、
自分が幾つか持っているHPの日記に一度に書き込みをしたいのです。
それでperlで書いてみたんですけど、
foreach $bbslist (@bbs){
print "Location: $bbslist\n\n";
}
@bbsの中身は
http:// 〜から記述した内容がget形式で渡されています。
で、このソースを実行すると1つめの日記に書き込みをした時点で、
処理が終わってしまい、次の日記を書きに行ってくれません。
Locationは一度実行すると処理を終えてしまうようなことを
どこかで見かけた気がしますが、それなら、どのように書けばいいのでしょうか?
どなたか教えてください。
>592 荒らしスクリプトっぽいからダメ。
594 :
初心者です :03/05/05 10:38 ID:MabQ6h0K
>>593 ああ、そうなるのですか・・・
言われてみればそうですね。
変なこと尋ねて申し訳ありませんでした。
LWP これ以上は言わん。
596 :
bloom :03/05/05 11:10 ID:lHdchtO/
言わなくていいから書け
すみません超初心者です。
perlをwinにインストールしようと思い、以下のサイトに行きました。
http://www.activestate.com/ 英語は全く読めないのですが、勘で進みました。
するとダウンロードの所に2種類あるではありませんか。
ActivePerl 5.8.0 build 806
Windows MSI 11.5MB
Windows AS package 11.4MB
意味が分かりません。
MSIと、ASは、なにが違うのでしょうか?
よろしくお願いします。
人に聞いてないのに聞いていると書かれた場合はどうすれば良いのでしょうか? 自分はスキルがあるのに実力が発揮しにくいです。
>>598 ここ、コーディングのスレなんだけど・・・
まぁ、MSIのほうダウンロードしといたらええよ。
で、ダブルクリックしたらインストール始まる。
ただし使ってるWindowsの種類によってはMicrosoftのサイトから
Windows Installerのファイルを落としておかないとインストールできない。
このへんのことは検索したらwindowsマシンへのActivePerlのインストール
方法を解説してるサイト見つかると思うので、あとは自力でがんばって
601 :
598 :03/05/05 11:56 ID:???
602 :
nobodyさん :03/05/05 13:11 ID:eAEbJzW0
>>591 さん
ありがとうございます^^
検索下手には嬉しいHit結果です、お手数かけました〜、
603 :
_ :03/05/05 13:25 ID:???
604 :
nobodyさん :03/05/05 14:35 ID:eAEbJzW0
割算した小数点の第4位(1/1000の位)から後ろを切り捨てたいんですけど 文字列に直すと整数の桁数が不安定で1/100から切れたり1/10から切れたりします、 どうすればいいでしょうか?、
int($a*1000)/1000
gifカウンタを制作中なんで 他サーバで処理させたカウントを CGIの動かないサーバに置いてあるページ内にgifをつかって表示させるには どうしたらいいでしょうか
>>606 動かないサーバのページからカウンタのリンクを貼ればいいでしょ。
レンタルカウンタと同じ。
608 :
_ :03/05/05 15:06 ID:???
609 :
bloom :03/05/05 15:10 ID:lHdchtO/
610 :
bloom :03/05/05 15:10 ID:lHdchtO/
611 :
nobodyさん :03/05/05 15:47 ID:eAEbJzW0
>>605 さん
$aはsortのみたいに書き変えないでいい物かと思って失敗しましたけど
違うんですね、、
それにperlにも整数に直すint型が有るんですねー。(C++かじった事有)
これで小数点に悩まされずに済みます、ありがとうございました〜
でも負数に対しては切り捨てではなく切り上げになる罠
そもそもperlに型は無い 無型流自由殺法
物凄く初歩的な質問でごめんなさい。 これまで1か0のフラグとして使っていた変数$aの真偽を判定するのに if($a == 1) と記述していたのですが、もしかして if($a) だけでも良いのでしょうか。良いのならコードがかなりすっきりするんですが…。 良い、悪いだけでも結構ですので、どなたか教えていただけませんでしょうか。
$a and hoge; か if ($a & 1){ hoge; } が正解でつ。
>615 真偽判定だけならそれでもかまわない。 ないとは思うが、 if(1) # 真 if(0) # 偽 if('') # 偽 if('0') # 偽 if('00') # 真 こういうワナもあるので注意。
$aが文字列で、ヌルでなければ、という意味で if ($a) とやると、$a = "0" の罠にはまる。
ほぼうまくいくけど、ファイル名が "0" だった時だけ 動かないスクリプトとか、普通に出回ってそうだ
while ($file = <*>) { } こんな感じの。うちではちゃんと動くけど。
622 :
615 :03/05/05 19:38 ID:???
皆様、参考になる御意見ありがとうございました。 トラップに陥らないよう注意して、書き直していこうと思います。
いらっしゃーい、Perlのコーディングで困ってる人のスレです。 【投稿する際の注意】 質問するときは内容をよく吟味してから投稿してください。 1:自分はこう言う事がしたい。 2:それでこんな風にやってみたが・・・ 3:それだとこんなエラーが出て上手く行かなかった。 最低でも1と3が無いと誰も答えられないよ。 良い回答は良い質問から。一緒に勉強しましょう。
606です 607さんのいったカウンタのリンクを貼るってどういうことですか? レンタルカウンタ色々みたけど、どれがどれなのか。。。
該当するようなスレが思いつかなかったので、ここに質問。 プログラム覚えるのと、英語覚えるのどっちが難しいですか? 両方出来る人が居たら、教えてくだしい
いらっしゃーい、Perlのコーディングで困ってる人のスレです。
ファイルハンドルからファイル名を取得する関数はありますか?
630 :
nobodyさん :03/05/06 18:03 ID:39bU8fpC
やばいっす Perl←の読み方教えてぇーペリ?ピール?
631 :
nobodyさん :03/05/06 18:04 ID:39bU8fpC
パールだってよ!チクショー遅かった・・・
ぺるる でつ。
ファイルハンドルは、そもそもファイル名なんか知らないのでは。(…多分)
$value =~ /[\w\W]/g; と $value =~ /./g; って、同じと考えていい? なんか違いある?
637 :
nobodyさん :03/05/06 23:25 ID:Bmqf5moK
正規表現に関する質問です。 これ↓を SELECT * FROM MEMBER WHERE {NAME='[personName]' AND }AGE=[age]{ AND TEL='[tel]'} ORDER BY AGE; こういう風に SELECT * FROM MEMBER WHERE AGE=[age]{ AND TEL='[tel]'} ORDER BY AGE; 変換したいのですが下記ではだめなのでしょうか。 /\{.*?\[personName\].*?\}//
>>637 正規表現スレで聞いたほうが早いと思うが……
639 :
nobodyさん :03/05/06 23:58 ID:5MrMxTMp
フォームメール作ってるんですが、
送信元がメールソフトででませんねぇ。
ロリポなんだが、
[email protected] ってなる。
sendmailするとanonymousになっちまうのか?
ちなみに、
print MAIL "From: $address\n";
とやりました。
>>639 $mailprog = '/usr/lib/sendmail';
open(MAIL,"| $mailprog -t") || &error("メール送信に失敗しました");
print MAIL "To: $mailto\n";
print MAIL "From: $email\n";
print MAIL "MIME-Version: 1.0\n";
print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n";
print MAIL "Content-Transfer-Encoding: 7bit\n";
print MAIL "X-Mailer:r\n\n";
close(MAIL);
スカラ変数とスカラ電磁波はなんか関係あるのかなー
>>637 ストレートに s/{NAME='\[personName\]' AND }//でいいじゃん・・・
テキストから読み込み,変数に格納したエスケープシーケンスが ファイル出力時に機能せず,エスケープシーケンスのまま 出力されます.環境はWin2000sp3,ActivePerl v5.6.1です. #input.txt(sjis) \t\t\n\n #test.pl(sjis) open(IN, "input.txt");$command=<IN>;close(IN); open(OUT, "> output.txt");print(OUT "$command");close(OUT); test.plを実行すると,output.txtには見事に「\t\t\n\n」と出力されます. 願わくばタブタブ改行改行と出力されて幸せになりたいです. おいらは何か勘違いしているでしょうか?
open(IN, "input.txt");$command=<IN>;close(IN); $command =~ s/\\t/タブ/g; $command =~ s/\\n/改行/g; open(OUT, "> output.txt");print(OUT "$command");close(OUT); open(IN, "input.txt");$command=<IN>;close(IN); $command =~ s/\\t/\t/g; $command =~ s/\\n/\n/g; open(OUT, "> output.txt");print(OUT "$command");close(OUT);
645 :
へるぷみー :03/05/07 16:32 ID:IktPSMvp
sendmailを使用してメールを送信していますが、
> Microsoft-Outlook-Express-Macintosh-Edition/5.02.2106
> Microsoft-Outlook-Express-Macintosh-Edition/5.0.6
のメーラーを使用している方から文字化けの報告があります。
件名は問題なく日本語でも文字化けしていないのですが、本文がぐちゃぐちゃです。
http://www.c-5.ne.jp/~itsuki/ の"Code Check"を使用して、
機種依存文字のチェックもしましたが、問題ありませんでした。
Microsoft-Outlook-Express-Macintosh-Editionに問題があるのかもしれませんが、
以下にソースを書きますのでプログラムに問題があれば教えて下さい。
解決方法をご存じの方、是非宜しくお願い致します。
646 :
へるぷみー :03/05/07 16:33 ID:IktPSMvp
$MailAdr = '
[email protected] ';
$send_subject = "サブジェクト";
$send_text = <<__EOF__;
日本語の本文
__EOF__
&jcode'convert(\$send_text,'jis');
&jcode'convert(\$send_subject,'jis');
$Subject = &mimeencode($send_subject);
$SendMessage .= "To: <$MailAdr>" . "\r\n";
$SendMessage .= "From: <from\@hogehoge.com>" . "\r\n";
$SendMessage .= "Subject: $Subject" . "\r\n";
$SendMessage .= "MIME-Version: 1.0" . "\r\n";
$SendMessage .= "Content-Type: text/plain; charset=ISO-2022-JP" . "\r\n";
$SendMessage .= "Content-Transfer-Encoding: 7bit" . "\r\n";
$SendMessage .= "\r\n";
$SendMessage .= $send_text;
open MAIL,"|/usr/lib/sendmail -t -i -f from\@hogehoge.com";
print MAIL $SendMessage;
close MAIL;
&mimeencode(メールヘッダ全部); か メール本文 =~ s/\r//g; でどうよ。 ・・・・・自信なし。
\nがになってしまうんですが、どうすればいいですか?
650 :
648 :03/05/07 22:30 ID:???
支障はありませんか?っていうかもしかして\n=ですか?
651 :
639 :03/05/07 23:24 ID:BGSRMxiA
えと、とりあえず僕のはっときます。 open(MAIL, "| $sendmail -t"); print MAIL "TO: $email\n"; print MAIL "Subject: $mailsubject\n"; print MAIL "Content-Type: text/plain;\n\n"; print MAIL "名前: $mailname\n"; print MAIL "From: $mail\n"; print MAIL "$mailbody\n"; print MAIL "$addr\n$age_a{\"$age\"}\n"; close(MAIL); これで、送信元がちゃんとでるはずなんですけど・・・ でませんね
>>650 んなこたぁない。
\n=・だと、本気で思ったのなら、ちょっと笑ってしまう・・・(w
どういう環境なのかさっぱり書いてないな・・・。
質問の仕方悪い。
ソースの文字コードは?
ファイルに出力して・になるの?
デフォルト標準出力で・になるの?
もっと、詳しく書いてくれないと分からない。
>>651 -t しか指定しないならfromは出ないよ。
-t ではfromは読み込まれない。
654 :
639 :03/05/08 01:03 ID:YKg4v/HN
>>653 そうなんですか。本にかいていた通りにやったんですが、、、、
おまけに、本には、メーラーの画像で送信者でてるし。
-tとか詳しく教えてくれませんか?
>>653 漏れも-t しか指定してないが、fromは出るぞ。
漏れのを貼っておく。
$mailhead = <<EOF;
Received: This mail is sent from Democratic People's Republic of Korea.
EOF
$mailhead .= "From: $namefrom <$mailfrom>\n";
$mailhead .= "To: $nameto <$mailto>\n";
$mailhead .= "Subject: $subject\n";
$mailhead .= "Date: $date\n";
$mailhead .= "MIME-Version: 1.0\n";
$mailhead .= "Content-Type: text/plain; charset=\"iso-2022-jp\"\n";
$mailhead .= "Content-Transfer-Encoding: 7bit\n";
$mailhead .= "X-Priority: $priority\n";
$mailhead .= "X-Mailer:Microsoft Outlook Express 7.00.0000.0300\n";
if (-x $sendmail){
unless (open(OUT, "| $sendmail -t")){
&error('送信エラー','メールの送信に失敗しました。');
}
unless (print OUT &mimeencode($mailhead)){
&error('送信エラー','メールの送信に失敗しました。');
}
unless (print OUT $mailbody){
&error('送信エラー','メールの送信に失敗しました。');
}
close(OUT);
}
656 :
nobodyさん :03/05/08 05:21 ID:0p+XQofH
頭悪い質問ですみませんが、根本解決が自分だけでできなかっ たため、質問させてください。 プログラムの設定ファイル等の使いまわしをきかせるため、 各ファイル構成を下記のようにディレクトリ分けしました。 public_html |- cgi(プログラム) |- template(テンプレート) |- common(設定ファイル等) |- image(画像) common内のconfig.plには、 $template_dir = '/public_html/template'; $image_dir = '/public_html/image'; と各種ディレクトリ情報が格納されており、 これの設定ファイルを全プログラム内でrequireして、各種ディレク トリ名等が変更されても、config.pl内の記述を変更するだけで済ま せられるようにしております。 しかしこの場合、commonディレクトリ名が変更された時だけ、 全プログラムのrequire記述を変更しなければなりません。 なにかよい解決方法があれば、どうかご教授いただけないでしょ うか。 頭悪い質問ですみませんが、どうか宜しくお願いいたします。
>>656 普通、そういう初期設定とかは、mainパッケージ内に記載するか、
mainパッケージと同じディレクトリに置いておくような物だと思うが・・・
こんなことしたら、ぜんぜん意味なくなるだろうが・・・
require専用の設定ファイルを作って、それをmainパッケージと同じディレクトリに置いて、
すべてのファイルで、そのrequire専用設定ファイルを呼び出すってのはどう?
>>656 なんかなぁ
perlの話しか?
さすがにライブラリのファイル/パス名はハードコーディングするだろ。
659 :
648 :03/05/08 07:32 ID:???
>>652 言葉足らずですみません
foreach(@deeta){
$E = $_; $C = $_;
$C =~ s/([0-9]{9,}) (.*)/$1/i;
if ($C < $jikan) {last;}
$E =~ s/([0-9]{9,}) (.*)/$1<>$SABA<>$ITA<>$2<><>\n/i;
$honbun.= $E;
}
open(FILE, ">come1.dat") or die;
print FILE $honbun;
close(FILE);
としてから、come1.datをメモ帳で開くと\nがになってダラダラと一文が…
ソースの文字コードは SHIFT-JIS です。
>>659 それどこで実行してるんだ?\nがLFになってるから認識できないんだろう。
メモ帳が認識する改行コードはCRLFだったはず。
661 :
648 :03/05/08 07:51 ID:???
XREA上です。新しい言葉"LF CRLF"を見つけたのでググッて勉強します…
>>661 Windows上で実行すると\nはCRLF(0x0D 0x0A)になる。
Mac上で実行すると\nはCR(0x0D)になる(の?Mac持ってないから知らん)
UNIX系とLinuxはLF(0x0A)になる。
http://www.xrea.com/?action=faq ---
●どのようなサーバー?どんな環境?
最新LinuxにApache、qmail、ProFTPDをアレンジした仕様になっています。
---
改行を表すエスケープシーケンス"\n"は
Linux環境でLF(0x0A)として出力されるわけです。
Windows標準の(メモ帳で開ける)改行コードはCR+LF(0x0D+0x0A)なので、
それ相応の書き方をしなければなりません。
書き方は検索してけれ。
バイナリモードでやれ。
しつもそです。 CGIで、csvファイルをzip圧縮したものを吐き出したいと思ってます。 #! /usr/bin/perl print "Content-type: application/x-csv\n"; print "Content-Disposition: inline; filename=ahya.csv\n\n"; print "hoge,hoge\n"; exit; でcsvの吐き出しはできたのですが、 これをzip圧縮して吐き出すにはどうすればいいでしょうか?
667 :
665 :03/05/08 11:33 ID:???
>>666 ありがとうございます。
zipファイルを圧縮するのはsystem関数でもできるんですが、
zipファイルをディスク上に作っちゃいますよね?
それをさせないで、直でブラウザに吐き出すのって無理でしょうか?
Archive-Zipも一度ディスクに作るようなので。。
>>656 環境がわからんが、シンボリックにしる>common -> 変更後のディレクトリ
>>659 メモ帳で開くからややこしい。
改行コードを認識するアプリで開けるれ。
質問です。 行末の'(なんとか)'というのを削除したいです。 s/(.+?)$//; だとだめでした。 s/\Q(\E.+?\Q)\E$//; もだめでした。 s/(.+)$//; だとまっちするようですが、当然、行中のものにマッチしちゃうので 困ります。どうしたらいいでしょうか。
>>669 括弧も含めたいなら、\( \) みたいにエスケープしないとだめだよ。
実は全角が通らない
>>669 です、テストデータも書いておきます。
木立(こだち)のなかに(夏目弱石)
山の上の芋粥(いもがゆ)(芥川蛇の介)
>669 行末と言っているが、改行を削除し忘れてたりしてないか?
chop; $line = $_; $line =~ s/(.+)$//; print "$line\n";
>>669 CR(0x0d)が残ってたりして。
ローカルではちゃんと動いてる?
>>672 では、なぜ、s/(.+)$//;はまっちするんでしょうか。
>>674 chompやchopもやりましたし、文字コードもsjisとeucで
試しましたが、だめです。
>>675 >>673 に挙げたテストデータでやってみれば分かりますが、
これでは、マッチしません。それに、うまくいったとしても
(.+)では、最初の括弧からマッチしてしまいます。
>>675 すべて削除してやってます。
「ローカル」って?CGIじゃないです。
while(<DATA>){ s/(.*)(.*?)\s.?$/$1/; print; } __DATA__ 木立(こだち)のなかに(夏目弱石) 山の上の芋粥(いもがゆ)(芥川蛇の介)
>>678 私の環境ではsjisにしても、eucにしてもだめです。
$ perl test1.pl
木立(こだち)のなかに(夏目弱石)
山の上の芋粥(いもがゆ)(芥川蛇の介)
$ perl test1.pl |nkf -s
木立(こだち)のなかに(夏目弱石)
山の上の芋粥(いもがゆ)(芥川蛇の介)
なぜでしょうか。
>>669 ですが、ム板の正規表現スレ行ってきます。
皆さん、ご助言ありがとうございました。
>>681 >>675 では、
木立
山の上の芋粥
となるでしょう。
これがあなたの期待なのですね。求められているのは、
木立(こだち)のなかに
山の上の芋粥(いもがゆ)
ですよ。
>>680 もう逝っちゃったかな?
jcode::tr(\$_, '()', '()');
s/\([^\(\)]+\)\n$/\n/;
jcode::tr(\$_, '()', '()');
print;
>>679 私の環境ではダメでしたか。
っていうか、その「私の環境」を書けよ・・・
最低、OSは何で、Perlのバージョンはいくつくらいは書けるだろ・・・
俺は
>>678 のソースで正常に動いた。
>>679 の環境がおかしいんじゃねーのか?
>>684 ありがとうです。全角括弧を半角括弧に変えるのならエディタでもできる
のですが、全部Perlでやりたいと。
>>685 私の環境は、cygwin+perl,v5.6.1 built for cygwin-multiです。
>>678 のソースは、動くことは動きますが何度やっても求めるものが
出てきません。
正規表現スレで鍛えて答えが判ったら教えてね
最近画像UPろだを設置したんですが Berryという画像巡回のやつばかりで面白くないんで Berryからのアクセスを弾く方法を探しています なんかいい方法ないでしょうか? imgboard.cgi使っています
いらっしゃーい、Perlのコーディングで困ってる人のスレです。 1:自分はこう言う事がしたい。 2:それでこんな風にやってみたが・・・ 3:それだとこんなエラーが出て上手く行かなかった。 最低でも1と3が無いと誰も答えられないよ。 良い回答は良い質問から。一緒に勉強しましょう。
>>689 よくわかんないけど・・
Berryからアクセスされてるって判ってるなら弾くのは簡単なんでは?
Berryは正直にUser-Agentを名乗ってたような こちとら負荷かけないようにまったりアクセスしてるんだが、 それでも禁止するならしやがれ、というスタンスですな
弾いた次の日からアクセス0になるのを分かっていてするのですか?
その次の日に偽UserAgentになって元のアクセス数に戻る罠
695 :
nobodyさん :03/05/08 21:41 ID:BuFtD7dz
./DAT の中にあるファイル数を調べるにはどうしたらいいんですか?
>>695 それはディレクトリ?
いろいろ方法があるけど、glob()あたりが簡単でいいんでない?
Berryも数がたまるとウザイもんだよ
>>695 if(opendir(DIR,"./DAT"))
$dir = @dir = <DIR>;
closedir(DIR);
}else{
print("opendir error");
}
@dirにはファイルが配列で
$dirにはその個数が入ると思うけど・・・
>>695 perlにもgrobあったのか 今知ったわ
こっちのほうがよさそうね
$dir = @dir = glob("./DAT/*");
二つ目の695は696の間違えですた スマソ
700 :
698 :03/05/08 22:56 ID:???
ちなみにopendirだと .と..が入るから $dirから2引いた数がファイル数ね。
701 :
nobodyさん :03/05/08 23:03 ID:w+g/ULrK
初心者なので質問させて下さい。 前から思ってたのですが、 「Perl」と「URL」 それぞれ何と読むのが正確ですか?
ぺるる と うるる
705 :
nobodyさん :03/05/08 23:29 ID:TaEzP3Hc
ちょっと質問です。 perlのソートを使おうとしているんですが、微妙に意味が分からない事になりました。 sort {$a <=> $b} @aaa; 数字を並べる時、この書きかたが一般的だと思うのですが、 $aと$bってなんでしょう。 「イツのまに、なにが代入されたのでしょうか?」←これが質問1。 で、実際のソートは、返ってくる数字「-1」「0」「1」の三種類によってsortが返すリストの順番だと思ったのですが、 「それは正解ですか?」←質問2 もし、正解ならば「-1」「0」「1」の三種類が発生する形式ならば可能ですか? それとも、必ず「$a」「$b」を使うような形式にする必要がありますか?←質問3 詰まる所、$aと$bの中身がよく分からないので、sort自体がよく分からない物になってしまってます。 m(__)m
707 :
nobodyさん :03/05/09 00:01 ID:FPjkEDjh
テスト
何故$aと$bなのだ、という疑問については、 そうなってるからとしか説明しようないだろうな。 $aと$bは単純に比較する物 本当は関数を別に書いて、そこに登場する
何故$aと$bなのだ、という疑問については、 そうなってるからとしか説明しようないだろうな。 $aと$bは単純に比較する物 本当は関数を別に書いて、そこに登場しる
710 :
706 :03/05/09 00:25 ID:???
>>709 う〜ん。
回答ありがたいのですが、サッパリ分からないです…汗。
>>706 の三つの質問の回答を待つと同時に、もう一つ質問させてもらいます。
とあるサイトで調べた所、
>このサブルーチンはソートすべきリスト中の要素2個を渡され、
>何回も繰り返し呼び出され、完全にソートされるまで繰り返す
と、上記のようにかいてありました。
sort {ルーチン} @リスト;
これは「@リスト」が並び替えて返ってくる値であり、
その順番を決めるのが「ルーチン」の部分だと思っています。
で、上に「ソートすべきリスト中の要素2個を渡され」
と書いてありますが、これが$aと$bだとにらんでいます。
この時、$aと$bの内容を自動ではなく、任意で決めることはできないのでしょうか?
いや、任意で決めたいと思っているのですが、そんな必要はないのかな?
>710 何を言いたいかよくわからんな。 >この時、$aと$bの内容を自動ではなく、任意で決めることはできないのでしょうか? sort {$aaa[$a] <=> $aaa[$b]} (0 .. $#aaa); こういう事か?
>>706 >返ってくる数字「-1」「0」「1」の三種類によってsortが返すリストの順番
詳しく説明してください。
sort{$a<=>$b} @list; の前に$a,$bを使ってるからほかの変数使いたいって事か?
714 :
nobodyさん :03/05/09 00:37 ID:WPk5KKvT
鯖がアメリカなのでlocaltimeで返される値が米国時間です。 で、$ENV{'TZ'}="JST-9"をやると日本時間で計算してくれたので安心してたのですが、 ある日プログラムに“use Time::local”を宣言したら、どうも$ENV{'TZ'}が無効に されてしまうようで、localtimeで返される値がまた米国時間になってしまいました。 プログラム中のそこかしこでTZにJST-9やGMT-9、Japanを指示してもダメです。 これは、こういうものなのでしょうか。それとも鯖ごとの設定によるものなのでしょうか。 なにか対策はありますか? gmtimeにシコシコと9時間分の数字を足すしかないのでしょうか…。
716 :
706 :03/05/09 00:41 ID:???
ええと、みなさんのレス嬉しいのですが、俺の頭が悪すぎてうまく説明できません。 今から、書く事を分かりやすいようキッチリと頭の中で整理して、 ゆっくり書きたいと思いますのでちょっと時間がたってから書きこみ直します。 御迷惑かけてすみません。
それっぽっちテストプログラム書いて試せばいいじゃん
sortってバブルソートを使ってるのですか?
クイックソートでは
721 :
720 :03/05/09 00:48 ID:???
Cのライブラリを使っていたら(Cの)処理系依存だね。
combsortはどう?
723 :
706 :03/05/09 01:04 ID:???
ええと、文書を考えたのですが頭が混乱ぎみでうまく説明できそうにありません。 そこで俺がやりたい事を具体的に書こうと思います。 現在RPGを作ってます。 【@並び替えたリスト = sort {ルーチン} @リスト;】 「リスト」には、戦闘参加メンバーが順番に入ってます。 「並び替えたリスト」は、「リスト」のメンバーを素早さ順にしたいわけです。 ただ、各々の「素早さ」を取得するのが少々めんどうで、素早さが入っている変数名がダイレクトに分からないのです。 ${"メンバーデータ$リスト[0]"}{'素早さ'}; こーゆー感じで書いた場合、メンバー一人分の素早さを取り出す事が出来ます。 「リスト」の中には何人いるか分かりませんが、全て戦闘参加メンバーです。 で、もし五人だった場合、 ${"メンバーデータ$リスト[0]"}{'素早さ'}から${"メンバーデータ$リスト[4]"}{'素早さ'} までの「リスト」(全メンバー)を素早さ順に「並び替えたリスト」にしたいのです。 こんな一見単純そうな事で俺の脳はパニックです。汗 ただ、どう書くのか記述自体を教えてもらうよりも、「$a」と「$b」に何が入るのか教えてくれたほうが嬉しいです。 今後のコトもありますので…。 もし、sort関数を使わないで、自作でループの記述があればそれを教えて下さったら、とてもありがたいです。 多少処理が重くても「$a」と「$b」のような理解出来ない(俺には)変数が登場するより安心できますから…。 考えたあげくにこんな説明ですみません。
724 :
動画直リン :03/05/09 01:10 ID:X5KsRuJ+
>>723 何がやりたいのかいまいちわからないのだが・・・
@member = ('mona','giko','morara');
%speed = (mona=>15,giko=>100,morara=>3,hoge=>50);
@resalt = sort{$speed{$a} <=> $speed{$b}} @member;
foreach $val(@resalt){
print($val."=".$speed{$val}."\n");
}
こんな感じで
morara=3
mona=15
giko=100
が出力されるが・・・
もしもハッシュに入っている分全部なら @memberじゃなくて keys %speed
とかね・・
というか ハッシュ使え・・・ 変数名わからないってなんだ? $speed{ID} $money{ID} とかなら楽だろ?
んー 大幅に変更になると思うが 漏れならこうするっていうのを書いておくよ・・・ %money %hp %speed 用意してまぁ実際には何があるかはしらんが3つだけ gikoのデータは $money{giko},$hp{giko},$speed{giko}に代入 戦闘時のメンバーは @member に格納する 残りは726に書いたとおり @memberじゃなくて keys %hp; にでもすれば すべての要素がソートされる
706氏は、なにがなんでも以下の形式でやりたいのか? @list = ("mona", "giko", "morara"); %menberdata_mona = (... "speed" => 80, ...); %menberdata_giko = (..."speed" => 255, ...); %menberdata_morara = (..."speed" => 50, ...); @list_by_speed = @listを、素早さにしたがってソートして返す処理; #A # 得たいもの→ @list_by_speed = ("giko", "mona", "morara"); Aの処理を知りたい。
726のやり方が一般的じゃないの? というかさ 変数名が増えたり減ったりするのって気持ち悪くない? ある状況では$gikogikoが宣言されてある状況ではそれが$monamonaになったりするの って use strict使ってればそんなのは弾くと思うんだが・・・
731 :
706 :03/05/09 01:58 ID:???
なんかいろんなサイトを回り、そしてみなさんが教えてくれたサイトや記述を見ているウチに、
少しづつ$aと$bが分かってきました。
>>726 さんの記述はとっても分かりやすかったです。
>$speed{$a}
この時$aと$bには、引数のリストの中身が自動で順番に代入されているのですね?
で、ルーチンが何回もループされて全部を比べるまで「-1」「0」「1」をはじき出してると…。
正直、かなりすっきりしました。
しかし、変数名がダイレクトに分からないときはどうしたら良いでしょうか?
@素早さ順リスト = ${"メンバーデータ$リスト[$a]"}{'素早さ'} <=> ${"メンバーデータ$リスト[$b]"}{'素早さ'}}@リスト;
これだと明らかに間違いです。
($aと$bの部分には「@リスト」の値ではなく、数字が入るため)
と言うか、しつこく聞きまくって迷惑かけたのであとは自分で調べたいと思います。
ホントありがとうございました。感謝。
732 :
726 :03/05/09 02:03 ID:???
>731 わからない時はどうするって? だからわかるようにコーディングするだけなんだけどさ・・・ 730が言う様に メンバーが増えるごとにハッシュが増えたりするって言うのは 激しく使いにくいと思うんだが・・・ %menberdata_giko をあえて定義する必要があるのか? あるのなら %menberdata_giko=(name=>$name{giko},speed=>speed{giko},money=>money{giko}); こんな風にすればいいんじゃないの?
733 :
706 :03/05/09 02:05 ID:???
>>731 の記述をかなり書き間違えたので訂正しておきます。
@素早さ順リスト = ${"メンバーデータ$リスト[$a]"}{'素早さ'} <=> ${"メンバーデータ$リスト[$b]"}{'素早さ'}}@リスト;
これは、
@素早さ順リスト = sort{${"メンバーデータ$リスト[$a]"}{'素早さ'} <=> ${"メンバーデータ$リスト[$b]"}{'素早さ'}} @リスト;
こうでした。汗
>>733 結論は出てるみたいだが
キャラごとにハッシュを作るんじゃなくて
要素ごとにハッシュを定義するのが正解
735 :
706 :03/05/09 02:12 ID:???
>>732 そうです、激しく使いにくいです。汗
前回もRPGを作ったんですが、それは1対1の戦闘しかないので超楽でした。
今回は、多数対多数の戦闘をやろうと思って適当に書き始めたのですが、想像以上に複雑になってしまって。汗
適当に考えながら書いてるウチになんとかなるだろ、って軽いノリで始めたのが大失敗でした。。。
ご指摘の通り、全部書きなおすかもしれません…。
なお、たくさんのレスをいただいていますが、現在頭がフル回転でまともに返事返せてなくてすみません。
時間をかけてしっかり考えていきます。
プログラム経験が長くないので明日までパニクってる状態が続くかもしれません。
俺の中でこんな感じに作った経験が全くないので…。
736 :
706 :03/05/09 02:26 ID:???
>>730 >というかさ 変数名が増えたり減ったりするのって気持ち悪くない?
なるほど…。ほとんどperlしかまともにやった事ないのでそうゆう感覚を知らなかったです。
宣言とか全く気にしたコトないし…。汗
勉強になります。
sortを自分の中で納得出来てきたので、そろそろ記述を考えたり書いたりします。
落ちようかと思います。
ホントありがとうございました。たっぷり迷惑かけてすみませんでした。
俺だったら、キャラごとに、無名ハッシュか無名配列つかうな。構造体のかわりに。
俺ならオブジェクト作って管理する。 そうしてる。
739 :
なまら名無し :03/05/09 08:47 ID:D4ewNm9i
ちょっと困ってるんでアドバイス御願いします。ファイルを書き込むcgi をつくってるんですが、エラーは一切でず、ファイルには何も書き込ま れてない状況になってます。datのパーミッションも775、755、666、 644、どれにしても結果は同じです。ロックもはずしてみましたが、 だめです。以下に引用をのせます。 $test = "aho"; open(WRITE,">test.dat") || &error('write_file_open_error'); print WRITE $test; close(WRITE); 入力用のフォームタグ関係も各情報源から調べ、そこのところは問題 ないはずですが。ちなみにサーバー側のエラーログもみましたが、エラ ーは一切でません。cgiも普通に動作し、ただ書き込みが反映されず、 datに何も書き込まれない状況です。
>>739 まずローカルでちゃんと動くかどうか確かめる。
それで動いたらまた質問汁。
741 :
動画直リン :03/05/09 09:10 ID:X5KsRuJ+
ものすごい初心者な質問でごめんなさい。 どうしてハッシュはハッシュっていう名前なんですか?
>>744 全然答えになってないし。
意味的には「切り刻む」というのが一番近い。
レコードに対するインデックスがランダムに並ぶように
内容に対して一意に決まる数、というのが元の意味。
747 :
743 :03/05/09 15:28 ID:???
744さん、745さん、ありがとうです。 えっと、上の説明で考えてみたんですけど、 $変数が いっこの変数 @配列が ちゃんと並べてある変数の集まり(数字ラベルつき) %ハッシュが ぐちょぐちょに並んだ変数の集まり(名前ラベルつき) こんな感じでいいんでしょうか? 変数や配列みたく、日本語の 名前がついてればわかりやすいのになーと思いました。
それは別物。例えばawkの多次元配列。
だから、内部的な実装の話になる訳よ 実際にperlを作るとして、連想配列をどう実現するか。 キーとなる文字列とそれと対になる値を、 発生した順に片端から並べていって、 参照する必要が生じたら端から調べるのかというと、 そんな時間のかかる事はしない。 で、キーをハッシュで数値に変換して、その数値で管理する。 だから、foreachで舐めると登録したのと全然関係ない順番で 出てくるっしょ。 そのバラバラに刻まれ加減が、ハッシュ。
753 :
nobodyさん :03/05/09 17:22 ID:VvqPULTq
あるディレクトリの中にあるいずれかのファイルがいつ更新されたか知るには、どうすればいいんでしょうか?
>>750 ,751
まあ、厨にはどうでもいいだろうが・・・
awkやperl4までの多次元配列は、\034を添え字とするハッシュで
実現されていた。
多次元配列(順番の添え字を持ったリスト)をハッシュと言うか?
ハッシュと言うのは、連想配列を実装するアルゴリズムだ。Cでも
何でも使えるアルゴリズムね。つまり、ハッシュ>連想配列。
分かったか。
らくだ本3版でもハッシュを連想配列と訳して、連想配列を索引から引くと、
「後生だから、ハッシュを参照してください。」だって。まあ、いいさ。
foreach (@AAA) { foreach (@BBB) { 処理; } } とやりたいのですが、$_はどっちのが参照されるんでしょう?
ホームページ、確信犯、姑息・・・ どれも本来の言葉の意味とは違う使われ方をしている。 しかし、どれも間違った使い方でも意味は通じる。 正確な言葉を使うのは大事だが、意味を伝える方がもっと大事。 らくだ本でも連想配列って書いてるなら、それでいいじゃないかと思うけどね。 ハッシュってのがどういうアルゴリズムなのかはちょっと気になるが、スレ違いだな。
>756 my $i = 0; { my $i = 1; { my $i = 2; print $i; } } さーて、表示される数字は、いーくつだ?
760 :
nobodyさん :03/05/09 18:29 ID:2QKJbZwP
>>754 ありがとうございます。
-Mを使うことが分かって、
$datfolder = './DAT';
$date = -M $datfolder;
print "Content-type:text/html\n\n";
print $date;
と、しました。出力結果が
0.787731481481481
と出たのですが、これは何を表してるんでしょうか?
「内容が最後に変更されてからの日数」っていうのはわかるんですが、どれが日で、どれが時間なのかがわかりません。
foreach my $i (@AAA) { foreach my $j (@BBB) { 処理; } } わかりにくかったらこうするといい。
>760 日数だろ。 0.78日。 てか、リンク先の一番上のページの一番下の方まで見たか?
764 :
nobodyさん :03/05/09 18:42 ID:cYWQsRLc
PHPに限った話では無いと思いますが、フォームの使い方で教えて下さい。 フレームを使っていないpage1.phpというページから、送信ボタンで page2.phpと言うフレームで2分割されたページへ飛びます。 page2.phplはupper.phpとlower.phpに分割されています。 <form method ="POST" action=page2.php>と記述していますが、 これですとフレーム内のupper.phpで値を受け取れません。 どうすれば良いでしょう。 page2.phpからupper.phpにまた値を渡すのかな? よろしくお願いします。
>>764 ページへのジャンプとデータの送信先は無関係。
−−−−−− 終了 −−−−−− でよろしい?
>767 よろしい。 では、次の質問どうぞ。 --------------------------------------------------------- いらっしゃーい、Perlのコーディングで困ってる人のスレです。 【投稿する際の注意】 質問するときは内容をよく吟味してから投稿してください。 1:自分はこう言う事がしたい。 2:それでこんな風にやってみたが・・・ 3:それだとこんなエラーが出て上手く行かなかった。 最低でも1と3が無いと誰も答えられないよ。 良い回答は良い質問から。一緒に勉強しましょう。
\nで区切られた値を持つ$kutyuがあるんですがこれを@kutyuにするにはどうすれば・・・ 一行目→要素の一番目 という風にしたいです。
770 :
bloom :03/05/09 19:10 ID:X5KsRuJ+
771 :
_ :03/05/09 19:11 ID:???
>769 split
>>755 Perlの%hogeは連想配列じゃないということ?
775 :
764 :03/05/09 19:31 ID:cYWQsRLc
あ〜〜、すみません。平にスレ違いお許しを。 この際、このままご慈悲深いPerlスレの皆様におすがりします。 >ページへのジャンプとデータの送信先は無関係。 とのことですが、formのaction=のところのアドレスが ジャンプ先=送信先では無いのですか? 何卒よろしくお願い申し上げます。
>>775 アホか?スレ違いって言われてんだろ。氏ねよ。
777 :
760 :03/05/09 19:43 ID:VvqPULTq
>>763 最後まで見ました。
stat関数でしたほうがイイということでしょうか?
$datfolder = './dat';
@fileinfo = stat ($datfolder);
print "Content-type:text/html\n\n";
foreach (@fileinfo) {
print "$_<BR>";
}
こうしたところ、[ 9 ]の最終変更時間の値が0になってしまいます。
フォルダは指定できないんでしょうか?
>>757 あまえ、近藤さんを神様にしようと?
2chは、権威に逆らって真実を求めようとするプロジェクトじゃないのか?
いいえ。 2ちゃんねるは回答者が質問者に答えるのが真のプロジェクトです。 真実を求めるとか、どっちが便利とか、使いやすいとか議論するとろくでもない結果になります。
>>781 1.日本語がまずい。
2.そういう魂胆じゃ、2chの今後が危うい。
(わざわざ厨用に、全部、全角にしてる。)
ゴミン。'2ch'だけ敬意を払って全角にすた。
784 :
783 :03/05/09 21:50 ID:???
×'2ch'だけ敬意を払って全角にすた。 ○'2ch'だけ敬意を払って半角にすた。
「連想配列(associative array)」という言葉が長すぎるってことで「ハッシュ(hash)」と呼ばれるようになったのだとラクダ本にあったきがする。 まぁ語源はともかく、いまやハッシュはハッシュなんだからそれでいいんじゃない?
2万行以上のLOGファイルをgrepするならどの方法が早い&軽いですかね? systemだと重そうだし、単純にwhileで回してifする以外に効率がいい方法ないですか?
788 :
nobodyさん :03/05/09 23:08 ID:akCR/KC1
あのぅ、ディレクトリ内のファイル一覧を取得するというコマンドはないんでしょうか? readdirってのは、どういう働きなんでしょう?
789 :
bloom :03/05/09 23:10 ID:X5KsRuJ+
>>788 コマンドって言うなよ・・・
@dir_value = readdir DIR;
とか
@dir_value = glob("*.*");
readdirぐらいは自分で調べれ
>>790 DIRってのはファイルハンドルね。念のため。
792 :
nobodyさん :03/05/09 23:29 ID:akCR/KC1
|`ω´) ファイルハンドルじゃなくディレクトリハンドル と誰もいないうちに訂正しておこう |Д´)ノ んじゃ
実質的にはファイルハンドルなんだから、ファイルハンドルでOK
795 :
nobodyさん :03/05/10 00:17 ID:hCO3mC8T
10万行ぐらいあるCSVファイルから検索したいんだけど、 一番早く検索できる方法って有りますか? 郵便番号から住所を検索したいんだけど、 やっぱり1行ずつ調べるしかないのかな?
>>795 データベース使え。
って言うか、普通のファイルでも工夫次第で検索早くなると思うけどねぇ〜・・・。
一つのファイルに10万行もあるからいけない。
最初の三桁づつのファイルに分けるとか・・・。
いろいろあるだろ。
797 :
189 :03/05/10 00:44 ID:???
>>787 grepの方が速い。つーかそれくらい自分でベンチしろ。
>>794 Perlじゃファイルハンドルとディレクトリハンドルはまったく別のものだよ。
すいません、質問です。 指定したディレクトリ及び拡張子から該当するファイル名とファイルサイズを取得したいのですが、 ファイル名取得はうまくいくものの、サイズがすべて0になってしまいます。 どこをどう変えたらサイズ取得できるでしょうか?ご指摘お願いします。 ##以下ソース $wdir="C:/hoge"; #対象となるディレクトリ $sita=".txt"; #対象となるファイルの拡張子 opendir(DIR, $wdir); while ($file = readdir(DIR)) { if ($file =~/$sita$/) { ($fsize) = (stat($file))[7]; printf("%s%3dByte\n", $file, $fsize); } } closedir(DIR); ##以上ソース
($fsize) = (stat("$wdir/$file"))[7]; なんじゃ?
>>797 7桁フルに使うと1千万あるな
ファイルが固定ならインデックスを一度作ると
次からは速い
>>800 欲しいのがファイルサイズだけなら、stat より
ファイルテスト演算子 -s をオススメする。
$fsize = -s $file;
>>803 perl知らない人が見たらどういう文法だと思うだろうな
>>801 ありがとうございます。readdir(DIR)した時点でDIRが作業ディレクトリになると勘違いしてました。
>>803 ファイルテスト演算子…こんな便利なものがあったんだ。
やっぱりstat関数より実行効率いいのかな?ググって勉強してきます。
ありがとうございました。
806 :
760 :03/05/10 02:54 ID:UeZ9FyDL
807 :
bloom :03/05/10 03:10 ID:9fodVbL5
808 :
nobodyさん :03/05/10 04:01 ID:ceT3ViFL
HTMLから <input ytpe=text name=par rows=1 size=4>で、4桁の数値を入力して渡します。 パーミッションなので(0775など) それで、CGIで、&ReadParse(*in)で変数に置き換えます$par そして、 chmod $par, a.txt とすると、363とかなっちゃいます。 これは、テキストエリアからは数字はこないので、charとして認識されてるんですかね?
>>808 実際のコード書いてみなよ。
なんかおかしなことやってそう。
>>808 typeがytpeになってるが関係無いよね?
ロジックがあってるならumaskだろうな
データベースの特定のレコードを 別のテーブルに移動させる事って出来ますか? Aテーブルのレコード取得→Bテーブルに同じものを作成→Aテーブルのを削除 今はそうやってるんですけど…。
↑ちなみに、AとBは同じ構造のテーブルです
$C = 0; #デフォルトの確認場所 foreach my $D (@tottano){ if ($D eq $maeno[$C]) { $C++; next; } #両方ともあったら次 $E = 1; $H = 0; foreach my $G (@maeno){ #他の位置にあるかチェック if ($G eq $D) { $E = 0; $C = $H; $C++; last; } #他の位置にあったら$Cをその次へ $H++; } if ($E) { $F.= $D; $F.= "\n"; } } 同じようにソートされた@maenoと@tottanoを比較して、 @tottanoにあって@maenoにない→$Fに追加 @maenoにあって@tottanoにない→何もしない としたいんですが、上のようにすると @maenoにあって@tottanoにない時が一つでもある場合、 $Fに@tottanoの内容が全て入ってしまうんです。 上のはどこがいけないのか、根本的に間違っているのか、教えてください。
816 :
250 :03/05/10 12:45 ID:???
>>815 見にくいソースなので自己流の書き方にしてみたけど、検証きぼん・・・
foreach my $key (@tottano){
foreach my $list (@maeno){
if($key eq $list){
undef $key;
last;
}
}
if(!undef $key){
$F = $key . "\n";
}
}
817 :
nobodyさん :03/05/10 12:48 ID:ceT3ViFL
>>814 octでできたーよ。
ありがと。
あと、パーミッションを$parに変更しました。ってHTMLに出力すると、
unmask?の関係かな、で表示がおかしくなるので、
フォームからは$parmissionで受けて、
$parmission = "$in{'parmission'}";
$ par = oct($parmission);
そして、変更時は
chmod $par, $nameで
表示は$parmission
にしたけど、不具合ないよね?
818 :
250 :03/05/10 12:53 ID:???
>>816 $F .= $key . "\n";
か・・・
>>815 これでどう?
myとか端折ってるから適宜追加してちょ
$key{$_}++ foreach (@maeno);
$key{$_} or $F .= "$_\n" foreach (@tottano);
$F .= $key . "\n"; これが実行されるのは確認できたんですが、"\n"しか追加されないみたいです。
822 :
821 :03/05/10 14:31 ID:???
できるようになったような気がします。 ありがとうございました。
823 :
nobodyさん :03/05/10 15:02 ID:sF6xyzVT
CGIで、ファイル名、内容を読み込んで、HTMLのフォームのテキストエリアに渡すのは不可能でしょうか? やっぱり print使ってCGIから出力するしかないんですかね?
824 :
bloom :03/05/10 15:10 ID:9fodVbL5
826 :
nobodyさん :03/05/10 15:41 ID:sF6xyzVT
>826 PerlのコーディングスレでSSIの事を聞こうとするという事が どういう事かわかってるか?
sendkeyでテンキーの「+」「-」つかうにはどうしたらいいか教えていただけませんか?
やっぱりー?
>>823 >CGIで…略…不可能でしょうか?
>print使ってCGIから出力するしかないんですかね?
全く意味が分からん。
上の文はCGIで出来るのかを聞く文章で、なおかつCGIで処理を行う事を求める文書。
下のはCGIで出来ると自分で肯定している文書で。なおかつCGIで処理を行いたくないと言ってる文章。
取り敢えず出なおしてきなさい。
833 :
nobodyさん :03/05/10 20:20 ID:g2YXJoh/
あのぅ、でなおしました。 CGIのprintで出力しました。 しかし、テキストエリアに、そのCGIのソースをいれると、</textarea>がタグとしてみなされてしまって、 なんかソースファイルがテキストエリアからはみ出るんですが、テキストエリア内のタグを無効化するというのはありませんか?
>833 わかってないようだから教えてやろう。 ス レ 違 い だ 。
835 :
nobodyさん :03/05/10 20:41 ID:g2YXJoh/
>>834 大変申しわけありませんが、どの板でしょうか?
836 :
nobodyさん :03/05/10 21:08 ID:g2YXJoh/
statで33188(パーミッション) 1052566298(最終更新日) を取得したんですが、これを664とかちゃんとした数字、最終更新日を 時間分秒に変えるにはどうしたらいいですか?
837 :
動画直リン :03/05/10 21:10 ID:9fodVbL5
>>833 >テキストエリア内のタグを無効化
そのCGIが無効化処理すればいい。
>>834 がああ言ってるのはperlに関係なくHTMLの問題だからでしょ。
>>836 33188 (10進数) = 1000000110100100 (2進数)
下9bitが110100100(2進数)
3bitずつ拾って8進数にすると、544ってとこか。
最終更新日はUnixタイムスタンプかな。localtime()でどうだ?
手元にリファレンスないから適当なんで、ちゃんと知りたいならリファレンスをどうぞ。
>>833 超板違いで本当は教えたらダメなルールなんだけど、今回限り特別で教えてやろう。(以後ここで質問するなよ)
と、思ったが
>CGIのprintで出力しました。
>しかし、テキストエリアに、そのCGIのソースをいれると
ここが意味分からない。もうちょっとやりたい事と書きたい事を整理して、web製作に行け。
ちなみに、&lt; &gt;これの半角がHTMLに置けるタグとなる。
もう来るなよ。
>835 自分で探せ。 各スレの>1を読めばわかるだろう。 脳足りんじゃなければ。 脳足りんなら、教えても理解できんから素直に諦めろ。 >836 検索しろよ。 8進数に変換した下3桁だ。 やり方くらい自分で調べろ。 最終更新日の方は、秒→時間の変換は普段からやってないか? それと同じ。
841 :
nobodyさん :03/05/10 22:05 ID:g2YXJoh/
>>838 >>840 ありがとうございます。
printf("%o")でできました。
それからsubstrで取り出してやれば無事できました。
ありがとうございました。
>>815 質問とは外れているけど、その書き方でちゃんと動いたとしても、
2重ループと言って強烈に効率が悪いから、悪いやり方、ということになる。
819のようにハッシュを使ってね。
844 :
nobodyさん :03/05/10 23:54 ID:g2YXJoh/
ページを更新するという構文ってないですか?
>>844 Refleshのmetaタグでも吐き出してください
ここは、Perlスレであって、CGIはCGIのスレがあるだろ・・・ なぜ、PerlスレでHTMLの話が出てくるんだ。
1:CGIとはPerlのこと、PerlとはCGIのことだと思っている。 2:PerlはHTMLを扱うためのものだと思っている。 3:学校で自慢するためにサイトに自分で少しでもいじったCGIを置きたかった。 さあ、正解は?
全部
850 :
nobodyさん :03/05/11 00:37 ID:p1iIhNqb
すみません、いわゆる初心者、なんです。
プログラムについて全然分かりません。
それについてのサイトとか
>>2-10 周辺とか見ても
次元が違うみたいなことが書かれてあって困ります。
ただ適当にネットやって楽しんでるくらいの人が
理解するには
どうすればいいのでしょう
ただ適当にネットやって楽しんでるくらいの人が なぜPerlに手を出そうとしてるのか。
852 :
nobodyさん :03/05/11 00:55 ID:p1iIhNqb
えーっと 最初から何も知らないのとあんま変わらないと 思うのですがー いけませんか
ただ適当にネットやって楽しんでるくらいの人が ただ適当にネットやって楽しんでるだけで 理解しようとするのは無謀だということ。 プログラミング初心者用の解説本だっていくらでも出てるんだし、 本気で覚えようとするならいくらでも手段はある。
どちらにせよ、自分から方法を模索する事をしない人間は、 何を教えられても身にはつかない。 「教えてもらおう」と考えている内は、一生覚えられない。
855 :
動画直リン :03/05/11 01:10 ID:D5AlwyCG
まぁなんだ、あれだな。 「perl チュートリアル」でググってみて、そこで勉強してみて、分からないことがあったらまたおいで。
配列をハッシュに変換する最も高速かつ簡潔なコードは? (a,b,c) -> (1 => a,2 => b,3 => c)としたい なお。(a,undef,c)のときは、(1 => a,3 => c)とする よろしく。
858 :
852 :03/05/11 10:58 ID:K/IiEdpM
859 :
435 :03/05/11 11:12 ID:???
>>857 配列で値を持ってるんだからそれをハッシュにする必要性がわからない
>>859 でたでた。
必要性に関しての議論なんてしてないのに、でしゃばってくるやつ。
わからないなら、黙ってれよ。
つーか、それなりに使うロジックだ。
おまえが必要となるケースを経験してねーだけ。プ
ちなみに
% = map{$i++ => $_} @
が定石。
ただし、undefの場合は考慮せず。
861 :
435 :03/05/11 11:42 ID:???
>>860 そんなのが定石だとか思ってるからいつまで経っても上達しないんだよ
定石はハッシュのスライスだろ
>定石はハッシュのスライスだろ
やべ、知障の相手しちまったよw
参考までに、ハッシュのスライス使って、
>>857 の問い解いてみてくれ
863 :
862 :03/05/11 12:21 ID:???
@{1 .. $# + 1} = @; 苦しいけど、こういう手もあるわなw
864 :
435 :03/05/11 12:36 ID:???
865 :
250 :03/05/11 12:44 ID:???
釣りか・・・ for(0 .. $#aya){ $aya{$_} = $aya[$_] if(not undef $aya[$_]); } 素直にforつかってりゃいいんでねーの?
$hash{++$i} = $_ foreach @list; これの方が速度出るんじゃねーの?
867 :
nobodyさん :03/05/11 15:40 ID:IBTMpZAF
readdirでファイルとディレクトリの一覧を得て、@filesという配列に格納したんですが、 これを、「.」「..」,「.*(.htaccessなど)」,ディレクトリ、ファイル という順番であらわしたいんですが、どうしたらいいでしょうか?
869 :
nobodyさん :03/05/11 16:00 ID:IBTMpZAF
>>868 ソートすると、ディレクトリが優先的に上にこないんですよ。
そこが困ってるんですよ・・・
870 :
nobodyさん :03/05/11 16:01 ID:ZMWn/EPc
%ff%ffみたいなかんじの16進表記を読めるようにするには どうすればいいでしょうか?文字コードはShift_JISです。
>869 ファイル用の配列とディレクトリ用の配列を両方作って、それぞれにsort。 その上で、ディレクトリ用配列を先に表示すれば? >870 もうちょっとわかりやすく。 文字のエンコードの事か? だったらgoogleででも検索しる。
>>871 "%ff%ff"みたいな文字列があったとして、
Perlでそれを標準入出力に読めるような形で
出力するにはどうすればいいんでしょうか?
やっぱり判らない
>872 print STDOUT "%ff%ff";
>>873 例えばですね、文字列⇒16進表記、という変換をしてくれるCGIは
Web上にいくつかあります。その逆がやりたいんです。
16進表記と文字コードを指定すると、標準入出力に文字が表示されるような
>875 jcodeで検索。
879 :
435 :03/05/11 16:31 ID:???
jcode は
>>869 @files =
map { $_->[0] }
sort { $b->[1] <=> $a->[1] || $b->[2] <=> $a->[2] || $a->[0] cmp $b->[0] }
map { [ $_, /^\./ ? 1 : 0, -d ? 1 : 0 ] }
readdir DIR;
キーワード:
sort map 三項演算子 ファイルテスト演算子 比較演算子
リファレンス 無名配列 Schwartzian Transform
すげーーー!!!
ちょっと下らない質問なんですが…。 一度使っていらなくなった変数は、 メモリ容量の事を考えて初期化したほうがいいですか? それとも、初期化処理自体が無駄に負荷をかける処理ですか? (視覚的には初期化したほうが「もう使わない」って分かってグット)
一度しか使わない巨大なバッファとかなら 捨てた方がいいかも。 大抵は、消費量が微小か、要らなくならないんじゃないかな。
884 :
nobodyさん :03/05/11 19:02 ID:IBTMpZAF
>>871 #!/usr/bin/perl
opendir DIR, ".";
@files = readdir DIR;
splice(@files,1,1);
close DIR;
#################ソート処理#################
sub hikaku{
my($alen) = Length($a);
my($blen) = Length($b);
if ($alen == $blen){return 0;}
elsif ($alen > $blen) {return 1;}
elsif ($alen < $blen) {return -1;}
}
#@files = sort (@files);
############################################
$f = "<td bgcolor=ffffff><font size=2>";
print "Content-Type: text/html\n\n";
print "<html><head>\n";
print "<title>dir</title></head>\n";
print "<body>\n";
print "<br><br><br><br><br><br> ファイル一覧<br>\n";
print "<br><table cellpadding=1 cellspacing=1 bgcolor=dddddd>\n";
print "<tr>${f}ファイル名</td>${f}リンク</td>${f}拡張子</td>${f}サイズ</td>${f}アクセス権</td>${f}最終更新日</td></tr>\n";
#ファイル名を全て取得するまでループ
foreach (@files){
885 :
続き :03/05/11 19:03 ID:IBTMpZAF
#ファイル情報読み取り @stat = stat $_; #時間の形式を変換 sub time { $ltime = $stat[9]; ($sec,$min,$hour,$mday,$mon,$year,$wdy) = localtime($ltime); @youbi = ("日", "月", "火", "水", "木", "金", "土"); printf("%04d/%02d/%02d($youbi[$wdy]) %02d:%02d:%02d\n", $year + 1900,$mon + 1,$mday,$hour,$min,$sec); } #パーミッションを8進数に変換 $bin = sprintf("%o",$stat[2]); $par = substr($bin,2,4); #パーミッションの桁数調整 if ($par =~ /\d{4}/){$par = substr($par,1,3);} #拡張子を抜き出す $i = index($_,"\."); $index = substr($_,$i++,11);
886 :
続き :03/05/11 19:03 ID:IBTMpZAF
#ディレクトリは特別な設定にする if ($bin =~ /40/){$index = ""; $stat[7] = "<font color=red>DIR</font>";} else{$index = "<font size=2>$index</font>"; } #テーブルに組み込み出力 print "<tr>${f}$_</td>\n"; print "${f}<a href=$_ target=_top>$_</a></td>\n"; print "<td bgcolor=ffffff>$index</td>\n"; print "${f}$stat[7]</td>\n"; print "<td bgcolor=ffffff align=center><font size=2>${par}</td>\n"; print "${f}\n"; &time; print "</td></tr>\n";} print "</table><br>\n"; print "<center><input type=button value=更新 onClick=history.go(0)></center>\n"; ってしたんですけど、これをあまり変えないで、配列2つつくるのは無理そうですね。。
テキストエリアに入力された情報をprintで表示したいのですが、 @pairs = split(/&/,$buf); foreach $pair(@pairs) { ($name,$value) = split(/=/,$pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; $value =~ s/</</g; $value =~ s/>/>/g; $FORM{$name} = $value; } $Msg= $FORM{'MSG'}; print "$Msg"; で表示されないのです。どうすれば表示できるでしょうか?
送られてきた情報は、どうやって $buf に入れてるの? テキストエリアを含んでいるformのあたりはどういうソースにしてるの?
889 :
887 :03/05/11 19:42 ID:???
--HTML側--
<form method="POST" action="./test.cgi">
<div>名前:<input type="text" name="NAME"></div>
<textarea type="text" name="MSG" cols="40" rows="4" wrap="soft"></textarea>
<input type="submit" value="送信">
<input type="reset" value="取消">
--CGI側--
#!/usr/local/bin/perl
local($buf);
#入力データ読み出し
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read (STDIN, $buf, $ENV{'CONTENT_LENGTH'});
} else {
$buf = $ENV{'QUERY_STRING'};
}
以下
>>887 のソースへ
という風になっております。
<アスペルガー症候群(自閉症スペクトラム)←脳の機能的疾患(遺伝が要因)>
http://www3.ocv.ne.jp/~cochome/kaisetsu.htm#chigai http://www.autism.jp/l-02-03-aspe3.htm http://www.geocities.co.jp/Beautycare/5917/as/ ●接し方のルールがわからず無邪気に周囲の人に対して迷惑なことをしてしまうこと
がある。人を傷つけるということには鈍感です。年配の先生に向かって「おばあさん
先生おはようございます」と明るい大声で挨拶する生徒もいる。こういった言動をす
る場合にも彼らには悪意はない。
●小さな声でひとり言を言ったり、考えていることを声に出して言うことがある。
●融通が利かないことも学校生活で問題になる。時間割の変更や突然の教師の欠勤と
いう事態で不安を感じたりかんしゃくをおこしたりする。あまりに規則に厳格なため
に、遅刻した同級生に延々と注意をしたり、修学旅行などで消灯時間をかたくなに守
り、他の生徒の顰蹙をかったりすることがある。
●行動・興味・活動のパターンが貧困で反復常同的なことも自閉症の特徴である。すな
わち、日常の活動の様々な面にわたって柔軟性のないルーティン(決まった手順や日課)
を押しつける傾向、これを慣れ親しんでいる習慣や遊びのパターンだけでなく、たいてい
は新しい活動にも押しつける。そしてルーティンや個人的な環境の細部の変化(家の中の
置物や家具の移動によるなど)に対する抵抗がみられることがある。
●揺れる木の葉を見続ける子どもは興味のレパートリーが狭いとも言え、視覚的な敏感さ
があるといっても良い。
●精神遅滞を伴うものと伴わないもので大きく分かれる。100%果汁のオレンジジュー
スを思い浮かべてください。それにだんだん水を加えて薄めて行くと終いには水にごく近
くなる。一口飲んで「オレンジジュースだ!」とわかるものは自閉症、水に近いけれどな
にかオレンジの味が混じっているのがアスペや高機能・・。その濃度はさまざま。濃いオ
レンジジュースであったとしても早期の療育や周りの対応によって水に近づいていくこと
は可能。しかし間違えてはいけないのはオレンジジュースが一滴でも落ちている場合は
「純粋な水」にはなれないのです。
>>887 $value =~ tr/+/ /;
の行に全角の空白文字が混ざってる。
ヘッダをはいてないけど、省略してるだけ?
print "Content-type: text/html\n\n";
すみません。 ソートの話しなんですが…。 @data_1; @data_2; #両方とも中は数字 こんなのがあったとします。 これをごっちゃまぜにして @data_sort; の中にソートして入れたいのですが、そうすると「@data_1」が持っていた変数なのか、 「@data_2」が持っていた変数なのか、分からなくなってしまいます。 「@data_sort」の中に入れつつも、その値は元々どちらの変数が持っていた値かを分かるようにする方法はないでしょうか?
893 :
435 :03/05/11 20:16 ID:???
ハッシュの配列
895 :
887 :03/05/11 20:30 ID:???
>>891 ヘッダは省略してるだけです。説明不足ですみません。
全角スペースは、CGIのソースには含まれていなかったので、
ここに書き込むときにでも発生したのかもしれません。
textarea以外のinput等に入力されたデータはちゃんと表示されています。
896 :
nobodyさん :03/05/11 20:36 ID:pspablfq
掲示板で記事の修正機能を作りたいのですが、、 記事番号、パスワードが入力するとtextareaやらに表示させる、 ってトコまではできました。 しかしそこからログファイルの配列とファイルの書きこみ操作がよく分かりません。 ログが全部消えてしまったりします。 ログファイルの変更箇所だけを上書き、というはどうやればいいのでしょうか? 分かりにくい文章ですが、宜しくお願いします。
微妙にスレ違いな気がする ログファイルの一行を変えたいならファイルの中身を一行ずつ配列に入れ(もちろんすべて)、 修正したい行が入っている要素だけ書き換える。 あとは配列の中身をファイルに上書き。
898 :
892 :03/05/11 20:55 ID:???
ハッシュですか。 なんとか工夫して頑張ってみます。
899 :
896 :03/05/11 23:22 ID:???
900 :
477 :03/05/11 23:24 ID:???
質問です、 2次の配列を作って表示させてるんですが -------------------------------------- @gyou1 = ( ['photo','pic','scan'], ['ph0001','pic001a','scan001'], ['ph0002','pic001b','scan002a'], 〜56行続く ); @gyou2 = ( ['photo','pic','scan'], ['ph1001','pic101','scan101a'], ['ph1002','pic102','scan101b'], 〜70行ほど続く ); for ($i = 0; $i <= 56;i++){ print "$gyou1[i][1]"; } for ($j = 0; $j <= 56;j++){ print "$gyou2[j][1]"; } -------------------------------------- こんな感じに表示させているんですが、凄まじく重くて・・・、 一片に表示させずa herefみたいなのでページ切り替えさせたいんですけれど 方法がわかりません、 ここのCGIみたく任意の記事番号をハイフンで繋ぐだけで見せてくれる仕組みが ヒントになりそうだけどソース見れないし・・・ なにかないでしょうか? あと、ついでですが、データ内包するよりログファイルから引き出す方が処理早いでしょうか? できれば教えて下さい、
はぁ〜・・・ 今日もCGIの質問が多いなぁ〜・・・(´ー` )
もっとこう、mapとかスライスとか、 微妙な質問カモン
>>900 > ページ切り替えさせたいんですけれど方法がわかりません
やりたい事を実現するには具体的にどんな「情報」が
必要か考えてみれ。まず表示を開始する行番号が
必要だよな? 後は?
> データ内包するよりログファイルから引き出す方が処理早いでしょうか?
実際に試せ。コード書いて調べろ。その方が人に聞くより早い。
904 :
nobodyさん :03/05/12 01:56 ID:722KG0lc
CGI(perl)で指定したページにジャンプさせたいんですけど Locationではうまくいかないんですが他にジャンプさせる 命令語ありますか?
905 :
nobodyさん :03/05/12 01:58 ID:Uc7D0G4o
>>900 CGIであっても、コーディングに関する質問になら答えられる。
でも「CGI特有のアルゴリズム」に関する質問はスレ違い。
909 :
nobodyさん :03/05/12 09:38 ID:K6tDiGbj
ふと疑問に思ったんですが、例えば print ゙aiueokakikukeko\n゙; ってのが複数でてくる場合 変数aに置き換えて$aとするのと サブルーチンaにして&a;とするのではどうかわるのですか?
そのばやいは変数だろ
911 :
908 :03/05/12 12:05 ID:K6tDiGbj
そうなんですか。 サブルーチンだったら展開に時間がかかるってことですか? 複数の処理の場合はサブルーチン、一個の処理の場合は変数ということでしょうか?
変数をひとづつサブルーチンにしてみ。おしゃれだよね
ええとねサブルーチンのね用途はね。 やっぱやめとこ。
>>911 サブルーチンの場合、一回実行するごとにスタックがつまれてメモリを食う。
その分、若干時間も食う。
この場合はどうのこうのと言うより、自分で考えろ。
915 :
nobodyさん :03/05/12 12:25 ID:K6tDiGbj
>>912-
>>914 ありがとうございます。極端な話、すべて変数にしちゃってもいいですかね?
>>914 ためしたんだけどあまりかわらないような…
メモリを食うというのは初めて知りました。大変参考になりました
>>915 駱駝買え、駱駝。
ループの中ではサブルーチン呼び出しはできるだけすんなとか書いてある。
917 :
nobodyさん :03/05/13 00:29 ID:sfojkvp6
>>909 ところで、その文字列を囲んでいる奇妙な文字はなんだ?
919 :
918 :03/05/13 02:34 ID:???
ああ、半角の濁点か。
ほんとだ(^∀^)ゲラゲラ
すみません。 perl/tkをwinでちょっとやってみようと思い、マズは色んなサイト見てみる事にしました。 で、以下のコードをとあるサイトからパクって来ました。 $top = MainWindow->new(); $button = $top->Button( -text => 'EXIT', -command => \&exit ); $button->pack(); MainLoop(); これ、正常に動いたのですがなにがなんだか意味が分かりません。全く分かりません。 リファレンスとか、無名のなんたらを使ってるって事は分かったのですが…。 tkのプログラミングをを専門に解説してるサイトが一向に見つかりません。 リファレンスの説明をしているサイトは見つかったのですが、 「tkの記述を」まるで初心者におしえるかのごとく細かく丁寧に、そして多量に書いているサイトはないでしょうか? クソみたいな質問ごめんなさい。
924 :
921 :03/05/13 02:58 ID:Lt5m0lm7
>>922 すみません…。
本買う前に一通り調べてって言うかちょっとやってみてから決めたいんです。
>>923 そ、そうですか?
まだイロイロ調べてみます。汗
でも、なんか良さげなの知ってたら書いてくれると嬉しいです。
925 :
bloom :03/05/13 03:10 ID:rppJJuu/
926 :
_ :03/05/13 03:15 ID:???
>>924 だから、GUI作るならHSPとかDelphiとかあるだろと言ってるだろ・・・
929 :
nobodyさん :03/05/13 16:16 ID:/ePCZVxw
930 :
nobodyさん :03/05/13 21:19 ID:o+SfWHf3
サーバーに要求を送るときって、 autoflush使った方がいいのか、 使わない方がいいのかどっち? 漏れの感覚的には、 使った方がいいと思うんだけど、 そこらへんどーよ。 つーか、なんかスレ違いっぽいなぁ(・∀・)ニヤニヤ
(´-`).。oO(autoflush・・・)
すんません、grep使って簡単な検索をできるようにしたんですが、 (grep(/$key/, @data) ←こんな感じで) 検索キーに"ー"が含まれている時に500エラーになるようなんです。 一応jcode.pl使ってsjisにエンコードしているのですが・・・ 原因は何でしょう?
すんませんググったら出てきました。すんませんすんません。
sjisだから だめなんだよ eucなら だいじょうぶだよ
@listの末尾に@numがある時だけ@ansにぶち込みたいんです 二度目以降に見つけてもシカトするという条件があります。 @num = (19,20,55,63); @list = (ketu63,etu63,a55hoi,hoi55,asdf63,a2a0,huga19,cool20); for(@list){ @ans=grep(/$_$/,@num); } ↑のように書いてみたんですが @ans = (huga19,cool20,hoi55,ketu63) となって欲しいのに @ans = (19,20,55,63) となってしまうのです。 文字列の末尾をチェックして文字列全体を返したいのですがどのようにしたらいいでしょうか よろしくです
>>935 (/.*?$_.*?$/)
で、どないやろ?
>>935 > for(@list){ @ans=grep(/$_$/,@num); }
> ...
> @ans = (19,20,55,63)
> となってしまうのです。
@num の要素を grep してんだから当然だわな。
http://flex.ee.uec.ac.jp/texi/perl/perl_47.html my @num = (19,20,55,63);
my @list = qw(ketu63 etu63 a55hoi hoi55 asdf63 a2a0 huga19 cool20);
my @ans = ();
for my $num (@num) {
for my $str (@list) {
$str =~ /$num$/ or next; # @list の末尾に @num がある時だけ
push @ans, $str; # @ans にぶち込む
last; # 二度目以降はシカト == 最初に見つかったものだけ
}
}
print join '/', @ans; # huga19/cool20/hoi55/ketu63
>>935 これでどっすか?
もっと簡単になりそうだけど、自分にはこれしか思いつかんかった。
%key = ();
$key{$_}++ foreach (@num);
foreach $v (@list) {
$v =~ /(\d+)$/ or next;
if ($key{$1}) {
undef $key{$1};
push(@ans, $v);
}
}
939 :
935 :03/05/13 23:25 ID:???
>@num の要素を grep してんだから当然だわな。 ありゃ?寝ぼけてました。正直云うと気付きませんでした 937氏の方法で幸せになれました 938氏の方法は今から試してみます。 ありがとでしたー
もう23かな? 伝統だね〜。しみじみ。
>>940 レベルは随分落ちたけどな。
コテハンたちはもう帰ってこないのかな?
七誌で潜伏?
>941
japu氏とか_gunzip氏とかどこに行ったんだろうな。
実はファンだったのだが。
レベルダウンは構わないんじゃないか?
ここは初心者スレだし。
>>1 にもあるように「一緒に勉強」するスレだ。
マターリ以降
CSVファイルのソートをperlでやる方法はどうすればいいのですか? つまり、 0,FOO,236 1,BAR,145 2,HOG,487 3,FUG,352 となってるCSVファイルを、3列目でソートして、 1,BAR,145 0,FOO,236 3,FUG,352 2,HOG,487 というように表示したいのですが・・・
>>944 何も難しい事ないと思うけど・・・
sort関数の勉強、ちゃんとしてれば分かるはず。
open(F,"csv.csv"); while(<F>){ $hash{(split(/,/))[2]}=$_; } close(F); foreach (sort {$a<=>$b} keys %hash){ print $hash{$_}; }
while (<DATA>) { chomp; ($tmp1, $tmp2, $tmp3) = split (/,/, $_); $data{$tmp1} = [$tmp2, $tmp3]; } @tmp = sort { $data{$a}->[1] <=> $data{$b}->[1] } keys %data; print $_. ','. $data{$_}->[0]. ','. $data{$_}->[1]. "\n" foreach (@tmp); exit; __END__ 0,FOO,236 1,BAR,145 2,HOG,487 3,FUG,352 ・・と、俺も作ってみる。 ちなみに、タブ部分は見やすいように全角スペース。
>>944 今回に限らず、データの前提条件をはっきりさせないと
やり方も変わってくるよ。
・1桁、3桁、3桁の固定長なのか?
・各フィールドはユニーク値なのか? など
実際にその4つのデータなら
>>946 が書いてくれた方法でできるが、
もっとデータがあって3列目に同じ値があったらダメだし。
>>949 while (<DATA>) {
chomp;
($tmp1, $tmp2, $tmp3) = split (/,/, $_);
$data{$.} = [$tmp1, $tmp2, $tmp3];
}
@tmp = sort { $data{$a}->[2] <=> $data{$b}->[2] } keys %data;
print $data{$_}->[0]. ','. $data{$_}->[1]. ','. $data{$_}->[2]. "\n" foreach (@tmp);
exit;
__END__
0,FOO,236
1,BAR,145
2,HOG,487
3,FUG,352
・・・と、各値がユニーク値だった時のために修正とかもしてみる。
ちなみに、やっぱりタブは全角スペース。
<ある変数(複数行)に、カンマと改行しか含まれていない場合> という条件は、以下であってると思ったのですが、どうも違うようです。。。 どうしてだめなのでしょうか? m/^[,\n\r]*$/gm){
while (<DATA>) { if ($_ =~ /^,+$/) { print $.. "行目マッチ!\n"; next; } print $.. "行目クリア\n"; } exit; __END__ ,,,, ,1,1,1 ,,,,,, aaa,aaa,aa, ・・・と、作ってみる。 改行は普通ではマッチしない。 で、例の如くタブは全角ス(ry
>>951 /m … ^ が「全ての行頭」、$ が「全ての行末」にマッチ
/s … ^ が「文字列の先頭」、$ が「文字列の末尾」にマッチ
980くらい行ったら新スレ立てる?
そのぐらいでいいんじゃないかな
XMLをperlで処理する質問はこの板でいいですか? perl5.6でXMLにチャレンジしてみようと思って、 #!/usr/bin/perl use strict; use Jcode; use XML::Parser; my $topic; while($line = <STDIN>) { $topic .= $line; } my $xml = new XML::Parser(Style => 'Debug',ProtocolEncoding=>'x-euc-jp-unicode'); my $result =$xml->parse($topic); こんな感じでXML文書を読み込ませてみたら、途中で、 Substitution loop at /usr/lib/perl5/site_perl/5.6.1/i386-linux-thread-multi/XML/ Parser.pm line 346, <STDIN> line 75. こんなエラーが出ます。エラーの出る行には日本語が入っています。 日本語非対応かなと思っていろいろ試してみると、たとえば「◇」のような文字が 含まれているとだめだったりするようです。(だめなのはこれだけではなさそう) やりたいのは、perlで日本語のXML文書を読み込むことです。 その読み込みの時点ではまってしまうので困っています。 別に文字コードがeucである必要はないし、モジュールもXML::Parserを使うことにこだわりないです。 この辺のことを処理するにはどうすればいいでしょうか?
>>957 UTF-8にしてみたら?
# 読み込みアルゴリズムが違うのははただの趣味
undef $/;
my $topic = <STDIN>;
Jcode::convert(\$topic, 'utf8', 'euc'); # これ
my $xml = new XML::Parser(Style => 'Debug',ProtocolEncoding=>'utf-8');
# ...
959 :
957 :03/05/15 18:20 ID:???
>>958 UTF-8でやってみました。
以降Jcodeにてeucをutf8に変換したものとして話をさせていただきます。
utf-8にしても、同じエラーが出るには変わりなかったので、
エラーの出る部分を特定しようとして、ひとつ気がつきました。
*文字の種類によってエラーがでるのではなく、文字数によってエラーが出る。*
日本語だけで記述された文の場合、文字が10個続くと必ずエラーが出ます。
9文字までならエラーになりません。
アルファベット(半角文字)で始まる文の場合、
アルファベットが1つ,2つの時は同じように日本語10文字で同じエラーになります。
アルファベットが3つあると、日本語16文字で同じエラーになります。
アルファベットが4つあると、日本語18文字で同じエラーになります。
アルファベットが5つあると、日本語20文字で同じエラーになります。
なんなんでしょう、これ。
ちなみにエラーの出るXML::Parser.pmの346行のコードは、
$text =~ s/([\x80-\xff])/sprintf "#x%X;", ord $1/eg;
だそうです。
960 :
あすか :03/05/15 21:05 ID:???
あの。・・たまにみかけるんですが、、、
掲示板で、URLを張ると、そのURLの「HTMLソース」が見れる様になるものがあるんですが
あれって、どういう仕組みなんでしょうか。。
例えば
http://www.yahoo.co.jp/ (Text)←yahooにアクセスしなくともhtmlソースが見れる
の様なものです★
961 :
動画直リン :03/05/15 21:10 ID:fs87NLJj
963 :
nobodyさん :03/05/15 21:39 ID:bacZc7Vd
フルパスからファイル名のみを得る正規表現教えてください。 例 d:/aaa/bbb/ccc/ddd/file.txt -> file.txt d:/aaa/bbb/aaa.dat -> aaa.dat d:aaa.dat -> aaa.dat d:/aaa/bbb/aaaa -> aaaa d:/aaa/bbb/ccc/ddd/eee/.fff -> .fff d:.abcde -> .abcde perlで、自分自身のファイル名を得たいので $0 っていう特殊変数を使うと、フルパスで出てしまうので、 ファイル名のみを、、
964 :
963 :03/05/15 22:03 ID:bacZc7Vd
すいません。自己解決しました。 $ENV{SCRIPT_NAME} =~ s|.*/||; で、できました。 ただ、これを変数に入れるのはどうすればいいでしょう? my $filename = $ENV{SCRIPT_NAME} =~ s|.*/||; ってやっても、$filename には 1 としか入らんもんで、、
965 :
nobodyさん :03/05/15 22:46 ID:mip2uT4/
Bというサーバが稼動、重い、ダウンを得るために、AのサーバでCGI動かして それをSSIで出力したいのですが、思いつくのは、Bサーバの1個のファイルに対して、 if(-e $file){ print "稼動中"; }else{ print "ダウン中"; } という、つながるか、つながらないか、というのしかできそうにありません。 pingでパケット送ったり、みたいなのはないですか?
966 :
965 :03/05/15 23:01 ID:???
オレの名は翻訳野郎 翻訳の天才だ。日本語だって訳してみせらぁ。でも脳内単語だけは勘弁な。 -- あるサーバ(A)から別のWebサーバ(B)の状況を確認したい。 確認したい内容は、1.健在 2.レスポンスが悪い 3.沈黙。 自分で考えた方法は、Bサーバで if(-e $file)を実行する方法。 できることならpingの確認もしたい。
967 :
nobodyさん :03/05/15 23:07 ID:mip2uT4/
>>966 ありがとう。
pingの確認というのは、-eでは健在or沈黙しか得られないので、
pingなど、レスポンスの良し悪しも分かるコマンドはないですかってことです。
わざわざスマソ
( ̄0 ̄;)な、何かあったのか!?連続してこんな質問ばかり・・・
969 :
bloom :03/05/15 23:10 ID:fs87NLJj
>>959 う〜む。分からない。
エラーが起きる最小のコードXML文書を抜き出せる?
あとXML::Parserのバージョンも教えて。
971 :
965=967 :03/05/15 23:26 ID:mip2uT4/
>>966 >自分で考えた方法は、Bサーバで if(-e $file)を実行する方法。
やっとこの意味がわかった。Bサーバでif(-e $file)を実行して、Aサーバに
SSIでフルパスで呼び出すってことですか。。
書き忘れましたが、AサーバはSSI,CGI可で、BサーバはSSI,CGI共に不可なんです。
if(-e $file)ってのをURLいれてやったら失敗したから、この場合どうしようもないのかな・・・・
>>964 my $filename = $ENV{SCRIPT_NAME};
$filename =~ s|.*/||;
ちったぁ、頭使おうぜ。
>>971 基本的に他の鯖のことがわかる簡単な方法はないと心得よ。
A鯖からLWPモジュールなどを使って確認せよ。
974 :
965=967 :03/05/15 23:52 ID:mip2uT4/
>>973 ありがとう。
is_success使ってできた。。。でも、レスポンスが悪いとかは無理かな?
これは、生存or死亡だけっぽい
時間計りゃあいいじゃん・・・
976 :
965=967 :03/05/16 01:39 ID:HXybd+Xv
時間って、msってやつ? 時間はあんまり詳しくないんです、、ハイ
977 :
nobodyさん :03/05/16 11:03 ID:+7wsfVA8
小数点第2位以下を切り捨てするにはどのような方法がありますか? sprintf("%0.2f",$num) これだと四捨五入になるので、お願いします。
978 :
bloom :03/05/16 11:10 ID:n/FznajZ
>>977 $number = 1.234567;
$number = int ( $number * 100);
$number /= 100;
>>970 <?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="
http://example.com/index.xsl "?>
<Subject>ああああああああああ</Subject>
これでエラーになります。
XML::Parserのバージョンはたぶん2.31、
昨日CPANからインストールしたので最新バージョンだと思います。
あと、調べたらStyle=>'Debug'の時だけエラーになるようです。
Style=>'Tree'の時にはエラーになりませんでした。
たぶん実際に使うときにはDebugでは使わないから別にいいのかな……。
>>981 ごめん、分からなかった。
perl5.8+XML::Parser2.31では再現せず…。"Wide character in print"なんて警告は出たけど、謎。
多分、XML::Parser::Expatを経由するに立てられたUTF8フラグが悪さをしているんだと思うけど…。
とりあえず置換えはどうせデバッグの為だけだし、こんな感じでメソッドを再定義すればとりあえずは動くはず。
sub XML::Parser::Debug::Char{
my $expat = shift;
my $text = shift;
print STDERR "@{$expat->{Context}} || $text\n";
}
my $parser = new XML::Parser(...);
983 :
nobodyさん :03/05/16 17:38 ID:Jkp+t2ia
%mode2name = ( 'sql_arrange' => "顧客絞込み条件の入力", 'select' => "該当顧客の閲覧", 'writemail' => "メールの記入" ); foreach $value (keys %mode2name){ $HtmlTmp .= qq|$mode2name → |; } print $HtmlTmp; とやると、 「該当顧客の閲覧 → メールの記入 → 顧客絞込み条件の入力 → 」 と表示されます。 これを、%mode2name = で設定した順番、つまり、 「顧客絞込み条件の入力 → 該当顧客の閲覧 → メールの記入」 と表示させるには、 foreachの部分はどう書けばいいのでしょうか?
>>983 ごめんなさい、新すれがあったのですね。そちらに書き込みます。
>>982 おつきあいどうもありがとうございました。なんとかこれでやってみます。
スレ埋め立ても兼ねてちょっとみなさんに聞きたいのですが、
なんかどこもかしこもXMLになってきているなかで、なんかgoogleっても
perl+XMLな話題が少ないような気がするのですけど、
スクリプトでXMLいじる人ってのは
perl以外(rubyとかpythonとか)の方が最近は多かったりするんでしょうか?
周り見てみて、いかがですか?
986 :
nobodyさん :03/05/16 21:42 ID:4ZXWJHXL
winxpで使えるperlを配布しているサイトってあります??? 探しているんですが見つからないんです。
988 :
nobodyさん :03/05/17 00:14 ID:GaxUmwFm
掲示板のCGIで、$ENV{'REMOTE_HOST'}が取得出来ません。 サーバーによって何か設定変えないければならないのでしょうか? perl5、apache、freeBSDのサーバーなんですが。。
>>988 どこかのレンタル?
$ENV{'REMOTE_HOST'}を取得できない鯖はよくあるよ。
$ENV{'REMOTE_ADDR'}から必要に応じてホストに変換で。
990 :
988 :03/05/17 00:43 ID:GaxUmwFm
はいレンタルサーバーです。 $ENV{'REMOTE_ADDR'}は取得出来ましたので必要に応じてホストを調べればいいという事ですね。 ちょっとスレ違いですが、例えば掲示板で変な書き込みがあったときに、プロバイダに連絡して注意してもらう為には$ENV{'REMOTE_ADDR'}と書き込み時間を取得しておけば大方はOKでしょうかね?
>>990 その二つがあれば大丈夫
当然、書き込み内容も必要だが
992 :
988 :03/05/17 00:52 ID:GaxUmwFm
ありがとうございます。使う事は無いとは思うんですが安心しました。
埋め立て PERL、Perl、perl、PERL、Perl、perl Perl、perl、PERL、Perl、perl perl、PERL、Perl、perl PERL、Perl、perl Perl、perl perl erl rl l rl erl perl perl、 Perl perl、 Perl、 PERL perl、 Perl、 PERL、 perl perl、 Perl、 PERL、 perl、Perl perl、 Perl、 PERL、 perl、Perl、PERL
>>993 標準出力に表示するようにperlで描画汁。
うん、ちょっと待って、今、993をPerlで書いてる。
もう90%できたが食事に呼ばれた。後で。
じゃ、オイラが。
1000。と。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。