トップページphp
329コメント113KB

Perl コーディング初心者質問コーナー Part27

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/08/14 06:06ID:xOc/6R60
いらっしゃーい、Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。

1: 自分はこう言う事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

関連スレ
【Perl上級者コーナーPart01】
http://pc2.2ch.net/test/read.cgi/php/1024741312/
CGI: Common Gateway Interface part 11
http://pc2.2ch.net/test/read.cgi/php/1055597189/
【Perl,CGI】参考書籍 第三版
http://pc2.2ch.net/test/read.cgi/php/1030209573/
【 スクリプト改造工房 PART 6 】
http://pc2.2ch.net/test/read.cgi/php/1047806915/

過去ログやお勧めサイトは >>2-10
0002nobodyさん03/08/14 06:07ID:???
[過去ログ] 1 of 2

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.datOpen
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
0003nobodyさん03/08/14 06:07ID:???
[過去ログ] 2 of 2

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/php/kako/1044/10447/1044717887.html (タイトルに19と誤記)
part21 http://pc2.2ch.net/php/kako/1047/10479/1047980851.html
part22 http://pc2.2ch.net/php/kako/1050/10503/1050369328.html
part23 http://pc2.2ch.net/test/read.cgi/php/1053051519/
part24 http://pc2.2ch.net/test/read.cgi/php/1054992610/
part25 http://pc2.2ch.net/test/read.cgi/php/1056730690/

[ひまぢん氏のミラー]
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
0004nobodyさん03/08/14 06:08ID:???
[総合]
 ・Perl Com: http://www.perl.com/pub/Open
 ・CPAN.com: http://search.cpan.org/Open
 ・ActivePerl: http://www.activestate.com/Open
 ・CGI-ML:http://forest.ne.jp/cgi-ml/Open

[お薦め]
 ・Perlメモ: http://www.din.or.jp/~ohzaki/perl.htmOpen ★読んどけ
 ・Perl Recipes: http://www.effectiveperl.com/recipes/Open
 ・Randal's WebTechniques columns: http://www.stonehenge.com/merlyn/WebTechniques/Open
 ・Perlの部屋: http://www.cc.rim.or.jp/~midorin/mad-p/perl/index.htmlOpen
 ・Perl初心者の部屋:http://www.harukaze.net/~mishima/perl/Open
 ・Perlリファレンス:http://www.big.or.jp/~mio/ga/pl/plref/pl_ref.htmOpen
 ・Perlのページ:http://homepage1.nifty.com/nomenclator/perl/
0005nobodyさん03/08/14 06:08ID:???
[Document&Tutorial]
 ・Home - Japanized Perl Resources Project: http://perldocjp.sourceforge.jp/
 ・Perl News: http://www.news.perl.org/Open
 ・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.htmlOpen
 ・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/Open
 ・The Perl Archive : http://www.perlarchive.com/Open
 ・Perl6 & Parrot VM についての情報: http://dev.perl.org/perl6/Open
 ・use Object; : http://perl.infoware.ne.jp/Open
0006nobodyさん03/08/14 06:08ID:???
[Document&Tutorial]
 ・Home - Japanized Perl Resources Project: http://perldocjp.sourceforge.jp/
 ・Perl News: http://www.news.perl.org/Open
 ・Perl Monks: http://www.perlmonks.org/Open
 ・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/Open
 ・Rex Swain's Home Page: http://www.rexswain.com/Open
 ・Robert's Perl Tutorial: http://www.netcat.co.uk/rob/perl/win32perltut.htmlOpen
 ・Perl Tuts: http://savage.net.au/Perl-tutorials.htmlOpen
 ・Beginning Perl Tutorials: http://www.pageresource.com/cgirec/index2.htmOpen
 ・jcode.pl の私的な解説書: http://www.mikeneko.ne.jp/~lab/kcode/jcode.htmlOpen
 ・Logical Choice Software, Home Page: http://www.logsoft.com/perltips/
 ・Perlfect Solutions: http://perlfect.com/Open
 ・The Perl Archive : http://www.perlarchive.com/Open
 ・Perl6 & Parrot VM についての情報: http://dev.perl.org/perl6/Open
 ・use Object; : http://perl.infoware.ne.jp/Open
