Perl 初心者コーナー Part22
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/04/15 10:15ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
1:自分はこう言う事がしたい。
2:それでこんな風にやってみたが・・・
3:それだとこんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
CGIだけど、なんか質問ある? Part 10
http://pc2.2ch.net/test/read.cgi/php/1048686475/
参考書籍の話題は、【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/04/15 10:15ID:???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://pc2.2ch.net/test/read.cgi/php/1044717887/ (タイトルに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/04/15 10:16ID:???・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/04/15 10:16ID:???・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/04/15 10:36ID:???Perl 初心者コーナー Part21
http://pc2.2ch.net/test/read.cgi/php/1047980851/
0007nobodyさん
03/04/15 15:12ID:wdeZFKcAあの環境変数のスクリプト動きました。
どうやら仕様(?)変わったらしく、以前はcgi-binに入れなくてよかったんですが、
入れないといけなくなったらしいです。
それで、また質問なんですが、指定した環境変数だけ表示するにはどうすればいいんですか?
よろしくお願いします。
0008nobodyさん
03/04/15 15:18ID:???表示したい環境変数を指定する。
0009nobodyさん
03/04/15 16:02ID:F/iCEAMk私はサーバを借りてて、(Kagoyaのスタンダード40です)
サイトにPerlでランダムに文面を表示するスクリプトを設置してました。
20個くらいページがあって1ページにつき4つほどそのスクリプトを
設置してたところ、サーバに負荷がかかりすぎだと
サポートの人から注意されてしまいました。
Perlで書いたCGIを使うとそんなに負荷ってかかるもんなんでしょうか?
まあ1ページに4つも設置した私が一番馬鹿だとは思うのですが。
0010nobodyさん
03/04/15 16:10ID:???まーどんなスクリプトかしらんから答えようが無い。
一般的にはそれなりに負荷はかけるものだと思ったほうがいいよ。
# というかランダム文字列とかはサーバーサイドでやるよりクライアントサイドでやったほうがいいんじゃ?
0012nobodyさん
03/04/15 16:36ID:F/iCEAMkそうですか。私が設置してたのは携帯用サイトのランダムテキスト広告です。
長いので引用はやめときますが、こういう広告ってやっぱり
スクリプトの文章の長さによって負荷の大きさって違うんでしょうか?
今度から以下のようなランダム表示スクリプトを使おうかと思うんですが。
#!/usr/local/bin/perl5
$txtfile = "ranod,.txt";
open(FILE, "$txtfile");
chop(@lines = <FILE>);
close(FILE);
srand(time + $$);
$aaa = int(rand($#lines + 1));
print $lines[$aaa];
exit;
あと、クライアントサイドっていうのもあるんですね。
今の私にはさっぱりわかりませんが勉強しようっと。
0013nobodyさん
03/04/15 16:38ID:???0014nobodyさん
03/04/15 16:40ID:???吐き出すように、なおかつメモリを食い過ぎないようにするしかない。
0015nobodyさん
03/04/15 17:34ID:???Perlの話じゃなくなってるが、
そのスクリプトがSSIで埋め込まれてるとして…。
今時のサーバだとスクリプト自体の処理内容より、
プロセス立ち上げが大きな負荷になる。
だから1ページ表示する度に4つのプロセスが
立ち上がるような事をするより、ページ丸々CGIで
吐くようにした方がサーバには優しいと思う。
http://pc2.2ch.net/test/read.cgi/php/1048686475/
0016nobodyさん
03/04/15 17:41ID:???1つで4つ分の広告をまとめて吐くようにすればいいのに。
0017nobodyさん
03/04/15 17:50ID:???そっちのほうが負荷が大きいものだと思ってました。
調べてやってみたいと思います。ありがとうございましたー。
0018nobodyさん
03/04/15 18:25ID:0B+FeJbY・やりたいこと
24bitsカラーコードを、無作為に選んで並び替えたい。
・やってみたこと。
24bits分の配列を用意して、無作為に選び、別の配列へ代入させてみた。
my @src_colors=(0..16777215);
my @dist_colors;
foreach(0..16777215){
push(@dist_colors,splice(@src_colors,int(rand($#src_colors+1)),1));
}
・結果
Out of memoryとなる。
そもそも64MBytesもある配列を用意している時点でアウトなんだと思うのですが、ほかに良い方法が思い浮かびませんでした。
(外部ファイルを使って同じ方法を。と思ってみたのですが、こちらも「重複するカラーコードを排除する」という点で同じような配列を使ったためにOut of memoryとなってしまいました。)
そこで、別の方法論がありましたらご教授いただけるとありがたいです。
それではよろしくおねがいいたします。
0019Perl3級
03/04/15 18:40ID:bx4RfdeG最後の望みを託してエキスパートのみなさんにすがります。宜しくお願い
致します。
#/usr/local/bin/perl
@i = ( "AAA 100 80",
"BBB 500 500",
"AAA 400 420");
foreach $line (@i) {
split(/\s/, $line);
$key = $_[0];
$hash{$key} = $line;
print "$key $hash{$key}\n";
}
これを実行すると、
AAA => AAA 100 80
BBB => BBB 500 500
AAA => AAA 400 420
となります。あとは、AAA,BBBごとに右の数字を足していきたいのです。
簡単に言えば集計プログラムです。最終的に
AAA => AAA 500 500
BBB => BBB 500 500
となれば成功です。どんなにやってもわかりません。頭も痛くなって
きました。ぼくに秘伝を伝授して下さい。どうか、お願いします。
0020nobodyさん
03/04/15 18:43ID:???並べ替えできたとして何に利用するの?
九九の範囲内で足りるものを、それ以上の桁数で答を
用意しておいても無駄なだけでしょ
用途に対する根本的な設計がうまくないのでは?
0021通行人さん@無名タレント
03/04/15 19:14ID:???"BBB 500 500",
"AAA 400 420",
"AAA 120 150",
"BBB 30 420"
);
my %hash = ();
foreach my $line (@i) {
my @temp = split(/\s/, $line);
my $key = shift @temp;
if( exists $hash{ $key }){
$hash{ $key }->[ 0 ] += $temp[ 0 ];
$hash{ $key }->[ 1 ] += $temp[ 1 ];
} else {
$hash{$key} = [ @temp ];
}
}
foreach my $key(keys %hash){
print $key, $hash{$key}->[ 0 ],$hash{$key}->[ 1 ], "\n";
}
0022nobodyさん
03/04/15 19:23ID:???それから、my @tempで新しいメモリに置いてるのに、[ @temp ]は勿体ない。
0023nobodyさん
03/04/15 19:26ID:???0025nobodyさん
03/04/15 19:44ID:???この場合は暗黙の内に生成しちまっても問題ないと思うんだけど
駄目なんでしょうか。
@record = ("AAA 100 80", "BBB 500 500", "AAA 400 420");
my %sum;
foreach (@record) {
my($key, @value) = split /\s/;
for (my $i = 0; $i <= $#value; $i++) {
$sum{$key}->[$i] += $value[$i];
}
}
foreach my $key (sort keys %sum) {
print"$key => $key @{$sum{$key}}\n";
}
つか >>19 のコードは興味深いな。一つ勉強になったよ。
0026nobodyさん
03/04/15 21:17ID:???002725
03/04/15 22:13ID:???上のコードに use strict つけて @record を my 宣言して
走らせたけど、エラーになりませんでしたよ。
5.005_03 と 5.8.0 で確認。
リストリファレンスでないものを無理矢理リストとして
デリファレンスしたらエラーになるけど、代入時は
勝手にやってくれますよね?
use strict;
my $foo;
print @{$foo}; # ランタイムエラー
$foo->[2]{'bar'}[10] = 'baz';
print join '/', ($foo, $foo->[3], $foo->[2]{'bar'}, $foo->[2]{'bar'}[10]); # OK
0028nobodyさん
03/04/15 22:31ID:???0029nobodyさん
03/04/15 23:20ID:???例えば、あいうえおかきくけこ という文章の時、5文字目までを残して、
あいうえお までを表示させて最後に・・・を付けるというような形です。
あいうえおかきくけこ
↓
あいうえお・・・
みたいにする方法を教えてください。
0030nobodyさん
03/04/15 23:26ID:???どのような文字が入っているかによって変わる。
全て2バイト文字だと断言できるならsubstrでもできる。
1バイト文字と2バイト文字が混ざるなら、文字コードを読んで判断させなければならない。
0031nobodyさん
03/04/15 23:38ID:???早速お返事をありがとうございます。
ホームページの名前なので英語だったり日本語だったりしますので
下のにあたりますでしょうか?できればその方法を教えてください。
0032nobodyさん
03/04/15 23:43ID:???この辺参考にしる。
http://www.din.or.jp/~ohzaki/perl.htm#JP_Split
0033nobodyさん
03/04/16 00:01ID:???ありがとうございます。
URLのホームページを拝見したのですが難解でどこの事なのか分かりませんでした。
リンク集のログデータをトップページに表示させるためのデータをまとめるスクリプトを書いています。
どなたか方法を教えてください。お願いします。
0034nobodyさん
03/04/16 00:13ID:???クリックせずにコピペしてみろ。
ちゃんとどこを見るかまで教えてくれている。
それ以上は自分で考えれ。
0035nobodyさん
03/04/16 00:16ID:???「最初から全部教えてもらおうとしている」人には冷たい。
Perlのサポートセンターじゃないんだから。
回答側もボランティアだ。
よぉく>>1を読んでくれ。
>一緒に勉強しましょう。
勉強するのは教わる事じゃない。
考える事だ。
0036はしのえみ好きー
03/04/16 00:26ID:???>「最初から全部教えてもらおうとしている」人には冷たい。
このスレに限ったことじゃないよね。
後者に優しいのは宿題任せろスレぐらいだ。
0037nobodyさん
03/04/16 00:27ID:???substrの方法はわかりましたが、
1バイト文字と2バイト文字が混ざると駄目なようで。
この方法をどうか教えてください。
0039nobodyさん
03/04/16 00:28ID:g3p2EJXOウソだけど、はしのえみのヌード持ってるぞ
0041nobodyさん
03/04/16 00:35ID:???>32のリンク先になにがあった?
文字単位に分割できれば、そこで文字数を数える事はできるよな?
そうしたら、最初5文字だけ残して、その後ろを消して置き換え。
あとは自分でやってくれ。
0042nobodyさん
03/04/16 00:51ID:???その部分は既にsubstrを教えて頂いたのできてます。
004339
03/04/16 00:54ID:g3p2EJXO最初にウソだけどって書いたのに・・・・・・
ウンコーーーーーー
0044Perl3級
03/04/16 00:55ID:Zmk9zNa+みなさん。ありがとうございました。
お陰さまで無事プログラムか完成しました(涙
ありがとう、ほんとうにありがとう(涙
0045nobodyさん
03/04/16 00:56ID:???0046nobodyさん
03/04/16 01:09ID:???$title = mb_strimwidth("$title",0,10,"...");
0048nobodyさん
03/04/16 01:44ID:???これは何でしょうか?試してみましたが動きませんでした。
現状はsubstrで・・・に変換する事が出来ましたが、
substrが、1バイトづつで指定していますので、
1バイト文字と2バイト文字の組合せでは場合によって、
文字化けが発生しまいます。先ほどホームページを教えて頂いたのですが、
今の私の力では読み取る力がありませんでした。
思考錯誤してみます。お騒がせして申し訳ありませんでした。
0050nobodyさん
03/04/16 02:26ID:+e/kztES>>20
例えが良く判りませんでした。すみません。
005150=18
03/04/16 02:27ID:???0052chuu
03/04/16 11:42ID:???$username = "hoge";
if (-e "~$username") {・・・
とやっても、hogeというユーザが存在するにもかかわらずfalseになります。
チルダを使わずフルパスで指定すれば当然うまくいくわけですが、
ユーザ名からホームへのフルパスを得るようなことはできますか?
/etc/passwdを開いて検索しなければならないのでしょうか・・・
よろしくお願いいたします。
0053はしのえみ好きー
03/04/16 11:45ID:???/home/$username でイーンジャネーノ?
0054はしのえみ好きー
03/04/16 11:48ID:???0055chuu
03/04/16 12:04ID:???変な環境でして、/home/*で統一されているわけではないんです。
passwdファイル検索の方向で試してみます。
ありがとうございました。
/etc/passwd用組み込み関数があるよ。
perldoc -f getpwent
perldoc User::pwent
およびgetpwent(3) man pageを参照のこと。
0058nobodyさん
03/04/16 13:20ID:fv/dMt9bppm>install HTTP-Lite と打ち込んだのですが、
Error installing package 'HTTP-Lite': Could not locate a PPM binary of 'HTTP-Lit
e' for this platform
となってエラーになってしまいます。
検索はしてみましたが、さっぱり見当違いなものしか検索できませんでした。
どうかどうすればインストールできるか、ご教授お願いします。
0059nobodyさん
03/04/16 16:28ID:???Packages available from http://ppm.ActiveState.com/cgibin/PPM/ppmserver.pl?urn:/
PPMServer:
HTTP-Lite [2.1.1] Lightweight HTTP implementation
PPM>
あるけど
setでパス通ってるか見てみ
0060nobodyさん
03/04/16 17:56ID:???レンタルサーバーに置いて2ch書き込むのに使ってる人いる?
0061nobodyさん
03/04/16 19:20ID:???006258
03/04/16 19:20ID:???0063nobodyさん
03/04/16 22:53ID:NR7Y4aEIそういういじめか・・・
でもまじでヌードは見たいがな、俺も。
あいつは何かむらっとくるもんがあるあいつはもう30なのに・・・・・
写真集出せ
0064nobodyさん
03/04/17 00:24ID:qoz0Pxr2それとも何かコンパイラみたいので.cgiに変えるとかなんですか?
お願いします教えてください。
あとそのうち作ったcgiを配布してみたいと考えているのですが、そのときも拡張子が.cgiのほうが良いのですか?
0065nobodyさん
03/04/17 00:33ID:???.plで動けば.plでいいじゃない?
0066はしのえみ好きー
03/04/17 00:34ID:???漏れ年上でかつ可愛い人が好き。はしのえみは理想だな。
>>64
スレ違い。ここははしのえみについて語るスレです。
Webサーバの設定で、拡張子".cgi"というファイルのリクエストを受けるとそれ用に処理するようになってる。
だから、設定によっては".pl"でもOKな時もある。
どっちにしろ".cgi"にしておけば安心。ファイル名を変えるだけでOKよ。
0067nobodyさん
03/04/17 00:36ID:???0068nobodyさん
03/04/17 00:38ID:???0069nobodyさん
03/04/17 00:55ID:???型グロ部ってイマイチ何かよくわかりません。
とあるCGIをDLして、それを解読中なのだが、
たとえば、
*option_pnt = $_[0];
*config_pnt = $_[1];
$ctl_sock = $config_pnt{"ctl_sock"};
$before = $option_pnt{"before"};
$after = $option_pnt{"after" };
$path = $option_pnt{"path" };
&jcode'convert(*before,"sjis");
&jcode'convert(*after ,"sjis");
&jcode'convert(*path ,"sjis");
のような部分があるのですが、
漏れ敵には、文脈に応じて柔軟に型を識別してくれるもの
くらいの認識なのですが、いまいちシックリきません。
どんなときに型グロ部使うと激ウマーなのか、どなたかご教授ください。
0070nobodyさん
03/04/17 00:59ID:qoz0Pxr2いやてっきりPerlプログラムをコンパイルしているのかと思っていたから。
サンクスみんな
ついでにいうと63=64=俺や。
どうでもいいがな。
オマエがすれ違いやで。
0071nobodyさん
03/04/17 01:02ID:???圧縮しないときはtxtにしてるところが多いね。
cgiだと多くの場合、実行されちゃうから。
■ このスレッドは過去ログ倉庫に格納されています