Perl 初心者コーナー Part21
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/03/18 18:47ID:Dujz7IUF【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 9
http://pc.2ch.net/test/read.cgi/php/1041530204/
参考書籍の話題は、【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は、【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/
過去ログやお勧めサイトは >>2-10
0002nobodyさん
03/03/18 18:47ID:???Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980 参照不能
DAT: http://tako.2ch.net/perl/dat/957208980.dat
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087 参照不能
DAT: http://tako.2ch.net/perl/dat/971817087.dat
Part3 http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521 参照不能
DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part4 http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156 参照不能
DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part5 http://pc.2ch.net/php/kako/988/988728069.html
Part6 http://pc.2ch.net/php/kako/996/996075607.html
Part7 http://pc.2ch.net/php/kako/1000/10002/1000267444.html
Part8 http://pc.2ch.net/php/kako/1003/10039/1003900311.html
Part9 http://pc.2ch.net/php/kako/1009/10095/1009549309.html
Part10 http://pc.2ch.net/php/kako/1014/10145/1014556702.html
Part11 http://pc.2ch.net/php/kako/1017/10172/1017201229.html
Part12 http://pc.2ch.net/php/kako/1019/10199/1019917048.html
Part13 http://pc.2ch.net/php/kako/1022/10227/1022731565.html
Part14 http://pc.2ch.net/php/kako/1026/10269/1026977659.html
Part15 http://pc.2ch.net/php/kako/1028/10288/1028816385.html
Part16 http://pc.2ch.net/php/kako/1032/10320/1032070299.html
part17 http://pc.2ch.net/php/kako/1034/10345/1034583844.html
part18 http://pc.2ch.net/php/kako/1037/10377/1037797479.html
part19 http://pc.2ch.net/php/kako/1042/10422/1042260745.html
part20 http://pc.2ch.net/php/kako/1042/10422/1042260745.html (タイトルに19と誤記)
[ひまぢん氏のミラー]
Part1 http://www.angelfire.com/ak5/2ch-web-program/kako/957208980.html
Part2 http://www.angelfire.com/ak5/2ch-web-program/kako/971817087.html
Part3 http://www.angelfire.com/ak5/2ch-web-program/kako/979894521.html
Part4 http://www.angelfire.com/ak5/2ch-web-program/kako/984430156.html
Part5 http://www.angelfire.com/ak5/2ch-web-program/kako/988728069.html
0003nobodyさん
03/03/18 18:48ID:???・Perl Com: http://www.perl.com/pub/
・CPAN.com: http://search.cpan.org/
・ActivePerl: http://www.activestate.com/
・CGI-ML:http://forest.ne.jp/cgi-ml/
[お薦め]
・Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm ★読んどけ
・Perl Recipes: http://www.effectiveperl.com/recipes/
・Randal's WebTechniques columns: http://www.stonehenge.com/merlyn/WebTechniques/
・Perlの部屋: http://www.cc.rim.or.jp/~midorin/mad-p/perl/index.html
・Perl初心者の部屋:http://www.harukaze.net/~mishima/perl/
・Perlリファレンス:http://www.big.or.jp/~mio/ga/pl/plref/pl_ref.htm
・Perlのページ:http://homepage1.nifty.com/nomenclator/perl/
0004nobodyさん
03/03/18 18:48ID:???・Perl News: http://www.news.perl.org/
・Perl Monks: http://www.perlmonks.org/
・use Perl; : http://use.perl.org/
・Learn Perl - Perl Education: http://www.devdaily.com/perl/edu/index.shtml
・Perldoc.com: http://www.perldoc.com/
・Using Perl5 in Web: http://docs.rinet.ru/Using_Perl5_in_Web/
・Rex Swain's Home Page: http://www.rexswain.com/
・Robert's Perl Tutorial: http://www.netcat.co.uk/rob/perl/win32perltut.html
・Perl Tuts: http://savage.net.au/Perl-tutorials.html
・Beginning Perl Tutorials: http://www.pageresource.com/cgirec/index2.htm
・jcode.pl の私的な解説書: http://www.mikeneko.ne.jp/~lab/kcode/jcode.html
・Logical Choice Software, Home Page: http://www.logsoft.com/perltips/
・Perlfect Solutions: http://perlfect.com/
・The Perl Archive : http://www.perlarchive.com/
・Perl6 & Parrot VM についての情報: http://dev.perl.org/perl6/
・use Object; : http://perl.infoware.ne.jp/
0005nobodyさん
03/03/18 18:48ID:???0006nobodyさん
03/03/18 18:54ID:???Part20 http://pc2.2ch.net/test/read.cgi/php/1044717887/ (タイトルに19と誤記)
0007nobodyさん
03/03/19 01:13ID:0vdjLWGs#!/usr/local/bin/perl
$ua = $ENV{'HTTP_USER_AGENT'}
if( $ua =~ /^DoCoMo/2.0 N2051(c100;TB)){
print "Location: ../matiuke/jpg/176x198/\n\n";
}else( $ua = ~{
print "Location: ../\n\n";
}
exit(0);
という風に打ったのですが
No Outputと出てしまいお手上げ状態です
・・・
はっきり言ってperlを書くのは初めてなのでまったくといっていいほど初心者です。
ttp://www.nttdocomo.co.jp/mc-user/i/spec/useragent.html
携帯別User-Agent表です。
よろしくお願いします。
0009nobodyさん
03/03/19 01:44ID:???if( $ua =~ /^\QDoCoMo/2.0 N2051(c100;TB)\E/){
print "Location: ../matiuke/jpg/176x198/\n\n";
}elsif( $ua = ~/\Qayaya\E/){
print "Location: ../hoge/hoge\n\n";
}else{
print "Location: ../\n\n";
}
文法コウゾウを理解したほうがよいかと
0010nobodyさん
03/03/19 01:53ID:???UAは末尾まで丸々いるわけ?
そんなに細かく分岐させるの?
DoCoMoの6文字だけか1.0とか2.0までとか・・・
どこかで振り分けCGIを落としてきて使ったほうがいいんじゃないの?
0011nobodyさん
03/03/19 02:07ID:DZ7fCmeZ>7
細かすぎだろ?
0012nobodyさん
03/03/19 02:13ID:EytPlHC0みたいなのを自分流に作ってみたいのですが参考になるサイト
参考になるプログラムみたいなのってありませんか?
0014nobodyさん
03/03/19 02:45ID:???一応突っ込んどくと、 Locationヘッダにパス指定はNG。
ttp://www.studyinghttp.net/rfc_ja/2616/sec14.html#sec14.30
001512 ◆GsKnKxmx8s
03/03/19 02:59ID:???2ch研究さんのアクティブスレッドランキングなのですが
非常に使えるので自分流に改造したいとおもいまして
zenhiteiさんにご相談したところ、ご自由にどうぞとのことだったのです
で、perlをするにしても、あのプログラムの参考になるサイトすら
わからない状態でしたのでここの方々に指示を仰ぎたいなと思い
伺いました。
0016nobodyさん
03/03/19 05:33ID:X4k10DxJ$hoge = 'hoge hoge hoge';
$hoge =~ s/hit/hoge/g;
↑の処理で置換した回数を知りたいです。
お願いします。
0017nobodyさん
03/03/19 05:36ID:X4k10DxJ$hoge = 'hoge hoge hoge';
$hoge =~ s/hoge/hit/g;
です。。。
0018nobodyさん
03/03/19 05:39ID:???001916
03/03/19 05:42ID:X4k10DxJこんな時間にこんなに早くレスもらえるとは思わなかったです!
どうもありがとうございました。
0020nobodyさん
03/03/19 10:19ID:???今はVBSでやってますがあまりうまくないんで、
何かいい方法ないでしょうか?
0023nobodyさん
03/03/19 12:08ID:WfwFmo2+Data::Dumper より速いという Storable を使いたいのですが
うまくいきません。お使いの方、教えてください。
Storable.pm は CPAN より入手しております。
0024nobodyさん
03/03/19 12:15ID:???どう使いたいのかわからんけど
とりあえずドキュメント
http://perldoc.jp/docs/modules/Storable-2.05/Storable.pod
002523
03/03/19 12:27ID:???で AutoSplit にてモジュールを分解して、 autosplit.ix などが
生成されたのですが、結局エラーになってしまいました。
用途は Data::Dumper のように変数をファイルに保存する事です。
002621
03/03/19 12:42ID:???20がやりたいことがよく分からんが
mimetypeを application/octet-stream
とかにすればできるんじゃないの?
00287
03/03/19 13:12ID:0vdjLWGsご指摘ありがとうございます。
1から勉強しなおしてきます。
ビルドすらしていない可能性高し。
makeした?
0031nobodyさん
03/03/19 19:17ID:TkOxs7rIで結果が0.000000000000096
みたいな感じになるんですがこれってバグですか?
0032nobodyさん
03/03/19 19:25ID:???仕様。実用上あまり問題にならないはずだが
有効数字は自分で意識して書かないといけない。
小数は一桁で良いのなら、表示はこうする。
printf "%.1f", 計算結果;
0034T女の竹田
03/03/19 22:31ID:???一瞬>>32みたいなこと思ったけど、よく読むと結果が一兆分の一ぐらいになってるじゃん。
10.1-10で0.0999999999999996になったけど、このことかな?
これは詳しく話すと浮動小数点がどうとかって話になるけど。
0035nobodyさん
03/03/20 01:03ID:jX8BFx3Lprint "あいうえお";
print "かきくけこ";
print "さしすせそ";
これをまとめて書く方法ありませんでしたっけ?
????????????
あいうえお
かきくけこ
さしすせそ
???????????
こんな感じの関数があった気がするんですが・・・
0036nobodyさん
03/03/20 01:16ID:???print "あいうえお\nかきくけこ\nさしすせそ\n";
じゃだめなのん?
print join("\n",@array);
とかかなぁ...
0037nobodyさん
03/03/20 01:25ID:???あいうえお
かきくけこ
さしすせそ
EOF
コレの事?
0039nobodyさん
03/03/20 13:03ID:???ある条件の名前のファイルを取り出す・・・
というのをperlでやることは可能でしょうか?
0040nobodyさん
03/03/20 13:19ID:???ちったー検索しろ。
004120
03/03/20 15:08ID:???フォームの値からHTMLを出力して
そいつをCGI実行時に、ブラウザで表示せずに直接ダウンロードさせたかったってことなんですが
(なんか言い回しがややこしくなりますね…)
application/octet-streamで調べたらこれが見つかりました
http://tohoho.wakusei.ne.jp/lng/200003/00030606.htm
どうやら確実に動作しないようですね
#うちの環境でもMIMEType変更してもIEが強制表示しちゃいました
レスクスコ
0043nobodyさん
03/03/20 17:33ID:gyHuovPaテキスト広告用CGIを使うために
掲示板スクリプトの2行目に require "randbbs.cgi";を
付け足したらエラーになるんです。randbbs.cgiはちゃんと
存在するんですが、何がいけないんでしょうか?
004443
03/03/20 17:35ID:gyHuovPa「広告配信CGIのランダムTEXT広告配信CGI」でした。
0045nobodyさん
03/03/20 17:41ID:???004643
03/03/20 18:05ID:gyHuovPaはい。普通の掲示板のCGIなんで。
0047nobodyさん
03/03/20 18:07ID:???そのCGI設置ページの説明(動かんときの対処法)はひととおり試してみた?
あとさあ、ここPerlスレなんだが。なんでCGIの質問するのよ?
004943
03/03/20 18:18ID:gyHuovPa対処法はひとつだけ書いてあるんですが、だめでした。
パーミションやディレクトリの位置なんかもいろいろ試したんですが。
というかこれってPerlの話じゃないんですか?
違うんだったらやめます。ごめんなさい。
0051nobodyさん
03/03/20 23:07ID:???色々つっこみどころが多いな……
>対処法はひとつだけ書いてあるんですが、だめでした。
その方法を試したのか、試してないのか。
ダメならダメでどのようにダメだったのか。
これらの情報が全く含まれていない。
>パーミションやディレクトリの位置なんかもいろいろ試したんですが。
どう試したのか。
やはりこれも情報がない。
>というかこれってPerlの話じゃないんですか?
このスクリプトはPerlで書かれているが、PerlはCGIのためだけの言語ではない。
なお、CGIには専用のスレッドがある。
最後に一番大きなつっこみを。
なんで2chで聞く? まず作ったところ(作った人間)に聞くのが筋だろうに。
0052nobodyさん
03/03/21 03:15ID:???$text = "テキスト";
$name = "text";
print "$$name";
でできるのですが、$textがmyで宣言されていると
これでは表示されなくなってしまいます。
解決法は無いでしょうか・・?
0053nobodyさん
03/03/21 03:27ID:???%text = ('test'=>'テキスト');
$name = 'test';
print $text{$name};
みたいな・・・
0054nobodyさん
03/03/21 03:50ID:???${$name}と訂正しておきます。
>53の説明していただいた方法も考えたのですが、
頑固ですが、変数名には変数は使うのはむづかしいでしょうか(T_T)?
005554
03/03/21 03:54ID:???ハッシュを使う方向でやってみる事にしました。
0057nobodyさん
03/03/21 06:25ID:???$sousa02=(捜査2課の名簿がHTMLのデータで書かれてます);
〜
$sousa99=(捜査99課の名簿がHTMLのデータで書かれてます);
<input type=radio name="kenkei" value="sousa">捜査
<input type=radio name="sousa" value="01">捜査1課<br>
<input type=radio name="sousa" value="02">捜査2課<br>
〜
<input type=radio name="sousa" value="99">捜査99課<br>
name="kenkei" の value="sousa"と name="sousa" の value="01"をくっ付けて、
変数$sousa01とするにはどうしたらよいのでしょうか?
0058nobodyさん
03/03/21 08:33ID:???データ構造が思いっきり糞。
ハッシュ使え、ハッシュを。
$data{sousa}{1} = 捜査一課の情報;
みたいにすれ。
005953
03/03/21 08:34ID:???まず配列にする事ですな・・・
$sousa[1]=(捜査1課の名簿がHTMLのデータで書かれてます);
$sousa[2]=(捜査2課の名簿がHTMLのデータで書かれてます);
〜
$sousa[99]=(捜査99課の名簿がHTMLのデータで書かれてます);
で、帰ってきたform文が%FORMに入るとした場合
$sousa[$FORM{'sousa'}]
で解決
0060nobodyさん
03/03/21 11:34ID:???Only package variables (globals, even if localized) are
visible to symbolic references. Lexical variables
(declared with my()) aren't in a symbol table, and thus
are invisible to this mechanism.
0061nobodyさん
03/03/21 14:55ID:???「読み書きモードでファイル読んでコード変換して
元のファイルにsjisで書き込む」
このやりかた以外にもっと効率的な方法知ってたら教えてください
006461
03/03/21 17:55ID:???改行のCRLFをLFに変換したいのですがうまくいきません。
\xaを書き込んでもCRLFになってしまいます。
どなたか教えてください。
require "jcode.pl";
open(FH,"< a.txt");
@a=<FH>;
&jcode::convert(\$_, "euc","sjis") foreach (@a);#sjis→euc
close(FH);
open(FH,"> tmp.txt");
foreach(@a){
chomp;
print FH "$_","\xa";#←ここです
}
close(FH);
0065nobodyさん
03/03/21 18:11ID:???006664
03/03/21 18:22ID:???ありがとうございます。うまくいきました。
自動にLF→CRLF変換してしまうのを
binmode(FH);で防ぐんですね。
open(FH,"> tmp.txt");
binmode(FH);#←ここに追加
foreach(@a){
chomp;
print FH "$_","\xa";
}
close(FH);
0067nobodyさん
03/03/21 18:42ID:x5txFKZlスマートな書き方は無いでしょうか?お願いします。
foreach ( readdir(DIR) ) {
next if (/^\.\.?$/);
push @hoge,$_ if ( -d "$_" );
}
0068nobodyさん
03/03/21 18:57ID:???0069ミツマじゃぱん
03/03/21 18:59ID:CvSagfqMどうでもいいんですけどね。
0072nobodyさん
03/03/21 19:17ID:???俺はorを使ってる。
oとrがビジュアル的に「小さくてささやか」なのが好みに合ってるから
・・・ってのは、ネタのようだけど結構本気な理由。
007357
03/03/21 19:33ID:???データを配列に書き換えました。
OKです。
ありがとうございました。
>>58
%kenkei = ("sousa1" => "捜査1課" , "sousa2" => "捜査2課");
って言う風に書き換えました。
$kenkei{'sousa1'}なら捜査1課と出るんッスが、
$kenkei{'sousa$sousa'}だとundefッス。
$sousaの値は1です。
後学のために、房な所教えてくだせぇ〜
0076nobodyさん
03/03/21 21:34ID:???深い意味は無く、ヴィジュアルで(笑)
0077nobodyさん
03/03/21 23:05ID:???優先順位が大幅に違うので要注意。
(orは最下位)
0078nobodyさん
03/03/21 23:10ID:???$a = $b || $c;
open FH, "file" or die;
open(FH, "file") || die;
0079nobodyさん
03/03/21 23:52ID:???片方固定でしか使わない場合は関係ないの?
0082nobodyさん
03/03/22 06:32ID:V7CC4FvX下記の用に、タイムアウト時にバッククォートで囲った処理を
killしたいのですが、どうやっていいのか困惑してます。
良い方法がありましたら、ご指導いただければと思っております。
eval {
local $SIG{ALRM} = sub { die "timeout" };
alarm 10;
$tmp = `処理`;
alarm 0;
};
alarm 0;
if($@) {
if($@ =~ /timeout/) {# タイムアウト時
# 行った処理のプロセスを切る処理
}
}
0083nobodyさん
03/03/22 06:43ID:???2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
1:ちょっと大きいCGIなので、負荷を軽くしたい。(CGIです)
2:実行全体にロックをかけて、同時刻に複数人数が処理できないようにしてみたが…
3:それだと、本当に負荷が軽減されてるのか確かめようがなかった。
同時に実行されてない場合は、ちゃんと軽減されてますか?
0084nobodyさん
03/03/22 07:29ID:35k142Ilどこのサイトを見ても、
{n, m} n回以上m回未満にマッチ
と書いてあるのに、
my test = 'affaaffaaafaaaafaaaaafaaaaaafffaf';
$test =~ s/a{2, 5}/X/g;
print $test."\n";
としても、$testは全く変化しません。
なぜでしょうか?
008584
03/03/22 07:31ID:35k142Ilもちろん、
my $test = 'affaaffaaafaaaafaaaaafaaaaaafffaf';
の間違いです。
0086nobodyさん
03/03/22 07:36ID:???じゃねーの?
0087nobodyさん
03/03/22 07:38ID:???my $test = 'affaaffaaafaaaafaaaaafaaaaaafffaf';
$test =~ s/a{2,5}/X/g; ←{ }の中にスペース入れちゃダメ
print $test."\n";
008884
03/03/22 07:39ID:35k142Ilmy $test = 'hoge';
は問題ないず。
my $hoge, $foo = split(/\./, 'hoge.foo');
は、
my($hoge, $foo) = split(/\./, 'hoge.foo');
と書く必要があると思いますが。
どうでしょう?
008986
03/03/22 07:40ID:???ん〜。なんでだろ。分からん。
ちなみに、この記述はperl5未満では使えないよ。
009084
03/03/22 07:40ID:35k142Ilうお、できました。
スペースは無しでしか..
ありがとうございました。
0091nobodyさん
03/03/22 07:41ID:???× my $hoge, $foo = split(/\./, 'hoge.foo');
○ my($hoge, $foo) = split(/\./, 'hoge.foo');
0093nobodyさん
03/03/22 10:28ID:???同時実行されていない場合は、ロック処理の分負荷は増えている。
で、この部分は読んでないのかな?
>いらっしゃーい、Perlの"コーディング"で困ってる人のスレです。
0094nobodyさん
03/03/22 16:05ID:???一部だけ読んで適当に返事するのイクナイ
0095nobodyさん
03/03/22 16:40ID:???パイプつきoopenでPIDを取得しておいて、必要に応じてkill関数で殺す
…と思ってやってみたらうまく行かなかった(お。
0096nobodyさん
03/03/23 08:51ID:???<input type="checkbox" name="sakana" value="たい">たい
<input type="checkbox" name="sakana" value="ひらめ">ひらめ
<input type="checkbox" name="sakana" value="かつお">かつお
<input type="checkbox" name="sakana" value="まぐろ">まぐろ
で、複数選択しても、最後の値しか来ないのですが、どのようにすればよいのでしょうか?
cgi-lib.plを使い、
@arrey = &SplitParam($FORM{'sakana'});でやってみました。
フォームデータの取得は以下の通り
sub form {
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}
else {
$buffer = $ENV{'QUERY_STRING'};
}
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$FORM{$name} = $value;
}
}
$nameがsakanaで同じだから上書きされているんだと思うのですが、どう回避していいのかわかりません。
0097nobodyさん
03/03/23 09:01ID:???ひとつ。それのどこがPerlの話なんだ?
ふたつ。cgi-lib.plを使っておきながら、自前でデコード処理してんのか? もしそうならとんでもないヴァカだな。
解決策
・CGIのことはCGIのスレに行け。
・cgi-lib.plの最新バージョンとその正しい使い方を学べ。
これで解決。
0098nobodyさん
03/03/23 09:08ID:???>で、複数選択しても、最後の値しか来ないのですが、どのようにすればよいのでしょうか?
ハッシュのキーが値が上書きされるからそうなります。
<input type="checkbox" name="sakana0" value="あじ">あじ
<input type="checkbox" name="sakana1" value="たい">たい
<input type="checkbox" name="sakana2" value="ひらめ">ひらめ
<input type="checkbox" name="sakana3" value="かつお">かつお
<input type="checkbox" name="sakana4" value="まぐろ">まぐろ
等とやって処理を考えないと駄目
0100nobodyさん
03/03/23 09:34ID:???checkboxは、複数選択すると
sakana=あじ&sakana=たい&sakana=まぐろ
みたいに同じnameが複数来るんだよ。
これが分かればあとはなんとかできるでしょ。
010196
03/03/23 09:50ID:???解決しますた。
特に>>97さん、&ReadParse;で桶でした(滝汗)
===以下言い訳===
最初はcgi-lib.pl使ってなかったんだが、複数選択が必要になり、ぐぐったらcgi-lib.plの&SplitParamでできるってので使い始めたわけ。
ヴァカでした。
CGIとPerlの区別も含めて
■ このスレッドは過去ログ倉庫に格納されています