0007nobodyさん03/08/14 06:09ID:???
[Module]
 ・Perl Module Reference: http://www.bekknet.ad.jp/~bero/docj/module_/ (404)
 ・PPMPackages: http://www.activestate.com/PPMPackages/
 ・河馬屋二千年堂's Page: http://member.nifty.ne.jp/hippo2000/index.htm

[Security]
 ・安全なプログラミングのためのガイドライン:http://www.FreeBSD.org/ja/security/#spg
 ・Perl security:http://www.perldoc.com/perl5.6/pod/perlsec.htmlOpen
 ・Perl security和訳:http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlsec.htmlOpen
 ・CGI and Security http://www.ansi.co.jp/tech/cgi/security/Open
 ・The Unofficial Web Hack FAQ:http://www.nmrc.org/faqs/www/
 ・How to Write Secure Code:http://www.shmoo.com/securecode/
 ・Safe CGI Programming :http://www.improving.org/paulp/cgi-security/safe-cgi.txtOpen

[OS]
 ・Linux日本語マニュアル:http://www.linux.or.jp/JM/Open
 ・FreeBSD日本語マニュアル:http://www.jp.freebsd.org/man-jp/Open
0008nobodyさん 03/08/14 06:11ID:???
前スレ

http://pc2.2ch.net/test/read.cgi/php/1059043704/l50

立てといたが、藻前ら、荒すんじゃねーぞ
0009nobodyさん03/08/14 08:23ID:???
つーか、荒してるのひとりだけだし、こまめに削除依頼出せばいい
0010あぼーんNGNG
あぼーん
0011nobodyさん03/08/14 10:47ID:???
http://pc2.2ch.net/test/read.cgi/php/1012750353/243
>%aa=("hanako","12","tarou","20","ichirou","5");
>となっているとします。
>キーが名前で値が年齢なんですが、
>年齢でソートし表示させる場合、
>ichirou 5
>hanako 12
>tarou 20
>とするにはどうすればいいのですか?

http://www.kt.rim.or.jp/%7ekbk/perl5.005/perlfaq4.html#How_do_I_sort_a_hash_optionally
クックブックレシピ5.9

演算子を間違わないよう注意。
0012nobodyさん03/08/14 11:02ID:???
あっと、演算子でしたか…。

演算子は数値なので、<=>を使用。
0013nobodyさん03/08/14 11:03ID:???
PHPのrawurlencode関数(RFC1738に基づきURLエンコードを行う)
http://php.planetmirror.com/manual/ja/printwn/function.rawurlencode.php
と同じことを、perlでやりたいのですが、
どのようにくめばよいのでしょうか?
0014nobodyさん03/08/14 11:13ID:???
s/([^0-9A-Za-z_ ])/'%'.unpack('H2',$1)/ge;
s/\s/+/g;
0015nobodyさん03/08/14 11:27ID:???
s/\s/+/g
は、
s/ /+/gでは無いので注意しましょう。この場合は問題は起きないけど。
0016nobodyさん03/08/14 11:29ID:H+TQovVp
今、深沢千尋氏の書いた『すぐ分かるPerl』を元に勉強しているのですが、
その中の、第五章『プログラムにデータを渡す 〜引数〜』という章で、

#! /usr/local/bin/perl

print "$ARGV[0]\n";
print "$ARGV[1]\n";
print "$ARGV[2]\n";
print "$ARGV[3]\n";
print "$ARGV[4]\n";

に"love"という引数を与えてみましょう。

と書いてあるのですが、どうやれば引数を与えられるのでしょうか。
OSはWindowsXP、エディタはTeraPadを使っています。
よろしくお願いします。<(_ _)>
0017nobodyさん 03/08/14 12:05ID:???
>>16
@ARGV は実行ファイルに対する引数。
ファイル名を aya.plとした場合、

aya.pl love

で動くでそ


00181303/08/14 12:09ID:???
>>14
ありがとうございます。
ところで、>>14 を見て逆に、
googleで「エンコード perl unpack」で検索していくつかのページを見たんですが、
s/ /+/g; とやってるところしか見あたりませんでした。

