Perlについての質問箱 2箱目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
NGNGPerl は言語の一つです。 CGI ではありません。
UNIX 系 OS が吐き出す膨大なログに頭を抱えている人、
C/C++ に挫折して Perl で再教育を受けている人、
Perl で HTTP サーバを立てた神などの降臨をお待ちしています。
繰り返しになりますが Perl は CGI ではありません。(GNU is Not UNIX)
Perl は WebProg へという方は C も Ruby も向こうで議論してください。
また、CGI に関する質問も向こうでお願いします。
0002棄教者 ◆egKIKYO7cg
NGNGスレ立て乙
0003デフォルトの名無しさん
NGNGうわ・・・
0004デフォルトの名無しさん
NGNGC は こっちの方が人が多い
0005デフォルトの名無しさん
NGNG0006荒れませんように
NGNG> 繰り返しになりますが Perl は CGI ではありません。(GNU is Not UNIX)
この意味がワカラン。なぜに GNU が出てくる(w
0007デフォルトの名無しさん
NGNG>>2=>>3という罠では?
0008デフォルトの名無しさん
NGNGアーメン
0009デフォルトの名無しさん
NGNG>>1さん、乙彼さま。
0010デフォルトの名無しさん
NGNGカウンターってありますか?
0011デフォルトの名無しさん
NGNGここは Perl の話をするスレです。
CGIはWebProgでどうぞ。
0012デフォルトの名無しさん
NGNGあるよ。$cnt+=2;
0013デフォルトの名無しさん
NGNG#ム板ならこう書くのが正しいと思うのです
0014デフォルトの名無しさん
NGNG0015棄教者 ◆egKIKYO7cg
NGNG$which perl
/usr/bin/perl
Debian GNU/Linux で
$which perl
/usr/bin/perl
0016デフォルトの名無しさん
NGNGすきな(使用)バージョンはなんだ
Perl5.8
Perl5.8pre
Perl5.7
Perl5.6
Perl5.6.1
、、あたりで
0017棄教者 ◆egKIKYO7cg
NGNG$ perl -v
This is perl, v5.6.1 built for cygwin-multi
Copyright 1987-2001, Larry Wall
Debian GNU/Linux で
$ perl -v
This is perl, v5.6.1 built for i386-linux
Copyright 1987-2001, Larry Wall
ActivePerl使いなんで5.6.1。5.8が出たらその刹那アップデートします。
# XSの再コンパイルが面倒くさそうだけど…
0019デフォルトの名無しさん
NGNGどうのこうのと言ってた人がいたが5.8になったらどうなるかねえ
0020nobodyさん
NGNGSolarisで/opt/bin/perl
FreeBSDで/usr/local/bin/perl
って、数年前の話、今はcygwinとLinuxのユーザ。
0021デフォルトの名無しさん
NGNG日本語版ね
0023デフォルトの名無しさん
NGNGアレ、そうか。でも見ないな。田舎だからか
0024デフォルトの名無しさん
NGNG<input type=FILE>でUPするとたしかにプログラムは動くのですが
ファイル名を表示することができません。
cgi.libをつかっています
$IN{’’}でとってきてprintとすると文字がばけます
エンコードするのですか?
よくわかりません。初心者です。
0025デフォルトの名無しさん
NGNGここはCGIの質問するスレじゃないぞ。>>1をよく読みタマへ
002624
NGNGを読みましたGNU is Not UNIXってなぜあそこに書かれているのか、、、、
書いた人の頭がすこし心配です
webProg板に逝ってきます
さ(・O・)よ(・。・) おなら(≧〜≦)=3 ブーッ!
0027デフォルトの名無しさん
NGNG> を読みましたGNU is Not UNIXってなぜあそこに書かれているのか、、、、
> 書いた人の頭がすこし心配です
お前の知識/理解力がだいぶ心配だよ。
0028デフォルトの名無しさん
NGNGhttp://forest.ne.jp/cgi-ml/
0029厨房
NGNGif ($hensu1 = 1){$kotae1=1}
if ($hensu1 = 13){$kotae1=2}
if ($hensu1 = 111){$kotae1=13}
.
.
if ($hensu2 = 1){$kotae2=1}
if ($hensu2 = 13){$kotae2=2}
if ($hensu2 = 111){$kotae2=13}
.
.
などの条件分岐を作っているのですが(実際はもっと何十行もあって、数値は適当です)、
これをもっと短くできないでしょうか?お暇な方ご教授願います。
0030デフォルトの名無しさん
NGNG$hensu1〜3 と $kotae1〜3 は配列にスレ。
たくさん並んでいる if 文は連想配列がいいかと思う。
こんな感じ... (perl うろ覚えだし、実行環境が手元にないからあくまでも感じだけね。)
my @hensu, @kotae;
my %Map;
$Map{1} = 1;
$Map{13} = 2;
$Map{111} = 13;
for(my $i = 1..3){
$kotae[$i] = $Map{$hensu[$i]};
}
my($foo, $bar) このようにね。
あと%Mapは
my %Map = (
1 => 1,
13 => 2,
111 => 13,
);
という風に初期化するほうが読みやすぃし書きやすいので吉だと思うな。
forはfor(list)のforeach形式と一般的なfor(init; test; continue)だけ。
そのケースの場合は
for my $i(1 .. 3)じゃないと思った通りには動かないよ。
0033デフォルトの名無しさん
NGNG”厨房”は連想配列とかわからないと思われ、。
0034デフォルトの名無しさん
NGNG> ”厨房”は連想配列とかわからないと思われ、。
お前は、サンプルソースも読めないのか ?
0035デフォルトの名無しさん
NGNGいやPerl弄るなら連想配列は必須。
使えないのはさんまのしっぽばかり食ってるようなもん。
0036デフォルトの名無しさん
NGNG新しくスレが立ってた。
0037nobodyさん
NGNG厨房様には、WebProg板に
CGIとかPerlとか超初心者なんだけど、
【Perl】初心者コーナー Part6
をご用意してお待ちしておりますので、どうぞご利用ください。
0038デフォルトの名無しさん
NGNG0039デフォルトの名無しさん
NGNGそれはmyしない方が良いんじゃないの?
0040デフォルトの名無しさん
NGNG"GNU is Not UNIX"に何の関係がある。恥ずかしいから止めろ。
0041nobodyさん
NGNG類同的関係ってやつだ。頭の悪いお前に説明してやろうか?
GNUはUNIXだと、逆にUNIXはGNUだとよく誤解されるが、実際は
UNIXでないGNUもGNUでないUNIXもある。PerlはCGIで使われる
言語だとかCGIといえばPerlだと思っている厨が多いが、Perl
とCGIはそれぞれCGIとPerlよりも広い範囲をカヴァーしている。
分かった?
0042デフォルトの名無しさん
NGNG低脳が思いつきそうな戯言だな。さすがPerlユーザ。
0044デフォルトの名無しさん
NGNG0045デフォルトの名無しさん
NGNGそしてそれにいつまでもしがみつくのがPerlユーザ
0046デフォルトの名無しさん
NGNGすごいや。馬鹿の極みだね。
0047デフォルトの名無しさん
NGNG0048デフォルトの名無しさん
NGNGくさいんだよ。お前らは
0049デフォルトの名無しさん
NGNG0050デフォルトの名無しさん
NGNGRubyでCGI書きたいんですが。
板違いでしょうか。
0051デフォルトの名無しさん
NGNG板違いです。首吊って氏んで下さい。
0052デフォルトの名無しさん
NGNG漏れはrubyユーザではありません
0054デフォルトの名無しさん
NGNG0056デフォルトの名無しさん
NGNG>>53よ。まあ、つまり、そういうことさ。憶測だがな。
0057デフォルトの名無しさん
NGNGトリップがSMGか。素敵だな。
0059デフォルトの名無しさん
NGNG( ´,_ゝ`)フーン
006052
NGNG誰がみても恥ずかしいと思うが如何?
0061デフォルトの名無しさん
NGNG0062デフォルトの名無しさん
NGNGGNU は UNIXでは無い、とも読めるし、
GNU は NotUnixだ、 とも読める。
isn't と書いてくれないと、激しく紛らわしい。
0063デフォルトの名無しさん
NGNG誰がみても恥ずかしいと思うが如何?
0064nobodyさん
NGNGしたがって、nobodyさんの言ってる通り。
0065デフォルトの名無しさん
NGNG0067nobodyさん
NGNG0068デフォルトの名無しさん
NGNG0069デフォルトの名無しさん
NGNG0070デフォルトの名無しさん
NGNG> 普通は、Non-UnixとかNo-Unixだよ。Notは動詞に付ける。
> したがって、nobodyさんの言ってる通り。
ねぇ、あんたたちは、"GNU is not Unix" 自体がおかしいと言って騒いでいるの ?
0071デフォルトの名無しさん
NGNGこいつは、前からPerlスレ荒らしやってたので、発言停止依頼しました。
0072デフォルトの名無しさん
NGNG0073nobodyさん
NGNG0074nobodyさん
NGNG普通使ってるのは、SolarisやらFreeBDSやらLinuxを含めた
広義の意味での「ユニックス」だよ。まさかそこにけちを
つけてんじゃないだろな。したがって、nobodyさんが言って
ることが正しい。
007552
NGNGでよかったんじゃないの?
漏れは心配して逝ってるつもりなんだけど
0076デフォルトの名無しさん
NGNG> FreeBDS
はぁ ? 言ってる内容も意味不明だし...。
0077nobodyさん
NGNG0078デフォルトの名無しさん
NGNG> うぜぇよ禿
ププッ、指摘されてあせってやんの。素直に、typo だよって言えばいいのにね。
「言ってる内容も意味不明だし」の方に触れちゃったかな ?
0079デフォルトの名無しさん
NGNGズゴゴゴゴゴゴゴ
0080デフォルトの名無しさん
NGNG0081nobodyさん
NGNG出現。これからは、デフォルトの名無しさんでいくからそう思え。
もう断発はやめた。
0082デフォルトの名無しさん
NGNGCやC++やJavaを使う輩を叩きのめしませんか?
0083デフォルトの名無しさん
NGNGキティが出入りしてたからな。
0084デフォルトの名無しさん
NGNG→発言を断つ?
0085デフォルトの名無しさん
NGNG何かいてもRuby厨は文句言うに決まってるw
0086デフォルトの名無しさん
NGNG粘着基地外がいます。騙されたり煽られたりしないようにお願いします。
日曜日の朝に出現することが多いです。
0087デフォルトの名無しさん
NGNGお前のことか ?
0088デフォルトの名無しさん
NGNGここで質問にちゃんと答えてるやつは、
CかC++メインのやつだろ。
そういうふざけたことを言うもんじゃない。
0089デフォルトの名無しさん
NGNGやっほ〜、↑はRuby界の有名厨房。るびきち こと 西本孝志君の写真だよ〜☆
彼女いない暦25年の無職童貞だからってなめてんじゃねーぞ!
0090デフォルトの名無しさん
NGNG誰がそれを信じると?
Rubyユーザの閉鎖性&攻撃性&粘着性はみんな知ってますよ。
0091デフォルトの名無しさん
NGNGあんたは荒らしている本人か、それか嘘を嘘と見抜けないアフォですか?
0092デフォルトの名無しさん
NGNGそれじゃ基地外の思う壺
0093デフォルトの名無しさん
NGNGRubyユーザは最低とか自作自演で言ってるんだろ?みてりゃわかるじゃん。
結局悪いのはそのキチガイで、PerlユーザもRubyユーザも被害者なんだよ。
そんで被害者同士でいがみあっていたら、それこそが荒らしの望む展開だって
ことぐらい理解しろよ。
0094デフォルトの名無しさん
NGNGスレが 93 まで行ってるのに質問が一つだけって言うのはちょっとまずいよ。
質問ないのかなぁ...。
0096デフォルトの名無しさん
NGNGお前らひひひ必死だな
0097デフォルトの名無しさん
NGNG0098デフォルトの名無しさん
NGNG正直、ネタで>>90のような投稿は自重して欲しい。
0099デフォルトの名無しさん
NGNGオセロなんてJava or C言語の新人研修でみんなちゃらっと
作るよ
時間なんてかかんないと思うけど
0100デフォルトの名無しさん
NGNGむちゃいうな
0101デフォルトの名無しさん
NGNG0102デフォルトの名無しさん
NGNGマジレスよ
だからperlでもできるはず
0103デフォルトの名無しさん
NGNGテトリスなら作ったが、オセロなんて知らんぞ。
あの手の、思考エンジンで優劣が決まるようなプログラムは
普通のアプリを作る際にはあまり参考にならんだろ。
0104デフォルトの名無しさん
NGNGんだ。
0105デフォルトの名無しさん
NGNG普通のアプリを作るときに優秀なアルゴリズムを組んだ経験があれば
srcの品質が高まるよ
やって無駄はないかと思うけどね
0106デフォルトの名無しさん
NGNGあんた、実際にあの手のゲーム作ったことないだろ。
思考エンジンを強化しようとするとたいがいつぎはぎだらけになり
ロジックも糞もなくなってくる。
目的が勝負に勝つことになるからね。
0107デフォルトの名無しさん
NGNG> いや、UI なしなら割とすぐかと。
おいおい、次は思考ルーチン無しならとか言い出すんじゃないだろうな?
0108デフォルトの名無しさん
NGNG本格的なオセロを作るなら別だが、
OOは戦場では必要なしスレ向けなら
・おけるところからランダム
・取れる枚数が多いところ
程度の馬鹿ルーチンでいいでしょ。
0109hoge&lo;hoge&lro;
NGNG0110デフォルトの名無しさん
NGNGそれじゃぁ、誰でも作れるから面白くない。
0111デフォルトの名無しさん
NGNGPerlらしいじゃん。
0112デフォルトの名無しさん
NGNG0113デフォルトの名無しさん
NGNG0114デフォルトの名無しさん
NGNGべつにまずくないでしょう。
0115デフォルトの名無しさん
NGNG\r\nの中間とかに飛んでもだいじょうぶかなぁ。
らくだ本第三版二冊で壱万円
0116デフォルトの名無しさん
NGNG味気ないんで色つけたいんですけどなにか方法ありますか?
0117デフォルトの名無しさん
NGNGttp://sd.znet.com/~penguin/perl/learn/page7.html
0118デフォルトの名無しさん
NGNGありがとう!
かなりわかりやすいです。
やってみます
0119デフォルトの名無しさん
NGNGはあ? まずい場所に飛んだら、脇によける必要は当然あるでしょう。
文字の境界にも気をつけなければいけませんね。
0120デフォルトの名無しさん
NGNGとりあえず ActivePerlには binmode が seek にも影響を与えるって書いてあるけど
どういうことは知らん。テキストモードで使えないとは書いてないけど\r\n境界の話は
かいてなかったなぁ。
5.6以上だとTerm::ANSIColorってモジュールが標準でついてくるね。
0122デフォルトの名無しさん
NGNGPerlでアンケートの送信フォームを作りました。
送信ボタンを押したら、メールが送信されるやつです。
メッセージを入れる部分で改行したら、届いたメールには改行されずに<br>
が表示されています。
どうすればよいのでしょうか。
0123デフォルトの名無しさん
NGNGCGIか?
CGIならWebProg板に逝け。
0124デフォルトの名無しさん
NGNG0125デフォルトの名無しさん
NGNG改行コードを<br>にするのを辞めるか、或いは<br>を改行コードにするかどちらか。
改行コードは\r\n。
0126デフォルトの名無しさん
NGNG前スレ
http://pc3.2ch.net/test/read.cgi/tech/1017736187/
くらい貼っといてくれ。
0127デフォルトの名無しさん
NGNGflock使おうにもファイルハンドルがわかんないし。
0128デフォルトの名無しさん
NGNGflockってファイル名(とモード)を引数に取るでしょ。
0129デフォルトの名無しさん
NGNGデバッガで
x tieの返り値
してみそ
0130デフォルトの名無しさん
NGNG何言っているの?(^_^;)
PerlでもCでもファイル名は取らないよ(^_^;)
機能上、オープンしていないファイルには使えないでしょ(^_^;)
0131デフォルトの名無しさん
NGNG0132デフォルトの名無しさん
NGNG1)SDBM_Fileを改造する。
2)DB_Fileを使うことにする。
0133デフォルトの名無しさん
NGNGMIME:Parser.pm
を使ってmbxファイルからfrom,subject,bodyだけを抜き出したいのですが
outlookから送られた添付ファイル付きのメッセージだけが上手く抜き出せません。
こんな感じで使ってます。
my $oParse = new MIME::KbParser;
$oEnt = $oParse->parse_data($mail) || die "couldn't parse MIME stream";
どうやらmulti-partを上手く分けれてないようです。
$oEnt->partsを見ても何も入ってません。
その時はfrom,subjectは上手く抜き出せているようです。
boundaryの位置が悪いんだろうとは思うのですがどうやれば良いのか分かりません。
何かオプションがあれば教えて頂きたいのですが…
お願いします。
0134デフォルトの名無しさん
NGNGDB_File なら DB_FH にファイルハンドルが自動的にはいるわけですね。
SDBMが使えないのでこいつを使わせてもらうことにします。
0135デフォルトの名無しさん
NGNG自動的になるわけじゃないよ。マニュアルをもちっと読め。
0136デフォルトの名無しさん
NGNG\RETだとインデントの関係で読みにくいし、変数に入れるとパフォーマンスが落ちるので
いい方法を探しています。
0137デフォルトの名無しさん
NGNG/x使って、インデントするなりコメントつけるなり好き勝手しやがれ!
0138デフォルトの名無しさん
NGNG0139デフォルトの名無しさん
NGNG0140デフォルトの名無しさん
NGNG0141デフォルトの名無しさん
NGNG0142デフォルトの名無しさん
NGNG> 変数に入れるとパフォーマンスが落ちるので
信じがたいな。oつけたら変わらんと思う
0143デフォルトの名無しさん
NGNG何度も使う場合、2〜3倍違うがなにか?
0144デフォルトの名無しさん
NGNG0145デフォルトの名無しさん
NGNGせめてラクダ本ぐらい読もうよ。
0146デフォルトの名無しさん
NGNGせめてラクダ本ぐらい読もうよ。
0147デフォルトの名無しさん
NGNGこの場合、oは関係ないぞ。
>>143
正規表現の複雑さとか、ループ回数によって倍率はいくらでも変えられるんで
その比較は無意味。
まあ、ループの内側じゃなければ問題なし。
0148デフォルトの名無しさん
NGNG恥ずかしいやつ(w
0149デフォルトの名無しさん
NGNGASPとかJavaScriptだと使えるのにPerlはDB関連は弱いみたいですね。
0150133
NGNG「○○を読め!」とか間接的なアドバイスでも良いのでお願いします…
全然分かりません(涙)
0151デフォルトの名無しさん
NGNGhttp://groups.google.co.jp/groups?hl=ja&lr=&ie=UTF-8&oe=UTF-8&c2coff=1&q=%22MIME%3A%3AParser%22+Outlook
ここらへんを丹念に読むとか。
モジュールも全部Perlなんだろうしこういうときはデバッグしてコミュニティにフィードバックせよというのが流儀では?
0152デフォルトの名無しさん
NGNG0153デフォルトの名無しさん
NGNG0154デフォルトの名無しさん
NGNG0155デフォルトの名無しさん
NGNG0156デフォルトの名無しさん
NGNG0157デフォルトの名無しさん
NGNGどうするんだろ。あれにしかない機能が2つくらいあるけどね。
0158デフォルトの名無しさん
NGNG0159デフォルトの名無しさん
NGNG0160デフォルトの名無しさん
NGNG変なdllなどはいらないexeにコンパイルするコンパイラなどはないでしょうか。
C++に変換するものでもかまわないです。
0161デフォルトの名無しさん
NGNGperl2exeっていうのでexeに変換できる。
Shareware
30日間らしい
未レジスト状態で作ったexeは、実行時に「perl2exe未レジスト版で作成しました」のようなメッセージがでる。
perl2exeでコンパイルするマシンにはPerlが必要だとおもうけど
0162デフォルトの名無しさん
NGNGperl2exeで検索したら類似品でPerlAppってやつで出来るみたいなので
そっちでやってみます。ネイディブコンパイラじゃなくてソース埋め込み型みたいですが。
0163デフォルトの名無しさん
NGNGム板住人としては、あれの動作原理が知りたいところなんですが
どうやっているのでしょうか?
0164デフォルトの名無しさん
NGNG↓これを使いたいのですが
http://www.perlpress.com/perl/gres
例の通りに実行しても全然動かないのですけど、どうやれば動くのでしょうか?
以下は何もおきずに終わります。
perl gres.pl -e 's!and!or!g' *.txt
以下は"Processed 0 files." と表示されて終わります。
perl gres.pl -v -e 's!and!or!g' *.txt
ファイルを見つけられないのかとファイル名を直接指定すると、
perl gres.pl -e 's!and!or!g' readme.txt
GLOB(XXXX) ←こんなのが画面いっぱいに表示されて、readme.txt は 0 バイトになってしまいます。
どうかよろしくおねがいします。
0165デフォルトの名無しさん
NGNGPerlについて、お薦めの本があれば、教えてください。主な用途としては、データのテキスト処理、CGIなどです。
ちょっと、本屋で見たのですが、基本的な文法しか書いてないとか、逆に難しすぎたりでなかなかいい本がありません。基本的な知識から、CPANの使い方まで、サクッと書いた本はないものでしょうか?
(どうか、らくだ本という殺生なことは言わないでください。)
よろしくお願いします。
誰も答えたくないのは質問の仕方が悪いからとは思わなかったの?
多分、自分の環境やそのプログラムについて一言も触れていないので、ネタだと思われたんだよ。
とりあえずマジレスすると、古いPerlでは動いたのかもしれないけど今は普通に動かないよ。
既にメンテナンスされていない効率の悪いプログラムをあえて使う必要は無いと思うけどね。
どうしても使いたいなら下のように変更してね
# diff -u orig.pl new.pl
@@ -77,7 +77,7 @@
while( <$fin> ) {
eval $expr ;
- print $fout ;
+ print $fout $_;
}
close $fout ;
0167棄教者 ◆egKIKYO7cg
NGNGラクダ本は厚いだけで難しくないです。楽に学習できるから楽だ本なのです。
漏れが最初に買ったのは
CGI & Perl ポケットリファレンス
と言う本です。文法は簡単な解説だけで後はすべて関数の説明。
意外なことにこれがかなり役に立った。
0168デフォルトの名無しさん
NGNGおい、英語の原著でも楽だから楽だ本なのか?
0169デフォルトの名無しさん
NGNGCとC++できるのなら、Perlなんておちゃのこさいさいだよ。
添付のドキュメント、Webで見つかるその日本語訳、既存のスクリプト読み
だけでマスターできるじゃん。
3日あれば大丈夫だよ。
0170デフォルトの名無しさん
NGNG初めてのPerlはどうよ。
立ち読みして味噌
易し過ぎるかもしれないが素人向けの本ではないと思った。
http://www.oreilly.co.jp/BOOK/lperl2/
0171デフォルトの名無しさん
NGNG元々C屋を対象に書いてるし。
0172デフォルトの名無しさん
NGNGこれないと仕事に差し支えるくらいお世話になった。
0174デフォルトの名無しさん
NGNG0175デフォルトの名無しさん
NGNGやはり、ラクダ本ですか。CGI&Perlポケットリファレンスですか。今度、探してみます。
どうもありがとうございました。
0176デフォルトの名無しさん
NGNGじっさいどれくらい使えんの? 使ってる人いる?
いまだに日本語処理には jperl5.005_03 使ってんだけど、
そろそろ乗り換えたいんだな。
0177Ruby!!!!!!!!!!!
NGNG0178デフォルトの名無しさん
NGNG>>169
俺もC、perlの順で学んだけど、本は使わなかった。Webのみ。
凄く有名なページだと思うけど、とほほ と use object にお世話になりました。
日本語版のマニュアル(perlmanj)もわかりやすいと思う。
でも短期間で効率よく覚える、っていうならやっぱり本なんだろうなあ。
0179デフォルトの名無しさん
NGNG実行時にモジュールを動的に選択して利用するようにするにはどうすれば良いのでしょうか。
0180デフォルトの名無しさん
NGNGlarning perlが欲しかったんだが、田舎なので売ってなかった
0181デフォルトの名無しさん
NGNGperl -e 'while(<>){if($_ eq "\n"){eval $s;print $@;$s="";}else{$s.=$_;}}'
perldoc -f require
if(expr){
require Module::A;
}else{
require Module::B;
}
useと同じ効果を期待するならBEGIN内におく。
BEGIN{
expr ? (require Module::A, import Module::A()) : (require Module::B, import Module::A());
}
0183名無しさん@カラアゲうまうま
NGNG動的にってことだから、こうじゃないのか?
$modname = "hoge.pl";
require $modname;
>>180
俺のときはラクダ本しかなかった。しかも赤。
0184Ruby!!!!!!!!!!!
NGNGどっちでもいいだろ。さすが糞スレ。
糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞糞
0185デフォルトの名無しさん
NGNG>でも短期間で効率よく覚える、っていうならやっぱり本なんだろうなあ。
ですね。大学の時の指導教官が、「ぱーるってのを学ぶにはどの本見ればいいの?」
と学生部屋からラクダ本を持って行って、だいたい4時間くらいでマスターして
いました。短時間でやろうというのなら本でしょう。機械可読なテキスト
だけで学ぼうとすると、「世界の仕組み」を掌握するだけでそれくらいの時間
はかかりますし。
0187デフォルトの名無しさん
NGNGどうでもいいけど、「世界の仕組み」ってのは何ですか
0188Ruby!!!!!!!!!!!
NGNG0189デフォルトの名無しさん
NGNG0190デフォルトの名無しさん
NGNGそのシステムの使い方やらデバッグ法やら情報の集め方などの
全大系を総称して「世界の仕組み」とかいうだろ?
この場合、「Perl世界の仕組み」ってことだろ。
0191デフォルトの名無しさん
NGNG寡聞にしてそのお言葉は存じ上げませんでした。ども。
0192デフォルトの名無しさん
NGNG質問です。
正規表現にマッチした部分だけを変数に格納するには
どう書けばイイですか?
0193博士
NGNG$hoge =~ /...(hoge...hoge).../;
のように括弧でくくってやると、マッチした部分が $0 に入るのじゃよ。
0194rubyist@カラアゲうまうま
NGNG博士、ウソ教えないでくだちい。
$0はメインスクリプト名。
部分文字列は$1から。
マッチ全体は$&でつ。
0196rubyist@カラアゲうまうま
NGNG0197デフォルトの名無しさん
NGNG0198デフォルトの名無しさん
NGNG層が厚いってことなんだよ。
トップレベルは、(略)
0199デフォルトの名無しさん
NGNGトップレベルは、どの言語でもさほど変わらないと思うが、ボトムのレベルは言語間の差が激しいと思う。
0200デフォルトの名無しさん
NGNG0201デフォルトの名無しさん
NGNGどうすればよいのでしょうか。
0202デフォルトの名無しさん
NGNG>>201 みたいな「スレタイトルが読めないヴォケ」がいるのも、ユーザー数のせいか ?
0203デフォルトの名無しさん
NGNGperlでって事だろ。
なんかそんなことするモジュールがあった気がする。
0204デフォルトの名無しさん
NGNGNet::DNS使えば?
0205おなら
NGNG0206デフォルトの名無しさん
NGNG0207デフォルトの名無しさん
NGNGPerlとどうちがうんですか?
PerlのWin32版で最も普及しているものがActivePerl。
標準ライブラリに加えて更にLWPなどのライブラリがバンドルされているほか、
Win32特有の機能が追加されていたりするね。
0209デフォルトの名無しさん
NGNG厨房な質問なのにお答えありがとうございます。
UNIX上のActivePerlについてはいかがでしょう?
0210デフォルトの名無しさん
NGNGそんなの使ってるやついるのかな?
もしいたら、そのメリットを知りたいが。
0211デフォルトの名無しさん
NGNGうちの会社で標準になるらしい。。。
普通のPerlとの差は…どうなんだろう。
見たところやっぱりいろいろとバンドルされてるようだけど、perl本体の差はわからないな。
0213デフォルトの名無しさん
NGNGActive Perl つーよりPDKのことなんだろか??
0214おれは暴走君だよ
NGNG$test = '0';
open (FH,">>unko.dat");
while ($test > 0) {
print FH "あ";
}
close(FH);
こんなプログラムを実行した場合の対処法を伝授してください。
A:気合
B:ファイル削除
C:サーバー管理人に謝る。「すんまそん」
D:その他
さてどれ?
0215デフォルトの名無しさん
NGNG頭の弱い方でつか?
プログラムの止め方も分からないのに実行するなよ
0216デフォルトの名無しさん
NGNG使えないです。defined(@array) is deprecated も出ました。
Net::DNSは http://www.activestate.com/PPMPackages/5.6/で落してきたんですが、なんで使えないんでしょう?
0217デフォルトの名無しさん
NGNG0218216
NGNGWindows2000でActivePerl Binary build 633 (perl v5.6.1)
コードはたとえば以下のコードでもエラーが出ます
--
use Net::DNS;
1;
--
0219デフォルトの名無しさん
NGNGD: 「回線切って、氏ぬ。」
0220デフォルトの名無しさん
NGNGところで、Net::DNSはどういう手順でインストールした?
その>>216のactivestate.comから落とした後、ppm経由でインストールしたか?
0221デフォルトの名無しさん
NGNGそもそも動かないんじゃないだろうか・・・。
$testが0だからwhileのところで0>0となり偽になってファイルには何もかかれず終了。
違ってたらスマソ
0222デフォルトの名無しさん
NGNG0223デフォルトの名無しさん
NGNG文字列を変換処理するとあるCのライブラリを、perl5.8.0 から使いたい。
xs を使って書いてみたのはいいけど、どうもうまくいかないので
お知恵拝借したいところ。
1.Cのライブラリ側関数は strcpy( char* dst, char* src ); みたいな感じで、
src から dst に変換処理をかけながらコピーする。
dst が src よりも長くなる可能性はある。
2.char* dst は予めメモリ確保する必要がある。
3.perl からもこの関数と同じように使えるようにするため、
xs では hoge( dst, src ); とした。
4.実際使ってみるとうまく動いてそうなんだけど、
src に長い文字列(大体500bytesくらい)を与えると
Carp/Heavy.pm did not return a true value at /usr/local/lib/perl58/Carp.pm line 178, <IN> chunk 2.
とかってエラーが出る。
結局仕方なく my dst = 0 x ( length( src ) * 2 ); とかやって
しのいでいるんだけど、あまりにひどい処理なのでなんとかしたい。
また xs の時点で dst のメモリ確保をするのも考えたけど、
そのメモリをいつ開放すればいいのかわからないので実際に試してはいない。
うーん説明わかりづらいかも・・・。
0224_gunzip ◆eiH/XdoCNg
NGNG概要は分かったけど、XSでどのようなコードを書いているかが分からないのでコメントしづらい。
それと、Perl側から $dest = hoge($src); のように呼ぶのが普通じゃないかな。
例を挙げると、<stdlib.h>のrealpath()で、$realpath = MyTest::realpath($path);と呼ぶ場合
----- MyTest.xs -----
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "ppport.h"
#include <stdlib.h>
#include <sys/param.h>
MODULE = MyTestPACKAGE = MyTest
SV *
realpath(path)
char *path
PREINIT:
char buffer[MAXPATHLEN]; /* <sys/param.h> */
CODE:
if (realpath(path, buffer) == NULL) {
XSRETURN_UNDEF; /* RETVAL = &PL_sv_undef; でもよい */
} else {
/* bufferの内容をコピーした、新しいスカラー値を作る。
長さに0を指定し、Perlに計算させる。*/
RETVAL = newSVpv(buffer, 0);
}
OUTPUT:
RETVAL
0225_gunzip ◆eiH/XdoCNg
NGNGrealpath2(path)
char *path
PREINIT:
char *buffer = NULL; /* わざわざmalloc()するバージョン*/
CODE:
if ((buffer = malloc(MAXPATHLEN)) == NULL) {
XSRETURN_UNDEF;
}
if (realpath(path, buffer) == NULL) {
ST(0) = &PL_sv_undef; /* リターンスタックの先頭にundefをセット */
} else {
/* 上の例と同じようにRETVAL = newSVpv...としても可
sv_2mortal()で、不要になり次第GCすることを許可する*/
ST(0) = sv_2mortal(newSVpv(buffer, 0));
}
free(buffer); /* いらないので解放(コピー済み) */
0226_gunzip ◆eiH/XdoCNg
NGNGvoid
realpath3(dest, path)
SV *dest
char *path
PREINIT:
char buffer[MAXPATHLEN];
CODE:
/* destが妥当なSV値であるかどうかテスト */
if (SvREADONLY(dest)) {
XSRETURN_EMPTY;
}
if (realpath(path, buffer) != NULL) {
/* sv_setpv()でbufferの内容をコピーする */
sv_setpv(dest, buffer);
}
/* おわり。間違ってもsv_grow() でバッファを引き延ばして、SvPVで得たchar *に直接書き込んではいけない*/
0227デフォルトの名無しさん
NGNGなるほど。
やはり SV を使わないとダメってことですね。
いまちょっと別作業入っちゃってすぐに確認できないけど、
あとで動いたか報告します。
さんくす。
ちなみに、手元ではなにも考えずこんな感じにしてました。
いま思えばまともに動くわけがないよなぁ。
情けない…。
void
hogehoge( dst, src )
wchar_t* dst
wchar_t* src
CODE:
{
dst[0] = NULL;
hogehoge( (unsigned char *)dst, (unsigned char *)src );
}
OUTPUT:
dst
wchar_t* で渡して (unsigned char*) に cast しているのは
この hogehoge 関数の仕様で仕方ないってことで。
0228223=227
NGNGさらにしかも書き込み時の tab って無視されるのね…。
0229_gunzip ◆eiH/XdoCNg
NGNGxsubppの吐いたCソースファイルを見てもらえば分かるけど、
/usr/local/lib/perl5/5.8.0/ExtUtils/typemap に従って、SV *からwchar_t *に変換する際に
wchar_t *dst = (wchar_t *)SvPV_nolen(ST(0));
wchar_t *src = (wchar_t *)SvPV_nolen(ST(1));
SvPV()でSVの文字列用の内部バッファを貰っているわけだから、
perlの管理をbypassして勝手に書き換えたら不味いと思う。たぶん
(SvGROW()で十分にバッファを引き延ばして、書き換えた後にSvCUR_set()で
適切に長さを設定しなおしてやれば問題はないかもしれないが)
...ところで、そのhogehoge()関数は、destの領域サイズを渡すことはできないの?
溢れた際、処置のしようがないけど
0230223
NGNGとりあえず質問部分にだけ返答します。
ここで書いたogehoge()関数って実際にはstrcpy(),strncpy(),strlen()に
相当するものがそれぞれ用意されていて、C で書くと
size_t len;
len = hogestrlen( (unsigned char*)src );
wchar_t* dst;
dst = (wchar_t*)malloc( len );
hogestrcpy( (unsigned char*)dst, (unsigned char*)src );
みたいな使いかたするものみたいなんです。
hogestrlen() は引数の src を変換したら何bytes になるかを返すっていう感じね。
まぁそういう仕様なので溢れたらさようならーなのが仕方ないっぽい。
0231_gunzip ◆eiH/XdoCNg
NGNGこんな感じでいいのでは?
hogehoge($dst, $src) or error_happend();
のように呼び出す、と。
void
hogehoge(dst, src)
SV* dst
wchar_t* src
PREINIT:
size_t len;
wchar_t *buffer;
CODE:
if (SvREADONLY(dst)) {
XSRETURN_NO;
}
len = hogestrlen((unsigned char *) src);
if ((buffer = malloc(len + 1)) == NULL) {
XSRETURN_NO;
}
hogestrcpy((unsigned char *)buffer, (unsigned char *)src);
sv_setpvn(dst, buffer, len);
free(buffer);
XSRETURN_YES;
#>229の(...)内は無視してね。perlgutsに駄目だとはっきり書いてあった。
0232デフォルトの名無しさん
NGNGrubyと比較してどうですか?
いろんな角度から、客観的な意見を聞きたいです。
できれば両方を使える人、答えてください。
0233デフォルトの名無しさん
NGNG0234rubyist@カラアゲうまうま
NGNG0235デフォルトの名無しさん
NGNGてめえの脳が糞、耳垢も糞?
0236デフォルトの名無しさん
NGNGの2つがあるとします。
(2)でpackage main;として、パッケージ変数を宣言して代入、これを(1)から参照しよう
とすると、(-w つけたときに)その変数は1回しか使われていない、打ち間違いでは?とい
うようなワーニング(possible typoとかいうやつ)が出ます。
パッケージ変数を(1)で宣言したり、(2)をmain以外のパッケージにして、(1)で完全修飾
で参照するとワーニングは出ないのですが、なんで同じパッケージなのにこんなワーニン
グが出るのでしょうか。これをuse vars以外で回避するにはどうすればいいのでしょうか。
いちいち別パッケージを作りたくないが、同じファイルにべたっと書くと読みにくい時
などに困っております。
>>232
メンバの定義の時、perlだと無名ハッシュや無名配列などを作ってその中にうまく配置し
なければならないので少し面倒です。C++だと単にブロックの中で宣言していくだけで
いいのでやや楽です。public/privateもきっちりしております。
rubyは知りません。
0237デフォルトの名無しさん
NGNGオブジェクト指向言語として必要な要素はすべて揃っている。
超強力なリフレクションで徹底的に動的に扱うことができる。
ってかんじかな。デメリットは包括的かつ統一されたクラスライブラリ
が付いてこないこと。これが痛い。
JavaとかRubyとかSmalltalkが気持ち良いのって
そーいうクラスライブラリが付いてきてるからなんだよな。
"クラスライブラリも言語の一部だ"なんて声もあるけど
言語を特色付ける一要素でしかない。でもユーザからすると重要。
うーむ。
0238196@カラアゲうまうま
NGNGperl5のOO記法が気に入らなくてrubyに走った。
0239デフォルトの名無しさん
NGNGその警告はコンパイル時に出されるものだからだね。
試しにperl -wc script.pl(コンパイルのみ)にしても警告は出るはずだよ。
というのも、Perlがコンパイル時に変数を見たとき、その(2)の変数は見えないんだよ。
requireは実行時になって初めて呼ばれるからね。
requireすればPerlにとっては変数が複数回使われていると分かるけど、
もう発行した警告は取り消せないというわけ。
でもたいていの場合、その警告はもっともだと思うんだよね。
今回はたまたまtypoしなったのかもしれないけど、
本当にtypoしても別ファイルだと気付きにくいでしょ。
だから、use strictをしてその使う変数をvars/ourで宣言するか、
その(2)をモジュールにしてuseで取り込むかした方がいいと思うよ。
0240デフォルトの名無しさん
NGNG「境界線はパトロールしない」んじゃなかったけ。
俺は、無理やり従来の枠組みに押し込もうとしたような記法があんまり
好きではないな。@ISA ってなんの略じゃろ。みたいな。
0241デフォルトの名無しさん
NGNG@ISAって何の略ですか?
0242デフォルトの名無しさん
NGNG0243デフォルトの名無しさん
NGNGまーたーぁ。
"is a"の略でしょ。
0244デフォルトの名無しさん
NGNGopen(INFILE, "<$infile") or die "ERROR : ファイルが開けません($infile)\n";
open(OUTFILE, ">$outfile");
binmode(INFILE); binmode(OUTFILE);
while (read(INFILE, $buffer, 1024)){
$buffer = s/対象文字列/置換文字列/g;
print OUTFILE $buffer;
}
close(INFILE);
close(OUTFILE);
とかは無理でした。
0245デフォルトの名無しさん
NGNGtypoじゃないなら板違い
0246デフォルトの名無しさん
NGNGあと日本語だとどうなのって気もするし。
0248デフォルトの名無しさん
NGNG真剣困ってます。教えてください。
0249デフォルトの名無しさん
NGNGは?
0250248
NGNG自力でがんばろ!
0251デフォルトの名無しさん
NGNG0252デフォルトの名無しさん
NGNGあと、Perlクックブックとかを買うと幸せになれるのでは?
0253デフォルトの名無しさん
NGNG0254デフォルトの名無しさん
NGNG__〃 〃 __〃 〃
. /´〃⌒ヽ⌒〃ヽ /´〃⌒ヽ⌒〃ヽ
/ ヽ / |
| | |. |
| -‐ '''ー | |. |
/ ‐ー くー | | 、 , |
( ( ´゚ ,r(、_>、 ゚')ヽ ( ( -―●-●|ヽ
ヽ/⌒っ .ト‐=‐ァ' ! ⌒っ ヽ/⌒っ ) ‥ )⌒っ
\ ノi、 ` `二´' 丿ヽ、ノ \ ノ ー=_ノヽ、ノ
|、` ''Iー-‐I 、| |、` ''Iー-I 、|
�� ̄つ �� ̄つ �� ̄つ �� ̄つ
0255rubyist@カラアゲうまうま
NGNG0256デフォルトの名無しさん
NGNG__〃 〃 __〃 〃
. /´〃⌒ヽ⌒〃ヽ /´〃⌒ヽ⌒〃ヽ
/ ヽ / |
| | |. |
| -‐ '''ー | |. |
/ ‐ー くー | | 、 , |
( ( ´゚ ,r(、_>、 ゚')ヽ ( ( -―●-●|ヽ
ヽ/⌒っ .ト‐=‐ァ' ! ⌒っ ヽ/⌒っ ) ‥ )⌒っ
\ ノi、 ` `二´' 丿ヽ、ノ \ ノ ー=_ノヽ、ノ
|、` ''Iー-‐I 、| |、` ''Iー-I 、|
�� ̄つ �� ̄つ �� ̄つ �� ̄つ
0257デフォルトの名無しさん
NGNGθ==〜〜
0258デフォルトの名無しさん
NGNGやる気の無いレスだ・・・
0259ハッカ飴
NGNGglob('*/*');
というようにワイルドカードを2つ使うとサブディレクトリのファイル名が全て手に入るよ。
さらに、
glob('*/*/');
だとサブディレクトリ名が全て手に入る。
0260デフォルトの名無しさん
NGNGls -l */*/*|glep xxx
とかやると簡易findになるし。
0262196@カラアゲうまうま
NGNGglobbingの質問だったのか…。
ディレクトリの深さを調べるとかかと思ったよ。
しかしそれだと同一レベルのものしか見付からないから、File::Findを使うべきでは。
0263デフォルトの名無しさん
NGNGわけのわからんことを言ってる奴が多すぎる。
0264デフォルトの名無しさん
NGNG色を指定して表示させることはできるのでしょうか?
0266デフォルトの名無しさん
NGNG0267rubyist@カラアゲうまうま
NGNG0268デフォルトの名無しさん
NGNGhttp://pc3.2ch.net/test/read.cgi/tech/1017736187/
が前スレ=Pert1ってことでOK?
0269デフォルトの名無しさん
NGNG>Copy the module into your Perl's lib directory.
>That'll be one of the directories you see when you type perl -e "print qq(@INC)".
DOS窓なんかで perl -e "print qq(@INC)" って打って出てきたディレクトリに
放り込めと。
0270デフォルトの名無しさん
NGNGhttp://www.bagley.org/~doug/shootout/bench/fibo/fibo.perl
>perl fibo.perl 10
とすると、
89
が返ってきて計算がおかしい様なんですが、なんででしょうか。
(55が返るはず)
ちなみに30渡すと、
>perl fibo.perl 30
Out of memory!
Error: Runtime exception
なんなんだろう・・
0271デフォルトの名無しさん
NGNG最初の三項演算子の比較を<=2にすればあんたがほしい答えになる。
後者はあんたの環境が悪い。
余計な話だがuse integerを使う意味もないし、すぐ桁あふれを
起こす使い物にならないスクリプトだと思う。
この種の処理ならBigIntを使うべき。
0272rubyist@カラアゲうまうま
NGNG0273デフォルトの名無しさん
NGNGあんたまっとうなレスもするんだな。ちょっと意外。
グチャミソゴミ吐き言語のサンプルとしては>>270のリンク先は
あまり適切ではないと思うが。
0274デフォルトの名無しさん
NGNG糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語
糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語
糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語
糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語
糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語
糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語
糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語糞言語
0275rubyist@カラアゲうまうま
NGNG272は273ではありません。
271は変質者か?カスはどっかいけ
0276rubyist@カラアゲうまうま
NGNG煽りしか出来ねえ癖にガタガタうるせえんだよ。ヴォケ!と伝えたいのですが。
0277rubyist@カラアゲうまうま
NGNG0278rubyist@カラアゲうまうま
NGNGもし君たちが、Rubyに入教すれば
座禅をしたままで、空中浮遊をすることができるようになる。
matzは偉大なり。紙さまです。今日は電車を使わず
座禅で出勤することができました。これもRubyのおかげです。
Rubyに入れば、永遠の命を手にすることができるのです。
0279デフォルトの名無しさん
NGNG警視庁のHPから通報しました。こういう類のことは予告
でもつかまるんだよね。犯罪はだめぽ。
0280rubyist@カラアゲうまうま
NGNG0281270
NGNGうーん、
http://www.bagley.org/~doug/shootout/bench/fibo/fibo.perl
このコードがおかしいとなると、このサイトのベンチ結果は
当てにならないってことでいいんですかね・・?
環境はPerl for Win32 Build 316 - Built 23:50:22 Mar 16 1998です。
ちなみに<=2にしても30は計算できませんでした。
>>272
ベンチ用のコードなので、あえて再帰を使ってるのは納得できる
理由だと思いますが?
0282デフォルトの名無しさん
NGNG漏れの環境では条件を<3にすると正常に計算できた。
0283デフォルトの名無しさん
NGNGバカ?
0284デフォルトの名無しさん
NGNGmy_defun hoge($foo, $bar) { BODY };
なんて書くと
sub hoge($$) {
my ($foo, $bar) = @_;
eval { BODY };
}
みたいな文に展開されるサブルーチン "my_defun" みたいのは書けないでしょうか?
0285デフォルトの名無しさん
NGNGなんでこんなんが必要なのか分からんが
sub my_defun {
my($name) = $_[0] =~ /^([^\t\x20(]+)\s*(?:\(((?:(?:[\$%&@][^\t\x20,]+)(?:,\s*)?)*)\))?$/;
my @arg = split /,\s*/, $2;
my $code = $_[1];
for (@arg) {
$p = substr($_, 0, 1);
if ($p eq '$') { $_ = "my $_ = " . 'shift;' }
elsif ($p eq '@') { $_ = "my $_ = " . '@{shift @_};' }
elsif ($p eq '%') { $_ = "my $_ = " . '%{shift @_};' }
elsif ($p eq '&') { $_ = 'my $' . substr($_, 1) . ' = shift;' }
}
eval join '', (
'sub ', $name, ' {',
@arg,
$code,
'}',
'*::', $name, ' = \\&', $name, ';'
);
}
my_defun 'hoge(@foo, $bar)', q{ print join '/', $bar, @foo };
my @hoge = ('age','sage');
hoge(\@hoge, 'moge');
プロトタイプ宣言はコンパイル時にのみ有効だから、
動的生成時は無視される。
0286270
NGNG0287デフォルトの名無しさん
NGNGやけにCGIを意識した書き込みだな。
0288270
NGNGOut of memory!になるのはおかしいよね・・・。
perlで数値計算させるのがまちがってるんでしょうか。
0289rubyist@カラアゲうまうま
NGNG0290デフォルトの名無しさん
NGNG0291270
NGNG0292rubyist@カラアゲうまうま
NGNG0293270
NGNG掲示板を私物化ですか?>rubyist@カラアゲうまうま
0294270
NGNGreturn $_[0] < 2 ? $_[0] : fib($_[0]-2) + fib($_[0]-1);
ですよね。やっぱベンチはでたらめかな。
0295デフォルトの名無しさん
NGNG0296デフォルトの名無しさん
NGNG自作自演もほどほどにな。
0298デフォルトの名無しさん
NGNGいちいち相手するな。
俺は Perl よりむしろ Ruby を使うほうだが、rubyist を騙って粘着する基地外は
氏んでもらいたい。
C等のコードを見ると同じ間違いをしているから、ベンチマークの結果は正しいと思うよ。
といっても、ベンチマークの結果を鵜呑みにしていいかどうかはまた別問題だけどね。
0300デフォルトの名無しさん
NGNG0301棄教者 ◆egKIKYO7cg
NGNGwhile(1) {
print 'rubyist@カラアゲうまうまは名無しさん@カラアゲうまうまとは別人ですよね?';
}
0302デフォルトの名無しさん
NGNG学校の先生とPerlについて話をしていて、ウェブで複素数の計算できるようなもの作ってみてくれと言われたんですが、いかんせん複素数をどうしたら扱えるかわからなく悩んでいます。
本はもちろんのことgoogleで調べてみましたが全くと言っていいほど情報が無く、ダメでした。どなたかご存知ないでしょうか?
0303デフォルトの名無しさん
NGNGラクダ本を買え
0304デフォルトの名無しさん
NGNG式[(5i - 2)(2i + 1) ] = 解[ ]
とか?
0305302
NGNG早速本や行って見てきます。
田舎だから売ってないかも…
そしたら都会にお出かけしてきます。
0306棄教者 ◆egKIKYO7cg
NGNG3+2i だったら @hoge = (3, 2) とする。
で四則演算をやる関数を
×( @hoge, @fuga )
とかって感じで呼び出せるように定義すればいいんじゃないかと思われ。
0307デフォルトの名無しさん
NGNG素直に標準libを使ったほうが簡単だと思うが?
0308デフォルトの名無しさん
NGNG「こんなコードどこかにないかな〜」と思ったら、まず
http://search.cpan.org/
ここで検索するんだ。今回の場合はComplexといれて検索。
http://search.cpan.org/author/JHI/perl-5.8.0/lib/Math/Complex.pm
と一瞬にして出てくる。
しかしだなぁ、
http://www.google.co.jp/search?q=perl+%E8%A4%87%E7%B4%A0%E6%95%B0&ie=UTF-8&oe=UTF-8&hl=ja&lr=
で一発なところを見ると、本当に検索したのかと小一時間問い詰めたい。
ウェブの使い方と厨学生レヴェルの英語力があれば、ラクダ本は無用。
漏れ的には「オブジェクト指向Perlマスターコース」を勧めるが、
基本的に「本を買え」ってだけの香具師は信用するな。
0309デフォルトの名無しさん
NGNGだから、>>302にはあんたがいう程度のスキルもないってことだよ。
Math::Complexはperlの標準libに入ってる。
本来、探すもへったくれもないだろうが。
0310デフォルトの名無しさん
NGNG確かに、googleで検索する前に、
perldoc perlmodlib
で名前を調べて、
perldoc Math::Complex
とやってもいいな。
0311rubyist@カラアゲうまうま
NGNG0312デフォルトの名無しさん
NGNG0313デフォルトの名無しさん
NGNG0314デフォルトの名無しさん
NGNGキモッ!
0315302
NGNG昨日はMath::Complex.pmまでは探し当てたんですが、それから立ち往生してしまい…
いわゆるモジュールなんてPerlの初心者本でcgi-libとjcode変換ぐらいしか知らなくて、モジュールとはどんな風に使うのか?というところで悩んでしまいました。
それでComplex.pmを落としてきて、ルートの計算や階乗まではいけたんですが、肝心の複素数を扱うところで挫折と言った具合です。
まぁもう少し難しそうな本を読まないと置けないのかと思いました;´Д`)
0316302
NGNG>>304そうですそんな感じです。あと複素数同士の割り算やなどです。
>>306さんのは簡単な計算ではいいのですが、iをそのまま虚数として扱えるフォートランのような感じでやれないものかと思っていました。
今のところ306さんのようなiを文字として最後に引っ付けてやっているのですが、やはり限界が訪れてしまい皆さんに聞いてみようと思ってのです…
お世話かけて申し訳ない。もう少し頑張るデス!
0317302
NGNGいままで3*iを3iとして打ち込んでいました。
全くもって情けない話ですみません |д゚)
0318一見
NGNGという配列の各要素の第1項でソートするには、
@data=map{$_[0}sort{$a->[1] <=> $b->[1]}map{[$_, split /,/]} @data;
とする。
んで、配列から重複した要素を取り除くには
@array=grep(!$count{$_}++, @array);
と書きます。
上の@dataのような2次元配列(?)の各要素の第1項で重複した要素を取り除くにはどう変形させたらいいか分かる人教えてください。
-> の使い方がイマイチようわからんです。
0319デフォルトの名無しさん
NGNGまず、それは二次元配列ではなく、単なる一次元配列だ。
普通は、
my $data =
[['A', '7', '緑'],
['C', '6', '青'],
.... ]];
とする。もしくは3つのうちどれかをキーにした無名ハッシュへのリファレンスを
要素にもつ無名配列にする。漏れなら後者だな。重複する可能性の少ないデータ、
この場合は2番目の数をキーにする。単なる数だから配列でもいいかも知れない。
まずはデータ構造の見直しを推奨するが、どうしてもこれでなければならないのか?
0320一見
NGNG@dataの構造でないといけないというわけではないです。
1.要は、3つの項からなる要素をひとつのカタマリとする
2.各要素のN項に着目し、重複した要素は除く
ということが満たされるということをしたい。
無名配列とかについてはちょっとまだ使ったことがないというレベルです。
my $data の形の方がわかりやすいかな?
0322一見
NGNG('A,7,緑','C,6,青','B,4,赤')
0323曽爾 久理恵
NGNGそのなかのどれを選んでもいい、っていうなら、たとえば、
foreach $data (@data) {
if ($data =~ /^(.)/) { # これだと「最初の一文字」だが、まあ。
$hoge{$1} = $data;
}
}
として
foreach $hoge (sort keys %hoge) {
print $hoge{$hoge}
}
とかするとこれはPerlらしい泥縄でuniqして最後に現れた要素だけとりだせると。
もっと簡潔に書ける人大募集。
0324デフォルトの名無しさん
NGNG複素数や文字式を格納した変数を有効桁数で表示してみたいんですけどどうしたらよいですかね?
printf や sprintf でやってみたけど文字の入った式は無視されちゃって…
2.063835iというのを2.06iに直して出力できないものっでしょうか?
今の時点では変数内でiを探して抜き出し、数字部分だけで有効桁にしてiを付けてやるというのしか思いつきません。
0325デフォルトの名無しさん
NGNGs/(\d+\.\d+)/sprintf("%.2f",$1)/eg;
じゃダメ? :-)
0326デフォルトの名無しさん
NGNGa+b.txtみたいなファイルを出力にするには
どうしたらいいんでしょうか。
a.txt
1 1 4 3
5 2 2 8
2 8 6 9
b.txt
3 2 1 9
0 2 1 1
3 0 2 8
a+b.txt
4 3 5 12
5 4 3 9
5 8 8 17
0327デフォルトの名無しさん
NGNGperldoc Math::Complex して、
The first one is "format", which is a sprintf()-style
という行を検索してみてください。それらしいことが書いてありますたよ。
perldoc Math::Complexにやり方が書いてあるけど…。
英語が分からなくても、一度ざっと目を通すくらいはしてね。
Math::Complex->display_format(format => '%.2f'); # Complexオブジェクト全般に有効
my $cplx = new Math::Complex;
$cplx->dislay_format(format => '%.2f'); # このオブジェクトにのみ有効
>>326
簡単な方法は無いから、力ずくでやるしかないね。
0330デフォルトの名無しさん
NGNG配列に[ ]で区切って数字を入れていって、
@a[i]と@b[i]を足して
printする。
0331326
NGNG0332デフォルトの名無しさん
NGNGMath::Matrixを使いなされ。
0333326
NGNG(ノ゚ο゚)ノ オオオオォォォォォォ-そんな便利なものが!
0334デフォルトの名無しさん
NGNG>>308にも書いたが、とにかく*自分でコード考える前に*、
http://search.cpan.org/
で検索すれ。
0335326
NGNG0336324
NGNG只今エキサイト翻訳しつつ、解読中です。
なんとなく解りかけていたので、試行錯誤しつつやってみます。
( ● ´ ー ` ● )
0337rubyist@カラアゲうまうま
NGNGs::::::::::
0338デフォルトの名無しさん
NGNG0339デフォルトの名無しさん
NGNG自分のLinuxマシン(RedHat7.3、Perl5.6.1)では
拡張子の無い単一のファイルができるんだけど
プロバイダ(OS不明、Perl5.6)上で同じの実行すると
拡張子が.dirと.pagの2つのファイルができる。
相互でDBMファイルをやり取りしようという計画だったんだけど
無理なのかなあ。
違いが生じる原因はOSの違い?
なんか解決する方法あったら教えて。
0340デフォルトの名無しさん
NGNGなんで 1; が無いとだめなんでしょう?
0341rubyist@カラアゲうまうま
NGNG>>340 そういう糞仕様だから。
ぺrlは区塩
0342デフォルトの名無しさん
NGNGそれは変数のスコープについてだ!
なんで local な変数がグローバルなスコープを持ってて、
本当にローカルなスコープの変数を使いたいときには
my を使わないといけないんだ!
混 乱 す る だ ろ う が !
0343デフォルトの名無しさん
NGNG0344デフォルトの名無しさん
NGNG0345デフォルトの名無しさん
NGNGsub サブルーチン名 {
処理
}
って書いてあるんだけど、
sub サブルーチン名 (\%$) {
処理
}
みたいに ( ) がついてるのはどういう意味?
0346デフォルトの名無しさん
NGNG最後に真の値を返さなければならない仕様で、その一番簡単な方法だからだ。
UNIX系の連中が大好きな「慣習」ってやつ。
>>342
myは後付けだからな。一応今でもlocalに使い道はあるぜ。漏れがよくやるのは、
作ってる最中のコードの頭で$DEBUG = 1としておいて、テストが済んだサブルーチン
の頭でlocal $DEBUG = 0ってやると、そのルーチンのデバッグメッセージだけ
飛ばせる。
>>345
Cの関数プロトタイプみたいなもんだ。なくてもいいよ。
0348初心者用勉強サイト
NGNGhttp://www5a.biglobe.ne.jp/~n_rieko/perl/
PerlとCGI入門
http://pc-information.com/perl.html
0349デフォルトの名無しさん
NGNG' と :: って同じものなの?
0350デフォルトの名無しさん
NGNGperl5
0352デフォルトの名無しさん
NGNGX-Mailer : RIGHT Mailer
MAIL To: root\@test.com (以下略)
ってな感じでメールの内容が入ってるんすけど、これをsendmailに渡す時って
どうやったらいいんでしょうか?どーもスマートな方法がわからないんです・・・
0353デフォルトの名無しさん
NGNG>>334
0354352
NGNGすいませんでした・・・見つけますた。
0355デフォルトの名無しさん
NGNG0356216
NGNGActivePerlを使っているのでFile::Tailが使えないんです。
0357rubyist
NGNG0358デフォルトの名無しさん
NGNG0359rubyist@カラアゲうまうま
NGNG0360デフォルトの名無しさん
NGNG0361nobodyさん
NGNGもし、それならevalつかうんだけど、、、
0362デフォルトの名無しさん
NGNGデバッグメッセージに自分がいるサブルーチンを含めることは可能だろうか?
たとえば
sub hoge {
(snip)
print_debug_msg($foo); # $foo = 1
(snip)
}
で
hoge: 1
みたいな
0363rubyist
NGNG0364デフォルトの名無しさん
NGNGくだらん質問が来たらおれもあんたを騙ろうかな(w
>>363にあるようにcaller()が使える。
内部でcallerを使ってるだけだけど、標準ライブラリCarpにあるconfessとcluckは
メッセージと共にスタックフレームも出力してくれるから便利だよ。
0366一見
NGNG教えていただきありがとうございます。
配列の形式を変えて、以下の形としました。
@data=(["A","7","緑"],["C","6","青"],["B","4","赤"],["A","9","紫"],["A","2","黄緑"],["B","10","黄"],["C","3","青紫"]);
この形で、
1.各要素の1項目目でソートをする
@data=(["A","7","緑"],["A","9","紫"],["A","2","黄緑"],["B","4","赤"],["B","10","黄"],["C","6","青"],["C","3","青紫"]);
2.各要素の1項目目が重複した要素を取り除く
@data=(["A","7","緑"],["B","4","赤"],["C","6","青"]);
という結果を得たいのですが、いい案はないでしょうか?
use strict;
use Data::Dumper;
our @data=(["A","7","緑"],["C","6","青"],["B","4","赤"],["A","9","紫"],["A","2","黄緑"],["B","10","黄"],["C","3","青紫"]);
# 1
@data = sort{ $a->[0] cmp $b->[0] } @data;
print Data::Dumper->Dump([\@data], ['*data']);
# 2
# ただし何が残るのかは指定できない
{
my %t;
@data = grep{ ! $t{ $_->[0] }++ } @data;
}
print Data::Dumper->Dump([\@data], ['*data']);
__END__
0368デフォルトの名無しさん
NGNGいい案って……やればいいだけじゃん。
0369デフォルトの名無しさん
NGNGperlを使用するんけど、リーダーがOOを前面に押し出した作り
にすると言い出しまして...
0370rubyist
NGNG0371デフォルトの名無しさん
NGNGOOPサポートのあるPerl5でOOPが無謀だなんてことはありません。
0372デフォルトの名無しさん
NGNG0373rubyist
NGNGgtk_hoge_do_something(GTK_HOGE_CAST(obj), args)なんか毎度やってられるか。
>>372 Walrusはとっくに実用レベルですが? Perlにありましたっけ?
下層階級・業界のドカタの皆さんにはPerl見たいな糞言語がお似合いです。
0374デフォルトの名無しさん
NGNGメンバーがみなperl者なら、行くとこまで行っちゃえば。
0375デフォルトの名無しさん
NGNG0376デフォルトの名無しさん
NGNG>Walrusはとっくに実用レベルですが?
実際に稼動してるとこ見たことないぞ。
つーか本家に行ってもC++に書き直される運命ですた。
0377ぅぁぁぁ
NGNG「オブジェクト指向は、それが意味のあるときだけ使い、そうでないときには避けること。」
それじゃ、開発がんばってね。
0378デフォルトの名無しさん
NGNG0379デフォルトの名無しさん
NGNG頼むから偽rubyistは相手せずに放置してやってください。
0380デフォルトの名無しさん
NGNGって何のために使うんでしょうか?
ググってみたけど、断片的にしか書いて無くてイマイチ「こう言う時に使う」
とか「こう言う場合の為にある」とか言う感じが掴めず胸が気持ち悪くて
どうしても我慢なりません。
ハァ?とか言わないで教えてもらえると本当に嬉しいっす。
0381ドンタコス
NGNGだとしたら、それは空っぽなので、特に用途はなくて、
ゴミがたまった配列をリセットするときに使うわけじゃよ。
0382棄教者 ◆egKIKYO7cg
NGNG0はどういうときに使う数ですか
と質問するのに似ているな。
----
嘲笑している訳じゃなく、マジレスなのでそこのところよろしく。
0383rubyist@カラアゲうまうま
NGNG0384rubyist@カラアゲうまうま
NGNGWebProgに引きこもって出てくるな。
0385rubyist@カラアゲうまうま
NGNGPerl,HSP,Delphiとかを隔離すれば少しはましになるだろうに。
0386デフォルトの名無しさん
NGNG基地外がいるスレはここですか?
0387rubyist@カラアゲうまうま
NGNGPerl とか HSP とか、そーゆー効率の悪い言語を使ってる人たちの
立場で考えてみる必要もあるのか。
0388デフォルトの名無しさん
NGNG0389デフォルトの名無しさん
NGNGrubyのソースを逐一見せてくれたまえ。そうしてくれりゃ
こっちも比較のしようがあるもんだ。
0390デフォルトの名無しさん
NGNG書けないんだよ。rubyは知らないから。放っといてやれ。
0391デフォルトの名無しさん
NGNG0392デフォルトの名無しさん
NGNG0393デフォルトの名無しさん
NGNGガンバ!!
0394デフォルトの名無しさん
NGNG真っ先にRubyが隔離される予感。
0395デフォルトの名無しさん
NGNGおまえとカラアゲ君だけ隔離されれば、それでじゅうぶん。
0396デフォルトの名無しさん
NGNG追いつめると何するかわからんから困るよな。
0397デフォルトの名無しさん
NGNG変数にメタ文字が含まれてしまう場合、何か良い方法はあるのでしょうか。
ex. $foo = "aaa?bbb" のとき "aaa?bbb" =~ /$foo/ をマッチさせる方法
0398デフォルトの名無しさん
NGNGこうすると、展開されないYO!
0399デフォルトの名無しさん
NGNGおお!ありがとうございます!!
0400デフォルトの名無しさん
NGNGたとえば"aaa\tbbb\nccc"と"aaa\\tbbb\\nccc"を相互に変換する関数ってありますか?
0401デフォルトの名無しさん
NGNG0402400
NGNG0403デフォルトの名無しさん
NGNG0404400
NGNG一応エスケープ処理は書いてみました。
でも120%車輪の再発明っぽい気がしてきて背筋が寒くなるので、
誰か情報ください。
0405400
NGNG"aaa\\tbbb\\nccc"→"aaa\tbbb\nccc"
こういう時の処理って、どうやったら正規表現一発でできるのですか?
0406400
NGNG'\\\\' => '\\',
'\\t' => '\t',
'\\n' => '\n',
'\\r' => '\r'
}
s/(\\\\|\\t|\\n|\\r)/$escapelist{$1}/g;
こうですかね?
0407400
NGNGやっぱり車輪の再発明の予感。
$str = "aaa\nbbb\tccc\\ddd\\\\eee";
%reescapelist = (
'\\' => "\\",
'\t' => "\t",
'\n' => "\n",
);
%escapelist = (
"\\" => '\\',
"\t" => '\t',
"\n" => '\n',
);
print "first:\n" . $str . "\n";
$str =~ s/([\\\t\n])/$escapelist{$1}/g;
print "escape:\n" . $str . "\n";
$str =~ s/(\\\\|\\t|\\n)/$reescapelist{$1}/g;
print "reescape:\n" . $str . "\n";
0409デフォルトの名無しさん
NGNGCPANってなんて読むんだ?
しーぱんでいいのか?
0410rubyist@カラアゲうまうま
NGNGどうでもいいだろ
0411デフォルトの名無しさん
NGNGクパンに決まってるだろクパンに
0412デフォルトの名無しさん
NGNG0413デフォルトの名無しさん
NGNG0414デフォルトの名無しさん
NGNG0415デフォルトの名無しさん
NGNG「プログラミング Perl 改訂版」とあるのですが、
アマゾンで調べると、さらにVolume1とVolume2があるらしいのです。
前者が古くて、あとから二冊に分かれたとかなんでしょうか?
近くの本屋にはオライリーはあってもプログラミングPerlはないので確認できず、なのです。
中身全くわからずに二冊買うのはちょっと勇気いるので、
現状わかる方教えてくださいまし。。。
0416デフォルトの名無しさん
NGNGそのとおり
0417ドンタコス
NGNG一冊のは古いの。
オライリーのサイトはなんだかヘンだね。
二冊のが出る直前には予約ページみたいなのもあったんだけど、
それを引っ込めて、古いのがそのまま載ってる。
0418415
NGNG二冊に分かれるくらいだから結構詳しいのでしょうか。
大変そうだけど役に立つだろうし、気長に読んでみますです。
丁寧にありがとうございました。
0419Perlな名無し@一年生
NGNG"はじめてのPerl"を一通り読んで、
「これってホントに"はじめて"なんかい〜?!」
っと思いました。
Perl全体からすれば初めても同然なんだろうけど、
いきなり(ではないのですが、)読むにはつらいです。
特に"Cの関数と同じく…"という表現がなんども出てきて、
その都度、「C知らんねん!!」と心の中で叫びました。
C知らないでPerlやるのはどんなもんか、っていうのが世間一般なんでしょうか?
プロセスとかも使ったことはあったのですが、
あたかも"プロセスぐらい知ってるよね?"といった感じでした。
確かにそういう断り書きはあったのですが…。
Perl理解するには他の分野の知識も必要だと思うのですが、
大体どのような流れで学んでいけば良いと思われますか?
0420棄教者 ◆egKIKYO7cg
NGNGその本は Perl が初めての人向けの本なので UNIX とか C とか
そういうのは一般教養だという前提に立っています。
他の参考書見たら?
推薦するのは>>167で紹介した本。
Perl 勉強するなら初めは Windows2000/XP がインストールされたマシンの
電源の入れ方と切り方が分かっていればいいんじゃないの?
0421デフォルトの名無しさん
NGNGしかも金が無かったから、別のPerl本が買えなかった。後悔と絶望が心を埋めた。
で、しかたがないから一週間かけて、「初めてのPerl」に書いてあることを表にしようと思った。
そう、こんな感じでひたすら書いていったんだ。
my $hoge = @_; #@_は引数のリスト。スカラーとリストの代入。最初の要素だけが取れる。
my $hoge = shift; #shiftを使う方法。@_がひとつずれるので注意。
my ($foo, $bar) = @_; #リストとリストの代入。3つめ以降は取れない。
......
7日目の夕方。全部書き終わったとき、「初めてのPerl」の偉大さを悟ったよ。
そして、やっとたまったバイト代で、俺は「プログラミングPerl」を買ったのさ。
0422デフォルトの名無しさん
NGNGその表を売り出せ。再帰的再生産とでも言うのだろうか。
0423デフォルトの名無しさん
NGNGそのアプローチは正解ですな。あらゆる勉強の基本は写経です。
所詮人間の脳は泥臭い肉の臓器。泥臭い方法でしか知識は身につきません。
しかし7日で写経してしまうとは、あんたは真面目な人ですな。高学歴?
0424デフォルトの名無しさん
NGNGスィーペェン
0425rubyist@カラアゲうまうま
NGNGツェーペーアーエン
0426デフォルトの名無しさん
NGNG中学校もでてない、からあげ君がドイツ語使ってる
明日、雪だな。
0427rubyist@カラアゲうまうま
NGNGもうすぐ「PerlからRubyへの移行ガイド」という本が出るよ。
Perl->Pythonの本は既にピアソンから出てるし。
Rubyist >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Perler
0428rubyist@カラアゲうまうま
NGNG「PHP/Javaで出来ることはPerl+DBIで出来る」なんていう馬鹿は
「XMLで出来ることはLispで出来る」と言っている人と
同レベルだと思う。
さらなる高みを目指すならRubyを学ぶべき
0429デフォルトの名無しさん
NGNG0430rubyist@カラアゲうまうま
NGNGやっぱ世間はクズの集まりなんだろうか
Lisp=XML と公言するのがはずかしいという認識すらない。
UNIX天動説厨房といえる。多少なりともXMLを勉強したなら
namespaceとかencodingとかの重要性がわかってもよさそうだが。
XMLが世間で普及しない訳だよな、これは。
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Lisp >>> Perl
0431rubyist@カラアゲうまうま
NGNGところが、あのコンピュータ界の癌細胞というべきアニオタの白豚Larryが作成したPerlは何でしょうか。
あまりにも、醜悪かつ悪質かつ脆弱ではありませんか、欠点だらけで、もはや言語としての体をなしていません。
また、Perlコミュニティの対応は、完全秘密主義かつ傲慢ではないでしょうか。
できれば、Perlような粗悪品を使いたくはありません。
しかし、まわりを見渡すとみんなPerlです、そうなると粗悪品を使わざるえないです。(特に仕事ですと)
なぜでしょうか?
Perlは、書籍の数が多いのです、簡単に使えるのです、たいしたことをしなければですが(わら
Perlは、Linuxでいえばタコ以下の人々に広く使われているのです。
Perlユーザを嘲弄し、排除してゆくのがわれわれRubyistの務めではないでしょうか?
そのための場として2chにおいて長らく活動してきた結果、「Perlは糞」
「Ruby以外の言語は糞」という認識は定着し始めてきたように思います。
同時に、GUIがなければ何もできない窓厨房の玩具であるDelphiスレッドにも執拗な攻撃を加え、
Delギコという生意気な固定を追い出すことにも成功しました。(かなり前ですが
これからもRubyの輝かしい未来のために活動を続けて行きたいと思いますので、さらなる声援と愛顧をお願いします。
0432rubyist@カラアゲうまうま
NGNGワタシ、ニホンゴワカリマセ〜ン
0433デフォルトの名無しさん
NGNGみんな、カラアゲは、放置しろ。
0434デフォルトの名無しさん
NGNGnot保守的==荒らし
のから揚げくんてすてきだなぁ(藁。
0435デフォルトの名無しさん
NGNGとこがたくさんあるとこ。
0436デフォルトの名無しさん
NGNG『はじめてのPerl』が書かれた頃には、現在のように、Web関係で広
まって、419や429のような知能の低いうすらバカがPerlを使うことに
なるなんて想像もできなかったのかな。
0437デフォルトの名無しさん
NGNGウスラ馬鹿でもUNIXを勉強していた、が正解。
生きた証拠が漏れや喪前。
0438デフォルトの名無しさん
NGNGPerlもRubyもPythonも一緒になれるし、
なんなら、隔離されてどっか逝ってしまったJavaScriptも混ぜられる。
どうよ?
0439デフォルトの名無しさん
NGNGだとしても
perler > rubyist
は間違いないな。
0440ドンタコス
NGNG文章もよく読むと「?」だし、
さらに一生懸命このスレにカキコしてるし。
俺がRuby最高、Perl糞って思ってたら、
こんなスレに出入りする時間も惜しいと思うけどな。
ほんとはRubyが大嫌いなやつなのでは?
もしくはまともなスクリプト言語を設計したいワナビーの能無し君が
Ruby作者にジェラシー感じてとか。
(ボクのほうがみんなに注目されるべきだ、みたいな)
0441デフォルトの名無しさん
NGNG君の考えは正しいと思うが、もう放置しようや。
0442デフォルトの名無しさん
NGNGそんなのPerlユーザの自作自演に決まってるだろ。
ホントにゲスな奴等だな。お前らって
0443Rbubty!!!!!!!
NGNG0444デフォルトの名無しさん
NGNGどうせスクリプト同士
目くそ鼻くそだよ
0445デフォルトの名無しさん
NGNGどうせスクリプト同士
目くそ鼻くそだよ
0446
NGNGrequireせずにそのコードをメインスクリプトに記述してPerlを走らせる。
どちらが速い? 前者はrequireする分、遅くなるだべか?
0447rubyist@カラアゲうまうま
NGNG0448デフォルトの名無しさん
NGNGそりゃrequireした方が遅いには遅いでしょうが、大したことはありません。
そこまでタイミングがシビアなプログラムならば、そもそもperlで書いてはいけません。
0449デフォルトの名無しさん
NGNG0450デフォルトの名無しさん
NGNG文字数ならlengthでいけるのですが。。。
一度保存してstatで取得すればよいのですが、それだとサイズ取得が
保存後になってしまって、ちょと困るのです。
どうかアドバイスをくださいです。
0451デフォルトの名無しさん
NGNG'\0'の事を言っているなら、テキストだろうとバイナリだろうとlengthで問題ないはずだけど。
0453デフォルトの名無しさん
NGNGbinmode(FH); でデータ取得して、length
0454デフォルトの名無しさん
NGNG末尾の改行処理を行っていたのですが、
chompが削るのはLFだけなんでしょうか?
バイナリ見たらCRだけ残ってたのですが…う〜む。
あと、末尾処理を\r\n,\r,\nの三つで行うことがあると思うのですが、
どのコードが送られてくるかは何によって決まってるんでしょうか?
サーバーのOSか、それともクライアントの方が関係してるんでしょうか?
ちなみに私のOSは例によってWindowsです。。。
0455デフォルトの名無しさん
NGNGchop ならちゃんと削ってくれない?
0456デフォルトの名無しさん
NGNGprint $hoge;
って括弧がいらなくて、私のつくた関数は
myfunc($hoge);
って括弧がいるですか?
0457rubyist@カラアゲうまうま
NGNG順序を変えてみろ
0458デフォルトの名無しさん
NGNG0459デフォルトの名無しさん
NGNG0460デフォルトの名無しさん
NGNGchompはその時の$/に入っている値を削る。このデフォルトが\nだ。
\r\nを削りたいなら、chompを呼ぶ前に$/にセットすれ。
どのコードが来るかは、そりゃ出力するプログラムで定義されているように来る。
Windows上でprint "moge\n"; と書けばその通りに送ってくる。
>>456
perlの仕様だ。ほとんどの組み込み関数は演算子のように使えるようになっている。
しかし分かりにくい時もあるので漏れはわざと括弧をつけている。
0461デフォルトの名無しさん
NGNGどうかは関係ない。
0462デフォルトの名無しさん
NGNG0463456
NGNG0464デフォルトの名無しさん
NGNG括弧無しでの関数呼び出すとき、その関数が実際に定義されている必要は無いよ。
宣言されている必要はあるけどね。
0466デフォルトの名無しさん
NGNG0467デフォルトの名無しさん
NGNGどうしたらいいですか?
0468デフォルトの名無しさん
NGNG0469デフォルトの名無しさん
NGNG分かりました。ありがとうございました。
0470デフォルトの名無しさん
NGNG0471デフォルトの名無しさん
NGNG$_ はグローバル変数だから、だと思う・・・
0472デフォルトの名無しさん
NGNGwhile ( <> ) {
print tell( STDIN ) . "\n";
}
ってやったら全ての行で -1 が返ってきてるみたいなんだけど…。
0474デフォルトの名無しさん
NGNGできますたよ。< で適当なファイルを読ませてみなされ。
一行ごとにカラムの数がちゃんと表示されますたよ。
0475472
NGNG472のソースをhoge.plとすると
$ cat nantoka.txt | hoge.pl
とすると -1 が返ってくるのです。
474さんの通り
$ hoge.pl < nantoka.txt
だとうまく行くのは確認しています。
こういうものなのかな?。
0476デフォルトの名無しさん
NGNG#!/usr/bin/perl
open(MOGE, "cat test |");
while ( <MOGE> ) {
print tell(MOGE) . "\n";
}
でもだめですた。
perldoc -f tell:
The return value of tell() for the standard streams like the STDIN
depends on the operating system: it may return -1 or something else.
tell() on pipes, fifos, and sockets usually returns -1.
ということなので、パイプでは使えないんじゃないですか?
0477472=475
NGNGやっぱりだめなのかー。
情報さんきうでした。
っつーか手元の環境の perldoc あたりの ver が古くて
perldoc -f tell
しても >>476 の結果が出てこない。
鬱だ。
0478デフォルトの名無しさん
NGNGman lseekでもしてみろ。
0479デフォルトの名無しさん
NGNGパターンにマッチした文字列は$&に入ると聞いたので
$string="1234+()";
while($string =~ /[1-9][0-9]*/g ){
$&+=1;
print"$&";
}
としても1235は表示されませんでした。
1235と表示されるようにするにはどうすればいいですか?
マッチした文字列を整数として扱うというのはできますか?
0480デフォルトの名無しさん
NGNGModification of a read-only value attempted at a.pl line 3.
こういうエラーになるんだけど。
ちなみにこうすれば1235が表示される。
while($string =~ /[1-9][0-9]*/g ){
$a = $&;
$a+=1;
print"$a";
}
0481デフォルトの名無しさん
NGNG0482
NGNG私はperl 5.8.0を使用しています。
$smtp=Net::SMTP->new('localhost');
$smtp->mail("test");
とやっているのですが、
Can't call method "mail" on an undefined value at ./test.cgi line 9.
といわれてしまい、動いてくれません。
newに失敗しているのでしょうか?
どのように対処したらよいのでしょうか。
0483デフォルトの名無しさん
NGNG私のところも5.8.0だけどそのコードでエラーは出ないね。
まさかとは思うが、use Net::SMTP; を忘れているとか?
いや、それならnewで引っかかるか。
0484rubyist@カラアゲうまうま
NGNG東京に出られないので(人ごみ恐怖症、躁鬱病、突然の意識不明などなどを
発症してしまっているので。入院も7割くらいの確率でする予定)
重症です(苦笑)
精神障害者手帳の申請をする予定。
0485rubyist@カラアゲうまうま
NGNG>newに失敗しているのでしょうか?
当たり前だろヴォケ
0486デフォルトの名無しさん
NGNGある日付から1ヵ月後の日付を取得したいのですが、どのようにすればよいのでしょうか。
localtime(timelocal($ss, $mm, $hh, $d, $m, $y)+24*60*60);
で1日後は取得できるのですが、1ヵ月後が分かりません。
お願いします。
0487クレクレモード
NGNG0488デフォルトの名無しさん
NGNG1月30日の「一ヵ月後」は2月28日ですが…1ヵ月の定義が変な感じしますね…。
1月29日の一ヵ月後も2月28日になってしましますね。
集計のためのプログラムなのですが1日〜月末までを1ヵ月にすることにします。
とりあえず解決です。くだ質ですまん。
# ところで>>486って実際どうやればいいんでしょうかねぇ?
0489クレクレモード
NGNGCPANにDate::Calcっていうモジュールがあり、
http://search.cpan.org/dist/Date-Calc/Calc.pod
こういう関数を使うと楽らしいが、
($year,$month,$day) = Add_Delta_YM($year,$month,$day, $Dy,$Dm);
1/28〜1/31の一ヵ月後が2/28でいいなら、
ちょこっとif文とかを書き連ねて場合わけしたほうが速そうだ。
0491デフォルトの名無しさん
NGNG計算を行うにはプログラムはどうすればよいでしょう?
もちろん2乗は「(x+1)**2」なんて事は承知してますが、
このまま計算するとモロにエラーw(当たり前)
ちなみに欲しい出力結果として、
前者は「x^2+2x+1」後者は「x^2+3xy+2y^2」。
分かる方お願いしますm(_ _)m
0492デフォルトの名無しさん
NGNG記号処理をやらせたいわけだろ?
どうすればいいってどういうことだ?
そういうプログラム書けばいいだろ。
0493デフォルトの名無しさん
NGNGおお!すっきりしました。
サンクス!(おそレスすまそ
0494デフォルトの名無しさん
NGNGそのプログラムが分からん^^;
モジュールとか使うのかな?
0495もまずにパピコ
NGNGs/\((-?[0-9]+|[1-9]*[a-z]+)\+?(-?[0-9]+|[1-9]*[a-z]+)\)\*\((-?[0-9]+|[1-9]*[a-z]+)\+?(-?[0-9]+|[1-9]*[a-z]+)\)/($1)*($3)+($1)*($4)+($2)*($3)+($2)*($4)/g;
print ;
0496デフォルトの名無しさん
NGNGそれだと予め答えの形式がわかってないといけません^^;
例えば
[1+{(x+y+1)^2}{(19-14x+3x^2-14y+6xy+3x^2)}]*
[30+{(2x-3y)^2}{18-32x+12x^2+48y-36xy+27y^2}]
なんて計算はできません^^;
↑が実際やりたい計算w
0497デフォルトの名無しさん
NGNGいつまでも一人で笑ってろ、ボケ!
0498デフォルトの名無しさん
NGNG自分では何か考えたの?
0499デフォルトの名無しさん
NGNG0500デフォルトの名無しさん
NGNGおまえ、「計算」の意味知らないだろう?(w
0501rubyist@カラアゲうまうま
NGNG0502rubyist@カラアゲうまうま
NGNGみんな馬鹿(わら
0503rubyist@カラアゲうまうま
NGNG0504デフォルトの名無しさん
NGNG複素数はできるらすぃーが。
0505デフォルトの名無しさん
NGNG文字式の計算って展開とか因数分解のことか?
0506デフォルトの名無しさん
NGNG数式を処理する場合、通常以下の方法で行われる。
式のパーズ
→数式の表現(ツリーなど)
→処理用フィルター(項のまとめ、因数分解、その他)
→出力
この過程でPerlの正規表現が役に立つことがあるのは確かだが、これ以上はスレ違い。
アルゴリズムスレとか、より適切なスレがあるだろう。
0507名無しさん@カラアゲうまうま
NGNGs/\d+(?=\$)/$&*/g;
s/\^/**/g;
tr/\[\{\}\]/(())/;
eval $_;
0508デフォルトの名無しさん
NGNGhttp://search.cpan.org/author/ULPFR/Math-ematica-1.108/ematica.pm
0509デフォルトの名無しさん
NGNGMathematicaのインターフェースじゃねえか!
0510デフォルトの名無しさん
NGNGMathの下にいろいろあるようだ。
0511デフォルトの名無しさん
NGNGじゃダメなのか?
0512名無しさん@カラアゲうまうま
NGNGtr/\[\{\}\]/(())/;
s/(?!\d)\w/\$$&/g;
s/[\)\w](?=[\(\$])/$&*/g;
s/\^/**/g;
print eval($_), "\n";
0513デフォルトの名無しさん
NGNG0514デフォルトの名無しさん
NGNG0515デフォルトの名無しさん
NGNGまったく同じことを書こうとしていたよ。最近schemeを勉強し始めたばかり
なんだけどね。
0516名無しさん@カラアゲうまうま
NGNGさすが糞Perl
0517デフォルトの名無しさん
NGNGS式を使えばPerlでも楽に書けるかも、と言ってみるテスト。
#しかしそれはPerlで書いたLispインタプリタに過ぎない罠。
0518デフォルトの名無しさん
NGNGGenericなんか見えやしねー
>>496は氏ね。アルファベットの貞二も無しに語るなヴォケー
交換法則だの分配法則だの作って無理やり通せー
0519rubyist@カラアゲうまうま
NGNG0520デフォルトの名無しさん
NGNG↓のプログラムっていきなり3つ表示されちゃうんですが
100000000のときに1番目で
90000000のときに2番目で
80000000のときに3番目を表示させたいのですが
どこが間違ってますでしょうか?
$D=100000000;
for($i=$D;$i>=1;--$i){
if ($i =~ $D/10*10) {print $i." 1\n"; }
if ($i =~ $D/10*9) {print $i." 2\n"; }
if ($i =~ $D/10*8) {print $i." 3\n"; }
}
0521デフォルトの名無しさん
NGNG条件式のところの「=~」だけれど、この記号を使うのは、
右辺が正規表現のときなんだよね。
君の条件式だと右辺は数式ジャン?
で、その数式の意味も良くわからないな。
結論から書くと以下のようにすればいいんだけど、
もう少し桁数を少なくして試したほうが速いんじゃないかな。
$D=100000000;
for($i=$D;$i>=1;--$i){
if ($i == 100000000) {print $i." 1\n"; }
if ($i == 90000000) {print $i." 2\n"; }
if ($i == 80000000) {print $i." 3\n"; }
}
ネタっぽい気もしつつ、一応マジレス。
0522520
NGNG人のプログラムを改良しているので
自分よくわかってないのです。
0523デフォルトの名無しさん
NGNG0524sage
NGNGWin32/Activeperl の環境なのですが
Tk::dirtree でドライブを選択することはできないのでしょうか。
0525Perl勉強初めて3日目
NGNG二冊ほど参考書読んだのですが乗ってなかったので・・・・
0526デフォルトの名無しさん
NGNG「他の言語の経験があるなら」イージーだというわけですね。
乱数は
$x = rand(); で、0以上1未満の乱数が、
$y = rand($z); で、0以上$z未満の乱数が得られます。($zは正の値)
本格的にやるなら、辞書っぽく関数の一覧がでてる参考書を探して買おう。
オライリーのポケットリファレンスは不親切だが安くて薄いよ。
0527ほげ
NGNGnslookupみたいに、ipアドレスからドメイン名を引く関数ってありますか?
0528デフォルトの名無しさん
NGNG0529ほげ
NGNG0530デフォルトの名無しさん
NGNGがあったような覚えがあるんだけど、誰か知ってる?
0531デフォルトの名無しさん
NGNGこれはどう?
@line = <>;
0532530
NGNG単一の文字列にする場合のこと。
(改行を意識すると多分遅い。)
ちなみに、read(STDIN, $s, (1<<31)-1) は Out of memory だった(w
0533デフォルトの名無しさん
NGNG料理本に書いてある。見てくれ。
0534perl始めて3日目
NGNGっていう配列があってさ
ウンコ :3コ
チンコ :1コ
マンコ :1コ
(50音順)
って表示させたいんだがどーすればいいですか?
0535デフォルトの名無しさん
NGNG0536デフォルトの名無しさん
NGNG0539Perl勉強初めて3日目
NGNG有難うございます
そうですね辞書っぽいの今度探して買ってみようと思います。
0540perl始めて3日目
NGNG>>537
ああ なるほど。
アリガトウ。
0542デフォルトの名無しさん
NGNG> $/ = '';
> $buffer = <STDIN>;
{
local $/;
$buffer = <STDIN>;
}
のまちがい?
0544530
NGNG$ ls -la /kernel
-r-xr-xr-x 1 root wheel 3582788 11/17 20:01 /kernel
$ /usr/bin/time perl -e '{ local $/ = undef; print <>;}' < /kernel > /dev/null
5.23 real 3.64 user 1.39 sys
$ /usr/bin/time perl -e 'print join("", <>);' < /kernel > /dev/null
0.17 real 0.14 user 0.03 sys
$ /usr/bin/time perl -e 'while (<>) { print; }' < /kernel > /dev/null
0.12 real 0.06 user 0.05 sys
$ /usr/bin/time perl -e 'while(read(STDIN, $_, 8192)) { push @a, $_; } print join("", @a);' < /kernel > /dev/null
0.06 real 0.03 user 0.03 sys
$ /usr/bin/time perl -e 'read(STDIN, $_, 99999999); print' < /kernel > /dev/null
0.03 real 0.01 user 0.02 sys
$ /usr/bin/time perl -e 'while (read(STDIN, $s, 8192) > 0) { print $s; }' < /kernel > /dev/null
0.02 real 0.00 user 0.01 sys
(FreeBSD 4.7R + Athlon 1G + メモリ128Mbytes)
$/ を変化させると異様に遅くなる。やはりお手軽な join("", <>) よりも速
くしたい時には read() を使うのがよさそうですな。>>533 も気になるので、
あとで料理本も読んでおきます。
0545rubyist@カラアゲうまうま
NGNG0546デフォルトの名無しさん
NGNG530ってすげー頭弱そうだから、事前に一度ファイルを読み込ませて
おくのすらやってなさそう。
とはいえ、最初のやつだと、領域確保、転写、領域確保、転写、領域確保、
転写……の地獄だから、遅くても不思議ではないが。
localはまぁケースバイケースだろうね。
>>544
変数への代入とファイル(/dev/nullだけど)への書き込みを
同列に扱われても、あまり参考にならないんじゃないかな。
それと、/kernelってよく知らないけどバイナリファイルでしょ?
普通はバイナリファイルに対して<>演算子は使わないから、そういう意味でもあまり参考にならないと思うよ。
最後にもう一つ。readで全てを読み込みたいなら、普通はread(FILEHANDLE, $buffer, -s FILEHANDLE)とする。
-sはstat(2)のラッパーで、ファイルやファイルハンドルのサイズを取得する演算子。
0549デフォルトの名無しさん
NGNGでは動くのに
% cat file | command
では正常に動かないスクリプトがあって困っています。
プログラムはメールのフィルタで MIME::Parser で
$parser = new MIME::Parser;
$entity = $parser->read(\*STDIN) or die;
という感じなんですが、パイプで渡すと正常に解釈されません。
(body に Content-type 行が入ってきたり、bodyの一部がヘッダとして解釈されてしまいます)
0550デフォルトの名無しさん
NGNGでもダメ?
0551530
NGNG> ああそうか。$/はundefでもいいんだっけ。
若干意味が違うようです。
$/ The input record separator, newline by default.
This is used to influence Perl's idea of what a
"line" is. Works like awk's RS variable,
including treating empty lines as delimiters if
set to the null string.
> 変数への代入とファイル(/dev/nullだけど)への書き込みを
> 同列に扱われても、あまり参考にならないんじゃないかな。
最適化による影響(perl ではまず無いだろうけど)が出ると嫌だったので、何
らかの処理を入れたかっただけ。まあ length とかの方がよかったのは確かだ
けど、処理時間はほとんど変化しない。(±10%程度)
0552530
NGNG> それと、/kernelってよく知らないけどバイナリファイルでしょ?
> 普通はバイナリファイルに対して<>演算子は使わないから、そういう意味でもあま
> り参考にならないと思うよ。
日頃無茶な <> を使っていて、>>530 の質問もバイナリファイルを扱いながら
だったので。確かに <> を改行の少ない大きなファイルに使うと時間がかかる
というのはこれでよく分かりました。
(最初の例で ltrace を取ったら、realloc の嵐)
> 最後にもう一つ。readで全てを読み込みたいなら、普通はread(FILEHANDLE,
> $buffer, -s FILEHANDLE)とする。
> -sはstat(2)のラッパーで、ファイルやファイルハンドルのサイズを取得する演算子
STDIN が普通のファイル(パイプでもデバイスファイルでもない)という前提を
置いていいなら、もちろんそうする。(条件つきで分岐させるのが一番速いけ
ど、下手をすると >>549 みたいな現象も発生する。)
0554549
NGNGすいません。
パイプで渡すと fseek() 出来ないんでした。
0555デフォルトの名無しさん
NGNG"01","09","01","21"
"01090121"
としたいのです。各値は実は日付で整数演算で日付の
更新を行っていますが、更新されたあとの数字を繋げると
"19121"
のように整数2桁にはなりません。
どうしたらよいのでしょうか?
0556デフォルトの名無しさん
NGNG$a=1;$b=9;$c=1;$d=21;
$s=sprintf "%02d%02d%02d%02d", $a, $b, $c, $d;
print $s;
0557デフォルトの名無しさん
NGNGありがとうございます(涙)
0558デフォルトの名無しさん
NGNG0559デフォルトの名無しさん
NGNG0560デフォルトの名無しさん
NGNG($dmy,$tel,@rain)= split(/,/,$line);
$ref_rain=\@rain;
$hash_rain{$tel}=$ref_rain;
# これを
$hoge=$hash_rain{$tele[$i]};
for($j=0;$j<155;$j++){
print "$j,$$hoge[$j]\n";
$s=$$hoge[$j];
print outf $j,$s;
print "$j,$s\n";
}
とすると、標準出力には表示できるのですが
ファイルに書き込まれません。どなたかお助けを。
0561デフォルトの名無しさん
NGNGoutf はちゃんと開いて、ちゃんと閉じてるの?
0562デフォルトの名無しさん
NGNGopen(out,">$outf") or die "Failed to open $outf \n";
print "Now Printing $outf \n";
# print out "(h)","Rain\n";
$hoge=$hash_rain{$tele[$i]};
for($j=0;$j<148;$j++){
# print "$j,$$hoge[$j]\n";
$s=$$hoge[$j];
print outf $j,$s;
if($s>0){print "$j,s=$s\n"};
}
close outf;
#としております。
0563デフォルトの名無しさん
NGNGprint out $j, $s;
close out;
じゃないの?
0564デフォルトの名無しさん
NGNGありがとうございます、ってなんて恥ずかしいミス。
..................無駄にサーバの容量使ってしまいました。
逝ってきます................。
0565デフォルトの名無しさん
NGNGPerl/TKみたいなしょぼいのじゃなくて何かないかねぇ?
0566隊長
NGNGWin32APIをコールして、ダイアログを表示したりしたいのですが、
参考になるプログラムをどなたかご存知ですか?
どこを探ればよいのですか?
0567デフォルトの名無しさん
NGNGこれはどう?
http://www.bahnhof.se/~johanl/perl/Loft/
>>566
たぶんWSHでやったほうが簡単
0569デフォルトの名無しさん
NGNGってな感じでmoge以下の.txtに.bakでバックアップを取りつつ
ARGV0 ARGV1の引数を渡したhoge.plを適用したいんだけど、
どう記述すれば良いの?
0570デフォルトの名無しさん
NGNG$ARGV1 = shift;
# やりたい処理。
0571569
NGNG対象のファイルと解釈されてしまっているです
0572デフォルトの名無しさん
NGNG0573569
NGNGむー、perl内部で対象ファイルを全検索して作業させるか、オプションを書き込んだ
ファイルを別に用意してオプションは内部から読ませるかしないと駄目かなぁ・・・
0574デフォルトの名無しさん
NGNG$ cat hoge.pl
#! /usr/bin/perl
BEGIN {
$s0 = shift;
$s1 = shift;
}
s/$s0/$s1/;
$ echo hoge > hoge.txt
$ perl -pi.bak hoge.pl o a hoge.txt
$ cat hoge.txt
hage
$ cat hoge.txt.bak
hoge
0575569
NGNG0576569
NGNG0577デフォルトの名無しさん
NGNGdecodeするのはどんなライブラリを使えばいいでしょう?
定番Mime-toolsを使おうとして、
ttp://search.cpan.org/author/ERYQ/MIME-tools-5.411a/lib/MIME/Tools.pm
をみると、そのままずばり「how do I decode these encoded strings?」と
太字で書いてあるところがあって、MIME::WordDecoderを使えと書いてあります。
ところがこれは、「more-popular Western byte representations」だけみたいなんです。
iso-2022-jpのものをdecodeするには何を使えばいいんでしょう?
0578デフォルトの名無しさん
NGNGの mime_decode。
0579りゅう
NGNGマジレスでおながい。(゚Д゚)
サーバーはapacheを使っていて
perlはActiveperlというものを使っています。
そこで以下の簡単な足し算の式が本に載っていたので
やってみたんですけどエラーが出ちゃって、実行
できません、何故でしょうか?
よろしくお願いします。
#!/usr/local/bin/perl
print "Content-type: text/html\n\n";
$number1 = 10;
$number2 = 5;
$answer = $number1 + $number2;
print "$number1 + $number2 の答えは$answerです。;
_END_
0580デフォルトの名無しさん
NGNG> print "$number1 + $number2 の答えは$answerです。;
"が閉じてないがほんとに本のまま打ち込んだのか?
0581りゅう
NGNGあっここなんですか。( ゚Д゚)ポカーン
はい本のまま打ちこみました。
今、本で確認してみましたけど
閉じてありませんでした。
また何か会ったらよろしくお願いします。
ありがとうございました。
0582りゅう
NGNG言われた通りに修正して更新してみたら
本当にできました。ありがとうございました。
尊敬もんです。(・∀・)カコイイ!
ちなみに書籍名は
「カスタマイズで覚えるまるごとPerl&CGI」
というものです。藁
0583デフォルトの名無しさん
NGNG板違い
0584デフォルトの名無しさん
NGNGopen(FH, '>>largefile.txt');
print FH 'a';
printの手前に seek(FH, 0, 2); を加えれば, とりあえず何とかなるけど。
0585デフォルトの名無しさん
NGNGその部分でけじゃなんとも言えないよ
0586デフォルトの名無しさん
NGNGもしもWin9x系を使ってるなら、ファイルシステム(FAT32)の限界だと思われ。
0587デフォルトの名無しさん
NGNG/a/b c d/e f g/h i j/k l m
という文字列から
b c d
だけを取り出したいので
/^\/a\/(.+)\/.+/
とやって$1を参照すると
b c d/e f g/h i j
とでてしまいます。 どうすればいいんでしょぅか・・・
0588デフォルトの名無しさん
NGNG0589デフォルトの名無しさん
NGNG即解決なんスね・・・
0590デフォルトの名無しさん
NGNG後方参照指定を / 以外の文字クラスとするか、非欲張りマッチにする。
/^\/a\/([^\/]+)\/.+/
/^\/a\/(.+?)\/.+/
0591デフォルトの名無しさん
NGNGすごい。ありがとうございます。
非欲張りマッチなんてしらなかったです。
ためしにググってみたら5件しかヒットしなかったです。
レアなんすかね。
0592デフォルトの名無しさん
NGNGそうした方がプログラムが速くなるとか何か理由があるわけ?
おれには理解出来ないんだけど。
localとmyを一切使わないプログラムってどういうのよ。
0593デフォルトの名無しさん
NGNGかわいそうなソースしか見てないんだね
0594デフォルトの名無しさん
NGNGやっぱおかしいだろ?おれは何か特別な理由があるのかと
おもってたけど単なるヘタレコードなだけだろ?
まったくいやになるよな・・・
0595デフォルトの名無しさん
NGNG掲示板やカウンターのCGIで使われている理由。
厨 の 質 問 を 減 ら す た め
まああれだ、みてて気持ち悪いよな。
0596デフォルトの名無しさん
NGNG0597デフォルトの名無しさん
NGNGなんとなく納得…
0598デフォルトの名無しさん
NGNGパラメータが一つもねえものしか、ねえんだよ(泣
そしてmyやlocal(これはまあ使わなくてもいいけど、、)
が一つもねえんだよ。。。全ての変数がグローバル変数。
こんなのどうやって直せっていうんだよ。
コードサイズはまあCGIだから多くがHTMLソースだとしても、
それでも2万行ぐらいある。はぁ。。。氏にてゑ
0599デフォルトの名無しさん
NGNGおれはラクダ本しかもってないが、あれに書いてあるサンプルコードは
ちゃんと関数にはパラメータを渡してるし、スコープもなるべく狭い
範囲に限定するようなものになってる。
糞本書いてるやつは死ね
0600デフォルトの名無しさん
NGNG厨が書いたんなら、10個に分割できるスクリプトが直列に並んでるだけじゃないのか?
ガンガレ。
0601デフォルトの名無しさん
NGNGCGIだととりあえず動いてしまうから始末に終えないんだよね。
部分的に中途半端に直すよりは、プログラムそのものを理解したほうがはやいと思う。
VBで似たような状況に陥ったけど、そのときは全ての変数について徹底的に洗い上げたよ。
まあyyとかhって変数がグローバルで重要なデータに使われてたりして愕然としたわけだが。
0602デフォルトの名無しさん
NGNGや
AF_INET6
を使うにはどうすれば良い?
Perlのバージョンは5.6です。
0603デフォルトの名無しさん
NGNGnongreedy
0604デフォルトの名無しさん
NGNGthanks.
たしかにnongreedyでググるとたくさんヒットしますね。でも日本語ページはヒットしないな。
日本のperlプログラマのあいだではやっぱりレアなんですかね。
0605デフォルトの名無しさん
NGNGどうだろな。結構使う機会あると思うんだが。
0606デフォルトの名無しさん
NGNG普通に使ってると思うが・・・
単語が浸透してないだけじゃないか?
漏れは「最短マッチ」と呼んでる。
http://www.google.co.jp/search?q=%E6%9C%80%E7%9F%AD%E3%83%9E%E3%83%83%E3%83%81&ie=UTF-8&oe=UTF-8&hl=ja&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja
0607デフォルトの名無しさん
NGNGなるほど
thanks
0608デフォルトの名無しさん
NGNG0609デフォルトの名無しさん
NGNG0610デフォルトの名無しさん
NGNG「だから」はどこにかかってるんだ?
どこにも正しい間違いの話は出ていないが?
0611デフォルトの名無しさん
NGNGperl(5.00503)のCGI.pmで
CGI::ReadParse(\%FORM);
とやった後に、$FORM{'〜'}の中身をどうやっても空にすることが
できないんだけどこれって仕様?
CGI::ReadParse(\%FORM); #この時点で$FORM{'url'}に値が入る
$FORM{'url'}='';
print("Content-type: text/html\n\n");
print($FORM{'url'}); #空になっていない。
0612デフォルトの名無しさん
NGNGWeb プログラミング板に行って来ます。
0613デフォルトの名無しさん
NGNG0614デフォルトの名無しさん
NGNG0615デフォルトの名無しさん
NGNG0616デフォルトの名無しさん
NGNG0618デフォルトの名無しさん
NGNGんー?Perl5.6とか5.8とかで試してみれば?
0619デフォルトの名無しさん
NGNGSocket6 モジュール入れてみた?
0620デフォルトの名無しさん
NGNG$ perl --version
This is perl, v5.8.0 built for cygwin-multi-64int
【ソース】
use CGI;
$ENV{'REQUEST_METHOD'} = 'GET';
$ENV{'QUERY_STRING'} = 'url=http://www.google.com';
CGI::ReadParse(\%FORM);
print "1 ",$FORM{'url'},"\n";
$FORM{'url'} = 'change';
print "2 ",$FORM{'url'},"\n";
$FORM{'url'} = '';
print "3 ",$FORM{'url'},"\n";
【結果】
$ perl hoge.pl
1 http://www.google.com
2 change
3
0621デフォルトの名無しさん
NGNGうちのPerl5.8では普通でしたよ。
0622デフォルトの名無しさん
NGNG5.6.0だと確かにクリアされない。
0623デフォルトの名無しさん
NGNGが必要のようだ。
0624デフォルトの名無しさん
NGNG先頭から何Byte目から何Byteを削除したいときってどうすんの?
0625デフォルトの名無しさん
NGNG・substr() 使う。
・読み出し書き込みのループの中で「何Byte目から何Byte」は書き込みをスキップ。
0627デフォルトの名無しさん
NGNGこんな感じでどうだ?
バイナリ値が入ったスカラ、オフセット、長さを指定して
$bar = bin_delete($foo,3,8);
とかで動くはず。
何バイト目は、オフセット指定な
1バイト目だったら0を指定で
sub bin_delete ($$$)
{
my $bin = shift;
my $offset = shift;
my $length = shift;
my ($result,$bin_length,$i,$j);
$bin_length = 8 * length($bin); # 8bit char;
for($i=0;$i<=$offset;$i++) {
vec($result,$i,1) = vec($bin,$i,1);
}
for($j=$offset+$length+1;$j<$bin_length;$i++,$j++) {
vec($result,$i,1) = vec($bin,$j,1);
}
return $result;
}
0628627
NGNGvec() のオフセット8にして、あと適当に直せばByte単位で動くよ(多分
0629デフォルトの名無しさん
NGNGMSDOS, Windows系はbinmode()を使うことを忘れずに。
0630624
NGNG例えば/tmp/binってファイルがあって、
このファイルの中身が
00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f
だったとします。
このファイルの8byte目から16byteを削って
00 01 02 03 04 05 06 07 18 19 1a 1b 1c 1d 1e 1f
ってデータに書き変えたいんです。初心者ですみません。
0631デフォルトの名無しさん
NGNGファイルって考えるから混乱するんだ
イ $hoge にファイルの内容を読み込み
ロ $hoge の8〜16Byte目を削った $fuga を作る
ハ $fuga をファイルに保存
イとハは出来るよな? ただファイル扱うだけだから。
あとは、ロの部分を何とかしてやりゃいい。
$fuga = substr($hoge,0,8); # 0番目から8個(7まで)
$fuga .= substr($hoge,26); # 27番目から最後
これでいいと思うが、substr()がバイトストリームちゃんと扱えるかどうかは自信ない
0632デフォルトの名無しさん
NGNGtoFix("9(3)V9(3)", 1.25) → "001250"
toFloat(9(3)V9(3)", "001250") → 1.25
みたいなかんじ。
0633デフォルトの名無しさん
NGNGsubstr($fuga,7,16) = undef;
>>630 って9Byte目から16Byteを削ってないか?
0634624
NGNG一回ファイルを読み込んで
編集後の内容を書き込むといったイメージですか?
わかりますた。
0635624
NGNG1番目のByteって1byte目っていうですかね?
それとも0byte目っていうんですかね?
そこらへんよくわかってないんですんません。
0636デフォルトの名無しさん
NGNG1番目のByteは1Byte目
>>630 の例だと
1Byte目 は '00'
2Byte目 は '01'
(略)
8Byte目 は '07'
9Byte目の'08' からを削ってないかい?
あと、オフセット(一番最初からの位置/距離)は0から数えるよ。
最初(1バイト目)から5バイト : オフセット0, 長さ5
3バイト目から8バイト : オフセット2, 長さ8
8バイト目から16バイト: オフセット7, 長さ16 (>>633の例)
オフセットは「対象の前に幾つデータがあるか?」って考えると分かりやすいかも。
>一回ファイルを読み込んで
バイナリファイルって大きさどのくらいだ?
あまり大きすぎるなら全部読み込むのはメモリ的にきついかも。
0639デフォルトの名無しさん
NGNG> これでいいと思うが、substr()がバイトストリームちゃんと扱えるかどうかは自信ない
問題ない。
0640624
NGNG容量的には大きくないけど
大きい場合にはいい方法ありますか?
open()で開いて
チョコチョコっと削除して
close()
みたいなやりかたってないんかな?
全部メモリに読み込まずに。
0641デフォルトの名無しさん
NGNGブロック単位に、seekして読んではseekして書き込みの繰り返しだろうな。
0642デフォルトの名無しさん
NGNG・読み出し書き込みのループの中で「何Byte目から何Byte」は書き込みをスキップ。
0643デフォルトの名無しさん
NGNGあるいは別ファイルに書き出してからコピーするかrenameするか。
# m byte 目から n byte を削除として。
open IN, "<source";
open OUT, ">target";
$len = (stat(IN))[7];
for ($i = 1; $i <= $len; $i ++) {
$c = getc(IN);
print OUT $c if ($i < m || $i >= m + n);
}
close OUT;
close IN;
ループで毎回 if で判定するのが気になるならループを二つに分けて間で seek() する。
0645デフォルトの名無しさん
NGNG1(要らない)〜5(絶対買うべき) で言うとどの位かねぇ
0646デフォルトの名無しさん
NGNG0647645
NGNG金に余裕出来たら買うか・・・
0648デフォルトの名無しさん
NGNG0649646
NGNG「すぐわかるPerl」から入ってあとはmanの邦訳で。
0650645
NGNGsearch.CPAN と perldoc だけで何とかなるけど
思想的な部分はラクダ本でも読んでおかないと
0651646
NGNGでも2版と3版でそんなに内容変わってるものかな。
0652デフォルトの名無しさん
NGNG俺は、perl なんてしょせん「そこそこ使えれば十分」な用途にしか使わないから。
ラクダ本とか見たことない。
思想的に他の言語にそんなに違わないと思うけど ? (少なくともそこそこ使える範囲ではね。)
0653デフォルトの名無しさん
NGNGまずないと思う。
COBOL はあまり知らないのでなんともいえないけど、自分で作ってもそんなに難しくないと思う。
0654デフォルトの名無しさん
NGNG0655650
NGNG0656デフォルトの名無しさん
NGNG"9(3)V9(4)だったら sprintf("%03.4f"とかして作った後に '.'を消去して
作ってる。
逆は。後ろから3桁の次に '.'を挿入してから数値として評価。
今のところ有効桁数を越えるような桁数が出てこないのと
9(9)
9(9)V9(9)
という2種類しか出てないからなんとかなってるんだけど。
0657デフォルトの名無しさん
NGNGスマソ
後ろから4桁の次、の間違い。
0658デフォルトの名無しさん
NGNGその実行によって得られた戻り値を取得する・・・
といった処理は可能だろうか。
色々調べたんだが結局駄目だった。
0659デフォルトの名無しさん
NGNGお願いします。
0660デフォルトの名無しさん
NGNG$str = `date`;
@str = `ls`;
$exitcode = system('cp foo bar');
とかじゃ無いのか?
0661デフォルトの名無しさん
NGNG$str = "aaa\nbbb\nccc";
print "/s match\n" if $str =~ /a$/s;
print "/m match\n" if $str =~ /a$/m;
実行してみ
0663デフォルトの名無しさん
NGNG申し訳ないがよくわからん・・・
例えば実行中のスクリプトから"test.exe"を引数"1"を渡して実行する。
"test.exe"では受け取った引数"1"に応じた処理を行い、実行結果を戻り値として
Perlのスクリプトのほうに戻す。
とりあえず受け取った値を出力する。
といったようなことをしたいわけだが・・・。
0664デフォルトの名無しさん
NGNGsystem LIST
"exec LIST" とほとんど同じですが、まず fork を行ない、 親プロセスではチャイルドプロセスが終了するのを wait します。
exec の項で述べたように、引数の処理は、引 数の数によって異なることに注意してください。
返却値 は、wait() が返すプログラムの exit 状態です。
実際 の exit 値を得るには 256 で割ってください。
このド キュメントの exec の項も参照してください。
0665デフォルトの名無しさん
NGNG何言ってるか分からん
test.exe が返す 0(成功) -1(失敗) のようなexit codeを受け取りたいのか
それとも test.exe を実行したときに画面に表示される文字列を受け取りたいのか
どっちだね
0666663
NGNGどっちと言われれば後者のほうに当たる。
0667611
NGNGありがとうございます。そうですか、
5.8.0入れてもらうにはレンタルサーバー側に言わないと駄目ですね。
>>622
やはりそうですよね。
$FORM{'url'}=~s/^http:\/\/$//;
とやろうとしたのですがマッチしてもクリアされないん
ですよねぇ。
いた違いなのに答えてくれてありがとうございました。
(かしこ)
0668デフォルトの名無しさん
NGNG$str = `test.exe 1`;
リストで受け取りたいなら
@str = `test.exe 1`;
基本中の基本だぞ、これを探せない方が難しい
0669デフォルトの名無しさん
NGNG>>623は見た?
Perl 5.6.0自身のバグなのか、5.6.0のCGI.pmのバグなのかは追い切れてないが。
0670デフォルトの名無しさん
NGNGただのハッシュにCGI.pmが関係あるの会?
>>667
$a = $FORM{'url'};
$a =~s/^http:\/\/$//;
FORM{'url'} = $a;
だな。
0671デフォルトの名無しさん
NGNG>>611,613,617-623
ReadParseでtie(%in,CGI)してるので「ただのハッシュ」というわけでもない
みたいなんだな、これが。
0672602
NGNG>Socket6 モジュール入れてみた?
うん。
OSがFreeBSDなんだけど、/usr/ports/net/p5-Socket6
で普通にmake installしただけ。
use Socket; なのか use Socket6; なのかわからん。
取り敢えず実行すると
Socket: Protocol not supported at file line11
と表示されてしまう。
file line11 は
socket(S,PF_INET6,SOCK_STREAM,0)||die "socket: $!";
どうなんでしょう?
0673602
NGNGuse Socket; でも use Socket6;
でも同じね。
0674デフォルトの名無しさん
NGNGuse Socket;
use Socket6;
ではどうだい?
CGI.pmのバグだと思う。(私の環境にあった)version 2.752だと問題ないみたい。
でもそのReadParseに渡したハッシュって結局param()メソッドのラッパーにすぎないから、
cgi-lib.plとの互換性以外は無意味な気がする。
値が複数あると一々split /\0/しなきゃいけないから面倒だしね。
0676デフォルトの名無しさん
NGNG$str に元の文字列、$countに結果を返すとして
1文字の場合
$str = $count =~ tr/A//;
複数文字/正規表現の場合
@tmp = $str =~ m/PATTERN/g;
$count = @tmp;
1文字は多分これが一番短いと思う( $_ は除く)
他の場合は、もっと短く出来ると思うんだが、上手い方法が思いつかない
$count = scalar ($str =~ m/PATTERN/g);
じゃダメだった(なんでだろう・・・)
何か慣用句的な使い方があった様な気もしないでもないんだけど
誰かアドバイスおねがいします
効率/コードの簡潔さ 共に知識不足でこれ以上考えられないっす。
0677デフォルトの名無しさん
NGNGs///でやれば痴漢した数が帰ってくるはずだけど。。
0678デフォルトの名無しさん
NGNGtr使っておきながら「マッチカウントだからm//だ」と思い込んでた自分が恥ずかしい・・・(鬱
スレ汚しスマソ
0679デフォルトの名無しさん
NGNG片方の中にあるサブルーチンから、
もう片方の中にあるサブルーチンを呼び出したい。
どうすればいいのでしょう?
俺のやり方がおかしいだけなのかな?なんか出来ない。
0680デフォルトの名無しさん
NGNGpackage hoge;
とか
package fuga;
とか書いておいて、
一方からもう一方を呼ぶときにたとえば
&hoge::fuga();
というふうにするんだったと思ったが。
requireする順序に関わらず双方向で呼び合う時にはなにか工夫が要るかも?
0681デフォルトの名無しさん
NGNGrequire 'a.pl';
require 'b.pl';
a();
# END-----
# a.pl
sub a
{
print "A.pl\n";
b();
}
1;
# END-----
# b.pl
sub b
{
print "B.pl\n";
}
1;
# END-----
>perl req.pl
A.pl
B.pl
問題無いけど?
0682デフォルトの名無しさん
NGNG>>680
名前空間ですか。それは使ったことがありませんでした。やってみます。
>>681
ホントでつか?
a.pl で require 'b.pl';
b.pl で require 'a.pl';
main.p; で require 'a.pl'; require 'b.pl';
としても、ちゃんと1回だけ読んでくれるから問題無いらしい
0685デフォルトの名無しさん
NGNGあたりまえっちゃーあたりまえか。
0686デフォルトの名無しさん
NGNGconfig.pl内で定義した$CONFIG_HOGEが使えなくて焦ったことがあります。
0687デフォルトの名無しさん
NGNG後から出来たのに、何故?
include(), include_once() もあるから余計ややこしい
0688602
NGNGでけた。さんくす。
0690デフォルトの名無しさん
NGNG# perl -MCPAN -e 'install Tk'
ftp.perl.org をDNSに問いあわせています... 失敗しました: ホストが見つかりません
nslookupの結果は
Non-authoritative answer:
ftp.perl.org canonical name = ftp.cpan.ddns.develooper.com.
Name: ftp.cpan.ddns.develooper.com
Address: 142.132.1.82
0691デフォルトの名無しさん
NGNGWINDOWS98で、perl(日本語パッチも当てたい)をインストールしようと思っています
あの、perlの本やネットでインストール方法を探したんですが、
www.activestate.com/Products/Download/Get.plex?id=ActivePerl&_x=1
からインストールするようなことは分かったんですが、
WINDOWS98のリンクを押すと、Apixxx.exeじゃなく
InstMsiA.exeのダウンロードが始まってしまって困っています。
どうやってみんな成功したんでしょうか。
まだ日本語パッチファイルもインストール方法を調べないといけないと
いうのに、本体のダウンロードさえも出来ていないのは情けないなと思ってるんですが。
0692デフォルトの名無しさん
NGNGまずそれをインスコしてからperl本体を(拡張子msiだったようなきがする)
インスコするんだよ。
でも日本語がどうのっていうんなら、先にそのやり方調べたら?
0693デフォルトの名無しさん
NGNG日本語のやつも調べています。日本語の奴は、まずActivePerlをCドライバーの下に
インストールして、そのあとインストールすることがわかりました。
692さんが言ってるなんとかっていうマイクロソフトの新型インストールは
さっき僕が言ってたInstMsiA.exeのことな気がしてきました。
だったらperl本体もさがさないといけないと思って探しているんですが、
ActivePerl 5.8.0 build 804 っていうのがそうですかね。
って思ったんですが、11メガ以上もある。
ソフトってこんなに大きいんですか?!!
0694デフォルトの名無しさん
NGNGhttp://www.activestate.com/Products/Download/Get.plex?id=ActivePerl&_x=1
には「Perlをインストールするのに必要なもの」が書いてあるんだよ。
Windows98の人は、「Windows Installer 2.0以降」が必要ですよ、って。
で上のほうの「General」には、55メガバイトぐらいディスクの
空きスペースが必要だよとも書いてあるね。
日本語のやつのにどういう説明が書いてあるかわからないけど、
バージョンをちゃんと確認しないとね。
5.8.0は結構最近出たやつだよ。
って、5.8.0出たんだな。日本語のファイル名とかちゃんと扱えるだろうか。
ちと心配。
0695デフォルトの名無しさん
NGNGperlでEXCELのpersonal.xlsマクロを起動方法って
どうやればいいんですか?
誰か知ってたら教えてください。
0696デフォルトの名無しさん
NGNG$Excel->Run("マクロ名")じゃだめなわけ?
0697デフォルトの名無しさん
NGNGありがとうございます。でも、それは試したのですが
動かないんですよね。色々検索してもpersonalマクロの起動
方法は見つからないんですよ。
大変困ってます。
0698デフォルトの名無しさん
NGNG今はそのインストーラをインストールし終わって、これから
本体を探すところです。でも、11Mバイト以上もあるから、かなり時間が
かかりそうですよ!
うち、32キロ回線だから、遅いらしくて…
0699デフォルトの名無しさん
NGNG$b = "(de)fg";
があったとき、
$a = "abchi"にしたいのですが、
$a =~ s/$b//;
とすると()がまずいのかうまくいきません。
何かいい方法はありますか?
0700デフォルトの名無しさん
NGNG0701デフォルトの名無しさん
NGNGできました!
ありがとうございます。
0702デフォルトの名無しさん
NGNGProgrammingPerl3edにはメンバ関数への参照の作り方のサンプルが
載ってるけど、他には何かあるかな?
sub make_counter{
my $count = shift;
return sub{ $count++ };
}
# カウンターを作る
my $counter1 = make_counter(1);
my $counter2 = make_counter(10);
# 使う
print $counter1->(); # 1
print $counter2->(); # 10
print $counter1->(); # 2
print $counter2->(); # 11
ありがたみは「手軽なオブジェクトの代用品」ってところかな。
上の処理をクロージャなしでやると面倒だし、
Perlの場合はフィールドに対するアクセス制限が出来ないので危険でもある。
{ #まず、カウンタークラスを定義して…
package Counter;
sub new{
my $class = shift;
bless{ count => shift } => $class;
}
sub next{
$_[0]->{count}++;
}
}
# カウンターを作る
my $counter1 = Counter->new(1);
my $counter2 = Counter->new(2);
# 使う
print $counter1->next();
# 後は同じ
0705デフォルトの名無しさん
NGNG>Perlの場合はフィールドに対するアクセス制限が出来ないので
なるほど。自分としては状態を持った関数というものをどういう
フウに使えばいいのか分からず考えてました。
オブジェクトが値に関数が付いているのと逆で関数に値がついているというかね。
本にも書いてあるようにLispから拝借した概念ならLisp風のコーディングに
ついて勉強すればいいのだろうけど、どうもそこまでは。。。
もっといろいろと勉強しないとだめですな。どうもありがとうございます。
0706デフォルトの名無しさん
NGNG正規表現を探していますが見つかりません。C風のコメントを剥ぐだけなら
見つかるのですけれど。誰かが作っていても良さそうなものですがご存知ない
でしょうか?お教えください。
おながいします。
0707デフォルトの名無しさん
NGNGs@//.*$@@;
で良さそうなもんだが
0708デフォルトの名無しさん
NGNG文字列リテラルなどを考えると、C風のも正規表現だけでは不可能。
0709デフォルトの名無しさん
NGNG0710デフォルトの名無しさん
NGNG# funcの呼び出し。無名関数への参照を取得
# 無名関数の参照呼び出し。
# funcはレキシカル変数を無名関数に渡すためのラッパーとして機能する。
sub func
{
my $func = shift;
print "func1 end\n";
return sub{ my $h1 = $func . shift;
print "h1 end\n";
return sub{ my $h2 = $h1 . shift;
print "h2 end\n";
return sub{ my $h3 = $h2 . shift;
print "$h3 \n";
print "h3 end\n";
};
};
};
}
print "make h1 ref\n";
$h1 = func("aaa ");
sleep(1);
print "make h2 ref\n";
$h2 = &$h1("bbb ");
sleep(1);
print "make h3 ref\n";
$h3 = &$h2("ccc ");
sleep(1);
print "call h3 ref\n";
&$h3("ddd ");
0711デフォルトの名無しさん
NGNG出力がなぜか思うようになりません。
これはなぜなんでしょうか?全てが最後にドバッと出てきてしまいます。
0712デフォルトの名無しさん
NGNG0713デフォルトの名無しさん
NGNG0714706
NGNG$_にCのソース全てが入っているとして
s#/\*[^*]*\*+([^/*][^*]*\*+)*/|("(\\.|[^"\\])*"|'(\\.|[^'\\])*'|\n+|.[^/"'\\]*)#$2#g;
でCのコメント削除ができるらしいのです。実際それっぽく動きます。
で、これを//〜\nまでの削除に対応させるべく拡張しようと思っていたのだけれど、
深みに嵌まっていやんな状態になって、車輪の再発明するのもなんだな、と思っての質問です。
ちなみに上の正規表現はこのサイトから拾って来ました。
http://www.tech-web.net/perlmania/perlfaq6.html#How_do_I_use_a_regular_expressio
Jeffrey Friedlレベルのperlハッカーキボン
0715デフォルトの名無しさん
NGNG>>707
0716デフォルトの名無しさん
NGNG>>714
/*〜*/ 式の場合、改行を跨げるから s スイッチつけて
全体一気処理しつつ、最短マッチで置換するのがよさげ。
// の場合は行末までがコメントだから >>707 のが最善。
性質違うから無理に1linerしないほうが簡単では?
#てか、あまり異種コメント混在ってのが美しくない気も…
0717デフォルトの名無しさん
NGNG>>707 すら理解出来ないのにハカーキボンとか言ってんじゃねぇよ
正規表現勉強してから物言えや
0718デフォルトの名無しさん
NGNG0719デフォルトの名無しさん
NGNGActiveperl5.8のインスコ失敗しませんか?(Win版)
スレ違いなら失礼。
0720デフォルトの名無しさん
NGNG0721デフォルトの名無しさん
NGNG0722デフォルトの名無しさん
NGNGeuc、jis、sjis
どれを使えばいいですか?
0723デフォルトの名無しさん
NGNG0724デフォルトの名無しさん
NGNGeuc
0725デフォルトの名無しさん
NGNG-MWildですが。
0726デフォルトの名無しさん
NGNG0727デフォルトの名無しさん
NGNGprint ${&retref};
こういうのはアリなのかなあ
0728デフォルトの名無しさん
NGNGわざわざリファレンス返す理由は?
スカラー返してから、必要ならその返り値のリファレンスを取った方が良いと思うけど
クロージャなら >>703 あたりを参照
sub retref{
my $a = 'foo';
return \$a;
}
$b = &retref;
$c = &retref;
$d = $b;
print $$b . "\n";
print $$c . "\n";
print $$d . "\n";
$$b = 'bar';
print $$b . "\n";
print $$c . "\n";
print $$d . "\n";
実行結果
foo
foo
foo
bar
foo
foo
0729728
NGNGfoo
foo
foo
bar
foo
bar
0730デフォルトの名無しさん
NGNG結局Dynamic Scopeだろうが、Lexcal Scopeだろうが、
参照カウントを数えて、ゼロになったらGCで
回収するということに変わりはないんだよね?
myはシンタックス上のものであって、
メモリ管理はまた別の話になると見えますね。
0731デフォルトの名無しさん
NGNGこの
「おにぎり」って文字列は、
jis ですか?
euc ですか?
0732デフォルトの名無しさん
NGNGソースファイルのエンコーディングによる
0733706
NGNG>>707 and >>715
回答していただいたのはありがたいんですが、やりたかったのは>>706に書いた
通り、C風とC++風のコメント混在したソースからのコメント除去なんですよ。
>>708 and >>718
Jeffrey Friedlの正規表現では、リテラル中に含まれる例外への対応が不十分
だと言う事ですか?詳細キボン。
>>716
御意。>>714のスクリプトでは$/ = undef;として全ての行を一気読みして同様の
事を実現していますね。行末は$で実現させないで\nでいけると思います。
仰る通り1linerにする必要は有りません。でもC風のコメントの中にC++風の
コメント開始のトークンが現れたり、その逆もあるし、正規表現で実現させるには
一気にやるしか無いですよね?Cのコメント除去後C++のコメントの除去、もしくは
その反対ではダメなんですよ。(てかこの辺の説明は不要ですよね?)
課題としてはメチャ難しい類に入ると思います。
本来の目的自体はCのプリプロセッサを通すという、真っ当な方法で解決して
しまいました。あとは単なる技術的な興味です。お騒がせさまでした。
0734デフォルトの名無しさん
NGNG0735デフォルトの名無しさん
NGNGアセンブラのマクロみたいなことってできる?
0736デフォルトの名無しさん
NGNG>714のREは|で区切って順に
#コメント|文字列|文字|改行|それ以外#
ってなってるんだから、そこに>707を突っ込みゃいいだろ。
0737デフォルトの名無しさん
NGNGホスト名からIPアドレスを取れるじゃないですか。
その逆のIPアドレスからホスト名を逆引いてくれるコマンド
教えてください。
0738デフォルトの名無しさん
NGNGそんな簡単な話じゃないような気がする。
それだと //**/ とかに対応できなくない?
0739デフォルトの名無しさん
NGNGじゃこうかな。mオプションもいるか?
s#/(?:/.*|\*[^*]*\*+(?:[^/*][^*]*\*+)*/)|("(\\.|[^"\\])*"|'(\\.|[^'\\])*'|\n+|.[^/"'\\]*)#$1#g;
0740デフォルトの名無しさん
NGNGgethostbyaddr
0741デフォルトの名無しさん
NGNG俺が言えるのは、そんな気の狂った文字列を書くなという事だけだ。
健闘を祈る
0742デフォルトの名無しさん
NGNGそれは違うな。
正規表現記述にxオプションを使わない奴が狂っているだけさ。
Perlは己の狂気を映す鏡。
己に臆すは臆病者よ。
はははーっ!
0743デフォルトの名無しさん
NGNG0744デフォルトの名無しさん
NGNG//**/
こういうコメントの事だろ
0745デフォルトの名無しさん
NGNGint cxx_comment = 1 //**/ 2
;
0746デフォルトの名無しさん
NGNGそれC99になったら使えねぇよなあ。
0747デフォルトの名無しさん
NGNG・特殊な例を以外は処理出来るコード
・特殊な例を発見するコード
・特殊な例に泥臭く対応するコード
を組み合わせてサクッと片付けることのほうが多い。
0748デフォルトの名無しさん
NGNGお、できてるっぽいね。
0749デフォルトの名無しさん
NGNGメッセージのところも改行が「・」で、「>」が&gt;になったりしてしまいます。
どこをどう直すべきでしょうか?
>>750がソースです
0750デフォルトの名無しさん
NGNGopen(MAIL,"| /usr/sbin/sendmail -t") || &error("送信できません。");
print MAIL <<"_MAIL_";
From: xxx\@xx.xx
To: xxxxxx\@xxxx.ne.jp
MIME-Version: 1.0
Subject: 投稿がありました
X-Mailer: Sendmail
Content-type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit
投稿がありました。
名前:$name
題名:$subject
メールアドレス:$mail
ホームページ:$url
メッセージ:$msg
---------------------------------------
投稿者情報
IP:$ip
ホスト:$host
---------------------------------------
_MAIL_
close(MAIL);
#--------------------メール送信機能------------------------#
よろしくお願いします。
0751デフォルトの名無しさん
NGNGjcode.plを知らんのだろうか…
0752デフォルトの名無しさん
NGNGそろそろ Jcode.pm では(Encodeは知らない)
プロバイダでJcode.pm使えないとか抜かすならWeb板行ってくれ
0753749
NGNG0754706
NGNG流石です。>>738のレスを見てから最大18分で修正&投稿で一発動作。
漏れにはマネできません。
重箱突付く様で恐縮ですが、//〜\\nの対応が未対応ですね。
漏れも>>736のヒントを受けて少し考えて見ました。
s#/\*[^*]*\*+(?:[^/*][^*]*\*+)*/|//(?:\\\n|[^\n])*(?=\n)|("(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\n+|.[^/"'\\]*)#$1#g;
確認用のCソースは以下です。
int main(int argc, char* argv[]){
printf("ややこしいコメントの例/*\n");/*
//ここはコメント*/ printf("// /*この文字列はプリントされる*/\n"); // /*
//printf("この文字列はプリントされない\n");*/ /*
printf("*/\n");// */とプリントされる\
ここはコメントだがVC++6.0ではワーニングが発生
return 0;
}
この質問はこれで完了と言う事で有難うございました。
0755デフォルトの名無しさん
NGNG何文字目という位置情報しか得られません。
検索した文字列が存在する位置の座標情報を得る為にはどうしたらよいのでしょうか・・・
0756rubyist@カラアゲうまうま
NGNG0757デフォルトの名無しさん
NGNG0758デフォルトの名無しさん
NGNGbccでは1,gccでは一度cppに掛けた後コンパイルで0
#include <stdio.h>
#define line add(/,/)
#define in add(/,*)
#define add(s1,s2) s1##s2
int main (){
int i=0;
line;/*
i=1;
in;*/
printf("%d\n",i);
return 0;
}
0760デフォルトの名無しさん
NGNG0761デフォルトの名無しさん
NGNG0762デフォルトの名無しさん
NGNG0763デフォルトの名無しさん
NGNG0764デフォルトの名無しさん
NGNG0765デフォルトの名無しさん
NGNG0766デフォルトの名無しさん
NGNGやっぱり、消したデータをダミーファイルに書いて
新規で作り直してダミーファイルからコピーしないと駄目なのでしょうか?
こんなんでいいのかな?
#!/usr/bin/perl
# $ARGV[0] がファイル名、$ARGV[1] が消したい行(0ベース)
exit 0 unless (open IN, "<$ARGV[0]");
@lines = <IN>;
close IN;
$lines[$ARGV[1]] = "";
open OUT, ">$ARGV[0]";
print OUT @lines;
close OUT;
__END__
ダミーファイル云々がよく理解できないよ。
0769教えて君
NGNG0770デフォルトの名無しさん
NGNGボウヤ、世の中には検索エンジンという便利なものがあるんだよ。
http://www.google.co.jp/
0771デフォルトの名無しさん
NGNGuse Cwd; $cwd = cwd();
0773デフォルトの名無しさん
NGNGどうやら仕様が変更されて読み込めない。。。
0774デフォルトの名無しさん
NGNG0775デフォルトの名無しさん
NGNG0776773
NGNG方法があるのでしたらご教授ください!
0777デフォルトの名無しさん
NGNG戻り値として何の型が要求されてるのかを知りたいのですが、どうやったらサブルーチン内で判別できるのでしょうか?
0778デフォルトの名無しさん
NGNG互換性のあるDB(YukiWikiDB2など)にそっくり入れ替るスクリプトと、そこからまた新形式に入れ替えるスクリプトを書く。これが確実。
0780デフォルトの名無しさん
NGNGdbopenで何のDBが開くかは環境依存。大抵はバイナリファイルで実装されたDBが開く。そしてこのファイルは、種類が違うと互換性が無いと思ったほうがいい。
YukiWikiDBはファイルシステムを利用した、dbopenに近いインターフェイス―要するにハッシュみたいに使える―DB。
これは比較的移植性が高いので、バイナリDBの入れ替えをするのに向いていると思って書いた。
0781デフォルトの名無しさん
NGNGみなさんどのぐらいで妥協していますか?
0782デフォルトの名無しさん
NGNG> 戻り値として何の型が要求されてるのかを知りたい
if(wantarray){リスト
}elsif(defined wantarray){スカラー
}else{戻り値無し
}
だったと思います。
私も質問です。
以下のように無名 FileHandle を hash にブチ込んで利用したい訳なんですが、、
use IO::File;
$fh{'fh1'}=IO::File->new("> file");
print $fh{'fh1'} "hoge";
close $fh{'fh1'};
知らなかったのですが print $fh{'fh1'} "hoge"; で
$fh{'fh1'} が展開されないようなのです。(汗
これはどうすれば利用可能になりますか?
暫定的な対処として以下のように書いてみたのですが、
もっとスマートな方法があれば教えて下さい。
use IO::File;
$fh{'fh1'}=IO::File->new("> file");
my $fh=$fh{'fh1'};
print $fh "hoge";
close $fh{'fh1'};
0783デフォルトの名無しさん
NGNGオプティマイズレベルを下げたら100%いけました。
0784デフォルトの名無しさん
NGNGいっつもLocaleあたりで警告喰らって97%ほどで妥協します〜(ヘタレ
0785デフォルトの名無しさん
NGNGprint {$fh{'fh1'}} "hoge";
これで行けるよ
0787デフォルトの名無しさん
NGNGwantarray という関数でリストコンテキストかを判定できるが、これで
いいのかな。だめならもうすこし詳細をキボンヌ。
0788デフォルトの名無しさん
NGNGうが、被ってるよ。はずかしいな。最近navi2chの調子が悪くて更新がうまくできん
のです。スマソ。
0789デフォルトの名無しさん
NGNGあれ、でも
>if(wantarray){リスト
>}elsif(defined wantarray){スカラー
>}else{戻り値無し
>}
これ変じゃないですか? defined wantarray => Trueならリストでしょう。
漏れはだいたいサブルーチンの最後で
return wantarray ? $scalar : @list;
のようにやります。
0790デフォルトの名無しさん
NGNG具体的にはCGIプログラムの中で`./client "Javascriptの変数"`として外部のプログラムにCGIでプリントするHTMLの中のJavascriptで作った変数の値を渡したいのですが。
Javascriptではフォームを作ってそのフォームに入力されてた文字を変数に入れるような動作をしています。
どなたか教えてください。宜しくお願いします。
0791782
NGNG> これ変じゃないですか? defined wantarray => Trueならリストでしょう。
うがーごめんなたい...(;´Д⊂
物凄い勢いでperl書いて腱鞘炎で逝ってきまつ...
0792デフォルトの名無しさん
NGNGデタラメ書くなよ
リスト: wantarray, defined(wantarray) 共に真
スカラー: wantarray は偽、defined(wantarray)は真
戻り値なし: wantarray,defined(wantarray) 共に偽
戻り値無しのケースを無視したとしても
return wantarray ? @list : $scalar;
だろうに
0793782
NGNG> リスト: wantarray, defined(wantarray) 共に真
> スカラー: wantarray は偽、defined(wantarray)は真
> 戻り値なし: wantarray,defined(wantarray) 共に偽
え〜と、つまり私は間違ってない..のかな?(汗
つか、脳内で書くから駄目なんですね、
今すぐテストしに逝ってきます。お騒がせしました。
0794デフォルトの名無しさん
NGNG0795735
NGNG自己レス。
Cの#defineみたいなことをするのは
use constant HOGE => 'あああ';
でOKらしいんだけど、引数をつけられるプラグマってない?
つーかプラグマってどうやってつくるんだろうか。
普通のモジュールと何が違うの?
0796735
NGNGみたいなことがしたいのだよ。
0797デフォルトの名無しさん
NGNGActivePerl Build631(5.6.1)でたったいま気付いたのだが、
H'1A を 「getc」で読み込むと、このキャラ以降 undef
(End of File)を返すっぽい…これってやはり仕様?
#なんで今時そんなMS-DOSなことが。追試希望。
##それとも単にdocの読みが甘いだけ?(´・ω・`)
binmode してみたら?
関係ないかな。
0799デフォルトの名無しさん
NGNGVCあたりのランタイムの仕様。
いやなら>>798のいう通りbinmode。
どうでもいいけどH'1Aって何の書き方?
0800デフォルトの名無しさん
NGNGああそうですね、スマソ。逆にしてしまった。
0801デフォルトの名無しさん
NGNGCでのソースをPerlにそっくり移植してテストしてたんですわ…。
ファイルopen後、binmode 切替済状態でこの現象に当たったのです。
getc がスクリプトバグの犯人であることが解かるまで小一時間悩んじった。
とりあえず今はreadにすりかえて回避してますが、美しくナーイ(;;
#Perlではコンソール入力(STDIN)向け?関数だからプラットフォーム依存仕様なのか?
#MSDOSのコンソール入力終了は^Zだし…。(UNIXでは^Dだよね?)
0802デフォルトの名無しさん
NGNG通常のファイルからでも同じ動作?
0803デフォルトの名無しさん
NGNG0804デフォルトの名無しさん
NGNG>>777 ではありませんが質問させてください。
サブルーチンの中でreturnしなければ最後に評価された式が返され、return;
だけだとundefもしくは()が返されたんじゃないかと思うんですが、perlで
「戻り値なし」というのはどうやるんでしょうか。またサブルーチンを呼ぶ
際に左辺の変数で受けなければ戻り値は消えるはずで、どういうシチュエー
ションで「戻り値なし」を区別しなければならないのでしょうか。
0805デフォルトの名無しさん
NGNGopen(FILE, "<tst.dat");
@data = <FILE>;
close(FILE);
foreach (@data)
{
chomp;
}
foreach (@data)
{
print $_;
}
↑のように書いてRedhatLinuxにあげて実行したら表示されません。
プログラム上に改行コードを含めて実行すると表示されるのに別ファイルか
ら読み込むとできないんですが…。知ってる方いたら教えてくださいお願いします。
0806Rubysitからがgjvぽえv
NGNG↓
open(FILE, "tst.dat");
つーかWebProg板でしゃぶっとけ
0807名無しさん@Vim%Chalice
NGNG> open(FILE, "<tst.dat");
> open(FILE, "tst.dat");
どっちも正しいと思うぞ。
>>805
何がしたいのか全くわかりませんので説明して下さい。
コードを見ると読み込んだファイルの“改行を取って”
標準出力するんですか?一行になりますよ?
それでもイイのであればこうするのが良いかと。
open FH,"hoge.dat";
print chomp while <FH>;
close FH;
0808デフォルトの名無しさん
NGNGそのとおりです。m(__)m
”標準出力に改行無しで出力させたいんです”
お答え頂いてありがとうございます。
でも、807さんのを実行してみたら「1」が行数文出たんですが、
これって環境のせいでしょうか?
chompは、なんか本には、戻り値が「取り除いた文字数」と書いてあるんですが
本が間違ってますかね?
> でも、807さんのを実行してみたら「1」が行数文出たんですが、
ごめんなさい。その通りです。寝ぼけました。
chomp and print while <FH>;
でどうですか?
0810ASM.NET
NGNG引数を渡したり戻り値を受け取ったりすることはできない?
グローバルな変数で処理しろってか?使いづらっ!
0811デフォルトの名無しさん
NGNG>>807殿が誤っておられます。環境のせいではなく仕様です。
perl -p -e 'chomp;' filename
とやれば用件を満たすのではないかと思います。
0812デフォルトの名無しさん
NGNG両方とも駄目でした。
1文字も出力されません。
一応、プログラム中に「改行を入れた変数」を取り除いたり、
文字列と「改行コード」を「.」で連結させて表示させたりは
可能なんですが、取り除いてからの「配列での1行出力」が
できないんですよ…。1行であれば回しちゃっても構わない
んですが、それの表示もできません。
どうか宜しくお願いします。
0813807
NGNG> perl -p -e 'chomp;' filename
その手がありましたか...
普段使わないので完全に忘れ去っておりました。
>>812
ん〜おかしいな。。
0814デフォルトの名無しさん
NGNGつーか改行取りたいだけならtr -d '\012'だけどな。
0815デフォルトの名無しさん
NGNGシェルとその設定によっては、
最後に改行を入れないと表示されないことがあるようです。
私のzshではそうなります。
>>814
私はawk, sed, trなどは全てperlで代用しております。
0816デフォルトの名無しさん
NGNGとりあえず書いてみたコードは、見た目通り動かない上に、迷惑極まりないポーリングなので
このあたりも何とかしてみたいのですが、何かヒントを頂けないでしょうか。
$event=0;
sub alarm_handler {$event++; $SIG{ALRM} = \&alarm_hander;};
$SIG{ALRM} = \&alarm_handler;
alarm 1;
while(1) {
while ( $event <= 0 ) {$event;}; $event--;
print "tick ";
alarm 1;
}
0817デフォルトの名無しさん
NGNG0818816
NGNG例えば、10秒おきに処理をしたいけど、その処理に5秒位かかるので、
素直にsleep 10 とかすると、何秒おきかわからなくなるかな?
となると、イベントでなんとかしないと?と思って、こうしました。
でも、sleep で眠って、時間になったら fork すればいいのかな?
早速やってみます。
0819デフォルトの名無しさん
NGNGHTML::Parser より HTML::TokeParser のほうが楽。
0820デフォルトの名無しさん
NGNGpipe を使う方法。
--
pipe R, W;
$SIG{ALRM} = sub { syswrite(W, 'o', 1); };
while (1) { alarm 1; if (sysread(R, $tmp, 1) > 0) { print "tick "; } }
--
W は non-blocking mode にした方が良い。
sysread のエラー処理もやっておくべき。
0821816
NGNG最終的には sleep + fork でうまいこといきました。
試しに作ってみた失敗作の駄目っぷりが尋常でないので晒します。
笑ってやって下さい。
# 当の本人も、コンピュータも固まりました。
while(1) {
if($pid=fork) {
sleep 1;
} elsif (defined $pid) {
print "tick ";
}
}
# 3:57PM up 41 days, 25 mins, 1 user, load averages: 215.88, 65.60, 24.73
# こんなにロードアベレージをあげたのは始めて。
0822816
NGNGwhile(1) { if($pid=fork) { sleep 1; }
elsif (defined $pid) { print "tick "; exit; } }
0823デフォルトの名無しさん
NGNGワラタw
0824デフォルトの名無しさん
NGNG頭がワリィーのがもろ三重だな。オブジェクトだよ、object
0826ASM.NET
NGNGなるほど、そっちも検討してみます。
ちなみに、HTML::Parserのイベントで呼ばれるサブルーチンへ
引数を渡したり戻り値を受け取ったりすることはできませんか?
>>824
>頭がワリィーのがもろ三重だな。オブジェクトだよ、object
なんですかこの頭の悪い生き物は?(w
0828デフォルトの名無しさん
NGNG0829デフォルトの名無しさん
NGNGサラッと読んだ感じでは event のコールバック
プロシージャを定義するだけなんじゃないか?
と思った。呼出元の object も捕捉できるようだし…。
0830デフォルトの名無しさん
NGNGやりたいのは
foo { some code; } $bar, $baz;
みたいに、第一引数にCODEを受け取るモノなんだけど
これは sub foo(&@){ } で出来た。
この foo を
foo $bar, $baz;
のように、CODEを省略してもOKな様にしたい。
引数の受け取り方は sort みたいな感じ。
別に明確な目的がある訳じゃなく
出来るなら試してみたいって程度なんだけど
0831デフォルトの名無しさん
NGNG第2引数以降が“リファレンスでない”のが確かなら、
sub foo {
unshift @_, sub{ "dummycode" } if ref $_[0];
my( $somecode, $bar, $baz) = @_;
###
}
見たいに判定して引数リストそのものを右へずらしてしまえば?
#ref の返値がコードリファレンスか確認すればなお良いかと。
0832デフォルトの名無しさん
NGNG$b = int($a);
print "\$a=$a \$b=$b \n";
を実行すると
$a=120560 $b=120559
と結果が表示されます。これって仕様なのでしょうか。
小数点以下切り捨てをしたいのですが、1足りなくなる場合があって困ってます。
0833デフォルトの名無しさん
NGNG>>284-285
>>830
sub foo {
my $code = ref $_[0] eq 'CODE' ? shift : sub { ... };
>>832
($b) = $a =~ /(\d+)\.?/;
0834824
NGNG頭の悪い生き物だが、あんたよりはマシと思われ(w
こんな風に使うんだよ
use HTML::Parser;
$p = HTML::Parser->new();
$p->parse_file('test.htm');
print $p->{CHECK_A},"\n";
sub HTML::Parser::start {
my ($self,$tagname,$attr,$attrseq,$text) = @_;
$self->{CHECK_A}++ if $tagname eq 'a' ;
}
0836デフォルトの名無しさん
NGNG「オブジェクト指向Perlマスターコース(ピアソン)」
では2種類のポリモルフィズムを解説している。
1つは継承を使ったポリモルフィズム、
もう1つはインタフェースポリモルフィズムだ。
と書いてあります。
んで、インタフェースポリモルフィズムってなに?
0837デフォルトの名無しさん
NGNGお利口さんなコメントだな。ホントのお利口さんなら添削するもんだがな(w
834はスタブを直接書き換えて何が悪かろうというもんだ。
あんたの気にいるように書き換えてやろう。
package MyParser;
$p = MyParser->new();
$p->parse_file('test.htm');
print $p->{CHECK_A},"\n";
package MyParser;
use base 'HTML::Parser';
sub start {
my ($self,$tagname,$attr,$attrseq,$text) = @_;
$self->{CHECK_A}++ if $tagname eq 'a' ;
}
1;
新式では次のように汁
use HTML::Parser;
$p = HTML::Parser->new(api_version => 3,
start_h => [ \&my_start, "self,tag" ]);
$p->parse_file('test.htm');
print $p->{CHECK_A},"\n";
sub my_start{
my ($self, $tag) = @_;
$self->{CHECK_A}++ if $tag eq 'a' ;
}
0838名無しさん@Emacs
NGNG0839デフォルトの名無しさん
NGNG「ジェネリックプログラミング」と呼ばれる手法の基本になる考え方…かな。
「xという処理をするyというメソッドを持っていなければならない」という"インターフェイス"によってポリモーフィズムを実現するのがインターフェイスポリモーフィズム。
例えば:
package Foo;
sub new; # 実装は省略
sub print_me;
package Bar;
sub new;
sub print_me;
package main;
my @coll;
foreach my $class(qw(Foo Bar)){
# これも一種のインターフェイスポリモーフィズム
# FooとBarは互いに関係ないが、同名のコンストラクタを持つ為思った通りに動く
push @coll, $class->new();
}
foreach my $o(@coll){
# print_meというインターフェイスによってポリモーフィズムを実現する
$o->print_me();
# @collに入っているのが何か知らなくてもいい。
}
0841デフォルトの名無しさん
NGNG#!/usr/bin/perl
# $ARGV[0] がコピー元、$ARGV[1] がコピー先。
open IN, "<$ARGV[0]";
binmode IN;# 念のため。
open OUT, ">$ARGV[1]";
for ($i = 0; $i < (stat(IN))[7]; $i ++) {
print OUT getc(IN);
}
close OUT;
close IN;
__END__
ファイルの存否とか open の可否とかのチェックは自分で付け加えておくれ。
0843デフォルトの名無しさん
NGNGありがとう。感動しますた。
0844デフォルトの名無しさん
NGNGbinmode OUT をド忘れしてらっしゃいませぬ?
#そのままでは出力時に(Win)\n->CRLF、(Mac)\n->CRに化けそう。
入出力両方にbinmodeかけるのがアンパイかと。
0845デフォルトの名無しさん
NGNGこれって正規表現が絡むと色づけがおかしくなるよね?
みなさん気にしないでプログラミングしてるのかな?
0846デフォルトの名無しさん
NGNGエスケープして逃げるなあ。
あとコメントで止めるとか。($a =~ s/\d+/"/; # ")
まあ使いにくいことは確かだね。
ヒアドキュメントのインデントもおかしい
0847デフォルトの名無しさん
NGNGcperl-modeを使っている。perl-modeよりは改善されている。
0848デフォルトの名無しさん
NGNG>>846の例はcperl-modeでもダメなようだが。
0849デフォルトの名無しさん
NGNGWindows上でemacs使ってるんだけど、
cperl-modeいいです。ありがとう。
0850デフォルトの名無しさん
NGNG漢数字を半角数字に置換したいのですが,
$list =~ s/一/1/g;
は置換できるのに,
$list =~ s/十/10/g;
とすると"Unrecognized character"とエラーを吐かれます.
調べると"十"の2バイト目が"\"とコードが重複(0x5C)してるのが原因だと分かったのですが,
これを回避する方法が分からず前に進めません.
何か良い策は無いでしょうか・・
とりあえず試してみたことは
(1) シングルクォートでエスケープする.→ $list =~ s/'十'/10/g;
結果)エラーは出なくなったが置換してくれない.
(2) コード,変換するデータ共にeucで処理する.
require "jcode.pl";
&jcode'convert(*list, "euc");
$list =~ s/十/10/g;
&jcode'convert(*list, "sjis");
こんな感じのコードをeucで保存して実行.
結果)エラーは出なくなったがそれまで置換出来てたもの("一"とか)すら置換出来なくなった.
windowsでperlを使うこと自体間違ってるのでしょうか。゜(゚ ̄∩ ゚̄)゜。
0852デフォルトの名無しさん
NGNGJperlパッチを当てるか、Perl5.8 を使うのが無難に思うけど…。
これ自体が間違い: $list =~ s/十/10/g;
s/// は s""" と等価。つまり変数が展開されるし
\エスケープも解釈される。だから '\' を含む文字
がおかしくなる。かといって単純に
こうする「$list =~ s'十'10'g;」わけにもいかない。
( \' がエスケープ解釈されてエラーになる)
そこでちょっと面倒だけどこういう定義をする。
$str = q/十/;
$list =~ s/$str/10/g;
(q/.../ は '...' と等価でかつ \\ \' 以外はエスケープされない)
当然だけど Webフォームやファイルから直接 $str に
代入するほうが手間が少ない。スクリプト中に直接
SJIS漢字文字列を埋め込む行為が面倒の原因。
0853デフォルトの名無しさん
NGNG$test = "十\";
$test =~ s/十\/10/g;
print $test;
0854850
NGNGこんなに早く解決していただけるとは思ってませんでした
どうもありがとうございます.
perlは動けばいいやみたいな場当たり的使い方しかしてこなかったので
基本的知識が欠落してました.(´Д`;)
本当に感謝ですm(_ _)m
0855850
NGNG最初"十"の真ん中に"\"入れるのはどうしたらいいのかなって考えたんですが
なるほど後ろに"\"付けるのは気づかない発想でした( ̄□ ̄;
0856852
NGNG「十\」とかって書き方は、簡単な対処なんだけどその文字
コードを事前に知ってないとできないのが難だったり。
(他には“表”とか“ソ”とか。まあ暗記すれば良いが)
#nkfしてソースをEUC他に変換することもできないし…。
なので自分は迂遠な例をあげたの。お好みによってどうぞ。
0857デフォルトの名無しさん
NGNGShift-JISで、気付かずに使ったりするんだよね。
─ソ欺圭構蚕十申能表暴予栃饅表能
貼噂兔�x欺曾箪禄浬喀媾彌拿杤歃濬
畚秉綵臀藹觸軆鐔鷭�xЫ�\
ところどころ重複してるかも知れんけど、コンくらいあるね。
0859デフォルトの名無しさん
NGNG0860デフォルトの名無しさん
NGNG0861デフォルトの名無しさん
NGNGリファレンスに見当たらないのです。
0862デフォルトの名無しさん
NGNG文字列分解の基本は二種類。
1.substr で1文字ずつ抜き取る。(BASIC風)
$str = "abcd";
for ( $i=0; $i < length $str; $i++ ){
print "[", substr( $str, $i, 1 ), "]";
}
2.split で配列にバラす。(こっちのが優速)
$str = "abcd";
for $i ( split //, $str ) { print "[$i]"; }
# あるいは @array = split //, $str; で配列変数へ
>>861
この場面で“リファレンス”って台詞が出てくるってことは
文字単位でのキャラクタ値が欲しいのかしら?(ヨミすぎ?)
だとしたら2の変形で split の変わりに unpack を使うといい。
@array = unpack( "C*", $str );
#配列の各要素は、文字単位でのASCIIキャラクタ値。(結果としてC言語に近い)
いずれにせよこういう処理ではリファレンスの出番はないですが。
(あれは間接参照ではあるがアドレスではないので、Cのポインタと等価ではない)
0863デフォルトの名無しさん
NGNGワラタ
0864デフォルトの名無しさん
NGNG0866デフォルトの名無しさん
NGNGもしかしたら参照をやり取りするのに代えたらパフォーマンス
上がるかな?
0867デフォルトの名無しさん
NGNG定数文字列なら、巨大になるほどリファレンスに替える価値はあるよ。
(文字列演算が絡むなら、なんでもかんでもリファレンス化とはいかないが)
効果が高いのはサブルーチンやメソッドに文字列引数を渡す場合とかとか?
&foo( \$a, \$b ); # 事前にプロトタイプ宣言すれば foo( $a, $b ) とも書けるが。
0868デフォルトの名無しさん
NGNGしたいのですが、うまい記述方法はありませんでしょうか?
0870デフォルトの名無しさん
NGNG"じゃなくて「のことをいっているんだろ
0871デフォルトの名無しさん
NGNG.*?ってなにさ。
*は前の文字の0回以上の繰り返し
0872デフォルトの名無しさん
NGNGそのとおり、会話文のカギ括弧「」の方でつ・・・。
print $1 while(/(「(.*?)」)/gs);
で会話文だけ抜き出すところまではできたのですが、
ここに含まれる改行のみ削除するところで???となってます。
0873869
NGNGし、知ってるさ...(涙
勘違いなんてしてないです...ハイ。
>>871
シマツタ..
. は“改行を除く”任意の文字でしたね。
改行もマッチすると思いこんでますた。
s/(「.*)\n(.*」)/$1$2/g;
文字コード直接書いた方がイイかな?
...ていうか思いきり間違ってるような気がする。
0874デフォルトの名無しさん
NGNGというサブルーチン呼び出しを行ったときに、2番目と3番目の引数は
どんな型のデータが渡されるのですか?サブルーチン側では
my $file = shift;
my $hash = shift;
my $function = shift;
となっているからスカラー値だとは思うのですが、なぜにわざわざ\%とか\&見たいな
プレフィックスらしきものをつけるのでしょうか?バリバリ初心者ですまない。
0875874
NGNGメモリ領域参照のためのリファレンスだったのですね。スレ汚しすみませんでした。
0876デフォルトの名無しさん
NGNG「AAA
BBB
CCC」
のような文の場合がアウトでつ・・・。
0877デフォルトの名無しさん
NGNGs/「.*?」/$&=~tr(\n)()d/mge;
0878デフォルトの名無しさん
NGNGてゆか、データソースはなによ?
改行入りですべて変数に入っているのか?
さっき1行ずつ読んでその処理するのを書いていたけど、
"「"があったら状態遷移して、"」"までchompして.してたなり。
しかし日本語には、"「"と"」" がバランスしていなければイケナイ
という理由はないという幻惑的な罠もあったり。
0879デフォルトの名無しさん
NGNG<!DOCTYPE HTML PUBLIC>
EOF
みたいなかき方はできないものかな。ようは関数内に書き込まれた
文字列定数への参照を戻り値として使いたいところなのですが。
0880デフォルトの名無しさん
NGNG〜
EOF
これで上手く動きました。参考にしたのは下のドキュメントです
http://www30.cds.ne.jp/~yukinaka/eureka/notes/perl_memo.html#heredoc
0881デフォルトの名無しさん
NGNG$str =~ s/「[^「]*\n[^」]*」//g;
print $str;
exit;
>abcdef
0882デフォルトの名無しさん
NGNG0883デフォルトの名無しさん
NGNGちょいと事情がありまして、
---8<---
while(<>){$text .= $_;}
$_ = $text;
s/\r\n/\n/g;
s/(「.*)\n(.*」)/$1$2/g; # 869氏提案
s/\n/\r\n/g;
print $_;
---8<---
なスクリプトに、
---8<---
てすと
「A
A
A」
「BBB!
」
「CCC「D」CCC
」
おわり
---8<---
なSJISテキストを食わせて一括整形したいのでつ。
0884デフォルトの名無しさん
NGNGwhile ($str =~ s/「(.*?)\n([^\x00]*?」)/「$1$2/) {};
print $str;
>abc「1234「ABCDEF」5678」def
0885デフォルトの名無しさん
NGNG1 while $str =~ s/(「.*?)\n([^\x00]*?」)/$1$2/;
print $str;
>abc
>「1234「ABCDEF」5678」d
>ef
>
0886デフォルトの名無しさん
NGNG1 while $str =~ s/(「|「)(.*?)\n([^\x00]*?)(」|」)/$1$2$3$4/;
print $str;
>abc
>「1234「ほげほげ」999「ABCDEF」5678」d
>ef
>
0887デフォルトの名無しさん
NGNG1 while $str =~ s/(「|「)([^(」)|(」)]*?)\n/$1$2/;
1 while $str =~ s/\n([^(「)|(「)]*?)(」|」)/$1$2/;
print $str;
>abc
>「1234「ほげほげ」」
>999
>「888「ABCDEF」5678」d
>ef
>
0888デフォルトの名無しさん
NGNG# euc '「' = 0xA1D6 '」' = 0xA1D7 '「' = 0xD6 '' = 0xD7
require 'jcode.pl';
$str = "abc\n「12\n34「ほuvげ\nほuvげ」\n\n」\n999「\n\n\n\n」\n「\n888\n「AB\nCD\nEF」\n56\n78」d\nef\n";
&jcode'sjis2euc(*str);
1 while $str =~ s/(\xA1\xD6)([^\xA1\xD7]*?)\n/$1$2/;
1 while $str =~ s/\n([^\xA1\xD6]*?)(\xA1\xD7)/$1$2/;
&jcode'euc2sjis(*str);
print $str;
0889デフォルトの名無しさん
NGNG書き忘れ。
perlのversionは
This is perl, v5.6.1 built for cygwin-multi
でつ。
>>884-887
お疲れ様でした。
が、それでは>>882様のご指摘どおり、
地獄の底でのたうつことになってしまいます・・・。
0890デフォルトの名無しさん
NGNG# euc '「' = 0xA1D6 '」' = 0xA1D7 '「' = 0xD6 '' = 0xD7
$str = "abc\n「\n1\n2\n3」「12\n34「ほu\nvげ\nほuvげ」\n\n」\n999「\n\n\n\n」\n「\n888\n「AB\nCD\nEF」\n56\n78」d\nef\n";
1 while $str =~ s/(「)([^\x81\x76|\x00|\x00]*?)\n/$1$2/;
1 while $str =~ s/\n([^\x81\x75|\x00|\x00]*?)(」)/$1$2/;
print $str;
0891デフォルトの名無しさん
NGNGwhile ($str =~ /(「|」)/) {
if ($str =~ s/^([^\x00]*?「)([^\x00]*?)(」)//) {
$a = $1;
$b = $2;
$c = $3;
$b =~ s/\n//g;
$s .= $a . $b . $c;
}
if ($str =~ s/^([^\x00]*?)(」)//) {
$a = $1;
$b = $2;
$a =~ s/\n//g;
$s .= $a . $b;
}
}
$str = $s . $str;
print $str;
0892デフォルトの名無しさん
NGNG日本語のそれと同じ。
0893デフォルトの名無しさん
NGNG>[^<マルチバイト文字>]ってやって地獄の底でのたうつ人って多いよね。
(?:(?!<マルチバイト文字>).)
かな?
先輩に基本だとか言われた記憶が……
0894デフォルトの名無しさん
NGNGをを〜良い事を教えてもらった!
ありがとうございます
まだ意味は良くわかっていませんけれど
(?!)
こういう表記も使えるのですね…感謝
0895デフォルトの名無しさん
NGNG$/ = undef;
$_ = <>;
close(IN);
s/\r\n/\n/g;
s/\\/\r/g;
s/(「[.|\r]*)\n([.|\r]*」)/$1$2/g; # 869氏提案
s/\r/\\/g;
s/\n/\r\n/g;
print "$_";
--------sample text-------------
てすと
「―
ソ
Ы」
「�\噂浬欺
圭構蚕文!
」
「十申曾箪「貼」能表暴予禄兔
」
「喀媾彌拿杤歃濬畚秉綵臀
藹觸軆鐔饅鷭�x�x」
おわり
0896デフォルトの名無しさん
NGNGその中身を hash にぶち込んで置いて後で使いまわそうとか考えているのですが、
私が考えたモノがどうもピンと来ないのです。もしよりスマート(で美しい)な方
法があれば、ご教授頂けませんでしょうか。
# ここをこうすると激しく読みやすいyoとか
# ここをこうするとコード短縮だ!とか(^^;
# 出直して来ぃ!とか
%filedata=();
@filelist=qw(hoge.dat fuga.dat foo.txt);
foreach(@filelist){
open FILEHANDLE,"$_";
@{$filedata{$_}}=<FILEHANDLE>;
close FILEHANDLE;
}
# 利用例
print foreach @{$filedata{$filelist[1]}};
print ${$filedata{$filelist[2]}}[3];
@array=split /,/,${$filedata{$filelist[0]}}[0];
0897デフォルトの名無しさん
NGNGとりあえず "->"記法使えよ。
$filedata{$filelist[2]}->[3]
0898896
NGNG> とりあえず "->"記法使えよ。
> $filedata{$filelist[2]}->[3]
それだーーーーーーー!!!!
(多分恐らくきっとそうだと思うんですが)それが使いたかったんです。
ありがとうございます。m(__)m
# 1文字軽減できますた。(自己満
うーむ、、心なしか美しくなったような気がします。o┤*´Д`*├o
他に何かありませんでしょうか。何か見落としている気がするのですが..
# 真利用例
print foreach @{$filedata{$filelist[1]}};
print $filedata{$filelist[2]}->[3];
@array=split /,/,$filedata{$filelist[0]}->[0];
0899デフォルトの名無しさん
NGNGGD.pm(http://www.vector.co.jp/soft/dl/win95/util/se134215.html)
を使おうとしたのですが、PerlCRT.dllが見つからないといわれます。
調べてみたのですが、(http://homepage1.nifty.com/yito/namazu/gbook/20020508.1835.html)
ActivePerlを再インストールしても、状況はかわりません。
どうすればよいのでしょうか。
0900デフォルトの名無しさん
NGNGs/\r\n/\n/g;
みんなこうやって書いてる?
s/0x0D0x0A/0x0A/g;
と書かない?
0901デフォルトの名無しさん
NGNG0902デフォルトの名無しさん
NGNG> s/\r\n/\n/g;
> みんなこうやって書いてる?
> s/0x0D0x0A/0x0A/g;
> と書かない?
最近は余り意味が無いように感じてきたので、
私は \r\n で書いてます。
改行が間違いなく CRLF という場合を除いては
s/(\r\r\n|\r\n)/\n/g;
と、書いてる事が多いかもです。
# s/\r\r\n/\n/g;
# s/\r\n/\n/g;
# とした方が処理が早いんだっけか。
# 眠くてなにも考えられん..
0903デフォルトの名無しさん
NGNG\nって
Windows系だと0x0D0x0Aで
UNIX系だと0x0Aで
Mac系だと0x0D
だと思ってるんですが、これは私の認識違いでしょうか?
0904903
NGNG私は>>903と思ってるので、
\r\nだとWindowsで動かした時には0x0D0x0D0x0Aで
Linuxで動かした時には0x0D0x0Aになってしまう
と認識してます。
(昔これではまった記憶があるのですが。。。
最近は状況が異なるのでしょうか?)
0905デフォルトの名無しさん
NGNGというか、... って5.6からなのかな?
.. の方は
while(<>){ print if /hoge/ .. /fuga/; }
こんな感じで使ってたんだけど、...は動作がどう違うんだろう
0906デフォルトの名無しさん
NGNGUnixなperl を使用して、Windows上で作成されたファイルを扱うときは
\r\n にしなきゃダメだと思われ
perlインタプリタの環境と、対象ファイルの環境が一緒なら
\n で、それぞれの環境に合った上手い処理をしてくれるはず。
0907デフォルトの名無しさん
NGNGWin上では入力の場合は改行コードはバイナリとして入力され
出力の場合はテキストとして出力されるので
その結果入力されたWinの改行コードは\r\nだが
(これが\nに変換されれば問題ないが、そうならない)
出力された場合は\nが\r\nになってしまい
何もしないと\r\r\nとなってしまう事を言ってるのだと思われ
by ActivePerl 5.22
0908デフォルトの名無しさん
NGNG>perlインタプリタの環境と、対象ファイルの環境が一緒なら
>\n で、それぞれの環境に合った上手い処理をしてくれるはず。
だからこそ、環境依存の\nを使うより環境非依存の0x0A(0x0D)を使った方が
いいんじゃないかと思っているのですが。
例えばUNIXな"0x0A"を Windows上で s/\n//g しても消えないですよね?
試しにこんなもの作ってみました。
open(IN, "LF.txt");
$_ = join('', <IN>);
close(IN);
s/\n//;
print;
0909デフォルトの名無しさん
NGNG-------------------------
open(IN, "LF.txt");
$_ = join('', <IN>);
close(IN);
s/\r\n//;
print;
-------------------------
です。LF.txtの中身は 文字"a"と改行です。
で、改行コード LF(UNIX)・CRLF(Windows)の2種類で試してみました。
0910結果です
NGNG$ perl hoge.pl | dump # LF(UNIX形式)
Addr 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 2 4 6 8 A C E
-------- ---- ---- ---- ---- ---- ---- ---- ---- ----------------
00000000 61 a
$ perl hoge.pl | dump #CRLF(UNIX形式)
Addr 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 2 4 6 8 A C E
-------- ---- ---- ---- ---- ---- ---- ---- ---- ----------------
00000000 610a a.
このように s/\r\n// だと、Windows上で実行した時に s/0x0D0x0D0x0A//となってしまうので
よろしくないと思ったのです。
0911デフォルトの名無しさん
NGNG>>907
>その結果入力されたWinの改行コードは\r\nだが
>(これが\nに変換されれば問題ないが、そうならない)
>出力された場合は\nが\r\nになってしまい
>何もしないと\r\r\nとなってしまう事を言ってるのだと思われ
揚げ足取るつもりじゃないですが、何か変です。
UNIXでもWindowsでも改行コードは\nです。
でも、\nの実際のコードが"0x0A"なのか"0x0D0x0A"なのかの違いがあるのです。
0912デフォルトの名無しさん
NGNG文字コードなんてもの自体が環境依存なので
>環境非依存の0x0A(0x0D)
と思ってる点で、すでに間違いだから考え直した方が良いよ
0913デフォルトの名無しさん
NGNG違うって
試しにWin上でbinmode使って出力してみ
0914デフォルトの名無しさん
NGNGどういうことですか?0x0DはどのOSでも0x0Dじゃないですか?
0915デフォルトの名無しさん
NGNGbinmode(STDOU)でも結果は同じです。
そうじゃなくて、s///でマッチさせる時に\nを使うと、
0x0Aになるのか0x0D0x0AになるのかはOS依存だからマッチに失敗する時があるといいたいんですが。
(Macほったらかしですけど)
0916デフォルトの名無しさん
NGNG現在Perlの-cオプションを使って構文チェックをしているのですが、このとき、絶対にコードを実行させないようにしたいのです。
暫定的に'BEGIN'や'END'を含むコードを弾くようにしてみたのですが、これでコードは確実に実行されなくなりますか?
それとも、もっと簡単な方法があるのでしょうか?
0917デフォルトの名無しさん
NGNGそう言う事を言いたかったのね…だったら
open(IN, "LF.txt");
の後で
binmode(IN);
で試してみ
テキストモードで入力すれば0x0d0x0aにマッチするけど
バイナリモードで入力すれば0x0aでマッチするから
0918デフォルトの名無しさん
NGNGそれが改行コードとは限らないので
その結果正しく動くとは限らない
(極端な話0x0Aが数字の"1"等であっても構わない)
0919デフォルトの名無しさん
NGNGbinmodeしようが何をしようが、\nの実際のコードがOSによって変わるのだから、
例えばbinmode入力が"0x0A"であった場合(UNIXのファイルを読む場合)、
s/\n// によって改行が消えるのはUNIX系だけです。Windows系ではそもそもマッチしません。
同様に s/\r\n//だとUNIX系でもWindows系でもマッチしません。
また、binmode入力が"0x0D0x0A"であった場合(Windows系のファイルを読む場合)、
Windows系ではs/\n// によって改行が消えますが、UNIX系では\r(0x0D)が残ってしまいます。
同様に s/\r\n//だとUNIX系では消えますが、もWindows系ではマッチしません。
>>918
そうなんですか。。。ASCIIに従うコード体系を使っていれば0x0Dが復帰で0x0Aが改行だと思っていたのですが。。。
#ところでこれ、話ずれてません?
0920デフォルトの名無しさん
NGNGこれって本当?
0921デフォルトの名無しさん
NGNGちゃんと試した?
これは多分UNIXとの互換性を考えて出来たシステムだと思うけど
少なくともActivePerl 5.22ではbinmodeで入力したファイルの
改行コードは\nでも\r\nでもマッチするように出来てるよ
確か、これは何かの本(思い出せないけど)にのってた話だったんだけど
もし試して駄目だったら、一時的なバージョンだったのかな…?
0922921
NGNGもちろん\nの場合は0x0dが残ります
0923デフォルトの名無しさん
NGNGMACは0x0Dが改行で0x0Aが復帰
0924デフォルトの名無しさん
NGNGなるほど。そうだったのですか。
うちは
$ perl -version
This is perl, v5.6.1 built for cygwin-multi
なのでActivePerlは知りませんでした。
ところでActivePerl では
print scalar(split(//,"\n"));
の結果はどうなりますか?
0925マカ ◆F52DmOxJlc
NGNG0926デフォルトの名無しさん
NGNG誰かが↓に投げてました。(私じゃないですよ。マルチポスト断固反対!)
***すれ立てるまでもない質問はここで 第28刷***
http://pc3.2ch.net/test/read.cgi/tech/1040473175/274-
ですので、この話題は終わりということで。>>924も忘れていいです。
失礼しました。
0927デフォルトの名無しさん
NGNGundumpってのはどうやって入手するん?
ftpサイトから持ってきたundump.cをコンパイルしようとしたんだけど、
makeできなかったし。
ちなみにOSはSunOSの5.6らしい
0928デフォルトの名無しさん
NGNG$str = \"aaa is $$aaa\n";
print "$$str\n";
$aaa = \'bbb';
print "$$str\n";
こういうコードを書いてみたのですが、二つのプリント文は同じ結果を返します。
おそらく$strに文字列のリファレンスを代入する時点で、一時オブジェクトを
生成してしまうようですが、これを避ける方法はありませんか?
やりたいこととしては、任意の時点において文字列の中身を自由に差し替えたい
のですが。。。やはり文字列集合として、配列として構成しなくてはならないですかね
0929デフォルトの名無しさん
NGNG求めているものと同じかどうかは分からないが。
$aaa = 'aaa';
$str = 'aaa is $aaa';
eval "print \"$str\n\"";
$aaa = 'bbb';
eval "print \"$str\n\"";
0930デフォルトの名無しさん
NGNGやりたいことがよくわからないが、出力のデフォルト文字列をテンプレートとして
置換をかけてはいかんか?
$str = "aaa=_Change_String_";
print chg_prin($str, "aaa");
print chg_prin($str, "bbb");
sub chg_print
{
shift $a = $_;
shift $b = $_;
a =~ s/_Change_String/$b/;
return a
}
0931デフォルトの名無しさん
NGNG$strcode = '\"aaa is $$aaa\n";'; # (*)
$aaa = \'AAA';
$str = eval $strcode;
print $strcode, "\n";
print $str;
(*)でquoteに"..."を使うと
$strcode = "\\\"aaa is \\\$\\\$aaa\\n\";";
みたいな感じになる。
あと、他の別解としてソフトリファレンスとか。
0932デフォルトの名無しさん
NGNG0933デフォルトの名無しさん
NGNGなんとなくevalは遅いというイメージがあって
使いたくないので、リファレンスの配列という形にして
やることにします。どうもありがとうございました。
0934デフォルトの名無しさん
NGNGsub G{
my $a=shift;
if($a>0){
G($a-1);
print"$a\n";
G($a-1);
}print" \#$a\n";
}
この処理の流れが良く理解できません
アドバイスなどお願いします
0935デフォルトの名無しさん
NGNG0936934
NGNG途中から流れ方が分からなくなります
forループなんかだとprintかましまくったら
結構すぐわかるんですが。。
0937デフォルトの名無しさん
NGNGそれと再帰呼び出しは引数に対する終了条件をよく考えておく。
この関数は単純だからただ一つの引数0が入ってきたら再帰呼び出ししないっていう
単純なもの。がんばってね。
0938934
NGNGところでこのソースを使うんですが演算はperlの方が
簡単に検証出来るかと思いまして
#0
1
#0
#1
2
#0
1
#0
#1
#2
3
#0
1
#0
#1
2
#0
1
#0
#1
#2
#3
この吐き出される順序がどの様になってんのかと?
0939デフォルトの名無しさん
NGNG札幌旭川網走
十勝根室
函館 室蘭
青森
秋田岩手
山形宮城
佐渡 新潟福島
富山群馬栃木
島根鳥取兵京都福井石川長山(゚∀゚)茨城
長佐福岡 山口広島岡山庫大奈滋賀岐阜野梨東京千葉
崎賀熊大分 阪良三重愛知静岡神奈川
本宮崎 愛媛香川 和歌山
鹿児島 高知徳島 大島
沖縄 小笠原
0940デフォルトの名無しさん
NGNGM-x hanoiとやってごらん。段数が多すぎて目が回るときはC-x 3 M-x hanoiだ。
0941934
NGNGどこで吐き出されるのかをしりたい
流れです 流れ〜。。
>>939
ワラタッ
0942デフォルトの名無しさん
NGNGG() を展開してフローチャート書けば?
G() を3回再起呼び出しすると $a = 0 になって if がスキップされる。
0944934
NGNG頭痛て〜
0945デフォルトの名無しさん
NGNGまぁあれだ。マルチポストは止めとけ。
0946デフォルトの名無しさん
NGNG素直に printf を使うべきでは…?
$aaa = \'aaa';
$str = \"aaa is %s\n"; # <-- %s に変化部が入る
printf $$str, $$aaa, "\n"; # <-- 変化部を与える
$aaa = \'bbb';
printf $$str, $$aaa, "\n"; # <-- 変化部を与える
0947デフォルトの名無しさん
NGNG表示にインデントを付けてみたけど、これなら解かりやすい?
再帰関数や二分木のデバッグ表示に良く使う手…。
my $ind = 0; # <--インデント(再帰呼出)の深さ
&G(3);
sub G{
my $a=shift;
$ind++;
if($a>0){ # (引数がゼロのときは再帰呼出をしない)
&G($a-1);
print "\t" x $ind, "$a\n"; # ( x は文字列リピート演算子 )
&G($a-1);
}
print "\t" x $ind, " #$a\n";
$ind--;
}
0948946
NGNG0949934
NGNGだいぶ理解できてきました
0950デフォルトの名無しさん
NGNGwhile($random == 20){
$random = int( rand(100) ) + 1;
print "$random<br>";
}
print "$random<br>";
このプログラムを実行するとどうもwhile文の中をスルーしているみたいなんですが
どこかプログラムがおかしいのでしょうか?
プログラム的には$randomが20になったらループから抜けるプログラムです。
0951デフォルトの名無しさん
NGNG0952デフォルトの名無しさん
NGNGwhile()の使い方勉強し直したほうがよさげ。
0953デフォルトの名無しさん
NGNG板違い
0954デフォルトの名無しさん
NGNGwhile判定式の真偽の意味をキチンと理解してないからだろうなぁ…。
そのコードでは、ループは一度も実行されないのが正しいぞ?w
希望するループの脱出条件は「20になったら」であるから──
$random = 0; # <-- ゼロ初期化されている=20では“ない”
while ( $random != 20 ) { # <-- 20では“ない”時はループせよ
または、
until ( $random == 20 ) { # until=while とは真偽判定が逆の命令
0955デフォルトの名無しさん
NGNGインターネット上のファイルのオープン
で困っています。if(-e $URL)やopen(FILE,$URL)でいいんですか?
0956デフォルトの名無しさん
NGNG0957デフォルトの名無しさん
NGNG0958デフォルトの名無しさん
NGNGそれではムソ。いくつか方法はあるんだが…、
1.CPANでその種のモジュールを探してきてインストールする(具体名忘れた、スマソ)
2.(UNIXでなら外部コマンドの) wget などを利用して読み込む
open FILE, "wget $URL|" or die;
binmode FILE;
$data = join '', <FILE>; close FILE; # (エラー処理やタイムアウトは知らん)
3.自力で低レベルコーディングするw
この辺がサンプルになるとオモワレ。
ソース?: ttp://multix.jp/download/perl/httpget.cgi
実行例?: ttp://multix.jp/cgi-bin/httpget.cgi
perl5.8.0は以前のバージョンとバイナリ互換がないので、
XSを使ったモジュールは5.8.0用にビルドされたものじゃないと動かないよ。
それが5.8.0に対応するのを待つか、他のを探すか、自分でビルドするしかないね。
0960950
NGNG恥ずかしい。すごく簡単なことだったんですね。
あんな簡単な事も丁寧に教えてくださってありがとうございます。
とても参考になりました。
0961デフォルトの名無しさん
NGNGありがとう。HTMLなんだけど、やっぱりバイナリとして開いたほうがいいのかなぁ。
0962デフォルトの名無しさん
NGNGmy $url = 'http://pc3.2ch.net/test/read.cgi/tech/1033688230/l50';
my $text = get $url;
$text =~ s/<br>/\n/ig;
$text =~ s/<dd>/\n/ig;
$text=~ s/<.*?>//sg;
$text=~ s/</</g;
$text=~ s/>/>/g;
print $text;
exit;
0963デフォルトの名無しさん
NGNGhtmlを取ってきた後、そこに含まれるURLを取り出してリスト(txtとか)に
するにはどうしたらいいでしょう。
更にはそのリストを使ってたくさんのサイトを巡ってプレーンテキストを
収集するプログラムが作りたいのですが・・。
0964デフォルトの名無しさん
NGNG0965デフォルトの名無しさん
NGNG1秒毎にゾンビプロセスが残ります。
fork の最後に exit してるのに何故でしょう?
0966デフォルトの名無しさん
NGNGうん…。萎えるよねぇ。
>>963
とりあえずHTMLを取ってくる方法は>>958や>>962を
参考にしていただくとして、例をあげると、
$/ = undef; # (次の行のための細工)
$_ = <>; # 仮に標準入力からHTMLテキストを頂くとして
s/\s+/ /g; # 邪魔な改行や連続空白を整理
s{(src|href)\s*=\s*"?([^"]+)"?}{ # それっぽい所を抜き出す
push @urllist, $2; "";
}eg;
print "$_\n" foreach (@urllist); # 標準出力へ書き出す
注:相対URLの絶対アドレス化までは面倒見てないし、
空白を含むような変態アドレス(爆)にも対応してないし、
リンクタグになってないURLも無視している。
あとはこの処理結果を更に再帰的にやってみる?(無限ループしそうだが)
>>965
waitpid 関数のドキュメントも参照してみたらどうだろう?
0967963
NGNG標準入力から渡したのはちゃんと抽出できました。
この$_ = <>;をソケット先の読み込んだのにしてあげれば良いのですね。
試行錯誤してみます。
組み始めて1ヶ月くらいなので解からないことばかりで^^;
ありがとうございます><
0968デフォルトの名無しさん
NGNGuse HTML::LinkExtor;
my $url = 'http://www.google.com/intl/ja/';
my $p = new HTML::LinkExtor(\&want, $url );
$p->parse(get $url or die "filed:get $url");
exit;
sub want
{
my($tag, %links) = @_;
$tag = lc $tag;
return unless $tag eq 'img';
print $links{ src }, "\n";
}
0969デフォルトの名無しさん
NGNGそと側の<table.にマッチさせるにはどうしたらいいdねすか?
「<table>の開始タグと終了タグを一致させたい」みたいな
0970963
NGNGすごい。。相対的なURLもこれだけでOKなんですね。
末尾に/がないものや.cgi等も持ってきちゃう場合は
削除や書き込まないようにすればいいのでしょうか。
0971デフォルトの名無しさん
NGNGちょこっとでいいからソケットプログラミングやってみると良いと思われ。
便利なライブラリを使うとすぐできちゃうけど、
それだと基本が身につかないから応用ができないよ。
0972デフォルトの名無しさん
NGNG始めてから1箇月でこの程度の才能無しにアドバイスしても
無駄だと。
0973デフォルトの名無しさん
NGNG0974デフォルトの名無しさん
NGNGRSA1? RSA2? どれを使えばいいのでしょうか?
検索してみても有効な結果が見つかりませんが、perldoc以外のサンプルコードありませんか?
0975デフォルトの名無しさん
NGNG上の「ここ」の部分を取得したいのですが、色々な例外を考えて
いくとどうも上手くマッチさせることができません。
考えなくてはならないことは
・タグの中には余計な要素があるかもしれない
・最後の要素と閉じタグの間には文字があるかもしれない
・最後の要素はないかもしれない
これを考えていき(\nはないものとして)
/<.*?a.+?href=\"(.+?)\".*?>(.+?)<\/.*?a.*?>.*?(\(.+?\))?/ig
としてみたのですが、最後の要素と閉じタグの間に文字があると
例えあっても、最後の要素がないことになってしまいます。
この場合にはどのようにするのが適当でしょうか?
0976デフォルトの名無しさん
NGNG/<.*?a.+?href=\"(.+?)\".*?>(.+?)<\/.*?a.*?>[^(]*(\(.+?\))?/ig
これでどうだ?
.*? を [^(]* に変更。
( 以外の何かの0回以上の繰り返し。
0978977
NGNGご指摘ありがとうございます。 . で表しすぎているということに
気付きました。
> /<.*?a.+?href=\"(.+?)\".*?>(.+?)<\/.*?a.*?>[^(]*(\(.+?\))?/ig
これを試してみたのですが下の
<a href="xxx">xxx</a><a href="xxx">xxx</a>(xxx)
全体にマッチしてしまいます。上の文字列に対しては
2回マッチするようにしたいのですが、
少し考えてイメージとしてはこんな感じなのですが
/<[^>]*?a[^>]+?href=\"([^\"]+?)\"[^>]*>(.+?)<\/[^>]*?a[^>]*?>[^(?:<a)]*?(\([^)]+?\))?/i
[^(?:<a)]←この <a という文字列以外にマッチという部分が
実際は上手く表せません。
何か良い手はないものでしょうか。
0979975
NGNG0980デフォルトの名無しさん
NGNG<[^>]?a だと <!DOCTYPE html PUBLIC (略) Tradi...のaなんかにもマッチしてしまわないか?
<a で良いと思うんだけど。
あと、hrefの値に"があると分かっているの?
場合によっては "が'になっているかもしれないし。
0981975
NGNG試行錯誤してこのような形になりました。これでも
</a>と(xxxxx)の間に文字があると失敗してしまい上手く取得することができません。
>>980
>.*?ってさ、.*とどう違うの?何か違うのか?素人考えでスマンが
<[^>]*a[^>]
のように書き始めてしまうと<a href="a.html">でa.htmlのaまで
マッチしてしまい、上手くいかないと思い<[^>]*?aで書き始めました。
><[^>]?a だと <!DOCTYPE html PUBLIC (略) Tradi...のaなんかにもマッチしてしまわないか?
これは hrefの段階でマッチが失敗するので大丈夫だと思います。
>場合によっては "が'になっているかもしれないし。
確かにその通りでした。("|')?のようにして上手くしのぎたいと思います。
0982975
NGNG>のように書き始めてしまうと<a href="a.html">でa.htmlのaまで
>マッチしてしまい、上手くいかないと思い<[^>]*?aで書き始めました。
これはまたhrefでマッチが失敗するので大丈夫ですね・・・
<a target="top" href="xxxxx">の場合にtargetのaにマッチしてしまうため
<[^>]*?a
として書き始めました。
0983デフォルトの名無しさん
NGNG0984デフォルトの名無しさん
NGNGどこかで妥協しないと泥沼確定。正規表現は万能に近いが得手不得手はある。
#特に iso-jis や Shift_JISコードが混じってると余計に死ねるw
>>980
/.*?/ の?は最短マッチフラグ。普通“.*”は最長一致(貪欲マッチ)だが、
最初に検索条件を満足したところでストップ(break)をかけるために使う。
$_ = "1,2,3,";
print $&, "\n" if /.*,/; # 1,2,3, <- 最後まで全部当たってしまう
print $&, "\n" if /.*?,/; # 1, <- 最初に当たったところで止まる
このフラグはどんな量指定子にも使える。
?? +? *? {n}? {n,}? {n,m}? といった具合。(続に言うPerl拡張)
/<[^>]?a/ だけど、昔はともかく現在は
タグ開始を示す“<”の直後に空白や改行を入れるのは
イリーガルなはずなので、/<a/ で充分だろうなぁ。
逆にタグ内や“=”の前後、“>”直前の空白&改行挿入とかは許されるので
そういうのまで考えてくと本当にキリがない。
素直に既存のモジュールから使えそうなのを探したほうが楽よ。
#それでも「(>_<)」といった顔文字があると動作が狂いやすいが…。
0985975
NGNG確かにこのままでは無理そうなので、妥協して
aタグ以外を取り払ってからマッチさせることにしました。
s/<\/[^a][^>]*>//ig;
s/<[^a\/][^>]*>//ig;
/<a\s*href=\"(.+?)\"[^>]*>(.+?)<\/a>\s*(\(.+?\))?/i;
特定のサイトのを取ることができればよかったので、
とりあえずは上手く動かすことができました。
0986デフォルトの名無しさん
NGNG「1〜36の数字があって、その中からランダム数字を選んでに10対のペアを作る。
ただし、選ばれる数字(この場合には全20個)には同じ数字が含まれてはならない。
(つまり一度選ばれた数字は2度と選ばれないということ。)」
さて、どうやったらいいですかねえ?
配列を使うということくらいしか思いつかない。
0987デフォルトの名無しさん
NGNGfor ($i = 1; $i <= 10; $i++) {
$x = int(rand(36));
if (!$a{$x}) { $a{$x} = 'hoge'; }
}
@a = %a;
for ($i = 1; $i <= 10; $i++) {
$x = int(rand(36));
if (!$a{$x}) { $a{$x} = 'hoge'; print "$a[($i -1)*2]\t$x\n";}
}
0988987
NGNG10満開ぐらい動かせば奇跡的にうまくいくかもしらんけど。
0989デフォルトの名無しさん
NGNGメールアドレスもまじめにやるとこんな感じになっちまうらしいしな。
出勤前で時間がないので考え方だけ。
・配列に 1 - 36 を格納。
・int(rand(36)) で一つを決定。
・決定した数字を配列から消す。これで配列の要素が一つ減る。
・以下 int(rand(35)), int(rand(34)), int(rand(33)) ...
0991デフォルトの名無しさん
NGNG次スレ、
Perlについての質問箱 3箱目
http://pc3.2ch.net/test/read.cgi/tech/1041205885/l50
0992デフォルトの名無しさん
NGNG>>990を参考に作ってみた
srand;
@card = (1 .. 36);
$pair = 10;
@result = ();
for($i=0;$i<$pair; $i++){
($p1) = splice(@card,int(rand(@card)),1);
($p2) = splice(@card,int(rand(@card)),1);
push(@result, [$p1,$p2]);
}
foreach $in (@result){
print $in->[0], ":", $in->[1], "\n";
}
一時変数使わないようにしたり、リファレンス止めたり色々出来るけど
分かりやすい基本形って事で
0993デフォルトの名無しさん
NGNG最短マッチね。さんくす。
そーいや、Perlって「独自拡張」があるんだね。
#旧スレですまん
0994986
NGNGさんくす。
> ・決定した数字を配列から消す。これで配列の要素が一つ減る。
の実現の仕方がよく分からなかったんだよなあ。
>>992のコードよく読んで勉強しまつ。
0996デフォルトの名無しさん
NGNG0997デフォルトの名無しさん
NGNG0999デフォルトの名無しさん
NGNG1000デフォルトの名無しさん
NGNG10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。