トップページphp
1001コメント346KB

Perlコーディング初心者質問スレ Part 38

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん04/10/07 23:23:08ID:kiEzDCJF
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

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

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

過去ログやお勧めサイトは >>2-10
0002nobodyさん04/10/07 23:28:34ID:???

関連スレ
CGI: Common Gateway Interface part 11
http://pc5.2ch.net/test/read.cgi/php/1055597189/
【Perl,CGI】参考書籍 第三版
http://pc5.2ch.net/test/read.cgi/php/1030209573/
★三 【 スクリプト改造工房 PART 8 】 ★三
http://pc5.2ch.net/test/read.cgi/php/1077525387/
【 スクリプト改造依頼スレ 】(丸投げ) part2
http://pc5.2ch.net/test/read.cgi/php/1092304968/
△▲ WebProg 初心者の質問 Part10 ▼▽
http://pc5.2ch.net/test/read.cgi/php/1095633323/
【Perl】ファイルロック(排他処理)について語ろう
http://pc5.2ch.net/test/read.cgi/php/1024795138/
★負荷軽減対策委員会(Perl、PHP)★
http://pc5.2ch.net/test/read.cgi/php/1034645635/
【Perl】掲示板を使ろう!
http://pc5.2ch.net/test/read.cgi/php/988890976/
Perlモジュールについて
http://pc5.2ch.net/test/read.cgi/php/997829243/
CGIに依存しないPerlの話題一般/Part2
http://pc5.2ch.net/test/read.cgi/php/1030548610/
0003nobodyさん04/10/07 23:29:28ID:???
[過去ログ] 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.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
0004nobodyさん04/10/07 23:30:33ID:???
[過去ログ] 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/php/kako/1053/10530/1053051519.html
part24 http://pc2.2ch.net/php/kako/1054/10549/1054992610.html
part25 http://pc2.2ch.net/php/kako/1056/10567/1056730690.html
part26 http://pc5.2ch.net/php/kako/1059/10590/1059043704.html
part27 http://pc5.2ch.net/php/kako/1060/10608/1060808783.html
part28 http://pc5.2ch.net/php/kako/1063/10635/1063562491.html
part29 http://pc5.2ch.net/php/kako/1066/10662/1066286828.html
part30 http://pc5.2ch.net/test/read.cgi/php/1069846177/
part31 http://pc5.2ch.net/test/read.cgi/php/1072896288/
part32 http://pc5.2ch.net/test/read.cgi/php/1075545279/ (タイトルに31と誤記)
part33 http://pc5.2ch.net/test/read.cgi/php/1078076768/
part34 http://pc5.2ch.net/test/read.cgi/php/1081148490/
part35 http://pc5.2ch.net/test/read.cgi/php/1085557731/
part36 http://pc5.2ch.net/test/read.cgi/php/1089779036/
part37 http://pc5.2ch.net/test/read.cgi/php/1093106507/ (前スレ)
0005nobodyさん04/10/07 23:33:11ID:???
ム板Perlスレより

