【Perl】初心者コーナー Part12
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/04/27 23:17ID:1NNXdNspいらっしゃーい、Perlの「コーディング」で困ってる人のスレです。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1と3が無いと誰も答えられないよ、良い回答は良い質問から。
一緒に勉強しましょう。
CGIの質問は【CGIだけどなんか質問ある Pert 6 】
http://pc.2ch.net/test/read.cgi/php/1019561283/
参考書籍の話題は【【Perl,CGI】参考書籍 第2版 】
http://pc.2ch.net/test/read.cgi/php/988809842/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般】
http://pc.2ch.net/test/read.cgi/php/991313362/
スクリプトの改造依頼は 【スクリプト改造工房 Part4 】
http://pc.2ch.net/test/read.cgi/php/1012839651/
過去ログ、その他の役立ち情報は>>2-10を見よう。
0271nobodyさん
02/05/03 18:13ID:7wVKBbUQダウンロードせずに、結果をブラウザで表示させたいんです。
>>270
Netscape6で確かめたらちゃんとできました。Opera6.01だとだめでしたが。
どうもありがとうございました。
0272nobodyさん
02/05/03 19:17ID:???0274cova
02/05/03 19:26ID:???スカラ変数 = (stat(ファイルハンドル または ファイル名))[インデックス番号];
---------------------------------------------------------------------
インデックス番号
0 → ファイルシステムのデバイス番号
1 → iノード番号
2 → ファイルのモード
3 → ハードリンクの数
4 → ファイル所有者のユーザID
5 → ファイル所有者のグループID
6 → デバイスID
7 → ファイルサイズ(バイト単位)
8 → 最終アクセス時間
9 → 最終変更時間
10→ iノード変更時間
11→ ファイルシステムI/Oの最適ブロックサイズ
12→ 割り当て済みのブロックサイズ
0275cova
02/05/03 19:27ID:???data.datというファイルの最終アクセス時間を取得する場合は
$accesstime = (stat(data.dat))[8];
という感じ
0276nobodyさん
02/05/03 19:29ID:7hc2ohlWそれだと Foo="Bar" の組み合わせが複数あると最初の一つしかできませんでした。
というか自分がその事書いてなかった。。逝ってきます。
0278nobodyさん
02/05/03 20:01ID:???ごめんなさい……。
直すついでにPerlメモの『HTMLタグの正規表現』(のコメント抜き)を取り入れてみました。
ttp://www.din.or.jp/~ohzaki/perl.htm#HTML_Tag
my $tag_regex_ = q{[^"'<>]*(?:"[^"]*"[^"'<>]*|'[^']*'[^"'<>]*)*(?:>|(?=<)|$(?!\n))};
$str = join '', map {
/^</ and $_ = join '',
map { /["']$/ or $_ = lc; $_ } split /(["'])(.*?\1)/s; $_
} split /(<$tag_regex_)/o, $str;
で、試してみたら <!DOCTYPE まで小文字になって鬱。
0282nobodyさん
02/05/03 20:40ID:???うまく動きました。ありがとうございました。
あと、<!DOCTYPEは削除してしまうので特に問題ないです。
0283nobodyさん
02/05/03 21:05ID:vg/qOBA6さっそくですが、質問です。
これはどういういみですか?第2引数がわかりません。
push(@sqcookie, "${name}_${value}");
0284nobodyさん
02/05/03 21:05ID:???$url = '([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\=\@\;\#\:\%]+)';
$FORM{'comment'} =~ s/$url/<a href=\"$url\" target=\"_top\">$url<\/a>/g;
こうしても上手くリンクされますか?
0285284
02/05/03 21:06ID:???こうしても上手くリンクされますか?
↓
こうすると上手くリンクされますか?
0289nobodyさん
02/05/03 21:13ID:???$scalar = "10";
$scalar += 10;
とやらないで,いきなり
$scalar += 10;
とやるとスカラ変数'$scalar'にはundef値である0が代入されていますが
このundef値って何て読むんですか?アンダフ値でいいの?
0290284
02/05/03 21:21ID:???実際に試してみましたが、無理でした・・・。
どうすればURLが自動リンクされるのでしょうか?
0292nobodyさん
02/05/03 21:29ID:???なるほど アンデファイン undefine の略か
じゃあ人前で使うときはアンデファインでいいや
0293nobodyさん
02/05/03 21:29ID:???後方参照($1とか$2とか)は知ってる?
0295nobodyさん
02/05/03 21:34ID:???0296_gnuzip
02/05/03 21:34ID:???(_____)ゝ、 (_____) y (_____)
/ :: :: :: ヽ 〉 /-‐:: ::‐-ヽ / / :: :: :: ヽ
_./ (・ )ll(・ ) ∨ _/ 0) i! 0) ∨ _/ ( ・)i!(・ ) ゙、_
// :: :: ∈ゝ :: ::ヽ // :: ‐-‐ :: ヽ // :: ー一 :: ヽ\
. ゝ/:: :: :: :: :: ::ヽ ゝ/ :: :: :: :: :: ヽ ゝ/ :: :: :: :: :: ヽく
 ̄ ̄ | ̄ ̄ | ̄ ̄  ̄ ̄ | ̄ ̄ | ̄ ̄  ̄ ̄ | ̄ ̄ | ̄ ̄
| | | | | |
⊂! !つ ⊂! !つ ⊂! !つ
教えてあげないよ!ジャン!
0298さゆ ◆ugYa5.J6
02/05/03 21:51ID:???()でくくった部分にマッチした文字列は$1とか$2で参照できる。
$FORM{'comment'} =~ s/$url/<a href="$2" target="_top">$2<\/a>/og;
0300nobodyさん
02/05/03 22:08ID:CL/oAkFo0301nobodyさん
02/05/03 22:10ID:???役に立たない細かい事を色々と。$urlの中の([^=^\"]|^)は余分。
あと、文字クラス[〜]の中ではほとんどの文字はエスケープしなくてもいい。
ただし"-"はマジカルインクリメント(例:[a-z])の効果があるから最初か最後に置く。
[\w\.\~\-\/\?\&\=\@\;\#\:\%]+ → [\w.~/?&=@;#:%-]+
つかここで聞くよりPerlメモを・・・・ (ボソ
0302pear@空気固定 ◆FRUIT8pk
02/05/03 22:27ID:???意味がわかりません。
<a href="test.cgi" accesskey="1">
ということかな?
0304nobodyさん
02/05/03 23:02ID:apBthE5H\n\n〜 と複数続いていたら
\n一つだけに やるのは どうすればよいのでしょうか?
s/[\n]*$/\n/g
でうまくいきませんでした
0305nobodyさん
02/05/03 23:14ID:???0310nobodyさん
02/05/04 00:05ID:???テキストファイル内の文字列をjcode.plにてEUCに変換後、
ひらがだけを抜き出したいのですが、検索対象文字リストを
tr/ぁ-ん//cd にすると結果が文字化けしてしまいます。
この場合、検索対象文字リストはどのように指定したら良いのでしょうか?
0311303
02/05/04 00:08ID:???Perlでは、数字じゃないものもインクリメントできるから、マジカル。
perlop の Auto-increment and Auto-decrement のとこに
「オートインクリメントオペレータには、ちょっとしたマジックが
仕込んである」と書いてある。
perlopには
「レンジオペレータは、数字じゃないものが来た時、マジカルインクリメント
アルゴリズムを使う」
って書いてあるよぅ。
0316nobodyさん
02/05/04 00:26ID:GNJILI/Xログファイルの$hoge[3]にそれぞれ数字がありまして
その数の合計を求めるにはどうすれば宜しいのでしょうか?
ログファイルは\tで区切ってあります。
0317310
02/05/04 00:26ID:???実はすでにあちらのメモも試したのですが、うまくいかなかったのです。
でも、実際のところはどこがうまくいっていないのか理解できていないので
うまく適用できていなかったのかもしれませんが・・・。
0318nobodyさん
02/05/04 00:33ID:???改善されてねーな
112 :nobodyさん :02/05/03 18:40 ID:???
>>110
「ログファイルの$hoge[3]」って何よ。
「ログファイルは\tで区切ってあります」ってのはレコード区切りが\nでデータ区切りが\tって事か?
わかるように書いてくれ。いや、大体わかっているんだけどな。
0319nobodyさん
02/05/04 00:35ID:???\tで区切ってるログファイルの4番目のとこに数字があるってこと?
$count=0;
open(FILE,"./$filename");
while(<FILE>){
@hoge=split(/\t/);
$count+=$hoge[3];
}
close(FILE);
print $count;
0321nobodyさん
02/05/04 00:49ID:???$_ = '文字コードがEUCの場合ね';
s/\x82[\x9F-\xF1]//g;
print;
これでひらがなだけ削れる
逆は自分で考えれ
0322nobodyさん
02/05/04 00:49ID:???$hoge ="123あいうえ456さしすせ-*/アイウabcdエオ";
$Zhiragana = '(?:\xA4[\xA1-\xF3])';
$hoge =~ s/$Zhiragana//g;
EUCこれでできるよ。
実行したら print $hoge; で表示されるのは
123456-*/愛上尾アウabcdエオ
あなたはどう書いてるの?EUCにコンバートするところとかは?
0323nobodyさん
02/05/04 00:53ID:/IfudcOZ0324nobodyさん
02/05/04 00:54ID:???EUCはこうか
s/\xA4[\xA1-\xF3]//g;
0326310
02/05/04 00:56ID:???ありがとうございます!うまく動きました。
trを使っていたのが間違いだったのでしょうか??
兎にも角にも、ありがとうございました。
0327nobodyさん
02/05/04 00:56ID:???LWPを使う。
0328nobodyさん
02/05/04 00:57ID:???0331310
02/05/04 00:59ID:???お答えありがとうございます。そちらも試したのですが
SCALAR(0xc963c4)
のエラーがでてしまいます・・・。なぜでしょう?
0332_gunzip
02/05/04 01:00ID:???レベルが低いよ。
0333310
02/05/04 01:02ID:???とりあえず、入力される文字列は全て
jcode::convert(\$hoge, 'euc');
にてeucにコンバートしております。
で、とりあえずいまはWin2000上のコマンドプロンプトで動かしているので
出力前にsjisにして出力しています。
0334nobodyさん
02/05/04 01:04ID:/IfudcOZLWPですか・・
ちょっと調べてきます・・・
0338nobodyさん
02/05/04 01:08ID:???0340nobodyさん
02/05/04 01:10ID:???print "写真うpしる!話はそれからだ!\n";
}
else {
print "逝ってヨシ!\n";
}
0341nobodyさん
02/05/04 01:11ID:???0342316
02/05/04 01:15ID:GNJILI/Xエラーになっちゃいました。
$count+って使えます?
0345_gunzip
02/05/04 01:37ID:???過去レスで何度も答えている内容をいまだに質問してくるということで、
そのために答えるほうもまとを得ない答えになってしまっているということ。
0348nobodyさん
02/05/04 01:50ID:???暇な奴だな(w
0350nobodyさん
02/05/04 01:56ID:???漫画でよくあるネタだよね(w
↓ここに投稿したくなった。
バカの一つ覚えな展開2
http://comic.2ch.net/test/read.cgi/comic/1019059437/
0351nobodyさん
02/05/04 01:58ID:???0352nobodyさん
02/05/04 02:00ID:???0353nobodyさん
02/05/04 02:08ID:???0354nobodyさん
02/05/04 02:11ID:???http://www.google.com/search?hl=ja&q=lwp%82%C1%82%C4%82%C8%82%C9%81H&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
0355352
02/05/04 02:13ID:???>>353 LibWww-Perl の略じゃないの?
http://www.linpro.no/lwp/
Perl関連でなけりゃLight Weight Processの略かもしれないがな。
0357nobodyさん
02/05/04 02:54ID:???0358ん〜さっぱわからん
02/05/04 04:11ID:qVSStWkLんで、そのファイルには20行のテキストデータがあって
その1行の文字数はマチマチである。
さて、このファイルの5行目から10行目までのデータを
読み込みたい。
でも、ファイル全部を読み込んで後から整形するのはいやだ。
どうすればいいのだろうかぁ?
0359nobodyさん
02/05/04 04:13ID:???あとは、wgetやWWWcp等の外部コマンドを呼ぶしか、簡単な方法は
無いと思う。
めんどくさい方法でもいんなら、Socket使ってうりうりやる方法もある。
0360nobodyさん
02/05/04 04:15ID:???foreach(1..5) {
<IN>;
}
foreach(1..5) {
push(@data,<IN>);
}
でどうかね。
0361nobodyさん
02/05/04 04:19ID:Wv66U69Iとしているのですが、ブラウザから呼び出すと何故か動きません。
「500 Internal Server Error」とエラーメッセージが出てしまいます。
文字コードも置き場所もパーミッションも.htaccessも問題無いと思うし、
TELNETで単体実行してもちゃんと動きます。
エラーログを見ると、「Premature end of script headers」となっています。
・・・スクリプトヘッダーの時期尚早の終わり?とな?ん?
他の人が作っていたCGIを見てみても、とりあえず一行目の
「#!/usr/local/bin/perl」というのは一致しているし・・・
皆さん、どうぞ知恵をお貸し下さい。
0362ん〜さっぱわからん
02/05/04 04:25ID:qVSStWkLそんなに簡単にできちゃうの?もうずいぶんと長い間悩んでいるのだが
でも、それって結局ファイル全部読み込んでるのと同じじゃないのだろうか?
0363nobodyさん
02/05/04 04:28ID:???改行コードがDOS改行になってるっていうオチはないか。
とりあえず、telnet経由で単独で実行した結果の先頭5行くらいコピペ
してちょ。
0365なんとなくわかってきた
02/05/04 04:38ID:qVSStWkLんん、なんとなくわかってきますた。すいませぬ。
つまりは2ch掲示板の
最新50 1-100 100-200 200-300
っつーのをやりたいのですが、やはりこの方法でやっているのでしょうか?
0366361
02/05/04 04:39ID:Wv66U69I秀丸を使って、EUCからS-JIS、JIS、UNICODEにUTF-8まで試してみました。
以下は単独実行の結果です。
dalrq000@sv29:~/public_html/acjik/abcd/cgilib>./jiktes.cgi
Content-type: text/html
<html>
<body bgcolor=silver text=navy>
<h1>CGI TEST</h1>
length:<p>
IP Addres:<p>
data:<p>
(以下略)
・・・どんなでしょうか?
0367nobodyさん
02/05/04 04:44ID:???っかしいなぁ。
出力はそれでOK。
ためしに、
#!/usr/local/bin/perl
print "Content-Type: text/html\n\nほげほげ";
だけ書いたスクリプトだとどうなるかな。これでだめなら、
webサーバの設定(httpd.confか.htaccess)がおかしいと思う。
0369わかりましたぁ!
02/05/04 04:50ID:qVSStWkLですよね。なんとか理解してきました。
早速試してみます。ありがとうございます。
・・・しかし、随分長い間Perl書いてるのになんで
教える側にまわれないんだろう?(ショボン
0370361
02/05/04 04:58ID:Wv66U69I.htaccessは以下の二行だけです。
AddType application/x-httpd-cgi .cgi
AddType application/x-httpd-cgi .cgi/
他の人が作成してちゃんと動いているCGIのディレクトリ内には、
.htaccessはありません。当然削除して試してみましたが駄目でした。
更に、その人のディレクトリに私のCGIを置いて試してもみました。
httpd.confの方は見る事も禁止されてるので、なんとも言えません。
■ このスレッドは過去ログ倉庫に格納されています