- 1 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:54:12 ]
- "The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。 CGIについての質問は板違いです。WEBプログラミング板でどうぞ。 CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。 (WEBプログラミング板 pc8.2ch.net/php/ ) CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。 このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。 スレ違いの質問にはスルーか、速やかな誘導をお願いします。 www.perl.org/get.html ● 2006/12/21現在の最新版: 5.8.8 ● 2006/12/21現在の開発版: 5.9.3 前スレ Perlについての質問箱 29箱目 pc11.2ch.net/test/read.cgi/tech/1166708139/ リンク集は>>2-3 過去スレは>>4
- 433 名前:デフォルトの名無しさん mailto:sage [2007/05/05(土) 19:33:33 ]
- >>432
つEncode::EUCJPMSのcp51932
- 434 名前:デフォルトの名無しさん mailto:sage [2007/05/05(土) 20:32:56 ]
- それは拡張文字なので、 sjis じゃなく cp932 を指定。
- 435 名前:デフォルトの名無しさん mailto:sage [2007/05/05(土) 20:40:22 ]
- 単純に分割するなら、全部同じ名前空間に展開すればいいんじゃない
Giko/Mona.pm [------- package Giko::Mona; package Giko; -------]
- 436 名前:431 mailto:sage [2007/05/06(日) 01:14:39 ]
- 遅レスで申し訳ないです。
>>435 なるほど。 まとめると巨大ファイルになりがちで不安だったのですが、 今のところはまだなんとか1ファイルにまとめられそうなので、 同じファイルスコープで仲良く共存してみます。 ありがとうございました。
- 437 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 17:12:14 ]
- 例
( split /\//, $x )[0 .. bar]; リストの末尾要素を除いたリストを返す方法、知りませんか? barをどう記述すりゃいいのやら。 Perl ならできそうな気がするんですが。思い当たりません。 検索してみたものの、それらしいものも見つけられません。
- 438 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 17:31:22 ]
- ( @hoge, undef ) = split //, $foo ;
じゃダメなの?
- 439 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 17:43:01 ]
- >>437
尻尾だけ消すのじゃだめなの?
- 440 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 17:44:40 ]
- 最後から2番目の要素をひとつ抜き出すだけなら (〜)[-1]
でいいんだけど、範囲演算子で(〜)[0..-1]とは書けないんだよな。 配列変数なら@x[0..$#x-1]という書き方もあるが、リストでは$#xに 相当するものが書けない。 とりあえずおもいついたのはこれ。 sub{@_[0..$#_-1]}->(〜)
- 441 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 18:03:14 ]
- >>437
@list = split(/\/(?=.+\/)|\/.+$/, $x) とかやってないで、全部入れてから$#list--すればいいんじゃね?
- 442 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 18:31:19 ]
- >>429
首チョンパの略と思ってた
- 443 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 18:38:52 ]
- まずchopありき。
やがてより安全なchomp生まれり。
- 444 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 18:52:28 ]
- え…普通にpop関数じゃだめなの
- 445 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 19:51:31 ]
- popの第1引数は左辺値つーかARRAYじゃないと×じゃ?
- 446 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 20:19:01 ]
- splice @{[split /\//, $x]}, 0, -1 というのはどうだ
- 447 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 20:35:56 ]
- ちょんぱ
- 448 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 21:07:48 ]
- # 悪い例
(split /\//, $x)[0..(split /\//, $x)-2]
- 449 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 21:21:14 ]
- >>448
scalar contextのsplitは@_を上書きしちゃうからねぇ。
- 450 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 22:19:22 ]
- (split m{/})[0..(s{/}{/}g)-1]
- 451 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 00:17:23 ]
- みんなよく頑張ったな。先生感心したぞ。
my $str = 'foo/bar/baz/quux'; sub p { printf ">>%d:[%s]\n", shift, join ',', @_ } p(438, (my @arr, undef) = split m{/}, $str); p(439, do { @arr = split m{/}, $str; pop @arr; join ',', @arr }); # & >>444-445 p(440, sub { @_[ 0 .. $#_ - 1 ] }->(split m{/}, $str)); p(441, split m{/(?=.+/)|/.+$}, $str); p(446, splice @{[ split m{/}, $str ]}, 0, -1); p(448, (split m{/}, $str)[ 0 .. (split m{/}, $str) - 2 ]); p(450, (split m{/}, $str)[ 0 .. $str =~ tr|/|/| - 1 ]); p(451, $str =~ m{(.+?)/}g);
- 452 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 00:52:33 ]
- >>451
my $str = 'foo/bar/baz/quux'; を my $str = '/foo/bar/baz/quux/'; にすると、いろいろ違いが出てくるね。
- 453 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 00:58:21 ]
- >>451
重箱の隅つつき。 p(451 の行の正規表現。(.+?) ではなく(.*?) でなければ split を用いた他の例と挙動が違うぞ。 $str = q{/foo/bar/baz/quux} で確かめろ。
- 454 名前:437 mailto:sage [2007/05/07(月) 01:10:11 ]
- 多くのお返事ありがとうございました。
>440 単純な範囲演算子で記述できそうに思った私が考え足らずだったようです。 sub { @_[0 .. $#_ - 1] }->(split /\//, $x) は見た目にわかり易いですね。 いろいろ応用できそうだし。しかし、私は露とも思い至りませんでした。 >441 まぁ、そうなんですよね。 $file = "/usr/local/bin/bar"; # ファイル名が与えられて。。。 $fold = join "/", 〜split /\//, $file を使った記述〜; # フォルダ名を得る。 ここで余分に変数を使わず、可読性も損なわない方法がありそな気がしたもので。 >446 splice の第一引数はARRAYしかダメだと諦めてしまったのです。 リファレンスについて熟知すると、こんなやり方に気付くんですね。 自分の頭の硬さとリファレンスに対する理解の浅さを恥じて 精進したいと思います。 まず、>440 さんと >446 さんの方法、どっちを使うか悩みます。
- 455 名前:デフォルトの名無しさん [2007/05/07(月) 01:17:53 ]
- >>454
いいからFile::Specを使え。
- 456 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 01:19:48 ]
- >>454
いや、可読性が低下するから、いったん配列に入れてからスライスした方がいいと思うぞ 上のは遊びなんだから
- 457 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 02:28:37 ]
- こういうよくありそうな処理が案外スラっとかけないもんなんだね。
Dだと [0 .. $ - 1] でいけるんだが。
- 458 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 05:57:16 ]
- >>456
しかし落ち着いて俯瞰すればこういう雑用の可読性を気にする時点でそのソース全体が残飯ですね。
- 459 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 08:33:53 ]
- 超初心者でふが良いですか?
標準のキーボードから入力を受け取ってどうやれば入力を反映させれるかわからないです・・・ #!/usr/local/bin/perl -w require 'jcode.pl'; print"あなたはどれを使いますか?<br/>\n1:ドラゴン<br/>\n2:ゴーレム<br/>\n3:こねこ<br/>\n"; while(<>){ if($_=m/3/){print"これはこねこ"}; }; ↑これでは3を入力するたびに、これはこねこって出てくるんですが、 #!/usr/local/bin/perl -w require 'jcode.pl'; print"あなたはどれを使いますか?<br/>\n1:ドラゴン<br/>\n2:ゴーレム<br/>\n3:こねこ<br/>\n"; while(<>){ if($_=m/3/){print"これはこねこ";$kyara=3} elsif($_=m/2/){print"これはゴーレム";$kyara=2}; }; これのelsif文が実行されないぽいんですがなんででふか? 頭硬くてすみません・・・
- 460 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 09:30:09 ]
- > $_=m/3/
でなにをやっているのか良く考えてみ。
- 461 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 11:52:54 ]
- >>460さん>
$_=m/3/ の部分を$_==3 にすると、うまく行きました! 最初$_==3でエラーが出て、良くわからなくて正規表現にすればうまくいくかなとか思って$_=m/3/に直して、(他の部分も少し直して、)それで3の時うまくいったのでてっきり正解かと思いこんでました。 $_=m/3/を$_==3と同じ意味で使ったつもりだったけど、動作は違うんですね。 もうちょっと調べてきます。 ありがとうございました。
- 462 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 12:40:19 ]
- うまくいきました!
正規表現、はじめてで意味もよく知らずに=m/3/とかしてたけど、=~/3/とするのが正しかったんですね(汗 ==3にすると数字以外の時の入力で(変数は数字ではありませんみたいな)無駄なエラーが出たけど=~/3/ならそういう変なエラーも出ないみたいなので=~/3/を使うことにしました! ↓ $kyara=4; while($kyara==4){ $_=<STDIN>; if($_=~/3/){print"これはこねこ";$kyara=3} elsif($_=~/2/){print"これはゴーレム";$kyara=2} elsif($_=~/1/){print"これはドラゴン";$kyara=1}; }; もうちょっとがんばってきます!
- 463 名前:連カキスマソ mailto:sage [2007/05/07(月) 13:11:33 ]
- もうちょっとがんばってきました(滝汗
if($_=~/3/){処理1} elsif($_=~/2/){処理2} とすると、3でも23でも32でも先に$_=~/3/にマッチしてしまう(32なんかは$_=~/2/にマッチさせたい)ので、ちょっと修正しました。 ↓ #!/usr/local/bin/perl -w require 'jcode.pl'; print"あなたはどれを使いますか?<br/>\n1:ドラゴン<br/>\n2:ゴーレム<br/>\n3:こねこ<br/>\n"; $kyara=4; while($kyara==4){ $_=<STDIN>; if($_=~/3$/){print"あなたはお昼ね好きのこねこを選びました☆";$kyara=3} elsif($_=~/2$/){print"あなたはお人よしのゴーレムを選びました☆";$kyara=2} elsif($_=~/1$/){print"あなたは気の強いドラゴンを選びました☆";$kyara=1}; }; print "(番号=)$kyara"; ↑ これなら33111とかって入力でも3ではなく1のドラゴンとして判断してくれます☆ 正規表現って便利ですね☆ >>460さん、アドバイスdクスでした!
- 464 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 13:18:31 ]
- 一つ攻略おめ
そこで更に便利な連想配列をどうぞ
- 465 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 13:19:13 ]
- あっ、この場合だったら配列だけでいいのか
- 466 名前:460 mailto:sage [2007/05/07(月) 16:10:24 ]
- 462
なんか前向きなやつだなw どっかの知恵袋のとは大違いだ。 ちょっと補足しておくと、Perlの場合処理対象の 変数を省略できることが多い。 たとえば $_ =~ /1/ なら /1/とか。 $_ = m/1/ と書いちゃうと、マッチの結果を $_ に代入と解釈されて前の値を壊しちゃう。 ほかにもいろいろあるが長くなるので書かない。 まあがんばれ。
- 467 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 16:18:01 ]
- >>459のチラ裏日記は、他人が見ても役に立ちそうだな。続けてくれ。
- 468 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 17:04:17 ]
- てか
$inkey = <STDIN>; これで読み取ったときって改行コード入ってない? そこらへんも気をつけたほうがいいかな
- 469 名前:デフォルトの名無しさん [2007/05/07(月) 17:27:02 ]
- XML::Parser::PerlSAX のエラーハンドリングについて、どなたかご存知でしたら教えてください。
Parse対象のXMLにエラーがあった場合に、ユーザー関数をコールバックさせようと考えています。 デフォルトだと mismatched tag at line **, column **, byte ***, at /user/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/XML/Parser.pm line 187 のように出力されてdieします。
- 470 名前:デフォルトの名無しさん [2007/05/07(月) 17:27:31 ]
- search.cpan.org/~kmacleod/libxml-perl-0.08/lib/XML/Parser/PerlSAX.pm
をみると、ParserがnewされるところでErrorHandlerに自分で作ったもの(例えばMyErrorHandler等)を指定すればよさそうなのですが、具体的になんという名前の関数を用意し、どのタイミングで呼び出されるかなど、よくわかりませんした。 すみませんが、どなたかお分かりでしたらアドバイスをください。
- 471 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 18:14:52 ]
- 使ったことないので分からんけど
ErrorHandlerに無名サブルーチンを渡しておけばパースに失敗したときにコールバックしてくれるんじゃないの?
- 472 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 18:37:28 ]
- >>470
俺も使ったことないけど、フツーに考えて $parser->{ErrorHandler}で例外をキャッチできるってことなんじゃなないの?
- 473 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 18:59:18 ]
- >>466さん&>>468さん>
dクスです!参考にして少し書き換えました! #!/usr/local/bin/perl -w require 'jcode.pl'; print"あなたはどれを使いますか?<br/>\n1:ドラゴン<br/>\n2:ゴーレム<br/>\n3:こねこ<br/>\n"; while (<>){ if (/[1-3]$/) {chop;$kyara=chop;last;} }; if($kyara==1){print"あなたはお昼寝好きのこねこを選びました☆"} elsif($kyara==2){print"あなたはお人好しのゴーレムを選びました☆"} elsif($kyara==3){print"あなたは強気なドラゴンを選びました☆"}; while (<>){}; こんな感じに☆ >>464さん> 必要になってからがんがります☆(コラ
- 474 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 19:00:38 ]
- あ、よく見たら、ドラゴンとこねこが逆(汗
- 475 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 19:10:56 ]
- キメラは?キメラはいないの?
- 476 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 19:14:49 ]
- 1しか押さないだろこれは・・・
- 477 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 19:27:33 ]
- >>475が「イサキは?」に見えた。
配列や printf を覚えて欲しくなるけど、楽しみながらコツコツやってそうでいいな。
- 478 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 19:38:06 ]
- >>475
ああ、大きなキメラが入るよ。 今年一番の大幅改良だ。
- 479 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 21:43:44 ]
- たった今Perlにprintfやsprintfがあることを知った。
俺は車輪を10も20も発明していたらしい。すばらしい!
- 480 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 23:31:32 ]
- むしろ、どういうルートで習得していけば
そいつらと鉢合わせずに済むか、を考えるのが難しいかも。
- 481 名前:473 mailto:sage [2007/05/07(月) 23:32:46 ]
- 質問してもいいでしょうか。。
print system("cls"); と書くと、PCではちゃんと画面クリアしてくれるんですが、サーバにアップしたら画面クリアしてくれませんでした。 ブラウザの画面をクリアする方法って無いんでしょうか・・? あと、サーバにアップしたら、 while (<>){ if (/[1-3]$/) {chop;$kyara=chop;last;} }; という部分も全て無視されました。 たぶん、while(<>)の部分がサーバでは無視されてしまってるんだと思うんですが、 どうすれば良いですか? HTMLでフォームを表示させてそこから入力させるしか無いのでしょうか?
- 482 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 00:03:55 ]
- clsはWinのコマンドだし (一応リンクは張ってはあるらしいが・・・)、
そもそも 「コンソールとブラウザの挙動を勉強してください」 としかいえない ブラウザに対して print ""; でえぇんとちゃうのんかと STDIN になんもデータ無いからあたりまえです
- 483 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 01:16:20 ]
- これはどう見ても新手の荒らし
- 484 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 02:59:42 ]
- >>481
荒らし以前に板違い。>>1 嫁
- 485 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 05:32:43 ]
- すみません。
CGI以外の純粋なperlのみって書いてありますね。 気をつけます。 >>482 なんとなく理解しました。 clsをclearとしても無理だったので普通にフォームからの入力にします。 ご迷惑かけてすみませんでしたm(__)m
- 486 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 09:09:04 ]
- >>478
「大幅改良っ!!キメラぁぁ!!おにいちゃんかっこいいいいぃぃぃい ぃくううううう!」
- 487 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 14:52:59 ]
- >>481
JavaScript 埋め込んでクリアすれば良いんじゃない?
- 488 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 13:07:53 ]
- すみません、
・ローカル変数の一覧を取得する方法 ・ハッシュの内容をローカル変数に一括して設定する機能(PHPのextract()関数に相当する機能) があれば教えてください。
- 489 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 13:32:01 ]
- >>488
use Dumpvalue とか。 hashの展開はこんなんでいけるだろ。 while (($key, $value) = each %hash) { eval("\$$key = \$value"); } ただし任意のキーが使われる場合はexploitになるんで別の方法で。
- 490 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 13:56:22 ]
- デバッガでも作ろうというのでなければハッシュのまま使ったほうが
いいと思うよ。たぶんろくなことにならない。
- 491 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 14:20:02 ]
- cpanなしでHTML::Entitiesをインストールする方法を教えていただけませんか。
「Perl "HTML::Entities" インストール」でぐぐってもヒットせず困ってます。
- 492 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 14:58:35 ]
- >>491
OSは?
- 493 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 15:06:48 ]
- ActivePerl(Win)だと初めから入ってるし、Unix系で「CPANなしで」ってのも
ピンと来ないし何だろう。「レン鯖で使いたい」なのかな。
- 494 名前:491 mailto:sage [2007/05/10(木) 15:50:52 ]
- >>492
Linuxです。Perl5.8。 >>493 その通り、海外のレンタルサーバーです。 ただ今はロ−カルのMacでやってるんで、CPANにトライしてみたんですが、最初にいろいろ英語できいてきて、適当に答えてたら設定がおかしくなったのか、 cpan install HTML::Entities がfetchできないとかでインストールできませんでした。 CPANむずい・・・
- 495 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 16:01:10 ]
- >>494
要するに、ロ−カルのMacにインストールできずに > CPANむずい・・・ と言ってるわけだ。 こんなこと言っている人がCPANなしでレンタルサーバにインストール しようってわけね。考えるだけ時間の無駄というものでしょう。
- 496 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 16:04:37 ]
- >>491
READMEに書いてあるじゃん
- 497 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 16:18:17 ]
- HTML-Parser-*.tar.gz ひろってきて展開して
perl Makefile.PL && make && make install だけどcpanの英語がわからんとか言ってるレベルじゃもっと無理じゃね?
- 498 名前:491 mailto:sage [2007/05/10(木) 18:34:51 ]
- >>497
HTML::EntitiesはHTML::Parserの一部ということでしょうか。 試しにHTML::Parserをインストールしてみると・・・たしかにHTML::Entitiesも印ストールされました。 貴重なヒントをありがとうございました。 #こんな情報どこにあるんですか。www.xav.com/perl/site/lib/HTML/Entities.html とか見ても書いてないし。 ちなみにHTML::ParserはMacPortsをつかって sudo port install p5-html-parser でいけました。CPANは難しくて分からなかった人でもMacPortsなら楽勝!MacPorts万歳!
- 499 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 18:37:45 ]
- そ、それはよかった
- 500 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 19:02:37 ]
- >>498
search.cpan.org/dist/HTML-Parser/lib/HTML/Entities.pm
- 501 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 19:08:36 ]
- >>498
search.cpan.org/ をブックマークしておくといいね。
- 502 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 19:08:43 ]
- >>498
cpanモジュールなんだからcpanで調べろよ。 search.cpan.orgでHTML::Entitiesをサーチすれば一番上に出てくる ttp://search.cpan.org/~gaas/HTML-Parser-3.56/lib/HTML/Entities.pm を見れば一発でわかるだろ。
- 503 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 22:17:13 ]
- Tkを使用して、GUIアプリを作成しています。
大きく二つのフレームから構成しています。 1.左フレーム 2.右フレーム この二つのフレームにそれぞれScrollbarを設けたいのですが、 Frameウィジェットには何故か-yscrollbarオプション等が無く Scrollbarウィジェットを動作させることができません。 Scrolledで強引に取り付けると、レイアウトがおかしくなります。 どうおかしくなるかというと、 1.Frame内部のウィジェットの配置が決まらない (HTMLでいう、alignやvalignが効かない) 2.そもそも、実行時にワーニングのような表示が出る(実行はできる) 1.に関しては、スクロールバーを外せば正常に(期待通りに)配置されます。 Tkを使用される方は、こういうフレーム分けしたレイアウトで、 かつ各フレームにスクロールバーを表示させたい場合、どのような ウィジェットの使い方をされるのか、教えていただけないでしょうか。
- 504 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 22:51:49 ]
- Paneというものを見つけました。
Tk::Pane provides a scrollable frame widget. Once created it can be treated as a frame, except it is scrollable. 自己解決です。 スレ汚し申し訳ありません。
- 505 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 23:08:52 ]
- Tkのことは分からんけど、そういうときはコンテナにしたフレームの中に
それぞれウィジェットを作って、その中で更にスクロールバーを設けるんでないかい
- 506 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 23:09:22 ]
- ずこー
リロードしときゃよかった
- 507 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 02:34:36 ]
- ($1, $2, $3, $4 ...)
に相当するような配列の表現はありますか?
- 508 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 02:56:54 ]
- もっと詳しく
できるならやろうと思ってることも
- 509 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 03:40:44 ]
- ($name, $age, $sex) = ($1, $2, $3);
みたいな部分を、 ($name, $age, $sex) = @foo; とかで済ませられないかと
- 510 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 05:02:32 ]
- これじゃ駄目?
my $str = 'name=名前,age=年齢,sex=性別'; my ($name, $age, $sex) = $str =~ /name=(.*),age=(.*),sex=(.*)/; 正規表現がアホなのは見逃して。
- 511 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 08:22:51 ]
- おお
パターンマッチってリストで評価するとそれが返ってくるんだ よくできてるなあ でも、 my ($name, $age, $sex) = $str =~ /name=(.*),age=(.*),sex=(.*)/ || next; という使い方はさすがに無理だった
- 512 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 09:34:40 ]
- 括弧の方にします
普通にパターンマッチをスカラーで評価した時は、 マッチしたかどうかを返すのに対して、 パターンマッチのリストでの評価の代入の評価は、 リストの要素数だから、動作は同じでも意味は違いますよね
- 514 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 09:47:23 ]
- 从*・ 。.・)<SEXよりかはGENDERまたはGENの方がいいかなと思うの
- 515 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 11:34:00 ]
- ふつう、sex。
- 516 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 11:37:09 ]
- >>514
入会申込書とかの該当欄に「週2回」って書いたたちか?
- 517 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 11:54:30 ]
- なにそのゆとりんぐ回答
- 518 名前:Aransk [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 13:12:30 ]
- じゃなくて、マッチングの結果のリストの表現方法のことです
- 520 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 13:19:37 ]
- ここまで回答出て勘違いするってどういうことだよw
- 521 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 17:13:50 ]
- >>511
木の実の問題だが、next / last を絡めると途端に可読性が低くなる 気がする。next を絡める予定なら普通に next if $str !~ /name=(.*),age=(.*),sex=(.*)/ ; my ($name, $age, $sex) = ( $1, $2, $3 ); でいいじゃんと遅レス。
- 522 名前:デフォルトの名無しさん [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 17:54:28 ]
- なにを期待してるんだ?
そのceil関数は整数じゃなければ1足すってだけだろ
- 524 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 17:56:06 ]
- >>522
丸め誤差でググっとけ。 perl -e 'print sprintf("%.50f", int((4.4 * 6000) * 1e6) / 1e6);'
- 525 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 18:02:20 ]
- 丸めには銀行方式が絡むか絡まないかがあるから気をつけろ
銀行の丸めは1桁が偶数のときに小数点以下があれば繰り上げだったっけ? 詳細忘れた
- 526 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 18:05:36 ]
- 銀行は四捨六入で0.5のときは一の位を見て切上げか切捨てを行う。
今回は全く関係ない。
- 527 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 18:27:48 ]
- まず「期待したとおりの切り上げ結果」ってのがわからんのだが。
- 528 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 18:34:21 ]
- >>522
> これを回避して、期待したとおりの切り上げ結果を返すにはどうすればいいでしょうか? そんなどこの馬の骨ともわからないサブルーチンを使わずに、CPANで Math-RoundとかMath-Round-Varとか拾ってきて見てみる。 実地の科学技術計算で使われている、充分な仕様のものがあるはず。
- 529 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 19:10:59 ]
- 付け焼刃的だが
$a = 1 if($var > 0 and $var != int($var)); ここの後半の比較式を int($var) != int($var+0.9999・・・) にするとか
- 530 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 20:54:42 ]
- CPANに落ちてるのも作者が有名人なのを除くと
どこの馬の骨かわからないきがしなくもない
- 531 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 21:10:46 ]
- >>530
有名な馬の骨もいるから気をつけな。
- 532 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 21:20:42 ]
- 麻雀の丸めは四捨六入
- 533 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 21:24:12 ]
- >>521
現状はまさにそんな感じなんだけど、 ($1, $2, $3) っていちいち書くのがなんか気持ち悪くて どうせ内部で持ってそうなデータなのに というのが質問の発端
|

|