[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: http://www5a.biglobe.ne.jp/~n_rieko/perl/

[本]
リャマ: http://www.oreilly.co.jp/BOOK/lperl3/
駱駝: http://www.oreilly.co.jp/BOOK/pperl3v1/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/BOOK/pcook/

[オンラインマニュアル]
Perldoc.com: http://perldoc.com
perldoc.jp: http://perldoc.jp
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/%7ekbk/perl5.005/

[モジュール]
CPAN.com: http://search.cpan.org/
河馬屋二千年堂: http://member.nifty.ne.jp/hippo2000/

[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
0006nobodyさん04/10/07 23:34:58ID:???
補足

コーディング 【coding】

プログラミング言語を使ってソフトウェアの設計図にあたるソースコードを作成すること。
(e-Wordsより)

自分の質問がPerlに関することなのか、
それともPerlではなくCGIやHTMLについてなのかを切り分けした上で、
質問して下さい。
0007nobodyさん04/10/07 23:39:18ID:???
だれも言わないから言っとく。

>>1 乙かれー
0008nobodyさん04/10/07 23:39:26ID:???
前スレ1氏より

http://www.geocities.co.jp/SiliconValley/5656/
http://www.hyuki.com/writing/techask.html

これはMLでの作法ですが、BBSでの質問にも当てはまると思います。
例え匿名でも、回線の向こうに居るのはあなたと同じただの人ですよ。
0009nobodyさん04/10/07 23:40:21ID:???
あと何かないかな。

WikipediaのPerlの項目
http://ja.wikipedia.org/wiki/Perl
0010nobodyさん04/10/07 23:44:13ID:???
前スレの>>1は文章自体は別に構わないと思うけど、前スレ>>987の意見を考慮して
以前の>>1に戻しました。

0011nobodyさん04/10/08 00:27:11ID:???
>>1乙。シャラポア マンセー
0012nobodyさん04/10/08 00:40:34ID:LN3yr29s
人によってコードの書き方は色々だと思うのですが、
一般的に美しいとされるコードの書き方はどのような書き方ですか?
参考になるようなソースがあればお教えください。
0013nobodyさん04/10/08 01:16:04ID:???
>>12
http://perldoc.com/perl5.8.4/pod/perlstyle.html
http://perldoc.jp/docs/perl/5.8.0/perlstyle.pod
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlstyle.html
00141204/10/08 02:14:31ID:LN3yr29s
どうもありがとうございます。
しかしながら、見た目の美しさではなく、
コードを後から読む人にとって、
直感的に、わかりやすいコードという意味で、美しいといいました。
誤解を招く言い方でスイマセンでした。
0015nobodyさん04/10/08 03:17:19ID:???
>>14
perlstyle にはそういう意味で美しくする為の Tips も載っているだろ?

より具体的に知りたければ、自分の書いたコードをコードレビュー系の
ML なりスレなりに投下してごらん。偏った意見が聞けて面白いよ。
http://pc5.2ch.net/test/read.cgi/php/1049514428/
00161204/10/08 03:46:07ID:LN3yr29s
スレに投下作戦で行こうと思います。
参考になりました。どうもありがとう。
0017nobodyさん04/10/08 03:58:51ID:???
>>1
スレ建て乙

>>14
>コードを後から読む人にとって
それだったら、コーディング標準に従ったコード >>13のURL参照
独自ルールだとどうしても*自分にとって*美しいコードになってしまうことがあるので

質問の意図からすると、
設計の簡潔さ、適切なサンプルコード/ドキュメント(POD)を重視した方がいいんじゃないかな
場合によってはコードを読まずにすませられることもあるよ。
0018nobodyさん04/10/08 09:25:10ID:D4NtGdWq
文字列の中に関数を直接展開するにはどうすればいいのでしょうか?
シェルスクリプトでいうところの↓みたいなことがしたいんですが
echo "current dir is `pwd`"
以前このスレで教えてもらったのですがやり方を忘れてしまいました
ログもググってみたんですが見つかりませんでした
0019nobodyさん04/10/08 11:14:19ID:???
print "current dir is " .`pwd`;

これが高速だし読みやすいのでお勧めだが…
(printに関して言えば、ピリオドよりコンマの方が良いが)

print "current dir is ${\`pwd`}";
print "current dir is ${\do{ `pwd` }";
print "current dir is @{[ `pwd` ]}";

ま、こんな感じで。
0020nobodyさん04/10/08 14:50:00ID:???
モジュールを使うことがオブジェクト指向ということになるんでしょうか?
0021nobodyさん04/10/08 15:16:43ID:???
>>20
全然違います。
モジュールとオブジェクト指向に直接関連はありません。
0022nobodyさん04/10/08 16:02:04ID:SvnbdnXk
プログラム実行中にperlでエラーメッセージを
別ウィンドウを使って表示することは可能でしょうか。
javascriptを使えばできるようなのですが、
perlのみでは無理なのでしょうか?
スレ違いなら申し訳ないです。

00231204/10/08 16:09:32ID:HUGW4EIR
>17
どうもありがとうございます。

>>コードを後から読む人にとって

>設計の簡潔さ、適切なサンプルコード/ドキュメント(POD)を重視した方がいいんじゃないかな
>場合によってはコードを読まずにすませられることもあるよ。

ところで、PODとは、コメントのことでしょうか?
コメントだとしても、コードを読まずに済ませられるとは考えにくいので
違う気もします。宜しけれご教授ください。
0024nobodyさん04/10/08 16:28:01ID:???
>>22
スレ違いもしくは板違い。
http://pc5.2ch.net/hp/
http://pc5.2ch.net/test/read.cgi/php/1095633323/

>>23
http://perldoc.com/perl5.8.4/pod/perlpod.html
http://perldoc.com/perl5.8.4/pod/perlpodspec.html
http://perldoc.jp/docs/perl/5.6.1/perlpod.pod
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlpod.html
0025nobodyさん04/10/08 16:39:18ID:3yz40YUb
sendmailでメール送るときにccとかってどう書けばいいですか?


open MAIL ,"| /usr/sbin/sendmail -t";
print MAIL "From: ".'"ほげほげ" <info@2ch.net>'."\n";
print MAIL "To: ".''."\n";
print MAIL "Cc: ".'<test@test.jp> <hoge@hoge.net>'."\n";
print MAIL "Bcc: ".''."\n";
print MAIL "Subject: ".""."\n";
print MAIL "\n";
print MAIL "test";
close MAIL;

みたいにしても動作しませんでした。
もちろん普通にtoだけいれたら動作します。
どなたかお願いします。
0026nobodyさん04/10/08 17:35:29ID:???
スパムに使われそうだから、回答しないわ
0027nobodyさん04/10/08 17:47:14ID:???
>>23
> ところで、PODとは、コメントのことでしょうか?
> コメントだとしても、コードを読まずに済ませられるとは考えにくいので

PODは、コメントと言うよりは、ドキュメントと言った方が適切かもしれない。

Perlの標準モジュールの多くは慣習的に、
モジュールの説明、そのモジュールの使い方(実際に動く最小限のコード)
関数/メソッドのリファレンス、... などを含んでいるので
たとえば、◯◯をしたいといったとき、
PODにそのサンプルが載っていれば内部実装のコードを読む必要はない。
(デバッグで必要になる時までは...)
00281204/10/08 18:01:20ID:HUGW4EIR
>24 >27
どうもありがとう。色々コード&POD読んでみます。
精進します。ありがとう。
00292504/10/08 18:25:06ID:3yz40YUb
>>26
spamに使うならID出しませんよ。

どなたか>>25の回答をお願いしますm(__)m
0030nobodyさん04/10/08 18:26:49ID:???
>>26
ソンナコトイッタラナンデモソウジャナイカw

ウイルス作成に使われそうだから、このスレ閉じるか?
0031nobodyさん04/10/08 18:38:42ID:???
>>25
open MAIL ,"| /usr/sbin/sendmail -t";
print MAIL "From: ほげほげ <info@2ch.net>\n";
print MAIL "To: \n";
print MAIL "Cc: <test@test.jp>,<hoge@hoge.net>\n";
print MAIL "Bcc: \n";
print MAIL "Subject: スレ違い\n";
print MAIL "\n";
print MAIL "Ccでアドレス列記はperlには関係することではない";
close MAIL;
0032nobodyさん04/10/08 19:01:26ID:???
IDなんて飾りですよ
003335023500533629004/10/09 17:26:34ID:???
節穴とどっちが個人特定性が高いだろうか
0034nobodyさん04/10/09 18:07:02ID:???
>>33
その節穴ってどうなってんの?

個人特定性は節穴の方が高いでしょ。ID衝突は時々見かける。
0035nobodyさん04/10/09 19:46:27ID:r3ZvWrWV
ログが100行を越した場合最後の1行を残してあとのログが消えるようにしているのですが
ログが10行を越したときに1行だけ残してあとのログが消えるようにするのとどっちが負荷が低いのでしょう_?
つまり、頻繁にログを1行にするのと、100行ものログを読みこむのと、どちらが負荷がかかるんでしょう。
0036nobodyさん04/10/09 19:51:25ID:???
>>35
自 分 で 試 し ま し ょ う 。

use べんちまーく;
0037初心者です。04/10/09 20:26:36ID:fCvsZBf9
フリーの掲示板の設置が上手く出来たのですが、スクリプトの改造で
以下の戻り先URLの設定でターゲットの設定は出来ないのでしょうか?
_topに戻りたいのですが、戻れません。

# 戻り先URL
$home = 'http://xxxxx.com/index.html';

誰か教えて下さいませ。大変困ってます。<(_ _)>
0038nobodyさん04/10/09 20:29:04ID:???
>>37
スレ違いもしくは板違い。
http://pc5.2ch.net/hp/
http://pc5.2ch.net/test/read.cgi/php/1095633323/
0039nobodyさん04/10/09 21:00:25ID:LGUhwPv/
IISでActive Perl入れてやってますが
SMTPを使ってのメール送信で送れてはいますが
OEでの受信で宛先の部分が
undisclosed-recipients になってしまいます。
送信元は正常に表示されているのですが。
どこを修正すればよいでしょうか?
お願いします。

use Net::SMTP;
$smtp = Net::SMTP->new('***.***.ne.jp'); #SMTPサーバ
$smtp->mail(from@test.ne.jp); #送信元
$smtp->to(to@test@ne.jp); #宛先
$smtp->data();
$smtp->datasend("Subject:メール\n"); #件名
$smtp->datasend("メール本文");
$smtp->dataend();
$smtp->quit;
00403904/10/09 21:03:05ID:LGUhwPv/
間違いました
× $smtp->to(to@test@ne.jp); #宛先

○ $smtp->to(to@test.ne.jp); #宛先
00413904/10/09 21:04:23ID:LGUhwPv/
ご存知の方、お願いします。
0042nobodyさん04/10/09 21:13:32ID:???
>>39
$smtp->datasend("To: ・・・\n); はどうした?
宛先がないだろうが
0043nobodyさん04/10/09 21:21:16ID:???
>>39
> $smtp->mail(from@test.ne.jp); #送信元
$smtp->mail('from@example.jp'); # MAIL FROM

> $smtp->to(to@test@ne.jp); #宛先
$smtp->to('to@example.jp'); # RCPT TO

> $smtp->datasend("Subject:メール\n"); #件名
> $smtp->datasend("メール本文");
$smtp->datasend("To: 39 <to\@example.jp>\n"); # To: ヘッダ
$smtp->datasend("Subject: メール\n");
$smtp->datasend("\n");
$smtp->datasend("メール本文");
0044nobodyさん04/10/09 21:24:19ID:???
>>39
君はRFC2822を勉強したまえ。このままでは腐ったメッセージ垂れ流しそうな悪寒。
0045nobodyさん04/10/09 21:46:43ID:LGUhwPv/
>>42
返信ありがとうございます。

$smtp->mail(to@test.ne.jp);  のすぐ下に
$smtp->datasend("To: to@test.ne.jp\n"); を
追加してみたけど駄目でした。
どこがまずいのでしょうか?
0046nobodyさん04/10/09 21:48:33ID:LGUhwPv/
>>43
ありがとうございます。
やってみます。
0047nobodyさん04/10/10 00:20:52ID:mkQG3wAc
ある関数内からスコープ外にある無名ハッシュの値を
操作したいのですがうまくいきません

my $p = { data => 1 };

&abc($p);
print "$p->{data}\n";

sub abc {
my $p = shift;
$p->{data} = 2;
}

↑のようにやってみたのですがなぜかダメでした
再帰処理がしたいので関数内から直接変数の値をいじることはできません
0048nobodyさん04/10/10 00:32:57ID:???
>>47
そのコードは問題なく動くので別の所がおかしいのだろう。
use strict; や -w オプション、デバッガで地道に調べてくれ。
0049nobodyさん04/10/10 00:48:31ID:???
blessしたあとにインスタンス変数に代入してもいいんですか?
0050nobodyさん04/10/10 02:42:47ID:???
オブジェクト指向な考えだと掲示板でいう
書き込みとか削除とかをifで分けていく部分はどういう風にしたらいいんですか?
0051nobodyさん04/10/10 03:08:11ID:???
わけわかめ
0052nobodyさん04/10/10 03:10:22ID:???
if ($mode eq 'write') {
    &write;
} elsif ($mode eq 'delete') {
    &delete;
}

こんな感じのt所です。
0053nobodyさん04/10/10 03:11:28ID:???
>>50
http://module.jp/dist/web+db-press6-perl-oo.pdf
0054nobodyさん04/10/10 03:14:22ID:???
>>53
デザインパターンなんて言葉を知らなかった
さんくすべるーまっち
0055nobodyさん04/10/10 03:18:58ID:vb66WTKp
$AoA[$i] = [@array] という配列のリファレンスを配列に入れる処理が
@{$AoA[$i]} = @array で代用できるという事がよく分かりません。

@{$AoA[$i]} = @array と言うのはどういうことですか?
@($AoA[$i]) = @array との違いを教えてください。
0056(1/2)04/10/10 04:56:32ID:???
>>55
普通の配列変数を書く時の @array って書き方。コレ、本当は @{array} の
{ } を省略したものなんだよ。@{ と } で挟まれたホニャララを配列として扱い
ますよ、って意味で、ホニャララが 裸のワード だったら普通の配列変数と
して扱われるんだ。

@{array} = (0,2,4,8); # array という名前の配列変数

ホニャララはリファレンスでも構わなくて、配列に対してできる操作は
同じようにできちゃう。配列の要素を見る時は ${ ホニャララ }[ 添え字 ]
って構文になるよ。

$a_ref = [1,3,5,7]; # 名無しのリストリファレンス

print @{array};  push @{array}, 10; ${array}[0] = 12;
print @{$a_ref}; push @{$a_ref}, 9; ${$a_ref}[0] = 11;

そして当然、代入も。

@{array} = (0,2,4,8);
@{$a_ref} = (1,3,5,7);

文法的に間違えようのない場所なら、この { } は省略できるんだ。

print @array;
print @$a_ref;
0057(2/2)04/10/10 05:01:32ID:???
続き。

Perl の変数は予め宣言しなくても使えるよね。この振る舞いと同じように、
未定義な「場所」をムリヤリ配列として使おうとすると、本当にそういう事に
しちゃうんだ。その「場所」がスカラー値しか収められない「場所」なら、
それ自体はスカラー値であるリストリファレンスが収まるってわけさ。

@{AoA} = (); # 空っぽの配列

# スカラー値を収められる入れ物に、リストリファレンスを作って入れる
${AoA}[0] = [0,2,4,8];

# ${AoA}[1] は配列だと勝手に決めて、代入しちゃう!
@{${AoA}[1]} = (1,3,5,7);

気をつけなきゃいけないのは、未定義でもリファレンスでもない「場所」を
ムリヤリ配列として使おうとした時。perl はこういう時、下の例なら $foo の
値、つまり hoge って名前の配列変数を勝手に使っちゃうんだ。

$foo = 'hoge'; # ただの文字列
@hoge = (2,4,6,8);
@{$foo} = (0,1,2,3);
print @hoge; # 0123

この危険な機能の名前はシンボリックリファレンス。 use strict 'refs'; と
唱えておく事で禁止できるよ。
0058nobodyさん04/10/10 14:32:49ID:bziwCOA4
メールアドレスの@から右のドメインを取得するには
どのような関数がありますでしょうか?

例えば、test@aaa.ne.jpの aaa.ne.jpだけを取得したいんです。
ご存知の方お願いします。
0059nobodyさん04/10/10 14:58:33ID:???
>>58
index
0060nobodyさん04/10/10 15:21:22ID:bziwCOA4
>>59
indexは検索文字が対象文字列に存在するかのだと思いましたが
どのようにすればよいんでしょうか?
0061nobodyさん04/10/10 16:18:08ID:???
>>60
my $addr_spec = 'test@example.com';

# http://tohoho.wakusei.ne.jp/wwwperl2.htm#index
# http://tohoho.wakusei.ne.jp/wwwperl2.htm#substr
my $domain = substr $addr_spec, index($addr_spec, '@') + 1;

# http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlre.html
($domain) = $addr_spec =~ /([^@]+)\z/;
00625504/10/10 19:15:24ID:vb66WTKp
>56 >57
ありがとうございました。

つまり

$a_ref = [0,2,4,6];

などと記述があった後に

@{$a_ref} = (1,3,5,7); 

と書かれていたら

$a_ref = [1,3,5,7]; と読替えて良いと言うことでしょうか?
00633904/10/10 20:18:00ID:bziwCOA4
>>61
できました。
ありがとうございました。
0064大文字小文字混在をアルファベット順にソートしたい04/10/10 21:23:27ID:0NABqG2B
ID(大文字小文字混在の半角英数)と得点を格納したハッシュ%dataがあります。
これを得点の高い順に並べ、さらに同じ得点同士ではアルファベット順に並べて
IDを取り出したいと思います。そこで以下のようにしました。

%data= ('aaa' => 90, 'bbb' => 80, 'CCC' => 80, 'DDD' => 70,);
@id_array = sort { $data{$b} <=> $data{$a} or $a cmp $b} keys %data;

しかし、これでは同じ得点の人が
大文字のアルファベット順→小文字のアルファベット順になってしまいました。
(上の例ではaaa, CCC, bbb, DDD,の順になる)

アルファベットの順(aaa, bbb, CCC, DDDの順)に並べ替える方法はありますか?
■ このスレッドは過去ログ倉庫に格納されています