Perlについての質問箱 ..
417:415
07/05/03 13:53:53
>>416
早い回答ありがとうございます。
やっぱり自分が悪いんですね。
調べてみます。
418:415
07/05/03 14:26:25
うーんやっぱり解らない…。
サブルーチンが先に実行される事なんてあるのか…?
419:デフォルトの名無しさん
07/05/03 14:50:10
>>415
まあエラーメッセージでも貼ってみ
420:415
07/05/03 15:05:12
>>419
そのようなファイルやディレクトリはありません at (何行目)
としか出ないんですが…。
421:デフォルトの名無しさん
07/05/03 15:08:03
>>420
訳したりせずにそのまま貼れ
422:415
07/05/03 15:16:54
そのようなファイルやディレクトリはありません at test.pl line 32.
だけです。
CentOS4.4、perl5.8.5です。
423:415
07/05/03 15:30:01
フルパス指定してなかった…。
>>422さん、親身になってくれてありがとうございます。
くだらないミスで申し訳ありません。
本当にすみませんでした。
424:デフォルトの名無しさん
07/05/03 15:40:40
>>423
s/422/421/g;
425:デフォルトの名無しさん
07/05/03 15:47:38
突っ込みどころはいろいろあるけど、エラーメッセージは自分のためにも他人のためにもわかりやすくすべし。
my $fp_in = IO::File->new($filename, "<") or die qq(cannot open '$filename': $!);
426:415
07/05/03 16:07:57
>>425
了解です。ただ or die $!;だけしてました。
連休中にコメントありがとうございました。
427:デフォルトの名無しさん
07/05/05 14:17:50
chompって何の略ですか?
428:デフォルトの名無しさん
07/05/05 14:26:54
>>427
略じゃないよ。
噛み切るとかそんな感じ。
429:デフォルトの名無しさん
07/05/05 14:41:24
chomp 【自動】 〜をムシャムシャ食う◆【同】champ
430:デフォルトの名無しさん
07/05/05 14:43:41
へー。ありがとうございました。
431:デフォルトの名無しさん
07/05/05 15:30:31
オブジェクト指向で書いていないので、巨大モジュールの分割がうまいこといかんのです><
具体的には、親パッケージが子パッケージをuseしているとき、
子パッケージから親パッケージのサブルーチンを呼べません。
Giko.pm
[-------
package Giko;
use Giko::Mona;
(omaemonaサブルーチンをEXPORTしている)
sub omaemona { .... }
-------]
Giko/Mona.pm
[-------
package Giko::Mona;
-------]
となっていた場合、
Giko::Monaの中でomaemonaを呼ぶ方法は、Giko::omaemonaしかないでしょうか?
Giko::Monaでuse Gikoはできないし、use base 'Giko';は違うみたいですし。
432:デフォルトの名無しさん
07/05/05 17:12:46
Encodeモジュールのfrom_toを用いて
「@」「A」や「T」「U」などを
sjis <-> euc-jp 変換すると文字化けしてしまいます。
回避するにはどうすればいいでしょうか?
433:デフォルトの名無しさん
07/05/05 19:33:33
>>432
つEncode::EUCJPMSのcp51932
434:デフォルトの名無しさん
07/05/05 20:32:56
それは拡張文字なので、 sjis じゃなく cp932 を指定。
435:デフォルトの名無しさん
07/05/05 20:40:22
単純に分割するなら、全部同じ名前空間に展開すればいいんじゃない
Giko/Mona.pm
[-------
package Giko::Mona;
package Giko;
-------]
436:431
07/05/06 01:14:39
遅レスで申し訳ないです。
>>435
なるほど。
まとめると巨大ファイルになりがちで不安だったのですが、
今のところはまだなんとか1ファイルにまとめられそうなので、
同じファイルスコープで仲良く共存してみます。
ありがとうございました。
437:デフォルトの名無しさん
07/05/06 17:12:14
例
( split /\//, $x )[0 .. bar];
リストの末尾要素を除いたリストを返す方法、知りませんか?
barをどう記述すりゃいいのやら。
Perl ならできそうな気がするんですが。思い当たりません。
検索してみたものの、それらしいものも見つけられません。
438:デフォルトの名無しさん
07/05/06 17:31:22
( @hoge, undef ) = split //, $foo ;
じゃダメなの?
439:デフォルトの名無しさん
07/05/06 17:43:01
>>437
尻尾だけ消すのじゃだめなの?
440:デフォルトの名無しさん
07/05/06 17:44:40
最後から2番目の要素をひとつ抜き出すだけなら (〜)[-1]
でいいんだけど、範囲演算子で(〜)[0..-1]とは書けないんだよな。
配列変数なら@x[0..$#x-1]という書き方もあるが、リストでは$#xに
相当するものが書けない。
とりあえずおもいついたのはこれ。
sub{@_[0..$#_-1]}->(〜)
441:デフォルトの名無しさん
07/05/06 18:03:14
>>437
@list = split(/\/(?=.+\/)|\/.+$/, $x)
とかやってないで、全部入れてから$#list--すればいいんじゃね?
442:デフォルトの名無しさん
07/05/06 18:31:19
>>429
首チョンパの略と思ってた
443:デフォルトの名無しさん
07/05/06 18:38:52
まずchopありき。
やがてより安全なchomp生まれり。
444:デフォルトの名無しさん
07/05/06 18:52:28
え…普通にpop関数じゃだめなの
445:デフォルトの名無しさん
07/05/06 19:51:31
popの第1引数は左辺値つーかARRAYじゃないと×じゃ?
446:デフォルトの名無しさん
07/05/06 20:19:01
splice @{[split /\//, $x]}, 0, -1 というのはどうだ
447:デフォルトの名無しさん
07/05/06 20:35:56
ちょんぱ
448:デフォルトの名無しさん
07/05/06 21:07:48
# 悪い例
(split /\//, $x)[0..(split /\//, $x)-2]
449:デフォルトの名無しさん
07/05/06 21:21:14
>>448
scalar contextのsplitは@_を上書きしちゃうからねぇ。
450:デフォルトの名無しさん
07/05/06 22:19:22
(split m{/})[0..(s{/}{/}g)-1]
451:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/05/07 00:52:33
>>451
my $str = 'foo/bar/baz/quux';
を
my $str = '/foo/bar/baz/quux/';
にすると、いろいろ違いが出てくるね。
453:デフォルトの名無しさん
07/05/07 00:58:21
>>451
重箱の隅つつき。
p(451 の行の正規表現。(.+?) ではなく(.*?) でなければ
split を用いた他の例と挙動が違うぞ。
$str = q{/foo/bar/baz/quux} で確かめろ。
454:437
07/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:デフォルトの名無しさん
07/05/07 01:17:53
>>454
いいからFile::Specを使え。
456:デフォルトの名無しさん
07/05/07 01:19:48
>>454
いや、可読性が低下するから、いったん配列に入れてからスライスした方がいいと思うぞ
上のは遊びなんだから
457:デフォルトの名無しさん
07/05/07 02:28:37
こういうよくありそうな処理が案外スラっとかけないもんなんだね。
Dだと [0 .. $ - 1] でいけるんだが。
458:デフォルトの名無しさん
07/05/07 05:57:16
>>456
しかし落ち着いて俯瞰すればこういう雑用の可読性を気にする時点でそのソース全体が残飯ですね。
459:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/05/07 09:30:09
> $_=m/3/
でなにをやっているのか良く考えてみ。
461:デフォルトの名無しさん
07/05/07 11:52:54
>>460さん>
$_=m/3/ の部分を$_==3 にすると、うまく行きました!
最初$_==3でエラーが出て、良くわからなくて正規表現にすればうまくいくかなとか思って$_=m/3/に直して、(他の部分も少し直して、)それで3の時うまくいったのでてっきり正解かと思いこんでました。
$_=m/3/を$_==3と同じ意味で使ったつもりだったけど、動作は違うんですね。
もうちょっと調べてきます。
ありがとうございました。
462:デフォルトの名無しさん
07/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:連カキスマソ
07/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:デフォルトの名無しさん
07/05/07 13:18:31
一つ攻略おめ
そこで更に便利な連想配列をどうぞ
465:デフォルトの名無しさん
07/05/07 13:19:13
あっ、この場合だったら配列だけでいいのか
466:460
07/05/07 16:10:24
462
なんか前向きなやつだなw
どっかの知恵袋のとは大違いだ。
ちょっと補足しておくと、Perlの場合処理対象の
変数を省略できることが多い。
たとえば $_ =~ /1/ なら /1/とか。
$_ = m/1/ と書いちゃうと、マッチの結果を
$_ に代入と解釈されて前の値を壊しちゃう。
ほかにもいろいろあるが長くなるので書かない。
まあがんばれ。
467:デフォルトの名無しさん
07/05/07 16:18:01
>>459のチラ裏日記は、他人が見ても役に立ちそうだな。続けてくれ。
468:デフォルトの名無しさん
07/05/07 17:04:17
てか
$inkey = <STDIN>;
これで読み取ったときって改行コード入ってない?
そこらへんも気をつけたほうがいいかな
469:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/05/07 17:27:31
URLリンク(search.cpan.org)
をみると、ParserがnewされるところでErrorHandlerに自分で作ったもの(例えばMyErrorHandler等)を指定すればよさそうなのですが、具体的になんという名前の関数を用意し、どのタイミングで呼び出されるかなど、よくわかりませんした。
すみませんが、どなたかお分かりでしたらアドバイスをください。
471:デフォルトの名無しさん
07/05/07 18:14:52
使ったことないので分からんけど
ErrorHandlerに無名サブルーチンを渡しておけばパースに失敗したときにコールバックしてくれるんじゃないの?
472:デフォルトの名無しさん
07/05/07 18:37:28
>>470
俺も使ったことないけど、フツーに考えて
$parser->{ErrorHandler}で例外をキャッチできるってことなんじゃなないの?
473:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/05/07 19:00:38
あ、よく見たら、ドラゴンとこねこが逆(汗
475:デフォルトの名無しさん
07/05/07 19:10:56
キメラは?キメラはいないの?
476:デフォルトの名無しさん
07/05/07 19:14:49
1しか押さないだろこれは・・・
477:デフォルトの名無しさん
07/05/07 19:27:33
>>475が「イサキは?」に見えた。
配列や printf を覚えて欲しくなるけど、楽しみながらコツコツやってそうでいいな。
478:デフォルトの名無しさん
07/05/07 19:38:06
>>475
ああ、大きなキメラが入るよ。 今年一番の大幅改良だ。
479:デフォルトの名無しさん
07/05/07 21:43:44
たった今Perlにprintfやsprintfがあることを知った。
俺は車輪を10も20も発明していたらしい。すばらしい!
480:デフォルトの名無しさん
07/05/07 23:31:32
むしろ、どういうルートで習得していけば
そいつらと鉢合わせずに済むか、を考えるのが難しいかも。
481:473
07/05/07 23:32:46
質問してもいいでしょうか。。
print system("cls");
と書くと、PCではちゃんと画面クリアしてくれるんですが、サーバにアップしたら画面クリアしてくれませんでした。
ブラウザの画面をクリアする方法って無いんでしょうか・・?
あと、サーバにアップしたら、
while (<>){
if (/[1-3]$/) {chop;$kyara=chop;last;}
};
という部分も全て無視されました。
たぶん、while(<>)の部分がサーバでは無視されてしまってるんだと思うんですが、
どうすれば良いですか?
HTMLでフォームを表示させてそこから入力させるしか無いのでしょうか?
482:デフォルトの名無しさん
07/05/08 00:03:55
clsはWinのコマンドだし (一応リンクは張ってはあるらしいが・・・)、
そもそも 「コンソールとブラウザの挙動を勉強してください」 としかいえない
ブラウザに対して print ""; でえぇんとちゃうのんかと
STDIN になんもデータ無いからあたりまえです
483:デフォルトの名無しさん
07/05/08 01:16:20
これはどう見ても新手の荒らし
484:デフォルトの名無しさん
07/05/08 02:59:42
>>481
荒らし以前に板違い。>>1 嫁
485:デフォルトの名無しさん
07/05/08 05:32:43
すみません。
CGI以外の純粋なperlのみって書いてありますね。
気をつけます。
>>482
なんとなく理解しました。
clsをclearとしても無理だったので普通にフォームからの入力にします。
ご迷惑かけてすみませんでしたm(__)m
486:デフォルトの名無しさん
07/05/08 09:09:04
>>478
「大幅改良っ!!キメラぁぁ!!おにいちゃんかっこいいいいぃぃぃい ぃくううううう!」
487:デフォルトの名無しさん
07/05/09 14:52:59
>>481
JavaScript 埋め込んでクリアすれば良いんじゃない?
488:デフォルトの名無しさん
07/05/10 13:07:53
すみません、
・ローカル変数の一覧を取得する方法
・ハッシュの内容をローカル変数に一括して設定する機能(PHPのextract()関数に相当する機能)
があれば教えてください。
489:デフォルトの名無しさん
07/05/10 13:32:01
>>488
use Dumpvalue とか。
hashの展開はこんなんでいけるだろ。
while (($key, $value) = each %hash) {
eval("\$$key = \$value");
}
ただし任意のキーが使われる場合はexploitになるんで別の方法で。
490:デフォルトの名無しさん
07/05/10 13:56:22
デバッガでも作ろうというのでなければハッシュのまま使ったほうが
いいと思うよ。たぶんろくなことにならない。
491:デフォルトの名無しさん
07/05/10 14:20:02
cpanなしでHTML::Entitiesをインストールする方法を教えていただけませんか。
「Perl "HTML::Entities" インストール」でぐぐってもヒットせず困ってます。
492:デフォルトの名無しさん
07/05/10 14:58:35
>>491
OSは?
493:デフォルトの名無しさん
07/05/10 15:06:48
ActivePerl(Win)だと初めから入ってるし、Unix系で「CPANなしで」ってのも
ピンと来ないし何だろう。「レン鯖で使いたい」なのかな。
494:491
07/05/10 15:50:52
>>492
Linuxです。Perl5.8。
>>493
その通り、海外のレンタルサーバーです。
ただ今はロ−カルのMacでやってるんで、CPANにトライしてみたんですが、最初にいろいろ英語できいてきて、適当に答えてたら設定がおかしくなったのか、
cpan install HTML::Entities
がfetchできないとかでインストールできませんでした。
CPANむずい・・・
495:デフォルトの名無しさん
07/05/10 16:01:10
>>494
要するに、ロ−カルのMacにインストールできずに
> CPANむずい・・・
と言ってるわけだ。
こんなこと言っている人がCPANなしでレンタルサーバにインストール
しようってわけね。考えるだけ時間の無駄というものでしょう。
496:デフォルトの名無しさん
07/05/10 16:04:37
>>491
READMEに書いてあるじゃん
497:デフォルトの名無しさん
07/05/10 16:18:17
HTML-Parser-*.tar.gz ひろってきて展開して
perl Makefile.PL && make && make install
だけどcpanの英語がわからんとか言ってるレベルじゃもっと無理じゃね?
498:491
07/05/10 18:34:51
>>497
HTML::EntitiesはHTML::Parserの一部ということでしょうか。
試しにHTML::Parserをインストールしてみると・・・たしかにHTML::Entitiesも印ストールされました。
貴重なヒントをありがとうございました。
#こんな情報どこにあるんですか。URLリンク(www.xav.com) とか見ても書いてないし。
ちなみにHTML::ParserはMacPortsをつかって
sudo port install p5-html-parser
でいけました。CPANは難しくて分からなかった人でもMacPortsなら楽勝!MacPorts万歳!
499:デフォルトの名無しさん
07/05/10 18:37:45
そ、それはよかった
500:デフォルトの名無しさん
07/05/10 19:02:37
>>498
URLリンク(search.cpan.org)
501:デフォルトの名無しさん
07/05/10 19:08:36
>>498
URLリンク(search.cpan.org) をブックマークしておくといいね。
502:デフォルトの名無しさん
07/05/10 19:08:43
>>498
cpanモジュールなんだからcpanで調べろよ。
search.cpan.orgでHTML::Entitiesをサーチすれば一番上に出てくる
URLリンク(search.cpan.org)
を見れば一発でわかるだろ。
503:デフォルトの名無しさん
07/05/10 22:17:13
Tkを使用して、GUIアプリを作成しています。
大きく二つのフレームから構成しています。
1.左フレーム
2.右フレーム
この二つのフレームにそれぞれScrollbarを設けたいのですが、
Frameウィジェットには何故か-yscrollbarオプション等が無く
Scrollbarウィジェットを動作させることができません。
Scrolledで強引に取り付けると、レイアウトがおかしくなります。
どうおかしくなるかというと、
1.Frame内部のウィジェットの配置が決まらない
(HTMLでいう、alignやvalignが効かない)
2.そもそも、実行時にワーニングのような表示が出る(実行はできる)
1.に関しては、スクロールバーを外せば正常に(期待通りに)配置されます。
Tkを使用される方は、こういうフレーム分けしたレイアウトで、
かつ各フレームにスクロールバーを表示させたい場合、どのような
ウィジェットの使い方をされるのか、教えていただけないでしょうか。
504:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/05/10 23:08:52
Tkのことは分からんけど、そういうときはコンテナにしたフレームの中に
それぞれウィジェットを作って、その中で更にスクロールバーを設けるんでないかい
506:デフォルトの名無しさん
07/05/10 23:09:22
ずこー
リロードしときゃよかった
507:デフォルトの名無しさん
07/05/11 02:34:36
($1, $2, $3, $4 ...)
に相当するような配列の表現はありますか?
508:デフォルトの名無しさん
07/05/11 02:56:54
もっと詳しく
できるならやろうと思ってることも
509:デフォルトの名無しさん
07/05/11 03:40:44
($name, $age, $sex) = ($1, $2, $3);
みたいな部分を、
($name, $age, $sex) = @foo;
とかで済ませられないかと
510:デフォルトの名無しさん
07/05/11 05:02:32
これじゃ駄目?
my $str = 'name=名前,age=年齢,sex=性別';
my ($name, $age, $sex) = $str =~ /name=(.*),age=(.*),sex=(.*)/;
正規表現がアホなのは見逃して。
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の環境です。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5369日前に更新/220 KB
担当:undef