>>15の意図はどんなところにあるのでしょうか?
0019nobodyさん03/08/14 12:20ID:???
[0-9A-Za-z_ ] 以外は変換済みなので\sに該当するものは
空白しかないけど、本来の目的ではTAB等も+に変えたかった
ってことじゃねーの?あまり深い意味は無い
00201603/08/14 12:43ID:H+TQovVp
>>17
レスありがとうございます。
早速ファイル名を aya.cgi love にしてFFFTPを使ってトクトクに送り、

あなたのアクセスしたファイルは、
アクセスする権限が与えられていないか、
もしくはindex.html 又は index.htmが存在しません。

と表示されました。
お手数ですが、他に方法は無いでしょうか。よろしくお願いします。

補足
*拡張子 .pl だとこのCGIのダウンロードが始まり、駄目っぽいので、元通り拡張子.cgiで試してみました。

*#! /usr/local/bin/perl と書きましたが、これは本の中にこう書いてあるだけで、実際には #!/usr/bin/perl
 であり、Tok2.comに送ってやっとります。 説明不足スイマセン。
0021nobodyさん03/08/14 12:45ID:???
面倒くさいからこれでいいだろ
s/(\W)/'%' . unpack('H2', $1)/eg;

半角スペースは当然 %20 に変換される
0022nobodyさん03/08/14 12:59ID:???
>>20
共有サーバでそんなテストなんかするな!
自分のPCにperlとhttpd入れてやれ

それにやってること丸っきり的外れ
0023nobodyさん03/08/14 13:11ID:???
>>20
「すぐわかるPerl」なら
1.1Perlは入っているか?
をじっくり読んでみてください。
0024nobodyさん03/08/14 14:32ID:???
>>19
URLエンコードは本来不可逆だってこと?

>>20
トクトクから損害賠償請求が来ますよ?
0025nobodyさん03/08/14 15:13ID:???
>>20

つまり、おまえみたいな馬鹿は二度と来るなってこと。
すげー迷惑。人のことも考えろ、ハゲ!!
0026nobodyさん03/08/14 15:14ID:???
#!/usr/bin/perl

# CGIヘッダの出力
print "Content-type: text/html\n\n";

while($HP1 > 0) and ($HP2 > 0){
srand1;
srand2;
}

# Player1
$HP1 = 400 - $kougeki1;
$KIK1 = 60;
$PAN1 = 20;
$DF1 = 10;

# Player2
$HP2 = 300 - $kougeki2;
$KIK2 = 100;
$PAN2 = 40;
$DF2 = 0;

# Player1
$kougeki1 = srand;

# Player2
$kougeki2 = srand2;
0027nobodyさん03/08/14 15:14ID:???
srand;
if($mode == 1){
$offense = \%you;
$defense = \%my;
}elsif($mode == 2){
$offense = \%my;
$defense = \%you;
}
if( int(rand(2)) ){
#punch
$damage =
$offense->{'$PAN1'} - $defense->{'$DF2'};
if(!$rand = int(rand(5))){
#half
$damage = int($damage / 999);
}elsif($rand < 3){
#miss
$damage = "";
}
}else{
#kick
$damage =
$offense->{'$KIK1'} - $defense->{'$DF2'};
}
0028nobodyさん03/08/14 15:14ID:???
srand2;
if($mode == 1){
$offense = \%you;
$defense = \%my;
}elsif($mode == 2){
$offense = \%my;
$defense = \%you;
}
if( int(rand(2)) ){
#punch
$damage =
$offense->{'$PAN2'} - $defense->{'$DF1'};
if(!$rand = int(rand(5))){
#half
$damage = int($damage / 999);
}elsif($rand < 3){
#miss
$damage = "";
}
}else{
#kick
$damage =
$offense->{'$KIK2'} - $defense->{'$DF1'};
}

($damage < 0) and ($damage = 0);
$defense->{'HP1'} -= $damage;

