Perlについての質問箱 ..
511:デフォルトの名無しさん
07/05/11 08:22:51
おお
パターンマッチってリストで評価するとそれが返ってくるんだ
よくできてるなあ
でも、
my ($name, $age, $sex) = $str =~ /name=(.*),age=(.*),sex=(.*)/ || next;
という使い方はさすがに無理だった
512:デフォルトの名無しさん
07/05/11 09:18:49
>>511
ヒントは演算子の優先順位
(my ($name, $age, $sex) = $str =~ /name=(.*),age=(.*),sex=(.*)/) || next;
または
my ($name, $age, $sex) = $str =~ /name=(.*),age=(.*),sex=(.*)/ or next;
513:デフォルトの名無しさん
07/05/11 09:34:40
括弧の方にします
普通にパターンマッチをスカラーで評価した時は、
マッチしたかどうかを返すのに対して、
パターンマッチのリストでの評価の代入の評価は、
リストの要素数だから、動作は同じでも意味は違いますよね
514:デフォルトの名無しさん
07/05/11 09:47:23
从*・ 。.・)<SEXよりかはGENDERまたはGENの方がいいかなと思うの
515:デフォルトの名無しさん
07/05/11 11:34:00
ふつう、sex。
516:デフォルトの名無しさん
07/05/11 11:37:09
>>514
入会申込書とかの該当欄に「週2回」って書いたたちか?
517:デフォルトの名無しさん
07/05/11 11:54:30
なにそのゆとりんぐ回答
518:Aransk
07/05/11 13:09:15
>509
何かこちらが勘違いしていたら、ゴメン。
でも、
my @foo=qw(joe 25 male);
my ($name, $age, $sex) = @foo;
print $name,"\n";
print $age,"\n";
print $sex,"\n";
って普通に出来るけど?
519:デフォルトの名無しさん
07/05/11 13:12:30
じゃなくて、マッチングの結果のリストの表現方法のことです
520:デフォルトの名無しさん
07/05/11 13:19:37
ここまで回答出て勘違いするってどういうことだよw
521:デフォルトの名無しさん
07/05/11 17:13:50
>>511
木の実の問題だが、next / last を絡めると途端に可読性が低くなる
気がする。next を絡める予定なら普通に
next if $str !~ /name=(.*),age=(.*),sex=(.*)/ ;
my ($name, $age, $sex) = ( $1, $2, $3 );
でいいじゃんと遅レス。
522:デフォルトの名無しさん
07/05/11 17:41:10
質問です。
Webで拾った以下の数値切り上げ関数を使用しています。
----------------------------------------
$one = ceil(19.1); # $one = 20
sub ceil {
my $var = shift;
my $a = 0;
$a = 1 if($var > 0 and $var != int($var));
return int($var + $a);
}
----------------------------------------
しかし、このceil関数に、(4.4 * 6000)という数値(26400)を引数として計算すると、26401が帰ってきます。
perl -e 'print sprintf("%.50f", (4.4 * 6000));';
を実行すると、
26400.00000000000363797880709171295166015625000000000000
という結果が返ってきました。
これを回避して、期待したとおりの切り上げ結果を返すにはどうすればいいでしょうか?
523:デフォルトの名無しさん
07/05/11 17:54:28
なにを期待してるんだ?
そのceil関数は整数じゃなければ1足すってだけだろ
524:デフォルトの名無しさん
07/05/11 17:56:06
>>522
丸め誤差でググっとけ。
perl -e 'print sprintf("%.50f", int((4.4 * 6000) * 1e6) / 1e6);'
525:デフォルトの名無しさん
07/05/11 18:02:20
丸めには銀行方式が絡むか絡まないかがあるから気をつけろ
銀行の丸めは1桁が偶数のときに小数点以下があれば繰り上げだったっけ?
詳細忘れた
526:デフォルトの名無しさん
07/05/11 18:05:36
銀行は四捨六入で0.5のときは一の位を見て切上げか切捨てを行う。
今回は全く関係ない。
527:デフォルトの名無しさん
07/05/11 18:27:48
まず「期待したとおりの切り上げ結果」ってのがわからんのだが。
528:デフォルトの名無しさん
07/05/11 18:34:21
>>522
> これを回避して、期待したとおりの切り上げ結果を返すにはどうすればいいでしょうか?
そんなどこの馬の骨ともわからないサブルーチンを使わずに、CPANで
Math-RoundとかMath-Round-Varとか拾ってきて見てみる。
実地の科学技術計算で使われている、充分な仕様のものがあるはず。
529:デフォルトの名無しさん
07/05/11 19:10:59
付け焼刃的だが
$a = 1 if($var > 0 and $var != int($var));
ここの後半の比較式を
int($var) != int($var+0.9999・・・)
にするとか
530:デフォルトの名無しさん
07/05/11 20:54:42
CPANに落ちてるのも作者が有名人なのを除くと
どこの馬の骨かわからないきがしなくもない
531:デフォルトの名無しさん
07/05/11 21:10:46
>>530
有名な馬の骨もいるから気をつけな。
532:デフォルトの名無しさん
07/05/11 21:20:42
麻雀の丸めは四捨六入
533:デフォルトの名無しさん
07/05/11 21:24:12
>>521
現状はまさにそんな感じなんだけど、
($1, $2, $3) っていちいち書くのがなんか気持ち悪くて
どうせ内部で持ってそうなデータなのに
というのが質問の発端
534:デフォルトの名無しさん
07/05/11 21:25:39
そういえばINT関数って、負の数について、
数直線の右に丸めるか左に丸めるかが
言語によって違うよね
535:デフォルトの名無しさん
07/05/11 21:26:44
それで?
536:デフォルトの名無しさん
07/05/11 22:07:13
あるフォルダ内のファイル(個数や名前は分からない)を一つずつ読んでいくにはどうしたいいでしょうか?
537:デフォルトの名無しさん
07/05/11 22:10:48
ディレクトリを読んで、ファイル名を配列に入れて、
ループで回したら?
538:デフォルトの名無しさん
07/05/11 22:13:24
>>536
use File::Slurp;
してread_dir
539:デフォルトの名無しさん
07/05/11 22:13:51
opendir して、リストに対して readdir するか、readdir を while の中でぶん回して下さい
で、処理後は closedir で後始末を。
サブディレクトリも探したいなら再帰でググればヒントは見つかるかと思います
540:デフォルトの名無しさん
07/05/11 22:16:59
実は glob で>>537の1行めまで片づく要件なのかもしれない。
541:デフォルトの名無しさん
07/05/11 22:25:07
リストに入れないで済むならぶん回した方がいい
542:536
07/05/11 23:47:01
皆さんありがとうございました。
readdirをwhileでぶん回す方法でやってみます
543:デフォルトの名無しさん
07/05/12 00:51:52
サブディレクトリまで検索するならFile::Findを使うのが簡単。
Unixのfindを使ったことがあるならfind2perlでPerlのコードを生成できるよ。
File::Find
URLリンク(search.cpan.org)
544:デフォルトの名無しさん
07/05/12 02:54:05
深さのある配列を左から順番に呼んでフラットな配列を作りたいんですが、
よい方法ご存知の方いませんか
@a = ([1,2,3], [4,5,6], [[7,8],[9,0]]);
@b = flatten(@a); # 1,2,3,4,5,6,7,8,9,0
545:デフォルトの名無しさん
07/05/12 02:58:46
nkfと似たような動作するプログラムってPerlについてなかったっけ?
546:デフォルトの名無しさん
07/05/12 03:16:52
>>544
sub flatten(@) { map { ref $_ eq "ARRAY" ? flatten(@$_) : $_ } @_ }
こんなんどうよ。
547:デフォルトの名無しさん
07/05/12 03:25:10
回答しようとして>>546とほぼ同じ定義を書いていたが、
うごかなくて悩んでた。
eqじゃなくて==を使っていたぜorz
548:544
07/05/12 03:50:18
>>546-547
おお、ありがとうございます。
再帰を使うと意外とすっきり書けるもんですね。
頭が硬直化して思いつきませんでした。
ありがたく使わせていただきます。
549:デフォルトの名無しさん
07/05/12 04:16:20
ActivePerlの時は、File::Findは使わずに自前で書いた方がいいよ。
パスのダメ文字が不完全だから、想定外の動作をする。
550:デフォルトの名無しさん
07/05/12 04:17:18
×パスのダメ文字が不完全だから
○パスのダメ文字への対応が不完全だから
551:デフォルトの名無しさん
07/05/13 02:20:04
例えば「__LINE__ ってどういう意味だったかな?」とかと思ったとき
それをperldocで調べようとすると、どういう風にコマンド叩けばいい?
そういう調べものにはperldocは向かない?
552:デフォルトの名無しさん
07/05/13 03:04:18
podのディレクトリに移動してgrep
553:デフォルトの名無しさん
07/05/13 12:02:01
$perldoc perl
して
Reference Manualのカテゴリーからあたりを見つけられるぐらいには慣れておいても損はないかも
554:デフォルトの名無しさん
07/05/13 14:26:50
my $obj = new Foo::Bar::Baz($arg);
というコードで、クラス名を動的に指定するにはどうしたらいいですか。
$klass = 'Foo::Bar::Baz';
my $obj = eval "new $klass(¥$arg)";
$@ and die($@);
のようにevalを使うしかないのでしょうか。なんかもっとスマートな方法があるような気がします。
555:デフォルトの名無しさん
07/05/13 16:22:37 BE:264938764-PLT(13092)
newする時にevalしなくてもおk
むしろパッケージが別ファイルならロード時にevalしる
my $class = "Foo::Bar";
eval "require $class;"
die $@ if $@;
$class->new;
イマドキはUNIVERSAL::requireなんでしょうけど
556:デフォルトの名無しさん
07/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;
};
557:デフォルトの名無しさん
07/05/13 16:49:53
eval EXPR はインジェクションの可能性があるからなるだけ使わんほうがよいね。
558:デフォルトの名無しさん
07/05/13 19:08:29
>>557
この一連のコードで具体的にどうやって?w
559:デフォルトの名無しさん
07/05/13 19:20:02
そりゃサンプルコードなんだから汚染された文字列が紛れ込む分けなかろう
560:デフォルトの名無しさん
07/05/13 19:59:57
やはり妄想で危険を煽っただけか。その妄想を極めればプールに入っただけで受精するとか言い出す外基地になれるよ。
561:デフォルトの名無しさん
07/05/13 20:49:22
もうゴールデンウィークはおわったよ?
562:デフォルトの名無しさん
07/05/14 06:21:05
影さん「evalがあればどんなプログラムでも書けるぜ!」
563:デフォルトの名無しさん
07/05/14 13:44:05
文字列eval使わなくてもいいところで使うのはあんまり美しくないと思うけどな。
>>555のも eval { require $class }; のほうが綺麗だと俺は思う。
564:デフォルトの名無しさん
07/05/14 15:48:00
NET::POP3とMIME::Parserを使ってメールの送信元で振り分けて処理をするプログラムを
作りたいんだけど、headのfromってメルアドが入ってなかったりしてどこをみたらいいかわかりません。
送信元メルアドを参照するにはどこをみたらいいんでしょうか?
565:デフォルトの名無しさん
07/05/14 17:44:40
>>564
rfc2822を読め
566:デフォルトの名無しさん
07/05/15 00:07:34
>>563
それを実行したことある?
567:デフォルトの名無しさん
07/05/15 10:45:02
>>565
それじゃ何の答えにもなってないだろ馬鹿
>>564
ヘッダに送信元が正しく入っているかは保証されてないから入ってないときは取りようがないよ
568:デフォルトの名無しさん
07/05/15 11:15:16
>>565
これからは全ての質問に「仕様書読め」「解説書読め」で解決していくんですか?
569:デフォルトの名無しさん
07/05/15 11:26:10
Perlの質問じゃなくてメールの仕様に関する質問だからしゃあないのでは。
確かに不親切だけどね・・・
570:デフォルトの名無しさん
07/05/15 13:35:28
>>568
なぜそうしたいの?
571:デフォルトの名無しさん
07/05/15 14:19:50
570は小学校の国語をやり直した方がいいと思うの
572:デフォルトの名無しさん
07/05/15 14:34:27
いま算数やってるの
573:デフォルトの名無しさん
07/05/15 14:38:52
>>565 にレスしてる奴って全部 >>564 の自演だろ。
メールの仕様に関してはスレ違い。
574:デフォルトの名無しさん
07/05/15 14:45:29
おお、帰ってきた。>>565が黄泉の国から帰ってきた。
575:デフォルトの名無しさん
07/05/15 15:22:10
>>573
なんで>>564に>>567が自分で回答すんだよw
まあみんなやさしめに行こうよ。
576:デフォルトの名無しさん
07/05/15 15:37:37
英語こわいからヤダヤダ
だからRFCなんか読むのもヤダヤダ
577:デフォルトの名無しさん
07/05/15 15:51:24
もしかして「RFC」という文字列が荒しを板中から集めてる?
578:デフォルトの名無しさん
07/05/15 15:55:46
全然荒れてねえだろwww
579:デフォルトの名無しさん
07/05/15 16:17:56
>>565は、RFCを読んだことがあるのを自慢したいだけ。
580:デフォルトの名無しさん
07/05/15 16:19:50
自慢てwwwゆとり乙www
581:デフォルトの名無しさん
07/05/15 16:52:34
>>575
他人を装って自分を擁護するのって結構あるからな。
別に珍しくもないから、一応そう書いただけ。
582:デフォルトの名無しさん
07/05/15 17:18:06
標準規格の類を挙げると必ず変な流れになるな。
583:デフォルトの名無しさん
07/05/15 17:28:10
めんどくせぇから書きたいように書けよ
584:デフォルトの名無しさん
07/05/15 21:53:54
昼間子供が書き散らしたようだな
585:デフォルトの名無しさん
07/05/15 22:52:22
>>584
やっと起きたか、ひきこもり君
586:デフォルトの名無しさん
07/05/15 23:36:02
どこを読めばわかるよってのも教え方の一つだと思うんだ
587:デフォルトの名無しさん
07/05/16 00:07:36
>>579
RFCを読んだことが自慢になると思っている時点で(ry
>>586
ざっとでも一通り目を通しておかないと他の部分の実装ですぐに詰まってまたスレ違いの質問してくるでしょ。
スタンドアローンアプリなら好きなように実装汁だけど
そもそもネットワークアプリは相互に協調するものなんだから
「とりあえず動いている」「自分だけよければいい」という存在は迷惑だろ。
588:デフォルトの名無しさん
07/05/16 00:17:48
どうせただのメールフィルタなんだからどうだってかまわんだろう
589:デフォルトの名無しさん
07/05/16 05:26:48
まぁ、仕様書は基本としても、それを守ってない場合も多々あるわけでw
590:デフォルトの名無しさん
07/05/16 07:24:45
そうそう、RFC読まなくていい言い訳は
探せば結構見つかるよねw
591:デフォルトの名無しさん
07/05/16 10:32:13
でもまぁ読むのだるいじゃん。
遠回りすぎるし。
必要だとは思うが。
592:デフォルトの名無しさん
07/05/16 13:12:16
104で電話番号聞いたら電話帳読めって返すようなもんだもんな
593:デフォルトの名無しさん
07/05/16 13:14:50
>>592
違うだろ。携帯販売店にどっかの会社の電話番号を聞くようなもん。
んなもん、104で聞け、つまりスレ違いだ。
594:デフォルトの名無しさん
07/05/16 13:24:53
ここを104番に例えられると認識している人間がいるのも怖ろしいな。
595:デフォルトの名無しさん
07/05/16 14:02:54
交番で道を尋ねたら「地図を見れ」ってのがしっくりくる
596:デフォルトの名無しさん
07/05/16 14:18:25
104や交番は仕事だけど、ここはただの掲示板だ
597:デフォルトの名無しさん
07/05/16 14:58:15
道に迷っている人に通りすがりの人が「地図板はあそこにある」と言ったら、
別の通りすがりの人が食ってかかっているわけか。
「地図の見方を知ってるのを自慢したいだけ!!」と叫びながら。
598:デフォルトの名無しさん
07/05/16 15:44:27
質問させて下さい
[初めてのPerl 3版]という本を読みながら勉強しているのですが、
3章の練習問題をしていて疑問に思いました。
@list = qw/ a b c d /;
print @list . "\n"; #こうすると、リストの個数が表示される。
print @list; #こうすると、リストの内容が表示される。
print @list , "\n"; #こうすると、リストの内容が表示される。
上記のように、3つの記述ほうほうで内容が変わってきます。
私が疑問に思ったのは、どうして"."で連結すると、リストの個数が
表示されるのでしょうか? また、","が急に出てきたのですが、どう
いった意味があるのでしょうか?
すみませんが、宜しくお願いします。
599:デフォルトの名無しさん
07/05/16 15:51:33
>>565が暴れてます
600:デフォルトの名無しさん
07/05/16 15:59:25
義務ってわけじゃないだろうけど質問スレなんだから質問に答えたくない奴は
スルーすればいいだけなんじゃねーの?
それをわざわざ嫌味ったらしく書き込むから多いから荒れるんだよ。
黙ってろよ。
601:デフォルトの名無しさん
07/05/16 16:15:12
>>598
print @list . "\n";
まず、配列(ここでいう@listね)をprintすると配列の中身をすべて出力するのね。
それで↑は、@listと\nをつなげてひとつの文字列としてる。
配列はスカラ参照するとその要素数を返すから、「配列の要素数+改行」というひとつの文字列として出力される。
print @list;
これは上で言ったとおりそのまま配列の中身をぶちまける。
print @list , "\n";
printは出力対象をカンマで区切って複数指定できるのね。
だから、↑の場合は一つ目の例と違って@listと\nは別物として並列に並んでるのね。
print @list;
print "\n";
と同じというわけ。
だから配列の中身+改行となる。
602:デフォルトの名無しさん
07/05/16 16:18:22
>>600
逆だろ。「RFCを読め」という回答があっという間に返ってきたのに、
それを気に入らなかった奴が騒いでいる。わざわざ嫌味ったらしくね。
黙っていればいいのにね。
603:598
07/05/16 16:32:22
>>601
スカラーとして参照されたから、要素数を返したんですね。
詳しく説明していただけたおかげで、理解できたと思います。
ありがとうございました。
604:デフォルトの名無しさん
07/05/16 16:36:58
>>601
部外者だが俺も勉強になった。ありがとう。
605:デフォルトの名無しさん
07/05/16 17:27:58
>>567と>>568が発端になっているわけか。
まあみなさん、不足だと思ったら、攻撃しないで補うということで。
606:デフォルトの名無しさん
07/05/16 19:05:20
ボク今夜寝る時、ママにRFC読んでもらうんだ。
607:デフォルトの名無しさん
07/05/16 19:07:15
フーン
608:デフォルトの名無しさん
07/05/16 19:33:23
⊂二二二( ^ω^)二⊃ フーン
609:デフォルトの名無しさん
07/05/16 19:43:17
まぁ優しい俺が貼ってやるよ
URLリンク(www5d.biglobe.ne.jp)
え、みんなこれ全部読んだの??
610:デフォルトの名無しさん
07/05/16 19:48:27
荒らしてるのはいつも質問者
これ、豆知識な
611:デフォルトの名無しさん
07/05/16 19:57:54
そうなの?
612:デフォルトの名無しさん
07/05/16 20:17:47
そういえば質問者のフォロー全然ないな
613:デフォルトの名無しさん
07/05/16 21:26:11
暴れ杉だろう・・・
業務で使うときでも読まないのかだぜ?
614:デフォルトの名無しさん
07/05/16 21:34:58
さらに優しい俺が、>>565が指摘した該当文書を>>609から晒す
URLリンク(www.puni.net)
次の人:
上の文章からFromの仕様が書いてある文章を見つけ、行番号等の場所を報告
さらに次の人:
的確に抜粋して、ここに書く
以上で当スレのミッションは終了となる。
615:デフォルトの名無しさん
07/05/16 21:51:39
そーいや、番号がすぐ出てくるRFCって822(2822)と1149くらいだな、俺。
616:デフォルトの名無しさん
07/05/17 00:28:17
>>565は、rfc2822読むのをやめへんでぇ〜
617:デフォルトの名無しさん
07/05/17 02:12:42
RFC自重
618:デフォルトの名無しさん
07/05/17 04:34:55
CRC556
619:デフォルトの名無しさん
07/05/17 07:08:02
そろそろスレ違いで引っ張るの止めないか?…
RFC 読もうが読ままいが、perl についての質問に該当しなかった訳だし
RTFM ってのは最低限わきまえとく事だし
(ようするに俺も RFC 嫁よって思ってる訳だけど)
620:デフォルトの名無しさん
07/05/17 10:16:00
. ______________
| i┬┬┬┬┬┬┬┬┬┬┬┬┬i |
| |┼ ,r-l^i ‐┼y'⌒~}ー┼y'⌒~}ー┼| |
| |┼と::_;;;:_}┼じ;_;:;ナ┼ヽ;:;:: :;;:;:;)┼| |
| |┼┼┼┼┼┼┼┼┼┼┼┼┼| |
| |┼f_:::_:;;;り┼{:;;;::_;;う┼( ;;:;:;:"")┼| |
| |┼く:;;;_:;;Jー|ーじ;_;:;ナ┼f_::_::;;;;り┼| |
| |┼┼┼┼┼┼┼┼┼┼┼┼┼| |
|  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ .|
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
とりあえず焼肉でも食って落ち着こうぜ
621:デフォルトの名無しさん
07/05/17 10:40:54
>>609
小説を読むわけじゃないんだから、必要なときに必要な箇所を読むんだよ。
622:デフォルトの名無しさん
07/05/17 19:06:20
つうか今回の事でRFCが頭に入ったww
623:デフォルトの名無しさん
07/05/17 20:59:23
パッケージの名前は「foo」のような小文字にするのか、それとも「Foo」のように
大文字で始めるのか、どちらがいいのでしょうか。
perl5.8.8のライブラリを見るとどちらもあるのですが、Perlの流儀だとどのような命名規則がいいのでしょうか。
624:デフォルトの名無しさん
07/05/17 21:24:06
>623
foo みたいに小文字で始まってるのは pragma 扱いだと思う。
625:デフォルトの名無しさん
07/05/17 21:28:28
根拠見っけてきた。
perldoc 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).
626:デフォルトの名無しさん
07/05/17 23:08:09
pragmaが何かわかりませんが、とりあえず自作のパッケージは大文字で始めるのがいいということでしょうか。
どうもありがとうございます。
627:デフォルトの名無しさん
07/05/18 01:56:34
use strictとかは使ったことあるかお?そーいうことだお
628:デフォルトの名無しさん
07/05/18 02:52:38
pragmaっつーのは端的に言えばインタープリタの動作を変えるもんだ。
よく見かけるのは"strict", "warnings","lib", "overload", "vars", "constant", "blib"あたりかな。
あとは、マルチバイト圏の人が"utf8", "encoding", "open"を使ってたりすることあるな。
P.S
分からないことは恥ではない、分からないことを放置することが恥なのだ
629:デフォルトの名無しさん
07/05/18 03:08:16
baseも仲間に入れてあげてください;;
630:デフォルトの名無しさん
07/05/18 03:14:05
あ、めんごw
baseはOOで継承するときに使うやつな。
よく使うのに、度忘れしてたw
631:デフォルトの名無しさん
07/05/18 20:35:21
有限の整数の集合の中から偶数だけを取りだしてその数を2倍するといった
(1 2 3 4 5 6) -> (4 8 12)
みたいな処理を簡潔にperlで表現したいなら、どのように書くんでしょうか?
632:デフォルトの名無しさん
07/05/18 20:42:42
map { $_ * 2 } grep { $_ % 2 == 0 } (1,2,3,4,5,6)
633:デフォルトの名無しさん
07/05/18 21:20:39
自作のperl script にドラッグ&ドロップして使いたいんですが、
皆さん、どうされてます?
外部補助ツール等を使用しない方法で、perlのみで行いたいんです。
ググッてもうまくヒットしないので…恐縮ですが教えてください。
634:デフォルトの名無しさん
07/05/18 21:22:10
>>633
すいません。WindowsXPでactiveperlの環境です。
635:デフォルトの名無しさん
07/05/18 21:31:03
DropHandlerや{60254CA5-953B-11CF-8C96-00AA00B8708C}でググるといいと思うよ。
636:デフォルトの名無しさん
07/05/18 21:39:21
>>635
OS側の設定だったんですね。助かりました。
637:デフォルトの名無しさん
07/05/19 16:16:37
>>632
mapもgrepもおなじものだが、意味的に条件で抽出のときはgrepを使いたくなるな。
式が偽になったものは返値には残らないので
map { $_ % 2 == 0 && $_ * 2 } ( 1,2,3,4,5,6);
でもOK
638:デフォルトの名無しさん
07/05/19 16:46:07
いや、それだと空文字がたくさん残るだろ。
map { $_ % 2 ? () : $_ * 2 } (1,2,3,4,5,6);
としないと。
639:デフォルトの名無しさん
07/05/19 16:47:21
>638 =~ s/空文字/空文字列/;
640:デフォルトの名無しさん
07/05/20 00:28:19
mapとgrepが同じとな?あなおそろしあ
641:デフォルトの名無しさん
07/05/20 01:38:54
map !($_&1)&&$_<<1||()=> ( 1,2,3,4,5,6)
配列に 0 が入ってたらどうするんだろ
想定外でどうでもいいのかな?
これだと(当たり前だけど)要素の値が 0 の時には戻り値無し。
642:631
07/05/20 12:31:03
ありがとうございます。
Lispを勉強して、次はPerlにスイッチしたいと思っていて、なるべくLispスタイルで
プログラミングできるようにしたいと思っているんですが、二つ以上のリストを元にして
結果を返すような
(1 2 3 4 5) (6 7 8 9 10) -> ((1 6) (2 7) (3 8) (4 9) (5 10))
といった処理はどうするのでしょうか?mapの使いかたを見ると使えるのは$_だけみたいなのですが。
643:デフォルトの名無しさん
07/05/20 12:40:10
普通にmapでできるだろ
map {
$a = $_;
$b = shift @b;
処理
} @a
644:デフォルトの名無しさん
07/05/20 12:43:41
どうすれば納得するのか知らんが、
とりあえずリファレンス使わないと、リストのリストとかはできんと思うが。
645:デフォルトの名無しさん
07/05/20 14:06:29
$,=q/,/;$\=qq/\n/;
print @$_ for foo([1 .. 5], [6 .. 10]);
sub foo { map [map shift @$_, @_], (1 .. (sort map scalar @$_, @_)[-1]) }
こんな感じか。
646:デフォルトの名無しさん
07/05/20 14:09:46
sub foo { map [map shift @$_, @_], (1 .. (sort {$b <=> $a} map scalar @$_, @_)[0]) }
間違えた。
647:デフォルトの名無しさん
07/05/20 15:07:14
>>642
っ[List::MoreUtils]
648:デフォルトの名無しさん
07/05/20 15:27:33
ある文字列を一文字単位で全部分解して、配列に格納させたいのですがうまくいきません。
(空白も含みます。)
$text = 'aあ かf漢字';
例えば、上の$textを分解して、
@array = ('a', 'あ', ' ', 'か', 'f', '漢', '字');
のような配列を作りたいのです。
splitを使って
@array = split(/[\w\s]/, $text);
としたのですが、何も格納されずうまく出来ませんでした。
どのようにすれば出来るでしょうか?
649:デフォルトの名無しさん
07/05/20 15:35:50
use encoding cp932; # ソースの文字コードにあわせる
$text = 'aあ かf漢字';
@array = split(//, $text);
650:648
07/05/20 15:47:43
>>649
何も指定しないと一文字単位で分解されるんですね。splitは。
その後、
while($text){
push(@array, substr($text,0,1,''));
}
といったコードを思いついたのですが、
649さんのコードの方がすっきりしてるのでそちらを使わせていただきます。
ありがとうございました。
651:デフォルトの名無しさん
07/05/20 16:32:30
>>650
俺は初心者で、この前俺もそういうコード考えて使ってみてわかったんだが、
substrは1バイト単位で長さ見てるけど日本語は2バイトコード使ってたりしてて、
結局その>>650みたいなコードでひらがなやカタカナや漢字取り出すときにsubstr($text,0,1,'')ってところで2バイト中の1バイトしか取り出せなくて中途半端になるんだよな。
2バイト文字限定なら取り出す長さを2バイトにすれば問題無いし、アルファベットや数字は1バイトで問題無いけど。
>>649のコードなら、俺は大丈夫なのかどうかは知らないけど、なんとなく大丈夫っぽい感じする。
652:デフォルトの名無しさん
07/05/20 16:39:13
>>651
substrのOFFSETやLENGTHの単位は文字数だから、>>650でも
use encodingで文字コードを適切に指定すれば何の問題もないよ。
653:デフォルトの名無しさん
07/05/20 16:59:52
>>652トンクス
参考書見て、substrの説明に「文字数ではなくバイト数で取っていることがわかります。日本語の入った文字では使わないようにしましょう」
ってあったから、substrでは永遠に2バイト文字と1バイト数字アルファベットは同時に処理できないものと思ってました。
use encodingで指定すればsubstrでも2バイト文字部分は長さ1となるんですね。
use encodingでコード指定するのが大切ってことを理解しますた。
654:デフォルトの名無しさん
07/05/20 17:20:46
その機能入ったのはつい最近(といっても5年前だが)だから、古い本だったら書いてないだろうし、
厚みで値段稼いでるような本なら、そのあたりいい加減でも不思議じゃないな。
655:デフォルトの名無しさん
07/05/20 17:45:13
>>654
なるほど、確かに初版第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]みたいな表現が存在するなら表現方法を教えてほしいです。
656:デフォルトの名無しさん
07/05/20 17:57:06
>655
@a[1..8] で OK。
キーワードはスライス。
ところで、なんで "" で囲ってるの?
657:デフォルトの名無しさん
07/05/20 17:58:21
文字列化する必要があるんじゃね?
my @b = map "$_", @a[1..8];
658:デフォルトの名無しさん
07/05/20 18:14:52
>>656>>657
激しくトンクス!
そういえばfor(0..7)とか使ってました。
@a[1..8]という書き方があったとは。
659:デフォルトの名無しさん
07/05/20 18:23:29
$a @a
^これや^これの名前ってなんだっけ?
660:デフォルトの名無しさん
07/05/20 18:39:44
普通にドルとアットでいいんじゃない?
なんか$でプレフィクスとか見つけたけど。
@は配列ArrayのAを表し
$は・・・なんだっけ?Sからはじまるなんかの単語じゃなかったっけ?
%は/の左の丸がキーで、/の右の丸が値を示すんだっけ?
なんかそんな感じ。
どうせ声出して読まないし気にするまでも無いような・・・
661:デフォルトの名無しさん
07/05/20 18:45:22
ファニー文字?
662:デフォルトの名無しさん
07/05/20 18:57:19
ああ、思い出した。$はスカラーのS。
663:デフォルトの名無しさん
07/05/20 18:59:10
>>659,660,661
sigil だと思う。
sigilsと複数形にすることも多いが
664:デフォルトの名無しさん
07/05/20 19:10:35
ネットショップなんかで自動監視・購入できるスクリプトが組めるらしいのですが
どういったものなんでしょう。
役に立ちそうなサイトがあったら教えてください。
665:デフォルトの名無しさん
07/05/20 19:44:38
>>663
あーそれそれ。さんくす
666:デフォルトの名無しさん
07/05/20 20:34:14
なんかPerlスゲー人が書く魔法みたいなコードなんか紹介してください
友達が言ってたんですが他の言語だと20行くらいかかりそうな処理も1行で記述できるくらい魔法ちっくなことができるって聞いたんですが本当ですか?
667:デフォルトの名無しさん
07/05/20 20:51:05
本当です
すべてが魔法なので紹介しきれません
668:デフォルトの名無しさん
07/05/20 21:07:49
少なくともCOBOLで20行文の命令を1行にまとめることはできるよ。
669:デフォルトの名無しさん
07/05/20 21:14:04
確かにPerlを使えばどんな複雑な処理でも一行でかけるなw
670:デフォルトの名無しさん
07/05/20 21:31:15
何行で書けるとかPerlたん変態っぷりはそんなことじゃないだろ
671:デフォルトの名無しさん
07/05/20 21:36:44
python見習え
672:デフォルトの名無しさん
07/05/20 21:46:12
>>667-668
もっとやさしく!!
>>669
a + b; b + c; c + d; ... はい1行wwwwwとかは禁止なんです
>>670
もっとやらしく!!
673:デフォルトの名無しさん
07/05/20 22:03:30
>>666
では、とっておきの電卓プログラムを紹介しようか。
C++で書くと、何十ステップも必要だろう。
while(<>){print eval($_)}
674:デフォルトの名無しさん
07/05/20 22:23:07
>>673
カレントディレクトリ以下のファイルがすべて消えました!><
675:デフォルトの名無しさん
07/05/20 22:43:53
>>672
きもい
676:デフォルトの名無しさん
07/05/20 22:50:56
それも計算によって実現してるからな
677:デフォルトの名無しさん
07/05/20 22:55:32
>>674がマジなのか気になる。
>>673をしたらキーボードからどんな文も実行できてしまうよな?
>>674を書いて実行してキーボード触らずにマウスで閉じたら何も起きないよな?
恐怖体験アンビリーバブー
678:デフォルトの名無しさん
07/05/20 22:56:20
ちょっと安価ミスしたが気にしないでくれorz
679:デフォルトの名無しさん
07/05/20 23:18:11
1行で書けるかれしれんが、書く人の労力は20行だよ。
680:デフォルトの名無しさん
07/05/20 23:30:26
でも短く書く技術は知っておきたいかも。
サブルーチンは、多少汚くても短くまとめたいし。
なんか良いサイト無い?
681:デフォルトの名無しさん
07/05/20 23:31:39
結局、正規表現アクロバットきぼんってこと何でしょw
682:クロニクル ◆ob60wHXQlc
07/05/20 23:32:46
VISTAでACTIVE PERLをインストールしたいんですが、
Build 820 setup
の
CustomsetUP のところでInnstlationErroが出るんです。
初心者なのでわからないことがたくさんあります。
以前XPで何度かインストールしたのですが、VISTAになったとたんできなくて
苦労しております。どうかご教授お願いいたします。
683:デフォルトの名無しさん
07/05/20 23:34:48
>>680
一子相伝も特殊技術だから。
684:デフォルトの名無しさん
07/05/20 23:45:25
正規表現使ってアクロバットするのと、正規表現使わずに少し長いの書くのって、
正規表現使ったほうが早いとかある?
685:デフォルトの名無しさん
07/05/20 23:48:10
そんなの場合によるとしか言いようがないだろ。
686:デフォルトの名無しさん
07/05/20 23:51:35
>>680
このスレの前の方だけでもいくつかあると思うよ。
過去ログ辿ればもっとあるし。
687:デフォルトの名無しさん
07/05/21 00:12:00
結城浩の『Perlクイズ』の過去ログ漁ってみるとか
(結城さんではなく回答者が時々アクロバティック)
688:デフォルトの名無しさん
07/05/21 15:57:04
>>667のコメントだけで、後はスルーすれば良かったのにな
689:8
07/05/21 16:50:18
CGIを自由に使えるようになりたくて独学で勉強しようとしたのですがCGIはPERL
記述?だからと思いPERLの詳しくなればわかると思いこの板にきました。
PERLに強くなるにはなにを学べばいいですか?ラクダ本というのがいいとどっかで
見たのですが間違いないですか?
そもそもCGIを自由に使えるようになるのはPERLを詳しくなっても意味ないですか?
CGIを自由に扱えるようになりたいので勉強の仕方わかる方お願いします。
690:デフォルトの名無しさん
07/05/21 16:54:26
日本語がお上手ですね!
691:デフォルトの名無しさん
07/05/21 16:57:15
>>1嫁
> CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
> CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
> (WEBプログラミング板 URLリンク(pc8.2ch.net) )
692:デフォルトの名無しさん
07/05/21 18:50:54
>>691
向こうでも相手にされていない件についてw
693:デフォルトの名無しさん
07/05/21 19:01:22
>689
かわいそうだからマヂレスしてあげるよ
勉強しなほうが身のため
694:8
07/05/21 19:01:30
気長に待ちますよ^^
695:デフォルトの名無しさん
07/05/21 19:01:48
相手にできる最低レベルってのはあるからな
696:8
07/05/21 19:02:41
勉強しなほうが身のため
なぜ!?
697:デフォルトの名無しさん
07/05/21 19:03:45
日本語でおk
698:8
07/05/21 19:07:37
相手にできる最低レベルってのはあるからな
悲しいこと言うなぁ・・
699:デフォルトの名無しさん
07/05/21 19:08:32
しゃぶれよ
700:デフォルトの名無しさん
07/05/21 19:11:06
とりあえず句読点を勉強しる!
701:デフォルトの名無しさん
07/05/21 19:37:26
こういう低レベルな質問はwebprogでやれよ
702:デフォルトの名無しさん
07/05/21 19:39:59
お前が >>8 氏でないことだけは確かだ。名前欄の詐称を止めろ
CGI を覚えるより何より、ここの使い方をまず真鍋
703:デフォルトの名無しさん
07/05/21 19:50:23
そして>699
704:デフォルトの名無しさん
07/05/21 21:19:43
>>689
マジレスするのもどうかと思うが、
CGIを勉強したいならラクダ本よりネズミ本がオヌヌメ。
Perlをきちんと習得したいなら、ラクダ本よりリャマ本をまず嫁。
リャマ→ラクダ→ネズミの順で読むといい。
後はWebProg板逝け。
705:デフォルトの名無しさん
07/05/21 21:23:45
逝く前にしゃぶれよ
706:8
07/05/21 21:24:52
ここは恐いインターネッツですね
707:デフォルトの名無しさん
07/05/21 21:38:57
リャマの次にラクダ読んだら死ぬって
タダで読めるPerl本
URLリンク(www.perl.org)
ネズミ(初版)
URLリンク(www.oreilly.com)
ただリャマだけは小遣い溜めてでも買うべきだと思うんです
708:デフォルトの名無しさん
07/05/21 23:06:21
個人的にはリャマの次にCookbookでもいいと思う。
ラクダも読み物として面白いけど、Cookbookのほうが実践的なテクニックを身に付けられるんでないかな。
709:デフォルトの名無しさん
07/05/21 23:57:50
CookbookもいいけどPBPも読んだほうがいいと思う
なんつーか、その、K○NTクローンが増えても困るっつーか
710:デフォルトの名無しさん
07/05/22 00:20:38
中途半端な伏字を使うやつは大抵頭が悪い
711:デフォルトの名無しさん
07/05/22 00:38:13
やっぱ王道は
○ャ○から入って、○○○と○○○○○○○○を併用さ。
ラクダ?○○○○○○c で十分
…中途半端じゃない伏せ字も頭悪い。
712:デフォルトの名無しさん
07/05/22 00:52:26
Perl Hacksでハァハァする
713:デフォルトの名無しさん
07/05/22 00:56:24
>>711
> ○ャ○から入って、○○○と○○○○○○○○を併用さ。
ジャバ、コボル、N88BASIC?
> ラクダ?○○○○○○c で十分
わがんね。
本題のほうは「なんでバレバレの伏せ字を使う人がいるのか」が昔から不思議。
714:デフォルトの名無しさん
07/05/22 01:04:42
perldoc
715:デフォルトの名無しさん
07/05/22 01:08:17
>>713
あえて理由付けするなら、検索に引っかからないため。
まぁ、やってる方の心理としては○○だと思うがw
716:713
07/05/22 01:20:11
>>714
ボケが思いつかなくて「わがんね」でした。手間をかけさせてごめんなさい。
>>715
うーん、検索ですか。なるほど。
でも、△△△にする○○の大半は××なだけなんでしょうね。
717:デフォルトの名無しさん
07/05/22 01:51:29
○○○○、○○○○○○○○。
718:デフォルトの名無しさん
07/05/22 02:37:09
はじめまして。最近Perlを使い始めた初心者です。
useを使用し、下位ディレクトリにあるモジュールを読み込むには
use ディレクトリ名::モジュール名;
なのはどの初級者本にも書いてあるのですが、
上位ディレクトリにあるモジュールの読み込み方が分かりません。
パスはどう書けばよろしいのでしょうか?
719:デフォルトの名無しさん
07/05/22 03:48:18
use lib
720:デフォルトの名無しさん
07/05/22 07:22:32
>>710
十代後半の女オタクの馴れ合いみたいで気持ち悪いよね。
721:デフォルトの名無しさん
07/05/22 08:20:44
○まん○
722:デフォルトの名無しさん
07/05/22 13:39:11
○ま○こ
723:デフォルトの名無しさん
07/05/22 15:24:14
○まんこ
724:デフォルトの名無しさん
07/05/22 15:43:31
8まんこ
725:デフォルトの名無しさん
07/05/22 15:58:39
レベルの低い会話はwebprogでやれ
726:デフォルトの名無しさん
07/05/22 16:30:10
>>719
ありがとうございました。できました。
727:デフォルトの名無しさん
07/05/22 18:07:33
>>725
爆笑
728:デフォルトの名無しさん
07/05/22 18:08:03
cgiでPOSTされたデータを標準入力から一度取得した後
同じプログラム内で再度、標準入力から取得することは可能ですか?
既存のプログラムに、入力チェックを追加したいのですが、2回目はデータが空になります(当たり前?
一応、seekしてみたのですが、うまく戻りそうにありません
バカな質問している気がしていますが、「そんなことできるワケねぇだろ、バカ」でも良いのでアドバイス下さい
729:デフォルトの名無しさん
07/05/22 18:11:19
ワークの変数にとっといたらいいんじゃないの?
730:デフォルトの名無しさん
07/05/22 18:23:30
>>728
>>1嫁
731:デフォルトの名無しさん
07/05/22 18:25:33
標準入力がSEEKで戻れたらすごいな
過去に戻れるなんて素敵だぜ
732:デフォルトの名無しさん
07/05/22 18:26:16
なるほど、WEBプログラミング板で聞くのが良かった内容でしたか
すみませんでした
そちらで質問してみます
733:デフォルトの名無しさん
07/05/22 18:41:44
>>731
このコメントだけで十分な説明になってるな
734:デフォルトの名無しさん
07/05/22 19:03:04
CPAN探せばありそうだが普通に変数に入れといたほうが楽だろうな
735:デフォルトの名無しさん
07/05/22 20:34:55
リャマ本なんであんなに高いの?
736:デフォルトの名無しさん
07/05/22 20:36:07
古本買え
737:デフォルトの名無しさん
07/05/22 20:45:58
2版の厚さがちょうどよかったよね(´・ω・)
738:デフォルトの名無しさん
07/05/22 21:49:02
-P オプション で使えるCのプリプロセッサですが
起動が多少遅くなるので
別な方法がないか教えてもらえませんか
使用用途としては
下記のようなものです
単にifで分けると モジュール部もすべて読み込むようなので
両方ともないとエラーになりました
evalで囲めばそれっぽくうごきますが
しっくりきません。
#ifdef HOGEHOGE
use HOGEHOGE;
〜〜〜
#else
use HOGEHOGE2;
〜〜〜
#endif
739:デフォルトの名無しさん
07/05/22 22:51:27
>>738
UNIVERSAL::require 使えば解決するようなコトじゃないかな?
740:デフォルトの名無しさん
07/05/22 22:52:13
質問では、条件で分けたいのはuseだけじゃないっぽいけど:
use $ENV{'HOGEHOGE'};
とかして環境変数HOGEHOGEから渡せないかなと思ったがダメだった。
741:738
07/05/22 22:58:53
>>739-740
趣旨的には 740のとおり useだけじゃなくて
汎用的に使える方法がないかと(まぁ -Pで出来るんですがあんまり標準的じゃないような気がして)
目的としては、環境がある程度違っても
ソースを複数管理するのは面倒なので同一ソースで動かしたいです
下記のようなのも出来ると非常に助かります
#ifdef hogehoge
while(1) {
#endif
〜〜〜〜〜
#ifdef hogehoge
}
#endif
742:デフォルトの名無しさん
07/05/22 23:39:45
evelじゃちょっと違うよな
743:デフォルトの名無しさん
07/05/22 23:41:58
BEGIN { eval }
かと思ったけどなんか違うよね
744:デフォルトの名無しさん
07/05/23 00:20:43
よく判らんのだが、
-P 使うからには、pure perl じゃなく C 関係?
それとも pure perl でホスト毎に挙動を変更したいの?
前者だったら、 Inline::C と後述を噛み合わせて…
後者だったら、ベタだけど Sys::Hostname で hostname ゲットして
BEGIN{if ( $hostname ...){}else{} } あたり?
後者なら、もっとべたべたにソース全般で挙動を分けられるし、
実際やってるけど、前者だったらやろうと云う気にもならぬ。
って素人の口出しすまぬ。
745:デフォルトの名無しさん
07/05/23 00:29:53
OOで書いて環境依存部分はサブクラスに分けるが良いよ
746:デフォルトの名無しさん
07/05/23 00:52:02
俺は環境依存部分は、モジュール化して突っ込んであるなあ
ソコでSys::Hostnameは使っているけど、もっと良い手があれば知りたいものだ
747:デフォルトの名無しさん
07/05/23 01:16:42
俺はwindowsローカル時はbatファイルで適当に環境変数設定して
その環境変数によってunix系の時と動作変えてる。
748:738
07/05/23 08:38:37
>>744
当面の目標としては
PurePerlでmod_perl2(ModPerl::RegistryPrefork)とFastCGIで
同一ソースを使えるようにしたいと思ってます
FastCGI対応にするためには
読み込みモジュールの差し替え(CGI->CGI::Fast)とループ処理が増えるので
738,741のようなことができないかなと思った次第です、
良い方法がないかなと
749:デフォルトの名無しさん
07/05/23 09:35:25
そんな用途かよ
Catalystあたりを参考にしれ
750:デフォルトの名無しさん
07/05/23 09:49:31
なるほどFastCGIか。
Rubyだとわりと簡単にFastCGI対応できるみたい。
Perlでも同じようにできないかな?
既存のCGIを変更無しでFastCGIに
URLリンク(sugi.nemui.org)
751:デフォルトの名無しさん
07/05/23 09:55:29
てか、CatalystとかCGI::Applicationとかのフレームワーク使えばいいじゃん。
Catalyst::Engine::FastCGI
URLリンク(search.cpan.org)
CGI::Application::FastCGI
URLリンク(search.cpan.org)
752:デフォルトの名無しさん
07/05/23 12:07:10
>>738がなんでわざわざWebProg板からこっちに着たのかわからない
753:デフォルトの名無しさん
07/05/23 14:12:31
すみませんが 質問させてください
あるファイル(数万行の数字データ)の上から1行ずつ順番に読み込んで
最終行になるとまた1行目に戻って・・・という作業をしたいのです
途中でプログラムを閉じて再開したときも次の行から開始が可能であれば
もう言うことナシですが,残念ながら自分では何とも出来ず
丸2日間ネット上で調べに調べ
srand();
open(FILE, "data.txt");
rand($.) < 1 and $line = $_ while <FILE>;
close(FILE);
$line =~ s/\n//g;
とランダムで1行読み込む仕様で妥協するのが限界でした
もし上記作業がperlで可能でしたら申し訳ないですが
教えていただけないでしょうか
可能な方いらっしゃいましたら どうかお願いします。
754:デフォルトの名無しさん
07/05/23 14:13:46
いつ終わるんだそれは
755:753
07/05/23 14:27:55
すみません
イカのような感じで半永久的に作業が続くわけでして・・・^^;
print <<"_HTML_";
Content-type: text/html
<html><head>
<meta http-equiv="refresh" content="5; url=aaa.cgi">
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5368日前に更新/220 KB
担当:undef