Perlについての質問箱 30箱目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/03/14(水) 22:54:12"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 http://pc8.2ch.net/php/ )
CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
http://www.perl.org/get.html
● 2006/12/21現在の最新版: 5.8.8
● 2006/12/21現在の開発版: 5.9.3
前スレ
Perlについての質問箱 29箱目
http://pc11.2ch.net/test/read.cgi/tech/1166708139/
リンク集は>>2-3
過去スレは>>4
0556デフォルトの名無しさん
2007/05/13(日) 16:45:48----
package Foo::Bar::Baz;
sub new{ bless [] }
sub qux{ print "qux!!" }
package main;
eval{
my $klass = "Foo::Bar::Baz";
my $obj = new $klass;
$obj->qux;
};
0557デフォルトの名無しさん
2007/05/13(日) 16:49:530558デフォルトの名無しさん
2007/05/13(日) 19:08:29この一連のコードで具体的にどうやって?w
0559デフォルトの名無しさん
2007/05/13(日) 19:20:020560デフォルトの名無しさん
2007/05/13(日) 19:59:570561デフォルトの名無しさん
2007/05/13(日) 20:49:220562デフォルトの名無しさん
2007/05/14(月) 06:21:050563デフォルトの名無しさん
2007/05/14(月) 13:44:05>>555のも eval { require $class }; のほうが綺麗だと俺は思う。
0564デフォルトの名無しさん
2007/05/14(月) 15:48:00作りたいんだけど、headのfromってメルアドが入ってなかったりしてどこをみたらいいかわかりません。
送信元メルアドを参照するにはどこをみたらいいんでしょうか?
0565デフォルトの名無しさん
2007/05/14(月) 17:44:40rfc2822を読め
0566デフォルトの名無しさん
2007/05/15(火) 00:07:34それを実行したことある?
0567デフォルトの名無しさん
2007/05/15(火) 10:45:02それじゃ何の答えにもなってないだろ馬鹿
>>564
ヘッダに送信元が正しく入っているかは保証されてないから入ってないときは取りようがないよ
0568デフォルトの名無しさん
2007/05/15(火) 11:15:16これからは全ての質問に「仕様書読め」「解説書読め」で解決していくんですか?
0569デフォルトの名無しさん
2007/05/15(火) 11:26:10確かに不親切だけどね・・・
0570デフォルトの名無しさん
2007/05/15(火) 13:35:28なぜそうしたいの?
0571デフォルトの名無しさん
2007/05/15(火) 14:19:500572デフォルトの名無しさん
2007/05/15(火) 14:34:270573デフォルトの名無しさん
2007/05/15(火) 14:38:52メールの仕様に関してはスレ違い。
0574デフォルトの名無しさん
2007/05/15(火) 14:45:290575デフォルトの名無しさん
2007/05/15(火) 15:22:10なんで>>564に>>567が自分で回答すんだよw
まあみんなやさしめに行こうよ。
0576デフォルトの名無しさん
2007/05/15(火) 15:37:37だからRFCなんか読むのもヤダヤダ
0577デフォルトの名無しさん
2007/05/15(火) 15:51:240578デフォルトの名無しさん
2007/05/15(火) 15:55:460579デフォルトの名無しさん
2007/05/15(火) 16:17:560580デフォルトの名無しさん
2007/05/15(火) 16:19:500581デフォルトの名無しさん
2007/05/15(火) 16:52:34他人を装って自分を擁護するのって結構あるからな。
別に珍しくもないから、一応そう書いただけ。
0582デフォルトの名無しさん
2007/05/15(火) 17:18:060583デフォルトの名無しさん
2007/05/15(火) 17:28:100584デフォルトの名無しさん
2007/05/15(火) 21:53:540585デフォルトの名無しさん
2007/05/15(火) 22:52:22やっと起きたか、ひきこもり君
0586デフォルトの名無しさん
2007/05/15(火) 23:36:020587デフォルトの名無しさん
2007/05/16(水) 00:07:36RFCを読んだことが自慢になると思っている時点で(ry
>>586
ざっとでも一通り目を通しておかないと他の部分の実装ですぐに詰まってまたスレ違いの質問してくるでしょ。
スタンドアローンアプリなら好きなように実装汁だけど
そもそもネットワークアプリは相互に協調するものなんだから
「とりあえず動いている」「自分だけよければいい」という存在は迷惑だろ。
0588デフォルトの名無しさん
2007/05/16(水) 00:17:480589デフォルトの名無しさん
2007/05/16(水) 05:26:480590デフォルトの名無しさん
2007/05/16(水) 07:24:45探せば結構見つかるよねw
0591デフォルトの名無しさん
2007/05/16(水) 10:32:13遠回りすぎるし。
必要だとは思うが。
0592デフォルトの名無しさん
2007/05/16(水) 13:12:160593デフォルトの名無しさん
2007/05/16(水) 13:14:50違うだろ。携帯販売店にどっかの会社の電話番号を聞くようなもん。
んなもん、104で聞け、つまりスレ違いだ。
0594デフォルトの名無しさん
2007/05/16(水) 13:24:530595デフォルトの名無しさん
2007/05/16(水) 14:02:540596デフォルトの名無しさん
2007/05/16(水) 14:18:250597デフォルトの名無しさん
2007/05/16(水) 14:58:15別の通りすがりの人が食ってかかっているわけか。
「地図の見方を知ってるのを自慢したいだけ!!」と叫びながら。
0598デフォルトの名無しさん
2007/05/16(水) 15:44:27[初めてのPerl 3版]という本を読みながら勉強しているのですが、
3章の練習問題をしていて疑問に思いました。
@list = qw/ a b c d /;
print @list . "\n"; #こうすると、リストの個数が表示される。
print @list; #こうすると、リストの内容が表示される。
print @list , "\n"; #こうすると、リストの内容が表示される。
上記のように、3つの記述ほうほうで内容が変わってきます。
私が疑問に思ったのは、どうして"."で連結すると、リストの個数が
表示されるのでしょうか? また、","が急に出てきたのですが、どう
いった意味があるのでしょうか?
すみませんが、宜しくお願いします。
0599デフォルトの名無しさん
2007/05/16(水) 15:51:330600デフォルトの名無しさん
2007/05/16(水) 15:59:25スルーすればいいだけなんじゃねーの?
それをわざわざ嫌味ったらしく書き込むから多いから荒れるんだよ。
黙ってろよ。
0601デフォルトの名無しさん
2007/05/16(水) 16:15:12print @list . "\n";
まず、配列(ここでいう@listね)をprintすると配列の中身をすべて出力するのね。
それで↑は、@listと\nをつなげてひとつの文字列としてる。
配列はスカラ参照するとその要素数を返すから、「配列の要素数+改行」というひとつの文字列として出力される。
print @list;
これは上で言ったとおりそのまま配列の中身をぶちまける。
print @list , "\n";
printは出力対象をカンマで区切って複数指定できるのね。
だから、↑の場合は一つ目の例と違って@listと\nは別物として並列に並んでるのね。
print @list;
print "\n";
と同じというわけ。
だから配列の中身+改行となる。
0602デフォルトの名無しさん
2007/05/16(水) 16:18:22逆だろ。「RFCを読め」という回答があっという間に返ってきたのに、
それを気に入らなかった奴が騒いでいる。わざわざ嫌味ったらしくね。
黙っていればいいのにね。
0603598
2007/05/16(水) 16:32:22スカラーとして参照されたから、要素数を返したんですね。
詳しく説明していただけたおかげで、理解できたと思います。
ありがとうございました。
0604デフォルトの名無しさん
2007/05/16(水) 16:36:58部外者だが俺も勉強になった。ありがとう。
0605デフォルトの名無しさん
2007/05/16(水) 17:27:58まあみなさん、不足だと思ったら、攻撃しないで補うということで。
0606デフォルトの名無しさん
2007/05/16(水) 19:05:200607デフォルトの名無しさん
2007/05/16(水) 19:07:150608デフォルトの名無しさん
2007/05/16(水) 19:33:230609デフォルトの名無しさん
2007/05/16(水) 19:43:17ttp://www5d.biglobe.ne.jp/~stssk/rfcjlist.html
え、みんなこれ全部読んだの??
0610デフォルトの名無しさん
2007/05/16(水) 19:48:27これ、豆知識な
0611デフォルトの名無しさん
2007/05/16(水) 19:57:540612デフォルトの名無しさん
2007/05/16(水) 20:17:470613デフォルトの名無しさん
2007/05/16(水) 21:26:11業務で使うときでも読まないのかだぜ?
0614デフォルトの名無しさん
2007/05/16(水) 21:34:58http://www.puni.net/~mimori/rfc/rfc2822.txt
次の人:
上の文章からFromの仕様が書いてある文章を見つけ、行番号等の場所を報告
さらに次の人:
的確に抜粋して、ここに書く
以上で当スレのミッションは終了となる。
0615デフォルトの名無しさん
2007/05/16(水) 21:51:390616デフォルトの名無しさん
2007/05/17(木) 00:28:170617デフォルトの名無しさん
2007/05/17(木) 02:12:420618デフォルトの名無しさん
2007/05/17(木) 04:34:550619デフォルトの名無しさん
2007/05/17(木) 07:08:02RFC 読もうが読ままいが、perl についての質問に該当しなかった訳だし
RTFM ってのは最低限わきまえとく事だし
(ようするに俺も RFC 嫁よって思ってる訳だけど)
0620デフォルトの名無しさん
2007/05/17(木) 10:16:00| i┬┬┬┬┬┬┬┬┬┬┬┬┬i |
| |┼ ,r-l^i ‐┼y'⌒~}ー┼y'⌒~}ー┼| |
| |┼と::_;;;:_}┼じ;_;:;ナ┼ヽ;:;:: :;;:;:;)┼| |
| |┼┼┼┼┼┼┼┼┼┼┼┼┼| |
| |┼f_:::_:;;;り┼{:;;;::_;;う┼( ;;:;:;:"")┼| |
| |┼く:;;;_:;;Jー|ーじ;_;:;ナ┼f_::_::;;;;り┼| |
| |┼┼┼┼┼┼┼┼┼┼┼┼┼| |
|  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ .|
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
とりあえず焼肉でも食って落ち着こうぜ
0621デフォルトの名無しさん
2007/05/17(木) 10:40:54小説を読むわけじゃないんだから、必要なときに必要な箇所を読むんだよ。
0622デフォルトの名無しさん
2007/05/17(木) 19:06:200623デフォルトの名無しさん
2007/05/17(木) 20:59:23大文字で始めるのか、どちらがいいのでしょうか。
perl5.8.8のライブラリを見るとどちらもあるのですが、Perlの流儀だとどのような命名規則がいいのでしょうか。
0624デフォルトの名無しさん
2007/05/17(木) 21:24:06foo みたいに小文字で始まってるのは pragma 扱いだと思う。
0625デフォルトの名無しさん
2007/05/17(木) 21:28:28perldoc perlmodlib より
>Package/Module names are an exception to this rule. Perl informally
>reserves lowercase module names for 'pragma' modules like integer
>and strict. Other modules normally begin with a capital letter and
>use mixed case with no underscores (need to be short and portable).
0626デフォルトの名無しさん
2007/05/17(木) 23:08:09どうもありがとうございます。
0627デフォルトの名無しさん
2007/05/18(金) 01:56:340628デフォルトの名無しさん
2007/05/18(金) 02:52:38よく見かけるのは"strict", "warnings","lib", "overload", "vars", "constant", "blib"あたりかな。
あとは、マルチバイト圏の人が"utf8", "encoding", "open"を使ってたりすることあるな。
P.S
分からないことは恥ではない、分からないことを放置することが恥なのだ
0629デフォルトの名無しさん
2007/05/18(金) 03:08:160630デフォルトの名無しさん
2007/05/18(金) 03:14:05baseはOOで継承するときに使うやつな。
よく使うのに、度忘れしてたw
0631デフォルトの名無しさん
2007/05/18(金) 20:35:21(1 2 3 4 5 6) -> (4 8 12)
みたいな処理を簡潔にperlで表現したいなら、どのように書くんでしょうか?
0632デフォルトの名無しさん
2007/05/18(金) 20:42:420633デフォルトの名無しさん
2007/05/18(金) 21:20:39皆さん、どうされてます?
外部補助ツール等を使用しない方法で、perlのみで行いたいんです。
ググッてもうまくヒットしないので…恐縮ですが教えてください。
0634デフォルトの名無しさん
2007/05/18(金) 21:22:10すいません。WindowsXPでactiveperlの環境です。
0635デフォルトの名無しさん
2007/05/18(金) 21:31:030636デフォルトの名無しさん
2007/05/18(金) 21:39:21OS側の設定だったんですね。助かりました。
0637デフォルトの名無しさん
2007/05/19(土) 16:16:37mapもgrepもおなじものだが、意味的に条件で抽出のときはgrepを使いたくなるな。
式が偽になったものは返値には残らないので
map { $_ % 2 == 0 && $_ * 2 } ( 1,2,3,4,5,6);
でもOK
0638デフォルトの名無しさん
2007/05/19(土) 16:46:07map { $_ % 2 ? () : $_ * 2 } (1,2,3,4,5,6);
としないと。
0639デフォルトの名無しさん
2007/05/19(土) 16:47:210640デフォルトの名無しさん
2007/05/20(日) 00:28:190641デフォルトの名無しさん
2007/05/20(日) 01:38:54配列に 0 が入ってたらどうするんだろ
想定外でどうでもいいのかな?
これだと(当たり前だけど)要素の値が 0 の時には戻り値無し。
0642631
2007/05/20(日) 12:31:03Lispを勉強して、次はPerlにスイッチしたいと思っていて、なるべくLispスタイルで
プログラミングできるようにしたいと思っているんですが、二つ以上のリストを元にして
結果を返すような
(1 2 3 4 5) (6 7 8 9 10) -> ((1 6) (2 7) (3 8) (4 9) (5 10))
といった処理はどうするのでしょうか?mapの使いかたを見ると使えるのは$_だけみたいなのですが。
0643デフォルトの名無しさん
2007/05/20(日) 12:40:10map {
$a = $_;
$b = shift @b;
処理
} @a
0644デフォルトの名無しさん
2007/05/20(日) 12:43:41とりあえずリファレンス使わないと、リストのリストとかはできんと思うが。
0645デフォルトの名無しさん
2007/05/20(日) 14:06:29print @$_ for foo([1 .. 5], [6 .. 10]);
sub foo { map [map shift @$_, @_], (1 .. (sort map scalar @$_, @_)[-1]) }
こんな感じか。
0646デフォルトの名無しさん
2007/05/20(日) 14:09:46間違えた。
0647デフォルトの名無しさん
2007/05/20(日) 15:07:14っ[List::MoreUtils]
0648デフォルトの名無しさん
2007/05/20(日) 15:27:33(空白も含みます。)
$text = 'aあ かf漢字';
例えば、上の$textを分解して、
@array = ('a', 'あ', ' ', 'か', 'f', '漢', '字');
のような配列を作りたいのです。
splitを使って
@array = split(/[\w\s]/, $text);
としたのですが、何も格納されずうまく出来ませんでした。
どのようにすれば出来るでしょうか?
0649デフォルトの名無しさん
2007/05/20(日) 15:35:50$text = 'aあ かf漢字';
@array = split(//, $text);
0650648
2007/05/20(日) 15:47:43何も指定しないと一文字単位で分解されるんですね。splitは。
その後、
while($text){
push(@array, substr($text,0,1,''));
}
といったコードを思いついたのですが、
649さんのコードの方がすっきりしてるのでそちらを使わせていただきます。
ありがとうございました。
0651デフォルトの名無しさん
2007/05/20(日) 16:32:30俺は初心者で、この前俺もそういうコード考えて使ってみてわかったんだが、
substrは1バイト単位で長さ見てるけど日本語は2バイトコード使ってたりしてて、
結局その>>650みたいなコードでひらがなやカタカナや漢字取り出すときにsubstr($text,0,1,'')ってところで2バイト中の1バイトしか取り出せなくて中途半端になるんだよな。
2バイト文字限定なら取り出す長さを2バイトにすれば問題無いし、アルファベットや数字は1バイトで問題無いけど。
>>649のコードなら、俺は大丈夫なのかどうかは知らないけど、なんとなく大丈夫っぽい感じする。
0652デフォルトの名無しさん
2007/05/20(日) 16:39:13substrのOFFSETやLENGTHの単位は文字数だから、>>650でも
use encodingで文字コードを適切に指定すれば何の問題もないよ。
0653デフォルトの名無しさん
2007/05/20(日) 16:59:52参考書見て、substrの説明に「文字数ではなくバイト数で取っていることがわかります。日本語の入った文字では使わないようにしましょう」
ってあったから、substrでは永遠に2バイト文字と1バイト数字アルファベットは同時に処理できないものと思ってました。
use encodingで指定すればsubstrでも2バイト文字部分は長さ1となるんですね。
use encodingでコード指定するのが大切ってことを理解しますた。
0654デフォルトの名無しさん
2007/05/20(日) 17:20:46厚みで値段稼いでるような本なら、そのあたりいい加減でも不思議じゃないな。
0655デフォルトの名無しさん
2007/05/20(日) 17:45:13なるほど、確かに初版第1刷が2003年ってなってる。
初心者質問ですが
my@b=("$a[1]","$a[2]","$a[3]","$a[4]","$a[5]","$a[6]","$a[7]","$a[8]");
↑
こういう書き方をもっと短く書けませんか?
既に@aには$a[0]や$a[9]から先にも変数が入ってる状態で、$a[1]〜$a[8]までを@bに入れたいです。
$a[1〜8]みたいな表現が存在するなら表現方法を教えてほしいです。
0656デフォルトの名無しさん
2007/05/20(日) 17:57:06@a[1..8] で OK。
キーワードはスライス。
ところで、なんで "" で囲ってるの?
■ このスレッドは過去ログ倉庫に格納されています