($damage < 0) and ($damage = 0);
$defense->{'HP2'} -= $damage;
0029nobodyさん03/08/14 15:15ID:???
# HTMLの出力
print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n";
print "<html>\n";
print "<head><title>対戦バトル</title></head>\n";
print "<body>
<p>Player1:体力は$HP1です</p>
<p>Player2:体力は$HP2です</p>
<p>Player1は<big>$kougeki1</big>のダメージを与えた。</p>
<p>Player1は<big>$kougeki1</big>のダメージを受けて混乱した。
<p>Player1は<big>$kougeki1</big>のダメージで友達のトイレではみ出したクソをし始めた。
<p>Player2は<big>>$kougeki2</big>のダメージを与えた。</p>
<p>Player2は<big>>$kougeki2</big>のダメージを受けて裸踊りを始めた。
<p>Player2は<big>>$kougeki2</big>のダメージで友達の女にレイプし始めた。</p></p></body>\n";
print "</html>";
0030あぼーんNGNG
あぼーん
0031あぼーんNGNG
あぼーん
0032nobodyさん03/08/14 19:26ID:OJ2itBeZ
socket (SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
このように、socketで作ったSOCKハンドルのポインタ操作はでき
ないのでしょうか。
どこで操作しても、ポインタは「-1」となっております。

理解不足で申し訳ありませんが、宜しくお願いいたします。
0033nobodyさん03/08/14 20:03ID:???
>>32
ポインタ操作って何?

>2: それでこんな風にやってみたが・・・

ここを具体的に。
0034nobodyさん03/08/14 23:19ID:???
>>20
やってることは10章の内容です
もう少し本を読み進めてから取りかかってはどうでしょうか
0035nobodyさん03/08/14 23:19ID:???
>>32

操作をすることはできません。
Perlをやってる奴はおまえさんみたいなオタクが多い。
オタクはきもいから、気づかないんでしょうね。
0036nobodyさん 03/08/15 00:16ID:???
>>20
perl = cgi ではない。
お前さんがまずしなければならんのは、自分のパソコンにperlをインストールして
コマンドラインさっきのコマンドが実行するかを確認することやね。

この文章読んでわからんようであれば、あらしと取られかねんからそのつもりで。

#あと、perlをどうやってインストールしたらいいですかなんてことは聞くなよ(w
0037nobodyさん03/08/15 01:51ID:???
 
0038nobodyさん03/08/15 02:22ID:???
Perlの
s./// と tr///
の違いがいまいちわからないのですが、どういう違いがあるのでしょうか・・・
0039nobodyさん03/08/15 02:25ID:???
sub get_select_form{
my ($name, $selected) = @_;
my ($key, $form);

$form .= '<select name="' . $name . '">' . "\n";
foreach $key (sort keys %{$name}) {
if($key eq $selected){
$form .= '<OPTION value="' . $key . '" selected>' . ${$name}{$key} . '</OPTION>' . "\n";
}
else{
$form .= '<OPTION value="' . $key . '">' . ${$name}{$key} . '</OPTION>' . "\n";
}
}
$form .= '</select>' . "\n";

return $form;
}

このようなselectボックスを生成するサブルーチンを作ったのですが、
sort keys %{$name}
のところで「〜HASH ref while "strict refs"〜」と怒られてしまいます。

no strict;は使いたくないので、何かよい解決策があれば教えてください。
すみませんが宜しくお願いいたします。
0040nobodyさん03/08/15 06:11ID:???
>>38
たとえば $_='ABCDECBA' あたりで
s/ABC/123/

tr/ABC/123/
を試してみれば分かります。
0041nobodyさん03/08/15 09:33ID:???
えーと、前にも一応お世話になった者で基本的な質問で悪いんですが、
配列に格納されているすべての文字列の先頭にある文字列を連結させたいんですが
下記のコードではうまくいきませんでした。
実際は頭に付ける文字列を変えて何回もこの処理を繰り返すのですが、
(サブルーチンにして、↓の例の$push_wordは引数として受け取る)
二回目からは、前回頭に付けた文字列と$push_wordを頭につけてしまいます。
簡単な応用技術ですがご教授願えたら幸いです。

【理想】
@bar = ("gg","dge","mpire","ncode","nglish")

@bar = ("Egg","Edge","Empire","Encode","English")
とするような処理(配列名barに意味はなし)

【こうしてみた】
(@barを定義した後、)
my $push_word = "E";
foreach (@bar){
   my $a = $push_word;
   $a .= $_;
   $_ = $a;
          }
print "@bar";

■ このスレッドは過去ログ倉庫に格納されています