Perl コーディング初心者質問コーナー Part34
いらっしゃーい、Perlのコーディングで困ってる人のスレです。
【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは
>>2-10
過去ログで読めないスレは s/pc2/pc5/ とすると読めるかも知れません。
初歩的な質問で申し訳ないんですが教えて下さい。 所謂、動作が遅いといわれるモジュールを使用する場合、例えばCGI.pmとして、 オブジェクト指向じゃなく関数指向で利用し、 インポートする関数を極力抑えて少なくするのと、 よく見る:standardとして殆どをインポートするのとでは 前者の方が動作は速くなるのでしょうか?
>>10 ですよねぇ
しかしベンチとったんだけどほっとんど変わらなかったんで聞いたんですが、
まぁ一応これからも関数指向・使う関数のみインポートでやっていきます。
有難うございました。
12 :
nobodyさん :04/04/05 20:36 ID:sKUQSXmG
前スレのレス番ミスがアフォすぎて泣けてきますね。
>12 仕事人★のおかげでログが完全復旧せず「空白の一日」が 出来たからじゃない? 専ブラ使っている人が、 「空白の一日」込みのログをそのまま使っていたせいだと思われ。
>>11 CGI.pm に限って言えば、現実問題として、誤差の範囲内だと思う
負荷が気になるなら CGI::Lite 使うとかそういう
sub loadPass { open(FILE,"$PASSFILE"); while(<FILE>) { s/[\n\r]*$//g; my($id,$pass,$writer,$name) = split(/\t/); $PASS{"$id"} = $pass; $WRITER{"$id"} = $writer; $NAME{"$writer"} = $name; } close FILE; } このようなコードを書いたのですが, 読み込むファイルの最初の行のデータだけが読み込めません。 何が悪いのでしょうか?
16 :
15 :04/04/06 12:26 ID:???
ちなみに読み込むファイルの内容は以下のようになっています id1[TAB]pass1[TAB]writer1[TAB]name1 id2[TAB]pass2[TAB]writer2[TAB]name2 id3[TAB]pass3[TAB]writer3[TAB]name3 id4[TAB]pass4[TAB]writer4[TAB]name4 このうち,id1が読み込めていないようです。
↑のソースをコピってやったら俺は読めたぞ #!/usr/local/bin/perl $PASSFILE = "data.log"; open(FILE,"$PASSFILE"); while(<FILE>) { s/[\n\r]*$//g; my($id,$pass,$writer,$name) = split(/\t/); $PASS{"$id"} = $pass; $WRITER{"$id"} = $writer; $NAME{"$writer"} = $name; print "1:$PASS{\"$id\"}\n"; print "2:$WRITER{\"$id\"}\n"; print "3:$NAME{\"$writer\"}\n"; } close FILE;
スマン、勘違い。読めてねぇや。ちとタンマ。
#!/usr/local/bin/perl $PASSFILE = "data.log"; open(FILE,"$PASSFILE"); @data = <FILE>; foreach $temp (@data) { my($id,$pass,$writer,$name) = split(/\t/,$temp); $PASS{"$id"} = $pass; $WRITER{"$id"} = $writer; $NAME{"$writer"} = $name; print "1:\$PASS{\"$id\"} = $PASS{\"$id\"}\n"; print "2:\$WRITER{\"$id\"} = $WRITER{\"$id\"}\n"; print "3:\$NAME{\"$writer\"} = $NAME{\"$writer\"}\n"; } close FILE;
結果。これで読めてるっしょ。 D:\>perl test.cgi 1:$PASS{"id1"} = pass1 2:$WRITER{"id1"} = writer1 3:$NAME{"writer1"} = name1 1:$PASS{"id2"} = pass2 2:$WRITER{"id2"} = writer2 3:$NAME{"writer2"} = name2 1:$PASS{"id3"} = pass3 2:$WRITER{"id3"} = writer3 3:$NAME{"writer3"} = name3 1:$PASS{"id4"} = pass4 2:$WRITER{"id4"} = writer4 3:$NAME{"writer4"} = name4
↑がなんでforeachにしてるかわからんが。表示させて確かめれ。俺はこうだ。 $PASSFILE = "data.log"; open(FILE,"$PASSFILE"); while(<FILE>) { s/[\n\r]*$//g; my($id,$pass,$writer,$name) = split(/\t/); $PASS{"$id"} = $pass; $WRITER{"$id"} = $writer; $NAME{"$writer"} = $name; print "\$PASS{\"$id\"} = $PASS{\"$id\"}\n"; print "\$WRITER{\"$id\"} = $WRITER{\"$id\"}\n"; print "\$NAME{\"$writer\"} = $NAME{\"$writer\"}\n\n"; } close FILE;
1行目 $PASS{"id1"} = pass1 $WRITER{"id1"} = writer1 $NAME{"writer1"} = name1 2行目 $PASS{"id2"} = pass2 $WRITER{"id2"} = writer2 $NAME{"writer2"} = name2 3行目 $PASS{"id3"} = pass3 $WRITER{"id3"} = writer3 $NAME{"writer3"} = name3 4行目 $PASS{"id4"} = pass4 $WRITER{"id4"} = writer4 $NAME{"writer4"} = name4
>15 話とは関係無いんだが $PASS{"$id"} = $pass; $WRITER{"$id"} = $writer; $NAME{"$writer"} = $name; って $PASS{"$id"} = $pass; $WRITER{"$writer"} = $writer; $NAME{"$name"} = $name; じゃ無いの?
↑ごめんボーっとしてたスルーして。
誰かエロい人まとめてー
s/[\n\r]*$//g; ってなんだよ・・・ まあいいけど
>>25 zip -9 -o ./loadPasszip ./loadPass.pl
ここは質問者の感謝が最近足りていないスレですね。
>>26 >>21 じゃないけど、なんかおかしい? chompは不安だから自前でやってるんでは?
俺はこう書いてるけど。 /\r\n|\r|\n/ 何かマズい?
いま、UPされたファイルをCGI.pmを使ったりして一度保存し、 それをImageMagickでまた読み込んで編集して保存してるんですが、 これをわざわざ一度保存せず、編集して書き出すことって出来ないでしょうか? いろいろ調べたのですが、どうもwin環境だからか、何度試しても動いてくれません。 CGI.pmを利用し、アップしたファイルのファイルハンドルが$fileに入ってます。 $img = Image::Magick->new; $img->Read(file=>\$file); ↑こんな感じで動くと書いてあるサイトがあったりするのですが、 読み込んでくれません。 どのようにすれば可能なのか、また例えばwin環境では無理なのか等、 教えていただけませんでしょうか。
>>33 えっと、そのページは翻訳しもって一通り読んでます。
で、そのスクリプト例の項目がどう関係あるのかわからないのですが。。
つまり、そんなこと出来ないということでしょうか?
>>34 私のところでは、問題発生しました…で強制終了。
ファイルハンドルではなぜか使えない。
>>35 ああやっぱりそうですか・・・うちもperlが強制終了しちゃいます。
UNIX系の環境ではどうやら動くようなのですが、
レンタルしてる鯖につっこんで実験ってのはこわくてできないし(強制終了ですからねぇ)
そもそもローカルテスト環境と本番の環境で違うファイルにしなければならないというのは
少々困りものですし・・・。
出来ないなら諦めて今までどおり一旦保存して再読み込みでいくしかないですね。
しかし検索してもこのような問題が出てこないんで、やはり書き方に問題があるような気も。
もうちょっとだけ調べてみます。
37 :
15 :04/04/07 09:13 ID:???
38 :
nobodyさん :04/04/07 16:02 ID:9kyfgT/3
*hoge = 10; とは、どういう事なのでしょうか? よく分りません。 よろしくお願いします。
40 :
nobodyさん :04/04/07 16:08 ID:9kyfgT/3
>>39 レスありがとうございます。
型グロブということは存じておりますが、
10を代入した結果、どうなるのか?、なぜそうなるのか?が分らないのです。
普通 *hoge = 10 なんてしない。誰だよそんなコード書いてる香具師は。 *hoge = \10ならまだ分かるが。
42 :
nobodyさん :04/04/07 18:04 ID:s+a2EP68
>>41 スミマセン、自分でどうなるかな・・・と。
*hoge = \10
なら型グロブに10へのリファレンスを生成するという事ですか?
型グロブにリファレンスって変な事ないですか?
>>42 型グロブはSCALAR, ARRAY, HASHなどのフィールドを持ったデータ。
(スカラー、配列、ハッシュにそれぞれ同じ名前で別の変数を定義できるのもこのため)
*hoge = \10 や *hoge = \%hash は型グロブのそれぞれのデータフィールドへの代入となる。
つまり、上記の代入を行った後は $foo は定数10の別名となり、print $fooは10を表示する。
定数の別名である為、$foo = 1等は10 = 1と等価となり、実行時エラーになる。
もちろん、%hogeは%hashの別名になる。
このフィールドは、直接 *hoge{SCALAR}, *hoge{HASH} として直接参照することも出来る以下略
csvのデータをよみこんで、ただ表示するcgiを作ろうと思っているのですが、 表示はされるものの文字コードの処理の仕方がわかりませぬ(´Д`) よくみかける $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'sjis'); $value =~ s/</</g; $value =~ s/>/>/g; $value =~ s/\n//g; $value =~ s/\r//g; $value =~ s/\t//g; $value =~ s/\,//g; を使うんだとは思うんですが、教えてください。。 ちなみに今は if (!open(IN,"$file")) { &error('データベース読取エラー','復旧をお待ちください.'); } while(<IN>){ ($d,$DATE,$NAME,$SEX,$KATEGORI,$TEIKA1,$TEIKA2,$HANBAI1,$HANBAI2,$IMAGE,$KANRI) = split(/,/); print qq( ・・・・ とかいております。。 よろしくお願いいたします。
おkおk。 キミはGETでパラメータを渡したとき、hoge.cgi?a=001+1&b=002&...というのは見たことはあるな?後ろにくっつくウザい文字列だ。 日本語を渡すとわかるが、ワケわからん状態になっているはずだ。 あれを正常な状態に戻す処理だ。 1.$value =~ tr/+/ /; I am hoge.という文字列をQUERY STRINGに渡すと、I+am+hogeとなる。空白の部分が+になるわけだ。 これじゃ元のデータと違ってしまうから、+を半角スペースに置き換える処理。 2.$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'sjis'); %8B%B3%82%A6%82%C4%8C%4E%82%CD%8B%41%82%EAなどの文字列を普通の文字列に直す処理。 後半はjcode.plやらの文字コード変換ツールでsjisに変換している。 3.$value =~ s/</</g; $value =~ s/>/>/g; $value =~ s/\n//g; $value =~ s/\r//g; $value =~ s/\t//g; $value =~ s/\,//g; キミが書いたときには、同じ記号が並ばずに<とか>ってなってたよな? HTMLとかで読ませると、キミの書き込みのように記号扱いされてしまうが。 これを実態参照(だっけ?違ったら修正よろ)という。 ようするに、BBSなどで本文にタグとかを書かれると困るから、<や>記号を<とか>に置き換えようってことだ。 クソ適当なんで誰か追記叩き修正フォロー暴言罵倒誹謗中傷お願いします。
46 :
44 :04/04/07 22:08 ID:???
>>45 そこんとこの意味はなんとなくわかるんですが
if (!open(IN,"$file")) { &error('データベース読取エラー','復旧をお待ちください.'); }
while(<IN>){
($d,$DATE,$NAME,$SEX,$KATEGORI,$TEIKA1,$TEIKA2,$HANBAI1,$HANBAI2,$IMAGE,$KANRI) = split(/,/);
print qq( ・・・・
のどこにどんな風に記述すればいいですかのう・・(´Д`)
>>44 cgiで$fileを読み込んで表示したいだけではないの?
なぜデコードや文字コードの処理がでてくるのやら。
>>46 それだけのコードが自分で書けるのに、なぜ分からんのか不思議。
出力はSJIS。CSVファイルはEUC。そして文字化け。ってことかの? それならjcodeの引数をもうひとつ追加すれば解決。 どっちにしろURIエンコードは関係なさそうだね。
51 :
44 :04/04/08 04:13 ID:???
>>47-50 いや、うまくいくと思ってたらうまくいかなかったので
なんでかなーと・・。
でももうひとつ引数追加すればいいわけですか。。
やってみるわ〜。
あんがと〜
情報を小出しにするとみんなが混乱する凡例でした。 では次の質問ドゾー
詰まったので質問させてください。 「ハンドルネーム@〜」って名前を入れられた時に、@以下を切り落としたいんですが 名前によっては上手く切り落とせないんです。 $str = "ファイア@炎"; $str =~ /^([^@^@]+)/; $str = $1; print $str; 例えば、この場合「フ」とあとなんか変な文字が$strに入ってしまいます。 入力文字列によっては上手く切り落とせる事もあるんですが・・・ 何が悪いんでしょうか?
$str =~ s/(@|@).+$//;
55 :
53 :04/04/08 20:46 ID:???
>>54 $str = "ファイア@炎";
$str =~ s/(@|@).+$//;
$str = $1;
print $str;
実行した出力結果:
@
切り落とせてないんですが・・・
56 :
53 :04/04/08 20:48 ID:???
勘違い。 $str = "ファイア@炎"; $str =~ s/(@|@).+$//; print $str; 出力結果: フ(と、変な文字) やっぱり出力できてないんですが・・・
EUCに変換してから処理するのが吉。 たぶん、sjisでやっていると思うんだけど、 ァの二バイト目=0x40、@=0x40っていうところに注目。
>>53 $str = "ファイア@炎";
$str =~ /^((?:\x81[\x40-\x7e\x80-\x96\x98-\xfc]|
[\x82-\x9f\xe0-\xef][\x40-\x7e\x80-\xfc]|
[\x20-\x3f\x41-\x7e])*)/x;
$str = $1;
print $str;
59 :
nobodyさん :04/04/08 21:14 ID:nuxHv3wJ
pack関数で困ってます。 10進数のIPアドレスを、2進数の文字列に変換したいのですが、 $num2 = unpack("B32", pack("C*", 192,50,218,168)); のIPアドレスの部分を、192,〜の固定でなくて、 ファイルから読み取りたいのですが、そこを $file と指定しても読み取ってくれません。 どう書いたらいいのでせうか・・・
60 :
53 :04/04/08 21:17 ID:???
>>58 凄い!それで無事行けました。
perlメモの、「正しくパターンマッチさせる」のsjisへの応用ですよね。
ところで、文字コードを表す部分は分かるんですが、最初の
?: と 最後の修飾詞 x の役目が良く分からないんですが・・・
? は「直前の1文字が0回または1回」ということですが、直前に何も付いてないみたいなんですが・・・
また、x (拡張正規表現)は、持ってるperl本を引いてみた所、「空白文字を無視し、#以降をコメント扱いする」とあります。
でも、空白もコメントも使ってないので、外してみたらマッチしなくなりました。
良ければこれら意味も教えて頂けないでしょうか?
常識じゃないのか
65 :
53 :04/04/08 21:49 ID:???
>>63 あーっ、分かりました。
とんでもない勘違いしてました。空白文字を含むのは$strではなく、パターンの方ですね。
どうもこういう勘違い多いな自分・・・
これで納得できました。どうも有難うございます。
?: については、本調べてたら載ってました。前方一致、ってことですね。
perl5に追加された拡張構文であり、拡張正規表現の x修飾詞とは別に関係ない。
まぎらわしいけど、何とか覚えました。
これで何とか出来そうです。
・・・なんですが、おまけで書いて頂いた「/xを外したかったら」を実行してみたところ挙動が変です。
何度もすみませんが、こういうのどうしても気になる性質で・・・
$str = "ファイア@炎";
$str = /^((?:\x81[\x40-\x7e\x80-\x96\x98-\xfc]|[\x82-\x9f\xe0-\xef][\x40-\x7e\x80-\xfc]|[\x20-\x3f\x41-\x7e])*)/;
print $str;# マッチング判定結果表示
$str = "$1 $2 $3 $_";
print $str;
実行結果:
1
------------------------
マッチングは上手く出来てるようなんですが、その文字列がどこに格納されたのかが分からないんです。
$1 に入ってなかったので、それっぽい変数を色々乗せてみましたが全く当たりません。
いったい、どこに行ったのでしょうか・・・?
>>65 マッチング?
$strに代入して何がしたい?
もういいよ来るな 何でもかんでも人に聞かずにとりあえず黙って調べてテストしてを繰り返せ
68 :
53 :04/04/08 21:56 ID:???
>>66 あ(恥
すみません、単純なコードミスでした。
エラー出して欲しかった・・・ use strictしてもにエラーでなかったし
69 :
53 :04/04/08 22:00 ID:???
>>67 でも、本当に簡単なミスでも、指摘されるまで気付かないことだってありますよ。
いくらテストしても、エラー出ないからどの行が悪いのかも見当つかないし。
これで完全に解決できたので、以降書き込みには来ません。
答えてくれた方、有難うございました。
> 指摘されるまで気付かないことだってありますよ。 普段どんなデバッグ手法使ってるのか良く分かった。
んなもん、やってるうちに簡単なミスなんかしなくなるし 何処でミスしたかもすぐわかるようになるんだよ 一つ質問する ↓ 回答どおりしたら解決した しかし他のわからないことも質問 ↓ 解決。別の質問 ↓ 繰り返し この一連の流れの中に「自分で調べる」を入れろ せめて2,3時間調べろ
たしかに言語と自分の癖が分かってくると、あー糞またあのミスかってなるw
>指摘されるまで気付かないことだってありますよ おまいプログラムやめろ 少なくとも共用サーバでスクリプト走らせるのやめろ
75 :
59 :04/04/08 22:31 ID:1altNbSl
>>64 IPアドレスが一行づつかれたファイルです。
192.168.0.1
192.168.0.10
192.168.0.100
みたなものです。
>>75 $file = '192.50.218.168';
$num2 = unpack("B32", pack("C*", split(/\./, $file)));
77 :
nobodyさん :04/04/09 00:33 ID:PgKEk2Oq
http::liteで 、対象のページの一部分だけ取り出す方法はありますか?
例えば、1MぐらいあるHTMLファイルの<title>だけを知りたいので、先頭1000バイトだけ取るとか。
>>77 callback を使えばできるんじゃないかという気はするが、試してない
79 :
nobodyさん :04/04/09 01:07 ID:6udLpUMW
cgi-lib.plを使用して、HTMLのフォームから送信したテキストを新たなHTMLページに表示 させるコードが上手く動きません。(perl ver 5.8.0 cgi-lib.pl ver 1.14) require 'cgi-lib.pl'; &ReadParse; $namae=$in{'NAMAE'}; print "content-type: text/html\n\n"; print "<html>"; #print $namae; print "test\n"; print "</html>"; としているのですが、HTMLフォームからテキストを送ると「ページを表示できません」が出てしまい うまく実行されません。cgi-lib.plをコマンドラインから実行すると、間違いなく動いているのですが、 HTMLから上記CGIを実行すると うまくいきません。 お分かりのかたいらっしゃるでしょうか
80 :
nobodyさん :04/04/09 01:09 ID:6udLpUMW
スミマセン ↑のコード間違いです #!/usr/bin/perl require 'cgi-lib.pl'; &ReadParse; $namae=$in{'NAMAE'}; print "content-type: text/html\n\n"; print "<html>"; print $namae; print "</html>"; というコードを書いたのですが、うまくいきません
81 :
nobodyさん :04/04/09 01:21 ID:ruDZ3+hJ
>>80 そのスクリプトのファイル名が myscript.cgi だとして
#!/usr/bin/perl
eval {
require 'myscript.cgi'; # あなたのスクリプトを読み込む
};
if ($@) {
print "Content-type: text/plain\n\n$@";
}
というスクリプトを実行するとどうなります?
詳しいエラーを見る事ができるはずなんだけど。
>>80 まずWWWサーバのエラーログを調べる
もしエラーログが調べられないときは、そうだな、
とりあえず改行コードでも疑ってみたらどうだ?
あと疑うべきは #!/usr/bin/perl の部分とか。
86 :
nobodyさん :04/04/09 01:58 ID:6udLpUMW
>>81 ありがとうございます。下記のような表示が出たのですがさっぱりです(ちなみにcgiファイル名は「my.pl」
Can't locate my.pl in @INC (@INC contains: /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/lib/perl5/5.8.
0 /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.0 /usr/lib/perl5/site_pe
rl /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/ve
ndor_perl .) at /var/www/cgi-bin/test.pl line 3.
>>84 HTMLは間違っていないと思います
ちなみに下記
<html>
<meta http-equiv="Content-Type" content="text/html;charset=euc">
<body>
<form method="post" action="../cgi-bin/3-3-1.pl">
名前<input type="text" name="NAMAE"><p>
<input type="submit">
</form>
</body>
</html>
HTMLの文字をperlで変数に格納し、それをHTMLで表示させるだけなのですが
>>83 さんもおっしゃるように perlのパスも本体CGIやcgi-lib.pl内のパスも確認したのですが
間違っていないと思うのですが、どうしてうまくいかないものでしょう
87 :
nobodyさん :04/04/09 01:59 ID:6udLpUMW
↑のHTML間違ってました(たびたびでスミマセン) <html> <meta http-equiv="Content-Type" content="text/html;charset=euc"> <body> <form method="post" action="../cgi-bin/my.pl"> 名前<input type="text" name="NAMAE"><p> <input type="submit"> </form> </body> </html>
test.pl の 3行目にある my.pl なんて見つかりませんよと言われているが?
89 :
79 :04/04/09 02:24 ID:6udLpUMW
>>88 うーん おかしいなぁ 確かに指定したはずなのですが
CGIを実行したときのログをみてみたらこんな感じで書いてあった
Argument "NAMAE=ffffff" isn't numeric in subroutine
entry at /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi/ModPerl/RegistryCooker.pm line 160.!
もう少し調べてみることにします ありがとうございました
90 :
nobodyさん :04/04/09 04:37 ID:+yDvGh6O
既にヘッダーが送信されているか判断する方法ってありますか? エラー表示する時に、ヘッダー(content-type)が2重になってしまう場合があるので…。 ヘッダー出力すると同時に、定数か何かでフラグ立てておけば良いんでしょうか?
ヘッダーなんてただ標準出力に文字を垂れ流してるだから、判別は無理と思われ。 普通にフラグで判断しましょう。
>>91 素早い返答ありがd
フラグ立てることにします。
93 :
nobodyさん :04/04/09 08:40 ID:qDAc9oFc
質問します やりたいこと: 掲示板の投稿済み投稿内容編集フォームで 改行を<BR>に変換して保存した本文を <BR>を改行コードになおして テキストエリアに投稿済みの本文を表示する こんな風にやってみた: 1.$text =~ s/<BR>/\x0D\x0A/g; <textarea cols=60 rows=3 name=text value=$text></textarea> 2.$text =~ s/<BR>/\n/g; <textarea cols=60 rows=3 name=text value=$text></textarea> 両方ともだめでした。 $textの内容が空になります よろしくお願いします。
x <textarea cols=60 rows=3 name=text value=$text></textarea> o <textarea cols=60 rows=3 name=text>$text</textarea>
>>94 できました。
タグ間違いだったとは(:;´.(Θ).`;:)
やりたいこと : csvの中身を表示したい。 こんな風に自分は書いた : open(FILE, "test.csv"); $data = <FILE>; close FILE; ($a,$b) = split (/,/,$data); $i = 0; while ($i < 5){ print "$a" $i++; }; 結果。同じ列の文字が繰り返される。。 (whileを使わなかったらずっと表示されたので 今は食い抑えてる幹事になってます。) 基本的っぽいけどサパーリなのです。 宜しくお願い致します。。
97 :
96 :04/04/09 16:30 ID:???
できました。。すいません。
せめてどうやったらできたのかぐらい書いてよ。
open (FILE, 'test.csv'); while (<FILE>){($_,@_) = split /,/; print;} close (FILE);
100 :
75 :04/04/09 18:56 ID:gUQPCoa8
75 :59 :04/04/08 22:31 ID:1altNbSl
>>64 IPアドレスが一行づつかれたファイルです。
192.168.0.1
192.168.0.10
192.168.0.100
みたなものです。
76 :nobodyさん :04/04/08 23:28 ID:???
>>75 $file = '192.50.218.168';
$num2 = unpack("B32", pack("C*", split(/\./, $file)));
↑ありがとうございました。変換できました。
変換後、改行がなくなりこのように↓変換したIP文字列がつながってしまいました。
これを32文字づつ、改行したいのですが、どのような構文?を使用すればいいのでしょうか。
とっかかりが分かりませんので、さわりだけ教えていただければ後は調べますので
よろしければ教えて下さい。
=======================================================
00001100100110110111010011110011000011001101001000110000111111100000110011100101
11010011010101110000110011100110000100010010011010000001000010110110100000000001
10000001000010110110111011011010100000010000101101110100000011011000000100001011
01110100100000101000000100001011011101000011100010000001000010110111010001001010
10000001000010110111011001111000100000010000101101110110111110001000000100001011
10001011000000011000000100001011000011100000000110000001000010111001000000000010
================================================
>>100 open (FILE, "ip.txt");
while(<FILE>) {
$num2 = unpack("B32", pack("C*", split(/\./)));
print "$num2\n";
}
close (FILE);
それくらい調べろやヴォケェ! もうくんな発言スンナ
>while ($i < 5){ >print "$a" >$i++; >}; ワロタw $aの中身入れてないなら同じのが出て当然だろw
$dellist = $query{'del'}; open(FILE, "./aborn.csv"); @list = <FILE>; close(FILE); @temp = (); foreach $rr (@list){ if($rr eq $dellist){ print "$rrを削除しました<BR><BR>"; } else { push(@temp, $rr); print "$rrは削除せず<BR><BR>"; } } open(OUT, ">./aborn.csv"); print OUT @temp; close(OUT); 以上のようなソースでプログラムを動かすと、 @listに$dellistと同じ文字列が含まれているのに、その文字列は削除されずに else以下の「削除せず」をprintして、csvファイルからも削除されませんでした。 「eq」の部分が原因だと思うのですが、==では当然正常に動きませんし… はて、どうしたものでしょうか。
chomp じゃないのか
だな
109 :
105 :04/04/09 22:26 ID:???
Active Perlでローカルな環境で動かしたらリストからの削除ができなかったのですが、
今サーバーにアップロードして試してみると、リストからの削除が行えました。
変わりに、文字化けが起こるようになりましたが…
謎。
>>106-108 なるほど、eqにこだわらずneで組めばelse文がいらないというわけですか。
参考になります。
110 :
79 :04/04/09 23:21 ID:6udLpUMW
>>79 ですが 自己解決しました
下記のようにコードを直したら無事cgi-lib.plが処理してくれました
(訂正前) &ReadParse; (訂正後)&ReadParse(*in);
実はこのコード、本にのっていたやつなんですけど、本が間違ってたんですかね。
いろいろ調べた結果&ReadParseの後ろに(*in)を付けないと フォームから渡された
データが in に入らないんですね。 なんかやられたって感じです。
でもみなさんにいろいろ教わった結果、perlのエラーはapacheのログみれば分かることや
その他いろいろのことを知ることができました。アドバイスいただいたみなさん ありがとう
ございました
>>110 &ReadParse; だけでもできるが。
cgi-libが古いんじゃないか?
多分もの凄く基本なんだと思いますが質問させてください。 日本語の表示についてです。 WindowsXP、AN HTTPD、ActivePerl5.8です。 ソースの文字コードはeucです。 use Encode; use encoding 'euc-jp'; my $x = "あ"; print $x; これだと文字化けしてしまいます。 Encode::from_toやEncode::encodeなどで$x文字コードを変換しても上手くいきません。 一応ググッてはみたのですが、見つかったPerl5.8の解説ページはどれも中級者向けといいますか、 読者が5.6以前の文字コードの扱いやjcode.plの扱いを理解しているという前提で書かれたようなものばかりで、 今から5.8でPerlを勉強しようという入門者向けに日本語の扱いを解説したページを見つけられませんでした。
>>112 おまいさんの思ってる「文字化け」の定義を述べよ。
ブラウザ側でエンコードを euc-jp として指定してやれば普通に見えるんじゃないか?
>>112 windowsのコンソールに表示させてる?
ならeuc-jpじゃなくてsjisで書いてencode指定すれば
とりあえず正しく表示される。
こんなのもちゃんと通る。
use encoding 'sjis';
my $x = "ソースを表示";
print "$x(";
print length $x;
print "文字)\n";
$x =~ s/表/提/;
print $x;
>>112 ソースの文字コードがeucで、ブラウザにeucを出力するのに
わざわざモジュールを呼ぶ必要があるのかと。
117 :
112 :04/04/10 02:22 ID:???
ありがとうございます。なんとか表示することができるようになりました。
新しく覚えたことはまず拡張子plでwindowsのコンソールで試し、その後CGIにして動かす、というやり方で勉強していました。
今回は最初のコンソールの段階で上手くいかなかったので、その後のCGIでブラウザ表示するのをやっておりませんでした。
レスを見て、CGIでのブラウザ表示を試したところ、eucで表示が確認できました。
>>113 というわけで、そもそもブラウザでの表示を試していませんでした。
>>114 ご指摘の通り、コンソールで表示させておりました。
ソースをsjisにすることでコンソールでも表示できました。
sjisだと色々問題が発生するのでソースはeucが基本、と書いてあるHPを読んだのでeucにしておりました。
>>115 >
Perl5.8だと内部ではUTF8でどうのこうの、というあたりでかなり頭が混乱しております。
なんとか「あ」が表示できたので、これをとっかかりに詳しく勉強していこうと思います。
>>116 そのへん、まだ混乱しています。is_utf8($x)だと真になるので、UTF8なのか。
でも結局無変換のままで上手くいったので、やっぱりeucなのか。
UTF8フラグの立ったeuc??
この辺がまだきちんと理解できてないので、近いうちにまた壁にぶつかる予感です。
118 :
nobodyさん :04/04/10 20:34 ID:H+y5o94i
Perlスクリプトでhttp-referrerの偽装は可能でしょうか? リンク先に飛ぶときhttp-referrerに任意のURLをぶち込んで飛ぶということは可能でしょうか?
>>118 できます。
ぐぐればサンプルはいくらでも見つかります。
CGIスレへどうぞ。
121 :
118 :04/04/10 20:53 ID:H+y5o94i
>>119-120 レスありがとうございます。
CGIスレ見てみましたが、出来ないっぽいですね?
リファラはクライアントが勝手に吐くからね。 サーバーからはどうにもならんでしょう。 2chみたいにワンクッションさせてみるとか?
>>118 プロキシかブラウザを作るしかないでしょ。
124 :
nobodyさん :04/04/10 22:07 ID:zPwA0QL/
とりあえず use strict; しとけっていうのを見たんでやってみたんですが、 下のスクリプトが上手く動かないんです use strict; { package Config; $host = "www.example.com"; } package main; print "host = $Config::host\n"; use strictしているときは、$Config::host = "www.example.com"; って書かないといけないみたいですが これじゃあ、package Configの意味がないですよね? package Config; のあとに no strict; っていうのを入れないといけないんですか? どうしたらいいんだろう・・・おしえて。
125 :
118 :04/04/10 22:07 ID:???
$e1=int(rand(6)); $e2=int(rand(6)); while($e2==$e1){ $e2=int(rand(6)); } $enemy3=int(rand(6)); while($e3==$e1 or $e3==$e2){ $enemy3=int(rand(6)); } 1〜6から、ランダムで3つの数字を重複なしで、 取り出すプログラムなんですけど、 しょぼいですよね・・・ なにか華麗な方法知ってる方いれば、教えて下さい。
みすった>< $e1=int(rand(6)); $e2=int(rand(6)); while($e2==$e1){ $e2=int(rand(6)); } $e3=int(rand(6)); while($e3==$e1 or $e3==$e2){ $e3=int(rand(6)); }
>>124 use strictの意味も分からずuse strictしても意味無いですよね?
perl5.6.0未満のバージョンなら
{
package Config;
use vars qw($host);
$host = "www...";
}
perl5.6.0以上のバージョンなら
{
package Config;
our $host = "www...";
}
# ...
print $Config::host;
>>126 何スレか前に同じ質問があった。
そのときは確か、List::Utilが使えれば一番早くて楽だっていう
結論だった気がする。
use List::Util qw(shuffle);
($enemy1,$enemy2,$enemy3) = shuffle 1..6; #@enemy[0..2] の方がいいと思う。
>>129 Perl 5.8.0使っているので、下のほうを参考にさせてもらいます。
use strict;はとりあえずつけとけと よく見るのでつけてみました。
とりあえず変数はmyつけて宣言しとくといい らしいので。
packageのなかでは our というのをつけるんですね。
>>128 プラグマですか。自分の持っている本にも少ししか触れていないし、
難しそうな考え方ですね・・・。
知らないのに何かができるわけも無いので、
頑張って勉強します。どうもありがとう、でした
分かった! package内ではourをつけて宣言するんだ (mainの中でmyをつけて宣言するのと同じように・・・ってmyの複数形なんだな)。 package内で$varとしたらグローバルになっちゃうわけですね。
>>133 全然違うし。
http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlmod.html my 変数はシンボルテーブルで管理されていないので、同じファイル上で
宣言されていれば名前空間が変わっても参照できる。strict プラグマの
影響範囲も同様。
#!/usr/bin/perl
use strict;
package Foo;
my $foo = 'foo!'; # strict vars の影響範囲内
package Bar;
print $foo; # foo!
__END__
vars プラグマや our によって宣言された変数は strict のチェック
対象外となるだけでグローバル変数と同等。シンボルテーブルで管理
されているから $Config::host のようにパッケージ名から指定すれば
外部から参照できる。
あと標準モジュールに Config.pm があるので、パッケージ名に
Config を使うのは止めた方がいい。
#!/usr/local/bin/perl use strict; use warnings; use sigtrap; use diagnostics; &main; exit; sub main { my $val1 = 1; our $val2 = 2; &test; print '$val1(' . \$val1 . qq|="$val1"\n|; print '$val2(' . \$val2 . qq|="$val2"\n|; # print '$val3(' . \$val3 . qq|="$val3"\n|; # print '$val4(' . \$val4 . qq|="$val4"\n|; sub test { my $val3 = 3; our $val4 = 4; $val1 = 5; $val2 = 6; print '$val1(' . \$val1 . qq|="$val1"\n|; print '$val2(' . \$val2 . qq|="$val2"\n|; print '$val3(' . \$val3 . qq|="$val3"\n|; print '$val4(' . \$val4 . qq|="$val4"\n|; } }
>>117 まー大体予想通り。
>sjisだと色々問題が発生するのでソースはeucが基本、と書いてあるHPを読んだのでeucにしておりました。
最近の Perl では
>Perl5.8だと内部ではUTF8でどうのこうの
の通りコード変換を行うのでとりあえず大丈夫。
ポイントは use encoding の役割。
・ソースコードの文字コード指定(Perl がソースを解釈する際、この文字コードから UTF-8 に変換)
・標準入出力の文字コード指定(STDIN, STDOUT に対する入出力をこの文字コードに変換)
の 2 つ。つまり、
>>112 のコードでは
ソースコードでは euc → Perl 解釈時に UTF-8 に変換(よってis_utf8($x)が真) →
print で(STDOUT)に出力される時点で再び euc に変換
という流れ。詳しくは perldoc encoding 参照。
>>132 パッケージだとかモジュールだとかについて詳しく知りたければ、「続・初めてのPerl」を
読むといいかもしれない。
正直この本に「続・初めてのPerl」とタイトルをつけるのは間違ってるという気もするけどね。
表表紙も「Perl オブジェクト、リファレンス、モジュール」っていう副題の方が文字でかいし。
>>134 細かいことだけど、正確には同じファイル上で、じゃなくて同じブロック(の前方)で、だよね。
>>137 ファイルスコープはブロックじゃないので、より正確には
<q>
my と local は、変数 (my の場合) やグローバル変数の値 (local の場合)
を、それをとり囲むブロック、サブルーチン、eval 、またはファイルの中が
有効範囲となるように宣言する。<cite>駱駝本 2nd Edition 2.6.8</cite>
</q>
だね。
139 :
nobodyさん :04/04/11 12:37 ID:e6FKOv37
連想配列の配列数を取得するにはどうしたらいいのでしょうか? foreach(keys(%a)) { $i++ } のように一個一個数えていくしかないのでしょうか?
scalar(keys %a);
141 :
nobodyさん :04/04/11 13:10 ID:e6FKOv37
142 :
nobodyさん :04/04/11 13:53 ID:e6FKOv37
もう一個おながいします。 クラスでインスタンス毎に別個の値を保存したい連想配列があるのですが どういう風に実装すればいいのかわかりません。 以下のようなコードだと複数のインスタンスから%aにアクセスされると まずいことになっちゃいますよね? my %a; sub new { my $self = shift; my $obj = { name => shift }; bless $obj,$self; $obj; }
>>142 sub new {
my $self = shift;
my $obj = {
name => shift
};
bless $obj,$self;
$self->{HOGEHOGE} = {};
$obj;
}
144 :
nobodyさん :04/04/11 15:12 ID:U2PVfz4j
#!/usr/local/bin/perl
$addr = (gethostbyname("hogehoge.com"))[4];
$name = pack("S n a4 x8", 2, 80, $addr);
socket(S, 2, 1, 0);
connect(S, $name);
binmode(S);
select(S); $| = 1; select(stdout);
print S "GET /index.html HTTP/1.0\r\n\r\n";
while (<S>) { print; }
close(S);
なんて事をやったんだが、
http://hogehoge.com/index.htmlのソースが表示されるワケではなく 、
HTTPヘッダが表示された。
ヘッダは良いからindex.htmlのソースを読みたいんだけど、どうやればいいのかGoogle検索してもわからん
どうやるんすか?
145 :
144 :04/04/11 15:26 ID:U2PVfz4j
すまん、自己解決。 自分ではまだ作れないからとりあえず他人作の関数使うわ 理解は後回し
まずはそのヘッダに何が書かれていたか読めるようになるべきだな。 でなければLWP使え。
147 :
nobodyさん :04/04/11 15:34 ID:e6FKOv37
148 :
nobodyさん :04/04/11 17:59 ID:9ah7xv1/
# <> <= Not select Handle <> ; # ! <STDIN>; open File,"$ARGV" or print $!,"\n"; # Not ($ARGV[0] and @ARGV); while(<File>){print;} close File; なぜに動くのか ??? デバックするとよけーに分からん 猿でも分かる説明 お願いします
>>148 <>は<ARGV>と同じ。
ファイルハンドルARGVは*最初に<>/<ARGV>を評価した時に*@ARGVの、
中身をファイル名のリストと見なし、$ARGV[0] .. $ARGV[n]を順に暗黙のうちにopenする。
中身がなければSTDINと同じ。
そして、この暗黙のopenの時$ARGVに開くファイルの名前を入れる。
ここまで分かれば
>>148 の動作も理解できるだろ?
つーかどのような経緯で
>>148 のようなコードを書くことになったのか非常に興味がある。
普通のスクリプトでそんなコードがあったら素で作者の正気を疑うぞ。
>>149 「Perlはこんなに省略できる」って意味の例文じゃなかろうか。
151 :
ちょー素人 :04/04/11 19:23 ID:UpvZGEBT
パール、C言語、PHPとかいろいろなCGIがあるけど この使い分けの意味がよく分かりません。 サーバーによって使える言語が違うということでしょうか?
152 :
148 :04/04/11 19:25 ID:???
<> と <STDIN> の 明確な違いを知りたかったので 自分で書いてみますた もっと分かりやすい スクリプトあれば教えてくだされ
>>151 そゆこと。使いたいサーバーの使用可能言語を調べてみ?
Perlは使えない方が珍しいがCは使える方が珍しい。
>>153 ぉぃぉぃ嘘おしえちゃいかんよ
Perlなんて化石言語使える鯖の方が少ない
今は殆どC
僕もCGIの汎用比率が気になる初心者です。 今から勉強するとしたら何を学んだほうがいいのでしょうか? ちなみに会社ではパルとPHPがメインみたいです。
>>155 1レス前も読めない香具師は何をやってもダメ。
ってかその前にスレタイも読めませんか、そうですか。
>155 マジレスすると、「なにをやりたいか」による。 会社でPerlとPHPがメインなら、そっちに磨きをかけた方がいいかもしれない。 会社がその後、ASP.NETなんかに転ぶ可能性があるなら、今のうちに勉強しておくのもいいかもしれない。 それよりもそろそろPerlのコーディングの質問はこないものか。
>>150 もわかってないみたいだから解説してやるよ
>>152 もこれ見て分からなきゃ「初めてのPerl」を百回読め
# 初めて<ARGV>とされた時に呼ばれる関数
sub __initialize_argv__{
unless(defined fileno ARGV){
@ARGV = ('&STDIN') unless @ARGV;
$__internal_index__ = 0;
$ARGV = $ARGV[$__internal_index__++];
open ARGV, $ARGV
or die "Can't open $ARGV: $!";
}
}
# <>;
__initialize_argv__();
<ARGV>;
あとはARGVがEOFに達すると自動的に$ARGV[$__internal__index++]をopenするというわけだ。
160 :
148 :04/04/11 22:41 ID:???
162 :
148 :04/04/11 23:00 ID:???
>>161 >ユーザーは呼べない。いい加減にしろ。
ならどうして調べたのさー
。。。。。と逆切れしてみる w
書き方間違ってますか? if (!-e image/$new){ mkdir("image/$new",0777); chmod(0777, "image/$new"); }
間違ってます。
165 :
163 :04/04/11 23:42 ID:???
ミスってた・・解決しました。 理由は if (!-e image/$new){ が if (!-e "image/$new"){ にするのわすれてました・・・。゚(゚´Д`゚)゚。
>>163 if (mkdir("image/$new", 0777)) {
chmod(0777, "image/$new");
}
elsif (!-d "image/$new") {
die;
}
>>166 既にimage/$newがディレクトリとしてあった場合は?
ちょっとまってchomodする必要あんの?
あるわけないよね
鯖でumaskされてる時に意味があるんじゃ? umask効いてる時は、mkdirのパーミッション指定が効かなかった記憶がある。
文字列を裸で書く神経が分からん。
はだかぢゃいやぁーんおーしーまーやーのりっ♪
174 :
nobodyさん :04/04/12 18:49 ID:DgDkioXO
ある文章の / の前と後ろを分けて、それぞれスカラー値にしたいのですが、 (例)japan/korea どのような構文を使えばいいのでしょうか?
「split perl」でググってもうここには来るな。
エスケープ忘れにはまる予感
175 + \つけてもうここには来るな。
代入の仕方が分からずにはまる予感
177 + perlでは=が代入だからもうここには来るな。
リストとしての受け取り方が分からずにはまる予感
まんどくせ。 ($hoge,$foo) = split /\//, 'japan/korea'; こんな感じですんでまた来てね♥
何だかんだ言いつつおまいら優しいですな。
$bagu = "表示不可能な予感"; # 侮ヲ不可狽ネ頼エ これってもちろんPerlのバグですよね?
>>183 「侮ヲ perl」でgoogle検索。
教えてください。 PERLで「cgiを呼び出すHTML」を吐き出すcgi を作ったのですが クエリーがうまくわたらないのです。 1.最初の(固定の)HTMLでは、ファイル中のクリッカブルマップからたとえば test1.cgi?hogehoge をリンクしています。 2.test1.cgiでは QUERY_STRING から hogehoge を取り出し データファイルと照合して hogehogehoge というアイテム名を取り出してるので HTMLファイルに、 <A href="test2.cgi?hogehogehoge> と出力させています。 3.test2.cgi では、 QUERY_STRING から hogehogehoge を取り出すようにしているのですが ここで 空文字列しか来ていないようで、2.のHTMLファイルのリンクをクリックするとエラーです。 test2.cgi は確かに呼び出しています。 一連の動作でやるとエラーなのですが、2.のHTMLが表示された段階でブラウザにソースを吐かせ、 それを別のHTMLファイルとして起動してやると、そこからのリンクでは、test2.cgi にちゃんと hogehogehoge が渡っています。 何か設定を忘れているでしょうか?
<A href="test2.cgi?hogehogehoge> ↓ <A href="test2.cgi?hogehogehoge">
ちょっと教えてください。
Redhat8.0のperl5.8.0でLWP使って
レスポンスヘッダを編集したいんですが、
newの書式が分からないです。マジで。
require
HTTP::Response; $rc = '200';
$msg = 'OK';
$header = 'Accept-Ranges: bytes\n';
$header .= 'Content-Length: 186965910\n'
$header .= 'Content-Type: text/html\n\n';
$content = '';
$res =
HTTP::Response- >new($rc, $msg, $header, $content);
print "$res";
と書いたんですが、InternalServerErrorで進めません。
HTTP::Responseでレスポンスヘッダを編集する方法教えてください 。
お願いします。
>>189 なんかグタグタですな。。。
use
HTTP::Response; $header =<<"EOS";
Accept-Ranges: bytes
Content-Length: 186965910
Content-Type: text/html
EOS
186 MB の HTML なんてブラクラですね。。。
191 :
189 :04/04/13 01:04 ID:???
>>190 お早い回答ありがとうございます。
いや、ヘッダー情報をいじったり削除したかっただけなんで、
値はどうでも良いかと思ってテキトーに設定しました。気をつけます。
print "ソkソ泣|"; Windowzで「ヌルポ」と文字化けします。 これってもちろんPerlのバグですよね?
193 :
nobodyさん :04/04/13 08:21 ID:OVsnEkWR
ごくシンプルな日記スクリプトをPERLで書いているのですが、 TEXTAREAの内容について改行の処理をしようとすると 数字の羅列になってしまいます。 $msg = $FORM{'msg'}; #バッファからセット。URLデコード済。 # $msg = ~ s/\r\n/<BR>/g; この状態だと「$msg」の中身はちゃんと文字列になっているのですが 下のコメントをはずすと途端に数字の羅列になります。 (文字列を変えても同じ数字になります。) どうすればこの状態を回避できるでしょうか?
すみません。自己解決しました $msg =~ s/\r\n|\r|\n/<BR>/g; このようにコーディングしてみたらいけました。
>>194 試しにこう書いてみよう。
$msg = ~ s/\r\n|\r|\n/<BR>/g;
~ の意味を調べてみよう。
time()で返す秒数って、 何かちゃんとした名前があったような気がしたんだけど。 何だっけ。 カタカナ4文字でスがついたような気がする。
197 :
196 :04/04/13 15:09 ID:???
ごめん、ユリウス暦と混同している可能盛大。 名前がなかったかも。
198 :
nobodyさん :04/04/13 15:42 ID:sCIWFJ4B
HTMLに、DBに入れられたクレジットカード番号を 表示させる、ということをやっています。 番号が入っているcar_numフィールド(11番目)には [****-****-****-****] という形でデータが入っています。 しかし、番号確認画面でその末尾4ケタのみ表示させたいのですが、 なかなか良い考えが浮かびません。 今は以下のように書いて丸々16ケタ表示させています。 諸先輩方、アドバイスよろしくお願いいたします。 <tr> END if ($odr[10] == 2){ print"$odr[11]" } print <<END; </td>
>>196 あるよ。エ・・・秒
なんだったかな思いだせん。。
200 :
199 :04/04/13 16:05 ID:???
わかった エボック秒だわ
>>196 ヒント:シルバニアファミリーと言えばこの会社。かつてはカセットビジョンなど
家庭用ゲーム機も出していた。
202 :
199 :04/04/13 16:06 ID:???
ごめん。たぶんエボックじゃなくてエポック。
203 :
196 :04/04/13 16:41 ID:???
>>202 おー、それそれ。
お礼に自分の屁が臭い時に喜びを感じる性癖をプレゼントします。
dfで取得したディスク使用量のデータから一部の数字だけ 抜き出してPERLで使いたいのですが、どうすれば良いのでしょうか? 例えば $string = "FilesystemSizeUsedAvailCapacityMounted on" の一行から、Size, Usedだけを取り出して使いたいとすると、 @pairs = split(/(\t)/, $string); print "@pairs[1] @pairs[2]"; としても上手く行きません。(\s)*でも無理なようです。
@pairs = split(/\t/, $string); print "$pairs[1] $pairs[2]";
207 :
205 :04/04/13 18:21 ID:???
>>206 @pairs = split(/\t/, $string);
だと、何故か全て@pairs[0]に全文が入ってしまい、
@pairs[1]以降は空になってしまうようです。
>>207 $stringは本当にタブ区切りになってるのか?
209 :
205 :04/04/13 18:40 ID:???
何を区切りに使っているかは、良くわかりません。 shellのdfコマンド出力から一行抜いてきたstringです。 dfは何を使って区切っているのでしょう? Filesystem 512-blocks Used Avail Capacity Mounted on /dev/disk1s9 39870600 36823240 3047360 92% /Volumes/disk1 /dev/disk3s2 320144448 267850648 52293800 84% /Volumes/disk2
>>205-206 何も調べずに的外れなコードを書く奴もDQNだが、解答する奴もそれに劣らずイカレてるな。
>>205 > データから一部の数字だけ
とあるのにコードに数字が一切ないのは何故だ?
my(@data) = ($string =~ /([A-Z][a-z]+)/g);
print "$data[1], $data[2]\n";
お前の望むことはとりあえずこれで出来るが、本当にこんなことがしたいのか?
ざっと読んだだけだからよくわからんが $stringを切って配列に代入しようとしてるなら $stringをprintしてみれば何区切りかわかることだろ。
213 :
210 :04/04/13 18:50 ID:???
>>209 おいおい…(絶句)
もう何も言うまい。ほらよ。
my %data;
my @fileds = ('Filesystem', '512-blocks', 'Used', 'Avail', 'Capacity', 'Mounted on');
@data{@fields} = split / /, $string;
use Data::Dumper;
print Dumper(\%data);
>>213 …ハァ
split ' ', $string;
215 :
205 :04/04/13 19:00 ID:???
「現在、??? gbのうち??? gb使用されています」 みたいな感じの文章出力に使う用です。
知るかヴォケ
どうしてもperlでそれをやりたいんなら
>>1 やらテンプレのリンク先で基本ぐらい勉強して来い。
近年まれに見る痛さだ
普通にできるけど? WinXP+cygwin使用 $ df -h /cygdrive/c | perl -MData::Dumper -ne 'print Dumper split /\s+/' $VAR1 = 'Filesystem'; $VAR2 = 'Size'; $VAR3 = 'Used'; $VAR4 = 'Avail'; $VAR5 = 'Use%'; $VAR6 = 'Mounted'; $VAR7 = 'on'; $VAR1 = 'c:'; $VAR2 = '74G'; $VAR3 = '39G'; $VAR4 = '35G'; $VAR5 = '52%'; $VAR6 = '/cygdrive/c';
219 :
205 :04/04/13 19:40 ID:???
@data = split ' ', $string; で出来ました。ありがとうございます。
>188 187で質問した者です。 WEB動作環境は勤め先にあるので返答が遅れました。(アクセス制限がかかってるので) ここに書いた例が間違っていて、実物はちゃんとダブルクォート閉じてました。 いろいろやってみて、どうも A. CGIが出力したHTMをそのまま(連続で)表示した場合と、 B. それをソース表示して「保存」し、改めて表示した場合で 振る舞いが違うようです。こんなことがあるのかいなと思うのですが... A.B.のHTMでは、hrefを使って別のCGIを引数つきで呼んでます。 そのCGIを、サーバにあった ENV.PL(環境変数を表示するやつらしい)と換えてみると Bで表示される環境変数の多くがAでは出てこず、QUERY_STRINGもありませんでした。 (空文字列でなく、環境変数そのものが出て来ない) ひょっとするとPERLの問題ではないかもしれませんが、スレ違いなら誘導してください。 明日はサーバーを変更してやってみます。
こういうことじゃないの?
x <A href="test2.cgi?hogehogehoge">
o <A href="
http:// 〜/cgi-bin/test2.cgi?hogehogehoge">
>>220 当然、test1.cgiとtest2.cgiは同じフォルダにあるよね。
>221,222
回答ありがとうございます。
最初の例では詳しく書いていませんでしたが、どちらのCGIの参照も
http:// から記述してます。(厳密には場所は一段違うところ)
222もそういう主旨ですよね?
225 :
nobodyさん :04/04/14 19:03 ID:ALtQW+6b
>224 187,220,223です。 誘導ありがとうございました。実は、サーバー変更(自分のPCでAN HTTPD走らせて)したら 問題なく環境変数が渡りました。問題のあったサーバーはNT+IISです。 どうもCGI機能まわりのようなので、あちらで聞いてみます。お騒がせしました。
226 :
nobodyさん :04/04/14 20:57 ID:1L/HDnzJ
初歩的な質問なのですが、なかなか検索できずに こちらへ質問させて頂きます。 a.pl b.pl というスクリプトで、a.plからb.plへ標準出力で引数を渡し b.plで受け取った引数を加工して、同じく標準出力で a.plへ返すには、どうすれば良いのでしょうか? open(FD,"./b.pl data1 data2 |"); という感じでやってみたのですが、a.pl⇒b.plへ うまく渡されません。 どなたか、ご教授お願い致します。
open(FD, "| ./b.pl");
228 :
226 :04/04/14 21:38 ID:1L/HDnzJ
thx
format DATA = @<<< @<<<<<< @<<<<<< @<< $a $b $c $d . write; で出力される物を掲示板などのhtmlに出力したいのですがどうすればいいでしょか? print format DATA; みたいなアホな事してみましたがやはりエラーです。 ぐぐっても該当しそうな記事がみつからないし図書館のperlクックブックは 貸し出し中・・ 先輩方よろしければお助けください。
( ゚Д゚)ポカーン...
231 :
229 :04/04/15 15:19 ID:???
もしかして私はとてつもなくトンチンカンな事をしていますか?
>>229 format =
@<<< @<<<<<< @<<<<<< @<<
$a $b $c $d
.
write;
formatは半角スペースでレイアウトするからhtmlへ出力するなら
<pre>で囲んで使うとかしないと。
固定ピッチになって間が抜けて見えるから掲示板には向かない気がするが。
235 :
233 :04/04/15 22:16 ID:???
>>243 あ、writeでエラーになるってことね…。
format DATA =
@<<< @<<<<<< @<<<<<< @<<
$a,$b,$c,$d
.
$~ = 'DATA';
write;
フォーマット名を省略すればSTDOUTと見なされるんだからそんなことしなくても
237 :
nobodyさん :04/04/16 03:04 ID:OgytMPQd
無名ハッシュのキー一覧を得たいんですがどうやればいいのでしょうか? key $hash key %$hash と色々やってみたのですが 「keyの引数はハッシュじゃないとダメ」とエラーになります
238 :
nobodyさん :04/04/16 03:09 ID:OgytMPQd
すいません、解決しました
239 :
nobodyさん :04/04/16 03:19 ID:5vM41xl8
グローバル変数の値が初期値に戻ってしまいます なぜでしょう?
241 :
nobodyさん :04/04/16 03:27 ID:5vM41xl8
>>240 どのような記述をすると初期値に戻ってしまうのか
教えて下さいませ
初期値を代入した部分が再度実行されれば戻るでしょ。 そもそもそういう質問をすることからして何か勘違いしてる可能性もあるが。
243 :
nobodyさん :04/04/16 03:45 ID:5vM41xl8
まじめに答えてるわけじゃないしな 暇つぶしなだけ
245 :
nobodyさん :04/04/16 03:59 ID:2Due2Uz0
おはよ 漏れは今起きた
はいはい、寝ますよ( ´,_ゝ`)プッ
248 :
nobodyさん :04/04/16 05:09 ID:5vM41xl8
>>247 自力で解決しました。
役立たずさんは早く寝てください。
どうやって解決したかは書かないのな(プゲラ
>グローバル変数の値が初期値に戻ってしまいます >なぜでしょう? これでどう解決すればいいんだよ き違いはイラク行ってろ
Perlって変わってるよね。
そこがいいよね
解決してないけど苦し紛れに書いちゃったんだよ。察してやれよ
254 :
229 :04/04/16 10:48 ID:???
>>232 >>233 >>234 みなさん、ありがとうございました。うまく出力できるようになりました。
あれから起動hddが逝って換装後os再インストなどでご報告遅れてしまいました。
>>232 ん〜そうですねぇ。間が抜けてみえちゃいますねぇ。
一応管理用のデータ表示程度に出力させたかったので御の字なんですが
本当はこれ以外の出力のさせ方しらなかったのです。
純粋にプログラム初心者なperl初心者なのでhtmlタグの知識などもほとんどなかったり。
ほかにも出力の出し方探してみようと思います。どうもでした。
239 名前:nobodyさん 投稿日:04/04/16 03:19 ID:5vM41xl8
グローバル変数の値が初期値に戻ってしまいます
なぜでしょう?
240 名前:nobodyさん 投稿日:04/04/16 03:24 ID:???
>>239 そうなるようなコード部分があるから
241 名前:nobodyさん 投稿日:04/04/16 03:27 ID:5vM41xl8
>>240 どのような記述をすると初期値に戻ってしまうのか
教えて下さいませ
242 名前:nobodyさん 投稿日:04/04/16 03:35 ID:???
初期値を代入した部分が再度実行されれば戻るでしょ。
そもそもそういう質問をすることからして何か勘違いしてる可能性もあるが。
243 名前:nobodyさん 投稿日:04/04/16 03:45 ID:5vM41xl8
>>242 役立たずですね
256 :
nobodyさん :04/04/16 11:39 ID:TQSKBaOO
該当スレが見当たらなかったのでこちらに投稿させていただきます。
http://anonymouse.ws/anonwww.html ↑これみたいに、URLクリックしたら串刺さった状態で該当サイトに飛ぶようなスクリプト探してるんですが、
こんなのって普通に配布されてるんでしょうか?
だとしたらどういう検索ワードで探せばよいか教えてほしいんですけど・・・
すみません、225です。解決したので報告です。 お恥ずかしい初歩的なミスですが、?の後のクエリーを全角文字で書いてました。 受け側もデコードとかしてなくて、それでもクエリーはちゃんと読めて、思ったとおりの HTMを出力していたのですが、その時点で正常ではなかったようで、そこから飛ぶ 先の環境変数が壊れていました。 誘導してもらった先でも報告しました。報告ですのでマルチポスト御容赦。
plファイルに対してショートカットを作ってそのショートカットのリンク先の欄に コマンドラインオプションをつけてplファイルを起動したいのですが perlでコマンドラインオプション引数を受け取る方法がわからないのです。 たとえばデバック用にコマンドラインオプションであらかじめpl内の変数を 設定しておいてフラグを立てたり、logファイルの読み込みディレクトリを 変更したりしたいのです。 そういうことはできないのでしょうか?アドバイスいただければ幸いです。
262 :
260 :04/04/17 01:16 ID:???
返答どもです。 さっそくやってみます。
掲示板のlogファイルなどを相対パスではなく絶対パスで設定したいのですが 掲示板のファイル名取得コードが $file =~ /\/([\s\S]*)\./; となっている為、相対パスでlog/log.txtなどの場合は正常に取得できるのですが 絶対パスでH:/bbs/log/log.txtなどの場合は正常に取得できません。 正規表現を調べて $file =~ /*\/([\s\S]*)\./; $file =~ /*.\/([\s\S]*)\./; $file =~ /.*\/([\s\S]*)\./; $file =~ /.\/([\s\S]*)\./; みたいな事もやってみたのですが文法エラーだったり目的通りに動いてくれなかったりで 気づけば朝。 こういった場合どういうようにしたらいいのでしょうか?
なぜ絶対パスで設定したいのか理由を述べよ。 絶対パスが他のサーバのファイルだとしたら笑いますよ。
266 :
263 :04/04/17 10:34 ID:???
>>264 今自鯖立てていろんな掲示板設置して掲示板弄ったりして
変数やら制御構文やら関数やらを覚えてるんですがその過程で
掲示板のファイル名やlogなどのファイル名を一括表示できる
cgiを作りたいなと思いまして。
>>265 まさに今そのHP見ながら勉強させてもらってるんですが
無い知恵絞って出てきたのが上の文です。
これでいけるはずだ!と思って書いてみてもミスると次どうすればいいのかも
思いつけなくて・・。
>>266 プログラミングは
1 これでいけるはずだ
2 やっぱ駄目。
3 直して1に戻る。
の繰り返しなので、2で止まってしまう人は、お金出して他人に任せなさい。
268 :
263 :04/04/17 10:55 ID:???
>>267 分かりました。お金出して他人に任せ・・たくないので1にもどります。
とりあえず寝ます。ありがとうございました。また何か詰まったら質問させてください。
Perl勉強するなら、Perlの気持ちにならなきゃね。。。 最近、Perlの気持ちになってないヤシが多いよ。
喪前ら書き込むなら何かヒントくらい書かないとこのスレの趣旨として機能しないんじゃねぇの? そんなことない? $file =~ /.*\/([\s\S]*)\./; 俺ならこれに何か付け足す。 あとはガンガレ。
ヒントか? $
>>263 そのすぐ下の行に、
$file = $1;
っていう感じの記述は無いか?
そのコードの意味から調べてみろ。
あたしゃ適当にこんな感じ。 $file =~ /.*\/(.+)\./; /だけならいいけど、\まで対応すると一気に面倒なんだよなぁ。 全角とか半角カナが。(SJISね)
274 :
nobodyさん :04/04/17 14:20 ID:ksEVTWBi
GETやPOSTでデータを渡すとき、通常だと 「&」 … @pairs = split(/&/,$buffer); と 「=」 … ($name,$value) = split(/=/,$pair); でデータ切ると思いますが、これを別の文字にできますか? 「&」を「<>」とかに替えてみて、GETだと出来たんですが POSTで渡すとき強制的に「&」になるようでデータを渡せませんでした。 POSTの時「&」意外にする方法はあるのでしょうか。 お願いします。
./Hoge.pm ./Hoge/Foo.pm というモジュールを作り、 package Foo; use strict; @ISA = qw(Hoge); としたのですが、 Can't locate Hoge.pm in @INC (@INC contains: /usr/...とか色々 と怒られてしまいます。また、 use Hoge; としている./aho.plでも、useの行で BEGIN failed--compilation aborted at … と怒られてしまいます。 おそらくHoge.pmの位置というか、そのような物が悪いのだと思うのですが、 どう直せばいいんでしょうか? らくだ本では、Hoge::Fooは./Hoge/Foo.pmを表すって書いてあったと思うんですが…。
>>276 #--- ./Hoge.pm ---
package Hoge;
sub new { return bless {}, shift }
1;
#--- ./Hoge/Foo.pm ---
package Hoge::Foo;
use base 'Hoge'; # base.pm のヴァージョンが古いとコケる場合がある
# use Hoge; push @ISA, 'Hoge'; # その場合の代替策
sub foo { print 'foo!' }
1;
#--- ./script ---
#!/usr/bin/perl
BEGIN { print map "[$_]\n", @INC } # @INC に . が存在するか確かめる
use Hoge::Foo;
Hoge::Foo->new->foo;
__END__
package Hoge::Foo; が package Foo; となっていました…。 フルパスというか、祖先も全部書かないと駄目なんですね。 ありがとうございました。
>>279 ./Hoge/Foo.pm の中身は package Foo; でも package Bar; でも
構わないが、use は実際のディレクトリ構造に従って Foo.pm を
探すので、./Hoge 内に置いている限り use Hoge::Foo; とする
必要がある。
281 :
nobodyさん :04/04/18 16:47 ID:P05Ai4P1
ウェブ製作から流れてきました 当方レンタルCGIを運営しておりまして 某スクリプトを使用させていただいているんですが(現在配布中止) なんか背景に画像を設定しても出ないというバグが発生してるんです。 $btagu = '<BODY BGCOLOR="' . $para[8] . '" BACKGROUND="' . $bground . '" TEXT="' . $para[10] . '" LINK="' . $para[11] . '" ALINK="' . $para[12] . '" VLINK="' . $para[12] . '">'; 画像はちゃんとアップされてて、画像を背景にしたはずのページのタグにも ちゃんと画像のファイル名が入っているのですが画像が表示されないで 色が出てきてしまうんです この状態だと、画像が入ってた場合色よりも画像のほうが優先されるはずなんですが されないんです。 画像ファイルが入ってた場合に色よりも画像を優先させることはできませんか??
>>281 ちなみに、まったく同じHTMLタグで.htmlファイルとしてアップすると
背景は表示されるんです
それが、掲示板などのCGIファイルになると表示されません
283 :
nobodyさん :04/04/18 16:59 ID:gbPENzjB
結局背景を画像にしたいなら、わざわざ色を指定する必要なくね?
画像オフにされている時に影響するから、背景画像も背景色もつけておくのがエチケット。 >281-282 パーミッション関係が怪しいと見た。 >282は全く同じフォルダで試してる?
tu-ka,Perlのコーディングと関係ないじゃん。 全く同じHTMLで結果が異なるなら、Perlのコーディングの問題じゃありません。 Web製作板向けですのでお帰りください。
>>281 お前か。
bodyタグを二つも書いてたやつだろ?
帰れ帰れ。
287 :
nobodyさん :04/04/18 17:54 ID:wgfpZXEV
環境はレンタルサーバーで、おそらくLinux+Apache+perl5です。 一定時間(24時間とか1週間とか)ごとにスクリプトを自動実行させたいんですが、 perlから可能なんでしょうか。 ここかモジュールスレかCGIか迷ったんですが、perlからの呼び出しなので とりあえずここで。
>287 アクセスがあった時に前回の自動実行から一定時間以上過ぎていたら実行をさせる。 これを聞いてイメージが湧かないなら無理。
>>288 レスありがと。
静的なHTMLに一定期間ごとに情報を負荷していくCGIなので、CGI呼び出しは
一般ユーザーからは行われない。自分でCGI叩くなら自動じゃなくて手動だ(笑)。
サーバーの負荷のことを考えると、SSI埋め込みとかimg埋め込みで毎回CGI
起動するのはやりたくない。
放置しておいても更新されていくようにしたいんだけど・・・無理かな。
>>289 perlには関係ありません。
Linux板でも行って聞いてください。
>>290 perlから呼び出したいし、自宅のレスト環境はWindowsだから、環境にあまり依存
しない汎用モジュールでもないかな・・・モジュールスレいったほうがいいですか?。
ないって。 レンタルサーバじゃまず無理。 どうしてもやりたければ、Windowsにタイマー仕込んで、一定期間ごとにCGI呼びにいかせろ。
>>292 ・・・ないよなあ。そうは思ったが、この世界、物好きが組んでたりするんで、
わずかな可能性にかけたかった(笑)。
おとなしく別の手を考えます。
でも「いや、できるぞ」って方がいらっしゃったら情報よろしく。
バカだねぇ・・・ 自動実行の定番ぐらい(ry
>289 my $time = time(); while(1){ if((time() - $time) >= 3600){ 処理; $time = time(); sleep 3599; next; } sleep 1; } # 共有鯖でやるべからず
っていうか判定つけずに sleep 3599 しとくだけでええやん。
298 :
nobodyさん :04/04/18 19:46 ID:2RoBAPGK
ある変数が無名ハッシュかどうか判定するにはどうすればいいのでしょうか?
レンタルサーバだと、1分くらいで強制終了させられるところも少なくないと思われ。
ref();
>>299 いや30秒程度だろ
まぁ普通は
>>296 みたいなキティなソースは頭に浮かばんね
cron使えよ
302 :
nobodyさん :04/04/18 21:13 ID:gbPENzjB
>>298 無名かどうかを判定することは出来ない。
ロクに意見も出ないのに、口先だけは一人前のスレですね。
1. フォルダの中身にあるファイル名を 表示させるcgiをつくりたいのですが。 2. こんな風にやってみた。 #!/usr/local/bin/perl $folder = ./hoge/ opendir(DIR, '$folder') or die; @file = sort readdir(DIR); closedir(DIR); print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<P> フォルダの中身 </P>\n"; foreach (@file){ print $_, '<BR>'; } print "</HTML>\n"; exit(0); 3.普通にエラーになる・・。 改善方法ありますでしょうか・・。
どんなエラーが出たかわからないのでカンだけで回答するが とりあえず2行目はいきなり syntax error になるだろうな
>>305 そりゃあエラーになるわな。
基本からやり直してください。
とりあえず2行目にエラー、3行目にミス(エラーは出ないが期待通り動かない)がある。 何を見て書いたコードなのかは知らないが、せめてエラーメッセージの確認ができる環境で試すべし。
309 :
305 :04/04/19 14:24 ID:???
えっと、エラー確認してみたんですが これで一応syntaxはOKになるんですが表示されません。。 #!/usr/bin/perl $folder = "./hoge/"; opendir(IN, "$folder") or die; @file = sort readdir(IN); closedir(IN); print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<P>フォルダの中身</P>\n"; foreach (@file){ print $_, '<BR>'; } print "</HTML>\n"; exit(0);
>>309 俺のところではそのコードでちゃんと動く。
コーディング以外の部分を疑うべきだろうな。
例えばディレクトリのパーミッションとか。
ごめん。まじで聞いてくれますか? フォルダ名間違ってた・・・。 ごめんなさい。逝ってきます。
>>305 〜 or die; とするぐらいならどうしてもう一歩すすめて 〜 or die "適当なメッセージ: $!"
としないのか...
>>313 print "Content-type: text/html\n\n";
の前に鰓が出て、「ぷりめちゃ〜」って出るからなんじゃなぁい?(w
初心者的質問です、すいません! @array を : で2つに分けて片方だけ表示したいのですが。 下記のように記述してみましたが、できませんでした。 書き方が違うのだと思います。 教えていただけませんか? while (@array){ ($hour, $min) = split (/./, "$array[$_]"); } print "Content-type: text/html\n\n"; print "<HTML><BODY>\n"; foreach (@array){ print $hour[$_],\n; } 今のままだと動作がものすごく遅くて 結局最後にエラー表示がでてしまいます。 一応、文法的な間違いはないようですが・・・・・・。
あ。1箇所入力間違えていました。split の区切り文字は「:」です。
>>315 >@array を : で2つに分けて
意味がわからん
>while (@array){
>($hour, $min) = split (/./, "$array[$_]");
>}
これはどういう処理してるつもり?
318 :
nobodyさん :04/04/19 17:17 ID:ZjO/sTlt
例えば、 たかし たろう こういち さぶろう よしゆき みたいなテキストファイルがあって、 それを読み込んで 「ぬるぽ」をHTMLから送信すると ぬるぽ たかし たろう こういち さぶろう よしゆき 見たいな感じにテキストファイルの一番上の列に 書き出すことはできますか? またできるのでしたらその方法を教えていただけますか?
>>315 print "Content-type: text/html\n\n";
print "<HTML><BODY>\n";
foreach (@array){
($hour, $min) = split (/:/);
print $hour,"<br>\n";
}
322 :
nobodyさん :04/04/19 20:05 ID:FJ2iv18N
cgiが起動したら、カレントディレクトリにあるバイナリーファイルを読み込んで、 そのまま標準出力にバイナリーデータとして返すにはどうすればよいのでしょうか。 読み込むにはbinmodeを呼び、通常通りreadにて$???で受け取ってよいのでしょうか、 またバイナリーをアウトプットする関数名を教えて下さい。
つーかよ、GETしたhtmlを分解して調べるなんて、なんつーか原始的(アナログ的)だよな
最近掲示板のパスが漏れて(?)改ざんされました。 とりあえずパスワードを変えることでしのいだのですが、 管理画面のログをとりたいと思っています。 CGIをいじったことはあまりないのですが、 管理画面(admin.cgi)の2行目くらいにreqireでアクセス解析のCGIを指定してやればいいのでしょうか? よろしくお願いします。
327 :
323 :04/04/19 20:29 ID:???
スマン・・・ 誤爆した
328 :
nobodyさん :04/04/19 21:10 ID:BDbOGV6P
初心者質問です。 perlで掲示板を作成しました。 掲示板の内容はログに書込まずにDB(PostgreSQL)に書込まれるようにしました。 出力するときにDBから取り出して、値を $変数 =~ s/\r/<br>/g; という処理にして表示させると、改行はされますが、改行位置に<br>が付いた状態で表示されて しまいます。<br>を非表示にして表示できないものでしょうか?
>>322 open(FILE,"ファイル名");
binmode(FILE);
binmode(STDOUT);
print <FILE>;
close(FILE);
>>328 それはperlに関係ないだろ。
HTMLレベルの話だし、自分で作った掲示板ならわかるはず。
>>325 とりあえず、アクセス解析ぐらい(admin.cgi)とやらに自力で書き加えれる程度の知識つけて
実際に書き加えてみろ。
そんで、うまく動かないとか、なんか困っ時にまた来なさい。
話はそれからだ。
>>328 WINDOWSの改行コードは\r\n
\r\n → s/\r/<BR>/g; → <BR>\n
もう解るね?
>WINDOWSの改行コードは\r\n あいまいだな
$変数 =~ s/\r/<br>/g; $変数 =~ s/</</g; $変数 =~ s/>/>/g; ってなってて <pre> で囲まれてるんじゃない?
336 :
nobodyさん :04/04/20 21:56 ID:yCtk22ce
x between 1 and 100 をperlで書く場合は ( x >= 1) and ( x <= 100 ) と書けば動きますが、もっとスマートな書き方ってあります?
337 :
nobodyさん :04/04/20 22:14 ID:Z+bRhQSh
()はいらねー
FREEであったフォームメールのcgiを利用しようと思ったんですが 控え用にあるccが機能しません。 管理者用に届くメールのccに書いたほうのメールアドレスが 書いてあることには書いてあるんですが届かないのは どんな理由が考えられますでしょうか?
メール鯖の管理者に聞いてみたら?
>>338 作者に聞いたら?
このスレの話題じゃない
それだと $x = -1 のときも true になりそうな
int(($x-1)/100) == 0
&between(x,0,100)
1と100の間;
346 :
nobodyさん :04/04/21 13:55 ID:hvmubjIu
for (1..1000){ open F,'test.txt'; flock F, 1; $data = <F>; close F; $data++; open F,"+<test.txt"; flock F, 2; truncate F, 0; print F $data ; close F; } これを、2プロセスで実行すると、+2000になる予定ですが、+2000になりません。 printの前に seek F,0,0; を入れると期待通り+2000になるのですが・・・。 どうしてでしょうか?
>>346 カウンタファイルを読むのと書くのをそれぞれ別のロックにしたら
相手の操作に割り込まれ放題だから2000にならないのは不思議
でもなんでもないが、seekを入れただけで2000になるのはとても
不思議だ。オレにはわからん。
use strict refs 下で open() に渡すファイルハンドルに変数を使うにはどうしたら良いのでしょうか。 my $fh = 'FILE'; open($fh, '< file.txt') or die $!; のように。
351 :
nobodyさん :04/04/21 22:29 ID:dqfm18bp
$change = '$data'; $data = "example"; この時にprint "$change";とすると$dataと出力されてしまうのですが、 この時exampleを出力させる様にするにはどのようにしたら良いでしょうか? どなたかご教授お願い致します。
352 :
351 :04/04/21 22:29 ID:???
すみません、$changeを使ってです。
353 :
336 :04/04/21 22:30 ID:???
んー、Perlだと結構いろんな書き方があるから油断できないんだけど、 ( $x >= 1) and ($x <= 100 ) に関して言えば、可読性からもこれでいいのかな。 レスくれたひとサンクス。
釣堀はここではありませんよ
>>351 $change = "data";
$data = 'example';
print $$change,"\n";
$change = \$data;
$data = 'example';
print $$change,"\n";
素直に eval 使えばいいんじゃないだろうか。 $change = '$data'; $data = "example"; print eval $change;
馬鹿に危険な事教えるなよ
358 :
351 :04/04/22 00:03 ID:???
>>355-356 早速組み込んでみた所、期待通りの動作をしました。Perlにもポインタの様な物が実装されているんですね。
これを機にevalの使い方も覚えました。ありがとうございました。
質問です。 いくつかのファイルをループ処理でまとめて読み取り、 $dat[ファイルNo.][n行目] のように一つの2次元配列に格納しようとしています。 @dat[$i] = <FH>; openした直後に上記のようなコードを入れましたが、 どうも配列は1次元のままで、各ファイルの一行目しか配列に格納してくれませんでした。 どなたか2次元で格納させるヒントをご教授ください。
@{$dat[$i]} = <FH>;
Perl に無名スカラーってありますか? 関数やサブルーチンからの戻り値をそのまま return する時に return \(value()) とかやっているのですが、 例えば複数の値の場合に return [values()] で配列のリファレンスを返せるように、 無名スカラーがあれば良いのになあと。
362 :
359 :04/04/22 00:30 ID:???
>>360 動作確認しました!
即レスありがとうございました!
では再び勉強ROMに戻ります。
363 :
361 :04/04/22 00:31 ID:???
戻り値のリファレンス返すのでそのままではありませんね……。
return \@{[values %ハシュ変数名]}; かな?
>>361 無名スカラーって無名スカラーリファレンスってことか?
ハッシュや配列と違って、無名スカラーリファレンスをを作る構文的なサポートは無い。
苦肉の策だが my $anon_sref = do{ my $o; \$o } などとしているな。
しかしこの場合は\(value())ではいけないのか?何か不満か?
いえ、機能的な不満は全く無いですが、個人的な好みの問題のようなものです。 無いのであれば、今まで通りにする事にします。
$IMAGEに書かれている文字を、sprintfで文字を3つに(1.1.残り)に分けて、 はじめの文字がaだった場合とそれ以外で読み込むフォルダを分けたいと 思っています。 以下のように記述したのですが、エラーが出てしまいました・・。 どこ違っているのかわからないので、指導お願いします〜。。 $IMAGE = sprintf("%01d/%01d/%04d",$a,$b,$c); if ($a eq a){print "<IMG src=\"image/$a$b$c.gif\">; }else{print "<IMG src=\"img/$a$b$c.gif\">";} また、1.1.残りと分けたいのですが、画像ファイルの名前が4〜6文字とランダムなのですが、上の書き方だとだめなんですよね・・? どうすればいいんでしょうか?
>>325 まだ見てるか?
最近アクセス解析CGI作ったから require で呼び出せるように書き換えて
提供してやろうか?
いるなら捨てアドさらせ。
さらしてから書き換えに2〜3日掛かるからその後送ってやる
>>367 print $IMAGE =~ /^A/ ? "<IMG src=\"image/$IMAGE.gif\">" : "<IMG src=\"img/$IMAGE.gif\">";
>>367 >$IMAGEに書かれている文字を、sprintfで文字を3つに(1.1.残り)に分けて
使う関数が目的に合っているかよく調べろ。
>$IMAGE = sprintf("%01d/%01d/%04d",$a,$b,$c);
これじゃあ$a,$b,$cを指定のフォーマットにして/をはさんだ文字列として
$IMAGEに代入する式だ。
こんなのでもいいだろ。
$a = substr($IMAGE,0,1);
$b = substr($IMAGE,1,1);
$c = substr($IMAGE,2);
371 :
369 :04/04/23 21:12 ID:???
あ、質問よく読んでなかった。
372 :
367 :04/04/23 21:23 ID:???
>>370 書きながら、これだけ代入が逆なのか・・と思いながら書いてました。
substrの意味を調べて納得です。
助かりました。。
373 :
nobodyさん :04/04/24 12:42 ID:ftCx7p61
Pod を書くのに日本語つかってもいいですか?
なんかその質問前にもあったぞ。
375 :
373 :04/04/24 14:07 ID:???
ポッキーあげるから、教えてくださいよ〜
377 :
373 :04/04/24 21:14 ID:???
ありがとう!!! お陰で彼女が出来ました
378 :
nobodyさん :04/04/25 11:23 ID:KCQtln8X
モジュールって、相互に宣言しても、大丈夫ですか?? 例えば、MOD_A.pm と MOD_B.pm を自作して MOD_A.pm 内のソースで use MOD_B; を宣言 MOD_B.pm 内のソースで use MOD_A; を宣言 cgiプログラムを作ってるんですが、そのcgiプログラムの中で use MOD_A; use MOD_B; とかやりたいんですがどう? もっとさらに言うと、MOD_A.pm の中で自分自身を use MOD_A; とかやっても大丈夫ですか?
そんなことを聞くようなやつがモジュールなんか作るな
やってみればわかることを聞くヤシっているよね
cgiにjava scriptを組み込もうとしているのですが、500エラーがでます。 HTMLでの " は \" になることは知っているので、そうしたのですが、 ! や ? の記号の前にも \ が必要なのですか?それとも他の記号なのでしょうか?
まずはソースを出せ。 話はそれからだ。
>>382 cgiで文字列の出力をしようとしているのですが、500エラーがでます。
" は \" になることは知っているので、そうしたのですが、
! や ? の記号の前にも \ が必要なのですか?それとも他の記号なのでしょうか?
>>382 500エラーなんてものでデバッグしてることからして論外。
まずはちゃんとした環境を用意してから出直してきてください。
386 :
nobodyさん :04/04/26 16:42 ID:NLGfQi9F
/private ディレクトリに、Basic認証もしくはDigest認証をかけて /private/secure.cgi へアクセスをした場合に、ユーザ名・パスワードを引数として 渡すには、どうやったら良いのでしょうか? どなたかご教授、お願い致します。
ユーザ名は環境変数 REMOTE_USER で引き渡されます。 パスワードを CGI に引き渡すのは 少なくとも現行の CGI というインタフェースを使う限りでは 原理的に不可能です。 これは Perl コーディング上の制限ではなく CGI というインタフェース仕様上の制限です。 CGI 以外の方法なら、 例えば mod_perl を使って PerlAuthenHandler を組むやり方であれば Apache Request オブジェクトの get_basic_auth_pw() メソッドを使って パスワードを取得することができます。
388 :
386 :04/04/26 17:18 ID:NLGfQi9F
>>387 レスありがとうございます。
REMOTE_USERでのユーザ名引き渡し、確認できました。
パスワードはやはり無理ですか...
ユーザ名だけを利用して(重要な部分へは再認証という形で)
対応していきます。
389 :
nobodyさん :04/04/26 17:45 ID:8MkOGNrL
DBD::Pgを使ってDB接続を試みているのですが、 エラー処理ができなくて困っております。 例えば、 my $dbh = DBI->connect("dbi:Pg:dbname=$dbname;port=$port", $user, $password, {RaiseError => 1, AutoCommit => 0}) || print "error"; これで$dbnameが存在していないものを指定すると、printにいってくれず、 Internal Server Errorが出てしまいます。↓error_log DBI connect('dbname=--;port=--','',...) failed: FATAL: database "--" does not exist at --.cgi line -- ご教授いただけませんでしょうか。 宜しくお願いします。
>>389 dieしてるのでevalで捕まえられると思うよ。
>>388 横槍入れるようだが、同じパスワードで何回認証しても意味ないと思うんだが。
ユーザー名は追跡の為に追うこともあるだろうけど。
>>386 ユーザ名とパスはリクエストヘッダAuthorizationで渡されるから拾えばいい。
例えば.htaccessで
RewriteEngine on
RewriteCond %{
HTTP:Authorization} ^(.*)
RewriteRule test.cgi test.cgi$1 [e=HTTP_CGI_AUTHORIZATION:%1]
($scheme, $data) = split (' ', $ENV{'HTTP_CGI_AUTHORIZATION'});
if ($scheme eq 'Basic') {
$data = &decode_base64 ($data);
($ENV{'REMOTE_USER'}, $ENV{'REMOTE_PASSWORD'}) = split(':', $data);
}
sub decode_base64 {
my ($str) = "@_";
my ($res, $len) = "";
local($^W) = 0;
$str =~ tr|A-Za-z0-9+=/||cd;
if length($str) % 4;
$str =~ s/=+$//;
$str =~ tr|A-Za-z0-9+/| -_|;
while ($str =~ /(.{1,60})/gs) {
$len = chr(32 + length($1)*3/4);
$res .= unpack("u", $len . $1 );
}
return ($res);
}
print "Content-type: text/html", "\n\n";
print "$ENV{'HTTP_CGI_AUTHORIZATION'}<br>\n";
print "$ENV{'REMOTE_USER'}<br>\n";
print "$ENV{'REMOTE_PASSWORD'}<br>\n";
>>389 RaiseError => 1 を設定するのを止める。つーかコピペプログラマは氏ね
>>392 ちょっと間違った
RewriteEngine on
RewriteCond %{
HTTP:Authorization} ^(.*)
RewriteRule test.cgi test.cgi [e=HTTP_CGI_AUTHORIZATION:%1]
sub decode_base64 {
my ($str) = "@_";
my ($res, $len) = "";
local($^W) = 0;
$str =~ tr|A-Za-z0-9+=/||cd;
$str =~ s/=+$//;
$str =~ tr|A-Za-z0-9+/| -_|;
while ($str =~ /(.{1,60})/gs) {
$len = chr(32 + length($1)*3/4);
$res .= unpack("u", $len . $1 );
}
return ($res);
}
395 :
386 :04/04/26 20:29 ID:???
>>394 そういう方法もあるんですね。
とても参考になりました。
ありがとうございます。
396 :
nobodyさん :04/04/26 21:22 ID:BWwI4BSi
このスレでPerlで作ったCGIの質問してもいいのかな… cgiでcss文書を吐き出したいんですが、Content-type:text/cssと最初につけておけばよいのでしょうか? infoseek iswebでこれをやると広告がついてきてcssとして使えなくなるんですが、普通にうpしたcssファイルはhttpでgetできます。 この差はCGI作り手側のミス?それとも拡張子cgi=広告付加とかCGI作り手側じゃどうしようもないものですか?
鯖の仕様なんてそれぞれ。鯖缶に問い合わせろ。
>>396 スレ違い。
Perl以外で作っても成立する質問でしょ。
>396-397 そうでしたか…失礼。
400 :
nobodyさん :04/04/27 17:46 ID:m4JuDEBr
perl cgiで開きポートをチェックする方法ってありますか?
基本的に総当りで調べるしかないな
402 :
nobodyさん :04/04/27 17:56 ID:m4JuDEBr
掲示板で80と8080くらいわかればいいんですけど… できるだけ早く処理できる方法があったらお願いします。
reject が帰ってくれば早いが、timeout を待つことになると時間がかかるな。 できるだけ待ち時間を短くするための工夫としては、 ソケットを non-blocking で開いて並列で処理する、ぐらいか。
404 :
nobodyさん :04/04/27 20:01 ID:D2O5MFhm
サブディレクトリにあるhtml文書を読み込んで表示するプログラムは、下ではダメなのでしょうか。 print "content-type: text/html\n\n"; open(TEST, "sub/test.htm"); while (<TEST>) { print $_ ; } close(TEST); exit; ローカルではうまくいくのですが、サーバーに上げて実行してみると上手くいきません。
エラーをトラップして調べる癖をつけないといつまでも聞くことになるぞ。 それに「うまくいかない」で読んでるやつがどうなったかわかると思うか?
掲示板のログが飛ぶ事が多いので 先頭にtime値を書き込んで、新しい方を読み,古い方に書く 2重ファイル方式を取入れたのですが、ログが消えた時はそのままでした。 flock考やperlメモのやり方でもたまに飛ぶので(ローカルでは書き込みプログラムを何個走らせても飛ばないんですが…) バックアップ的にこのやり方を導入したいんですが、アドバイス願えないでしょうか?
ローカルテストは本当にしたか? 並列で処理しないとロックの検証にはならないよ。 でなきゃ鯖の問題だな。
どうせ、なんちゃってロックだろ。笑ってやるからロックのところ貼り付けてみろ。
time値の新しい方と古い方って、アクセス集中すると 同じ値になるだろ
秒単位だからね
412 :
404 :04/04/28 00:18 ID:2okML1Hb
>>404 はPerlのパス名のタイポでした。お騒がせしました。ごめんなさい。
ですがまた問題が発生しました。
sub/test.htmから<n月>という文字列がある行をマッチさせたいのですが、下のようにすると
ローカルではマッチするんですが、サーバーに上げるとマッチせず。。。
print "content-type: text/html\n\n<html>";
open(TEST, "sub/test.htm");
while (<TEST>) {
if ($_ =~ /<.*?月>/) {print $_;}
}
close(TEST);
print "</html>";
exit;
4行目を
if ($_ =~ /<(.*?)月>/) {print $_;}
に書き換えるとローカルでもサーバーでもマッチします。なぜでしょうか。
>>412 そりゃ初耳だ。
こんな世知辛い世の中に笑いをありがとう。
和んだよ。
>>414 君は404かい?
それなら俺も大笑いしてあげる
417 :
404 :04/04/28 01:33 ID:???
>>414 は私ではありません。とにかく、誘導ありがとうございます。
むこうの過去ログを見てみて、それでもわからなかったら質問しようと思います。
スルーされるんじゃないかと心配しておりました。
回答ありがとうございました。
>>408 5台くらいで鯖マシンに(perlの)duke撃ちまくってテストしました。
>>409 現在携帯からなので無理ですが
perlメモのロックの部分とflock考えの奴をそれぞれやりました。
>>410 そうでした…
ただifの条件に合わないと、elseで指定されている方を読み込みますし大丈夫なのでは?
サイトの方は日に200くらいの書き込みで、そんなに多くは無いんですが、
2,3ヵ月に1回は飛んでしまいます。
逆にtopのカウンタは2重ファイルってだけで
ロックは使って
>>418 そのぐらいのアクセスでログが飛ぶなんて不思議。
コードそのものに問題があるような気がするが。
ロックはしっかりしてても、サーバ自体がファイルオープンしたまま 落ちたりしたらログ飛ぶわなあ。
>>419-420 そういう可能性もあるんですね。
読み書き両用でopenして…と思いましたが、どっちみちサイズを0にした時点で落ちたら意味無いですよね…
ツリー型なので700件残るようにしてますが、少し多いづしょうか?サイズは130KBくらいです。
>>421 だったらhoge.newに新しい内容作ってからrenameするとか
やり方はいろいろありそうなものだが。
>>422 なるほど…
こっちの方が楽ですね。その方法でやってみます。
424 :
nobodyさん :04/04/28 16:05 ID:S7OIBKMs
#!/usr/bin/perl `halt`; ---------------------------------------------- 以上のスクリプト実行しても鯖ダウン出来ませんでした。 どうやったら鯖ダウンできますか?
rootがいるじゃろ?
426 :
nobodyさん :04/04/29 00:19 ID:DqcSI5IG
質問ですm(__)m index.htmlがあるとしてこの中の一部にxxx.cgiを表示したいのですが どぅやったら表示出来るのでしょう? 表の中に表示させたいのですがインラインフレームしかありませんか?
Perlとどこに関係がありますか? 板違いです。
CGIの拡張子を .html 設定にするだけだろ
案外、本気で答えてたりしてなw
逆の方法もあるじゃん。 htmlをcgiに取り入れたら?
(´-`).。oO(無理すんなよなぁ・・・)
use Pgからuse DBIに切り替えプログラミングしているのですが、 use Pgのgetvalueみたいなものはuse DBIにないのでしょうか。 すみませんがご教授いただきたいです。
fetch
438 :
nobodyさん :04/04/30 03:25 ID:SiN+gHBL
>>438 `/usr/bin/wget -opt 'URI'`
なんて恐ろしい事をしているんだ。 俺には真似出来ねえ。
442 :
442 :04/04/30 17:56 ID:G+Ai2Hl9
perlでxmlを読み込もうとしています。 このようなxmlファイル(test.xml)があったとして、 ------------------------------------------------- <?xml version="1.0" encoding="Shift_JIS"?> <data> <member num="01"> <name>AAA</name> </member> <member num="02"> <name>BBB</name> </member> </data> ------------------------------------------------- その中から、「AAA」と「BBB」を取り出すには perlどのように書けばよいのでしょうか? ↓から続きがかけません・・ ------------------------------------------------- #!/usr/local/bin/perl use XML::Parser; : : : print $name01; #AAA print $name02; #BBB -------------------------------------------------
444 :
442 :04/04/30 18:51 ID:???
445 :
438 :04/04/30 20:25 ID:???
どもです。 >439 で対処できました。 必ず直前で変数に固定値を代入するので、変数るのを納得しときます
>445 バッククォートでは変数展開とかがかかるので、\& が & になった状態でシェルに渡されてる。 なので、\\& にしても通るとは思うんだが、>440 のようにシングルクォートを使う方が素直だと思う。
447 :
nobodyさん :04/04/30 22:54 ID:5VEFp/rm
質問です。既出だったらスマソ。 ポートチェックってどうやったらできますか? 掲示板の荒らし対策に80と8080のチェックしたいんです。 ググってもいいページが見つからないんで・・・ できればスクリプトごとお願いします。
>>447 Socket使って、接続できたらあいてるってことでいいんじゃ?
>>448 普段perl使わないんで実装方法が・・・
>447 = >400 ? とりあえず Socket.pm のマニュアルでも読めば。
Socket使うらしいということまではわかったんですが構文や応答の有無の判別がわかりません・・・
453 :
nobodyさん :04/05/01 01:09 ID:fGFxpvHE
,.. -──- 、 / . : : : : : : : : : \ /.: : : : : : : : : : : : : : ヽ ,!::: : : :,-…-…-ミ: : : : :', {:: : : : :i '⌒' '⌒' i: : : : :} {:: : : : | ェェ ェェ |: : : : :} . , 、 { : : : :| ,.、 |:: : : :;! ヽ ヽ. _ .ヾ: :: :i r -ニ-┐ | : : :ノ } >'´.-!、 ゞイ! ヽ 二゙ノ イゞ‐′ | −! \` ー一'´丿 \ ノ ,二!\ \___/ /`丶、 /\ / \ /~ト、 / l \ / 、 `ソ! \/l::::|ハ/ l-7 _ヽ 教 え ろ や ? あ ? コラ ?
454 :
nobodyさん :04/05/01 01:10 ID:fGFxpvHE
_,,,,,,,, , - ' ゙ `` ‐ 、_,,,,, ,r' /=ミ / 彡ll',''´ . / 彡lll !-- .、 ,、、、、,,, 彡lノ l,,,,,__ / ___ 'r''゙ヽ . |`゙'' ./ `'゙'''" .〉,l | |. ,' // . ',. ,' , r' . ゙, ゙'ー ‐` l | ゙、''゙ ,,、二''‐ ノ l、 ''''''''7'ヽ ''' / /`〉`゙T'''''''''' l ` 、,,,,、- ' " / /.| | . | | .l i / ./ | | | | | l / ./ .| | . | | | l / / | | | | | ', / / l .l
455 :
nobodyさん :04/05/01 01:10 ID:fGFxpvHE
,..-──- 、 /. : : : : : : : : : \ 冒 /.: : : : : : : : : : : : : : ヽ l l ,!::: : : :,-…-…-ミ: : : : :', ./〜ヽ{:: : : : :i '⌒' '⌒' i: : : : :} _______ |__| {:: : : :.| ェェ ェェ |: : : : :} / . .|| d.|| { : : : :| ,.、 |:: : : :;! < とんちゅーみねーりらろっとおブ /| of||_.ヾ: :: :i r‐-ニ-┐| : : :ノ \ |  ̄ -!、 ゞイ! ヽ 二゙ノ イゞ‐′  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ | −! \` ー一'´丿 \ ノ ,二!\ \___/ /`丶、 /\ / \ /~ト、 / l \ / 、 `ソ! \/l::::|ハ/ l-7 _ヽ /\ ,へi ⊂ニ''ー-ゝ_`ヽ、 |_厂 _゙:、 ∧  ̄ ,ト| >‐- ̄` \. | .r'´ ヽ、 ,ヘ \_,. ' | | 丁二_ 7\、|イ _/ ̄ \ i \ ハ |::::|`''ー-、,_/ /\_ _/⌒ヽ
456 :
nobodyさん :04/05/01 01:11 ID:fGFxpvHE
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●死 ね●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
457 :
nobodyさん :04/05/01 01:13 ID:fGFxpvHE
!llヾ i1llllllii ,..-‐''" ̄~゙" ̄ ̄ミヽ──ー, ;;ll,;:" i ヽ.、ヽ;=、/ ,/ l ヽ ゙i、 ゙、:、゙、;; / :' l : i !. ゙、 !l !,゙, ゙:, l, ; . ; i !i : :, }i!、 ', ! l l :!:.;:'; i ミィは最強なんだよっ♪ l.;.; : ;: l liヾ、 , .;}, Lj-ヾ ;.; l l :l ;: : l j!;.;; : ;: }:、ゝ、ヾ、゙ jリ.,. ..,,ヾj : .:rl ; : .! !l; ;; .; ; l. ,,,,、ヾ、ツレ' i;;';;;;゙jL; ゙:,゙:, ; ; l |,:l;, ':, ; ;l,,l!i';;゙;, ヾ-'',j ; ;;' l.゙i、; l | ;l;':,', ;, '!ヾ.`''' , ,ォj,;:'' ; !l;:; l | ;.!'l !゙,ヾ:「~;,、 ー ノi'' ;' ,ノ;; ,l ;l.; i ;.!l゙;ヾ,ヽ、;, `''ー ..,,_,. ::'ノ;.},,. 、,;'"; ;:; ;l ;'i ; ! ; i! ヾ; :、リ,, -::''"::l::i!::/;'.j、ヽ、j:::::ブヽ、! ;' !,' i ; ;; rヾ,:,゙; l:::::::::::::ヽi!フ;ノl'ヽ、,.ノ:;:" ヽ, ,:'.;',' j,.、!'ヾ‐- ゞ、;゙ト、;::::::::::ソ/::! .|:i ゙!, ,' ,'.;,rヾ .ヽ ヽ......:::ヽi!'::゙ヾ-''リ^7 l/-、 .jヽ ,' ;;'.;r゙、 ヾ、j ゙"::::::::;;:::l:::::::::;メ:::::!. i ゙i ,;^ヾ;, . ,' ,;',,'.;'i、'l'┘:::::::::::::::l':;:::!::::::::::::!::;' !. i!,.:;i ;, .lヾ:;, ,:' ,' //,! ゙':::::::::::::::::::::!ノ::::.!:::::::::::;,l. !. ,:';;::|, :;: 'l ゙;,゙; ;' ,;:'/ ;'/ :::::::::::::::::::::i"::::::.|:::::;,;;'イ l , ':::::::|,: ; ! ヾ:.,
458 :
nobodyさん :04/05/01 01:13 ID:fGFxpvHE
i 、 :. ヽヽ_,,.....、,,,....._;/ ,;' ;,.! i., ..;;;ヽ ヾ ,,;_ , / ヾ_:::,:' -,ノ ヾ;. , , 、;, ;; ● , ... 、,● ;: `;. C) ,; ' うるせー!パンチ5分の2を教えろ!! ,;' '.、 -‐-ノ ,;'、 / ) _ _ / ,イ 、 ノ/ ∧ ∧―= ̄ `ヽ, _ / / | ( 〈 ∵. ・(ミィ〈__ > ゛ 、_― | ! ヽ ー=- ̄ ̄=_、 (/ , ´ノ | | `iー__=―_ ;, / / / !、リ -=_二__ ̄_=;, / / ,' / / / /| | / / !、_/ / 〉 / _/ |_/ ヽ、_ヽ
459 :
nobodyさん :04/05/01 01:15 ID:fGFxpvHE
/∧ /∧ / / λ / / λ / / λ / / λ / / /λ / / /λ /  ̄ ̄ ̄ \ / / \ \ / / \ \ / / \ 丶 | | | | | | PERLオタクを殺す会 | ^――――――― / | / \ / /―/ / / \/;;;;;;;\////////―\
460 :
nobodyさん :04/05/01 01:16 ID:fGFxpvHE
/⌒ヽ⌒ヽ ....:::..∧Y∧ . .::::::::. ・ ・ ::ヽ ( )●( ) このスレは終了しました 丶 ー / l, j i i .j | 八 | { } | i し " i '| |ノ ( i i| ( '~ヽ ! ‖ │ i ‖ | ! || | │ | | | | | | | | | | ! | |
ヽ( ゜,_ゝ゜)ノ + 人
flockが使えるか否かを判定するにはどうすればいいのでしょうか? ただし、Internal Server Errorはさけたいと思っています。 つまり・・・ if (?????){ print "flock 使用可能"; } else{ print "flock 使用不可能" } とさせたいのですが。。。 よろしくお願いします。
evalを検索汁
クラスHumanを継承するクラスBakerがあった時に、Humanのnewが sub new { my $class = shift; my %params = @_; my $self = { sex => male, }; bless $self, $class; $self->initialize(); return $self; } で、Bakerに、外部からアクセスできる変数$skill (パン屋の腕前)と、内部でのみ使用する変数 $east (イースト菌 $east = new East()とかやりたい)を持たせたい時、 どうするのが賢いやり方なのでしょうか? $eastの方は、ブロックの一番外でmy $eastと宣言したのでいいのだろうか、と思うのですが、 $skillの方は、$self->{skill} = $skillとかやっても、Humanのnewでblessした後なので、 途中で勝手に$selfのキーを増やしたりできるんだろうか、と思いまして…。
>>464 関係ないっつーかそういう風に
継承でハマることを避けるために
newとinitializeをわけてるんじゃないの?
Bakerの
initializeでskillとeastのキーを増やしておく。
skillのアクセサを作る。
eastのアクセサを作らないもしくは内部使用に限定する。
$baker->skill;
$baker->_east;
>>465 initializeはblessした後に呼び出される訳ですよね?
blessした後に$selfのキー勝手に増やしても大丈夫なんでしょうか…。
>>467 いや、動くプログラムと良いプログラムは違うっていうか、
動くのは試したんですが、何らかの理由があって推奨されない方法なら
別のアプローチを探さないと、と思いまして。
普通に使われてる方法なら良いのですが…。
/ | ・・・・・・・・・・・・・・・ \  ̄ ̄ ̄ ̄V ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (;;::::: ) ,/;/⌒/) //;: /;:: /./ (;::::|;:: (;: (/ \);;:::.\;\ (;:: ( (<<<ヽ .|;: |\;::::\ );:: | );:::: ) _、_ (;;:::::,_ノ` ) 彡 マーシェーリィー… ! ,/;/⌒/) //;: /;:: /./ (;::::|;:: (;: (/ \);;:::.\;\ (;:: ( (<<<ヽ .|;: |\;::::\ );:: | );:::: )
__ _,, -ー ,, (/ "つ`..,: :/ :::::i: :i ─::!,, ヽ.....::::::::: ::::ij(_::● r " .r ミノ~ :|::| ::::| :::i ゚。 ・・・トゥートゥートゥマシェリー・・・ :|::| ::::| :::|: :`.| ::::| :::|_: :.,' ::( :::}: :i `.-‐" :ヽ__::',__ ::|: :{ ::| ::|: :| ::| ::|: __ _,, -ー ,, (/ `..,つ / ::::::', マーシェーリー♪ i ● ●:! ヽ... ( .● )::/ 彡くるっ r ":::::::.... ,,_ ─:/ |::| ::::r ̄:i |::| ::::| :::| `.| ::::| :::|_ .,' ::( :::} i `-‐" ヽ__::',__ ::| { ::| ::|
,....':::::::::::::゙=:::::、 /::::::::::::::::::::::::::::::::゙:、 . /:::::::::::::::::::,r-:::::::::::::::::゙::、 .. ,l':::::::::::::::::::/-〃゙゙''''''゙\:::::::゙、 l:::::::::::::::::::,l' ll'l ゙l;:::::::l, ,;:::::::::::::::::::l .ll.l.. l:::::::::l ,ィ:::::::::::::,r-- '''''--=-'l''=-''り::::l 〃::::::::::::::l' ゙ - ' ;. l゙ - ' l::::::l ここのスレには… ソ::::::::::::::::l , ア__,.l,.('' .t:::::j' . l::rk:::::::::::::゙l ,..'゙-、=-:,.゙ t ゙レ 書き込まないで…ほしいです… ゝj:::::::,、::::::゙、 ; -==ヲ'弋''''{ ゙l, ,.-'::;==' ノ::::::::>'~::::゙=、_,l,.;'゙^'''゙l. ゙、 ....,.='' ,,〃'ヘ:::/:::::::::::::::::゙l爪. l, ,.r'',:,:,:,:,:,^~",:,:,:,:,:,:,:7'''',=';,''''ヘ:ノ爻゙、 ,.=''-、 k,:,\、,:,:,:,:,:,:,:,:,:,l,:,:,:,:/ (ふ勺 ,''l' j::l ゙l,-='',:,:,:,:,:,:゙、 ,l',:,:,:,:゙、,:,:,:,:,:,:,:,:l,:,:,:,:l---===,,'.j^~:::l ,-゙,:,:,:,:,:,:,:,:,:,:,゙、 /,:,:,:,:,:,:,゙、,:,:,:,:,:,:j,:,:,:,:,:l l':::::゙ュ), l.,' ;::;,/,:,:,:,:,:,:,:,:,:,:,:,:,:,:,ヘ j,:,:,:,:,:,:,:,:,:,゙、,:,:,:,:,l,:,:,:,:,:,k:::::::ヒ_l .;:::ll,:,:,:,:,:,:,l,:,:,:,:,:,:,:,:,:,:,ハ ,l,:,:,:,:,:,:,:,:,:,:,:,z,:,:,:,l,:,.,. '^.、::_:j':::::::::::::::::::l,:,:,:,:,:,:,:\,:,:,:,:,:,:,:,:,:,:,\
,,,r-‐───‐--、 / ,,,z-──ュ‐-、 /,,ミミミミ,,r-‐'' リ \ //~ | ゙i i/ ┛┗ | | f | ┓┏ ヽ | | | リ r-、 | | `ヽ/「ワ,| こんな感じで頼みます・・・ リ ,,,r==、 ,,r===ュ、 ┐ソ ゙i -=◎=-ヽ i−я−- ` ン } ゙i ヽ--‐ .| l `'─‐'" ノ ト‐/ | /l l 、 ,/ ├‐'゙ .|、 ノr' レ ヽ¬、,,.... -‐ | ゙iヽ‐' ヽ,,,,,r''´ ノ | ヽ ト‐==─イ~、 / .ト、 \ ヽ  ̄__:::‐' y ノ \ ` :: , ' `ー--──'"-'
/ / ! | ゙、 `' -、 l \ `` / /-‐=、''" ', ! ト -ヽ__ ヽl \ ヽ , ' ,イ. ジ.l7! ゙、|ヽ | ,r.‐、!,.`` ! , |、 \! ゙, / /! !. |':l ヽl l7l i | 'l ヽ ! / / イ. ` , .l'ノ !. i i \ | , ' / ! /// < /// ! | ゙、 `ヽ、 ,' -="-ァ i ヽ rァ─- 、 _| / ゙、 ヽノ i ! i \. .,,___,,.) / |/ ゙、 l , r | ` 、 _ ,. べ | 、 ヽ ヽ/ヽ、 | .`l ""´ l . ヽ/ _,)`` ヽ.」 ___,./ ' ´ ___ `ー 、_ / ,ノレ' ,.r '´ ー-` '´ - ‐  ̄ `'ー 、 ,/ _,. ヽ ,レ' ´ i l / , ,l l 。'i ! r',ヽ l l l ,、r;, i'゙ ! ヾ'-' l. l l _,r'´、l.レ'、 '、 , '、 ,/ l ,.!v-、,_ l L.., } ! ハ、 , ‐' ヽ、 ノ /! /`,/_,l L, l゙l ヘ」/ l. / `''┬ ' ´ `'ー----- '´ ,/ l / !:イ、_ノ l、 アダルトとPERLは禁止
/^~"´ ̄-‐‐‐'''"´/:/;ノ;;;;ノ:// _、-、_ /::::::/:::::::_,,,、---‐‐'''`~,、-''/::/ /"`'ー-''`''-、これなんのAA・・・? /:::/:-‐''''"~~::::::::;;;;-、,,,,、-,,、-‐ヽ,,_ / ヽ ;/;;'`"~、-''''''~^'''''ー-、_,,i:i、 ヽ`ヽ、;ヽ、,,,ノ. /"´ ̄~''/ ::::ヽ ;;;/~":、---、___/´ ,,i:''' :: ヽ. ヽ.`'''"´ /´ :::./ :::::::i ;;;;;'''''^~~~~^'''''/ー- ';、 ::: ` ヽ`''ー-,,,i_ -‐''" ::::::::;/-、, ;;;、;;;`''ー-,,,,,,,,,,,,,,_,,,,,、_ '' ',:::: `'ー _、-'''~ ̄`''''''ー-、 :::::;/:: ヽ、 ;;;ヽ、ー、;;ー-、,,,,,,,、-‐''" .;´ ̄`, ',::::,,,,、- /"'::;,:ヽ 、 ヽ.::::::: ''ー :::::ー、ヽ、,,''ー-ヽ.''''",.,;' "^' 'ー-‐'' . _、-'''''"´ / ヽ,,,ノ ヽ| ヽ:::: :: :::ヽ、`''ー-、ー-、'ヽ"、i;. ヽ /" i::: i: '::: ::::: 、::ヽ;;ヽ、:ー-、,,,,,、.ヽ ';'' ノノノ/;/ i:::::::::: υ " ::: ヽ,,_::''‐、,,,,''ー-''ー-"''/~'"''"/:/:: ::、:::i..:::::::::::::::::::::::::::::::::::: ::::::::: ヽー''"~´ ヽ、 "`'i::::::::i、:.. :~^ヽ:::::::::::::::::::::::::::::ノ:::::::::::::::i'/:::::::::::::::::::::: ~´ ::: :::::::::;;;;;; ;;;;;;;;;;;_,,、--、_i.::::::'ノ:::::::: `''ー-、,,,,,,,,,,‐'":::::::::υ::::υ:::::::::::::::::::::: ヽ'''''''''''''' '' :::::;;;;;;;;;;;;;;;;`-、:::::::::::::::::iノ::::::::::: """`''ー、,,_;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
i 、 :. ヽヽ_,,.....、,,,....._;/ ,;' ;,.! i., ..;;;ヽ ヾ ,,;_ , / ヾ_:::,:' -,ノ ヾ;. , , 、;, ;; ● , ... 、,● ;: `;. C) ,; ' うるせー!パンチ5分の2を教えろ!! ,;' '.、 -‐-ノ ,;'、 / ) _ _ / ,イ 、 ノ/ ∧ ∧―= ̄ `ヽ, _ / / | ( 〈 ∵. ・(ミィ〈__ > ゛ 、_― | ! ヽ ー=- ̄ ̄=_、 (/ , ´ノ | | `iー__=―_ ;, / / / !、リ -=_二__ ̄_=;, / / ,' / / / /| | / / !、_/ / 〉 / _/ |_/ ヽ、_ヽ
/⌒ヽ⌒ヽ ....:::..∧Y∧ . .::::::::. ・ ・ ::ヽ ( )●( ) このスレは終了しました 丶 ー / l, j i i .j | 八 | { } | i し " i '| |ノ ( i i| ( '~ヽ ! ‖ │ i ‖ | ! || | │ | | | | | | | | | | ! | |
レスついてるみたいだけどせっかく書いたし。
>464
bless は単に型付けするだけだから、その後、キーを増やそうがその事自体に問題はない。
ただし、基底クラスで利用しているキーとぶつかったりしたら問題を引き起こす可能性はあるけどな。
ちなみに、一度 bless した後、別のクラスに bless し直すことだって可能なんで、bless を神聖視する
必要はない。
個人的には C++ 使いなので、派生クラスの new の中で基底クラスの new を呼ぶ方が好きだなぁ。
ttp://www.perldoc.com/perl5.8.0/pod/perltoot.html#Overridden-Methods でも、この辺は Perl らしく TMTOWTDI なんで好みに合わせればいいと思う。
DBD::Pgモジュールについて質問ですが、executeのあとに finishしないと まずかったりしますか? 今書いてるソース、すべてつけていないもので、、、
なんでこうもマルチポストが多いのかな。
;;;;;;;;;/::::::::::::::::::::// //" /;;;;;イ''~|||;;;;;;;/:::::::::::::://l .ノ / ;;;;;;;/:::::::::::::::::::// 、,, /" /;;;;-'" |:::::||;;;;;;/:::::::::::/ レ'''" /;;;;;; ;;;;;/::::::::::::::::::// ゙丶、. / /;;;-'" ,,-、 |::::||l;;;;/:::::::/ l /ヽ/ノ ;;;/::::::::::::::::::/{、''''''‐-、, ゙ヽ, /;/ .i' o=-‐'|;;;/:::::/ ┬-'' 、 /;;; ;;/:::::::::::::::::/;;;\ヽ┬-、゙'ヽ、 | lヽ,//ヽ、,,-‐''~,-‐'''''|;;/:/ //ノ;; l ト, ヽ/;;;; /::::::::::::::::/;;;;;;;;;;;\ \\゙'ヽ、l ヽ"゙'" ゙-'",-''"~ |/ //" l |ヽ /;;;;;; :::::::::::::::::{;;;;;;;;;;;;;;;;;\ \\( ol|" "-'" " | ヽ /;;;;;;;;;; ::::::::::::::::::|;;;;;;;;;;;;;;;;;;;;;\ ゙‐‐'''"~/ /゙''ヽ .| /;;;;;;;;;;;;;; i,::::::::::::::::|;;;;/|;;;;;;;;;;;;;;ヽ'"~ / _ /ヽ、 \ ノ /;;;;;;;;;;;;;;;; ;゙i:::::::::::::::|/ |;;;;;;;;;;;;;;;;;;゙、. / // / /-゙i,. ヽ /./;;;;;;;;;;;;;;;;/:: ;;;;i,::::::::::::| |;;;;;;;;;;;;;;;;;;;;;;ヽ ヽ、-'"'''"‐''",,-''",/ ゙i, //;;;;;;;;;;;;;;;;/:::: ;;;;゙i,:::::::::::| |;;;;;;;;;;;;;;;;;;;;;;;;;\ ヽ\'` _/~" ,ハ / /;;;;;;;;;;;;;;;;;|::::: ;;;;;;゙i,:::::::::|''" |;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;゙ヽ、 \'{,,,-‐'"__ノ / i;;;;;;;;;;;;;;;;;;;|::::: ;;;;;;;;;゙、::::::| |;;;;;;;;;;;;;;;;;;;;;;;∧;;;;;;;;;;;;゙ヽ、 ヽ-‐'"~ ,,, /ヽ、i';;;;;;;;;;;;;;;;;;;|::::::
485 :
nobodyさん :04/05/02 22:02 ID:v1LUOZxN
@dataには数文字の文字列の後\nが付いている要素がいくつか入っています。 ヒアドキュメント内で配列(@data)を出力したくて、そのまま@dataとヒアドキュメント内に書いたのですが 謎の半角スペースが要素の一番最初に付いてしまいます。 これじゃあな、と思いヒアドキュメント内に${ foreach my $data ( @data ) { print $data; } と書いてみたのですがヒアドキュメントの一番最初に出力されてしまい上記コードを書いた場所に出力されません。。。 どなたかヒアドキュメント内で配列を出力する良い方法を知っていたら、ご指導して頂けると幸いです。
$"=''; or chomp(@data);
487 :
485 :04/05/02 22:21 ID:???
>>486 なるほど、$"でスカラー変数出力時の区切り文字を変更できるんですね。
試してみたら奇麗に出力出来ました。本当にありがとうございました。。。
488 :
485 :04/05/02 22:24 ID:???
ぐわ、スカラー変数じゃなくて配列だった。。。 今まで一々ヒアドキュメントを終了させてからforeachで出力していたので本当に助かりました。。。
a
>>484 ありがとうございます。
安心しました。
パンチ5分の2を喰らえええええええええ!! _ /- イ、_ __ /: : : : : : : : : : : ( 〈〈〈〈 ヽ /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ 〈⊃ } {:: : : :ノ --‐' 、_\: : ::} ∩___∩ | | {:: : :ノ ,_;:;:;ノ、 ェェ ヾ: :::} | ノ ヽ ! ! 、 l: :ノ /二―-、 |: ::ノ / ● ● | / ,,・_ | // |/ /::ノ | ( _●_) ミ/ , ’,∴ ・ ¨ 〉(_二─-┘{/ 彡、 |∪| / 、・∵ ’ /、//|  ̄ ̄ヽ / __ ヽノ / / // |//\ 〉 (___) / / // /\ / / / / ↑初心者 Perlオタク↑ \ ∩─ー、 ==== \/ ● 、_ `ヽ ====== / \( ● ● |つ | X_入__ノ ミ Perlオタクを!首吊って引き殺せ━━━━━!! 、 (_/ ノ /⌒l /\___ノ゙_/ / ===== 〈 __ノ ==== \ \_ \ \___) \ ====== (´⌒ \ ___ \__ (´⌒;;(´⌒;; \___)___)(´;;⌒ (´⌒;; ズザザザ ここは不親切な奴ばかりで死んでほしいね!初心者質問は禁止!!質問した者は 荒らしと同罪!!!<終終終 了了了><書き込み禁止>
パンチ5分の2を喰らえええええええええ!! _ /- イ、_ __ /: : : : : : : : : : : ( 〈〈〈〈 ヽ /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ 〈⊃ } {:: : : :ノ --‐' 、_\: : ::} ∩___∩ | | {:: : :ノ ,_;:;:;ノ、 ェェ ヾ: :::} | ノ ヽ ! ! 、 l: :ノ /二―-、 |: ::ノ / ● ● | / ,,・_ | // |/ /::ノ | ( _●_) ミ/ , ’,∴ ・ ¨ 〉(_二─-┘{/ 彡、 |∪| / 、・∵ ’ /、//|  ̄ ̄ヽ / __ ヽノ / / // |//\ 〉 (___) / / // /\ / / / / ↑初心者 Perlオタク↑ \ ∩─ー、 ==== \/ ● 、_ `ヽ ====== / \( ● ● |つ | X_入__ノ ミ Perlオタクを!首吊って引き殺せ━━━━━!! 、 (_/ ノ /⌒l /\___ノ゙_/ / ===== 〈 __ノ ==== \ \_ \ \___) \ ====== (´⌒ \ ___ \__ (´⌒;;(´⌒;; \___)___)(´;;⌒ (´⌒;; ズザザザ ここは不親切な奴ばかりで死んでほしいね!初心者質問は禁止!!質問した者は 荒らしと同罪!!!<終終終 了了了><書き込み禁止>
パンチ5分の2を喰らえええええええええ!! _ /- イ、_ __ /: : : : : : : : : : : ( 〈〈〈〈 ヽ /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ 〈⊃ } {:: : : :ノ --‐' 、_\: : ::} ∩___∩ | | {:: : :ノ ,_;:;:;ノ、 ェェ ヾ: :::} | ノ ヽ ! ! 、 l: :ノ /二―-、 |: ::ノ / ● ● | / ,,・_ | // |/ /::ノ | ( _●_) ミ/ , ’,∴ ・ ¨ 〉(_二─-┘{/ 彡、 |∪| / 、・∵ ’ /、//|  ̄ ̄ヽ / __ ヽノ / / // |//\ 〉 (___) / / // /\ / / / / ↑初心者 Perlオタク↑ \ ∩─ー、 ==== \/ ● 、_ `ヽ ====== / \( ● ● |つ | X_入__ノ ミ Perlオタクを!首吊って引き殺せ━━━━━!! 、 (_/ ノ /⌒l /\___ノ゙_/ / ===== 〈 __ノ ==== \ \_ \ \___) \ ====== (´⌒ \ ___ \__ (´⌒;;(´⌒;; \___)___)(´;;⌒ (´⌒;; ズザザザ ここは不親切な奴ばかりで死んでほしいね!初心者質問は禁止!!質問した者は 荒らしと同罪!!!<終終終 了了了><書き込み禁止>
パンチ5分の2を喰らえええええええええ!! _ /- イ、_ __ /: : : : : : : : : : : ( 〈〈〈〈 ヽ /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ 〈⊃ } {:: : : :ノ --‐' 、_\: : ::} ∩___∩ | | {:: : :ノ ,_;:;:;ノ、 ェェ ヾ: :::} | ノ ヽ ! ! 、 l: :ノ /二―-、 |: ::ノ / ● ● | / ,,・_ | // |/ /::ノ | ( _●_) ミ/ , ’,∴ ・ ¨ 〉(_二─-┘{/ 彡、 |∪| / 、・∵ ’ /、//|  ̄ ̄ヽ / __ ヽノ / / // |//\ 〉 (___) / / // /\ / / / / ↑初心者 Perlオタク↑ \ ∩─ー、 ==== \/ ● 、_ `ヽ ====== / \( ● ● |つ | X_入__ノ ミ Perlオタクを!首吊って引き殺せ━━━━━!! 、 (_/ ノ /⌒l /\___ノ゙_/ / ===== 〈 __ノ ==== \ \_ \ \___) \ ====== (´⌒ \ ___ \__ (´⌒;;(´⌒;; \___)___)(´;;⌒ (´⌒;; ズザザザ ここは不親切な奴ばかりで死んでほしいね!初心者質問は禁止!!質問した者は 荒らしと同罪!!!<終終終 了了了><書き込み禁止>
パンチ5分の2を喰らえええええええええ!! _ /- イ、_ __ /: : : : : : : : : : : ( 〈〈〈〈 ヽ /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ 〈⊃ } {:: : : :ノ --‐' 、_\: : ::} ∩___∩ | | {:: : :ノ ,_;:;:;ノ、 ェェ ヾ: :::} | ノ ヽ ! ! 、 l: :ノ /二―-、 |: ::ノ / ● ● | / ,,・_ | // |/ /::ノ | ( _●_) ミ/ , ’,∴ ・ ¨ 〉(_二─-┘{/ 彡、 |∪| / 、・∵ ’ /、//|  ̄ ̄ヽ / __ ヽノ / / // |//\ 〉 (___) / / // /\ / / / / ↑初心者 Perlオタク↑ \ ∩─ー、 ==== \/ ● 、_ `ヽ ====== / \( ● ● |つ | X_入__ノ ミ Perlオタクを!首吊って引き殺せ━━━━━!! 、 (_/ ノ /⌒l /\___ノ゙_/ / ===== 〈 __ノ ==== \ \_ \ \___) \ ====== (´⌒ \ ___ \__ (´⌒;;(´⌒;; \___)___)(´;;⌒ (´⌒;; ズザザザ ここは不親切な奴ばかりで死んでほしいね!初心者質問は禁止!!質問した者は 荒らしと同罪!!!<終終終 了了了><書き込み禁止>
絡まれて大変なスレですね
別に何とも思ってない
そのウチ削除人が消してくれると思うし。 て言うかこいつ一年くらい前からいるんですよ。
一年・・・。皆さん大人の対応ですね
ああ。もう1年経つのか。早いなあ。 確か誰にも理解できない日本語で質問(っていうか書き込み)して、 無視した(っていうか何を答えたらよいか誰も分からなかった)ら、 「初心者には不親切だ」って勝手に切れて粘着してる。 ちゃんと質問すればちゃんと答えるのにねえ。
うむ。俺も当時から居るが、 よく続くと関心するくらいだ たしか格ゲースクリプトだっけな
「パンチを5分の2にする方法を教えてください」だったっけ。 punch *= 2.0/5.0; 終了
AAもそれなりに進化してて面白いね。
進化はAAだけ(ry
進化していくAAをNGワードに入れていってるから、うちのngword.txtもかなり進化した。 来てたのわからなかった。
あぁ、懐かしいな…。 たまにアク禁されるのかパタリと来なくなるんだよね。 でもそういう時、あいつどうしてるんだろう・・・とちょっとモヤモヤして気になるんだよ。
一度Rock54にされたらしい。やっほー接続だったかな。
例えば、ブラウザから100MBのファイルをPOSTすると「サイズが大きすぎ!」とエラー表示させてますが、 エラー表示されるまでに時間がかかります。 (ブラウザがアップロードに専念しているため) つまりはブラウザのアップロード処理を中断させて、 即エラー表示させたいのですが、Perlで制御できますか?
>>510 なんでエラーにするようなサイズをアップロードさせるわけ?
最初から受け付けなきゃいいだろ。
もしかしてアップロードして100MBきたら処理打ち切りとかやってんのー? ISDNのおじさんブチ切れますよ? 初めからファイル容量計算しろ
だからそのはじめにファイルサイズを計算する方法がわらないんですってば!
おまえらのせいでエラーばっかだぜえええええええええ!! _ /- イ、_ __ /: : : : : : : : : : : ( 〈〈〈〈 ヽ /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ 〈⊃ } {:: : : :ノ --‐' 、_\: : ::} ∩___∩ | | {:: : :ノ ,_;:;:;ノ、 ェェ ヾ: :::} | ノ ヽ ! ! 、 l: :ノ /二―-、 |: ::ノ / ● ● | / ,,・_ | // |/ /::ノ | ( _●_) ミ/ , ’,∴ ・ ¨ 〉(_二─-┘{/ 彡、 |∪| / 、・∵ ’ /、//|  ̄ ̄ヽ / __ ヽノ / / // |//\ 〉 (___) / / // /\ / / / / ↑初心者 Perlオタク↑ \ ∩─ー、 ==== \/ ● 、_ `ヽ ====== / \( ● ● |つ | X_入__ノ ミ Perlオタクを!首吊って引き殺せ━━━━━!! 、 (_/ ノ /⌒l /\___ノ゙_/ / ===== 〈 __ノ ==== \ \_ \ \___) \ ====== (´⌒ \ ___ \__ (´⌒;;(´⌒;; \___)___)(´;;⌒ (´⌒;; ズザザザ ここは不親切な奴ばかりで死んでほしいね!初心者質問は禁止!!質問した者は 荒らしと同罪!!!<終終終 了了了><書き込み禁止>
おまえらのせいでエラーばっかだぜえええええええええ!! _ /- イ、_ __ /: : : : : : : : : : : ( 〈〈〈〈 ヽ /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ 〈⊃ } {:: : : :ノ --‐' 、_\: : ::} ∩___∩ | | {:: : :ノ ,_;:;:;ノ、 ェェ ヾ: :::} | ノ ヽ ! ! 、 l: :ノ /二―-、 |: ::ノ / ● ● | / ,,・_ | // |/ /::ノ | ( _●_) ミ/ , ’,∴ ・ ¨ 〉(_二─-┘{/ 彡、 |∪| / 、・∵ ’ /、//|  ̄ ̄ヽ / __ ヽノ / / // |//\ 〉 (___) / / // /\ / / / / ↑初心者 Perlオタク↑ \ ∩─ー、 ==== \/ ● 、_ `ヽ ====== / \( ● ● |つ | X_入__ノ ミ Perlオタクを!首吊って引き殺せ━━━━━!! 、 (_/ ノ /⌒l /\___ノ゙_/ / ===== 〈 __ノ ==== \ \_ \ \___) \ ====== (´⌒ \ ___ \__ (´⌒;;(´⌒;; \___)___)(´;;⌒ (´⌒;; ズザザザ ここは不親切な奴ばかりで死んでほしいね!初心者質問は禁止!!質問した者は 荒らしと同罪!!!<終終終 了了了><書き込み禁止>
エラーばっか出す、嘘ばっか教えんじゃねえええええええええ!! _ /- イ、_ __ /: : : : : : : : : : : ( 〈〈〈〈 ヽ /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ 〈⊃ } {:: : : :ノ --‐' 、_\: : ::} ∩___∩ | | {:: : :ノ ,_;:;:;ノ、 ェェ ヾ: :::} | ノ ヽ ! ! 、 l: :ノ /二―-、 |: ::ノ / ● ● | / ,,・_ | // |/ /::ノ | ( _●_) ミ/ , ’,∴ ・ ¨ 〉(_二─-┘{/ 彡、 |∪| / 、・∵ ’ /、//|  ̄ ̄ヽ / __ ヽノ / / // |//\ 〉 (___) / / // /\ / / / / ↑初心者 Perlオタク↑ \ ∩─ー、 ==== \/ ● 、_ `ヽ ====== / \( ● ● |つ | X_入__ノ ミ Perlオタクを!首吊って引き殺せ━━━━━!! 、 (_/ ノ /⌒l /\___ノ゙_/ / ===== 〈 __ノ ==== \ \_ \ \___) \ ====== (´⌒ \ ___ \__ (´⌒;;(´⌒;; \___)___)(´;;⌒ (´⌒;; ズザザザ ここは不親切な奴ばかりで死んでほしいね!初心者質問は禁止!!質問した者は 荒らしと同罪!!!<終終終 了了了><書き込み禁止>
,....':::::::::::::゙=:::::、 /::::::::::::::::::::::::::::::::゙:、 . /:::::::::::::::::::,r-:::::::::::::::::゙::、 .. ,l':::::::::::::::::::/-〃゙゙''''''゙\:::::::゙、 l:::::::::::::::::::,l' ll'l ゙l;:::::::l, ,;:::::::::::::::::::l .ll.l.. l:::::::::l ,ィ:::::::::::::,r-- '''''--=-'l''=-''り::::l 〃::::::::::::::l' ゙ - ' ;. l゙ - ' l::::::l ここのスレには… ソ::::::::::::::::l , ア__,.l,.('' .t:::::j' . l::rk:::::::::::::゙l ,..'゙-、=-:,.゙ t ゙レ 書き込まないで…ほしいです… ゝj:::::::,、::::::゙、 ; -==ヲ'弋''''{ ゙l, ,.-'::;==' ノ::::::::>'~::::゙=、_,l,.;'゙^'''゙l. ゙、 ....,.='' ,,〃'ヘ:::/:::::::::::::::::゙l爪. l, ,.r'',:,:,:,:,:,^~",:,:,:,:,:,:,:7'''',=';,''''ヘ:ノ爻゙、 ,.=''-、 k,:,\、,:,:,:,:,:,:,:,:,:,l,:,:,:,:/ (ふ勺 ,''l' j::l ゙l,-='',:,:,:,:,:,:゙、 ,l',:,:,:,:゙、,:,:,:,:,:,:,:,:l,:,:,:,:l---===,,'.j^~:::l ,-゙,:,:,:,:,:,:,:,:,:,:,゙、 /,:,:,:,:,:,:,゙、,:,:,:,:,:,:j,:,:,:,:,:l l':::::゙ュ), l.,' ;::;,/,:,:,:,:,:,:,:,:,:,:,:,:,:,:,ヘ j,:,:,:,:,:,:,:,:,:,゙、,:,:,:,:,l,:,:,:,:,:,k:::::::ヒ_l .;:::ll,:,:,:,:,:,:,l,:,:,:,:,:,:,:,:,:,:,ハ ,l,:,:,:,:,:,:,:,:,:,:,:,z,:,:,:,l,:,.,. '^.、::_:j':::::::::::::::::::l,:,:,:,:,:,:,:\,:,:,:,:,:,:,:,:,:,:,\
518 :
512 :04/05/04 19:58 ID:???
ハーン おじさんマジ切れますよ?I/Oの関数みろYO!!! @stat=stat $file; $size=$stat[7]; if(104857600<=$size) print "100MBより多いぞゴルァ";
/⌒ヽ⌒ヽ ....:::..∧Y∧ . .::::::::. ・ ・ ::ヽ ( )●( ) 初心者書き込み禁止!! 丶 ー / BY PERLオタク l, j i i .j | 八 | { } | i し " i '| |ノ ( i i| ( '~ヽ ! ‖ │ i ‖ | ! || | │ | | | | | | | | | | ! | |
/⌒ヽ⌒ヽ ....:::..∧Y∧ . .::::::::. ・ ・ ::ヽ ( )●( ) 初心者書き込み禁止!! 丶 ー / BY PERLオタク l, j i i .j | 八 | { } | i し " i '| |ノ ( i i| ( '~ヽ ! ‖ │ i ‖ | ! || | │ | | | | | | | | | | ! | |
/⌒ヽ⌒ヽ ....:::..∧Y∧ . .::::::::. ・ ・ ::ヽ ( )●( ) 初心者書き込み禁止!! 丶 ー / BY PERLオタク l, j i i .j | 八 | { } | i し " i '| |ノ ( i i| ( '~ヽ ! ‖ │ i ‖ | ! || | │ | | | | | | | | | | ! | |
/⌒ヽ⌒ヽ ....:::..∧Y∧ . .::::::::. ・ ・ ::ヽ ( )●( ) 初心者書き込み禁止!! 丶 ー / BY PERLオタク l, j i i .j | 八 | { } | i し " i '| |ノ ( i i| ( '~ヽ ! ‖ │ i ‖ | ! || | │ | | | | | | | | | | ! | |
/⌒ヽ⌒ヽ ....:::..∧Y∧ . .::::::::. ・ ・ ::ヽ ( )●( ) 初心者書き込み禁止!! 丶 ー / BY PERLオタク l, j i i .j | 八 | { } | i し " i '| |ノ ( i i| ( '~ヽ ! ‖ │ i ‖ | ! || | │ | | | | | | | | | | ! | |
592 名前: nobodyさん [] 投稿日:03/08/07 16:03 ID:MNjVgF7U ゲームで、対戦で、攻撃はパンチとキック、どちらかは2分の1 パンチの場合は、5回に1回はダメージ低い。 さらに5分の2の確率でミスをする。 というのを、1ターンの各攻撃を下のスクリプトに書いたが動かない 誰かこの初心者を助けてください
593 名前: nobodyさん [] 投稿日:03/08/07 16:03 ID:MNjVgF7U プレイヤー1は$play11の攻撃 プレイヤー2は$play22の攻撃 $play11 = $sentaku1 //Syntax Error $play22 = $sentaku1 //Syntax Error $kik = 60 //Syntax Error $sentaku ={ //Syntax Error $play1 = int(rand 2) //Syntax Error if($play1 == 0) $kik //Syntax Error $kikって何だよオブジェクトか?で、メソッドは? } //Syntax Error else($play1 == 1) { //Syntax Error Elseに条件つけんなよw $bougyo = int(rand 5) //Syntax Error だからセミコロン・・・ if($bougyo =< 1) 0; else($bougyo >= 2) 1; } { //Syntax Error エエエエ・・・・ なにこの括弧 $panti = int(rand 5); if($panti == 0) $panti1 = 10; else($panti > 0) $panti2 = 20; } //Syntax Error 括弧・・・ * $bougyo; //Syntax Error おい、オペランド足りんぞ } //Syntax Error 括弧・・・ } //Syntax Error 括弧・・・ 括弧の対応おかしいーーwww
526 :
510 :04/05/04 20:12 ID:???
いえいえ、サーバー側でファイル化する前にCONTENT_LENGTHで判断してます。 念のためにファイル化した後もサイズチェック。 なにかしら処理途中でレスポンスヘッダを送信できれば、 アップロードに専念しているブラウザも止められるかなぁ? ・・・と、考えつつも案が浮かばず放置している状態なのです。
>>526 >念のためにファイル化した後もサイズチェック。
だから、その行為がクライアントから見ると「アップロード」になるわけで・・・
CONTENT_LENGTHで判断するだけでいいだろ
だから527が言ってるようにCONTENT_LENGTHで(ry (´-`).。oO(なんで鯖までいじらにゃならんのよ・・・)
530 :
510 :04/05/04 22:00 ID:???
やはりPerlへ処理が渡された時点で手遅れみたいですね。 残念だけど諦めます。 > CONTENT_LENGTHで判断するだけでいいだろ 申し訳ない。今のロジックをみたらCONTENT_LENGTHのチェックと、 STDINからデータ取得時のチェックの二段階だけだった。
>592 名前: nobodyさん [] 投稿日:03/08/07 16:03 ID:MNjVgF7U my @attack = ( sub { my($damage, $rate) = (100, 10); $damage *= 1 + ((1 / 2 <=> rand) * rand $rate) / 100; $damage *= 1 / 3 unless int rand 5; $damage = 0 if 2 > rand 5; 'パンチ', int $damage; }, sub { my($damage, $rate) = (200, 10); $damage *= 1 + ((1 / 2 <=> rand) * rand $rate) / 100; 'キック', int $damage; } ); for (1..20) { print $attack[rand 2]->(), "\n"; }
Cookieクリアについて質問ですが、「ブラウザ(セッション)を 閉じたとき」にCookieをクリアするためにはexpiresを空に、 有効期限を決めるにはexpiresを設定すればいいだけのこと ですが、この2種を同居させることは不可能でしょうか。 つまりやりたいことは、「有効期限を設定しておいても、ブラウザ が閉じられればCookieはクリアされる」ということです。 うまくいかないので質問させていただきました。 宜しくお願い致します。
>>533 申し訳ありません。
違うところで質問させていただきますね。
>>532 Netscapeベースの一般的なクッキーだと不可能。
クッキーの中に有効期限を書いておき、サーバ側でチェックするとか。
536 :
◆Emx7X7JtuI :04/05/05 21:16 ID:jTThsR/v
質問させて頂きますm(_ _)m $day = "20040505"; の時、$dayから 2004、05、05を分けて取り出すには、 $yyyy = substr($day, 0, 4); $mm = substr($day, 4, 2); $dd = substr($day, 6, 2); とするしかないでしょうか? もう少し良い方法がありましたらご教授お願いします。
>>536 これでどうかな
($yyyy, $mm, $dd) = unpack("a4a2a2", "20040505");
>>536 TMTOWTDI.
# substr
my($yyyy, $mm, $dd) = (substr($day, 0, 4), substr($day, 4, 2), substr($day, 6, 2));
# unpack
my($yyyy, $mm, $dd) = unpack 'A4A2A2', $day;
# パターンマッチ
my($yyyy, $mm, $dd) = $day =~ /^(\d{4})(\d\d)(\d\d)/;
# 回りくどい方法
my @tmp = split //, $day;
my $yyyy = join '', splice @tmp, 0, 4;
my $mm = join '', splice @tmp, 0, 2;
my $dd = join '', @tmp;
printf "%d %d %d", $day =~ /^(\d{4})(\d{2})(\d{2})$/;
>>537-538 ありがとうございます!
umpackという手がありましたね。
これでいこうと思います。
>>538 >#バターンマッチ
この書き方がよく分かってないんですよ<私
サンプルソースを写して、何となくうまくいってるって感じで(汗)
がんばって勉強します!
>539 dクス
複数の異なるサーバー間で、アクセス規制用に.htaccessファイルを同期させる為のCGIを作ろうと思ってます。 .htaccessのファイルの内容を、指定したサーバーの順番に、Socketでデータと一緒にPOSTして、受け取ったCGIでそれを元の.htaccessと書き換えるという流れで逝きたいんですが、 一つのデータ送信+ファイル更新用の親CGIと、受信+ファイル更新用の子CGIという仕組みです。 私はPerl初心者で、今までソケットについては一切書いてないので知識が無いので、 最近ネットでPerlのSocket.pmについて調べてるんですが、どうもソケットについて詳しく解説してるサイトが無くて困ってます。 何方かSocketについての解説サイトをご教授してください。
.htaccess その物を送ったほうが速いんで内科?
.htaccess その物を送ったほうが速いんで内科?
545 :
542 :04/05/05 22:29 ID:???
WEB上で親CGIでIP・リモホなどを追記して送信するだけで登録されたサーバーに一度に同期させたいからです。 私自身、10つのサーバーで複数のコンテンツを公開してるので。。。 アップロードファイルがこんがらがってるのでこういうCGIを実装したいのです。
cron+scpでダメな理由を述べよ
cron+scpでダメな理由を述べよ
ま、スレ違いだな
俺
>>543 じゃないんだけど、同じ失敗してるな。
「書き込みに失敗した模様」でも書きこめてるっぽい。
548だけどやっぱり書き込みおかしい? この板だけじゃないけどすんなり書き込めななくなったな。
>>542 Socket.pmが使えるということは、標準モジュールが使えるのだから、
IO::Socket::INETを使えばハンドル操作だけで楽になるよ。
さらにLWPモジュール群を使えば、ハンドル操作さえ不要に。
Perlを1年ぶりに勉強 前のレベルに戻すまで1ヶ月はかかるからよ ∧_∧ ∧_∧ (´<_` ) 今ちょうど ( ´_ゝ`) / ⌒i 人生最大の危機に / \ | | 直面しているな / / ̄ ̄ ̄ ̄/ | __(__ニつ/ FMV / .| .|____ \/____/ (u ⊃
スクリプト言語ごときで人生最大の危機ですか
首切りが掛かってるんですよ。もう必死です。
↓このようなxmlファイルがあるとして ---- xml2.xml ---------------------------------------- <?xml version="1.0" encoding="Shift_JIS"?> <data> <shop num="01"> <name val="a">AAAshop1</name> <name val="b">AAAshop2</name> <tel>012-345-6789</tel> </shop> <shop num="02"> <name>BBBshop</name> <tel>098-765-4321</tel> </shop> </data> ------------------------------------------------------
557 :
続き :04/05/06 21:29 ID:???
↓のperlを実行すると ------------------------------------------------------ #!/usr/local/bin/perl use XML::DOM; $xmlfile = "./xml2.xml"; my $parser = new XML::DOM::Parser; my $doc = $parser->parsefile ("$xmlfile"); my $nodes = $doc->getElementsByTagName ("shop"); my $n = $nodes->getLength; for (my $i = 0; $i < $n; $i++){ my $node = $nodes->item($i); my $attr = $node->getAttribute("num"); print $attr."-attr\n"; my $child = $node->getElementsByTagName("name"); my $nn = $child->item(0); my $val = $nn->getAttribute("val"); print $val."-val\n"; my @child_val = $node->getElementsByTagName("name"); my $child_val = $child_val[0]; print $child_val."-child_val\n";#● } ------------------------------------------------------
558 :
続き2 :04/05/06 21:29 ID:???
------------------------------------------------------ 01-attr a-val XML::DOM::Element=ARRAY(0x843e234)-child_val 02-attr -val XML::DOM::Element=ARRAY(0x84406fc)-child_val ------------------------------------------------------ このような表示になります。 ●の部分が「XML::DOM::Element=ARRAY(0x843e234)-child_val」こうなってしまいますが 「AAAshop1」や「AAAshop2」「BBBshop」を取得するにはどうすれば良いのでしょうか?
formからPOSTをつかってフォームの値をperlによって受け取っているんですが、 今までテキストか、リストによるものだけだったんですが 今回、チェックボックスを使いたいんですが、 どのようにperl側に情報が送られてくるのでしょうか・・・。
561 :
559 :04/05/06 22:00 ID:???
>>560 初心者ですいません。
受け取ってそのまま表示させるにはどうすればいいですか・・・(´Д`)
>>561 GETで渡して$ENV{'QUERY_STRING'}を表示すれ。
564 :
559 :04/05/06 22:41 ID:???
565 :
nobodyさん :04/05/06 23:47 ID:21UK75Lz
>>558 my @child_val = $node->getElementsByTagName("name");
my $child_val = $child_val[0];
の部分を
my $child_val = $nn->getFirstChild->getData;
567 :
nobodyさん :04/05/07 12:50 ID:p3Wu+afh
$honbun = "aaabbbcccdddeeefffコーヒー"; $honbun =~ s/$FORM{'text'}/<font style=\"background:#00ffff\">$FORM{'text'}<\/font>/g; print "本文=$honbun"; というプログラムで本文を置換したいんですけどフォームからaaaなどを入力してもエラーにはならないけど コーヒーと入力するとエラーになってしまいます。 どうしたらコーヒーと入力してもエラーがでないんでしょうか?
>>567 >>1 読んで。
どんなエラーかわからない事にはまともな答えは期待できない。
>>567 \Qマルチポスト(・∀・)ニヤニヤ\E
サニタイズするよろし。 $honbun = 'aaabbbcccdddeeefffコーヒー'; $keyword = 'コーヒー'; $keyword =~ s/([\+\*\.\?\^\$\[\-\]\|\(\)\\])/\\$1/g; $honbun =~ s/($keyword)/<b>$1<\/b>/g; print "本文=$honbun";
@filesという配列の中に10〜15個程度の要素が入ってるのですが これをHTML上に表示するにはどのようにすればよいのでしょうか? 現在は$files[1]〜$files[15]というように1個1個記述してます。 何か良い方法があればアドバイスいただければと思います。
>>571 foreachを使う。
用例は検索すれば一杯出てくる。
print @files;
574 :
571 :04/05/07 15:55 ID:???
>>572 ありがとん
foreach $key (@files) { print "<a href=\"$key\">$key</a><br>\n";}
ってやったら出来た
サンクスコ
quotemeta を使いましょうよ。
576 :
nobodyさん :04/05/07 20:24 ID:zsY2eiyt
アンケートサイトを作ろうと思っています。 一人複数投票をなるべく避けるようにしたいのですが、こういう 場合、どのような工夫があるでしょうか? とりあえず同一アドレスははじきます。リスクはありますが、 プロバイダの同一サクセスポイントもはじこうと思っています。 他にどういう手があるでしょうか?もちろん100%防ぐのは 無理だと思いますし、そんな厳密なアンケートでもない (どっちかというと遊びっぽい)ので、少しでも役立つ 方法をご存知でしたら、教えてください。 よろしくお願いします。
> とりあえず同一アドレスははじきます。リスクはありますが、 > プロバイダの同一サクセスポイントもはじこうと思っています。 ネタだろ?
@list に何列(何個)存在しているか 個数をカウントするにはどうすればいいですか・・?
$kosuu = @list;
580 :
578 :04/05/07 20:42 ID:???
サクセスポイント
583 :
576 :04/05/07 21:46 ID:???
サクセスポイントはアクセスポイントのタイプミスでした。どもすみません。
>>581 あ、クッキーという手がありましたね。消して再投票する人もありえるでしょうが、
一定の効果はありそうですね。ありがとうございます。
検索用CGIを作っているのですが、 @array にたとえば「あ」「い」「う」が入っているとして、 それを$aiuにマッチすればそのまま、マッチしなければそのループを抜ける という表記なつもりなのですが、結果がうまくいきません。 foreach $i (@array){ if ($aiu =~ /^([\x00-\x7F]|[\x8E\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE]{2})*$i/i) { ; } else { next; } } どのようにかきかえればいいでしょうか?
>>584 foreach my $str (@array){
$str = quotemeta $str;
if( !$aiu =~ /$str/){
last; # ループを抜けるのはlastです
}
}
こんなもんでどうなんでしょう? 正規表現はそんなにややこしくする必要ありですか?
>>584 まずそれは EUC-JP とうまく付き合いたがっているコードなわけだけど
@array と $aiu はきちんと EUC-JP ですか?
587 :
586 :04/05/07 23:53 ID:???
早とちり失礼。
588 :
584 :04/05/08 00:20 ID:???
>>585 エラーはおこりませんが、HITしませんでした。。。
下のレスにもかかれてたコードのせいですかねぇ?
>>586 EUC-JPかどうか実はよくわかっていません・・・が、
なぜか部分部分でそのコードを入れないと反応しないものがありまして。
なくてもうまくいく場合もあるんですが、
基本的に日本語が含まれるものには無いとうまくいかないようです。
$fmt = "%d %d"; @lst = (12, 20); これを print を用いて「12 20」のように表示したいのですが、 print($fmt, @lst); では「%d %d1220」と表示されてしまいます。 「12 20」のようにするにはどうしたらよいでしょうか。 ちなみに、$fmt, @lst は動的に変わり、 要素が2個とは限りません。 C言語の va_list のようなことができるのか知りたいです。
591 :
589 :04/05/08 01:35 ID:???
>>590 $fmt も任意で、必ずしも %d のスペース区切りではないんです。
>>589 僕が良くワンライナで使う手はこう。
$ perl -e '@list=(1..5);print join(" ", @list);'
1 2 3 4 5
printf
594 :
589 :04/05/08 01:58 ID:???
>>593 できました、ちょっとハマって勘違いしていました。
ありがとうございました。
595 :
nobodyさん :04/05/08 02:19 ID:3p4uAER8
初めまして。 「バイナリ構造体」の意味がイマイチつかめなくて困ってます。 「バイナリ」は2進法とかいう感じの意味らしいですが、では「バイナリ構造体」 とは構造が2進法である。みたいな感じですか?なんか変な感じ・・・ バイナリはいろんな所で調べれますが、バイナリ構造体という言葉の説明はみつかりません。 どうやらスカラ変数や s/〜//; の〜部分もバイナリ構造体らしいのですが、どなたか バイナリ構造体の意味を教えてくださいませんか。お願いします。
バイナリデータ
バイ ナラ
>>595 プログラミングで構造体と言うと既にある型を使って新しい型を作ることを指す。
Perlは基本的にデータを文字列で記憶するからそれをバイナリ値にしたものが
バイナリ構造体。
まあ pack してできるものがバイナリ構造体だ でも s/?//; の?の部分がバイナリ構造体だというのはいまいち意味がわからない
600 :
595 :04/05/08 03:29 ID:???
>>598 ということは文字列をバイナリ値(0と1)に変換して記憶・保存する構造自体がバイナリ構造体ですか?
>>599 packってpack後にバイナリ構造体に結果を返すって勉強したので、packの結果を受け取れる
場所はスカラ変数に限らず、全てバイナリ構造体と言える?あれる?のかなと思いましたが・・・・・
う〜ん難しいですね。スカラや配列って文字列のまま記憶・格納しているのですか?
例)$x = "あいうえお";
という代入をした場合、「あいうえお」のままはコンピューターは保存できませんよね?
だから、保存時に2進数に直して保存し、呼び出すと自動で解凍?される・・・・のですか?
その仕組みがバイナリ構造体そのもの????
>>600 バイナリ値というのは2進数のことではない。
それにPerlにおいてバイナリ構造体の意味を学んでも役には立たないから
おかしな理解をしてしまう前にpackして得られる値とだけ思っておけ。
602 :
595 :04/05/08 04:20 ID:???
>>601 「整数値を、2 の補数表現で符号化したものをバイナリ値とする。」こんな程度しか
バイナリ値ではひっかかりませんでしたがとりあえず単純な2進数ということでは
ないようですね。
プログラム関係って言葉の意味さえわかれば関数や表記法なんて結構どうにでもなるかな
と思ってるんですよ。理解できない言葉があると勉強の効率が悪いので私にとっては
言葉の意味は重要なんですよ。
プログラム関係の言葉の辞書って今アスキーっていうHP使ってますが、他にどこか
いいとこありますか?アスキーはバイナリ値もバイナリ構造体も載っていませんでしたので
プログラム系の言葉に特化してる辞書とかないですかね
603 :
595 :04/05/08 04:27 ID:???
忘れてました追加です。 「0x」とは、後に続く文字列が16進数であることを示しているらしいのですが、 print hex(0xa); としてみたら16が表示されました。 print hex(a); の場合は10なのですが、「0x」は後続が16進数であるという示し以外にどのような 効果を与えるのでしょうか?
print 0xa; # 10 print hex 10; # 16
バイナリ構造体というのは、誰が作ったか知らないが、日本独自の言葉で、 英語版の perldoc などには存在しない。 よって正確な定義もたぶん存在しない。 たぶんCの構造体(struct)との類推で作られた言葉だとは思う。 struct の定義ならCの入門書でも読めばわかるが、 「なぜこんなものが必要なのか、実際何の役に立つのか」ということは 実際にCのプログラムを作ってみないとわからんだろうな。
つか、Perlは普通に構造体使えるようになってるしな $hoge @hoge %hoge
608 :
595 :04/05/08 15:22 ID:???
>>605 う〜ん難しいですね。簡単な例え話とかあったらいいんですがね。
>>604 どうやらhex関数の引数として「0x」をつかうとちょっと違うことになるみたいですね。
通常は「0x」が前につけば単に16進数という宣言みたいですが、どうしてhex関数の引数
で使うとおかしな事になるんでしょう。
そういえば、バイナリ値以外にもchar値とかその他にもいっぱい「〜値」というものが
あるんですね。どっかにいろんな「〜値」について詳しく解説してるサイト知りませんか?
>>608 何もおかしくないのに
>>604 を見てわからないならかなりニブいな。
packで指定する型のcharやintや浮動小数点だのをひっくるめてバイナリ値を呼ぶ。
どんな型があるかはpack関数を調べればいい。
いいかげんスレ違いになってきたからここらでやめれ。
611 :
584 :04/05/08 16:58 ID:???
2重ですいません。
>>584 の質問誰かお願いします。。。
調べたところ、すべてEUCにはされていました。
if ($aiu ne 'all') {
if ($aiu =~ /^([\x00-\x7F]|[\x8E\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE]{2})*$array[0]/i ||
$aiu =~ /^([\x00-\x7F]|[\x8E\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE]{2})*$array[1]/i) { ; }
else { last; }
}
だと、理想的な結果が出るんですが、2枚目のページにいくと、
結果がクリアされるようなんです・・・。
「2枚目のページ」ねぇ。 誰か2枚目のページってどんなのか知ってる? 知ってる人が教えてあげて。
(゚听)シラネ
614 :
595 :04/05/08 18:04 ID:???
>>609 ???
print a; #aが出力
print 0xa; #10が出力
print hex a; #10が出力
print hex 0xa; #16が出力
???
本当にわかりません・・・教えてください。
ところでこの話はスレ違いなんですか?ここは変換処理にかかわる事ならOKっていうわけでは
ないんですか^^;
615 :
nobodyさん :04/05/08 18:14 ID:t33qT0Ph
文章から一定の単語を抜きだすコードを書いてるんですけど if( 文章 =~ 適当な単語) ){ 処理 } という方法では (´・ω・`) のようなものに引っ掛からないみたいで、、、 こう言う場合はどのようにマッチさせれば良いのでしょう?
マルチバイトを標準で使いたいのならphpにしろ perlはjcodeがいるだろ
617 :
595 :04/05/08 18:24 ID:???
あ〜〜〜〜〜〜〜!!!!!!!! 0xってhexと同じような働きがあるから print hex 0xa; っていうのは print hex (hex a); と同じことで、流れ的には「a」を10に変換してさらにそれを16進数として評価してしまう!!! ってことですね^^やっとhex問題が片付いた。バイナリ値問題はまだまだですが++; ほんと日本語が世界語だったらプログラム用語もPC関連用語ももっと簡単だったろうになあ
>>615 指定の単語を抜き出すよりもマッチするかどうかじゃ?
マッチすれば指定単語を含むわけだし・・・
index関数使え
>595 まぁ、釣りではないとして回答しておこう。 >理解できない言葉があると勉強の効率が悪いので私にとっては >言葉の意味は重要なんですよ。 細かいことにこだわりすぎだと思うがね。 プログラミング用語自体、文脈で結構柔軟な解釈がされることもある。 所詮、用語自体が「表記法」に過ぎないと思う。 >614 hex が文字列を引数としてとること、Perl が型変換を自動で行うこと、 0xa は数値であること、キーワード以外の単語は文字列として扱われること、 以上を元に少し考えてみれば? >ところでこの話はスレ違いなんですか? >ここは変換処理にかかわる事ならOKっていうわけではないんですか^^; スレタイ嫁、変換処理ってなんだよ? # あと末尾のは顔文字のつもりかしらんが、個人的に妙にいらつくぞ。 >どっかにいろんな「〜値」について詳しく解説してるサイト知りませんか? 総じて Perl コーディング以前の問題のような気がするんだよ。
621 :
615 :04/05/08 18:44 ID:t33qT0Ph
>>619 説明文が激しく半端でした。
HTMLから必要な単語を抜き出して、それがそのHTML内に何回出現しているか
確認するプログラムを書いています。
例えば
<FONT COLOR="#ffff00">そいつぁショボンヌ(´・ω・`)</FONT>
という行からindex関数で前のタグと後ろのタグを見つけて
「そいつぁショボンヌ(´・ω・`)」を単語として抜き出しています。
この単語を文章とマッチさせているのですが、どうも顔文字が上手くマッチしてくれないのです。
他の単語は普通にマッチするようなので、顔文字の文字がまずいのかなと思ったのですが、、、、、
index関数の言い分: おれはどんなやつよりも素早く目的のフレーズを探し出して みせるぜ!
623 :
595 :04/05/08 19:07 ID:???
>>620 コーディング 【coding】
(1)
⇒符号化(ふごうか)
(2)コンピューターなどで,一定のプログラム言語を用いて,プログラムを作成すること。
ふごうか 【符号化】
(1)
〔encoding〕
情報がある一定の規則に基づいて符号に変換されること。記憶における記銘や,非言語コミュニケーションにおける表情の表出などもこの例として捉(とら)えられる。
→解読
(2)
〔数〕
〔coding〕
一連の情報を適切な符号系を定めて符号に変換すること。
とありましたので変換処理とも言えるのかなっと・・・
顔文字の件申し訳ないです。
>総じて Perl コーディング以前の問題のような気がするんだよ。
かもしれませんね。
私的には記述方法とかってあまり問題じゃなくて、関数やコーディングの機能・処理内容自体を日本語のみで全くの素人にでも
教える事ができるようになる事が大切かなって思ってます。なので、細かいとこにこだわって他人より要領が
すこぶる悪い・・・自分でも自覚してます。
とりあずこのスレで、私のように基本的な部分を質問するのは迷惑になってしまうようですね。ごめんなさい。
>>621 quotemetaか\Q...\E使を適切に使ってないに一票。
625 :
595 :04/05/08 19:23 ID:???
>プログラミングで構造体と言うと既にある型を使って新しい型を作ることを指す。 >Perlは基本的にデータを文字列で記憶するからそれをバイナリ値にしたものが >バイナリ構造体。 バイナリ→テキスト形式(文字データ)以外のデータ形式全般。 値がテキスト形式以外のデータ形式であれば全てバイナリ値。 char値→バイナリ値の分類の中の・・・・ とりあえずここで学んだことをまとめておきました。それでは失礼します。
626 :
名無しさん :04/05/08 19:29 ID:cBod9el7
>>595 氏
バイナリ構造体なんてどっから拾ってきた言葉だかしらんが、言葉は
何かを説明するためにあるのであって、造語を前提なしに持ち出して
どういう意味なんだと考える自体が無意味。初心的どうこうではない。
プログラムはアルゴリズム実現の表記手段であって哲学的誤謬に陥るのは愚。
>>624 同じく一票
顔文字って()を使うからねぇ。。。Perlのメタ文字が入る場合は注意だし。
627 :
595 :04/05/08 19:31 ID:???
キャラクタ→キーボードから入力可能な文字や記号。 pack("C*",0x41); #A 第2引数以降のリストで指定したデータを、キーボードから入力可能な文字や記号に 一定の規則をもって変換する。(char値に変換する)
>>621 indexで書いてみるテスト。
my $cnt = 0;
my $pos = 0;
$cnt++ while(($pos = index($data, $match_str, $pos)+1) > 0);
>>595 Perlより先にアセンブラやってみるというのはどう?
# これ以上はスレ違いなので、後は本でも読んでみては。
629 :
595 :04/05/08 20:31 ID:???
アセンブラ→アセンブリ言語で書かれたプログラムを機械語に翻訳するのがアセンブラ。
>>628 アドバイスありがとうございます。とりあえず、ゆっくり地道にやっていこうと思います。
バイナリ構造体についての質問は完全にスレ違いでしたね。
ところでこうゆう質問もスレ違いでしょうか?↓
相変わらず基礎的な部分で、コーディング(符号化)の流れについてなんですが、
例えばUNIX系のサーバにあるwebページに対して、「あいうえお」と送ったとします。
そのときの内部で起こっている事は、
1、送られてきた文字データをEUCでコーディング(エンコード)
2、それをさらにASCUコードでエンコード
文字列データとして表示させるには
1、まずはASCUコード化されたデータを受け取りASCU方式でデコード
2、それをさらにEUCでデコード
で、合っていますか?なんか違う気もするんですが・・・
一番初めに文字列データをどの形式でコーディングするかの決定権をもっているのは
クライアント側のユーザですよね?受け取り側で自動でされる処理はASCUでエンコードするのみですか?
でもそれだと、何故UNIX系でEUCを指定されているのか?ですし・・
・・もしかしてこれもスレ違いな内容でしたら、一言「スレ違い」とお返事ください。
sub auto_link { $_[0] =~ s/([^=^\"]|^)(https?\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+)/$1<a href=\"$2\" target=\"_blank\">$2<\/a>/g; } この場合 URLがある文字数を超えたときにそれ以降を省略するようにするにはどうしたらいいのでしょうか substrとか使えばいいんだと思うんですけどよく解りません。
>>630 my $limit = 16;
s/([^=^\"]|^)(https?\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+)/
"$1<a href=\"$2\" target=\"_blank\">".substr($2, 0, $limit).
(length($2) > $limit && '..')."<\/a>"/egx;
こんなとか。
>>632 ありがとうございます!すごいや!エロい人
と思ったらURLがうまくリンクにならないです...orz
635 :
630 :04/05/08 23:06 ID:???
"$_[0] =~ "抜けてたからですね...申し訳ないです。ちゃんと動きました。
636 :
nobodyさん :04/05/09 06:07 ID:6P0icBMn
流れからするとレベルの低い質問です。 ファイルオープン後、 @temp = <FH>; とすると行ごとに配列へ格納されますが、 \nも含めてひとつのスカラ変数に格納したいのです。 普通はjoin関数であとから結合するのでしょうか? どうも冗長な気がし質問しました。
>>636 undef $/;
$temp=<FH>;
638 :
636 :04/05/09 11:39 ID:6P0icBMn
>>637 ありがとうございます!
$1〜、$_以外の特殊変数はまだまだ理解出来ないと思ってたら、こうやって使うんですね。
639 :
nobodyさん :04/05/09 12:54 ID:LzQ8Bs2h
ソートについての質問です。 @list = (0,1,2,3,4,5,6,7,8,9,10,11); sub number { if ($a < $b) { return -1; } elsif ($a == $b) { return 0; } elsif ($a > $b) { return 1; } } @result = sort number @list; @resultが何故0,1,2,3,4,5,6,7,8,9,10,11になるのか理解できません。 漏れの考えですが、$aに0、$bに1が代入される。比較され-1が返る。@resultの第一要素は「-1」になる。 以降繰り返しで@resultは-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1となるのでは?と考えました。 @resultが何故0,1,2,3,4,5,6,7,8,9,10,11になるのか教えてください。
$a < $b なら ($a, $b) $a == $b なら ($a, $b) のまま $a > $b なら ($b, $a) の配列要素の順番入れ替えをおこなうのが sort 関数 数値の昇順や降順にソートすることは簡単にできる。 @result= sort {$a <=> $b} @list; @result= sort {$b <=> $a} @list;
641 :
639 :04/05/09 15:23 ID:???
なるのほどsort関数が順番の入れ替えを行っていたのか
>>640 ありがとう
このスレの住人のギャグセンスはなんだな。オサーンばっか
643 :
nobodyさん :04/05/09 16:26 ID:Si4CJEJN
cgiの実行結果を読み込ませたいのですが open(IN,"/なんとか/test.cgi|"); @file = <IN>; close(IN); print @file; だと出来るのに open(IN,"/なんとか/test.cgi?hoge|"); @file = <IN>; close(IN); print @file; だと「sh: /なんとか/test.cgi?hoge: No such file or directory」と表示され開けません。 どなたかご教授ください。
コマンドラインからの引数の渡し方を勉強しなさい。
このすれ用の、質問->解答の流れを登録できるサイトを作ろうと思うんですが、どうでしょ?
意味わかんね。
>>645 失敗する、間違いない。
2ちゃんの掲示板だからこそ、人が集まりこういう流れが成立してる。
他スレでもそういう案は見かけるが、大抵が誘導に失敗し元に戻る。
Q&Aのデータベースなら活用されるとは思うが。
>>647 なるほど。 まぁ、暇つぶしにシステム考えてみます。
FAQ集なら歓迎。
>>648 ム板のPerlスレにもそんなことをやろうとしたヤシがいたが、結局公開に至らず。
日本人って熱は冷めやすいから、飽きたんだろうね。
そういうことなので、
>>648 にはごく基本的なシステムでとりあえず公開することをきぼん。
その上で突込みが入れば修正すればいいんだし、自分で修正できなかったらここで質問すればいいんだし…
>>648 Wikiなら暇な人が触ってくれると思われ
ここでは失敗する気がする。 ちょっとしたシステムの不満でもみんな吐きまくるぞ。 そして最後には自分で作った方が早いとなっていく。 他人のシステムで満足できるような人間はこのスレにあまり来ないだろうし。 やるんだったらいっそ逆にPerl使わないほうが安全かも。 もしくはこのスレ住人の力を結集して作っていくか。
>>645 俺はめんどくさいしやる気も無いのだが、まずは
過去ログを全検索して一覧表示できるようにっつうのは?
あとは>>をみてリンクツリー構成表示するとかね。
手動なんて絶対力つきるしPerlスレなんだからPerlつこて自動化すれ。
パンチ5分の2に荒らされるのでは?
655 :
643 :04/05/09 18:19 ID:???
>>644 盛り上がっているところすいません
open(IN,"/なんとか/test.cgi hoge|");
として受け取るtest.cgiに@ARGVを使うということでしょうか?
test.cgiに手を加えないで出来る方法があったらその方がよいのですが無理ですか?
open(IN, "env QUERY_STRING=hoge /path/to/test.cgi |");
掲示板作ってるんだけどさ… AUだけ 掲示板に書き込んだ→書き込み完了画面表示→戻るリンク(その掲示板のトップへ行く) この最後の戻るリンクをクリックすると、また書き込みしちゃうんだけど、どうすれば対処できるんでしょうか? imode、vodafoneはちゃんと掲示板のトップに戻ってくれるんですが orz
>>658 だめなんです、解決方法が載ってないんです orz
SMART! ウェブ講座の中の人たちはいつまで江ノ島旅行に行ってるのですか?
661 :
nobodyさん :04/05/10 14:48 ID:9bXUHl3j
ソケットを使ってどこかのHTMLを取得し、それを加工して表示する というプログラムを書いています。 少々疑問に思ったのですが、ソケットでHTMLを獲得するのと ウェブブラウザでHTMLを獲得するのとでは何が違うのでしょう? 処理するのがユーザ側かサーバ側か、の違いと見て良いんでしょうか。
>>661 ブラウザも同じソケット通信してるから、同じこと。
そのようにサーバ側でソケット使おうとユーザ側で使おうと
どちらもHTTPクライアントリクエストをwwwサーバに対しておこなっている
変数の名前を変数にしたい場合はどのようにすればよろしいでしょうか。 PHPなら$foo = "val";のとき$$fooで$valにアクセス出来ますが,Perlはちょっと違いますか? $val = "hoge"; $prm = "val"; print $$prm; #「print $val;」と同じ結果 $val = "hoge"; $HASH{'prm'} = "val"; print $$HASH{'prm'}; #ダメ
ブレースでくくれば同様にできるよ。でも必要性を感じない。
訂正します。use strict;だとCan't use string ("val") as a SCALAR ref while "strict refs" in use at...などと怒られます。 use strict; my $val = "hogehoge"; my $prm = "val"; print $$prm; #だめ print ${$prm}; #これもだめ
絶対にシンボリックリファレンスでないとダメなん? 他のアプローチを考えたほうが早いと思うが…
他にはどういうやり方があるのでしょうか?
use strict; my $prm= 'val'; my $$prm= 'hoge'; print $$prm; or #use strict;
no strict 'refs';
myで宣言するローカル変数はシンボリックリファレンスの対象にならないから my $$prm= 'hoge'; なんてのは無理ってもんだろう。
2次元配列を関数内で作成しその戻り値を受け取りたいのですがうまくいきません。 どうすればいいのでしょうか。 以下のようでは空っぽのままです。 -- $test = &hairetu; print $test[0][0]; print $test[1][1]; sub hairetu { $box[0][0] = 0; $box[0][1] = 0; $box[1][0] = 0; $box[0][2] = 0; return $box; }
訂正 ×$box[0][2] = 0; ○$box[1][1] = 0;
$test = &hairetu; print $$test[0][0]; print $$test[1][1]; sub hairetu { $box[0][0] = 0; $box[0][1] = 0; $box[1][0] = 0; $box[1][1] = 0; return \@box; }
>>672 $test = &hairetu;
print $test->[0][0];
print $test->[1][1];
sub hairetu {
$box->[0][0] = 0;
$box->[0][1] = 0;
$box->[1][0] = 0;
$box->[0][2] = 0;
return $box;
}
676 :
672 :04/05/10 16:51 ID:???
>>675 ありがとうございました。
無事思うような動作が出来ました。
677 :
674 :04/05/10 16:59 ID:???
_| ̄|○
678 :
661 :04/05/10 17:04 ID:9bXUHl3j
>>662 するとソケットを使用したHTML取得CGIをAと言うサーバに置いた場合
ブラウザからCGIを呼び出すと
ブラウザ→CGI→HTML (→はリクエスト)
となるのではなく
ブラウザ→HTML
となるのでしょうか?
CGIを置いたサーバに負荷が掛かりそうでちょっと尻込みしているのですが
サーバ側に負荷は行かない、のかな?
そりゃ多少の負荷はかかるでしょ。 でもそんなこと言ってたらCGIは何一つ動かせない。 それ以前に、ソケットの使えないところも多いけどね。
>>678 > ブラウザ→CGI→HTML (→はリクエスト)
が正解。
cgiがプロキシのような役割をするわけやね。
>>657 戻るリンクの代わりに戻るフォームもしくはlocationで飛ばす。
でいいような気がするけど確信はない。
いい加減な情報でスマソ。
残念ながら携帯はlocationでのリダイレクトに対応して無い物が多いよ。
まず全角というところに突っ込みを入れたい
684 :
すまん :04/05/10 19:14 ID:DDeHe7Rs
EUC-JPの機種依存文字が変数に含まれているかどうか 調べるにはどうしたらいいの?
携帯の動作なんか考えたこと無いな
リファレンスとデリファレンスがどうしてもわかりません。 詳しく載ってる本やサイトってないでようか?
何が解らんの。 ラクダ本とか perlref じゃ駄目?
>661 ブラウザで個人的に見るのは著作権的に合法。 ソケットでCGIで取得して不特定多数に閲覧可能な状態にしてしまうのは著作権的に違法。
>>689 公開http proxyが違法という主張?
anonymizerは? exciteやinfoseekのweb翻訳は?
今、このスレを見つけて1から読んでいるが 「恥知らず」という言葉を思い出したよ。 >「でも、本当に簡単なミスでも、指摘されるまで気付かないことだってありますよ。 」 簡単なミスに、指摘されるまで気付かない事自体 恥ずかしい事と思わなかったのか? そういう台詞を言う事自体「甘え」だと思わなかったのか? ちゃんとした大人なら、そんな甘えた台詞は恥ずかしくて言えないものだが。 こういうやつが設計をやると、三びし自みたいな日さんな事故がおきるんだろうな。
今頃レスしてるのも恥ずかしいと思うけどな。
変に行間空けるのも恥ずかしいと思うけどな。 文章に自信が無いから飾ってるだけ。
ファイルの読み込み時にも排他処理は必要なんでしょうか 他人様のスクリプトを見てみたところ ロックしている方もいますし、ロックしていない方も居ます。
>>694 書き込んでいる真っ最中のデータを読み込んだり、
読み込んでる最中に書き込み始めたりしてもいいのなら
読込時に排他処理は不要。
「共有ロック」なんてのも調べてみると吉。
696 :
nobodyさん :04/05/11 12:08 ID:yHiP+CIC
>>695 やっぱり書き込んでいる真っ最中のデータを読み込んだり、
読み込んでる最中に書き込み始めたりしちゃうわけですね。
システム側でなんとかしてくれるのかと思ってました。
共有ロック、取り入れてみたいと思います
ありがとうございました
697 :
nobodyさん :04/05/11 13:57 ID:xHapOBBn
Location ヘッダは、Locationヘッダをブラウザに返しブラウザが指定したファイルに飛ぶのか、 サーバーがLocationヘッダで指定されたファイルを返すのか、 どちらでしょう? どちらでもなければ、それを教えてください。
すいませんが、コンパイルの仕方を教えてくれないでしょうか? サーバをテストに使ったらファイルが消えた時に責任取れないんで ローカルでテストしたいんですがどうすれば・・・
Perlはコンパイルせずとも動きますが。
MySQLをPerlから操作しようとしました。 そしたらinstall_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC ... とエラーがでました。 恐らくモジュールが入ってないのかと思いますが どうすればインストールできるでしょうか。 一応、Msql-Mysql-modules-1.2219と言うのをDLしてきましたが root権限など持っていないので説明にある方法ではインストールできません。 cgiとおなじフォルダにmysql.pmを置いてやれば動くような気もしますが 取り敢えず/mysql/libの中身をまるごと置いてやっただけでは動きませんでした。
702 :
699 :04/05/11 15:42 ID:???
テキストファイルに書いたプログラムをデバッグする方法が知りたいのです
705 :
699 :04/05/11 17:35 ID:???
では、私はどこへ行けばいいのでしょうか? とりあえず上のリンク先には行ってきましたが・・・
<!--user-->という文字を、<a href="$usaddress">($usaddressは変数展開される) という文字に変換したいのですが、 $line =~ s/<!--user-->/<a href="$usaddress">/g; では変換されません。 どこが間違っているのでしょうか?
>>707 Perlがこわれています。再インストールをしてください。
710 :
707 :04/05/11 18:24 ID:???
おれ708じゃねーけど、手元のperlではこうなるからな。 これは普通には変換されているというと思うのだが。 % cat user.pl $usaddress = "foo"; $line = "<!--user-->"; $line =~ s/<!--user-->/<a href="$usaddress">/g; print $line, "\n"; % perl user.pl <a href="foo">
712 :
712 :04/05/11 19:08 ID:j+/3ilVK
>>712 ここはコーディングスレなのでスレ違い。
714 :
712 :04/05/11 19:20 ID:???
うぅぅぅ・・ すいません・・・
( ゚д゚)ハァ?
717 :
707 :04/05/11 20:54 ID:???
>>711 すいません、1からそのように書いたら動きました。
なんか全角スペースかなにか入ってたのかもしれません。
ありがとうございます
718 :
nobodyさん :04/05/11 21:28 ID:M72HBXcr
719 :
718 :04/05/11 21:40 ID:M72HBXcr
コンソールでperl -cw stove.plとしてチェックしても 特にエラーは出ていません。 しかし、Windows2000 + Apache2 + perl5.6.1では 鯖エラー500が出てしまいます。 どの辺がまずいのでしょうか?
flock とか使ってたりして・・・
721 :
718 :04/05/11 21:48 ID:M72HBXcr
コマンドプロンプトで perl stove.pl としたら、htmlのソースが表示されました。 これはサーバの問題でしょうか? それとも、ソースに不備があってもコマンドプロンプトでは表示されるんでしょうか?
CGIの拡張子設定が .pl になってないんじゃ?
723 :
718 :04/05/11 21:52 ID:M72HBXcr
なんかふざけたやつだな。 答える気にならん。
726 :
718 :04/05/11 22:17 ID:lgCnMYEo
>>722 アドバイスありがとうございます。
拡張子設定はplになっています。
>>724 ありがとうございます。
よく読んでみます。
727 :
718 :04/05/11 22:23 ID:lgCnMYEo
>>724 print "Content-type: text/html", "\n\n";
が抜けていた為だったようです。
おかげで、エラーは出なくなりました。
しかし、ONボタンを押してもストーブが付きません。
なぜでしょうか?
728 :
718 :04/05/11 22:37 ID:lgCnMYEo
自己レスです。 ’O N'などとスペースを入れてしまっていました。 ONに直して動くようになりました。
729 :
nobodyさん :04/05/12 00:31 ID:cFb5OXA3
@$hoge->a='1'; A$hoge->a('1'); Bif ($hoge->a eq '1'){ } @左辺値としても使えて、$hoge->{'a'}に'1'をセットする Aみたいに引数で$hoge->{'a'}にセットできて Bみたいに引数が与えられない場合$hoge->{'a'}の値を返す ようなメソッドを書きたいのですけどどうやったらいいのか判りませんです どっかで見た気がするけど見つからないです 気が向いたら教えてくださいまし
質問です。
配布しているcgiに以下の記述がありました。
2ch型掲示板でID生成部分の一部です。
> $id = crypt($identify,"${year}S\.E${mday}X${mon}");
crypt関数への第二引数の部分で、「S」や「\.」、「E」、「X」はただのノイズ用文字なのでしょうか?
\記号が含まれてるため何か意味を持つのではないかと思い質問いたしました。
引用元
ttp://www.toshinari.net/ 「2chブラウザ対応掲示板」
734 :
731 :04/05/12 11:58 ID:???
>>732 回答ありがとうございます。
saltは先頭が$1$以外の場合、通常先頭2文字を使うため、
$id1 = crypt($identify,"${year}"); # 104
$id2 = crypt($identify,"${year}S\.E${mday}X${mon}"); # 104S.E12X4
のどちらでも同じ結果となりました。(v5.8.2 built for MSWin32-x86-multi-thread)
もし何らかの要因で各変数が空だとしてもEとXは不要になると思うんです。
ひょっとしてコーディングミスなのでしょうか。
>>731 のやり方で2chと互換性のあるトリップ生成できるの?
もしそうならこの話題継続キボン
737 :
731 :04/05/12 13:19 ID:???
>>735 どうもありがとうございました。
>>736 トリップはトリップキーをplainに、トリップキーの2文字目3文字目をsaltに、
足りない場合はH.を末尾に置き、後ろからn文字取ればn桁トリップになります。
$trip = substr(crypt($key, substr($key."H.", 1, 2)), -8); # 8桁トリップ
2chでもしたらばでもトリップ生成方法は同じのようです。
私の質問したID部分は、本家2chの場合トリップよりも複雑になっているようですが。
for と foreach の内部処理は同じという事を初心者板で見ましたが、 では foreach(@array) は for のように書けるのでしょうか。 こちらでは for($i = 0; @array; ++$i) とかやってみたのですがエラーが出ました。
初心者スレでした。
for(@array) for($i=0; $i<@array; $i++)
という事は最終的に for($i = 0; $i < @array; $_ = $array[$i], ++$i) のような感じになってるのですね。 スッキリしました。
>>741 単にforとforeachを交換しても実行するバイトコードは変わらない、というだけの話だと思うが。
for(@array){ ... } # OK
foreach(my $i = 0; $i < @array; $i++){ .. } # OK
for($i = 0; $i < @array; $_ = $array[$i], ++$i){} はfor(@array){}に比べると
ずっと遅い、$_がlocal化されない、$_を書き換えても@arrayの要素は変わらない、などの違いがあるしな。
>>743 添字使いたいときもfor(my $i = 0; $i < @array, $i++) {...} よりfor(0..$#array) {...}の
方が速いよね。なんとなく0..$#arrayのリストを最初に作ってから〜とかしそうで
最初は抵抗あったけど、試してみるとその辺は処理系がよろしくやってくれてる
みたいだし。
無効コンテキストの場合、演算子の位置はどちらが見易いですか。 多くの人はポストのようですが。 #オプティマイザが勝手にプリにしてくれるのはラクダ本で理解
>>745 インクリメント・デクリメント演算子のことか?
普通はポストだが、C++のコードを読み書きした直後はついプリにしてしまうね。
$a++ ++$a ってことか?
$hoge++; で統一だな。 C#かなにかも後置推奨だった木がするので。 最もC#などとPerlじゃ変数の命名規則も違うけど
>>748 もっと色々のコーディングをしてみると前置も後置も便利なのが判るかと思います。
場合によって使い分けろってことだな。
プリデクリメントとポストインクリメント固定。 アセンブラとCからの習慣。
メール送信のプログラムを書いているのですが、 サーバの環境上、Dateフィールドが自動で設定されません。 そこで、自力でDateフィールドを Date: Wed, 12 May 2004 08:50:48 +0900 のように書きたいのですが、書き方がわかりません。 (途中まではわかるのですが、下記例の最後の行がわかりません) どなたかご存じの方、教えていただければ幸いです。 # 日時の取得 $ENV{'TZ'} = "JST-9";#タイムゾーンの設定 $times = time();#時刻を取得 ($sec,$min,$hour,$mday,$month,$year,$wday,$stime) = localtime($times); $month++; $year = $year + 2000; @month = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); @weekly = ('Sun', 'Mon', 'Tue', 'Wed', 'Thr', 'Fri', 'Sut');#表示したい曜日文字 $Date = sprintf?(ここ不明)
754 :
752 :04/05/13 10:57 ID:???
>>753 すみません、それをみてもちんぷんかんぷんでして。。。
できれば
>>752 のケースの例を教えていただけませんでしょうか?
そこから勉強したいと思いまして。
すみませんが、よろしくお願いいたします。
755 :
752 :04/05/13 11:33 ID:???
以下のように、sprintfを3回つかうことはできたのですが、1回ですます方法がわかりません。 sprinfの中でカンマを表示したく、それはどのようにすればいいのでしょうか? $ENV{'TZ'} = "JST-9";#タイムゾーンの設定 $times = time();#時刻を取得 ($sec,$min,$hour,$mday,$month,$year,$wday,$stime) = localtime($times); $year = $year + 1900; @month_array = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); @weekly_array = ('Sun', 'Mon', 'Tue', 'Wed', 'Thr', 'Fri', 'Sut');#表示したい曜日文字 $hour = sprintf( "%02d", $hour ); $min = sprintf( "%02d", $min ); $sec = sprintf( "%02d", $sec ); my $Date = qq|$weekly_array[$wday], $mday $month_array[$month] $year $hour:$min:$sec +0900|;
$date = sprintf("Date: %s, %02d %s %04d %02d:%02d:%02d", $weekly[$wday], $mday, $month_array[$month], $year, $hour, $min, $sec);
$weekly[$wday] を $weekly_array[$wday] に修正しといて。
>>755 strftime使った方が楽じゃない?
use POSIX qw(strftime);
my $Date = strftime("%a, %d %b %Y %H:%M:%S %z", localtime);
sprintf(printf)の使い方も憶えといて損はないと思うけどね。激しく基本だと思う。
>>755 # JST == GMT + 9 時間
my $time = time + 9 * 60 * 60;
my $diff = '+0900';
my($sec, $min, $hour, $mday, $month, $year, $wday) = gmtime $time;
my @month = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
my @wday = qw(Sun Mon Tue Wed Thr Fri Sut);
my $Date = sprintf
'Date: %s, %02d %s %04d %02d:%02d:%02d %s',
($wday[$wday], $mday, $month[$month], $year + 1900, $hour, $min, $sec, $diff)
;
# 別解
my $Date = sprintf
'Date: %s, %02d %s %04d %02d:%02d:%02d %s',
(split /\W+/, scalar gmtime $time)[0,2,1,6,3,4,5], $diff
;
my $Date = "Date: " . `/bin/date -R`; 色々な方法があるかと。
スレ違いかどうか自信ないけど、質問。 Perlでの変数の値域ってどうなっているんでしょう? 文字列で扱うときはいいんですけど、数値で扱うときはどこまで大きい数字が扱えるかは、 Perlのバージョンとかで違うのでしょうか?
±999999999999999
>>761 Perlのバージョンでは基本的には変わらない(perl6になれば変わるかもしれない)が、
バージョンは同じでもコンパイルオプションやOSによって異なる可能性がある。
まぁ普通はこんな感じだと思うが。小さすぎると思うならMath::Big(Int|Float)で。
> perl "-V:[in]v(size|type)"
ivsize='4'
ivtype='long'
nvsize='8'
nvtype='double'
765 :
nobodyさん :04/05/14 04:19 ID:7/s5Izsl
crypt関数の使用可否によって処理を振り分けたくて、以下のようなコードを書きました。 # crypt関数使用可否チェック undef $check_crypt; $check_crypt = eval { crypt('1111', '11'); 1; }; # ここが23行目 if ($@) { $check_crypt = 2; } if ($check_crypt == 1) { crypt関数が使える時の処理 } elsif ($check_crypt == 2) { crypt関数が使えない時の処理 } else { 不明な時の処理 } これを、-wオプション付で構文チェックすると Useless use of a constant in void context at c:\www\〜\xxx.cgi line 23. と注意されたのですが、どこが問題なんでしょうか? このままでも使用に問題は無いのですが、少し気になるので・・。 よろしくお願いします。
>>765 戻り値を使うべき関数であるところの crypt() が
無効コンテキスト (void context) に置かれているから。
my $check_crypt = eval { crypt('1111', '11') } ? 1 : $@ ? 2 : 0;
とか
if (eval { crypt('1111', '11') }) { 使用可能 }
elsif ($@) { 未実装 }
else { crypt が何らかのエラー }
>>755 use
HTTP::Date; my $Date = time2str(time()+60*60*9);
$Date =~ s/GMT/+0900/;
とか。
>>761 use Config;
print "このシステムでは、\n",
"整数型(IV)はCで言うと$Config{ivtype}で、バイト長は$Config{ivsize}バイト\n",
"実数型(NV)はCで言うと$Config{nvtype}で、バイト長は$Config{nvsize}バイト\n";
いろいろ調べてみては。
768 :
752 :04/05/14 10:31 ID:???
皆様、いろんな解法ありがとうございます。 参考になります。 sprintfもなんとなくわかってきました。精進します。 ありがとうございます。
Perlで例えば2004/5/14と言う日付のデータが在ったとした時 その日はその月の何週間目になるか調べる方法は在りますか? この場合3が取得できるようにしたいです。
770 :
765 :04/05/14 10:52 ID:???
>>766 レスありがとうございます。
問題の箇所を
$check_crypt = eval { crypt('1111', '11') } ? 1 : $@ ? 2 : 0;
と書き換えることにより、無事解決することができました。
無効コンテキストというものに理解が弱く、検索や書籍で調べても
まだ完全に理解するまでには至っていないのですが、
crypt関数の戻り値を利用すべき所なのに利用していなかったことが
問題だったのですね?
ちゃんと理解できるまで、もっと調べてみます。
ありがとうございました。
>>769 問題の説明が曖昧だ。「その月の何週間目」という言い方はあまり
しないと思うのではっきりと定義して欲しい。
多分、月を週に分割してそのいくつ目に入るかって意味だとは思う
のだが、週の始まりは何曜日かとか、最初の週は0週目なのか
1週目なのかとかといった数え方の好みがあるだろうし。
Date::Manip使うかPOSIXのstrftimeの%Uか%W使うかだろうなぁ。
すみません、 .htpasswdで発行されたパスワードとIDを保存してあるリストを、 perlで組んだCGI(例えばBBSやチャット)の認証の際に利用したいと 思っているのですが、htpasswdで暗号化されたパスワードとBBSとかの フォームに入力されたパスワードをコンペアする良い方法はないものでしょうか。
775 :
761 :04/05/14 20:16 ID:???
レスdくすです。 調べてみます。
>>769 日付から曜日を求めるツェーラの公式ってのがあったと思う
ちと、検索しても全然引っかからない…
その公式の事を書いてあった本も見つからない…
質問は「調べる方法は在りますか?」なので
ありますと言っておこう。
ったく。しゃーねーなぁ ツェーラーも見つけられないのか [(y+[y/4]-[y/100]+[y/400]+[13m+8]/5+d)%7]
>776 Zeller の公式(普通ツェラーと表記すると思う)はあくまで曜日(というか日数)を求めるものなので、 それだけでは単純に何週目という値が出てこない。 以前 CGI 関係のスレで質問があって書いてみたことがあるけど、もうひとひねり必要。
ツェラーで検索したら直ぐ引っかかったよ。
zellerでぐぐるといろいろやってる人がいるね。 「日曜=0曜日というルールだと2004/5/1は6曜日。 2004/5/16はカレンダーで21マス目に現れる。」 これから気付けばint使って簡単に書けるでしょ。
782 :
lock :04/05/15 11:43 ID:if9npvZf
あの、最近CGIを作らんとならんコトになりまして、 ファイルのロック関係を調べたのですがちょっとお馬鹿な俺の脳味噌では理解出来ませんでした。 取り敢えずめんどう事は避けたいので、実行ロックをかけてプロセスが同時に動けないようにしたいです。 初めての経験なので負荷とか速度は気にしないことにして、安全を優先させるつもりです。 fllckを使って実現させようと思っているのですが、どのように記述すれば最も安全なのでしょうか? 開発環境はwin98ですが、本番の実行環境はUNIX系のOSです。 お馬鹿な質問で申し訳ありませんが、どなたかよろしくお願いします。
最大接続数を1に設定するよろし
>>782 安全優先ならちゃんと仕組みを理解してから使う。
急を要するならどこかから似たCGI探してから丸投げスレで頼みこむ。
>>782 もう一台、検証用にマシンを用意してLinuxか*BSDでもインスコ
したほうがよい。
現行のwin98をwin2000以降にしてVMwareって手もあるが。
>>782 とりあえずWindows98ではflockがかからなかったと思うのだが。。
UNIXの中にもかからんのがあるらしい。
788 :
782 :04/05/15 17:32 ID:MHBM3z7f
ロックについて少しだけ分かってきました。 検索すると以下のコードに辿り着いたのですが、 open(OUT, "+< outfile.txt"); flock(OUT, 2); truncate(OUT, 0); seek(OUT, 0, 0); print OUT "........"; close(OUT); これはイツロックが解除されてるんでしょうか? closeの時にファイルハンドルといっしょに消滅してるの?? と言いますか実行ロックがやりたいんだけど、プログラムの先頭に open(OUT, "+< outfile.txt"); flock(OUT, 2); これを書きっぱなしにしたらダメですか?
>>788 >プログラムの先頭に(略)これを書きっぱなしにしたらダメですか?
プログラムの開始はそこじゃないですよ。
スタートアップルーチン,perl_alloc,construct,parse(,run)して初めて(Perl)プログラムの先頭に行くわけです。
>>788 実行ロックって何よ?
脳内用語を使うな
791 :
782 :04/05/15 18:08 ID:MHBM3z7f
すみません、実行ロックは実行フェーズに対するロックの意でした。 つまり、インタプリタに引き渡された直後の実行フェーズの一番初めの処理としてロックをかけ、 それ以後の処理を複数のプロセスが同時に動いてほしくないと言うことです。
LOCK_EXをlock_executingの略だと思っているとか。んなわけないか。
なんかウザくなってきたな。
>>791 BEGINブロック作ってそこでflock。
そして、ENDブロックでclose。
壊れてもいいファイルだから、closeを書かなくても、
CGIなら問題ないのだろうけど、書いておくのがお約束。
795 :
nobodyさん :04/05/15 18:33 ID:jlBwPWFJ
Perlどっかから貰ってきて、 掲示板のデザイン変えようとしてもどこにHTML書けばいいか分かりません。 属性名を変数にしてPrintで書けば良いの?
797 :
782 :04/05/15 18:53 ID:???
ありがとうございますた。 794さんの方法で行ってみます。 でも耐久テストに失敗したらまた来るかもしれませぬ。。
>>791 何か小難しい事書いてるけどそんな特殊な事やろうとしてるのかな。
やりたい処理を具体的に書けば良い例がいくらでも出てくる気がするが。
>>797 耐久テストって何じゃいw
単にファイルロックがどんなものか理解できていないだけじゃない?
クラスfooを継承する子クラスhogeを作って、 use hoge; my $hoge = new hoge(); $hoge->method(@args); などというように、hogeオブジェクトのメソッドを呼び出そうとすると、 親のfoo::method()が呼ばれて、hoge::method()が無視されてしまうことが よくあります。hoge::method内でSUPERなどで明示的に呼んではいません。 fooのmethodをmethod2などにリネームすると、「methodなんてメソッドは パッケージhogeには無い、ひょっとしたらhogeをロードし忘れてるんじゃないの?」 と怒られてしまいます。 この現象は何故起こるのでしょうか? my $hoge = new hoge();と$hoge->method(@args);の間に print ref $hoge, "\n";を入れてやると、ちゃんと$hogeはhogeになってます。 原因が分からないので、とてもとてもデバッグしにくいのですが、hoge::methodに バグがあって読めないのなら、強制的にhoge::methodを呼び出して、 問題のある行でエラー吐いてdieさせるとかはできないのでしょうか?
>>800 同じスクリプトで結果が異なる場合があるのん?
実際にあってバグを疑うのなら環境を書くべきじゃないのん?
>>800 パッケージhogeのmethodをnethodみたいにタイプミスしてない?
>>801 すいません、環境書き忘れていました。
Debian woody + Perl 5.6.1です。
同じスクリプトで結果が異なるわけではなく、最初は親クラスのが呼び出されるけど、
子クラスのmethodの中をデバッグ、というか、例えば文法が間違ってる部分を
直したりすると、ちゃんと子クラスのを呼んでくれたりするのですが、
何故親クラスのを呼びに行くのか、何故子クラスのオブジェクトにmethodが無いなどと
言われるのか…。
文法等が間違っているのなら、そこでエラー吐いて止まって欲しいのですが、
親クラスのを平然と呼ばれて続行されると、どこが間違ってるのかわからないので…。
>>802 それも無いです。
hoge::methodだけではなく、他のメソッドも呼べなかったりしますし…。
mod_perl で変数の消滅してないだけだったりして
>>805 mod_perlってapacheのモジュールですよね?
apacheは使ったこと無いのでよく知らないのですが、というかapacheのmod_perlなら
使ってないです。普通のPerl5.6.1です。
>>806 100%アンタのバグだということは確かだが、さっぱり要領を得ないな。
コード晒せ。
>>807 私もPerlのバグだとは思ってないです。
どうもhogeの中でuseしているモジュールが、インストールできてないとかで読めない
場合に発生するみたいですが…。
Perl 5.6.1 物ぐさしないで新しいの入れてご覧。 ActivePerl build 631以前はTkが同梱されておりません。
これは具体例が無いと分からないね。 問題の起きるサンプルを書いて欲しいところ。
有る特定の日が何曜日か知る方法って有りますか? 今日、今だったらlocaltimeで取得出来ますけど。 引数で何とか出来そうですが分かりませんでした。
814 :
nobodyさん :04/05/16 10:11 ID:WJ6PDaM4
time値とプロセス番号をつかって、 10846903300057678 のように、表示させたいとしたいのですが、 (プロセス番号は、8桁未満のときは0を入れる) $datafile = time . sprintf("%8d",$$); だと、 108469033 57678 となってしまいます。 この空白を0で埋めるにはどうすればよいのでしょうか?
816 :
814 :04/05/16 10:32 ID:WJ6PDaM4
>>815 どうも。
$datafile = time . sprintf("%08d",$$) . ".csv";
で解決しました。
>>808 パッケージ名に全て小文字の名前を使うな。続きはそれを全部修正してから聞こう。
CGI.pmを使ってPOSTする方法を教えてください。
他スレで回答もらってるのにここは放置か。 さすがマルチなだけあるな。
質問です。 ある日付の1日前の日付(YYYY/MM/DD)の取得は一度1970年よりの秒数に変換してから再びlocal関数に通すしかないのでしょうか? もう一つ、 ある月に何日まであるかを返すには閏年の計算は必須でしょうか?(Perlに用意されていますか?)
ファイルをネットからDLする際に、更新されてたら全部読まずに追記の部分だけを読んで保存するにはどうしたらいいのですか? たとえば2chのDATを読む時みたいに。 LPWのmirrorをみてみたのですが、更新されてるときは新しくDLするみたいでよくわかりません。
>>822 3/1の前日が2/28か2/29になる以外、すべての日の前日は固定ですが?
2月以外は何日まであるか固定ですが?
それは閏年によって変わるのだから計算は当然必要ですが?
perlにはそんなものを求める関数はありませんが?
828 :
822 :04/05/17 00:29 ID:???
>>824 >>825 回答ありがとうございます。
Time::Localモジュールを使えば日付→経過秒数の変換が一発でできるようですね。
ある月の日数算出は普通に組み込んでみようと思います。
また困ったことがあれば質問しに来ます。
どうもありがとうございました。
>>822 use Date::Calc qw(Add_Delta_Days Days_in_Month);
my ($year, $month, $mday) = (2004, 3, 1);
($year, $month, $mday) = Add_Delta_Days($year, $month, $mday, -1);
print "date-1: $year, $month, $mday\n";
my $days = Days_in_Month($year, $month);
print "days: $days\n";
2の200乗の答えを標準出力に出力するプログラム作ってください!
831 :
822 :04/05/17 08:22 ID:???
>>829 それです!
わざわざサンプルソースまで書き出して頂きありがとうございます(´Д⊂ヽ
Days_in_Monthにあたる関数は自力で作れましたので、
Date::CalcのAdd_Delta_Daysだけを借りてみようと思います。
そして小一時間ほどppmと格闘しなんとかDate::Calcをインストールし、
5/1→4/30の移動を確認できました!
本当にありがとうございました。
# ついでにTime::Localもインストールしておきました。
print "1606938044258990275541962092341162602522202993782792835301376\n";
perlのDBIでmysqlにデータを出し入れする時って、客の個人情報とかの場合でも平文でいいよね?
あ
836 :
823 :04/05/18 02:17 ID:???
>>825 >>826 探したのですが、rangeと検索してもほかの部分が見つかってしまってだめでした。
もうちょっとヒントをいただけませんか。
CPANをアンインストールすることはできますか?OSはWindowsXPです。
838 :
nobodyさん :04/05/18 07:19 ID:15Ww53+y
>>830 use bignum;
>>834 ネットワーク(鯖)構成如何じゃない?
漏れても500円でなんとか(ry
840 :
823 :04/05/18 08:16 ID:???
>>838 ありがと〜。
がんばってみます
でもすごいむづかしいっぽい;;
誰かメールアドレスに使われる記号(@とか.とか)一覧が載ってるサイト知らない? 前に見つけたんだけど、URLがどっかいっちゃった;それでさっきから探してるけど、見つからないんだ。
RFCを見ろ。
844 :
名無しさん :04/05/18 23:11 ID:4Rd9YBtL
次のようなCGIの作成で質問です。 表の生成部分はなんとか出来そうなのですが (a)ファイルの中から行を探して変更、削除する部分と (b)追加する部分で同じ内容で複数行追加しないようにする部分 の方法が頭に浮かびません。どのような方法がありますか?サンプルソースを教えていただけないでしょうか? 1)予定テキストファイルを読み取り次のような表を生成します。 +−−−−+−+−+−+−+−+−+−+−+−・・・ |2004年06月|先月 |今月 |来月 | +−−−−+−+−+−+−+−+−+−+−+−・・・ | 名前 |1|2|3|4|5|6|7|8|9・・・ +−−−−+−+−+−+−+−+−+−+−+−・・・ | 鈴木 | | |休| | |後| | | +−−−−+−+−+−+−+−+−+−+−+−・・・ | 佐藤 | | | | |休| | | | +−−−−+−+−+−+−+−+−+−+−+−・・・ | 田中 | | |前| | | |休| | +−−−−+−+−+−+−+−+−+−+−+−・・・ 2)先月、今月、来月の部分はリンクとなっていてCGIを呼び出し、先月の表、今月の表、来月の表を生成します。 3)名前もリンクになっていてフォームを呼び出し、SELECTタグにより年、月、日と、休、前、後を選択して予定テキストファイルに追加します。 4)休、前、後もリンクになっていて、フォームを呼び出し、予定テキストファイルから該当行を変更、削除します。 予定テキストファイルの内容は 名前ID<>年<>月<>日<>内容 n0001<>2004<>6<>3<>休 n0002<>2004<>6<>5<>休 n0001<>2004<>6<>6<>後 n0003<>2004<>6<>7<>休 名前と名前IDのリストファイルの内容 名前ID<>名前 n0001<>鈴木 n0002<>佐藤 n0003<>田中
業務丸投げですか? まずは日本語からお勉強しようね。 お仕事をするには早すぎるようですよ。 ぶっちゃけ表はファイルから読み出すだけだし、 書き込みは重複を検査すれば良いだけだろ。
846 :
842 :04/05/19 00:04 ID:???
>>843 ありがとう!見つかったよ。
目的はメルアドのチェックじゃなくてsendmailに渡す際へんなスクリプトを排除したいだけなんだ。
で、なんか一杯記号は許可されてるみたいだから、結局「<」、「>」、「"」だけ切り捨てることにしたよ。
まだperl勉強足りないんだけど、perlって「$」、「@」、「%」とかを入力されても内部で途中で展開しないで
ただの文字列として扱われるみたいね。いい!
(a)ファイルの中から行を探して変更、削除する部分と Perlは不得手。全部読んで全部書き出すよろし。 splice()を使うと幸せになれるかもしれない。 (b)追加する部分で同じ内容で複数行追加しないようにする部分 重複チェックはハッシュを利用すると楽。
>>845 >まずは日本語からお勉強しようね。
>お仕事をするには早すぎるようですよ。
人のあらを見つけると大喜びで責め立てる。845はそういうむなしいやつ。
でもな、845だっていいところもあるんだよ。845のいいとこは↓が教えてくれる。
>>845 のいいところ
>まずは日本語からお勉強しようね。
>お仕事をするには早すぎるようですよ。
人生にとって大切なことを的確にアドバイスしてあげたこと
PERLでの半角カタカナの扱いに困ってるよ・・・ 例えば相手がフォームに「ササ」と半角カタカナで入力する。んで、漏れが require "jcode.pl"; read(STDIN,$buffer); $buffer =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg; jcode::convert(\$buffer,"euc"); jcode::h2z_euc(\$buffer); 〜処理〜 jcode::convert(\$buffer,"sjis"); print $buffer; ってやってもうまくいかない。相手がeucで送ってくれば大丈夫だけど他の文字コードだと駄目。 半角カタカナの文字列+全角文字列(例「ササ表示」)ならちゃんと全角カタカナへ変換できるけど。 なんかPERLメモとかには先にeucに変換してあればおkだなんて載ってるけど、全然おkじゃない・・・ 相手がどんな文字コードで送ってきても華麗に半角カナを全角カナに変えれちゃうおっとこまえいませんか?
jcode::convert(\$buffer,"euc", 'z');
852 :
850 :04/05/19 03:07 ID:???
>>851 それも駄目なのさ。
多分問題は$bufferの中に半角カナしかないときなんだよね。他の文字も混ざってればちゃんと機能するんだけどね。
まあそんなにこだわることでもないけどできればなぁ
ファイルの排他制御ってやっぱりいりますか?ちょっとしたCGIでtxtファイルから読みこんだり するんですけでど、どれくらいのレベルから排他制御って必要になってくるんですか?
856 :
854 :04/05/19 03:56 ID:???
すいません。読みこみだけのときは排他制御なんて必要ないんですよね? でも、人が読みこんでる最中に誰かが新たにopenしようとしたらopenエラーになっちゃいますよね。 それは嫌なので一応flock等で誰かがファイルオープンしているときは待たせればいいんでしょうか? open(DATA,"< test.txt"); flock(DATA,1); なんたらかんたら close(DATA); みたいでよろしいですか?
857 :
854 :04/05/19 03:59 ID:???
>>855 すいません。専用スレがあるんですね。そっちで質問してみます。
>>850 他の文字と一緒に判別させるしかないよ。
"ササ"(Shift_JIS) = "算"(EUC-JP)だから。
859 :
nobodyさん :04/05/19 06:29 ID:Q40mcV4U
掲示板CGIで、+を半角スペースにデコードする処理があると思うんです。 あれをやってしまうと、本文に+が含まれている場合 空白になってしまうのですがどうすれば半角の+を表示することができるのでしょうか? ++
>本文に+が含まれている場合 「+」は「%2B」にエンコードされてるんだから無問題。 エンコードされていなかったら送信側のバグ。
エンコードから学習しよう
>>860 に付け加えると、
デコードする際にまず+を半角スペースに変換して、それから%??を変換するのはこいつのため。
先に%2Bを+に変換してしまうと半角スペースになってしまう。
863 :
859 :04/05/19 07:34 ID:???
なるほど。コードをよくよく見てみたら、unpack(デコード)したあとに +を半角スペースに置換する処理を行っていました。 どうもありがとうございました。
864 :
850 :04/05/19 17:11 ID:???
>>858 やっぱそうですかね、相手が送ってきたものを先にeucに変換する処理も相手が半角カナしか
入力しない場合、jcode.plではeucへの変換が正常におこなわれないみたいですね。
まあ、仕方ないということで半角カナは止めてね。って注意書きいれる事にしますた。
a.cgiに入力フォームがあって、b.cgiでそれを受け取るんですが、b.cgiでブラウザの
戻るボタンを押すと普通は
「セキュリティ保護のため、〜〜〜」
っていう文言がでてしまいますが、最近そうならないページを見つけました。
ttp://www.blueberryeye.co.jp/ の注文ページなんですが、間違っても簡単に前のページに戻れるのはいいなぁと思いますが、
やり方がわかるかたいますか?
lwpを使ったスクリプトからのアクセスを禁止する方法はありませんか .htaccessでIP指定してdenyしてもだめだし User-Agentがlibwww-perl/5.75なのでそれをdenyしても防げません。 lwpを使ったサンプル探して自分でいろいろテストしてみようと思いましたが そういうのも見つかりませんし 何方かお知恵を拝借できませんでしょうか
867 :
866 :04/05/19 18:02 ID:???
×User-Agentがlibwww-perl/5.75なのでそれをdenyしても防げません。 ●User-Agentがlibwww-perl/5.75なのでそれをdenyしてみましたが防げません。
>>865 前にもそんなネタ振った人がいたな。
入力値引き渡す方法はいろいろあるんだが
調べる気がさらさらない様子で放置されてたような。
869 :
865 :04/05/19 18:12 ID:???
>>868 入力値の引継ぎではなくて、多分キャッシュ関係なんだと思います。
例えば前ページに戻ったとき、フォームに入力していたのが消えずにそれぞれのボックス内に
残ってるんですよ。フォームのあるページを普通のHTMLで作った場合と同じ事が、CGIから吐き出されるHTMLでも
できてるって話です。
それをやる為には入力値の引継ぎ方法を考えないといけないわけなんだが。
キャッシュにフォーム値が残るとは初耳。 そんな方法があるのなら知りたいな。
873 :
865 :04/05/19 19:03 ID:???
>>870 そうなんですか?HTMLではその入力値の引継ぎを自動でやってるってことですか?
ただ単にCGIから吐かれたHTMLをブラウザに一定の時間のキャッシュを許すだけとかかなぁと
思ってました。
CGIで作られたページのキャッシュを制御するような機能をPERLで作れるのかなと。
POSTかGETかによってブラウザの挙動が違う Perlのコーディングとは全く関係ない
876 :
865 :04/05/19 19:41 ID:???
>>875 何度も読んだ。
なんかみんな質問を勘違いしてるぽ
引継ぎなんてやっぱり関係ないみたい。ブラウザの戻るボタンで情報の再送信普通は自動
でしないけど、それを自動でやっている。っていう話でもない。
例えば、a.htmlにテキストボックスがある。そこに「あいうえお」といれてb.cgiに移る。
b.cgiが何するかなんてどうでもよくて、b.cgiからa.htmlに戻った場合、a.htmlのテキスト
ボックスには、さっき自分で書いた「あいうえお」が残ってるよね。
それは入力値の引継ぎなんて全く関係ない。ブラウザは新しく何かを読みこむわけじゃないし。
それのa.htmlがa.cgiになっても同じ様にするにはってことなんだけどね。
勘違いしてるのはお前の方だって。 さっさと消えろ。 では、次の人どうぞ。
878 :
865 :04/05/19 20:13 ID:???
>>877 う〜ん結局誰もわからないか。まあすぐに必要なわけでもないので、地道に色んなページで勉強してきます。
ありがとうございました。
香ばしい匂いが漂っていると思ったら、なるほど・・・
HTMLからCGIにSSIで値を渡すときってどうすればいいんでしょうか。 テキストカウンターなのですが、 <!--#exec cgi="./counter.cgi?id=tes&md=4" --> とするとSSIエラーが出ます。 ?以降を外せば動くんですが・・・。
少しでも気にくわない事があると、「消えろ!」とはねつけて殻に閉じこもってしまう大人になれない
>>877 。
しかし
>>878 よ、
>>877 は決して間違ってはいないんだぞ。そこの所は理解して欲しい。
>>877 の本心を明かす男は↓
さっさと消えろ!
↑いいや違うぞ!本当の本心は↓
まんげが生えてきたーーー!!
>>865 POSTでアップロードしてから戻ると「セキュリティ保護のため、〜〜〜」
ってことならもう少し盛り上がったんだろうけどねぇ。
HTTPヘッダのLocationですっとばすぐらいしか策を思いつかないが、
Perlには関係ないか。
ちょっと不安になったんですが、 ある一つのデータファイルに対して、二つ以上の Perlプログラムからファイルの読み書きを行う場合、 flockを使っていれば排他処理は問題ないですよね?
890 :
nobodyさん :04/05/19 22:33 ID:ObBdfHPa
みなさんはじめまして。 以前、板違いのところで質問しまいましたが、親切にこちらを紹介して頂いたので 来た次第です。今回は教えを乞いたく伺いました。 私はsendmailを使ってメールフォームCGIを作ろうとしています。しかし、 No recipient addresses found in headerというエラーが出てしまいます。 エラーは受け取り人のアドレスがヘッダーにないといっているようなのですが、 変数の中にはアドレスがきちんと入っているんです。 現在、いろいろ試して最終的なソースはこうなっています。 $honbunていうのがbody部分(のつもり)です $sendmail = '/usr/lib/sendmail -t'; if(open(SENDMAIL,"| $sendmail")){; print SENDMAIL <<"EOM"; From: $motoadr_1 To: $mail_to Subject: $staff_subj Errors-To: $errmailadr MIME-Version: 1.0 Content-Type: text/plain; charset="ISO-2022-JP" $honbun EOM close(SENDMAIL); } ヘッダーとボディ部分の間は空行で区切ったのですが、これではダメなのでしょうか?お気付きの方はぜひとも教えてくださいませ。
>>890 sendmailに食わしている内容が間違ってる可能性が高いと
思われるので、
open(SENDMAIL,"| $sendmail")
のところを
open(SENDMAIL,"> 適当なファイルのパス")
としてファイルに書き出してよく調べてみることをお勧め
する。
ありがちなのはヘッダ部に埋め込んでいる$ほげほげのどれ
かの末尾に改行がついていて、そこが空行になってしまって
いるって奴だね。
893 :
nobodyさん :04/05/20 00:32 ID:UfxuQY5M
#何回も正規表現を使うと #$1,$2,$3に前回のマッチパターンが入っているからなのかうまく行かないことがあります $s='921010'; my ($year,$month,$day)=($s=~m/^(\d+)(\d\d)(\d\d)$/); print "$year,$month,$day\n"; $s2='hogemogesage'; ($hoge,$moge,$sage) =($s2= ~m/(hoge)(moge)(sage)/); print "$hoge,$moge,$sage"; -> 92,10,10 4294967295,,Hit any key to close this window... これを避ける簡単な方法ってないですか?
>>893 ↓のようにきちんと出力されたけど。
92,10,10 hoge,moge,sage
= ~
897 :
nobodyさん :04/05/20 00:57 ID:UfxuQY5M
あれ?何回かやってみたら下の方だけでもダメですた ばかでした 結局 = ~→=~ お騒がせスマソ
898 :
nobodyさん :04/05/20 02:58 ID:746RqQ7w
ディレクトリ中から、内容に特定の文字列を含むファイルを一発でgrepってできますか? ひとつづつopenしてgrepならできるんだけど。
そんなんやるべきじゃない。
>>898 grep -nH 特定の文字列 `find ディレクトリ -type f`
# find ディレクトリ -type f | xargs grep -nH 特定の文字列
# find ディレクトリ -type f -exec grep -nH 特定の文字列 {} \;
904 :
898 :04/05/20 19:49 ID:???
>>901 レスありがと。でもperlだけではできないってことかな。
まじめにひとつづつopenするかー。
結局誰かが各ファイルを一つずつ open しなきゃならないことには変わりなく、 それを find にやらせるか、それとも perl が自分でやるか、というだけの違い
初心者ってより天然だな。
すみません。質問させてください。 perlでレスポンスヘッダに含まれるHTTPのバージョンを 変更したいのですが、できるのでしょうか?
>>907 出来なくは無い。
ひとつの方法を教えよう、perlでhttpサーバを書け。
Jcode.pmで半角カナを含んだ文字列を使いたいのですが、どうやらgetcodeが うまく動かないようですね。で、getcodeを使わずに直で指定して、 $line = Jcode->new($line, 'sjis')->euc; のようにしたのですが、この$lineをEUC_JPで定義されているDBに渡すと eucじゃないと言われます。 これは何故なんでしょうか。半角カナの有無を意識せずに文字列を扱うことはできないのでしょうか? Perl5.6.1、Jcodeは最新のです。
答えは出てる。 EUCじゃないと言われてるんならEUCじゃないんだよ。 DBに渡している文字コードを再確認
>>910 typoでsjisじゃなくjisになってましたワン
というか、直に指定してやるしかないのでしょうか?
$lineの入力として複数ファイルを同時に扱う時に、
複数の文字コードがあったりすると困るのですが…。
Cookie発行について質問です。 # ローカル変数を定義する local ($sec, $min, $hour, $day, $mon, $year, $date); # グリニッジ標準時刻を取得する(localtimeは1900年から換算だが、GMTは1970年から) ($sec, $min, $hour, $day, $mon, $year, $date) = gmtime (time + 60 * 24 * 60 * 60); # 曜日を表すハッシュの文字列を定義する $date = ("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday") [$date]; # 月を表すハッシュの文字列を定義する $mon = ("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec") [$mon]; # フォーマット指定の文字列を変数へ書き出す $vaild = sprintf ("%s, %02d\-%s\-%04d %02d:%02d:%02d GMT", $date, $day, $mon, $year + 1900, $hour + 9, $min, $sec); この状態で$vaildを見てみると、今日の日付のはずが Monday, 19-Jul-2004 23:18:34 GMT のように曜日と月が正確に表示されなくて困ってます。 どの部分を修正すればよろしいのでしょうか。
すんませんワケわかんないことやってました ↑のこと忘れてください・・・
>>912 time + 60 * 24 * 60 * 60
これ何してんの?
915 :
nobodyさん :04/05/21 00:18 ID:2dDSzz6y
FreeBSD、もしくはLinux と Perl5 で EAN128バーコードを作成したいのですが、 何か良い方法はありませんでしょうか? GD::BarcodeではEAN128は出力できないし、 まともなサーバサイドアプリケーションは100万円程するしで 悩んでいます。。
>>915 そりゃコーディング以前に設計の問題だろ
Perlモジュールスレで質問していたら Barcode::Code128 を試してみろと教えてあげたところだが スレ違いなので教えてあげない
918 :
nobodyさん :04/05/21 04:22 ID:hNvgkOa1
@ニフティで、 下のどっちのやりかたでもエラーとなってしまうのですが、(ほかサーバではOK) 対処方法ご存じのかたいらっしゃらないでしょうか? @ニフティ特有の事情ではないかとは思うのですが。 (なんせsendmailすら使えないし@ニフティ) use Jcode; Jcode::convert(\$in{'q'}, 'utf8', 'euc' ); require 'Jcode.pm'; Jcode::convert(\$in{'q'}, 'utf8', 'euc' );
919 :
918 :04/05/21 04:32 ID:hNvgkOa1
どうやらuseそのものが使えない気がしてきたんですが・・・ KCatch.pmをおいてuse KCatchしても、エラーがでるし。
920 :
918 :04/05/21 04:41 ID:hNvgkOa1
@nifty では /usr/local/bin/perl しか使えない。 通常は /usr/local/lib/perl5 以下に存在しているはずの標準ライブラリの中で、 動作させたい perl スクリプトが必要とするライブラリを全部転送する必要がある。 ということがわかったのですが、今回のeuc⇒utf8変換をできるようにするためにおいとく必要のあるライブラリはなんでしょうか?
921 :
918 :04/05/21 06:09 ID:hNvgkOa1
ここは日記じゃないぞ
923 :
918 :04/05/21 06:25 ID:???
すみません、もう終わりましたので許してください。20弱のモジュール入れまくった。
925 :
nobodyさん :04/05/21 12:22 ID:ERQd2RKf
ログの特定の場所のみを書き換える方法ってどんなのがありますか? 例えば 00000000000 00000000000 という内容のログファイルがあったとして、2行目の左から5番目の文字だけを0から1に書き換える等…
seek
928 :
926 :04/05/21 13:25 ID:???
ありがとうございました
DBD::Pgで、 $sql = "SELECT foo FROM table WHERE bar = ? OR bar = ? OR bar …"; $sth = $dbh->prepare($sql); しておいて、 @array = ("hage", "hige", "huge"); $sth->execute(@array); $ref = $sth->fetchall_arrayref(); みたいなことをしたいのですが、0個以上の可変個数の要素をバインドするときって SQL文の宣言はどういう風にすればいいのでしょうか? 要するにWHEREのOR bar = ?の個数が動的に変化して困るって事なんですが…。
>>929 固定されたSQL文を使い回すのが bind で、
要素が可変個数になるということはSQL文も可変なはずだから、そもそもダメ。
個数が確定してから prepare せんといかん。
SQLの書き方や考え方の話は、ここよりもDBIスレあたりが妥当だろう。
>>931 では@arrayを受け取ってから、joinか何かで動的にSQL文を生成して
prepare、つかそういうやり方ならdoをするしか無いって事ですかね
933 :
925 :04/05/21 16:32 ID:ERQd2RKf
>930 「短縮されてないURL」を知るべき必要がある事をどこで察知するかじゃなく、 「短縮されてないURL」を知る方法、 ないし短縮URLでもファイルをダウンロードする方法を教えて下さい。
>>933 >「短縮されてないURL」を知る方法
そんなものはアクセスしなけりゃわかるわけがない。
>短縮URLでもファイルをダウンロードする方法
長いURLから短縮URLを推測して試すしかない。
スレ違いなのでここまで
936 :
925 :04/05/21 20:15 ID:???
>935 すっげ、1行追加で動くようになったわ。 thx!
937 :
915 :04/05/21 20:27 ID:2dDSzz6y
>>917 (笑) 親切に教えてくれて有難う。
Barcode::Code128、大変参考になりました。
938 :
907 :04/05/21 21:58 ID:jMqF5hwG
>>924 さん
ありがとうございます。やってみます。
質問です。 perlスクリプトでGETメソッドから文字列を取り出したいんですが、文字列に半角#が含まれていると#とそれ以降が無視されてしまうんですが回避方法はないでしょうか? ソース抜粋です。 $buffer = $ENV{'QUERY_STRING'}; @temp = $buffer; foreach $x (@temp) { ($name, $value) = split(/=/, $x); $FORM{$name} = $value; } $str = $FORM{'str"}; これで $str には#が入ったとき以外は **tp://localhost/test.cgi?str=文字列 の文字列が思ったとおりに取り出せます。 半角=が入ったときもおかしいですが、それは使用予定のケースにないので今回はどうでもいいです。 テストサーバーの環境は WindowsXP SP1 apache_2.0.47 ActivePerl-5.8.0.806 このようになってます。 よろしくお願いします
間違いがありました。 >$str には#が入ったとき以外 入りません。 #の直前までしか入りませんでした。 ちなみに $buffer にも#以前までしか入っていないようです
#以降はfragmentだよねえ
>>939 >>941 さんの通り、URIでは'#'以降はフラグメントとして扱われるので、
'#'を'%23'にエスケープしておく。
CGI側で元に戻す。
いろいろ問題の多そうなソースなんで、
どこかのスクリプトを参考にして作ってださい。
(CGI.pmを使うのが一番なんだけど)
>>939 str=文字列 の部分に使える文字は決まってるから、
それ以外のものを使いたい場合はURLエンコードしなきゃいけない。
<scheme>://<authority><path>?<query>#<anchor>
#はこんな風に(HTMLの)アンカーとして使うと決まってるので、
鯖にも($buffer)として渡ってきてないんじゃないかな。
詳しいことはrfc2396あたりかな。英語読むと眠れなくなるんで自分で確かめてください . 。oOオヤスミ
試すも何も答え書いてあんじゃん
946 :
nobodyさん :04/05/22 13:02 ID:prWBgoDS
ダウンロードカウンタを設置しようと思って
http://www.csmoon.com/prog/dcnt.html ここにあるサンプルCGIを設置したんだけど
なぜかinternal Server Error が出まくって全然動かない
環境はRed Hat Linux + Apache 2.0.48です
パーミッション、転送法などが原因かな?
だれか教えて!
あんまり面白くないな。2点。
そんなここで読むのですか? はずいです
恥辱プレーだから。
951 :
座敷荒氏 :04/05/22 19:43 ID:PaJLGSDA
教えてくださいませm(_ _。)m 以下、内容を自分宛にメールで送信する部分です。 「$in{'_email'}」は相手のメアドをFrom:にしないで、 本文のほうに載せたい場合どうしたらいいのでしょうか? ************************** if (!open(OUT,"| $sendmail -t")) { &error("異常停止","$!","back"); } print OUT &jis("X-Processed: $date_now\n"); print OUT "X-SENDER: $REMOTE_HOST\[$REMOTE_ADDR\]\n"; print OUT &jis("X-AGENT: $HTTP_USER_AGENT\n"); print OUT "From: $in{'_email'}\n"; print OUT "To: $mailto_order\n"; print OUT &jis("Subject: $mail_subject [$date_num]\n"); print OUT "Content-Transfer-Encoding: 7bit\n"; print OUT "Content-Type: text/plain; charset=iso-2022-jp\n\n"; print OUT "\n"; foreach (@in) { s/"/"/g; s/&/&/g; s/</</g; s/>/>/g; if (/^\.\t(.*)/) { print OUT &jis("$1\n"); } elsif (/(.*)\t(.*)/) { print OUT &jis("[$1] $2\n"); } } print OUT "\n"; print OUT &jis("$sign\n"); close(OUT); **************************
てにをはがおかしい上に何をしたいのか分からん。
953 :
座敷荒氏 :04/05/22 20:44 ID:PaJLGSDA
>>952 いまはメールの差出人のところに変数$in{'_email'を入れてますが
メール本文の一行目に入れるように変更したということです。
よろしくおねがいします。
>メール本文の一行目に入れるようにメール本文の一行目に入れるように変更したということです。 入れるように変更したいということです。 訂正でつ(/_<。)
Perl語も日本語も不十分だと不便だろ。 幼稚園生からやり直せ。 今のお前に必要な事だ。
あはは
>Perl語
959 :
823 :04/05/22 22:57 ID:???
やっぱわがんね;;
>>959 monazillaのサイトになんか解説があった気がする。あと、RFCよめば?
962 :
823 :04/05/22 23:24 ID:???
RFCっていっぱいあってどうすればいいのか・・・
あーぁー
965 :
823 :04/05/22 23:49 ID:???
>>961 おそらくRange: bytesで比較するのですね。
>>963 Range Retrieval Requestsというのがありましたので、たぶんそれっぽいですね
皆様お手数かけてすいませんでした。
今日はもう時間なので、明日がんばってみますです。
ありがとう〜
966 :
nobodyさん :04/05/23 18:00 ID:fkswZRQD
$hoge = "今日はスノボーに行った。"; $str = "スノボー"; if( $hoge =~ /$str/){ } こうするとこういうエラーが出るのですが、どうすれば直りますか。 Unmatched [ before HERE mark in regex m/スノボー << HERE / at hoge.cgi line xx.
\Q\E
968 :
nobodyさん :04/05/23 18:59 ID:fkswZRQD
>>967 if( $hoge =~ /\Q$str\E/){
}
こうやったらうまくいきました。
だいたい意味はわかったのですが、日本語を正規表現する時はいつも
\Q\Eで囲まないといけないのですか?
>>968 残念ながら、おそらくSJISをつかうなら
>>969 かといってEUCは一バイトずれでマッチする問題がおきやすかったりで、
よほど注意しないと日本語の正規表現はお勧めできない。
use utf8にしちまえば大丈夫らしいけど、それはそれで今度は正規表現
以外の点でいろいろめんどくさいことがあるしなぁ。
SJISでマッチさせると\Q\Eしても意図しないところで マッチするから気をつけろ。
結局、正規表現で日本語を扱うときはどの文字コードが良いの? いつも普通にSJIS使ってるけど
漏れも新規に作るサイトは UTF-8 に切替えた。HTMLもDB(Pg)も全部 UTF-8 なので割と楽。 しかし既存サイトを一部だけ UTF-8 にするんだと死にそうだ。
ただの文字列マッチなら、string::multibyteのindex。 マルチバイト文字を考慮して作られているので、 ずれた位置でマッチすることもありません。 Perl version 5.8.0以降なら、encoding。 マルチバイト文字の正規表現も素で使えるようになります。 (5.8.1以降ならtr///も対応。)
おはようございます。質問させてください。 perlでリクエストヘッダのHTTPバージョンを任意に変更したいのですが、 実現できる方法はあるでしょうか? どなたかご回答お願い致します。よろしくお願いします。
>>975 何のコーディングが分からないんですか?
>>976 さん
例えば普通なら
GET
http://www.yahoo.co.jp HTTP/1.0
とリクエストを送りますが、このHTTP/1.0の部分をHTTP/0.9とか
HTTP/1.2など任意に変更したいのです。
その実現方法が分からず、質問させていただいています。
いらっしゃーい、Perlのコーディングで困ってる人のスレです。
【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。
過去ログやお勧めサイトは
>>2-10
>>977 LWPモジュールはHTTP/1.0と1.1しか対応してないので、
IO::Socket::INETモジュールまたはネットワーク関数(素のソケット)で書くしか。
なんかCGIのログが頻繁にぶっ飛ぶ(0バイトになる)んですが、 ファイルロック以外でこんな状況になるのはどんなミスが多いんでしょうか? 漠然とした質問で申し訳ないっす。
>>981 ああ、すみません。通信間の問題ではないと思うんです。
ファイルロックはflock使ってて、しかもそのプログラム自体にはほとんどアクセスがない状態なんです。
んで、それなのに1日2回くらい飛ぶんです。
さらに、実際には使ってるサーバーが複数プロセスが同時に動かないようになってるんで、
実際んとこファイルロックさえいらん、って状況なんです。
で、ハマってしまって全く原因が分からないから、そーゆう時はどんなミスが多いのかなー?
と言った内容の質問です!長くてすみませぬ。
だーかーらー、スレ違いだって言ってるの
次スレキボン
じゃあ立ててくる
987 :
nobodyさん :04/05/26 16:54 ID:kkhhiYmo
埋めませうか
ばったり書き込みなくなったしね
埋めときますね
埋め
埋め
埋め
埋め
埋め
埋め
埋め
埋め
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。