Perlについての質問箱 37箱目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2008/08/11(月) 19:10:40"There's more than one way to do it" ということで、
Perlの奥深さについて皆で語り合い、追求してまいりましょう。
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
( WEBプログラミング板 http://pc11.2ch.net/php/ )
CGIの質問は答えが Perlと全然関係ない話に帰着する場合が
多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
http://www.perl.org/get.html
● 2008/08/11 現在の最新版(安定版): 5.10.0
● 2008/08/11 現在の開発版: 5.9.5
▼ 前スレ
Perlについての質問箱 36箱目
http://pc11.2ch.net/test/read.cgi/tech/1215569470/
リンク集は>>2-3
Perl 日本語処理の基礎の基礎 >>4
過去スレは>>5-6 あたり
0002デフォルトの名無しさん
2008/08/11(月) 19:11:01Perlプログラミング講座: ttp://www.site-cooler.com/kwl/perl/
[本]
リャマ: ttp://www.oreilly.co.jp/books/4873111269/
駱駝: ttp://www.oreilly.co.jp/books/4873110963/
Effective Perl: ttp://www.ascii.co.jp/books/books/detail/4-7561-3057-7.shtml (修正)
クックブック: ttp://www.oreilly.co.jp/books/4873112028/
Perl ベストプラクティス: ttp://www.oreilly.co.jp/books/4873113008/
Perl Hacks: ttp://www.oreilly.co.jp/books/9784873113142/
[オンラインマニュアル]
最新のドキュメント: ttp://search.cpan.org/dist/perl/
perl5.8.xのドキュメント(一部): ttp://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: ttp://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: ttp://www.cpan.jp/search.cgi (停止中)
perldoc.jp: ttp://www.perldoc.jp/
perldoc.com: ttp://www.perldoc.com/
0003デフォルトの名無しさん
2008/08/11(月) 19:11:21CPAN.com: ttp://search.cpan.org/
河馬屋二千年堂: ttp://homepage3.nifty.com/hippo2000/
[テクニック]
Perlメモ: ttp://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: ttp://homepage1.nifty.com/nomenclator/perl/
Perlの小技: ttp://homepage3.nifty.com/hippo2000/perltips/index.htm
[Perl 5.8 Unicodeメモ]
http://www.rwds.net/kuroita/program/Perl_unicode.html (修正)
ttp://www.namazu.org/~tsuchiya/perl/perl-5.8.html
ttp://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
0004デフォルトの名無しさん
2008/08/11(月) 19:11:45# このレスは、Windows の ActivePerl で日本語処理を行う場合のテンプレートです。
# このレスの内容をそのまま、UTF8 形式のソースファイルに保存して下さい。
# 入出力ともシフトJIS形式のファイルまたはDOS窓を想定しています。
# まず、以下の行を先頭に入れて下さい。
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)"; # ※1
use Encode;
# 次に、あなたが実行したい処理の内容を入れて下さい。
$file = 'C:/なんたら/かんたら.txt';
open my $fh, '<', encode("cp932", $file) or die $! ; # ※2
print <$fh>;
# 以上の内容は、日本語処理が解らない人でも、とりあえず日本語処理ができてしまう
# おまじないです。条件が異なる場合の対処方法は、ご自分で勉強して下さい。
# 【注】※1.の行を入れると、DOS窓への日本語出力は簡便になりますが、
# ソースファイル名に非ANSI文字が含まれる場合にdie 文の出力が失敗します。
# ※2.OSに渡す文字列(ファイル名,dosコマンドのオプションなど)は、
# この例のようにcp932でエンコードする必要があります。
0005デフォルトの名無しさん
2008/08/11(月) 19:12:052 ttp://pc3.2ch.net/tech/kako/1033/10336/1033688230.html
3 ttp://pc2.2ch.net/tech/kako/1041/10412/1041205885.html
4 ttp://pc2.2ch.net/tech/kako/1048/10485/1048519394.html
5 ttp://pc5.2ch.net/tech/kako/1053/10530/1053053082.html
6 ttp://pc5.2ch.net/tech/kako/1060/10606/1060689008.html
7 ttp://pc2.2ch.net/test/read.cgi/tech/1068051036/ (事故により消滅)
8 ttp://pc2.2ch.net/test/read.cgi/tech/1074151549/ (事故により消滅)
9 ttp://pc5.2ch.net/test/read.cgi/tech/1079114157/
10 ttp://pc5.2ch.net/test/read.cgi/tech/1085564875/
11 ttp://pc5.2ch.net/test/read.cgi/tech/1090889189/
12 ttp://pc5.2ch.net/test/read.cgi/tech/1094579428/
13 ttp://pc5.2ch.net/test/read.cgi/tech/1097851764/
14 ttp://pc5.2ch.net/test/read.cgi/tech/1101649274/
15 ttp://pc5.2ch.net/test/read.cgi/tech/1105953092/
16 ttp://pc8.2ch.net/test/read.cgi/tech/1111034732/
17 ttp://pc8.2ch.net/test/read.cgi/tech/1117870308/
18 ttp://pc8.2ch.net/test/read.cgi/tech/1121804136/
19 ttp://pc8.2ch.net/test/read.cgi/tech/1126977805/
20 ttp://pc8.2ch.net/test/read.cgi/tech/1131286411/
0006デフォルトの名無しさん
2008/08/11(月) 19:12:2621 ttp://pc8.2ch.net/test/read.cgi/tech/1134327348/
22 ttp://pc8.2ch.net/test/read.cgi/tech/1138519327/
23 ttp://pc8.2ch.net/test/read.cgi/tech/1141742901/
24 ttp://pc8.2ch.net/test/read.cgi/tech/1146022352/
25 ttp://pc8.2ch.net/test/read.cgi/tech/1149259409/
26 ttp://pc8.2ch.net/test/read.cgi/tech/1153412251/
27 ttp://pc8.2ch.net/test/read.cgi/tech/1157874614/
28 ttp://pc8.2ch.net/test/read.cgi/tech/1162273941/
29 ttp://pc11.2ch.net/test/read.cgi/tech/1166708139/
30 ttp://pc11.2ch.net/test/read.cgi/tech/1173880452/
31 ttp://pc11.2ch.net/test/read.cgi/tech/1181500187/
32 ttp://pc11.2ch.net/test/read.cgi/tech/1186995713/
33 ttp://pc11.2ch.net/test/read.cgi/tech/1192463997/
34 ttp://pc11.2ch.net/test/read.cgi/tech/1199977642/
35 ttp://pc11.2ch.net/test/read.cgi/tech/1208674881/
36 ttp://pc11.2ch.net/test/read.cgi/tech/1215569470/
0007デフォルトの名無しさん
2008/08/11(月) 19:50:16http://www.23ch.info/test/read.cgi/tech/1215569470/
0008デフォルトの名無しさん
2008/08/11(月) 19:51:562008/07/09 - 2008/08/11
0009デフォルトの名無しさん
2008/08/11(月) 20:05:290010デフォルトの名無しさん
2008/08/11(月) 22:00:190011デフォルトの名無しさん
2008/08/11(月) 22:29:09> binmode STDOUT => ":encoding(cp932)";
> ↑もしかして、これって、シフトJISで出力する、って意味だったの?
yes. 丸数字とかはJIS X 0208規格外の文字だから、
ENCODING名としてはShift_JISじゃなくてcp932を用いる必要がある。
上のは、「標準出力への出力時には、Perlの内部形式(UTF-8)文字列を
cp932に変換せよ」という意味になる。
0012デフォルトの名無しさん
2008/08/11(月) 23:22:04後は任せた!
俺? 俺はほら、なんかアレだよ、腹、そう腹がちょっとな。うん。
じゃあそゆことで! できればこの世でまた会おう!
0013デフォルトの名無しさん
2008/08/12(火) 03:52:06cp932、っていうのが、perl国の言葉で、
「シフトJIS」って意味だったのね。
0014デフォルトの名無しさん
2008/08/12(火) 03:52:44限られた身内しか知らないみたいな。
0015デフォルトの名無しさん
2008/08/12(火) 04:13:02CP932 は狭義の Shift_JIS 領域外の拡張文字も含むよ。
0016デフォルトの名無しさん
2008/08/12(火) 05:37:07>>15にもう少し付け足しすると、
そもそも「cp932」ってのは、「マイクロソフト コードページ932」のことで、いわゆるMS社独自の拡張文字セットのこと。
で何が問題かって、そのMSが独自の日本語文字コードを策定する時に、「シフトJIS」をベースに拡張したんだけど、
なにをどう間違えたのか知らないが、一部文字の内部コードに本来の「シフトJIS」とは異なるコードを
割り当ててしまったために、いくつかの混乱が起こった。(特に「〜」(全角チルダ、波線)とか有名。ほかにもいくつかある。)
つまり「cp932」は「シフトJIS」の別名ではないのは当然として、含むとか含まないとかでもない、
全く別の文字コードの一つとして認識していたほうがよいかと思う。(まあ現状、ほとんど同一視されてるけど)
ちなみにWindowsの一般的なテキストエディタ(秀丸、TeraPad、メモ帳もか?)とかで編集する時、
保存コードが「Shift_Jis」あるは「SJIS」とかになってるけど、
正確に言えばこれは間違いで、本来なら「cp932」としなければならない。
コマンドプロンプトでの出力は、プロパティに「コードページ932」と出てる。(コマンドで chcp と打ってみれ)
(その横に括弧書きで「日本語Shift-JIS」ってなってるけど・・)
0017デフォルトの名無しさん
2008/08/12(火) 09:23:360018デフォルトの名無しさん
2008/08/12(火) 14:30:52知らないって事は恐ろしいな。平気でこんな事が書けるなんて・・・
0019デフォルトの名無しさん
2008/08/12(火) 14:40:050020デフォルトの名無しさん
2008/08/12(火) 14:53:53実際は違うの?
0021デフォルトの名無しさん
2008/08/12(火) 15:16:33考えるときにShift_JISの策定に関わってたうちの一社
JISがずっと後にシフト符号化形式についての規格を取り決めたときに
それとは矛盾する形の仕様にしちゃったので、当時のデファクト(今でも
WindowsのCP932で使われているもの)との矛盾が発生してしまった
そういう具合に読めるね
0022デフォルトの名無しさん
2008/08/12(火) 16:24:46「マウスの付いたパソコンしか触ったことが無い世代が増えたね〜」
って感じがするな。
0023デフォルトの名無しさん
2008/08/12(火) 16:53:390024デフォルトの名無しさん
2008/08/12(火) 18:14:17http://pc11.2ch.net/test/read.cgi/tech/1180250376/l50
0025デフォルトの名無しさん
2008/08/12(火) 18:51:15->
を使うときは、半角スペースをあけて、
- >
とすれば、問題無いの?
0026デフォルトの名無しさん
2008/08/12(火) 22:32:28恥ずかしい奴が増えたなwwwwうぇwwっうぇえww
0027デフォルトの名無しさん
2008/08/12(火) 22:42:080028デフォルトの名無しさん
2008/08/12(火) 23:31:16やっぱり精神病なのかな?
0029デフォルトの名無しさん
2008/08/13(水) 00:51:34>>16 は比較的よく勉強していると思います。
めげずに精進を続けて欲しいです。
それはそれとして、前々スレの中盤あたりから、
回答すべき質問とそうでない質問の選別について、
みなさんセンシティブなんですよ。
その辺の空気も勘案して頂きたいところではあります。
0030デフォルトの名無しさん
2008/08/13(水) 01:47:36@array = ("hoge","huga","hohoho");
print @array; # 展開されて表示される
=== 2.分からない
@array = ["hoge","huga","hohoho"];
print @array; # 参照が表示される
print @{@array}; # エラー
=== 3.分かる
$array = ["hoge","huga","hohoho"];
print $array; # 参照が表示される
print @{$array}; # 展開されて表示される
参照勉強中ですが、これ2番目どうなってるんですか?
[ほげほげ]で帰ってくるのは無名配列の参照だから@arrayには代入できないと思ったらできるし
とおもったら@arrayの一つ目の要素に配列の参照が入ってるんですねprint $array[0]で参照がひょうじできましたありがとう
0031デフォルトの名無しさん
2008/08/13(水) 02:15:430032デフォルトの名無しさん
2008/08/13(水) 02:38:110033デフォルトの名無しさん
2008/08/13(水) 08:18:55> >>16 は比較的よく勉強していると思います。
> めげずに精進を続けて欲しいです。
>>16は知らないことがあった場合、それを調べずに、思いつきの想像で補完する
異常者だから、精進はしないだろう。
0034デフォルトの名無しさん
2008/08/13(水) 10:02:580035デフォルトの名無しさん
2008/08/13(水) 10:17:59これは?
0036デフォルトの名無しさん
2008/08/13(水) 10:18:590037デフォルトの名無しさん
2008/08/13(水) 10:26:45何か問題でも?
0038デフォルトの名無しさん
2008/08/13(水) 10:35:42perlのコンソールレベルの意味がわからんが
インターフェースならMIDI::Music
ってぐーぐる先生が言ってた
0039デフォルトの名無しさん
2008/08/13(水) 10:37:350040デフォルトの名無しさん
2008/08/13(水) 10:48:360041デフォルトの名無しさん
2008/08/13(水) 10:56:13いや、半角スペースさえ開ければ、
問題なく - >を使っていいのか、だめなのか、ってこと。
0042デフォルトの名無しさん
2008/08/13(水) 11:08:58レスの内容が全く同じじゃ説明になってねえんだよこのナマコが
0043デフォルトの名無しさん
2008/08/13(水) 11:45:250044デフォルトの名無しさん
2008/08/13(水) 11:46:04大丈夫ですよ
次の方、質問どうぞ
0045デフォルトの名無しさん
2008/08/13(水) 12:06:26逆に、->と、半角スペースをまったく空けずに
使うと、勝手にデリファレンスと解釈されてしまう
危険があるってことですよね?
0046デフォルトの名無しさん
2008/08/13(水) 12:55:04perlやべええ
0047デフォルトの名無しさん
2008/08/13(水) 13:02:11そんなに気になるなら、
print "-" . ">";
とかすればいいだろ。
0048デフォルトの名無しさん
2008/08/13(水) 13:35:41/\$([a-z0-9_]+)->[\[{]/iにマッチしちゃうと
アロー演算子として処理される可能性が高い
例えば以下は構文エラー
perl -e 'print "$test->{\n"'
perl -e 'print "$test->{}\n"'
perl -e 'print "$test->[\n"'
perl -e 'print "$test->[]\n"'
心配なら
my $arrow = '->';
print "${arrow}";
でいいんじゃね?
0049デフォルトの名無しさん
2008/08/13(水) 15:14:35<q cite="http://perldoc.jp/docs/perl/5.8.8/perldata.pod">
識別子、つまり、英字か下線から始まってそれに英字、下線、
数字が続く文字列のことです。一部のケースにおいては ::
(あるいはやや古風な ') で分けられた識別子の並びであってもかまいません。
</q>
即ち use byte 相当の状態なら
/^[A-Z_a-z][0-9A-Z_a-z]*(?:(?:::|')[A-Z_a-z][0-9A-Z_a-z]*)*\z/
0050デフォルトの名無しさん
2008/08/13(水) 17:05:28意図しないデリファレンスを避けたきゃ、変数名の範囲をブレースで囲めばいいだけだろ?
基本だぞ。>>48氏も一部で使ってるけど。
# 変な部分(作法の面で)はあくまでも例ということでご容赦。
$x = 'hoge' ;
$x->{hoge} = 'foo' ;
print "$x->{hoge}\n" ; # => foo が返る。ほんとは hoge->{hoge} を期待してたら↓
print "${x}->{hoge}\n" ; # => hoge->{hoge} (無用のデリファレンスを避けられる)
0051デフォルトの名無しさん
2008/08/13(水) 17:06:470052デフォルトの名無しさん
2008/08/13(水) 18:32:06│変数名─アドレス │
│ │
│ データ │
└────────┘
変数名が$hogeでデータがテステスの時
つまり$hoge = "テステス"の時、
print $hoge;だとデータ部分が表示されて
print \$hoge;だとアドレス部分が表示されるけど
print \\$hoge;も問題なく表示できると言うことは
この時内部的に\$hogeというアドレスをデータに持つリファレンスが生成されていて
その内部で生成されたリファレンスのアドレスが表示されていると言うこと?
つまりprint \\$hogeの裏側では↓こういうのが内部で行われてるんですか?
$hoge_reference = \$hoge;
print \$hoge_reference;
┌────────┐
│$hoge_r─\$hoge_r.│
│ │
│ \$hoge │
└───╂────┘
┌──────╂─┐
│ $hoge ─ \$hoge │
│ │
│. テステス │
└────────┘
0053デフォルトの名無しさん
2008/08/13(水) 19:23:54> print $hoge;だとデータ部分が表示されて
> print \$hoge;だとアドレス部分が表示されるけど
ちがう
0054デフォルトの名無しさん
2008/08/13(水) 21:14:340055デフォルトの名無しさん
2008/08/13(水) 23:32:50っ[Devel::Peek]
0056デフォルトの名無しさん
2008/08/14(木) 02:02:57それであってるよ
0057デフォルトの名無しさん
2008/08/14(木) 17:55:33# $hoge の持つ値が表示される
print \$hoge;
# $hoge を指す参照を得て、その内部表現を文字列化したものが表示される
「データ部分」「アドレス部分」という表現には、この辺の理解不足感が漂っている。
>>52 がんがれ。
0058デフォルトの名無しさん
2008/08/14(木) 18:02:060059デフォルトの名無しさん
2008/08/14(木) 18:34:39おまえの推測はどうだっていい。
0060デフォルトの名無しさん
2008/08/14(木) 18:41:43006157
2008/08/14(木) 20:12:44質問自体は >>55,56 で解決だろうから放置。
語句の間違いは要点ではなくて、
その表現が出てくる背景を邪推してみた。
単に口下手というか慣れていないだけだったら
当方まったく的外れなのでスルー推奨。
>>53 の気持ちは分からないでもないけど、
「ちがう」で終わりではあんまりだろうと思い、
>>53 の感じたであろう、漠然とした「チガウ感」を
>>57 で言語化してみた。
余計なことだった。今は反省している気がする。
0062デフォルトの名無しさん
2008/08/14(木) 20:19:460063デフォルトの名無しさん
2008/08/15(金) 03:17:011文字違っただけで動かなくなるから
そういう性格の人が向いてるのかもね。
0064デフォルトの名無しさん
2008/08/15(金) 04:10:49一つの値をもつものがスカラー、
複数の値を持つものがベクトル、
ということは覚えていますね。
、、、って参考書に書いてあるのだが、
英語読みだとベクター、日本語読みだと
ベクトルってことは、もしかして、
スカラーも、日本語読みで、スカトル、とかって
変な読みにされてた可能性もあるのかな。
0065デフォルトの名無しさん
2008/08/15(金) 04:13:49say $hoge;
say \$hoge;
↓実行結果
a
SCALAR(0x1a9a6c4)
↑これはなに?
0066デフォルトの名無しさん
2008/08/15(金) 04:22:11なにか使い道ある?
(1)マッチ
(2)tr///使用の置き換え
(3)s///使用の置き換え
おおまかにわけて
この3つしかないとおもうんだけど。
0067デフォルトの名無しさん
2008/08/15(金) 04:32:37これでメモ帳が開ける
感動
0068デフォルトの名無しさん
2008/08/15(金) 04:33:50↑こんくらいのカンタンな文法で
midiを鳴らすってできない?
0069デフォルトの名無しさん
2008/08/15(金) 04:36:050070デフォルトの名無しさん
2008/08/15(金) 05:09:24突っ込みどころを用意してくるから食いつく人が出るんだよね。
0071デフォルトの名無しさん
2008/08/15(金) 06:07:05100人以上見てきたけど、この傾向だけは異論を許さない。
[クラス1]MARCH:テキストや本を見て仕事をする
[クラス2]旧帝大、早慶:テキストや本の原理を理解して仕事する。
[クラス3]東大、京大:テキストや本の原理を新たに創造する。
0072デフォルトの名無しさん
2008/08/15(金) 06:15:590073デフォルトの名無しさん
2008/08/15(金) 06:42:54↑これで、ファイヤフォックスが起動して、
グーグルブック検索のページが開くよ!
すごいね!
0074デフォルトの名無しさん
2008/08/15(金) 06:44:07system ("C:/Program Files/Mozilla Firefox/firefox.exe","http://books.google.co.jp/books?as_q=perl&num=
100&as_brr=0&btnG=Google+%E6%A4%9C%E7%B4%A2&as_epq=&as_oq=&as_eq=&as_brr=0&lr=lang_ja&as_vt=
perl&as_auth=&as_pub=&as_drrb=c&as_miny=&as_maxy=&as_isbn=");
↑これで、ファイヤフォックスが起動して、
グーグルブック検索のページが開くよ!
すごいね!
改行はエディタで手動でつないでね!
0075デフォルトの名無しさん
2008/08/15(金) 06:45:42ところで、rubyのときは、IEを起動するには
win32APIを使わないとだめだって言われたんだけど、
なんでPerlはWin32APIを使わないでもファイヤフォックスを
起動できるの?
(2)
Perlもwin32APIを使えるの?
もし使うとしたらどういう時?
CD-ROMドライブのフタをあけたいときとか?
0076デフォルトの名無しさん
2008/08/15(金) 09:15:03どうしてググらないの?どうして自分で調べようと努力しないの?
0077デフォルトの名無しさん
2008/08/15(金) 10:38:06my $a;
$a=<>;
say qq|$a|;
↑これでキーボードから入力してエンター押すと、
キーボードから入れた文字列が画面に表示されるんだけど、
<stdin>って書かなくてもいいの?
0078デフォルトの名無しさん
2008/08/15(金) 11:09:33どうして自分で実際に試した、目の前の現実を信用できないの?
0079デフォルトの名無しさん
2008/08/15(金) 11:20:29use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
use Encode;
use feature qw( :5.10 );
$|=1;
#----------------------------------
my $a;
my $c=1;
my @d;
for ($c=1;$c<=7;$c=$c+1){
print "$c"."文字目"; #←●1
#print "$c文字目"; #←●2
$a=<>;
chomp $a;
push (@d,$a);
}
say qq|\n|;
my @b;
say q|ソートの結果は、、、|;
@b=sort @d;
say qq|@b|;
---------------------------
↑これで、●1は動くのですが、●2にするとエラーになります。
実質的に1と2は同じもののはずなのに、なぜでしょうか?
0080デフォルトの名無しさん
2008/08/15(金) 11:30:50アスベスト吸って、肺に入って、
中皮腫になるまで、20年間ありますよね。
0081デフォルトの名無しさん
2008/08/15(金) 11:41:4210台 ■
20台 ■
30台 ■■■
40台 ■■■■
50台 ■■■■■■■■
↑こんな感じ?
0082デフォルトの名無しさん
2008/08/15(金) 11:48:06これだとエラー出ないんだよね。
print "$c文字目";
これだと、エラーになる。
どうも、
$c文字目
これ全部をスカラー変数だと思い込んでるみたい。
半角スペース空けないとだめなのかな。
0083デフォルトの名無しさん
2008/08/15(金) 12:00:250084デフォルトの名無しさん
2008/08/15(金) 12:02:07>>82
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
use Encode;
$c文字目 = 100;
print $c文字目,"\n";
$文字目 = 200;
print $文字目,"\n";
0085デフォルトの名無しさん
2008/08/15(金) 12:03:42print $うんこ,"\n";
0086デフォルトの名無しさん
2008/08/15(金) 20:25:17use English
という、ステキ構文を発見した。
おまいら、ちゃんとこういう便利なものは
おしえてくれなきゃ
0087デフォルトの名無しさん
2008/08/15(金) 20:27:39(1)<stdin>でキーボードから打つ
(2)<>でキーボードから打つ
(3)ファイル名を指定して、ファイルごと食わす
(4)引数で入れる perl abc.pl abcdeみたいな
(5)#!usr/local/bin/perlを指定して、perlを省略して食わすabc.pl abcdeみたいな
(6)ファイルごと食わして、その処理結果を別ファイルに出力する perl <a>bみたいな
以上の6つのやり方があるよね
0088デフォルトの名無しさん
2008/08/15(金) 20:56:020089デフォルトの名無しさん
2008/08/15(金) 22:29:30通常、サブルーチンにプロトタイプを付けて記述し、コードの先頭付近で
sub Func1( \@ ) ;
とでも書いておき、そのあと実際に呼び出すときは
Func1( @array );
と書けば自動的に配列のリファレンスが渡されます。
また、このときスカラーなど間違った変数を渡すとエラーとなりますよね?
モジュール HogeHoge.pm のパッケージ HogeHoge 内に同様のサブルーチンを記述したとします。
このモジュールの先頭付近で
package HogeHoge ;
sub Func1( \@ );
と書いてみたのですが、うまく機能しているように見えません。
自動的にリファレンスが渡されるわけでも、別の変数を渡した時にエラーが起きるわけでもありません。
書いても書かなくても同じ挙動に見えます。
どのように記述するのが正しいのでしょうか?
0090デフォルトの名無しさん
2008/08/15(金) 22:45:49変則的な呼び出し方をする一部の組み込み関数を再定義するときだけ使うもの。
リファレンスを渡したいなら明示的にリファレンスを渡すほうがよい。
0091デフォルトの名無しさん
2008/08/15(金) 22:52:51エラーを出せるなら出して欲しいんですよね。
0092デフォルトの名無しさん
2008/08/16(土) 16:53:21ステキなモジュールはありますか?
CPANを探しているんですが、なかなか見つからなくて・・・
Pythonに組み込みで存在するアレです
0093デフォルトの名無しさん
2008/08/16(土) 17:16:36use Win32::FileOp qw(ShellExecute);
ShellExecute('open', 'notepad.exe');
↑このコードをコピペして実行したら、
Can't locate Win32/FileOp.pm in @INC (@INC contains: C:/Per
at untitled1.pl line 1.
BEGIN failed--compilation aborted at untitled1.pl line 1.
というエラーが出ました。
ひょっとして、Win32::FileOpは標準で入っていないの?
0094デフォルトの名無しさん
2008/08/16(土) 17:42:56=== HogeHoge.pm ===
package HogeHoge ;
use Exporter;
use vars qw(@ISA @EXPORT) ;
use subs qw( Func1(\@) ) ;
@ISA = qw(Exporter);
@EXPORT = qw(Func1 );
sub Func1 (\@){ print qq{42\n} ;}
1;
=== hoge.pl ===
use HogeHoge ;
my @arr = (1) ;
Func1 @arr ;
# my $var = 1 ;
# Func1 $var ;
=== 実行 ===
perl hoge.pl
42
0095デフォルトの名無しさん
2008/08/16(土) 18:57:09また質問中が湧いたか
そのくらいてめぇで調べろ、ぼけ
0096デフォルトの名無しさん
2008/08/16(土) 20:01:15http://search.cpan.org/dist/Set-Scalar/lib/Set/Scalar.pm
union intersection complement 辺りの思いついた語で CPAN 漁ってて見つけたもの。
Python 知らないしこれを使ったこともないので素敵かどうかはわかりませんが。
0097デフォルトの名無しさん
2008/08/16(土) 21:29:04↑これやったら、永遠にキーボード入力の
フェーズから、抜けられない?
0098デフォルトの名無しさん
2008/08/16(土) 21:32:56UNIXならCtrl+D, WinならCtrl+Z(多分)
0099デフォルトの名無しさん
2008/08/16(土) 22:02:16「Perlでは残念だがらユニコードは使えません」
とかって書いてある。いったいいつから
使えるようになったんだ?
0100デフォルトの名無しさん
2008/08/16(土) 22:03:10↑これって普通に使うの?
テンプレには記載がないようだけど。
0101デフォルトの名無しさん
2008/08/16(土) 22:07:29これはいったいなんだよ
わろたよ
010292
2008/08/16(土) 23:49:15おおおっ、いい感じのモジュールですね
標準的な操作もきっちりサポートされてますし
サンクスです
>>100
strictやwarningsのプラグマと違って、
運用コードでは要らないかと
自分の場合、開発コードでも要否は微妙です
0103デフォルトの名無しさん
2008/08/17(日) 01:43:51んなもん調べりゃすぐにわかると思うの。
自分の欲しい情報なのに、自分で調べずに他人に探させようとする質問には答えたくないの。
>>100
使いたかったら使えばいいと思うの。
マニュアル読んで有益かどうか判断がつかないなら試してみればいいと思うの。
「普通」どうかなんて、どこで誰が何やってるかによって変わると思うの。
で、「普通」を知ってどうしたいの?
0104デフォルトの名無しさん
2008/08/17(日) 09:17:40そんなもん、なるべくデフォルトにあわせるのは
当然じゃないですか。
昔富士通のパソコン買ってひどい目にあったんだから。
0105デフォルトの名無しさん
2008/08/17(日) 09:20:44abc.pl d e f g
みたいにコマンドラインから入力するときに
渡すけど、これってスペースで区切られたら、
「ひとつの引数」
って認識ですよね。いまの例だと
dとeとfとgが引数。
だと、もしかして、perlってスペースを含む
文字列や数字は引数として渡すことはできないの?
たとえば
a b (半角のa、半角のスペース、半角のb)
を一つの引数としてコマンドラインから渡そうとしても、
14才のperlタンが勝手に、
「あーこれは一つの引数ねーホエー」
とかって勝手に処理してしまうんですよね?
0106デフォルトの名無しさん
2008/08/17(日) 09:59:08それを使うと
Loading DB routines from perl5db.pl version 1.3
Editor support available.
Enter h or `h h' for help, or `perldoc perldebug' for more help.
main::(untitled6.pl:7): binmode STDIN => ":encoding(cp932)";
DB<1>
↑こんなのが出てくる。これってどう使えばいいんだろう?
0107デフォルトの名無しさん
2008/08/17(日) 10:06:33ゲーム作れないジャン。
0108デフォルトの名無しさん
2008/08/17(日) 10:29:38過去ログ読んだらあったわ
system q|cls|;
これでCLSできる。やりー
0109デフォルトの名無しさん
2008/08/17(日) 10:41:31use Time::HiRes 'sleep';
$|=1;
#----------------------------------
system q|cls|;
sleep(1);
my @a;
@a=('a','b','c','d','e');
my $b;
foreach $b (@a){
say $b;
sleep(1);
}
↑これで、画面をclsで消して、
キレイにしてから、ゆっくりと文字を出力できるよ。
感動。
0110デフォルトの名無しさん
2008/08/17(日) 10:53:13use strict;
use diagnostics;
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
use Encode;
use feature qw( :5.10 );
use Time::HiRes 'sleep';
$|=1;
#----------------------------------
system q|cls|;
my @a;
@a=('ささやき','えいしょう','いのり','ねんじろ!');
my $b;
foreach $b (@a){
sleep(1);
say $b;
}
sleep(3);
say qq|\n\n勇者は灰になりました\n|;
↑やった!ウイザードリーだ!
0111デフォルトの名無しさん
2008/08/17(日) 11:05:25ここはPerlの質問スレだぜ?
0112103
2008/08/17(日) 11:09:45富士通さんの製品がどう関係してるのかは知らないけど、
マジレスすると、Perl のデフォルトは、当たり前だけれど何も use しない状態。
「デフォルト」を「比較的多くの人が採用しているやり方」という意味で使っているなら、
標準モジュールや CPAN モジュールを読んで統計取るなりすればいいじゃない。
そして自分にとって有益であるか、または必要であるなら、
誰が使っていなくても使えばいいじゃない。
「よいとされているコーディングスタイル」を扱った書籍はいくつもあるし、
perlstyle マニュアルページにも情報があるんだけれど、
>>100 はどうやらそれらを調べていないようなので、
そーゆー質問は「自助努力の足りない教えて君」扱いされるの。
0113103
2008/08/17(日) 11:13:34> だと、もしかして、perlってスペースを含む
> 文字列や数字は引数として渡すことはできないの?
できるの。
> 「あーこれは一つの引数ねーホエー」
> とかって勝手に処理してしまうんですよね?
ちがうの。
0114103
2008/08/17(日) 11:19:06> Enter h or `h h' for help, or `perldoc perldebug' for more help.
help を見るには(DB<>プロンプトで) h と入力するか h h と入力するか、またはもっとくわしい help は perldebug マニュアルページを見れ
って書いてあるの。見てから質問して欲しいの。
てゆーか見てればこんな質問出てこないの。
0116デフォルトの名無しさん
2008/08/17(日) 11:45:570118デフォルトの名無しさん
2008/08/17(日) 13:58:33社会に出て来ることを前提にするからそうなるわけで
社会が受け入れを拒めば良い。ニートも珍しくない時代だぜ。
0119デフォルトの名無しさん
2008/08/17(日) 14:00:350120デフォルトの名無しさん
2008/08/17(日) 14:03:36歪んだ持論で100に粘着したり、
「ぐぐれカス」で済むところをねちねち言ったり、
自治しようとしたり。
お前さんのウザさは、107と変らんよ。
0121103
2008/08/17(日) 16:33:09ニートが社会に拒まれてそうなるというのは新説な気がするの。
どちらにしろそういう事例は少ないほうがいいと思うの。
でもこのスレでやるべきことじゃないとは思うので反省してる。
>>119
誰かボクを隔離して欲しいの。
でもこれ以上迷惑になるいけないのでがんばって自分で克服します。
>>120
ウザくてごめんなさい。
持論が歪んでるのは自覚があるので鵜呑みは危険と言っておくの。
ボクが言うのもなんだけど、みなさん気にせずPerlのお話しましょう。
0122デフォルトの名無しさん
2008/08/17(日) 17:08:030123デフォルトの名無しさん
2008/08/17(日) 18:19:19これで、文章が表示されるのと合わせて、
音楽を鳴らしたいんだけど、
(本物のウイザードリーみたいに)
Perlだと実装はものすごく面倒なの?
0124デフォルトの名無しさん
2008/08/17(日) 18:27:00http://pc11.2ch.net/test/read.cgi/php/1204488452/556
で、質問がでていたので、
http://pc11.2ch.net/test/read.cgi/php/1204488452/560
と、オレ様が、かっこよく回答しちゃったぜ!
ちなみに、あってるかどうかは、知りません
0125デフォルトの名無しさん
2008/08/17(日) 18:27:010126デフォルトの名無しさん
2008/08/17(日) 18:33:020127デフォルトの名無しさん
2008/08/17(日) 18:46:300128デフォルトの名無しさん
2008/08/17(日) 19:58:01Win32::Sound
0129デフォルトの名無しさん
2008/08/17(日) 22:00:22ある単語 foo に関する perl のドキュメントを読みたいが、
perldoc foo → No documentation found for "foo"
perldoc -f foo → No documentation for perl function `foo' found
perldoc -m foo → No module found for "foo"
perldoc -q foo → No documentation for perl FAQ keyword `foo' found
となるとき、すべての perl ドキュメントから foo を検索して、
どのドキュメントを見ればよいか表示するような機能はないでしょうか?
例えば __PACKAGE__ を調べようとしても上の4つではだめで、
最終的には perldoc perl の出力を眺めて当たりを付けて、
perldoc perldata
に辿り着きましたが、当たりを付けるまでに手間がかかります。
zsh のマニュアルの man zshall のように、インストールされているすべての
ドキュメントを連結表示するとかでもいいのですが。
0130デフォルトの名無しさん
2008/08/17(日) 22:36:17aaaa
aaab
aaaaa
aaaab
参考書読んでて、
文字列ソートすると、こういう順番に
なります、と書いてあって、どうしても理解できなくて、
ホームページの正誤表みたら、誤植だった。
ただしくは
aaa
aaaa
aaaaa
aaaab
aaab
だった。なんでbが先にくるかなあ?と
1時間悩んだ。
0131デフォルトの名無しさん
2008/08/17(日) 22:48:22力技。
find /usr/lib/perl5/5.10/pods -name '*.pod' | xargs grep -i KEYWORD | less
あとはGoogle DesktopやWindows Searchでドキュメントの領域を検索対象にするとか。
0132デフォルトの名無しさん
2008/08/17(日) 23:25:23なんかすげー難しそう
1行書いたら音が出るみたいのを
イメージしてたんだけど、
HSPとかRPGツクールとかだと
音出すなんて簡単だったんだけど、
Perlでは難しいってことかな?
0133デフォルトの名無しさん
2008/08/17(日) 23:31:27ありがとうございます。find | xargs grep | less 系のやり方をする
ことにしました。(あるいは同様のコマンド)
0134デフォルトの名無しさん
2008/08/17(日) 23:36:25これってぼくも誰も作ってないのかなと思ってるんだけど、
やっぱり誰も作ってないのかい。
0135デフォルトの名無しさん
2008/08/17(日) 23:43:32353 名前:名無しさん 投稿日:2001/02/08(木) 12:40
Perlで音を出すことって出来ないでしょうか。
処理が終了したときにちーんと鳴らしたいのですが。
http://www.angelfire.com/ak5/2ch-web-program/kako/979894521.html
0136デフォルトの名無しさん
2008/08/18(月) 00:05:14やってみた。
かんたんだった。
use Win32::Sound;
Win32::Sound::Volume('100%');
Win32::Sound::Play("file.wav");
Win32::Sound::Stop();
↑これを書くだけで、できた。
Win32::Soundは最初から入っていた。
0137デフォルトの名無しさん
2008/08/18(月) 00:26:36midiを鳴らすときは、必ずWin32::MIDIでないとだめなの?
それとも、midiもWin32::Soundでいけるの?
0138デフォルトの名無しさん
2008/08/18(月) 00:54:45midiファイルを指定して、すぐに鳴らすとかできないのかな?
0139デフォルトの名無しさん
2008/08/18(月) 01:00:59順序が逆だっちゃ。
大量のドキュメントに対して grep などによる全文検索だけでは不便だから perldoc のセクション特定用の各オプションがある。
0140デフォルトの名無しさん
2008/08/18(月) 02:04:19> 順序が逆だっちゃ。
これは順番の問題ではない。不便な全文検索が問題なら不便でない全文検索が
求められるだけのこと。
0141デフォルトの名無しさん
2008/08/18(月) 02:38:010142103
2008/08/18(月) 04:34:08全文検索自体が不便つーことでなく、単純な全文検索だとどこからでもパターンを拾ってきちゃうから、-f だの -q だのがあんだべ、って話。
パターンがどのファイルのどこにあるか知るだけなら find, grep で特に不便もないし、それ用の Perl スクリプトを書いても2分てとこだろ。
0143デフォルトの名無しさん
2008/08/18(月) 04:37:30> パターンがどのファイルのどこにあるか知るだけなら
そんなのじゃ不便過ぎるだろ。
0144デフォルトの名無しさん
2008/08/18(月) 07:43:42まさか初めてのPerlすら持ってない奴の戯れ言じゃないだろうな……
0145デフォルトの名無しさん
2008/08/18(月) 07:49:29HSPには可変長配列は無いがな!!(まさに外道)
0146デフォルトの名無しさん
2008/08/18(月) 12:55:440147デフォルトの名無しさん
2008/08/18(月) 15:27:110148デフォルトの名無しさん
2008/08/18(月) 15:43:15perl書くときに $ とか %#"'() など良く打つと思いますがshift押さずに入れるように
するようなソフトや方法はありますでしょうか?
数字はテンキーがあるのでキーボードの1〜9の範囲は全部記号にしたいのですが。
0149デフォルトの名無しさん
2008/08/18(月) 16:39:16もう数年前になるけど、大学の研究室に、Perl関係のドキュメントを
インクリメンタルに全文検索でひけるソフトがあった。
Rubyで書かれていたけどw
0150デフォルトの名無しさん
2008/08/18(月) 17:10:00子プロセスの上限を決めてforkで処理するのに、
pidをpushしていって、上限を超えたらいちばん古い子プロセスをwaitpidしていますが、
たまたまそいつが遅いと他のプロセスはとっくに終わってるのに先頭のを待ち続ける、
というはめになります
pidのリストのうち、どれか一つ終わったら、という処理をさせるには
どうすればいいですか
0151デフォルトの名無しさん
2008/08/18(月) 17:31:180152デフォルトの名無しさん
2008/08/18(月) 17:31:28っ[Parrallel::ForkManager]
0153デフォルトの名無しさん
2008/08/18(月) 17:51:40スキャンコードをリマップすることにより可能。
方法は OS 等により異なる。使用 OS の板・スレで聞くといい。
0154デフォルトの名無しさん
2008/08/18(月) 18:05:26勉強してみます
0155デフォルトの名無しさん
2008/08/18(月) 18:05:410156デフォルトの名無しさん
2008/08/18(月) 18:41:09midを鳴らす方法がわからない。
MP3については、mediaplayerなんとか、っていうモジュールを
使えばいいみたいなんだけど、ppmでダウンロードのリストに入ってない。
0157デフォルトの名無しさん
2008/08/18(月) 18:43:28アルファベットの小文字と大文字
a-z,A-Zにchrを使って変換して表示する
プログラムを作ろうと思ったんだけど、
65-120だと、まんなかに、余計な記号が入ってしまう。
この場合、if 95<x<98 then redo
でいいのかな?
もし記号の数字だったら、ルーレットをまわした結果を
破棄して、もう一度ルーレットをまわすって言う。
0158デフォルトの名無しさん
2008/08/18(月) 18:45:00って指定できればいいんだけど、できないんだよね。
他の言語だとできるの?
0159デフォルトの名無しさん
2008/08/18(月) 18:46:09まちがえた。
○ようは、randで、65-95、かつ98-120の数字がほしい、
0160デフォルトの名無しさん
2008/08/18(月) 19:19:20@str = (a..z,A..Z);
print $str[rand(@str)];
0161デフォルトの名無しさん
2008/08/18(月) 20:25:45なんもプリントされないんだけど。
0162デフォルトの名無しさん
2008/08/18(月) 21:08:40$x = int(rand(52));
print chr(($x + ($x % 2) * 63+ 130)/2);
0163デフォルトの名無しさん
2008/08/18(月) 21:17:41my $a;
do {
$a=int(rand(123-65)) +65;
say "fault!";
} while ($a<=96 or $a>=91);
print $a;
↑これやると無限ループになる。なんで?
0164デフォルトの名無しさん
2008/08/18(月) 21:20:53自己解決した。
orじゃなくてandだった。
こんな難しいバグも一人でデバッグできるオレ様の単価は
120万円/月くらいですか?
0165デフォルトの名無しさん
2008/08/18(月) 21:29:18my $b;
for ($b=1;$b<=8;$b=$b+1){
do {
$a=int(rand(123-65)) +65;
} while ($a<=96 and $a>=91);
print chr($a)," ";
}
↑やったーパスワード発生器できたよー
0166デフォルトの名無しさん
2008/08/18(月) 21:34:31my $a;
my $b;
for ($b=1;$b<=8;$b=$b+1){
do {
$a=int(rand(123-65)) +65;
} while ($a<=96 and $a>=91);
sleep(0.5);
print chr($a)," ";
}
print "\n";
↑こっちのほうが、ちょっとかっこいいかな?
0167デフォルトの名無しさん
2008/08/18(月) 21:46:46配列に、3つの要素が入ってるとして、
その3つの要素を連結して、一つの文字列にして、
スカラー変数にいれるということ。
@a=('a','b','c')
だとして、
$b="abc"
にしたいということ。
自分で考えるから、おまいら、絶対に正答を書くなよ!
いいか、絶対に書くなよ!
0168デフォルトの名無しさん
2008/08/18(月) 21:50:53my @chars = (0..9, "A".."Z", "a".."z");
join "", map { $chars[rand(@chars)] } 1..8;
}
print genpass(), "\n";
0169デフォルトの名無しさん
2008/08/18(月) 21:55:05こ、これは、、、
スカウターの数字が、、、
パールレベル12を超えてるだと?!
0170デフォルトの名無しさん
2008/08/18(月) 22:01:360171デフォルトの名無しさん
2008/08/19(火) 00:11:06use Time::HiRes 'sleep';
$|=1;
#----------------------------------
system q|cls|;
my $a,$b,@c,$e;
for ($e=1;$e<=5;$e=$e+1){ #外側のforループ
for ($b=1;$b<=3;$b=$b+1){ #内側noforループ
do {
$a=int(rand(123-65)) +65;
} while ($a<=96 and $a>=91); #do-while文
push(@c, chr($a));#生成したランダム文字を配列にプッシュ
}
my $d;
$d=join ("",@c);#配列に格納されている文字をスカラー変数に代入
say "$d";#文字を出力
@c=();#配列を初期化
}
#----------------------------------------
↑やったー
ランダムな3連文字列を5回出力することに成功
あとはソート部分のロジックだけだー
0172デフォルトの名無しさん
2008/08/19(火) 00:14:45実を言うと、
>print genpass()
ここがわからなかったりする。
無名サブルーチンの呼び出し?
サブルーチンを呼び出して、その返り値を
プリントしている?
0173デフォルトの名無しさん
2008/08/19(火) 00:22:560174デフォルトの名無しさん
2008/08/19(火) 00:25:310175デフォルトの名無しさん
2008/08/19(火) 00:25:540176デフォルトの名無しさん
2008/08/19(火) 00:26:48妬むなよ!
0177デフォルトの名無しさん
2008/08/19(火) 00:27:050178デフォルトの名無しさん
2008/08/19(火) 00:28:28レベルの高い質問になるわきゃねえ。
まあ、夏休みが終るまでの我慢我慢。
0179デフォルトの名無しさん
2008/08/19(火) 00:44:470180デフォルトの名無しさん
2008/08/19(火) 01:03:15見ればみるほどすごいわ
天才だろこれ
0181デフォルトの名無しさん
2008/08/19(火) 01:53:07grepやmapは暗黙的なloopを構成できるので、
馴れればすぐにそれっぽく書けるようになるよ。
0182デフォルトの名無しさん
2008/08/19(火) 01:56:59検索処理ではなく、変更処理っす、文字列でなく、xml文章として扱って変更するタイプ。
入力xmlは、標準入力かファイル名、出力するxmlは標準出力
処理前xml
<xml? ....ありきたり>
<root:yesroot>
<!-- subtree -->
<subt e='befoore' />
</root:yesroot>
変更後xml
<xml? ....ありきたり>
<root:yesroot>
<!-- subtree -->
<subt ele='after' />
</root:yesroot>
自分で作るにあたって参考にしたサイトは、
http://www.ibm.com/developerworks/jp/xml/library/x-xmlperl1.html( 1 - 3)
なんですが、どうも簡単。ってレベルじゃないと”感じ”ました。
javac,c,python,rubyでやっても同じじゃん。みたいな。
0183デフォルトの名無しさん
2008/08/19(火) 02:11:33みっともないやつだな
0184デフォルトの名無しさん
2008/08/19(火) 02:59:31> 検索処理ではなく、変更処理っす、文字列でなく、xml文章として扱って変更するタイプ。
Perl は入力をほとんど常にバイト列として扱います。
XML として扱いたいなら XML::* モジュール郡を使ってください。
> javac,c,python,rubyでやっても同じじゃん。みたいな。
そういうことなら Perl にこだわる必要もないのでは?
0185デフォルトの名無しさん
2008/08/19(火) 10:54:11perlの入門書を探しているんだが、あんまりないね。
結城さんのは読んだし、すぐわかるperlは今読んでるし。
0186デフォルトの名無しさん
2008/08/19(火) 14:08:22ミニマルPerl
Perlクックブック Volume 1
等々あるけど、べつに結城本でもテキスト処理はカバーしてるよ。
CGIも処理の大半はテキスト処理だし
0187デフォルトの名無しさん
2008/08/19(火) 14:19:56$a = "\Q声";
print $a # => \申コ
0188デフォルトの名無しさん
2008/08/19(火) 14:24:450189デフォルトの名無しさん
2008/08/19(火) 14:37:28そうなんだ
サンクス
0190デフォルトの名無しさん
2008/08/19(火) 17:11:25ヒント:
sub hogehoge(){
'Hello World!!';
}
print hogehoge(); #Hello World!!
0191デフォルトの名無しさん
2008/08/19(火) 19:53:40なにか、名前はついてるんですか?
「サブルーチンの、無宣言呼び出し」とか。
名前がわからないと、本で調べることもできないし。
たぶん、このサブルーチンの呼び出し方は
入門書レベルでは解説ないですよね?
&をつけて呼ぶ方法しかのってないのが普通だと思う。
0192デフォルトの名無しさん
2008/08/19(火) 20:09:010193デフォルトの名無しさん
2008/08/19(火) 20:31:06$, @, & とかなくてクォーテーションで囲まれてない文字列をどう解釈するか。
@list = (hoge, hage);
print $list[1];
とかね。
0194デフォルトの名無しさん
2008/08/19(火) 20:41:57>&をつけて呼ぶ方法しかのってないのが普通だと思う。
…いつの時代の人ですか?
0195デフォルトの名無しさん
2008/08/19(火) 21:02:35>>168はごくごく普通のサブルーチン
>>190はプロトタイプ付きのサブルーチン(引数を取らないと宣言している)
本人は解ってて書いてるのかも知れんが、
sub hoge(){
my $dat = shift ;
…
}
とかやる奴が出てきそうで怖い
ってここまで書いて初心者スレじゃない事を思い出した。ご丁寧に書く必要なかったな
0196デフォルトの名無しさん
2008/08/19(火) 21:30:420197デフォルトの名無しさん
2008/08/19(火) 22:03:030198デフォルトの名無しさん
2008/08/19(火) 22:46:49微妙に難しいな。
いや解説してくれたのはありがたいんだけど。
プロトタイプってレベル2だろ。
0199デフォルトの名無しさん
2008/08/19(火) 23:16:23Perlコーディング初心者質問スレ Part 58
ttp://pc11.2ch.net/test/read.cgi/php/1218030872/
くだすれPerl(超初心者用)2
ttp://pc11.2ch.net/test/read.cgi/php/1204488452/
0200デフォルトの名無しさん
2008/08/20(水) 00:14:27一時期そちら方面でもお見かけしたのですけれど、
どうも、その…、回答者の質がお気に召さないご様子でして、
大変光栄なことに、数を撃てばなにがしかの情報が引き出せて、
かつ適度に遊んでもらえるこちらに居を定められた模様なのですよ。
個人的に殿下には、同じあちらでも下記スレをおすすめ申し上げたい。
http://pc11.2ch.net/test/read.cgi/php/1158647441/l50
0201デフォルトの名無しさん
2008/08/20(水) 00:39:070202デフォルトの名無しさん
2008/08/20(水) 00:54:320203デフォルトの名無しさん
2008/08/20(水) 01:09:570204デフォルトの名無しさん
2008/08/20(水) 01:17:110205デフォルトの名無しさん
2008/08/20(水) 01:17:560206デフォルトの名無しさん
2008/08/20(水) 01:24:360207デフォルトの名無しさん
2008/08/20(水) 02:58:590208デフォルトの名無しさん
2008/08/20(水) 14:06:120209デフォルトの名無しさん
2008/08/20(水) 15:22:530210デフォルトの名無しさん
2008/08/20(水) 20:06:37s///と、
tr///と、
m///と、
3つの種類しかないの?
0211デフォルトの名無しさん
2008/08/20(水) 20:13:12別にこれらが正規表現な訳では無い
これらのパターンマッチ関数で正規表現を使用しているという事
0212デフォルトの名無しさん
2008/08/20(水) 20:38:24hoge.plは処理の中でlocaltimeを取得するんですが、hoge.pl自体の改修はせずに
実行時にlocaltimeを指定してやることは可能でしょうか?
別のhogehoge.plを作って、その中で指定した値をlocaltimeとしてhoge.plに渡して実行
みたいなことができるとベストなんですが。
0213デフォルトの名無しさん
2008/08/20(水) 22:30:230214デフォルトの名無しさん
2008/08/20(水) 23:05:42が言いたいのは、たぶん、
hogehoge.plの中味で、
$a=123456;
とかを指定。
そんで、
localtime=$a;
とかにする。そんで、
hoge.plを実行するときに、引数で渡す。
perl hoge.pl localtimeとか。
そしたら、hoge.plが、引数として渡された
localtimeを食って、localtimeとして実行する。
こんなイメージだと思う。違ってたら言って。
0215212
2008/08/21(木) 00:00:51すいません、ちょっと違います。
hoge.plは純粋にlocaltimeを取得するだけで
引数をlocaltimeとして扱うという機能はありません。
例えば、実行するとそのときの時刻をテキストに書き込む、といった感じです。
実行したときの実際の時刻とは違う時刻を取得させたいのですが
hoge.pl自体を改修せずに実現できないものかと考えております。
0216デフォルトの名無しさん
2008/08/21(木) 00:28:35引数を食うような設計になってないと、
無理なんじゃないかな。
0217デフォルトの名無しさん
2008/08/21(木) 00:33:330218デフォルトの名無しさん
2008/08/21(木) 01:13:12chomp( my $the_world = `time /t` );
my $you_want = '00:00';
system( 'time', $you_want ) and die;
system( 'perl', '.\\hoge.pl' ) and die;
system( 'time', $the_world ) and die;
# そんなことやってると、もっと恐ろしいものの片鱗を味わうことになる。
# 今のうちにやめとけ。俺は止めたからな。
0219デフォルトの名無しさん
2008/08/21(木) 01:50:570220デフォルトの名無しさん
2008/08/21(木) 02:25:11権限がないので書き換えられないと書いてそうなんだけどな。
0221デフォルトの名無しさん
2008/08/21(木) 13:06:25これってperlでもできるのかな?
0222デフォルトの名無しさん
2008/08/21(木) 17:19:210223デフォルトの名無しさん
2008/08/21(木) 18:22:30A.「できます」
ほとんどの "〜" について上記の答が返ってきます。
"〜" が「電気ストーブの作成」である場合等、いくつかの例外を除いて。
0224デフォルトの名無しさん
2008/08/21(木) 18:28:57電気ストーブ作りたいならここ参考にね☆
http://pc11.2ch.net/test/read.cgi/php/1010583350/
0225デフォルトの名無しさん
2008/08/21(木) 22:11:55perlで同じ物作れるか?って質問でなくて、
perlでソースコード組むときに、このシステム使って
ネット経由でペアプログラミングしたりとか、
自分のコーディングを録画して中継したりとか
できるのかな?って意味だったのですが。
0226デフォルトの名無しさん
2008/08/21(木) 22:15:180227デフォルトの名無しさん
2008/08/21(木) 22:15:210228デフォルトの名無しさん
2008/08/21(木) 22:36:43perl版のこういうの作らない?
while
文字列の長さを取得する ループを作る
みたいなの
0229デフォルトの名無しさん
2008/08/21(木) 22:37:33ちょっとperlでソースコード書いて、
>>221のシステムでうぷしてもらえませんか?
0230デフォルトの名無しさん
2008/08/22(金) 04:29:53作っていいぞ。
>>229
うpっていいぞ。
0231デフォルトの名無しさん
2008/08/22(金) 10:20:370232デフォルトの名無しさん
2008/08/22(金) 14:42:370233デフォルトの名無しさん
2008/08/22(金) 15:14:570234デフォルトの名無しさん
2008/08/22(金) 15:17:41( ´∀`)< オマエモナー
( ) \_____
| | |
(__)_)
0235デフォルトの名無しさん
2008/08/22(金) 15:55:27自分が欲しいものは自分で作れ。
0236デフォルトの名無しさん
2008/08/22(金) 16:35:25言い出しっぺの法則は、「言い出しっぺがやらない限り誰もやらない」だ。
0237デフォルトの名無しさん
2008/08/23(土) 00:02:15言いだしっぺの法則は、「お前がやれ」って返って来る法則のことじゃないのか?
0238デフォルトの名無しさん
2008/08/23(土) 00:10:39いなかっぺ大将は、「キクしゃん、ハナしゃんと西一の三角関係」を描いた物語ですよ確か。
0239デフォルトの名無しさん
2008/08/23(土) 00:49:44違うダス!
わしとキクしゃんの恋愛物語なんダス!
0240デフォルトの名無しさん
2008/08/23(土) 08:37:580241デフォルトの名無しさん
2008/08/23(土) 17:41:350242デフォルトの名無しさん
2008/08/23(土) 18:58:42LWP::UserAgent を使用して、たとえば https://mixi.jp に接続すると、
Client-SSL-Warning: Peer certificate not verified がレスポンスヘッダに出てくるのですが、
これを解消するためにはどうすればよいのでしょうか。
0243デフォルトの名無しさん
2008/08/23(土) 19:16:500244デフォルトの名無しさん
2008/08/23(土) 19:19:370245デフォルトの名無しさん
2008/08/23(土) 21:01:55よくCPANから○○をとってきてインストールしろとか
みますが、Activeperlを使っている人は、PPMで
インストールできるモジュールしか使えないのでしょうか?
PPMのインストールのメニューに出てくるという意味です。
0246デフォルトの名無しさん
2008/08/23(土) 21:07:55http://kazato.run.buttobi.net/cgi-bin/material/src/vm002_0191.png
こんな画面がでてきて、ほしいファイルを右クリして
インストールする仕組みになっています。
これって誰が管理しているか知りませんが、
たぶんactivestate社がやってるんですよね。
で、PPMのメニューに出てこないものは
インストールできないのかなと。
0247デフォルトの名無しさん
2008/08/23(土) 21:09:17どの入門書読んでも、だいたい同じこと書いてあるから。
で、今日はレファレンスについて勉強してみようと思いますが、
グーグルで検索するときに、レファレンスなのでしょうか?
それとも、リファレンスなのでしょうか?
0248デフォルトの名無しさん
2008/08/23(土) 21:17:470249デフォルトの名無しさん
2008/08/23(土) 21:51:20両方ぐぐれよ。
あるいはreferenceで。
0250デフォルトの名無しさん
2008/08/23(土) 22:12:34やってやれないことはないけど、気合と根性が必要。
俺はPPMに無いものはCPANからアーカイブを取ってきてMinGW+nmakeでインストールしてる。
が、Windowsには類似のAPIがない、UNIXべったりのモジュールには苦戦してる。
(同じ機能はあってもAPIの仕様が全然違う)
0251デフォルトの名無しさん
2008/08/23(土) 23:53:26かんたんにできるのかな。
アップローダーみたいな、、、っていうのかな?
print (FILE www.abc.com/abc.txt);
みたいな。
0252デフォルトの名無しさん
2008/08/23(土) 23:56:31速く処理出来るようにするにはどのようにしたらよいのでしょうか?
$str=~s/�T/1/g;
$str=~s/�U/2/g;
$str=~s/�V/3/g;
$str=~s/�W/4/g;
$str=~s/�X/5/g;
$str=~s/�Y/6/g;
・・・
$str=~s/�@/(1)/g;
$str=~s/�A/(2)/g;
$str=~s/�B/(3)/g;
・・・
0253デフォルトの名無しさん
2008/08/23(土) 23:58:38ハッシュのレファレンスを表すときにしか
使わないんですか?
0254デフォルトの名無しさん
2008/08/24(日) 00:01:07コーディングの行数を減らしたいってこと?
コンピューターの処理速度を速くしたいってこと?
0255デフォルトの名無しさん
2008/08/24(日) 00:03:32$str=~tr/�@-�I/(1)-(10)/g;
これだと動かないかな。
0256デフォルトの名無しさん
2008/08/24(日) 00:15:10↑これって書かないと動かないの?
それとも、use strictを書けば、その中に含まれるの?
0257デフォルトの名無しさん
2008/08/24(日) 00:37:440258デフォルトの名無しさん
2008/08/24(日) 00:44:24自分のパソコンと相手のパソコンが繋がれてあったとして、
こちらのパソコンを操作するだけで相手のパソコンのHDDに書き込むことができるか?という問いに近い。
>252
ローマ数字に対応してるかどうか分からんけど、Unicode::Normalizeとかは?
ギャル文字の正規化めんどくせぇなあ……(ぼやき)
0259デフォルトの名無しさん
2008/08/24(日) 00:44:35処理速度のほうです。
>>255
有り難う御座います。
$str=~tr/�@-�I/(1)-(10)/;
$str=~tr/�@-�H/1-9/;
上の方法では出来ず、下の方法では出来ました。
括弧を付ける方法とかあるんでしょうか?
0260側近中の側近 ◆0351148456
2008/08/24(日) 00:54:15(っ´▽`)っ
$str=~tr/�@-�I/\(1\)-\(10\)/;
ではどうだ?
0261デフォルトの名無しさん
2008/08/24(日) 01:26:01そーゆーことじゃなくね?
0262デフォルトの名無しさん
2008/08/24(日) 01:53:33sub to_arabic_number {
my $str = $_[0];
my @circles = qw/�@ �A �B �C �D �E �F �G �H �I
�J �K �L �M �N �O �P �Q �R �S/;
my @romanU = qw/�T �U �V �W �X �Y �Z �[ �\ �]/;
my @romanL = qw/�@ �A �B �C �D �E �F �G �H �I/;
my $i = 1;
foreach (@romanL) {
$str =~ s/$_/$i/g;
$i++;
}
$i = 1;
foreach (@romanU) {
$str =~ s/$_/ $i/g;
$i++;
}
$i = 1;
foreach (@circles) {
$str =~ s/$_/ ($i)/g;
$i++;
}
return $str;
}
0264デフォルトの名無しさん
2008/08/24(日) 02:08:50さすがにそのコードは人に見せられるレベルじゃないだろ…
0265デフォルトの名無しさん
2008/08/24(日) 02:10:41有り難う御座います。
処理速度は遅いような気がするのですがどうでしょうか。
0266デフォルトの名無しさん
2008/08/24(日) 02:14:280267デフォルトの名無しさん
2008/08/24(日) 02:20:310268デフォルトの名無しさん
2008/08/24(日) 03:10:52use Time::HiRes 'sleep';
system q|cls|;
#----------------------------------
my @a;
@a=localtime;
sleep(.5);
say "\@a=@a[0..8]";
sleep(.5);
say "scalar(localtime)=",scalar(localtime);
sleep(.5);
say "localtime=",localtime;
sleep(.5);
localtimeという関数はホンマおもしろいなー
3通りもの出力があるんだから。
0269デフォルトの名無しさん
2008/08/24(日) 03:49:57phpだとmysql_num_rows()とか便利なのあるんですけど、perlだとわかんないorz
0270デフォルトの名無しさん
2008/08/24(日) 04:00:200271デフォルトの名無しさん
2008/08/24(日) 04:06:300272デフォルトの名無しさん
2008/08/24(日) 04:17:54oracleにselect文を実行したときの取得レコード件数を
知るための関数でしょ?
0273デフォルトの名無しさん
2008/08/24(日) 04:18:41スペース混じりの引数を食わせるには、
どうしたらいいですか?
0274デフォルトの名無しさん
2008/08/24(日) 04:42:39ここ読んでたら、なんか
日本語のファイル名も扱える
みたいじゃないですか。
どうやるの?
0275デフォルトの名無しさん
2008/08/24(日) 04:48:27system q|cls|;
#----------------------------------
"abcde" =~ m/b(.)d/ ;
say "$1";
↑これを実行すると、c、と出てきますが、
ここの$1は、ソースコードの、どこまで有効なの?
ずーっと後ろまで?
0276262
2008/08/24(日) 05:01:37遅いよー。
括弧を考えず、一桁でいいなら tr/// のが高速。
でも文字列単位の置換、文字数の異なる置換に対応できない。
速度的には、サブルーチンにせず >>266 の言うように全部インラインで書いたほうがマシ。
@circle_patterns = ();
foreach (@circles) {
push @circle_patterns, qr/$_/;
}
# (以下必要なセットで繰り返す)
# とあらかじめ準備しておいて、
# 置換ループに入ったら、
$i = 1;
foreach (@circle_patterns) {
$str =~ s/$_/($i)/;
$i++;
}
# (以下必要な...略)
# などとやればちょっとは速くなる気がする。
置換対象が行数の多いファイルなら、一気読みで $str にひとつにまとめて突っ込んでしまうのも手。
データの傾向やらで効果的な最適化は変わるだろうから、いろいろ試して比較してみてね。
0277デフォルトの名無しさん
2008/08/24(日) 05:01:39w
0278デフォルトの名無しさん
2008/08/24(日) 05:04:26これってPerlの世界でのみ、通用するものなの?
それとも、一度おぼえたら、他の言語にいっても通用するの?
0279デフォルトの名無しさん
2008/08/24(日) 05:13:04$str=~ tr/�@-�H/1-9/;
$str=~ tr/�T-�\/1-9/;
$str=~ s/[�I�]]/10/g;
0280デフォルトの名無しさん
2008/08/24(日) 05:15:05$str=~ tr/�@-�H�T-�\/1-91-9/;
$str=~ s/[�I�]]/10/g;
0281デフォルトの名無しさん
2008/08/24(日) 05:16:290282262
2008/08/24(日) 05:18:44GJ
せっかくだからさらにちょっとだけ性能改善。
# 最近の perl では $& のオーバーヘッドってどうなってんだろね?
$str=~ s/([�@-�I])/($1)/g;
0283デフォルトの名無しさん
2008/08/24(日) 05:33:010284デフォルトの名無しさん
2008/08/24(日) 05:54:56$sth -> rows;
のことか?
0285デフォルトの名無しさん
2008/08/24(日) 08:47:06つーか、ゴミでスレを埋め尽くすのはいいかげんやめておくれ。
0286デフォルトの名無しさん
2008/08/24(日) 11:02:53配列かなんかに保持しておいて、ループさせるという考え自体は悪くない……ですよね?
よほど速度がクリティカルになる状況じゃなきゃ、そこまで酷いとも思えないし。
0287デフォルトの名無しさん
2008/08/24(日) 12:10:50と言われましても。
0288デフォルトの名無しさん
2008/08/24(日) 12:13:55my @circles = qw/�@ �A �B �C �D �E �F �G �H �I �J �K �L �M �N �O �P �Q �R �S/;
my @romanU = qw/�T �U �V �W �X �Y �Z �[ �\ �]/;
my @romanL = qw/�@ �A �B �C �D �E �F �G �H �I/;
my %hash = ();
%hash = (%hash, map { $circles[$_-1] => "($_)" } 1..20);
%hash = (%hash, map { $romanU[$_-1] => $_, $romanL[$_-1] => $_ } 1..10);
sub to_arabic_number {
my $str = shift;
$str =~ s/([�@-�S�T-�]�@-�I])/$hash{$1}/ge;
$str;
}
0289デフォルトの名無しさん
2008/08/24(日) 12:22:13[参考になる+11]
0290デフォルトの名無しさん
2008/08/24(日) 12:54:50やるならとことん逝こうぜ。個人的には%hashを全書き換えしてるのが気になる。
my @nums = (
[qw(�@ �A �B �C �D �E �F �G �H �I �J �K �L �M �N �O �P �Q �R �S)],
[qw(�T �U �V �W �X �Y �Z �[ �\ �])],
[qw(�@ �A �B �C �D �E �F �G �H �I)]
);
my %hash = map {
my $num = $_;
map {$num->[$_ - 1] => "($_)"} 1..(scalar(@$num))
} @nums;
my $re = join("", map {$_->[0].'-'.$_->[$#$_]} @nums);
sub to_arbic_number {
local $_ = shift;
s/([$re])/$hash{$1}/geo;
return $_;
}
0291デフォルトの名無しさん
2008/08/24(日) 13:01:27>>276
>>288
ありがとうございます。参考になります。
eって遅くなるのかと思って試してませんでした。
文字数によってはeを利用したほうが速くなりそうですね。
単純に-で繋げて表現出来ない文字列も多いので、eが有用というのは私的には!!でした。
色々試してみます。ありがとうございます。
-------------
>>280
>>282
ありがとうございます。そういう方法もあるのですね。一つ一つ書いていくより
かなり速くなりました。
�I-�Sの場合が無いのでまだ速度を比べられないのですが、この場合はどのよう
にしたらよいのでしょうか?
trではやはり2文字になるのでダメで、一つ一つ書いていく方法しか思い浮かば
ないのですが、方法はないのでしょうか?
0292デフォルトの名無しさん
2008/08/24(日) 13:04:26VIP発でサイトを作ろうと思うんだ。(詳しくはWikiを見てくれ)
パートスレになるんでパー速(GEP)に移動している。
今スタッフを募集しているから、来てくれないか?
■Wiki
http://www36.atwiki.jp/vipvipschool/
■募集スタッフ
プログラム担当(特にErlang、Perl)
デザイナー(サイト上のアイコン、ロゴなど)
WEBデザイナー(サイトデザイン案に沿って、htmlやCSSを書ける)
他にも宣伝担当なども募集している。
■スレ
http://ex14.vip2ch.com/test/read.cgi/news4gep/1219068297/
0293デフォルトの名無しさん
2008/08/24(日) 13:07:340294デフォルトの名無しさん
2008/08/24(日) 14:16:48具体的に何が悪いかを指摘せずに、ソースだけ書かれても
後から見た人は困るって意味さ
0295デフォルトの名無しさん
2008/08/24(日) 15:46:25$str=~ s/([�I-�R])/(1$1)/g;
$str=~ tr/�T-�\�@-�H�I-�R/1-91-90-9/;
$str=~ s/�]/10/g;
$str=~ s/�S/20/g;
0296デフォルトの名無しさん
2008/08/24(日) 15:54:45君はプログラミングは諦めて他の道へ進んだ方がいい
0297デフォルトの名無しさん
2008/08/24(日) 16:06:28質問スレで質問しちゃだめなん?
0298デフォルトの名無しさん
2008/08/24(日) 16:13:24っていうか、来ないでくださいって感じ。
0299デフォルトの名無しさん
2008/08/24(日) 16:19:48そういう方法がありましたか。まったく思いつかなかったです。
試してみます。有り難う御座います。
>>286
考え自体は全然悪くないと思います。
スピードよりも見やすさのほうが通常は大事だと私は思います。
どうやって見やすくかつ速く出来るかで悩みます。
でもどっちを優先するかは時と場合によります。
0300デフォルトの名無しさん
2008/08/24(日) 18:55:130301デフォルトの名無しさん
2008/08/24(日) 20:24:11フォームから値を送るサンプルを弄くってるのですが
my $local = $q->param('upfile');
my $fname = basename($local,"");
my $path = '.file';
my $newfile = "$path/$fname";
こういう感じでbasenameを使って、ウィンドウズ環境から上げると
パスが
.file/C:\Documents and Settings\Admin\デスクトップ\hoge.txt
となってしまい、ちゃんとアップできません。
他のサンプルとかでもこうやってるようなのですが
みなさんはどうやってるのですか。
0302デフォルトの名無しさん
2008/08/24(日) 20:30:13my $path = '.file';
は
my $path = './file';
です
0303デフォルトの名無しさん
2008/08/24(日) 23:33:29$local =~ tr|\\|/|g;
# or
$fname =~ s/(?:\\|\/)([^\\\/:*?"<>|]+?$)/$1/;
# 思いつきで書いた。どっちもその場しのぎ。当然テストなんかしてない。
0304デフォルトの名無しさん
2008/08/25(月) 00:40:39まあ tr に g オプションはないよな
0305303
2008/08/25(月) 01:06:490306デフォルトの名無しさん
2008/08/25(月) 01:40:110307デフォルトの名無しさん
2008/08/25(月) 01:52:090308デフォルトの名無しさん
2008/08/25(月) 06:35:23入門書読んでも、どの本も
同じことしか書いてないし。
だいたい,スカラー変数の説明から始まって、
配列、ハッシュ、ループ、プリント文、あとなんだ、
サブルーチン、正規表現、こんな感じ。
あとはコンテキストがどうたらこうたら。
演算子の優先順位がどうとか。
0309デフォルトの名無しさん
2008/08/25(月) 06:39:17あと入出力。それと、変数のスコープとか。
ファイルからの入力、ファイルへの出力。
再帰、引数利用の引数渡し。
それ以上難しいのは、グロブ、レファレンス、パッケージ、
モジュール、二次元配列、二次元ハッシュとかかな。
基本は1ヶ月もやれば覚えてしまうね。目新しさがないというか、
飽きる。「ああまたこれか」みたいな。
0310デフォルトの名無しさん
2008/08/25(月) 06:40:40レファレンスとして使われている可能性と、
オブジェクト指向での記述として使われている可能性と、
2つあるの?
0311デフォルトの名無しさん
2008/08/25(月) 06:47:10$\
use English: $OUTPUT_RECORD_SEPARATOR / $ORS
[入出力関連] 出力時の行末文字
デフォルト値は NULL です。
$\ の使い方
$\ = "\n";
print "Hello Perl World !";
↑これを使うと、行末文字を変更できるのだ
ということは「にょ」とかもできるはず。さっそくやってみよう。
0312デフォルトの名無しさん
2008/08/25(月) 06:49:15print "おはよう";
さっそくやってみたぞ
実験結果
おはようにょ
成功!みごと成功したようだ!
0313デフォルトの名無しさん
2008/08/25(月) 07:32:03飽きる原因
・理解してるのに同じ事を繰り返してる
・理解出来ないのに同じ事を繰り返してる
どっちも馬鹿には違いないがw
つか、入門書を何冊も読んでる時点で相当の馬鹿
>>311,312
チラウラカスうぜぇ
0314デフォルトの名無しさん
2008/08/25(月) 07:34:56↓
何度も同じことを繰り返してるのに理解出来ない
の方が良かったな
失敬
0315デフォルトの名無しさん
2008/08/25(月) 08:19:00っていうのは,Perlでは実装できない?
Cのときはできたんだけど。scanfだっけ?
0316デフォルトの名無しさん
2008/08/25(月) 09:57:01http://pc11.2ch.net/test/read.cgi/prog/1213800787/297
このレベルの話があって、漏れは一回読んで意味がすぐ理解
できたんだけど、
http://pc11.2ch.net/test/read.cgi/prog/1213800787/298
みたいに、理解できない人もいるみたいなんだけど、
これってコミュニケーション障害?
0317デフォルトの名無しさん
2008/08/25(月) 10:45:32俺もわからん。あんたがエスパーなんだろう。
というか板違い甚しい。他所でやってくれ。
0318デフォルトの名無しさん
2008/08/25(月) 11:02:52四捨五入したいのですが、どのように記述すればいいのでしょうか。
If 文でこつこつ書いて、あまりの多さにめげてしまいました。
0319デフォルトの名無しさん
2008/08/25(月) 11:45:56sub round10 {
int(($_[0] + 5) / 10) * 10;
}
0320デフォルトの名無しさん
2008/08/25(月) 13:11:340321デフォルトの名無しさん
2008/08/25(月) 13:31:10print round(10);
sub round {sprintf('%.1f',($_[0] / 100 ))*100}
0322321
2008/08/25(月) 13:34:06そもそもsprintfって四捨五入するの保証してるのか不明デス
0323318
2008/08/25(月) 16:21:260324デフォルトの名無しさん
2008/08/25(月) 17:16:13>>321は、print round 15 すると答えが10が返る。
# ま、原因は浮動小数点の処理にあるのは明白なんだけど。
>>321氏は「その環境では上手く行ってたとしても別環境では上手く
行かない事がある」程度には認識した方が良いかと。
>>323
何故に50行?ベタ実装してもそんなに行は食わないだろ?
sub round {
my $t = chop ( my $i = shift ) ;
my %h = map{ $_, $_ < 5 ? 0 : 10 } 0..9 ;
( $i || 0 ) * 10 + $h{$t} ;
}
printf "%d->%d\n", $_ ,round $_ for 0 .. 30 ;
0325デフォルトの名無しさん
2008/08/25(月) 19:10:410326デフォルトの名無しさん
2008/08/25(月) 20:47:39$str=~ s/([�@-�S])/($1)/g;
$str=~ s/([�@-�S])/ord($1)-ord('�@') + 1/eg;
$str=~ s/�T-�]/ord($1)-ord('�T') + 1/eg;
>>318
$data=~ s/(\d*)(\d)/$1 * 10 + (($2 < 5) ? 0 : 10)/e;
0327デフォルトの名無しさん
2008/08/25(月) 21:02:28$str=~ s/([�@-�S])/'(' . (ord($1)-ord('�@') + 1) . ')'/eg;
でいい気がするんだが
0328デフォルトの名無しさん
2008/08/25(月) 21:12:57sub round($) {
return $_[0] % 10 >= 5 ? int($_[0]/10+1)*10 : int($_[0]/10)*10;
}
0329326
2008/08/25(月) 21:17:50そだね
あと、ミス
× $str=~ s/�T-�]/ord($1)-ord('�T') + 1/eg;
○$ str=~ s/[�T-�]]/ord($1)-ord('�T') + 1/eg;
0330326
2008/08/25(月) 21:28:07× $str=~ s/�T-�]/ord($1)-ord('�T') + 1/eg;
○ $str=~ s/[�T-�]]/ord($1)-ord('�T') + 1/eg;
0331デフォルトの名無しさん
2008/08/25(月) 21:41:15@num{ord('�@')..ord('�S')} = 1..20;
@num{ord('�T')..ord('�]')} = 1..10;
$str =~ s/([�@-�S�T-�]])/$num{ord($1)}/eg;
0332デフォルトの名無しさん
2008/08/25(月) 21:44:09・・・=map{"($_)"}1..20
0333デフォルトの名無しさん
2008/08/25(月) 21:48:50一応、自己(嫌悪)レス。
sub round{ my $t = chop ( my $i = shift ) ; ( $i || 0 ) * 10 + ( $t < 5 ? 0 : 10 ) ; }
0334デフォルトの名無しさん
2008/08/25(月) 22:20:40perlを勉強し始めて間も無い物です。
MacOSX 10.5でLWPを使った簡単なマクロツールを使っているのですが、
Terminalにログをだらだらと表示する画面では無く、
viや、CPANを実行した時の様な専用画面が表示されるようにしたいと考えています(exitを打ち込んだから、shellに戻る様なイメージ)。
ぐぐるにもどう言った言葉で表現すればいいのか分からないので、
困っています。ヒントだけでも良いので押しえてください。
よろしくお願いいたします。
0335デフォルトの名無しさん
2008/08/25(月) 22:34:130336デフォルトの名無しさん
2008/08/25(月) 22:50:49ありがとうございます!!
当スレの過去ログ等も調べさせて頂き、
色々見てみたのですが、インストールは出来そうだけど、
perlとどう対話(?)させれば良いのかが分からないです…。
もし私のような初心者にも分かりやすいサイト等があったら
お教え頂けますでしょうか。
0337デフォルトの名無しさん
2008/08/25(月) 22:52:300338デフォルトの名無しさん
2008/08/25(月) 23:07:33ググっても分からないぐらいのレベルなんです。
とりあえず、インストールは終わったんですがね。
検索ワードをCurses.pmに買えてやってみます。
0339デフォルトの名無しさん
2008/08/25(月) 23:45:31あぁ。そういう方法もありますか。よくこんな方法思いつきますね。
見れば、なぁんだと思うけどなかなか思い浮かばないですね。
でもこれだと>>288 のやり方(をサブルーチンとか外して効率化したの)とスピード
は変わらないですね。
逆にord使う分だけ遅くならないのかなーと・・・。
でもアイデアは面白いと思いますので参考にしたいと思います。
有り難う御座います。
0340デフォルトの名無しさん
2008/08/26(火) 00:06:30色々調べた結果難しそうなので、今回はチャレンジするのをやめました。
screen(?)を上手く使った方法を考えたいと思います。
お騒がせいたしました。
0341デフォルトの名無しさん
2008/08/26(火) 00:49:26CPANを読めよ
0342デフォルトの名無しさん
2008/08/26(火) 00:50:40これみたら2ちゃんは一日に2億アクセスあるみたいですが、2億行の
アクセスログも、Perlだったら、スイスイ取り扱いできますよね。
0343デフォルトの名無しさん
2008/08/26(火) 01:00:120344デフォルトの名無しさん
2008/08/26(火) 01:51:42system q|cls|;
#----------------------------------
my $a,$b;
$a=10;
$b=3;
my $c;
say $c=$a/$b;
say $c*3;
このコードを実行したら、10になった。
一方、電卓で計算したら、9.99999999999、、、になった。
なんで?
0345デフォルトの名無しさん
2008/08/26(火) 01:57:28ちゃんとしたやつなら10になる。
0346デフォルトの名無しさん
2008/08/26(火) 04:18:110347デフォルトの名無しさん
2008/08/26(火) 04:50:070348デフォルトの名無しさん
2008/08/26(火) 22:08:06CPANでモジュールを探したところ、
Archive::Rarではオプションでパスワードを扱えなくて
Archive::Rar::Passthroughでないとダメみたいです。
ところが、このモジュールは使用OS(Windows)には入りません。
エラーが出ないことを前提に、直接rar叩いちゃった方が楽ですか?
0349デフォルトの名無しさん
2008/08/26(火) 22:14:21楽ですか?っていうかほかにやり方ないんならそうするしかないじゃん
何が聞きたいの?
0350デフォルトの名無しさん
2008/08/26(火) 23:39:380351デフォルトの名無しさん
2008/08/27(水) 01:40:15こんな書き方があることを30分前に知った。
お前ら、ちゃんと教えてくれなきゃだめだろ。
0352デフォルトの名無しさん
2008/08/27(水) 01:55:110353デフォルトの名無しさん
2008/08/27(水) 02:10:06print "$aい";
こんなとき、こっちの意図は
「あい」
という出力なのに、perlが勝手に
$aい
という変数だと誤解して、エラーになる、
こういうときに、
${a}
と書くと、エラーにならない。
今読んだ本にそう書いてあるんだけど。
これがシンボリックリファレンスなの?
0354デフォルトの名無しさん
2008/08/27(水) 02:11:45最適なのはどれ?
Ruby?
PHP?
Phtynon?
C?
0355デフォルトの名無しさん
2008/08/27(水) 03:37:37これをアクセス時間でソートしたリスト(テキストファイル)を作りたいんですが、
あまりメモリに負担をかけずにやるにはどうやるのがいいですか?
DBMはこんな感じで使ってました。
use DB_File;
tie %u, 'DB_File', 'url', O_RDWR|O_CREAT, 0644, $DB_BTREE;
$u{$url} = $last_modified;
0356デフォルトの名無しさん
2008/08/27(水) 03:43:28ppmリポジトリでも軒並みテストにFAILしているし、
自分の環境(VC++ Express 2008)でも一緒でした
配布物内のREADMEには動く節が書かれていますが……orz
Data::Alias以外の方法で同様なことを実現するには、
素直にサブルーチンを掘ってリファレンスで受け渡しするしかなさそうで、
ちょっと難儀しています
0357デフォルトの名無しさん
2008/08/27(水) 11:49:49それはシンボリックリファレンスとは違う。
分からないことがあったら「ググる」という事を覚えようね。
あと、できるだけ、
print $a, "い";
って書き方を習慣付けておいた方が
後々、他の言語にも移行しやすいよ。
0358デフォルトの名無しさん
2008/08/27(水) 12:42:21print $a. "い";
print $a, "い";
では異なるんでしょうか。
0359デフォルトの名無しさん
2008/08/27(水) 12:47:09明らさまに異なる。
print $h = $a. "い" ;
print @a = ( $a, "い" ) ;
0360デフォルトの名無しさん
2008/08/27(水) 12:49:42use Benchmark;
open DEVNULL, ">", "/dev/null" or die $!;
$x = "hogehogehoge";
timethese(
undef,
{
dot => sub { print DEVNULL $x. "hoge" },
comma => sub { print DEVNULL $x, "hoge" },
}
);
% perl hoge.pl
Benchmark: running comma, dot for at least 3 CPU seconds...
comma: 3 wallclock secs ( 3.42 usr + -0.00 sys = 3.42 CPU) @ 2453425.44/s (n=8390715)
dot: 4 wallclock secs ( 3.19 usr + 0.02 sys = 3.21 CPU) @ 1753933.96/s (n=5630128)
0361デフォルトの名無しさん
2008/08/27(水) 12:51:21文字列の足し算をするか、しないか。どっちが効率がいいか考えればわかるよね?
あと、print 文のときはソレでいいけど、代入文とかのとき
$b = $a. "い"; とは書けるけど
$b = $a, "い"; はダメ。
0362デフォルトの名無しさん
2008/08/27(水) 12:59:100363デフォルトの名無しさん
2008/08/27(水) 13:02:37s/"qwertyuiop@[asdfghjkl;:]zxcvbnm"/"たていすかんなにらせちとしはきくまのりれけむつさそひこみもねるめろ"/;
こんな長い置換を、2行に折り曲げて書く方法って無いでしょうか?
s/"qwertyuiop@[asdfghjkl;:]zxcvbnm"/
"たていすかんなにらせちとしはきくまのりれけむつさそひこみもねるめろ"/;
って書くと改行が混じるんですよね。
0364363
2008/08/27(水) 13:04:22置換パターンに @ とか [ ] とか出てくるのは忘れてください。
テケトーにキーボードを叩いただけですから。
本来はふつうの英文です。
0365デフォルトの名無しさん
2008/08/27(水) 13:36:33やり方あるはずだよ。
なんかのオプションをつけるはず。
s/●/○/rとか。
そのrとかのオプションの名前は忘れたけど。
「正規表現中の改行を無視する」
ってオプションだと思う。
こないだ読んだ本に書いてあった。
0366デフォルトの名無しさん
2008/08/27(水) 13:38:02っ[x]
0367デフォルトの名無しさん
2008/08/27(水) 13:39:55「マニュアルを見るのは賎民のやること」
という風潮には目を覆うものがあるな。
0368デフォルトの名無しさん
2008/08/27(水) 13:42:52> パターン中の空白文字(半角スペース、
>Tab文字、改行文字)と、「#」から行末まで
>の文字列を無視する。
> 「[]」内の文字は、無視されない。
0369デフォルトの名無しさん
2008/08/27(水) 13:49:22それは結果がたまたま同じだっただけだ。
man perlvar の $, を100ぺん読み直せ
0370デフォルトの名無しさん
2008/08/27(水) 13:51:31「○○もしくは△△を含む」は「○○|△△」でできますが、
「○○および△△を含む」はどうするのでしょうか?
つまりand検索です。
要素が二つとは限らず可変なのですが、どうするのが効率が良いのでしょうか?
0371デフォルトの名無しさん
2008/08/27(水) 14:20:11っ[?=]
0372デフォルトの名無しさん
2008/08/27(水) 14:29:36っ[ブール代数]
0373デフォルトの名無しさん
2008/08/27(水) 16:00:48アリ!バッチリです。これで仕事がはかどります。
0374デフォルトの名無しさん
2008/08/27(水) 17:06:01my $hoge = q{hoge} ;
$hoge =~ s{hoge}
# これでも良くね?
{foo} ;
print $hoge . "\n" ;
0375デフォルトの名無しさん
2008/08/27(水) 20:44:49アロー演算子がでてきたときに、それが
オブジェクト指向のアロー演算子なのか、それとも、
デリファレンスのアロー演算子なのか、どこを見て
見分ければいいの?
0376デフォルトの名無しさん
2008/08/27(水) 20:54:27レベル1 言語使用考案者(ラリー・ウオール)
レベル2 仕様書を紙に書く人
レベル3 インタプリターを書く人
レベル4 専用エディター作る人
レベル5 モジュール作る人
レベル6 教科書や参考書を書く人
レベル7 このスレで初心者に教える人
レベル8 このスレで質問する人
0377356
2008/08/28(木) 02:10:26Data::Aliasとの違いに気を付けようと思います
0378デフォルトの名無しさん
2008/08/28(木) 09:59:37読んでるけど、よくわからんな。
0379デフォルトの名無しさん
2008/08/28(木) 10:03:39よく使うの?
0380デフォルトの名無しさん
2008/08/28(木) 12:13:44ぐぐれしね
>>376
逆だしね
>>378-379
最後まで読めしね
0381デフォルトの名無しさん
2008/08/28(木) 13:09:360382デフォルトの名無しさん
2008/08/28(木) 13:11:09「逆だ、死ね」なのか
0383355
2008/08/28(木) 17:35:40今さらだが、もしハッシュでやるんならキーとvalue入れ替えてBTREEのハッシュ再構築して、
トラバースってことになるんだろうな。。。
DB_Fileはキー重複にも対応してたはずなので、やろうと思えばできそう。
0384デフォルトの名無しさん
2008/08/28(木) 17:45:38とりあえず順番考えずにべたで出力したのをsortコマンドに食わせれば楽だったかもな。
ぜんぜんperlじゃないけどw
sortコマンドはメモリ足りなけりゃ中間結果をディスクに書いてマージソートとかやってくれる。
0385デフォルトの名無しさん
2008/08/28(木) 18:55:18× マージソートとかやってくれる。
○ ソート済みファイルのマージとかやってくれる。
0386デフォルトの名無しさん
2008/08/29(金) 04:15:140387デフォルトの名無しさん
2008/08/29(金) 04:20:470388デフォルトの名無しさん
2008/08/29(金) 11:13:17↑のページの通りにLWPを使ってPOSTしているのですが、
どのようなデータをPOSTしているか確認する方法はないでしょうか?
%formdataの中を見るのではなく、requestした結果から見れたらいいのですが。
0389デフォルトの名無しさん
2008/08/29(金) 11:17:50暗号化されてたらバケラッタだけど
0391デフォルトの名無しさん
2008/08/29(金) 18:10:06evalのような関数は無いでしょうか。
[%
tt2_str = '[% cnt = 10 + 5; cnt; %]';
EVAL(tt2_str); # ←のような感じ
%]
期待する表示結果:15
0392デフォルトの名無しさん
2008/08/29(金) 18:53:400393デフォルトの名無しさん
2008/08/29(金) 19:08:140394デフォルトの名無しさん
2008/08/29(金) 19:10:190395デフォルトの名無しさん
2008/08/29(金) 19:28:540396デフォルトの名無しさん
2008/08/29(金) 20:00:13ソースコード
print "a";
require a.pl;
↑これを実行するとどうなる?
0397デフォルトの名無しさん
2008/08/29(金) 20:23:100398デフォルトの名無しさん
2008/08/29(金) 20:24:290399デフォルトの名無しさん
2008/08/29(金) 21:44:59自分で実行すればいいじゃないかよ。
もしかしてナイコン?
0400デフォルトの名無しさん
2008/08/29(金) 22:21:280401デフォルトの名無しさん
2008/08/29(金) 23:14:08コンソールレベルでも、
open FILE > C:/windows/comamnd.com とか。
コマンドコムが上書きされてしまう。
あと危険なのは、rmとか。
systemとか。
あと、レンタルサーバーで無限ループになったときって
どうすればいいの?
0402デフォルトの名無しさん
2008/08/29(金) 23:40:30これでエラーが出るんで、
「おかしいなーおかしいなー」
って悩んでたら、よく考えたら、
$が抜けてた。
0403デフォルトの名無しさん
2008/08/30(土) 00:00:37use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
use Encode;
system q|cls|;
#----------------------------------
my $bar = 'fuga.txt';
if (-f $bar) {
print "ファイル".$bar."が存在します。\n";
}
else {
print"ファイル". $bar."が存在しません。\n";
}
↑このコードすごいよ。
ファイルが存在するかどうかを調べてくれて、
レポートまでしてくれるよ。
0404デフォルトの名無しさん
2008/08/30(土) 00:10:35> いきなり考えなしに実行すると危険なことってあるよね。
ありますね。なので考えてやりゃいいんじゃないでしょうか。
> コマンドコムが上書きされてしまう。
とか、
> あと危険なのは、rmとか。
> systemとか。
とか、このへんがあなたにとって「危険」でありうる環境でなら、なんぼでもやってください。
ただしその程度の認識で公開のサーバを利用するのはできれば、できるかぎりやめてください。
0405デフォルトの名無しさん
2008/08/30(土) 00:11:04myしか使っちゃだめなの?
外で変数使いたい場合もあるんだが。
0406デフォルトの名無しさん
2008/08/30(土) 00:14:16自己レス
サブルーチンにして、
retrunつかったら解決した。
0407デフォルトの名無しさん
2008/08/30(土) 00:14:32ファイルテストを行ってから、print するまでの間に、あったファイルが消えたり、なかったファイルが作られたりした場合はどうすんの?
0408デフォルトの名無しさん
2008/08/30(土) 00:19:47説明四でも意味がわかんない。
↓
state変数
* 一回だけ初期化される変数。
* Cのstatic相当
state変数
今までは...
{
my $i = 0;
sub incr { $i++ };
}
state変数
これからは...
use feature 'state';
sub incr {
state $i = 0;
$i++;
}
0409デフォルトの名無しさん
2008/08/30(土) 00:21:122回目以降はその初期化の行は実行されずにスルーされるってこと?
0410デフォルトの名無しさん
2008/08/30(土) 00:37:370411デフォルトの名無しさん
2008/08/30(土) 00:41:09サブルーチンって書いていいの?
0412デフォルトの名無しさん
2008/08/30(土) 00:46:50それを読んでわかんねー、というか理解に少しでも不安があるようなら正直かなりマズい。
Perl をまるで読めてねーっつーことだから。
基礎からがんばれ。
0413デフォルトの名無しさん
2008/08/30(土) 00:52:02どこのサブルーチンの中にサブルーチンが書いてあるの?
0414デフォルトの名無しさん
2008/08/30(土) 00:56:15いやだから、
自分でこれから、そういうコードを書いても
いいのかなあ?って。
0415デフォルトの名無しさん
2008/08/30(土) 00:59:19作成したと言い、ある場合は、ファイルサイズを調べてレポートするプログラム。↓
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
use Encode;
use feature qw( :5.10 );
system q|cls|;
#----------------------------------
my $bar = 'fuga.txt';
my $a=&file;
sub file{
if (-f $bar) {
print "ファイル".$bar."が存在します。\n";
return 1;
}
else {
print"ファイル". $bar."が存在しません。\n";
return 0;
}
}
given($a){
when (1){
my $file_size;
$file_size = (stat'./fuga.txt')[7];
say $bar."のファイルサイズは、".$file_size."バイトです"; }
when (0){
open FH, ">fuga.txt";
say "ファイル". $bar."を作成しました。";
}
}
0416デフォルトの名無しさん
2008/08/30(土) 01:01:09use open IO => ":encoding(cp932)";
↑先頭の2行にこれを忘れていた。入れてください。
0417デフォルトの名無しさん
2008/08/30(土) 01:08:23-f してから open するまでの間に誰かが fuga.txt を作っていた場合、
何もかも台無しになるという点で >>403 より性質が悪化してるんだが
それはいいのか。
0418デフォルトの名無しさん
2008/08/30(土) 01:08:30&で明示的に実行を指示したときだけ
サブルーチンを実行したいんだけど、
これだと、処理の流れがそこまできたときに、
なしくずし的に実行されてしまうんだけど、
それって正常な動作なの?
sub a;
{
print "a";
}
0419デフォルトの名無しさん
2008/08/30(土) 01:10:23ほしいのに、ソースコードの一番下にそのサブルーチンの定義部を
置いておくと、そこまできたときに、勝手に実行されてしまうのが
困るといっているんです。
0420デフォルトの名無しさん
2008/08/30(土) 01:14:20は自己解決したごめん
もう一回ためしたら実行されなかった。
;(セミコロン)が余計に入っていた。
0421デフォルトの名無しさん
2008/08/30(土) 03:14:54foreachの場合は、sleepかませて
1行づつゆっくり出力するってできるけど、
mapだと、一度に一気に配列に全部入ってしまうから、
一個づつゆっくり出すとか無理だよね?
0422デフォルトの名無しさん
2008/08/30(土) 03:16:310423デフォルトの名無しさん
2008/08/30(土) 03:17:30なにが不満なの?
0424デフォルトの名無しさん
2008/08/30(土) 03:19:540425デフォルトの名無しさん
2008/08/30(土) 03:24:09map {
system q|cls|;
print $_, $/;
# sleep 1;
}
0..100000;
こりゃーすげー
0426デフォルトの名無しさん
2008/08/30(土) 06:55:02明日まで我慢。
あさってには居なくなるから。
0427デフォルトの名無しさん
2008/08/30(土) 14:38:11mod_perl.soが配置されないままmod_perl2がインストールされてしまいやり直そうにも
"Package 'mod_perl' is already installed."と表示されてやり直しも利きません
どうにか導入する方法は無いでしょうか?
0428デフォルトの名無しさん
2008/08/30(土) 17:03:51ってファイルの上のほうで宣言して、
5,000行下でも、その$aにアクセスできるよね。
でもこれって「グローバル変数」とは呼ばないんだよね。
0429デフォルトの名無しさん
2008/08/30(土) 17:05:45b.plとあって、
requireで呼び出して使う状況で、
両方とも、$aって変数をつかってても、
myでプライベート化してれば、問題ないのかな?
逆に、myを使ってないで
グローバル変数として使っていたら、
a.plとb.plで同じ$aがあったら、
それは同じ変数として扱われてしまうの?
つまり、複数人で作業するときに、どつぼにはまる
可能性が高い?
0430デフォルトの名無しさん
2008/08/30(土) 17:26:47ttp://www.rwds.net/kuroita/program/Perl_tips.html#my
ttp://d.hatena.ne.jp/perlcodesample/20080310/1205162964
0431デフォルトの名無しさん
2008/08/30(土) 19:39:18よく知らんけど mod_perl 無しの状態にロールバックしてやり直せない状態だとしたら、初手から構築し直すのが安全じゃないかな。
0432デフォルトの名無しさん
2008/08/30(土) 22:56:41require b.pl
print "$a";
にして、b.plで、
my $a=1;
にしたら、a.plを実行したときに、
1って表示されないんだけど、
別ファイルでrequireされることがわかっているときは、
変数はmy化したらだめで、グローバル変数にしておかないとだめなの?
0433デフォルトの名無しさん
2008/08/30(土) 22:58:11その処理の結果をa.plに渡す、ってときに、通常
どんな手段で渡しているのかなー?って。
とりあえず、その変数をmy化したら渡せないってのはわかった。
グローバル変数だったら渡せるというのもわかったが、
それって普通の方法なのかな?
0434デフォルトの名無しさん
2008/08/31(日) 02:51:00このコードの意味わかる?
漏れはわからない。
0435デフォルトの名無しさん
2008/08/31(日) 03:11:470436デフォルトの名無しさん
2008/08/31(日) 03:59:39qがquote-like operatorだということに注意すればそんなに難しくはない。
0437デフォルトの名無しさん
2008/08/31(日) 07:42:522000〜3000円くらいの安い入門書を買うことをすすめる。
サブルーチンの項目あたりに書いてるはず。
ぶっちゃけ、Perlというか、
プログラミングにおける基本的な考え方の1つなので、そこから勉強するべき。
あと>430は無視なのかい?
0438デフォルトの名無しさん
2008/08/31(日) 11:38:11これはバージョンの相性が良くないってことなんでしょうか。Apache自体が起動しないです
0439デフォルトの名無しさん
2008/08/31(日) 13:26:43ログにエラーが出ていませんか?
出ていればそれを手がかりに調べてください。
0440デフォルトの名無しさん
2008/08/31(日) 14:46:33どうにか解決しました
どうもです
0441デフォルトの名無しさん
2008/08/31(日) 15:28:31requireとからめた使い方が書いてないんだよっ!
で、requireでインクルード?したファイルの中の
変数を使いたいときって、どうすればいいの?
0442デフォルトの名無しさん
2008/08/31(日) 15:31:56処理なりをするよね。そんで、なんかの結果が出てきて、
それを$aに代入したとする。
そんで、b.plを作って、b.plの中で、
require a.pl
ってやって、さっきの$aの結果を利用しようとしたときに、
a.plの中で、
my $a
ってmy化されていたら、b.plから利用できないじゃん。
もちろん、ourでグローバル化しておけば利用できるのは知ってるけど、
やたらとグローバル変数を使うのはバグの元だからやめろって教科書に書いてあるし。
つまり、a.plの中でサブルーチンを作って、
return渡しをすればいいのか?
0443デフォルトの名無しさん
2008/08/31(日) 15:37:43答えは”モジュール”にあると思う
0444デフォルトの名無しさん
2008/08/31(日) 16:26:09このコードの意味がわからん
0445デフォルトの名無しさん
2008/08/31(日) 16:37:55きみ、Perl に向いてない。
0446デフォルトの名無しさん
2008/08/31(日) 17:06:15use strict;
use diagnostics;
print "a"
↑これでなんのエラーもでないんだが、
もしかして、ワンライナーの場合は
セミコロンは必須ではないのか?
0447デフォルトの名無しさん
2008/08/31(日) 17:07:47なんで実行できてしまうんかと。
0448デフォルトの名無しさん
2008/08/31(日) 17:46:06ありがちっちゃありがちだけどもな、
Perl の文法をいい加減に覚えていると、そういう疑問を持ってしまう。
perl は文の区切りとして ; を要求するのであって、
文の終端として、ではないのだ。
ブロック内の最後の行で ; を省略できるのも、
ブロック生成子としての {} が文を区切ってしまうためなのだ。
基礎からやり直しつつ1年ほどROMれ。
0449デフォルトの名無しさん
2008/08/31(日) 18:57:27一番最後の行で答えが出てるじゃないか。
>444
まさにPerlの美学であると同時にデメリットだよなあ。
自分なら適当に区切るか括弧をつける。
>448
でもまあ、付けるけどな、俺。
0450448
2008/08/31(日) 19:33:07>>444 にあるコードは読み手を混乱させるのが目的なので、あえてそのように書いているのはお分かりかと思います。従って可読性を上げては意味がありません。
ただ今回のコードはまったくややこしくない、いわば子供だましの類なので、読めないとちょっとアレなのは確かですが。
>>448
もちろんそれがよいでしょう。理由は…、言うまでもありませんな。
0451デフォルトの名無しさん
2008/08/31(日) 19:51:31ppencode の出力の一部じゃないのか? ppencode が何者かはぐぐればわかる。
0452デフォルトの名無しさん
2008/08/31(日) 20:28:16これでoって出るのがすげーわらえる
0453デフォルトの名無しさん
2008/08/31(日) 20:53:400454デフォルトの名無しさん
2008/08/31(日) 21:45:170455デフォルトの名無しさん
2008/08/31(日) 21:47:55それぞれ一つ一つの意味は分かっても、こうやって並ばれると分からないです><
0456デフォルトの名無しさん
2008/08/31(日) 21:54:000457デフォルトの名無しさん
2008/08/31(日) 22:08:190458デフォルトの名無しさん
2008/08/31(日) 23:02:46Active Perlというものは今でも無料で入手できるのでしょうか。。。
Windowsで使いたいのです。
0459デフォルトの名無しさん
2008/08/31(日) 23:11:260460デフォルトの名無しさん
2008/08/31(日) 23:11:48ActivePerl そのものは現在も無料です。楽しんでね。
0461デフォルトの名無しさん
2008/08/31(日) 23:40:46ppencode - JavaScript demo
http://namazu.org/~takesako/ppencode/demo.html
0462デフォルトの名無しさん
2008/09/01(月) 00:49:55ActivePerlは無料です。
でもダウンロードのリンクは
IQ150以上でないと
探せないようになっております。
0463デフォルトの名無しさん
2008/09/01(月) 00:51:065.10です。
ごーてんいち、でなくて
ごーてんじゅう、です。
0464デフォルトの名無しさん
2008/09/01(月) 00:51:58msiファイルを右クリで、インストールを
選べばインストールできます。
ダブクリではインストできないこともあります。
0465デフォルトの名無しさん
2008/09/01(月) 00:52:45開発中止になった模様です。
0466デフォルトの名無しさん
2008/09/01(月) 01:59:27Protocol scheme 'https' is not supported (Crypt::SSLeay not installed)
と怒られました。
telnetやsshでログインできないサーバなのですが、httpsなサイトにアクセスできるように出来ないでしょうか?
0467デフォルトの名無しさん
2008/09/01(月) 02:03:330468デフォルトの名無しさん
2008/09/01(月) 02:50:240469デフォルトの名無しさん
2008/09/01(月) 02:52:58my @colors = qw(RED GREEN BLUE);
for (@colors) {
print $_, "$_", "\n";
}
みたいな事をやって、ループ内の動きが以下と等価になるようにしたいです。
print RED, 'RED', "\n";
print GREEN, 'GREEN', "\n";
print BLUE, 'BLUE', "\n";
現状はループ内の print の第一引数に文字列がそのままわたっているだけなので、
希望通りの動作をしませんが、希望通りに動かすにはどうしたら良いのでしょうか?
よろしくお願いします。
0470デフォルトの名無しさん
2008/09/01(月) 03:18:17print eval($_), $_, "\n" for @{$Term::ANSIColor::EXPORT_TAGS{constants}};
0471デフォルトの名無しさん
2008/09/01(月) 03:23:24なるほど、evalで文字列を評価してやれば良い訳ですね。
リファレンス当たりをごにょごにょするのかなーと漠然と思っていたのですが、
そういう考え方には至りませんでした。
ありがとうございます。
0472470
2008/09/01(月) 03:29:30eval も一法というだけ。
@colors への代入時に解決してやる手もある。
というかそちらのほうが素直。
my @colors = RED, GREEN, BLUE;
0473デフォルトの名無しさん
2008/09/01(月) 03:41:11はじめはそのような方法を考えてみたのですが、
代入時に評価してしまった場合、その後どうやって文字列として取得するかがわからず、
先ほどのようなコードになりました。
もしよろしければ、文字列として取得する方法も教えて頂けますか?
0474デフォルトの名無しさん
2008/09/01(月) 03:56:10for (@colors) {
print $Term::ANSIColor::{$_}->($_), "\n";
}
0475デフォルトの名無しさん
2008/09/01(月) 04:00:33for (@colors) {
no strict 'refs';
print $_->(), $_, "\n";
}
0476458
2008/09/01(月) 08:33:05先ほど無事インストールし、[Hello World!!]を表示できました。
いろいろありがとうございました。。。 (´・ω・`)
0478デフォルトの名無しさん
2008/09/01(月) 20:26:36use feature qw( :5.10 );
sub a {
my $a=1;
return $a;
}
1;
------------------
「2.plの内容」
use feature qw( :5.10 );
require q|1.pl|;
say &a;
----------------------
これで、「2.pl」を実行すると、「1」と表示されるが、
本当にこれでいいのか?
つまり、1.plの変数の内容を、2.plで、requireで呼び出して使うとき、
サブルーチン渡しでいいのか?
それとも、モジュール渡しをするのが普通なのか?
our渡しは、できるけれども、教科書に「やるな」と書いてあるので
排除の方向で。
それとも、ほかの何かがあるのか?
0479デフォルトの名無しさん
2008/09/01(月) 20:27:24それを
requireで、
2.plからその変数を利用したいときに、
どうやって変数を渡すのか、という
問題です。
0480デフォルトの名無しさん
2008/09/01(月) 20:38:24夏休みいつまでなの?
0481デフォルトの名無しさん
2008/09/01(月) 20:43:360482デフォルトの名無しさん
2008/09/01(月) 21:56:53おめでとさん。Perl の泥沼へようこそ。
泥んこ遊びは楽しいYO!
0483デフォルトの名無しさん
2008/09/01(月) 22:22:05毎日のように#!/usr/bin/perl -wと書いています。
0484デフォルトの名無しさん
2008/09/01(月) 23:41:22> 毎日のように#!/usr/bin/perl -wと書いています。
これを自分で書く奴は相当のバカ
0485デフォルトの名無しさん
2008/09/02(火) 00:32:560486デフォルトの名無しさん
2008/09/02(火) 00:42:38http://jbbs.livedoor.jp/bbs/read.cgi/game/38835/1193931349
これおかしなプログラムとか組み込まれてませんか?
0487デフォルトの名無しさん
2008/09/02(火) 00:45:180488デフォルトの名無しさん
2008/09/02(火) 01:21:12マジでおしえてくんないかなー?
requireでなくてuseを使うの?
0489デフォルトの名無しさん
2008/09/02(火) 01:44:080490デフォルトの名無しさん
2008/09/02(火) 02:07:540491デフォルトの名無しさん
2008/09/02(火) 02:34:26http://jbbs.livedoor.jp/bbs/read.cgi/game/38835/1193931349
これおかしなPerlとか組み込まれてませんか?
Perlで組まれてるらしいでつ
0492デフォルトの名無しさん
2008/09/02(火) 02:37:290493デフォルトの名無しさん
2008/09/02(火) 03:45:530494デフォルトの名無しさん
2008/09/02(火) 04:13:480495デフォルトの名無しさん
2008/09/02(火) 04:18:31調べればいいのか?
それで、読むべき教科書は
http://www.rfs.jp/sb/perl/04/01.html
ここであってる?
0496デフォルトの名無しさん
2008/09/02(火) 05:21:19結論が出てるのに何が疑問なのかが分からない。
それと多分、誠意が足りてない。
0497デフォルトの名無しさん
2008/09/02(火) 08:07:27「なんだよ、あってるならあってるってとっとと言えばいいのに」
「誠意とか意味わかんないし関係ないじゃん」
「まあいいや。誰かも煽りはスルーって言ってたし。バカには言わせとけばいいんだ」
0498デフォルトの名無しさん
2008/09/02(火) 11:41:23my @aaa = ("A" , "B" , "C" , "D");
foreach(@aaa){
@aaaの中を一つ飛ばす。
printf("%s\n",$_);
}
とし、結果を
B
D
としたいのですが、どのようにしたら簡単に出来ますでしょうか。
for()で$iを途中インクリする方法を考えたけど、いまいち複雑になったので。
0499デフォルトの名無しさん
2008/09/02(火) 11:58:280500デフォルトの名無しさん
2008/09/02(火) 12:05:450501デフォルトの名無しさん
2008/09/02(火) 12:06:44for my $i (0 .. $#aaa) {
next if $i % 2 == 0;
print $aaa[$i], "\n";
}
0502デフォルトの名無しさん
2008/09/02(火) 12:10:17コンボボックスをループで動的に生成したいのです。
どうやってやればいいのですか
0503デフォルトの名無しさん
2008/09/02(火) 12:21:31@{[ 任意の式 ]} を埋め込めばいいだろ。式としてdo BLOCKをつかえばおよそ何でも書ける。
Template Toolkitとか使った方が幸せになれそうだけどな。
0504デフォルトの名無しさん
2008/09/02(火) 12:29:080505デフォルトの名無しさん
2008/09/02(火) 14:53:09このパターンは、文字列先頭にあるfredにマッチするか、あるいは末尾にあるbarにマッチします
の部分ですけれど、これって
このパターンは、文字列先頭にあるfredにマッチするか、あるいは末尾にあるbarneyにマッチします
の誤りじゃないんですか?オライリーのエラッタには載ってないみたいなんですが。
0506デフォルトの名無しさん
2008/09/02(火) 14:54:56/^fred|barney$/ だとそうなるような気がするんスが。
0508デフォルトの名無しさん
2008/09/02(火) 15:03:51最初/^foo|bar$/ってなってたのを書き直したんだろうなw
0509デフォルトの名無しさん
2008/09/02(火) 16:05:42なんだか急に親近感がwww
0510デフォルトの名無しさん
2008/09/02(火) 17:04:030511デフォルトの名無しさん
2008/09/02(火) 17:32:560512デフォルトの名無しさん
2008/09/02(火) 18:13:41UNIX上とはかなり差があるような気がして…
0513デフォルトの名無しさん
2008/09/02(火) 18:17:080514デフォルトの名無しさん
2008/09/02(火) 20:11:06コマンドプロンプトの操作性やパスの設定、文字コードを考えると、
Unix系のOSでperl使った方がましだと思う。
Cygwinでもいいんだけどさ。
0515デフォルトの名無しさん
2008/09/02(火) 20:33:34perlを1ヶ月学んできづいたことは、
CPANからモジュールとってくる、ってときに、
WinのActivePerlだと、PPMっていうソフトで
新しいモジュールをインストールするんだけど、
そこのPPMのメニューにすでに登録されている
モジュールしかインストールできない。
厳密に言えば6段階くらい複雑な手順をふめば
PPMを使わないで手動でインストールできるらしいんだが
初心者にはおすすめできない。
つまり、CPANから○○をダウンロードして使え、だとか
言われたりしたときとか、あるいは自分でグーグルで検索して
よさそうなモジュールみつけたときでも、それをかんたんには
入れられないケースが発生することがある。
自分がはまってるのは、mp3を鳴らすなんとか、ってモジュールを
入れたいんだが、PPMにのってないので困っている。
0516デフォルトの名無しさん
2008/09/02(火) 20:35:12DOSプロンプトで勉強するときに、必ず
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)"; # ※1
use Encode;
と書かないといけない。
0517デフォルトの名無しさん
2008/09/02(火) 21:08:44coLinux+debian sidオススメ。
無駄にハイクオリティーなことをすると楽しい。
0518デフォルトの名無しさん
2008/09/02(火) 21:46:20open my $fh, '<', encode("cp932", $file) or die $! ; # ※2
print <$fh>;
# 以上の内容は、日本語処理が解らない人でも、とりあえず日本語処理ができてしまう
# おまじないです。条件が異なる場合の対処方法は、ご自分で勉強して下さい。
# 【注】※1.の行を入れると、DOS窓への日本語出力は簡便になりますが、
# ソースファイル名に非ANSI文字が含まれる場合にdie 文の出力が失敗します。
# ※2.OSに渡す文字列(ファイル名,dosコマンドのオプションなど)は、
# この例のようにcp932でエンコードする必要があります。
-----------------------------------------------------
↑これの説明がよくわからないんだが、ファイル名が日本語の場合、
上記の措置が必要という意味なの?
それとも、ファイル名がアルファベットでも、
そのファイルの中味に日本語が書いてあったら、
上記の措置が必要という意味なの?
で、あれば、ファイル名が英語で、なおかつ
ファイルの中味が全部英語なら、上記の措置は
必要ないってことなの?
0519デフォルトの名無しさん
2008/09/02(火) 21:55:571. $obj = new X;
2. $obj = X->new;
1. call_sub();
2. &call_sub;
0520デフォルトの名無しさん
2008/09/02(火) 22:02:39open my $fh, '<', encode("cp932", $file) or die $! ; # ※2
print <$fh>;
-------------------------
↑これってmy $fhって、なんなの?
ファイルハンドルなの?
0521デフォルトの名無しさん
2008/09/02(火) 22:09:10while (<IN>) { print; }
close(IN);
-------------------
別に、>>4に書いてあるようにcp932ってしなくても、
上記で日本語を含むファイルを開けるのですが、
これでいいの?
0522デフォルトの名無しさん
2008/09/02(火) 23:30:15こんなんもあるYO
Strawberry Perl
http://www.moongift.jp/2008/06/strawberry_perl/
0523デフォルトの名無しさん
2008/09/02(火) 23:37:16サブルーチン渡しにしたら問題が解決したと書いたが、
参考書で調べたところ、
「サブルーチンは宣言すると、すべて自動的にグローバルになる」
と書いてある。
つまり、ourでグローバル渡しをしているのと
実質的にまったく同じことなので、意味がないのだ。
ここはやはり、モジュールとかパッケージの勉強を
するべきなのか?
本当はどうやって渡すの?
0524デフォルトの名無しさん
2008/09/03(水) 01:37:40use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)"; # ※1
use Encode;
0525デフォルトの名無しさん
2008/09/03(水) 01:38:28open my $fh, '<', encode("cp932", $file) or die $! ; # ※2
print <$fh>;
0526デフォルトの名無しさん
2008/09/03(水) 01:39:15>>525は必要ないの?
実際、>>524だけで、
>>525なしでも、動いたんだけど。
0527デフォルトの名無しさん
2008/09/03(水) 01:46:07扱ってもいいけど、普通は中身みて加工とか集計とかするわけで、そういう
ときに違いが出るんだな。
0528デフォルトの名無しさん
2008/09/03(水) 02:10:24普通は出てくるはずの
<IN>とかの文字が見えないので不安なんですけど。
0529デフォルトの名無しさん
2008/09/03(水) 02:13:03使うのって、結局ourでグローバル変数化しておくか、あるいは
サブルーチンに入れて、return渡しするしかないの?
サブルーチンにいれるのは、すべてのサブルーチンは
宣言すると自動的にグローバル化されるのだから、
他ファイルに渡せるのはあたりまえなんですよね。
結局ourでグローバル化してるのと本質的には同じだし。
パッケージとモジュールの勉強をしてみましたが、
それでも結局グローバル化されてる変数は読み込めましたが、
my化されてる変数は読み込めませんでした。
0530デフォルトの名無しさん
2008/09/03(水) 02:46:49my化してるとだめなんだ〜
他ファイルで使って欲しい変数はグローバル化してないと
だめなんだね。
0531デフォルトの名無しさん
2008/09/03(水) 02:48:43相変わらず質問の意図が分かりかねるのだが、それはさておき。
>他ファイルのmy化された変数を別ファイルで読み込んで
>使うのって、結局ourでグローバル変数化しておくか、あるいは
>サブルーチンに入れて、return渡しするしかないの?
やり方が分かってるなら、そうすればいい。
>それでも結局グローバル化されてる変数は読み込めましたが、
>my化されてる変数は読み込めませんでした。
myで宣言されてる変数が他から読めたら、myの意味が無いっしょ。
例えばグローバル変数にはメリットとデメリットがある。
特に理由が無ければデメリットの少ないローカルな変数を使って、サブルーチン間を渡せばいい。
ただし、メリットとデメリットを理解している人間が、的確な場所に使う分には何も問題がない。
グローバル変数を使うのも使わないのも、両方とも正解だ。
その「的確な場所」が分からないのなら、まだ使うべきではないということだ。
0532デフォルトの名無しさん
2008/09/03(水) 02:50:26http://ja.wikipedia.org/wiki/%E5%90%8D%E5%89%8D%E7%A9%BA%E9%96%93
0533デフォルトの名無しさん
2008/09/03(水) 02:56:37たとえば、モンスターの設定ファイルで、
スライムの体力=1とかって設定するとするでしょ。
ファイル名「a.pm」
package 1;
my $a=1;
1;
---------------
このmy $aを
他のファイルから読みたかったの。
でも無理だとわかったの。
この理解であってる?
0534デフォルトの名無しさん
2008/09/03(水) 03:03:42いい加減しつこい。とりあえず以下のドキュメント読んどけ。読み終わるまで戻ってくんな。
> perlboot - Perl OO tutorial for beginners
> perltoot - Perl OO tutorial, part 1
> perltooc - Perl OO tutorial, part 2
> perlbot - Perl OO tricks and examples
0535533
2008/09/03(水) 03:05:010536デフォルトの名無しさん
2008/09/03(水) 03:08:03書いてあるじゃん。
だから絶対使ったらダメなのかと思ったし。
でも外部から読み込まれることを前提に設計されてる
モジュールの場合は、外部に渡す変数はグローバル宣言なのね。
最初からそう言ってくれればいいのに。
入門書にも書いてないしー
0537デフォルトの名無しさん
2008/09/03(水) 03:50:29・Perlについてくるマニュアルに書いてある
・標準モジュールやユーティリティのソースで実例が見られる
・Webを検索すれば割とすぐに見つかる
・それについて書いてある本がいくつもある
そういうアレな質問に回答を返す病的に親切な人が出てきても、
「聞きたいのはそれじゃない」だったり、完全スルーだったり。
回答者が寄り付かないように工夫しているとしか思えないです。
あなたの好みと水準にぴったり合わせた答えを提供する義務は
誰にもありません。その点は忘れないで下さい。
0538デフォルトの名無しさん
2008/09/03(水) 03:51:14だーかーらーそれが勇者の設定ファイルなら読めるわ
0539デフォルトの名無しさん
2008/09/03(水) 03:59:500540デフォルトの名無しさん
2008/09/03(水) 04:00:02それであってると言う主旨の回答を3回くらい見かけてるわけだが
0541デフォルトの名無しさん
2008/09/03(水) 11:02:26--a.pl----------------
our $a = "hoge";
---------------------
--b.pl----------------
use strict;
require "a.pl";
print $a;
---------------------
C:\>perl b.pl
hoge
_____________________________________________________________________________
--a.pl----------------
our $aa = "hoge";
---------------------
--b.pl----------------
use strict;
require "a.pl";
print $aa;
---------------------
C:\>perl b.pl
Global symbol "$aa" requires explicit package name at b.pl line 3.
Execution of b.pl aborted due to compilation errors.
0542デフォルトの名無しさん
2008/09/03(水) 11:02:59Use of implicit split to @_ is deprecated
というものが表示されるのですが、これはどういう意味でしょうか?
-wをつけなければ表示されません
0543デフォルトの名無しさん
2008/09/03(水) 11:14:13splitをスカラーコンテキストで使うとばらした内容を@_に入れるという
仕様なんだが、サブルーチンの引数渡しに使われる@_を壊すので
よろしくないということになっている。
perldiag(1)の説明によればコンパイラに負担がかかるらしい。
Use of implicit split to @_ is deprecated
(D deprecated) It makes a lot of work for the compiler when you
clobber a subroutine's argument list, so it's better if you assign
the results of a split() explicitly to an array (or list).
古いプログラムはしょうがないが新しく書くプログラムでは避けた
方がいいと思われ。
0544542
2008/09/03(水) 13:01:45my $tab = split( /\t/, $_);
こう書いているのですが、どのように修正すればいいのでしょうか?
0545デフォルトの名無しさん
2008/09/03(水) 13:07:07$_ には何が入っていて、$tab には何を入れたいの?
もしかして @tab と書くべきところだったってオチか?
0546デフォルトの名無しさん
2008/09/03(水) 13:33:32my $tab = my @dummy = split( /\t/, $_ );
が楽だし確実だな。
でも実はタブを数えたかったのなら、タブによって分割された
項目数を数えるより直接タブを数える
my $tab2 = tr/\t//;
の方が効率的なのでおぼえておくといい。
ただしsplitは(第3引数に負の数を与えなければ)末尾の空フィールドは
捨てるので、この動作を利用してなんかしている場合はtrで数える手は
使えない。
0547542
2008/09/03(水) 14:07:31ありがとうございます。
$_には、
foo\tbar\tbaz
や
\t
のような値が入っています。
$tabには配列の数を入れたかったです。(1行目なら32行目なら0
>>546
ありがとうざいます。
頂いたとおりに修正することで、-wをつけても何も表示されなくなりました。
0548デフォルトの名無しさん
2008/09/03(水) 14:58:36UNIXだとファイルの最初に[ #! /usr/local/bin/perl ]などとフルパスを書くと
コマンドだけで実行できるようですが、Active PerlをWindowsで使ってる場合は、
こういうやり方は無理なのでしょうか?
今は、ファイルを保存したディレクトリ内で、[ perl <ファイル名.pl> ]を打ち込んで実行しています。
0549デフォルトの名無しさん
2008/09/03(水) 15:54:33ちゃんとインストーラでインストールした?
解凍してコピーしただけじゃOSの設定はされないよ。
ちゃんとインストールすれば、ほげ.pl をマウスでクリックするだけで動いてくれるよ。
#! /usr/local/bin/perl
が必要なのは、UNIXというOS固有の問題だから Windows には関係ない。
# で始まってるのでタダのコメント文として無視される。
0550デフォルトの名無しさん
2008/09/03(水) 15:56:48.plの拡張子を持つファイルなら、コマンドプロンプトから、C:\> 〜〜.plでも実行できる。
(頭の#!〜〜はまず気にしなくてよし。#!/usr/bin/speedy とか書いてる時はエラー出るけど・・)
つうか、拡張子が関連付けられてたら、エクスプローラーからダブルクリックでも実行できる。
けど、前にもココだったか、Webprog板の方だったかにいたけど、
「コマンドプロンプトが一瞬で消えてしまい、出力が読めません。」とか言わないでね。
0551デフォルトの名無しさん
2008/09/03(水) 16:20:47便利。
0552デフォルトの名無しさん
2008/09/03(水) 16:22:380553デフォルトの名無しさん
2008/09/03(水) 16:26:34>>525との組み合わせなのですが、
教科書や解説ページを見ると、よく
open FH, ">filename.txt";
---------------
$FH = "filename.txt";
open FH;
------------------
open(FH,"<data.dat"); # 入力モードでオープン
--------------------
$line = <FH>; # 1行読み込み
----------------------
open(FH, $datafile);
@list = <FH>;
-------------------
foreach $data_line( @list ) {
print $data_line;
}
---------------
open(IN, $datafile);
while ( $line = <IN >) {
print $line;
}
--------------
↑このような例がでてくるのですが、いずれもファイルハンドルとして
INとかFHとか大文字がでてくるのですが、>>525だと
そのような文字が見当たりません。
できれば我々初心者が見慣れた例で書き直した
サンプルをいただきたいのですが。
0554デフォルトの名無しさん
2008/09/03(水) 16:43:21open my $fh, ">", "filename.txt";
------------------
open my $fh, "<", "data.dat";
--------------------
$line = <$fh>;
----------------------
open my $fh, "<", $datafile;
my @list = <$fh>;
-------------------
foreach my $data_line (@list) {
print $data_line;
}
---------------
opem my $in, "<", $datafile;
while (my $line = <$in>) {
print $line;
}
0555デフォルトの名無しさん
2008/09/03(水) 16:59:55ありがとうございました。
拡張子つけないでファイル名だけでできるかなと思ったわけです。
>>551
それインストールしてみました。イイ情報をありがとうございました。
0556デフォルトの名無しさん
2008/09/03(水) 17:05:56君の大嫌いなグローバルな変数(ファイルハンドル)を使っていいのかい?
0557デフォルトの名無しさん
2008/09/03(水) 19:44:37まじで?
また古い本を読んでしまったのかな、、、
0558デフォルトの名無しさん
2008/09/03(水) 19:45:30それで、プライベートなファイルハンドルと、
グローバルなファイルハンドルが存在すると??
0559デフォルトの名無しさん
2008/09/03(水) 19:59:170560デフォルトの名無しさん
2008/09/03(水) 20:31:440561デフォルトの名無しさん
2008/09/03(水) 20:54:24たぶん別人。もしくは壮大な釣り
0562デフォルトの名無しさん
2008/09/03(水) 22:42:54> 下でエラーが出るのは何故ですか?
perldoc strict
の "strict vars" の項を読んでみてください。
# そして、上の例でなぜエラーが出ないかについては:
# perldoc -f sort
0563デフォルトの名無しさん
2008/09/03(水) 23:04:43サンクス
パッケージ名を明記しなくちゃいけないんですね。
でも、$aと$bは、自動的にパッケージ名をつけてくれると。
0564デフォルトの名無しさん
2008/09/04(木) 01:10:57「間接ファイルハンドル」
という名前がついていることはつきとめました。
マッキンゼーに2,000万払って調べてもらいました。
で、古いやり方はやめて
間接ファイルハンドルを使え、と
書いてあるWEBページはどこにあるのでしょうか?
0565デフォルトの名無しさん
2008/09/04(木) 01:48:34ここのスレだってウェブサイトの1つってことでいいよね?
0566デフォルトの名無しさん
2008/09/04(木) 02:01:01低レベルなレスでスレ汚すなよ。中学生だろ、おまえ。
ま、おれもヒトのこと以遠が。。。でも俺よりは年下だな。
ひとつだけ教えといてやろう。
パッケージ変数はサブルーチンでアクセスしろって、PBPに書いてあった。
Class::Data::Inheritableとか使ってもいいだろう。
だから、もうこの関連で書き込みすんなよ。
0567デフォルトの名無しさん
2008/09/04(木) 02:02:320568デフォルトの名無しさん
2008/09/04(木) 02:04:39いまボストンコンサルティングに1、500万払って
調べてももらってますが、
「古いファイルハンドルの指定の仕方(FILEとか)でなくて、
新しいやり方、間接ファイルハンドルを使え」
と明確に書いてあるWEBページは、
なかなか見つかんないですよ。
たぶんメリットがないんじゃないですか?
0569デフォルトの名無しさん
2008/09/04(木) 02:06:19高校生でperlできるんだーすごいねー
偏差値68以上の学校?
0570デフォルトの名無しさん
2008/09/04(木) 02:09:48頭が悪いのにも限度があると思うんだ。
0571デフォルトの名無しさん
2008/09/04(木) 02:13:39年なんか関係ないだろ。黙って勉強しとけよ、青二才。
上では余計なこと書いた。今は反省している。
0572デフォルトの名無しさん
2008/09/04(木) 02:16:28進学校?数学得意?プログラミングをはじめたのは何才から?
0573デフォルトの名無しさん
2008/09/04(木) 06:56:17PHPの連中は本当にキモイなぁ
0574デフォルトの名無しさん
2008/09/04(木) 08:46:420575デフォルトの名無しさん
2008/09/04(木) 08:51:190576デフォルトの名無しさん
2008/09/04(木) 10:18:13この場合は my $well か?
0577デフォルトの名無しさん
2008/09/04(木) 12:22:570578デフォルトの名無しさん
2008/09/04(木) 16:00:430579デフォルトの名無しさん
2008/09/04(木) 16:55:06ただし @minshu の中に値 kenshiro があった場合は直ちに処理を中止するものとする。
0580デフォルトの名無しさん
2008/09/04(木) 17:07:210581デフォルトの名無しさん
2008/09/04(木) 17:29:48keshizumi じゃないのか?
0582デフォルトの名無しさん
2008/09/04(木) 17:30:410583デフォルトの名無しさん
2008/09/04(木) 17:32:560584デフォルトの名無しさん
2008/09/04(木) 17:52:460585デフォルトの名無しさん
2008/09/04(木) 17:56:49メールの添付ファイルを取ってくるスクリプトを書いています。
ログインしてメールの本文などを取得することはできたのですが、
MIME::Parser で parse した時点で、破損したファイル(最後までデータが出ていない)が
出力されてしまいます(output_to_core(1)を消して試してみました)。
この場合、原因として考えられるのは何でしょうか? ここで詰まってしまってます……。
0586デフォルトの名無しさん
2008/09/04(木) 19:37:190587デフォルトの名無しさん
2008/09/04(木) 19:49:08すいません、最初から書けばよかった。ちょっとはしょってますが、こんな感じです。
use strict;
use MIME::Parser;
use Mail::IMAPClient;
use IO::Socket::SSL;
my $parser = new MIME::Parser;
$parser->output_to_core(1);
my $socket = IO::Socket::SSL->new( PeerAddr => 'imap.gmail.com', PeerPort => 993 ) or die "socket(): $@";
my $client = Mail::IMAPClient->new( Socket => $socket, User => '[email protected]' ) or die "new(): $@";
if ( $client->IsAuthenticated() ){
$client->select('INBOX');
my @uid = $client->unseen;
foreach my $id (@uid) {
my $message = $client->message_string($id) or warn "Timeout!";
my $entity = $parser->parse_data($message);
my $header = $entity->head;
if ( $entity->is_multipart ){
my $parts_count = $entity->parts;
for (my $i = 1; $i < $parts_count; $i++) {
my $part_entity = $entity->parts($i);
my $filename = $part_entity->head->recommended_filename;
my $filebody = $part_entity->bodyhandle->as_string;
open(FILE, ">$filename");
print FILE $filebody;
close(FILE);
}
}
}
}
0588デフォルトの名無しさん
2008/09/04(木) 21:11:33別ファイルから読みたいときは、
「Perlのオブジェクト指向」
を使えばいいんじゃないかな??
あってる?ちがう?
0589デフォルトの名無しさん
2008/09/04(木) 21:59:34誰にレスしてるんだ?
0590デフォルトの名無しさん
2008/09/04(木) 22:07:34他ファイルにかかれているmy化された
変数も読めるんじゃないか?
と質問をしてるわけです。
0591デフォルトの名無しさん
2008/09/04(木) 22:16:38use feature qw( :5.10 );
say 2 ** 50;
これを実行すると
1.12589990684262e+015
とでてくるが、
use bigint;
use feature qw( :5.10 );
say 2 ** 50;
とすると
1125899906842624
と出てくる。
いくつの桁まで表示できるか、
今からちょっと実験してみる。
0592デフォルトの名無しさん
2008/09/04(木) 22:17:32質問は?
0593デフォルトの名無しさん
2008/09/04(木) 22:20:03数値の表記が、3桁づつ、、(カンマ)で
区切られて表示されないのがあって、
これを、3桁づつカンマで区切って表示するように
改造したい、と思ったんだが、これって難しいの?
例
1234567円→1、234、567円
0594デフォルトの名無しさん
2008/09/04(木) 22:24:310595デフォルトの名無しさん
2008/09/04(木) 22:27:18system q|cls|;
use Win32::Sound;
use feature qw( :5.10 );
say 2 ** 55555;
Win32::Sound::Play("file.wav");
↑これすごいよ。
2の55555乗を計算して
画面に出力するんだけど、
DOS窓が全部数字で埋め尽くされてしまって
もはや何桁あるかなんで数え切れないよ。
CPUが計算するのに5秒もかかるし。(ウチのパソコンでは)
0596デフォルトの名無しさん
2008/09/04(木) 22:35:281 while s/^([-+]?\d+)(\d\d\d)/$1,$2/;
0597デフォルトの名無しさん
2008/09/04(木) 22:54:46use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
use Encode;
use bigint;
use feature qw( :5.10 );
use Time::HiRes 'sleep';
system q|cls|;
$|=1;
#----------------------------------
use Win32::Sound;
use feature qw( :5.10 );
say "2を1000回、掛けてみますですよ...";
my $a=2;
say "結果が出ましたですよ...\n".&aaa."ですよ...";
say "あと、結果の出力を画面の真ん中に出すやり方をおしえてくだしあ";
sub aaa{
for (my $b=1;$b<=499;$b=$b+1){
$a=$a*2;
say "2を500回、掛けてみますですよ...";
say "今、第".$b."回目の計算中ですよ...";
say $a;
system q|cls|;
}
return $a
}
Win32::Sound::Play("file.wav");
0598デフォルトの名無しさん
2008/09/04(木) 23:02:07同じものがあったらエラーって処理をしたいのですが
ttp://www.ss.iij4u.or.jp/~somali/web/_perl_upload.html
ここの改良版の方に
opendir(DIR , $logfiles);
@filelist = readdir(DIR)
closedir(DIR)
foreach (@filelist){
next if $file =~ /^\.{1,2}$/;
if(compare( $fh , $_){
error処理;
}
}
みたいな感じでやっているのですが
上手くいかんのです
たすけてくだしあ
0599デフォルトの名無しさん
2008/09/04(木) 23:17:180600デフォルトの名無しさん
2008/09/04(木) 23:19:54助けて下しア
0601デフォルトの名無しさん
2008/09/04(木) 23:21:560602デフォルトの名無しさん
2008/09/04(木) 23:22:18webprog板池よ
0603改良版ですよ1
2008/09/04(木) 23:42:40use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)";
use Encode;
use bigint;
use feature qw( :5.10 );
system q|cls|;
use Win32::Sound;
my $a=2,$c,$d,$f;
print "2を何乗させたいのか、数字を入力してくだしあ(例:500)>";
$f=<STDIN>;
chomp $f;
my $e=$f;$d=$e-1;
$c=&aaa;&bbb;
Win32::Sound::Play("file.wav");
sub aaa{
for (my $b=1;$b<=$d;$b=$b+1){
say "2の".$e."乗を計算してみますですよ...";
say "今、2の".$b."乗目の計算中ですよ...";
say $a; $a=$a*2;
system q|cls|;
}
return $a
}
sub bbb{
say "結果が出ましたですよ...\n";
say "2の"."$e"."乗は ".$c." ですよ...";
say "あと、結果の出力を画面の真ん中に出すやり方をおしえてくだしあ\n";
}
0604デフォルトの名無しさん
2008/09/04(木) 23:47:43use File::Compare;
http://d.hatena.ne.jp/minesouta/20070807/p1
0605デフォルトの名無しさん
2008/09/04(木) 23:49:39すっごい楽しいね!
0606585
2008/09/05(金) 00:02:520607デフォルトの名無しさん
2008/09/05(金) 00:03:52最近、知ったんだけど、下記で、"."や".."を含まない、ファイル一覧が得られる。
@filelist = <$logfiles/*.*>;
0608607
2008/09/05(金) 00:06:48foreach (<$logfiles/*.*>){
if(compare( $fh , $_){
error処理;
}
}
0609デフォルトの名無しさん
2008/09/05(金) 00:21:48WebProg池、と言おうと思ったが、問題はそこじゃないっぽいしなあ。
>598>607
状況次第だが、毎回ファイルの中身を全チェックだと効率悪すぎないか?
バイナリから何らかのハッシュを生成しておき(同一バイナリなら同一のハッシュ)、
そのハッシュを保存しておいて比較した方がいいと思う。
稀に別バイナリが同一ハッシュを返すこともあるが、
その時は諦めるか、バイナリを直接比較すればいい。
0610デフォルトの名無しさん
2008/09/05(金) 01:22:26現象は添付ファイルの種類を問わず発生しますか?
複数のファイルを用意し、それぞれを添付したメールを用意して試してみましょう。
添付ファイルのファイル名に日本語が含まれているか否かで変化があるか確認してください。
0611デフォルトの名無しさん
2008/09/05(金) 01:26:40本当に? 間違いない? 信じて大丈夫?
いや、誰も信じないからいいんだけどさ。
0612585
2008/09/05(金) 01:32:48添付ファイルの種類を問わず発生しているように見えます。試しているファイルはすべて英語名です。
binmode FILE することで、JPG は開くことができるようにはなりました。
PDF = ファイルが壊れている、と出て開けない。
JPG = 画像の下の方がブロックノイズ(最後までデータができていないっぽい)
HTM = ファイルの最後の方で途切れてしまう。
TXT = ファイル末尾に謎の文字化け。(=ェ��攵モ]スクラmエ輜オラ ←こんなのが。なんだこりゃ。)
message_to_file で書き出してみたファイルを見る限りでは、途中でデータの転送が止まっているようなこともなく、
正常に処理できているように見えます。parse_data して、print する途中でどこか変なところがあるのでしょうか。
0613デフォルトの名無しさん
2008/09/05(金) 04:05:430614デフォルトの名無しさん
2008/09/05(金) 04:14:30Parentheses missing around "my" list at 1.pl line 27 (#1)
(W parenthesis) You said something like
my $foo, $bar = @_;
when you meant
my ($foo, $bar) = @_;
Remember that "my", "our", "local" and "state" bind tighter than comma.
0615デフォルトの名無しさん
2008/09/05(金) 04:42:13これってバリバリつかっていいの?
gotoみたいに、「絶対に使うな!」とかって怒られない?
0616デフォルトの名無しさん
2008/09/05(金) 07:46:59誰か一緒に作らない?
0617デフォルトの名無しさん
2008/09/05(金) 07:54:21ちゃんとメリットとデメリットを理解して、それが適切だと思えば
別に何を使って良いんでねーの?
stateを使うならオブジェクト指向にしてもいいかなあと思ってみたが、
これは単に自分が無知なだけか。
>616
ゲ製板池
0618デフォルトの名無しさん
2008/09/05(金) 08:21:12このページすごいわかりやすいね
0619デフォルトの名無しさん
2008/09/05(金) 10:55:16Webprog 板に行ってきますヽ(´Д`;)ノ
0620デフォルトの名無しさん
2008/09/05(金) 12:06:49宣伝厨うざい、マルチウザイ
>print "$str"; # ***123***\n を出力
こんな事書くアホなページの宣伝すんな
「参考書籍」でPBPやらEffectiveやら勧めてるが
読んでないのバレバレじゃねえか
0621デフォルトの名無しさん
2008/09/05(金) 12:17:370622デフォルトの名無しさん
2008/09/05(金) 12:34:15> そこまで過剰に反応する意味がわからない。
ウソが広まるのを放置しておくと何年もすべての人が被害を被り続けるからでしょう
0623デフォルトの名無しさん
2008/09/05(金) 13:45:580624デフォルトの名無しさん
2008/09/05(金) 15:19:060625デフォルトの名無しさん
2008/09/05(金) 16:09:320626デフォルトの名無しさん
2008/09/05(金) 16:13:05って、読んだけど、よくわからないね、難しくて。
これって中級者以上向けだよね。
0627デフォルトの名無しさん
2008/09/05(金) 16:18:27ラクダの前にリャマがいるだろ
0628デフォルトの名無しさん
2008/09/05(金) 16:29:40うん、そっちから読んだ方がいいみたいだね。
0629デフォルトの名無しさん
2008/09/05(金) 16:30:31それをCのコードに変換するのってできるの?
0630デフォルトの名無しさん
2008/09/05(金) 16:42:340631デフォルトの名無しさん
2008/09/05(金) 16:50:01つB::C
でもperlらしいperlプログラムはたいていCにしても速くなんないから
やめとけ。
0632デフォルトの名無しさん
2008/09/05(金) 20:15:47理解できるページが3ページくらいしかない。
0633デフォルトの名無しさん
2008/09/05(金) 20:16:52速度を速くしたいんでなくて、
あの難しいCのプログラムを自分の手で
生成できるというのがしびれるんです。
昔C勉強したけど結局理解できなかったし。
そんで、B::Cで検索しても情報がでてこないんで、
使い方を解説してあるページを教えてもらえますか?
0634デフォルトの名無しさん
2008/09/05(金) 20:26:11むしろPerlの方が覚えること多い印象だが。
0635デフォルトの名無しさん
2008/09/05(金) 20:30:20ttp://search.cpan.org/~nwclark/perl-5.8.8/ext/B/B/C.pm
0636デフォルトの名無しさん
2008/09/05(金) 20:48:28よんだけどわからないよどうしよう
日本語で詳しく説明書があるサイトをおしえてください
0637デフォルトの名無しさん
2008/09/05(金) 20:54:13(@INC contains: C:/Perl/site/lib C:/Perl/lib .)
at 6.pl line 1.
BEGIN failed--compilation aborted at 6.pl line 1.
とでてくるのですが、ひょっとして
自分のパソコンにはB::Cが入っていない?
これってPPMで入れるの?
0638デフォルトの名無しさん
2008/09/05(金) 20:55:27それを読み解く気合がないなら、その類のモジュールは楽しめない。
0639デフォルトの名無しさん
2008/09/05(金) 21:00:52そこから手取り足取り教えにゃわからん奴がちょっかい出すブツじゃないよ。
0640デフォルトの名無しさん
2008/09/05(金) 21:05:05これはどうやったら確定できますか?
それでPPMみたんですけど、そこにもB::Cが登録されてないんです。
0641デフォルトの名無しさん
2008/09/05(金) 21:15:190642デフォルトの名無しさん
2008/09/05(金) 21:15:40もしかして5.10? perldelta参照してみそ
…つーか深追いすんな、しても無意味だ。
ちょっとした想定外のモジュールをuseしてるだけで、B::Cは通らない
んだから(実用的じゃ全くない)。
0643デフォルトの名無しさん
2008/09/05(金) 21:16:35釣りだといってくれ
0644デフォルトの名無しさん
2008/09/05(金) 21:32:530645デフォルトの名無しさん
2008/09/05(金) 21:36:270646デフォルトの名無しさん
2008/09/05(金) 22:14:45CPANやべええ
どっかの株価1円企業みたいだ
0647デフォルトの名無しさん
2008/09/05(金) 22:27:30Aというスレッドと
Bというスレッドがあって、
AとBを同時に走らせるみたいな。
0648デフォルトの名無しさん
2008/09/05(金) 22:30:35今時わかってる連中が CPAN に用がある時は Google なんぞ通さずに CPAN Search をひっぱたくからな。
0649デフォルトの名無しさん
2008/09/05(金) 22:37:33日本一位なのか
0650デフォルトの名無しさん
2008/09/05(金) 22:47:10>>223
0651デフォルトの名無しさん
2008/09/06(土) 00:06:09あ、CPAN自体に辿り付くのにgoogle使う……
0652デフォルトの名無しさん
2008/09/06(土) 00:30:520653デフォルトの名無しさん
2008/09/06(土) 00:33:420654デフォルトの名無しさん
2008/09/06(土) 00:36:260655デフォルトの名無しさん
2008/09/06(土) 09:30:16どういうときと、どういうときと、どういうときがあるの?
自分が知ってるのは、
「リファレンス経由で配列要素にアクセスする」
っていう場合だけど、そのほかにも、
オブジェクト指向のときもアロー演算子を使うの?
0656デフォルトの名無しさん
2008/09/06(土) 10:36:40●Perlにおいてオブジェクト指向はリファレンスを利用
なので、>655の質問は少しだけ着目点がズレてる。
0657デフォルトの名無しさん
2008/09/06(土) 10:53:06パッケージの説明として、これはわかりやすい。
0658デフォルトの名無しさん
2008/09/06(土) 10:55:41use Stone;
my $obj = Stone->new('石灰岩','100');
-----------------------
↑たとえばこれ。
これってオブジェクト指向だからアロー演算子を
使ってるという理解でいいよね?
0659デフォルトの名無しさん
2008/09/06(土) 11:01:38どこに通報すればいいの?
0660デフォルトの名無しさん
2008/09/06(土) 11:11:19die;
------------------
↑このコードだと、
Died at 6.pl line 3.
a
という出力になるのに、
-------------------
print "a\n";
die;
-------------------
↑このコードだと
a
Died at 6.pl line 3.
という出力になる。つまりひっくりかえってるんだが、
なんで?
0661デフォルトの名無しさん
2008/09/06(土) 11:18:48>658 それはそうとして>656は無視かい?
>659 ココロの110番に
>660 flush
0662デフォルトの名無しさん
2008/09/06(土) 11:19:55それを聞いてPerlも勉強してみたいと思ったので。
printf が print だったり、微妙に違うようですが。
難しいのかな。
0663デフォルトの名無しさん
2008/09/06(土) 11:22:52なにしろ俺サマでさえ、一ヶ月もあれば
基本は理解できます。
0664デフォルトの名無しさん
2008/09/06(土) 11:23:51aaa;
だとウオーニングが出るんだが、
aaa();
だとウオーニングがでない。つまり、
サブルーチンを呼び出すときは必ず
aaa();と、パーレンをつけなければいけない、というルールなの?
0665デフォルトの名無しさん
2008/09/06(土) 11:25:03C言語をマスターしているのなら、普通の頭脳の持ち主なら、1週間で完全に
習得できます。
0666デフォルトの名無しさん
2008/09/06(土) 11:25:38サブルーチンの定義が、
ソースコードの最初のほうに書いてあれば
()をつけなくてもできるということか。
だったら、サブルーチンの定義は
ソースコードの後ろでなくて、
最初のほうに書いたほうがいいんでないの?
0667デフォルトの名無しさん
2008/09/06(土) 11:29:43printfもある。
>666
お好きなように。
俺はCで言うところのプロトタイプ宣言だけしてるけど。
0668デフォルトの名無しさん
2008/09/06(土) 12:42:310669デフォルトの名無しさん
2008/09/06(土) 12:45:37「あ.txt」とか。
0670デフォルトの名無しさん
2008/09/06(土) 12:54:58http://homepage3.nifty.com/hippo2000/perltips/sound.htm#item_SND_ASYNC
0671デフォルトの名無しさん
2008/09/06(土) 12:55:45この例を見て、
Win32::Sound::Play("file.wav",[SND_ASYNC]);
と書いたが、なんか違うようだ。
0672デフォルトの名無しさん
2008/09/06(土) 13:23:23おもしろ
0673デフォルトの名無しさん
2008/09/06(土) 21:43:36なんでリストにしてんの?
0674デフォルトの名無しさん
2008/09/06(土) 21:56:11書き方間違ってる?
書き方のサンプルがないから
正直、よくわからんかった。
0675デフォルトの名無しさん
2008/09/06(土) 21:57:28system q|cls|;
sub abc{
state $a=10;
say $a;
$a--;
if ($a>=5) {
abc();
}
}
abc;
------------------------------
サブルーチンの再帰呼び出しで、
サブルーチン内部の定義部分で、
自分自身を呼び出すときには、
()パーレンの記述は必須なんだね。
これを省略しようと少し考えたけど
無理っぽい。
0676デフォルトの名無しさん
2008/09/06(土) 21:59:11古いやり方なので極力さけましょう、とか書いてあるので
&をはずして呼び出そうとするんだけど、そしたら今度は
()パーレンの記述が必須になってしまう。()パーレンのほうが
100倍メンドイと思うんだけど。
、、と思うなら、ソースコードの最初のほうに
サブルーチンの定義を書けばいいじゃん、と思ったけど
通常の関数ならそれでいいけど、再帰の場合はやっぱり無理なのね。
0677デフォルトの名無しさん
2008/09/06(土) 22:01:10どっちも変数をプライベート化して、
どっちも歴史狩る変数っていう。
ただ、stateの方は一回だけ実行されるという
違いがあるけど。
それで、すべてのmyをstateに変更しようかなと
おもうんだけど 、stateにすると何か問題ある?
0678デフォルトの名無しさん
2008/09/06(土) 22:01:58過去の歴史あるソースコードを無効にする
って意味です。
0679デフォルトの名無しさん
2008/09/06(土) 22:10:44↑これでメモ帳を開くのと、
system関数でメモ帳を開くのと、
何か違いはありますか?
見た目は同じように見えるんですが。
0680デフォルトの名無しさん
2008/09/06(土) 22:31:45一般的に、[ ] は省略可能な要素を意味する記号。
0681デフォルトの名無しさん
2008/09/06(土) 22:35:240683デフォルトの名無しさん
2008/09/06(土) 22:42:21サブルーチンの宣言と定義を切り離せばいける。面倒だけど。
use feature qw/:5.10/;
sub abc; # 宣言だけして…
sub abc { # こっちで定義
state $x = 10;
say $x--;
if ($x >= 5) {
abc;
}
}
abc;
0684デフォルトの名無しさん
2008/09/06(土) 22:52:15あー
内容が書いてなくても
宣言だけ先にしてあれば
()パーレン無しでもいけるんだー
0685デフォルトの名無しさん
2008/09/06(土) 22:53:43Cとかに慣れるとそんなに面倒でもないけどねー。
さくっとコメントでサブルーチンの説明するときとか、長くなるんで先頭に並べちゃってる。
>676
省略はPerlの美学なので、
出来る限りタイプを少なくするという思想は正しい。
だけど、わざと面倒な書き方をしておいて、
かつ、そこから外れた書き方をしたらエラーが出るようにしておく、という思想もある。
もしミスった時に、こっちの方が分かりやすいからだ。
この2つはどっちも正しい。
どっちを採用するかは自分で決めるしかない。
仕事でやっているならば、諸乳母で指定される場合があるのでそれに従おう。
0686デフォルトの名無しさん
2008/09/06(土) 22:55:540687デフォルトの名無しさん
2008/09/07(日) 04:25:30先日MacPortsで自動アップデートを実行してから下記のエラーがperl実行時に出てくるようになりました(その前までは出なかったのに…)
Use of uninitialized value in concatenation (.) or string at /opt/local/lib/perl5/5.8.8/darwin-2level/Scalar/Util.pm line 30, <> line 6.
CPANの自動アップデートも行ったのですが、同じエラーが出続けてしまいます。
プログラム事態は特に問題なく実行できているのですが、これを解決するにはどうしたら良いのでしょうか。
よろしくお願いいたします。
MacOSX 10.5.4
MacPorts 1.600
Perl 5.8.8
0688デフォルトの名無しさん
2008/09/07(日) 05:22:27no warnings;
0689デフォルトの名無しさん
2008/09/07(日) 06:24:49で、回答だが、変数を初期化しないのが理由でウオーニングが出ているのだから、
$aとかの変数をすべて、my $aとかで初期化すれば解決する。
それはUtil.pmの30行目と
本体の6行目にある。
0690デフォルトの名無しさん
2008/09/07(日) 06:25:56perl tutorial
http://jp.youtube.com/profile_videos?user=bermnz&p=v
0691デフォルトの名無しさん
2008/09/07(日) 06:39:15Scalar::Utilの30行目の警告という事は分かってるんです。消し方も。
ただ気持ち悪いじゃないですか。
CPANで最新のソースを調べても特に修正は無いし、
実際のソースを見てもどうしてそうなるのか分からないんですよね。
http://search.cpan.org/src/GBARR/Scalar-List-Utils-1.19/lib/Scalar/Util.pm
--------------------------------------------
if (grep { /^(dualvar|set_prototype)$/ } @_ ) {
require Carp;
Carp::croak("$1 is only avaliable with the XS version"); #エラーにある30行目はここ
}
--------------------------------------------
$1ってのに値が入ってないとかそういう意味だと思うのですが、
値が入らないのであれば、この29~30行目は実行されないはずではないのでしょうか…。
初心者なりに色々考えてるのですが全く分からない…。
0692デフォルトの名無しさん
2008/09/07(日) 06:45:48no worningsはやっぱりダメですよね!
どの本見ても書いてあったので、必ず入れてます。
本体の6行目というのは、Util.pmを直接の
本体という意味でしょうか?(どいつが本体かわかん無い…)
Util.pmを直接自分の書いたスクリプトは実行していなく、
自分の書いたスクリプトの6行目は
use Encode;
なので、なんも問題が無いと思うのですが。
すみません、ご教授下さい。
0693デフォルトの名無しさん
2008/09/07(日) 07:05:38Perlもサイドエフェクトってあるの?
0694デフォルトの名無しさん
2008/09/07(日) 08:10:35grepを一旦、@aで受けるとかどう?
if (my @a = grep { /^(dualvar|set_prototype)$/ } @_ ) {
require Carp;
Carp::croak("@a is only avaliable with the XS version"); #エラーにある30行目はここ
}
0695デフォルトの名無しさん
2008/09/07(日) 11:51:40こんな感じの事が起きている。
$_ = q/abcd/;
{
m/^(abcd)$/;
print "a:$1\n";
}
print "b:$1\n";
しかし、grep BLOCK LIST の代わりに grep EXPR,LIST を使っても同じ結果になるので要注意。
理由は未確認。(内部的に BLOCK になっているのだろう)
このエラーが放置されている理由は、おそらくこのエラーが報告されていないから。
なにしろ、これはXSバージョンが使えない場合かつユーザーが(デフォルトで輸出されない)特定の
処理を要求した場合のみに発生するエラーだから。
今までエラーが出なかかったのは、単にXSバージョンが使われていたからだろう。
で >>687 にあるようにプログラムの動作に問題が無いならば、dualvarまたは(/かつ)set_prototype
を必要無いのに要求していたという事なので、単にこれらを要求する事を止めればよい。
0696デフォルトの名無しさん
2008/09/07(日) 12:33:07$数字はダイナミックスコープだからブロックを抜けたら元に戻るというのは
その通りだが、今回の例は抜けてないので違うんじゃない?
0697デフォルトの名無しさん
2008/09/07(日) 15:38:34Usageを出したいのですが、どうすればいいでしょうか?
0698デフォルトの名無しさん
2008/09/07(日) 15:40:28後はprintでusage出せばおk
0699デフォルトの名無しさん
2008/09/07(日) 15:43:47C:xxx.pl -aaa=1を間違って
C:xxx.pl -aa=1と入力なのですが・・・・
中で変数を宣言してなくて、外でしているのですが、変数名を見ることができるのですか?
0700デフォルトの名無しさん
2008/09/07(日) 15:46:070701デフォルトの名無しさん
2008/09/07(日) 15:51:00C:xxx.pl -aa=1入力した場合エラーをだしたい
-aaa=1 が正しく
-aa=1 が間違い
プラグラム中には
our $aaa は宣言してますが
our $aa は宣言していません
なのですが
説明下手ですいません
0702デフォルトの名無しさん
2008/09/07(日) 16:13:28引数で -aaa って言ったら、普通は a が3つって解釈すると思う。
んで、素直に if 文じゃダメ?
0703デフォルトの名無しさん
2008/09/07(日) 16:14:21XSや、エラーを出す原因となっているスクリプト部分や、
dualvar、set_prototypeなど何だか分からない言葉が
大量に出てきたので、勉強して出直してきますw
自分の書いたプログラム以外の物を編集するのは
気が引けるので、環境を整える方向で考えてみます。
ありがとうございました。
0704デフォルトの名無しさん
2008/09/07(日) 16:17:05必要な変数に値が与えられたかどうかを判別するので対処出来るのでは?
与えられた引数全てを見れるような方法が欲しいってこと?
0705デフォルトの名無しさん
2008/09/07(日) 16:54:19> コマンドラインで引数を与える時に、間違った変数名で入力した場合に
> Usageを出したいのですが、どうすればいいでしょうか?
?を使えばいい。
0706デフォルトの名無しさん
2008/09/07(日) 17:12:25ハッシュキーに紐付けることで少し楽になる。
あとは Hash::Util を使ってロックした上でエラートラップするなり、
keys %hash リストの各要素と順次 eq するなり。
0707デフォルトの名無しさん
2008/09/07(日) 17:23:51なんでそんな入り組んだややこしい遠回りで手の込んだことをしたいの?
ふつうにGetopt::Longで処理するのではだめなのか?
0708デフォルトの名無しさん
2008/09/07(日) 17:27:42# 宣言時にとりあえず空文字をいれておく
our $aaa = "";
our $bbb = "";
for (@ARGV) {
defined ${$1} and ${$1} = $2 if( /-(.+)=(.+)/ )
}
0709デフォルトの名無しさん
2008/09/07(日) 19:18:10今回は grep BLOCK LIST なので、マッチ演算が行われた(目に見える)ブロックから抜けている罠。
695をブロックで書いたのは $数字 のスコープから抜けている点がブロックと同じだからなんだけど、
組み込みのgrep関数のソース(pp.c 内の pp_grepstart)を見たら中でENTER を行っていた(==grepの
中にブロックに入る/抜ける時と類似の処理が含まれていた)ので、ブロックでも構わなくね?
そうでなくても組み込み関数のオーバーライドがありうるので、関数はブロック(サブルーチン)のよう
に扱う方が無難だと思うのだが、Scalar::Util の作者はそう考えなかったみたい。
0710デフォルトの名無しさん
2008/09/07(日) 19:50:06grepのあとがブロックになってるのを見落としていた。スマン。
で、これどうみてもScalar::Utilのバグじゃね?
0711デフォルトの名無しさん
2008/09/07(日) 20:17:01この人て有名なの?
0712デフォルトの名無しさん
2008/09/07(日) 20:31:43現在コミュニティーサイトGaccoで有志を募集しています。
詳しい概要等は
→http://www36.atwiki.jp/vipvipschool/
こちらをご覧下さい。
・プログラミングができる方
(現在技術陣は6名です)
・ウェブデザイン・画像編集能力がある方
(現在デザイン陣は2名です)
・宣伝能力のある方
(人員募集やサイト完成後の宣伝等。動画編集ができると○。)
を募集しています。
気軽にIRCに参加、またはsuteあっと2ch.bona.jpまでメールを下さい。
スレッド:ttp://ex14.vip2ch.com/test/read.cgi/news4gep/1219068297/l50
0713デフォルトの名無しさん
2008/09/08(月) 05:24:01練習として、google検索をしてその件数を出すというプログラムを書いているのですが、
出力と手動で検索した時の件数に誤差が生じます。
ソース挙げておきますので、良ければご指摘下さい。
よろしくお願いします。
use Web::Scraper;
use URI;
use utf8;
use Encode;
my $scraper = scraper { process '/html/body/div[2]/p/b[2]', 'kensuu' => 'TEXT';};
my $uri = new URI('http://www.google.com/search');
$uri->query_form( hl => 'ja' , q => 'コミュニケーション');
my $res = $scraper->scrape($uri);
print $res->{kensuu};
出力
33,500,000
手動で検索
33,900,000
となってしまいます…。
0714デフォルトの名無しさん
2008/09/08(月) 05:38:29system q|cls|;
for (1..120) {
state $a="a";
print $a," ";
$a++;
}
say"";
#----------------------
↑なにこれ
楽しい
from
http://jp.youtube.com/watch?v=v7riTEp9v2s&feature=related
0715デフォルトの名無しさん
2008/09/08(月) 05:46:48system q|cls|;
open FH,">","1.txt";
for (1..120000) {
state $a="a";
print FH $a," ";
$a++;
}
say "done.Please check out 1.txt";
#---------------------------------
たのしー
これって出力結果を要素ひとつづつ
配列に入れたりもできるのかな?
0716デフォルトの名無しさん
2008/09/08(月) 05:58:40system q|cls|;
open FH,">","4.txt";
for (1..12000000) {
state $a="a";
print FH $a," ";
$a++;
}
#--------------------------
↑これで1千2百万回まわしたら、
70MBのテキストファイルになって、
エディタで開いたら表示がぶっ壊れた
http://kazato.run.buttobi.net/cgi-bin/material/src/vm002_0268.png
0717デフォルトの名無しさん
2008/09/08(月) 06:12:48$uri->query_form( hl => 'ja' , q => 'SEX');
この検索ワードだったら
手動とスクリプトで、
ぴったり件数一致しました。
0718デフォルトの名無しさん
2008/09/08(月) 06:15:49日本語のキーワードだとずれる、
アルファベットのみだと、ぴったり一致する、
という特性があるみたいですね。
0719デフォルトの名無しさん
2008/09/08(月) 06:18:330720デフォルトの名無しさん
2008/09/08(月) 06:31:19英語のみのキーワードだとずれないでしょ?
0721デフォルトの名無しさん
2008/09/08(月) 06:50:050722デフォルトの名無しさん
2008/09/08(月) 06:55:560723デフォルトの名無しさん
2008/09/08(月) 11:27:12シェルも勉強したいと思ってきたので。。。
0724デフォルトの名無しさん
2008/09/08(月) 12:12:12これを
&Init($q);
みたいにしてその中で
$q->param('filename')
みたいな処理を行いたくて
CGIオブジェクトをいろんな引数に渡したいのですが
どうやってやればいいのですか
0725デフォルトの名無しさん
2008/09/08(月) 12:17:370726デフォルトの名無しさん
2008/09/08(月) 12:22:19どこら辺の単語で出てきますか
0727デフォルトの名無しさん
2008/09/08(月) 12:23:18記述的には、C程似て無いとは思う
でも、言語なんて 表示、条件判定、ループ、サブルーチン作成。
こんだけ分かれば、大抵のものは組めるけどね
0728デフォルトの名無しさん
2008/09/08(月) 12:26:58どちらもソフトウェアという点が共通してるよ。
0729デフォルトの名無しさん
2008/09/08(月) 12:48:54なんとなく某所のテンプレから借りて来た。
0730デフォルトの名無しさん
2008/09/08(月) 12:50:39多分だけど、googleに限らず大手の検索エンジンなんか数百台〜数千(数万?)台のサーバーで
構築されてるんだろうから、毎回必ず同じ結果が返って来るとは限らないんじゃない?
(Yahooなんかは、同一環境でもCookeiが違えば、件数どころか上位十件が全然違うこととかもあるw)
たしかgoogleは、ブラウザの HTTP_ACCEPT_LANGUAGE あたりで使用言語の優先順位を判定して
各言語のサーバへリダイレクトしてるとか聞いたことある。
(例えば、一般的な日本語ブラウザでgoogle.comにアクセスしても、co.jpの方へ飛ばされる。とか)
>>726
「perl サブルーチン 引数」とか「perl shift」とか。
0731デフォルトの名無しさん
2008/09/08(月) 14:19:56その辺のことよく知りません。
0732デフォルトの名無しさん
2008/09/08(月) 14:35:03ないから諦めてください
0733713
2008/09/08(月) 15:19:52皆様ありがとうございます。
>>730
そうなんですか…。
じゃあ日本語を検索した際、プログラムで手動と同じ検索結果を出そうとするのは事実上困難って事ですよね…。
わかりました。
ありがとうございます。
0734デフォルトの名無しさん
2008/09/08(月) 15:25:320735デフォルトの名無しさん
2008/09/08(月) 16:19:48どこらへんも何も、普通に引数を渡してるだけだぜ?
0736デフォルトの名無しさん
2008/09/08(月) 21:59:04削除するってできるの?
popの要素番号指定版。
$number = pop @array[5];
みたいな。@arrayの要素番号5が抜き出されて
$numberに入り、なおかつ
@array[5]は消え去る。
0737デフォルトの名無しさん
2008/09/08(月) 22:25:25つsplice
0738デフォルトの名無しさん
2008/09/08(月) 22:34:02つ>>736
0739デフォルトの名無しさん
2008/09/08(月) 23:44:230740デフォルトの名無しさん
2008/09/09(火) 00:01:37頭から1行ずつ読めばそのうち任意の行に到達するよ。
0741デフォルトの名無しさん
2008/09/09(火) 00:05:42CGIでもないようだし、
にも関わらずWEBのデータ-を取ってきて
なんか遊べるようだが、これって
なんで名前なの?
どういう本にのってるの?
0742デフォルトの名無しさん
2008/09/09(火) 00:18:37perl スクレイピング
でぐぐれ
0743デフォルトの名無しさん
2008/09/09(火) 00:27:08初めて知ったわ。
俺の書いてきたPerlスクリプトは9割がスクレイピングだー
0744デフォルトの名無しさん
2008/09/09(火) 00:30:41俺の初めて書いたperlはそれの第一章とかだった気がするw
0745デフォルトの名無しさん
2008/09/09(火) 02:00:44my @a=(1..10);
map {$_ = $_ *2} @a;
print "@a\n";
#--------------------1
#--------------------------
#-----------------------2
my @a=(1..10);
map {$_ = $_ *2} (@a);
print "@a\n";
#------------------2
↑これ、1も2もどっちも
実行できるんだけど、mapの配列の()パーレンは
必要ないってこと?
0746デフォルトの名無しさん
2008/09/09(火) 02:36:15map {print $_,"\n" } 0..10;
これだとちゃんと1〜10が表示されるのに
●2
map {print $_,\n } 0..10;
これだとなぜかアドレスが出てしまう。
なんでだろう?
0747デフォルトの名無しさん
2008/09/09(火) 03:09:08my @b=grep {$_=~'a'} @a;
print "@b\n";
#---------------------------------------
grepのときに、スマートマッチ〜〜使えないのか。
my @a=qw(aaaaa bbb ccc ddd eee fff abf haty juy ade il erat tyu dfg gu );
my @b=grep {$_~~'a'} @a;
print "@b\n";
#--------------------------------
↑これだとエラーが出る。=〜にしないとだめらしい。
0748デフォルトの名無しさん
2008/09/09(火) 03:53:32$hash{name}='john';
$hash{age}='25';
$hash{city}='london';
print "@{[%hash]}\n";
↑なんでこれでハッシュの中味が出力されるの?
0749デフォルトの名無しさん
2008/09/09(火) 04:03:47「自分は○○されると想ったのに」と付け加えるとアドバイスしやすい。
0750デフォルトの名無しさん
2008/09/09(火) 04:24:40これの記法がまったく意味がわからん
かな?
0752デフォルトの名無しさん
2008/09/09(火) 07:38:24実行結果すら合わねえじゃねえか
0753デフォルトの名無しさん
2008/09/09(火) 07:39:16これの最後のやつがちょっと意味わかんないかも。
mapの lcの組み合わせたやつ。
0754デフォルトの名無しさん
2008/09/09(火) 07:44:28$words = join ' ', map {ucfirst lc} split / /,$words;
print "$words\n";
↑これね。
0755デフォルトの名無しさん
2008/09/09(火) 07:47:381. スペースで split => 単語毎になる。
2. lc $_ で全部小文字($_ の表記省略)
3. 2. の結果を ucfirst で一文字目だけ大文字化。
4. スペースでくっつける
0756デフォルトの名無しさん
2008/09/09(火) 08:00:27my $index = 2 ; # 抜きたいindex
my @dat = qw( 1 2 3 4 5 6 ) ;
push @dat, ( splice @dat, $index )[1.. $#dat - $index] ;
print @dat ;
定番
0757デフォルトの名無しさん
2008/09/09(火) 08:03:04%hash をリストと見做して [] にて無名配列へのリファレンスに突っ込む。
@{} にてそのリファレンスをデリファレンス。
0758デフォルトの名無しさん
2008/09/09(火) 08:04:38$numberが…
二行に分ければ済む事だけど
0759デフォルトの名無しさん
2008/09/09(火) 08:27:14これって何やってるの?
0760デフォルトの名無しさん
2008/09/09(火) 11:56:00了解しました。
一気にその行に行く方法はないんですね。
0761デフォルトの名無しさん
2008/09/09(火) 12:24:25配列にでも突っ込めば?
0762デフォルトの名無しさん
2008/09/09(火) 12:42:21あらかじめ各行の先頭位置を別に記録してあればseek一発だが、そういう
準備がされてなければ頭から読むしかないね。なにもないときは頭から
改行を頼りに行数を数えるしか何行目か知る方法はないのです。
0763デフォルトの名無しさん
2008/09/09(火) 14:04:15行数が多い場合、コストが高そうな気がして。。。
>>762
やはりそうですか。
どもです。
0764デフォルトの名無しさん
2008/09/09(火) 16:22:23どうすれば一番簡単ですか
0765デフォルトの名無しさん
2008/09/09(火) 16:48:420766デフォルトの名無しさん
2008/09/09(火) 22:38:26ディレクトリを空にする、という処理をしたいのですが
if(-e "$path/"){
削除処理
}
みたいなものだと、ディレクトリそのものが認識されて
ファイルを認識してくれません
どうすりゃええんでしょうか
0767デフォルトの名無しさん
2008/09/09(火) 22:40:18ディレクトリを読んでファイルがあるかどうか調べるといいよ。
0768デフォルトの名無しさん
2008/09/09(火) 22:57:02遠回りだと思ってたけどそれが一番なのかな
0769デフォルトの名無しさん
2008/09/09(火) 23:02:59中作業だろ。
0770デフォルトの名無しさん
2008/09/09(火) 23:05:570771デフォルトの名無しさん
2008/09/09(火) 23:17:50if(<$path/*.*>){
削除処理
}
0772デフォルトの名無しさん
2008/09/09(火) 23:45:39グロブの使い方がわからないであります
>>770
多分はいってないです
>>771
ためしてみます
0773デフォルトの名無しさん
2008/09/10(水) 01:45:460774デフォルトの名無しさん
2008/09/10(水) 02:24:36substrだけで抜き出して会話するってできる?
0775デフォルトの名無しさん
2008/09/10(水) 05:35:12どういうこと?
0776デフォルトの名無しさん
2008/09/10(水) 05:42:43等の100万語ぐらいの膨大な量の乱数表みたいな
語句のリストをあらかじめ作っておいて、
「hello」って表示したい場合は
「5」番目と「7番目」と「12番目」を抜き出して
表示する」みたいな。
たまたま、うまくつながってるところを見つけると、
ポイントアップです。
0777デフォルトの名無しさん
2008/09/10(水) 05:43:460778デフォルトの名無しさん
2008/09/10(水) 06:04:15use feature qw( :5.10 );
my $t;
$t=localtime;
say $t;
-------------------------------
(2)
use feature qw( :5.10 );
my $t;
$t=localtime(time);
say $t;
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
(1)と(2)で、実行結果が変わらないのだが、なんで?
どっちでもいいの?
じゃあ、timeの立場は?
わはは!
描いて、全然ちゃうわ!と気が付いて投稿窓を閉じたつもりが送信されてたョ(呆)
0780デフォルトの名無しさん
2008/09/10(水) 07:03:36ものすごく脳力というか
エネルギー使うんじゃね?
漏れは30分か1時間もやると
ぐったりして集中力がなくなる。
読んでも頭に入らなくなる。
0781デフォルトの名無しさん
2008/09/10(水) 07:16:34捨てハンでもトリッブでもいいから、なんか分かりやすい名前つけたらどうだ?
たぶん皆喜ぶぞ。NG指定するのに。
0782デフォルトの名無しさん
2008/09/10(水) 09:10:05スレ住民の51%以上が賛成してたら
そうするよ。
0783デフォルトの名無しさん
2008/09/10(水) 10:28:580784デフォルトの名無しさん
2008/09/10(水) 14:27:200785デフォルトの名無しさん
2008/09/10(水) 16:28:3950.4%が賛成だとアウトなのかが気になる
0786デフォルトの名無しさん
2008/09/10(水) 19:11:24Perlの動作環境込みで持ち運ぶのは無理でしょうか?
テキストファイルの処理がメインでLinuxとActivePerlでの動作は確認しています。
しかしActivePerlがインストールされているWindowsマシンは少なく、
客先ではActivePerlのインストールも許されていない ので困っています。
0787デフォルトの名無しさん
2008/09/10(水) 19:19:030788デフォルトの名無しさん
2008/09/10(水) 21:04:57「Perlで書いたツールを持ち歩きたいけれど、フルセットの実行環境は要らない」
PAR - Perl Archive Toolkit があなたのわがままを叶えてくれます。
0789デフォルトの名無しさん
2008/09/10(水) 21:13:340791sage
2008/09/10(水) 22:17:56windowsでperlを書いてるんですが
$dirName = "C:\\Documents and Settings\\Administrator\\My Documents\\新しいフォルダ";
@res = `"dir \"$dirName\""`;
を実行すると
ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。
となってしまします。どこがいけないでしょうか?
0792デフォルトの名無しさん
2008/09/10(水) 22:29:18(2) ディレクトリ名にスペースがあるとエラーになる??
0793デフォルトの名無しさん
2008/09/10(水) 22:30:21(3)Perlでは日本語のフォルダ名を扱えない??
0794sage
2008/09/10(水) 22:42:52説明が不足して申し訳ないです。。。
日本語のフォルダが大丈夫なのは確認済みです。
ディレクトリ名にスペースがあると上手くいかないんです。。。
>>4をやっても駄目でした。
0795デフォルトの名無しさん
2008/09/10(水) 22:58:31$dirName = '"C:\Documents and Settings\Administrator\My Documents\巨乳女子校生・公園で立ちバック"';
@res = `dir $dirName`;
スペースが入るときは "こう 囲んで 渡す" ってとこまでたどり着いてるのに惜しいな。
'これ' と "これ" の使い分けに慣れるといいよ。
0796デフォルトの名無しさん
2008/09/10(水) 23:24:02答えようとするのは良いけれど、
確信がないなら検証してからにしてくれ。
質問者が混乱するから。
0797sage
2008/09/10(水) 23:56:44>>795
教えてもらった方法で上手く出来ました。
ありがとうございます。
追加で申し訳ないのですが
>>791のコードでディレクトリ名を引数で渡したい場合はどうしたらよいでしょう?
やりたい事のイメージ:
%>perl test.pl "C:\Documents and Settings\Administrator\My Documents\貧乳女子高生・あばらで洗濯"
test.plの内容
$dirName = $ARGV[0];
@res = `dir "$dirName"`;
ちょっとまだ''と""の違いを正確に理解できていない様です。。。
'' => 文字をそのまま代入
"" => 変数を展開して代入
という認識なのですが他にも違いがあるのでしょうか?
0798デフォルトの名無しさん
2008/09/11(木) 00:43:41'"ああああああ いいいいい うううう"'
これでいけるんじゃない?知らんけどw
0799デフォルトの名無しさん
2008/09/11(木) 00:50:29$dirName = '"' . $ARGV[0] . '"'; # 消えても懲りずにくっつける
@res = `dir $dirName`;
たぶん期待の動作になると思うんですよね。
>perl test.pl "C:\Documents and Settings\Administrator\My Documents\着衣のふくらみ・貧乳編"
perldoc perlintro
perldoc perlop
辺りに書かれてますが '' と "" では \ がエスケープ文字なのか、文字 \ なのかというのも変わってきます。
0800デフォルトの名無しさん
2008/09/11(木) 01:20:030801デフォルトの名無しさん
2008/09/11(木) 02:38:32うーん、マニュアル読んだら分かることだしねえ。
どうしても誰かに聞きたきゃ、くだすれ方面だろうね。
くだすれでも引かれるレベルの質問ではあるけど。
0802デフォルトの名無しさん
2008/09/11(木) 04:43:450803デフォルトの名無しさん
2008/09/11(木) 04:45:32ReMake?
0804デフォルトの名無しさん
2008/09/11(木) 04:49:050805デフォルトの名無しさん
2008/09/11(木) 05:01:590806デフォルトの名無しさん
2008/09/11(木) 05:47:590807デフォルトの名無しさん
2008/09/11(木) 05:48:26ただ、どうしても日本語の検索キーワードが
文字化けしてしまう。いろいろ調べると、Google
Search History の RSS は UserAgent がブラウザ
ぽくないと charaset=utf-8 じゃなく、charset=ISO
-8859-1 を返してきやがる。
0808デフォルトの名無しさん
2008/09/11(木) 05:49:14↑この場合、Aから実行なのか、Cから実行なのか、って意味?
0809デフォルトの名無しさん
2008/09/11(木) 05:50:11関数は知らない。
0810デフォルトの名無しさん
2008/09/11(木) 05:55:33そうですそうです
>>809
thx、ちなみにそのサブルーチンでは(ryってのはどっかに規定されてる物なの?
0811デフォルトの名無しさん
2008/09/11(木) 05:56:25こんな良いページがあるじゃんかよー
ちゃんと教えてくれよー
http://www.tkrb.jp/modules/summary1/index.php?id=7
0812デフォルトの名無しさん
2008/09/11(木) 06:38:21http://choco.lv3.net/test/read.cgi/program/1210740268/
0813デフォルトの名無しさん
2008/09/11(木) 11:04:17特に決まっていない
0814デフォルトの名無しさん
2008/09/11(木) 17:14:04POE::Component::Server::HTTP
POE::Component::Server::HTTPServer
POE::Component::Server::SimpleHTTP
があるようなのですが、どれを使うのが良いんでしょうか?
0815デフォルトの名無しさん
2008/09/11(木) 20:55:360816デフォルトの名無しさん
2008/09/12(金) 00:26:49my $fh = $q->upload('filename'); # ファイルハンドル兼ファイル名
my $temp_path = $q->tmpFileName($fh); # アップロードされた #ファイルのフルパス
fileparse_set_fstype('MSDOS'); # WinIE用パス文字設定
my $filename = basename($fh); # アップロードされたファイルの # ファイル名
my $upload_path = "$upload_dir/$filename"; # 保存先フルパス
move ($temp_path, $upload_path) # File::Copy の moveメソッドで
or die $!; # 移動
close($fh); # おまじない
これを改造して、バカでかいファイルでもタイムアウトしないようにしたいのですが
ttp://www.bioinfo.jp/tips.html#background1
これをどこに組み込めばできますか
0817デフォルトの名無しさん
2008/09/12(金) 01:24:44入れられるようになりました。感動した。
・XAMPP(1.6.2)
・Perl Add-on(5.8.8-2.2.4)
・Active Perl(5.8.8.817)
って書いてあるけど、もしかして、
PPMのほかに、CPANから直接入れる方法もあるの?
Activeperl。
0818デフォルトの名無しさん
2008/09/12(金) 05:43:51アメリカで10$のとこ、一個見つけたけど。
0819デフォルトの名無しさん
2008/09/12(金) 06:47:03forループの条件部って
こうやって書いてもよかったんだ!
0820デフォルトの名無しさん
2008/09/12(金) 07:26:470821デフォルトの名無しさん
2008/09/12(金) 07:42:01おまえがな
0822デフォルトの名無しさん
2008/09/12(金) 08:05:08{
do
{
do
{
do
{
print "hello\n";
}
}
}
}
やっぱ男だったら
doのネストだよな!
0823デフォルトの名無しさん
2008/09/12(金) 08:21:08{
{
{
print "hello\n";
}
}
}
}
よく考えたら、doがなくても
動くじゃないか!
0824デフォルトの名無しさん
2008/09/12(金) 08:26:20print $_*2,"\n";
}
↑これだと動くんだけど、
for $_(1..10){
print "$_*2"."\n";
}
↑これだと動かない。
なんで???
0825デフォルトの名無しさん
2008/09/12(金) 08:57:51・朝4時に何見てんだ俺……(でもそんな俺かっこいい)
・泣けた、疲れてるのかな……(でも疲れてる俺かっこいい)
・徹夜の上酔ってる俺が来ましたよ(こんな頑張ってる俺かっこいい)
・小3で全クリできたわ(さすが俺)
・89年生まれだけど知ってますw(俺って博識だから)
・ここからの展開が神(俺見たことあるし見所も知ってるんだぜ)
・これを笑えない香具師はセンスない(俺は笑えてるからセンスある)
・これ○○だと思うの俺だけ?(ちょっとずれてる俺かっこいいor「俺もそう思うよ」待ち)
・この時○○は××でした(そんなトリビアも知ってる俺すげー、敬語だし)
・は?表出ろやカス(返事なかった、俺の勝ち)
・まだこのシリーズやってたんだ、しょうがねえから見てやるか(俺が見てやってるんだからありがたく思えよ)
・神曲ktkr ←これより○○の方が神だろ(マイナー曲を挙げる俺って通だなー)
・shita cyan 禁断の海馬に手を加えて 驕れる無能な創造神にでも 成った心算なの(わざわざ歌詞職人やる俺えらいなー)
0826デフォルトの名無しさん
2008/09/12(金) 10:17:16my $a=shift;
my $b=shift;
my $c =$a+$b;
print "$c\n";
}
abc(3,4);
↑これでエラーでないとか、
プロトライプの意味ないじゃん!
0827デフォルトの名無しさん
2008/09/12(金) 12:27:32ヒントだけ。「板違い」
0828デフォルトの名無しさん
2008/09/12(金) 12:29:410829デフォルトの名無しさん
2008/09/12(金) 12:31:31push(@array,$item);
これを[splice]を使って書くと、
splice(@array,@array,0,$item);
このようになるようですが、開始位置に書いてある[@array]は、「配列の要素数」と考えて
よろしいのでしょうか。それとも要素数じゃないのでしょうか。
「要素数」は添え字の値より1多い数なので、それを開始位置に書いてあるのがよくわからなくて
混乱しました。
0830デフォルトの名無しさん
2008/09/12(金) 12:40:12> 「要素数」は添え字の値より1多い数なので、それを開始位置に書いてあるのがよくわからなくて
> 混乱しました。
添え字の値より1多い数が開始位置じゃなかったら、なにが開始位置になるんだょ。
0831デフォルトの名無しさん
2008/09/12(金) 12:44:17わかりにくいから例を書いておく。
@array=(a b c)のとき(要素数は3)、
splice(@array, 0, 0, "x")=(x,a,b,c)
splice(@array, 1, 0, "x")=(a,x,b,c)
splice(@array, 2, 0, "x")=(a,b,x,c)
splice(@array, 3, 0, "x")=(a,b,c,x)
0832デフォルトの名無しさん
2008/09/12(金) 13:06:08splice の二番目の引数は「読み飛ばす要素数」ではなく「開始対象となる要素の添え字」なので、
開始位置の @array は「要素数」ではなくて「最大の添え字よりも1つだけ大きい数」の意味。
昔は splice(@array,$#array+1,0,$item) で載っていた。
今は splice(@array,@array,0,$item) だけど、これは scalar @array がたまたま $#array+1 と等しい
場合に限ってうまく動く。
もちろん、何も特別なことをしなければ scalar @array と $#array+1 は等しいので、通常はうまく動く。
0833デフォルトの名無しさん
2008/09/12(金) 13:09:16perldoc perlsub
0834デフォルトの名無しさん
2008/09/12(金) 13:09:23理解できました。ありがとうございました。
>>831さんの例で言うと、添え字が[ 3 ]の要素が無いので、
なぜ開始位置の添え字の数値として指定できるのか…と混乱したのです。
0836デフォルトの名無しさん
2008/09/12(金) 14:08:22バックスラッシュを入れないと
0837デフォルトの名無しさん
2008/09/12(金) 14:21:41[]をつけるな。他の意味になる。
0838デフォルトの名無しさん
2008/09/12(金) 15:55:20http://perldoc.jp/docs/modules/threads-0.99/threads/shared.pod
に cond_signal の説明で、
「もしどのスレッドもその変数をcond_waitしていない場合、
シグナルは破棄される。常にシグナルの前にロックされるので、
他のスレッドがcond_wait()に入る前にシグナルを発するのを
回避することが(注意深くやれば)出来る。」
とあるのですが、この回避するための注意深いやり方ってどうすればいいのでしょう?
0839デフォルトの名無しさん
2008/09/13(土) 00:50:38せっかく5.10を使って勉強しても
5.10が動く無料のレンタルサーバーが無い。
だから最初から5.8で勉強しないとだめ。
でもactivePerlのバージョンはたぶん
5.10でいいとおもう。5.10の機能を
使わなければいいだけだから。
0840デフォルトの名無しさん
2008/09/13(土) 04:44:39書いてあるのは、「ハード レファレンス」のことでいいの?
0841デフォルトの名無しさん
2008/09/13(土) 06:25:47CentOS5を導入したところなのですが、cpanコマンドを最初に立ち上げたとき、
画面にBundle::CPANを導入しろとか書いてありまして、その通りに
cpan> install Bundle::CPAN
cpan> reload cpan
とやったところ、
Missing right curly or square bracket at (eval 319) line 3441, at end of line
syntax error at (eval 319) line 3441, at EOF
といったエラーが出てしまいます。OSの再インストールもしてみたのですが再現します。
この状態で他のモジュールのインストールも出来ているようなのですが、何だか不安です。
このエラーの原因についてご存知のかたはいらっしゃいますでしょうか?
CPAN.pmのバージョンは1.9205です。
0842デフォルトの名無しさん
2008/09/13(土) 09:50:11こんなやり方知らなかったんだけど。
Perl Tutorial 76 - Formats: Low-Level Formatting - Formline
http://jp.youtube.com/watch?v=voHCfl4lYmE&NR=1
0843デフォルトの名無しさん
2008/09/13(土) 10:40:170844デフォルトの名無しさん
2008/09/13(土) 11:23:18なんでAnonymous Arrayは無名アレイなの?
0845デフォルトの名無しさん
2008/09/13(土) 11:51:34anonymous の意味には日本語で言うところの
匿名(本当は名前を持っているけど隠してる)ってのと
無名(そもそも名前がついてない)の両方がある。
それを考えないで匿名しか使ってないやつも多いけどね
0846デフォルトの名無しさん
2008/09/13(土) 13:50:56Linux板で質問したほうがいいと思われ
0847デフォルトの名無しさん
2008/09/13(土) 23:38:52書き込みがないのは
許さんぞ!!
0848デフォルトの名無しさん
2008/09/14(日) 08:44:055.10が動くレンタルサーバーが無い以上、
使うのをあきらめざるをえません。
本当に断腸の思いです。
0849デフォルトの名無しさん
2008/09/14(日) 08:51:435.8とかにすれば?
0850デフォルトの名無しさん
2008/09/14(日) 08:54:42my $r=['a','b','c',];
print "@$r\n";
オレ様の初の無名アレイのサンプル。
$rに格納された、無名アレイのアドレスを、
@を先頭につけることによって、
「デ・リファレンス」することによって
配列の中味を表示している、
これであってますよね。
0851デフォルトの名無しさん
2008/09/14(日) 08:55:29まじで?
なんで?
0852デフォルトの名無しさん
2008/09/14(日) 09:34:52print "$$r[1]\n";
無名配列の
デリファレンスの
配列番号指定の
表示法。
['a','b','c',]
という無名配列の先頭アドレスを
$rに格納し、$$rとアタマに$をつけることによって
デリファレンンスして配列の中味を取り出して、
[1]と添え字をつけることで指定の番号の要素を
取り出して表示している。
0853デフォルトの名無しさん
2008/09/14(日) 09:53:41無名アレイは[]スクエアブラケットで囲むのか?
なんで、有名ハッシュは()パーレンで囲むのに、
無名ハッシュは{}カーリーブラケットで囲むのか?
0854デフォルトの名無しさん
2008/09/14(日) 10:06:16$r={
'a' => 'b',
};
print "$$r{'c'}\n";
無名ハッシュの例。
{'a' => 'b',};
の無名ハッシュのアドレスを$rに格納。
$$rと先頭に$をつけて{’c’}とキーを指定して
バリューのbを出力している。
0855デフォルトの名無しさん
2008/09/14(日) 10:07:285.9.5
のほうが5.10よりも進んでいるの?
(安定性はきにしないとして)
0856デフォルトの名無しさん
2008/09/14(日) 10:09:26認識が根本的に間違ってる。
() <= 無名アレイもしくは無名ハッシュ(状況によっては単なるリスト)
[] <= 無名アレイへの「リファレンス」
{} <= 無名ハッシュへの「リファレンス」
@arr = ( 1,2,3 ) ; する事によって初めて有名アレイ(んな言いかたするっけ?)と言える。
あくまでも@arrが有名アレイであって、(1,2,3) は単なるリストだ。
[ 1,2,3 ] は、() を省略してる。 [ (1,2,3 ) ]
{ 1,2,3,4 } は、略
文章の流れから、[] を無名アレイと言ったりする人もいるだけの事
0857デフォルトの名無しさん
2008/09/14(日) 10:16:04事故レス
>() <= 無名アレイもしくは無名ハッシュ(状況によっては単なるリスト)
状況によっては => 厳密には
0858デフォルトの名無しさん
2008/09/14(日) 10:34:59デタラメ書くと親切にしてもらえるんだな
0859デフォルトの名無しさん
2008/09/14(日) 14:02:51もしかして、ハッシュって、フラグの管理に便利に
使えるんじゃないのか...?
ダンジョンに入った→1
とか。
0860デフォルトの名無しさん
2008/09/14(日) 14:13:24ハードコーディングでもするつもりなのか?
0861デフォルトの名無しさん
2008/09/14(日) 16:02:21なんでもいいからモジュールのコード嫁
0862デフォルトの名無しさん
2008/09/14(日) 21:42:11ttp://www.bioinfo.jp/tips.html#background1
ここに描いてるやりかたを使いたいのですが
よくわかりません
何か簡単な例でおしえてくだしあ
0863デフォルトの名無しさん
2008/09/14(日) 22:00:32コメント入れてもたったの10行やん。
これ以上簡単な例?
0864デフォルトの名無しさん
2008/09/14(日) 22:04:33my $html = '<html><head><title>foo & bar</title></head><body></body></html>';
my $tree = HTML::TreeBuilder::XPath->new;
$tree->parse($html)->eof;
print $tree->findvalue('//title');
このコードを実行すると、
foo & bar
と表示されるんだけど、
foo & bar
って結果を返すようにできない?
0865デフォルトの名無しさん
2008/09/14(日) 22:10:090866デフォルトの名無しさん
2008/09/14(日) 22:13:20$ua = LWP::UserAgent->new;
$req = HTTP::Request->new(GET => 'http://ja.wikipedia.org/wiki/Perl');
$req->push_header('User-Agent' => 'Mozilla/4.0');
$ua->request($req);
を実行すると、パケットキャプチャの結果
GET /wiki/Perl HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: TE, close
Host: ja.wikipedia.org
User-Agent: Mozilla/4.0
という設定していない"TE"を含むリクエストを投げつけています。
この"TE"を含まないリクエストを投げたいときにはどのようにするのが簡単で自然でしょうか?
(パケットキャプチャをする都合上、圧縮はして欲しくないです)
ソースを読んだところ、LWP::Protocol::httpにてSendTE => 1という値を設定していて、
巡り巡ってNET::HTTP::Methodsでその値を参照して有効(1)ならば
push(@h2, "TE: deflate,gzip;q=0.3");
push(@connection, "TE");
をするという処理をしていました。
ttp://questionbox.jp.msn.com/qa1758666.html?StatusCheck=ON
には
>LWP::Protocol::httpモジュールのソースファイル40行目付近を改造(SendTE => 1を0)し
とありますが、それだけはしたくないです・・・
0867864
2008/09/14(日) 22:51:46use HTML::TreeBuilder::XPath;
my $html = '<html><head><title>foo & bar</title></head><body></body></html>';
my $tree = HTML::TreeBuilder::XPath->new;
$tree->parse($html)->eof;
print $tree->findvalue('//title');
このコードを実行すると、
foo & bar
と表示されるんだけど、
foo & bar
って結果を返すようにできない?
0868デフォルトの名無しさん
2008/09/14(日) 23:11:160869デフォルトの名無しさん
2008/09/14(日) 23:14:250870デフォルトの名無しさん
2008/09/15(月) 00:18:360871デフォルトの名無しさん
2008/09/15(月) 00:31:530872デフォルトの名無しさん
2008/09/15(月) 00:40:390873デフォルトの名無しさん
2008/09/15(月) 01:01:13push(@LWP::Protocol::http::EXTRA_SOCK_OPTS, ぽにょ => ぽにょ);
でオーバーライドできるって、宇宙からのテレパシーが言ってた
0874デフォルトの名無しさん
2008/09/15(月) 02:17:39わーvarsってこんな風に使えるんですね!
瑠璃子ちゃん、電波、届いたよ!ありがとう!
0875デフォルトの名無しさん
2008/09/15(月) 07:58:28どう見てもバッドエンドフラグじゃねーか
0876デフォルトの名無しさん
2008/09/15(月) 09:27:05sub _extra_sock_opts # to be overridden by subclass
{
return @EXTRA_SOCK_OPTS;
}
my $sock = $self->socket_class->new(PeerAddr => $host,
PeerPort => $port,
Proto => 'tcp',
Timeout => $timeout,
KeepAlive => !!$conn_cache,
SendTE => 1,
★$self->_extra_sock_opts($host, $port),
);
という処理になっていますが、例えば
push(@LWP::Protocol::http::EXTRA_SOCK_OPTS, SendTE => 0);
としていた場合、★のところってどのように解釈されるのでしょうか?
特に$host, $portの解釈がよくわかりませんorz
0877デフォルトの名無しさん
2008/09/15(月) 10:07:17# LWP::Protocol::http のソースは見ずに。
== 例 ==
use Data::Dumper ;
my @arr= qw( hoge foo ) ;
my %hash = ( hoge => 1, @arr, ) ;
print Dumper \%hash ;
== 例終り ==
これと同じで、@EXTRA_SOCK_OPTS ; で設定した key, value(SendTE => 0)
にて、デフォの挙動の key, value(SendTE => 1)が上書きされる。
>★$self->_extra_sock_opts($host, $port),
がどう解釈もくそも、まんま LWP::Protocol::http の内部サブルーチン呼んでんじゃん。
# $host,$port がどうにも謎なんだが
0878876
2008/09/15(月) 10:16:13サブルーチン呼んでいるというのは分るのですが、自分の知識だと
># $host,$port がどうにも謎なんだが
が解決しないのです
0879デフォルトの名無しさん
2008/09/15(月) 10:20:270880デフォルトの名無しさん
2008/09/15(月) 10:44:16「どうにも謎」と書いたが、それは「作者の意図が分らん」って意味であって
perl の挙動としては $host,$port 完全無視である事は明白。
0881デフォルトの名無しさん
2008/09/15(月) 11:56:08wc -l ファイル名
でファイルの行数を取得したくて
$count = system("wc -l ファイル名");
みたいにしてるのですが、0が入ります
コマンドで取得した行数を変数にぶち込むのはどういうやり方でやるんですか
0882デフォルトの名無しさん
2008/09/15(月) 12:19:450883デフォルトの名無しさん
2008/09/15(月) 12:24:11# to be overridden by subclass
これが作者の意図だろ。
サブクラスで使うかもしれない情報を渡しているだけ。
0884デフォルトの名無しさん
2008/09/15(月) 12:25:01systemのマニュアルエントリに書いてあるお
0885デフォルトの名無しさん
2008/09/16(火) 00:28:39`wc -l ファイル名`
0886デフォルトの名無しさん
2008/09/16(火) 03:58:16print "@$ref_array[1]\n"; ←1
print "$ref_array->[1]\n"; ←2
1と2で、どっち使うの?
0887デフォルトの名無しさん
2008/09/16(火) 05:19:04print "$main::a";
これで何も表示されないのですが、
この時のmy $aは何パッケージに
なっているのでしょうか?
0888デフォルトの名無しさん
2008/09/16(火) 06:13:33新しい処理 → ハード レファレンス
古いやり方 → &をつけたサブルーチン呼び出し
新しいやり方 → ()をつけたサブルーチン呼び出し
古いやり方 → パッケージ
新しいやり方 → モジュール
、、、まだある?
0889デフォルトの名無しさん
2008/09/16(火) 06:44:35$r="v";
print "$r\n";
print "$$r\n";
これが シンボリック レファレンス か。
キモイな。
0890デフォルトの名無しさん
2008/09/16(火) 07:09:33デリファレンスの時と
オブジェクト指向のときと、
二つの場合で使われるの?
0891デフォルトの名無しさん
2008/09/16(火) 08:13:10出力するスクリプトを書きたいのですが、どうしたらいいでしょうか?
my $in = 19; # 指定されたモニタのインチ数
my $rt = 2.54; # 一インチは2.54センチメートル
my $a; # これを求めたい
my $x = 4; # 横の比率
my $y = 3; # 縦の比率
# 三平方の定理
# $in**2 = (($x*$a)**2)+(($y*$a)**2)
# $in = ((($x*$a)**2)+(($y*$a)**2))**(1/2)
0892デフォルトの名無しさん
2008/09/16(火) 08:15:49$in から $a の値を導き出すことが出来たら、
縦横サイズをセンチメートルで出力するのは簡単なのですが、
式の整理が上手くいかず躓いています。
もし宜しければご教授お願いいたします。
0893デフォルトの名無しさん
2008/09/16(火) 08:22:57自己解決することが出来ました。
4:3モニタの場合は、インチ数である対角線の比率が5、
16:9モニタの場合は、18.36になるようです。
0894デフォルトの名無しさん
2008/09/16(火) 08:54:26MySQLとかで解決したほうが速いよね?
0895デフォルトの名無しさん
2008/09/16(火) 09:43:18このページわかりやすいね。
0896デフォルトの名無しさん
2008/09/16(火) 10:09:05正規表現をかんたんにするためのモジュール?
0897デフォルトの名無しさん
2008/09/16(火) 10:29:14http://jp.youtube.com/watch?v=oAW7E3pmBCM
これちょっとごちゃごちゃしてて
よくわからんなー
0898デフォルトの名無しさん
2008/09/16(火) 11:14:560899デフォルトの名無しさん
2008/09/16(火) 12:24:20myで宣言された変数はレキシカル変数といい、パッケージ変数とは別物。
レキシカル変数は、パッケージに属するのではなく、レキシカルスコープに属する。
0900デフォルトの名無しさん
2008/09/16(火) 15:25:09でもメインパッケージの中に属しているわけだから
$main::aで表示できるはず、、、、
ってなにか変なこと言ってます?
0901デフォルトの名無しさん
2008/09/16(火) 15:25:58本質的に同じ?
0902デフォルトの名無しさん
2008/09/16(火) 15:35:530903デフォルトの名無しさん
2008/09/16(火) 15:48:35$main::aとすると、mainに属するパッケージ変数を参照することになります。
my $a は、レキシカル変数であり、パッケージ変数ではないです。
パッケージ変数を作りたければ、
our $a;
と、宣言しましょう。
0904デフォルトの名無しさん
2008/09/16(火) 15:59:20デタラメ書くと親切にしてもらえるんだな
0905デフォルトの名無しさん
2008/09/16(火) 18:09:550906デフォルトの名無しさん
2008/09/16(火) 18:26:56sort でハマっても解決される仕組みになってるはず。
いろいろループしてますよね。>>541>>562-563
0907デフォルトの名無しさん
2008/09/16(火) 18:50:200908デフォルトの名無しさん
2008/09/16(火) 20:17:56結構な面白いサイトになりそうなのが惜しまれる
0909デフォルトの名無しさん
2008/09/16(火) 20:48:04リア厨かと思ってたけど、昼間も書き込んでるんだな。
0910デフォルトの名無しさん
2008/09/16(火) 22:31:080911デフォルトの名無しさん
2008/09/17(水) 00:13:58{
my $a = "a";
}
0912デフォルトの名無しさん
2008/09/17(水) 02:42:47開設したらいいか調べてよ
アクセス解析ないとやだけど。
できればアパッチの生ログに近い感じで
見れるとこ。勝手に統計的にまとめて表示
するのはだめ。
それとアホがきたときにはきちんと
アク禁できること。
これが条件。perlお得意のムーバブルタイプで
対応できる?
0913デフォルトの名無しさん
2008/09/17(水) 07:42:44クロージャーの説明読んだが、さっぱりわけが
わからんな。
もしかして、最新言語だったら、
オブジェクト指向でやるようなことなのか?
0914デフォルトの名無しさん
2008/09/17(水) 08:30:44何時何分何秒、地球が何回まわったときなのか答えろよ!
って反論する小学生を思い出した
0915デフォルトの名無しさん
2008/09/17(水) 11:04:08型グロブと、グロブって違うものだよね?
(2)
グロブって普通に使うものなの?
0916デフォルトの名無しさん
2008/09/17(水) 11:45:52getkeyが予約語かどうか、知りたいんだが。
0917デフォルトの名無しさん
2008/09/17(水) 11:55:11予約語じゃないってさ。
なんか、perlのマニュアルに載ってるらしい。
mapの使用例として。
0918デフォルトの名無しさん
2008/09/17(水) 13:19:23メッセージを出す、ってできないの?
0919デフォルトの名無しさん
2008/09/17(水) 13:35:25$a=1;
こうした時に、$aには何が
入っているのか?
1がはいっているのか、あるいは
1のアドレスが入っているのか。
あるいは、1のアドレスを指し示した物が
入っているのか。
0920デフォルトの名無しさん
2008/09/17(水) 13:41:16あと$a,$bはsortが使うので以下略
0921デフォルトの名無しさん
2008/09/17(水) 13:43:50だってレファレンスの解説サイト見たら
「違う」って書いてあったもん
0922デフォルトの名無しさん
2008/09/17(水) 13:46:420923デフォルトの名無しさん
2008/09/17(水) 13:50:37↑なにこれ。
入門書にのってないんだけど。
0924デフォルトの名無しさん
2008/09/17(水) 14:13:09リファレンスなの?
0925デフォルトの名無しさん
2008/09/17(水) 15:58:220926デフォルトの名無しさん
2008/09/17(水) 16:57:33>sed の信仰者のために y が tr の同義語として提供されています。
だそうです。
0927デフォルトの名無しさん
2008/09/18(木) 01:33:27「おまえ、この質問どういうレベルか理解してるの?」
っていうような馬鹿質問してくる奴が多くて困る。
新「ここが表示されません。」
俺(しばらく悩む)
「で、ここは print で表示してみたんでしょうか?」
新「へ?いいえ?」
俺(さっき試せって言ったばっかだろ。やってない事をできないとか
自社サイドの先輩とかにならともかく発注側に普通に質問するって
どうなの?自分が大恥&大迷惑って事理解してますか?)
やってみて、もらえます?」
こんな事を更にその先輩経由とかでも質問してくる(いや、既に言ったでしょ、って内容)。
なんか、こいつらそろいもそろっておかしいのかな?とか思ったり。。。
0928デフォルトの名無しさん
2008/09/18(木) 01:39:330929デフォルトの名無しさん
2008/09/18(木) 01:55:190930デフォルトの名無しさん
2008/09/18(木) 02:33:47「おまえ、このスレどういう趣旨か理解してるの?」
っていうような馬鹿書き込みしてくる奴が多くて困る。
(以下略)
なんか、こいつらそろいもそろっておかしいのかな?とか思ったり。。。
0931デフォルトの名無しさん
2008/09/18(木) 02:34:290932デフォルトの名無しさん
2008/09/18(木) 03:18:110933デフォルトの名無しさん
2008/09/18(木) 04:10:29http://jp.youtube.com/watch?v=F-5sm7sFNHs
なにこれ?
一般的なの?
0934デフォルトの名無しさん
2008/09/18(木) 04:38:15http://jp.youtube.com/watch?v=-oaxrlD8ctY
これってどういう仕組みなの?
0935デフォルトの名無しさん
2008/09/18(木) 05:53:19>それとアホがきたときにはきちんと
>アク禁できること。
お前がアクセス出来ねーじゃんw
0936デフォルトの名無しさん
2008/09/18(木) 07:51:17↑これってどういう意味?
0937デフォルトの名無しさん
2008/09/18(木) 08:18:24my $a=new CGI;
open 'F','>','1.html';
print F $a->header,
$a->start_html,
$a->end_html;
↑このコードを実行して、
1.htmlを見たら、
Content-Type: text/html; charset=ISO-8859-1
<!DOCTYPE htmlPUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
</body>
</html>
↑というHTMLコードが自動生成されてた。
こんな便利な機能があったのか、、、!!
いままで手打ちでプチプチ打ってたのは、いったい
なんだったの?
本当に衝撃。
0938デフォルトの名無しさん
2008/09/18(木) 08:26:07my $a=new CGI; ←●
open 'F','>','1.html';
print F $a->header,
$a->start_html,
$a->end_html;
my $a=new CGI; ←●
これって、newで、オブジェクト指向で、
インスタンスを生成してるの?
0939デフォルトの名無しさん
2008/09/18(木) 09:49:16そうです。
ただし$a(と$b)はsortが使うので(ry
0940デフォルトの名無しさん
2008/09/18(木) 10:11:44use unko;
my $aa=new unko;
ひょっとして、これでオブジェクト指向で
unkoってインスタンスを作ってるの?
0941デフォルトの名無しさん
2008/09/18(木) 10:19:050942デフォルトの名無しさん
2008/09/18(木) 10:22:59君のunkoモジュールがnewでインスタンスを作成するように作られていれば。
ただしプラグマじゃないモジュール名は大文字ではじめることという決まりがあるので
全て小文字のunkoという名前はよろしくない。(perlmod(1)参照)
0943デフォルトの名無しさん
2008/09/18(木) 13:22:060944デフォルトの名無しさん
2008/09/18(木) 13:26:170945デフォルトの名無しさん
2008/09/18(木) 13:29:34perlのオブジェクト指向を理解してるの?
kentってperl4で知識が止まってるから
当然話についてこれないよね?
0946デフォルトの名無しさん
2008/09/18(木) 13:32:270947デフォルトの名無しさん
2008/09/18(木) 15:59:000948デフォルトの名無しさん
2008/09/18(木) 16:14:090949デフォルトの名無しさん
2008/09/18(木) 16:17:550950デフォルトの名無しさん
2008/09/18(木) 16:20:57http://www.oreilly.co.jp/books/images/picture_large4-87311-305-9.jpeg
ttp://news23.jeez.jp/img/imgnews53054.jpg
http://www.nasubigfarm.com/
http://www.pej-hed.jp/washo/195.html
0951デフォルトの名無しさん
2008/09/18(木) 18:44:200952デフォルトの名無しさん
2008/09/18(木) 19:00:50perlboot日本語訳
ttp://fleur.hio.jp/perldoc/perl/5.8.8/pod/perlboot.ja.html
perltoot日本語訳
ttp://perldoc.jp/docs/perl/5.10.0/perltoot.pod
perltooc日本語訳
ttp://perldoc.jp/docs/perl/5.10.0/perltooc.pod
上の三つを読んで良く理解出来ないようなら基本はアルパカ本を読めばいい。
>>950で紹介されている
ttp://www.pej-hed.jp/washo/195.html
も良いが、初学者には
ttp://www.supee.jp/sop/
がお薦め。
0953デフォルトの名無しさん
2008/09/18(木) 19:37:26アルパカ本はいらんよ
perlbootの内容はアルパカ本の「11章 オブジェクト入門」「12章 データのあるオブジェクト」とまるっきり同じ文章だぞ?
0954デフォルトの名無しさん
2008/09/18(木) 22:25:470955デフォルトの名無しさん
2008/09/18(木) 22:45:240956デフォルトの名無しさん
2008/09/18(木) 23:41:26Tkはnewじゃないのを使ってるし、DBIはconnect
0957デフォルトの名無しさん
2008/09/18(木) 23:48:09のproxyサーバを作って、実際にproxy経由でWebページを見たいのですが、
perl http-proxy.pl
と実行してもBegin selectとしか出てこなくて、進みません。
というかこのページを読みつくしてもこのプログラムが何を意味してるのかがどうしてもわかりません。
誰か教えていただきたいです。
よろしくお願いします。
0958デフォルトの名無しさん
2008/09/19(金) 00:08:48謝礼の金額も書いておくと手間がかからないよ。
0959デフォルトの名無しさん
2008/09/19(金) 04:44:40Perlのnewはただのメソッドだからなぁ。
しかしC++に挫折した俺はPerlでOO学んだんだぜ……。
0960デフォルトの名無しさん
2008/09/19(金) 05:18:32OOPでつくられた3つのモジュール(AとBとC)とそれらを利用するメインプログラムがあるとします。
Aはアカウントデータをインスタンス生成して、データ取得などを行なうクラス(モジュール)です。
Bは記事データをインスタンス生成して、データ取得などを行なうクラス(モジュール)です。
CはHTMLを出力するモジュールです。インスタンスは特に作らず、メインプログラムから引数
をもらってそれにそったHTMLを生成するクラス(モジュール)です。
メインプログラム(仮にwww.ほげほげ.com/aaa,cgi)とします。
このCGIに、ログインページからポストデータでアカウントと記事番号でアクセスすると、
HTMLが生成され表示されるという寸法です。
質問はここからです。
メインプログラムの中で
アカウント番号を引数としてAを起動させ、記事番号を引数としてBを起動させ、
AとBの空間でそれぞれアカウントとデータがインスタンスとして生成されます。
次にCのモジュールでそれらのデータを埋め込んでHTMLを生成する時に、
Cのモジュールが直接AとBの生成したデータにアクセスすることは可能でしょうか?
私が試した範囲では無理でした。
やはり、メインプログラムでA Bのデータにアクセサでメインプログラムの空間で
データ取得した後に、その取得したデータを引数でCモジュールに読み込ませて
HTMLを生成する、
という手法しかないでしょうか? ただしこの場合、データ数が多いとメインプログラムで
アクセサを起動させてデータ取得する部分がそれだけ多くなり煩雑になります。
ということで、できればCモジュールからA Bのつくったインスタンスを直接
取得できればいいと思うのですが、その場合はCの必要なところでアクセサを作れば
いいのでしょうか?
0961デフォルトの名無しさん
2008/09/19(金) 07:05:35つCatalyst
0962デフォルトの名無しさん
2008/09/19(金) 07:52:38ニュアンスが捕みにくい。「直接」ってーのがレキシカルな配列とか叩きたいって意味なのか
オブジェクトの中身を叩きたいって意味なのか…
やり方は色々あるが、以下じゃいかんのか?(全角空白でインデント)
{ package A ;
sub new { bless {A => [1,2,3]}, shift ; }
sub get { $_[0]->{A}} }
{ package B ;
sub new { bless {B => [4,5,6]}, shift ; }
sub get { $_[0]->{B}} }
# 方法1
{ package C ;
sub new { bless { B => pop, A => pop }, shift ;}
sub show { print @{$_[0]->{A}->get}, @{$_[0]->{B}->get}, qq{\n} ;} }
my $objC = C->new( A->new, B->new ) ;
$objC->show ;
# 方法2
{ package C2 ;
# use A ; use B ;
sub new { bless { B => B->new, A => A->new }, shift ;}
sub show { print @{$_[0]->{A}->get}, @{$_[0]->{B}->get}, qq{\n} ;} }
my $objC2 = C2->new ;
$objC2->show ;
0963デフォルトの名無しさん
2008/09/19(金) 07:55:59これってperlではどうなの?
0964デフォルトの名無しさん
2008/09/19(金) 08:24:19Catalystのスレ、8日に一度しか
書き込みがないんだけど、だいじょうぶ??
0965デフォルトの名無しさん
2008/09/19(金) 09:12:220966デフォルトの名無しさん
2008/09/19(金) 09:33:56spawn使ってるのも多いな
0968デフォルトの名無しさん
2008/09/19(金) 14:03:22PerlのOOPは、言語に組み込まれたものじゃなくて、自分でそれっぽく構築するだけだから、
アクセスに関する規定でJavaやRubyと比べられるものじゃない。
0969デフォルトの名無しさん
2008/09/19(金) 14:53:370970デフォルトの名無しさん
2008/09/19(金) 19:02:040971デフォルトの名無しさん
2008/09/19(金) 19:07:08作るのは相当センスいる。
なにかやりたいことがあってCPAN検索してモジュール見つけてきて、
オブジェクトクラスでかかれてあったら、そのサブクラス作って、好みのインターフェース
になるようにメソッド再定義して、それを使う、という感じ。
再定義して使うだけなら大してセンスいらない。
0972デフォルトの名無しさん
2008/09/19(金) 19:13:46相当ひどかった覚えがある。
改訂版では直ってる可能性はあるが、旧版はとにかくオススメできない。
0973デフォルトの名無しさん
2008/09/19(金) 19:27:540974デフォルトの名無しさん
2008/09/19(金) 19:38:01http://www.amazon.com/dp/0596102062
0975デフォルトの名無しさん
2008/09/19(金) 20:12:190976デフォルトの名無しさん
2008/09/19(金) 21:29:02Learning Perl Objects, References & Modules
0977デフォルトの名無しさん
2008/09/19(金) 22:35:24そうか?>センス
他のOO言語と比べてもそれほど大きな違いは感じられんのだが。
0978デフォルトの名無しさん
2008/09/19(金) 22:38:03map{$d{$_}=1}@words;print ~~(keys %d)."\n";
[PQ/W][Perl Quiz 2001-02-03 Wakaba.0038] [まぐまぐ!]
http://archive.mag2.com/0000015670/20010203152000000.html
0979デフォルトの名無しさん
2008/09/19(金) 22:42:480980デフォルトの名無しさん
2008/09/19(金) 22:56:420981デフォルトの名無しさん
2008/09/19(金) 23:01:42とかのほうが素直だけどな
0982デフォルトの名無しさん
2008/09/20(土) 02:53:18/::::::;ゝ-──- 、._/::::::ヽ
ヾ-"´ \::::::| r ‐、r ‐、r ‐、r ‐、
/ _ Perl _ ヾノ .|~ ̄ ̄ ̄ ̄ ̄| | | ! ,,, i ̄
/ /・::::ヽ /・::::ヽ ヽ .| 潰す リスト | ,,,. i ,,,,. ! ,,. ト _,ノ
| 丶:::::ノ ▼ ヽ:::::ノ | | ───── ヽ_,人_,.人__ノ ──
l 、、、 (_人_) 、、、 l ..| ・C←(潰した)
丶 ヽノ / .|─────────────
丶、 / ....| ・ ASP←(叩き潰した)
.. |─────────────
| ・ PHP ←(特に念入りに潰した)
|─────────────
| ・ Ruby ←(みんなの期待に答えて潰した)
|─────────────
| ・ Tomcat ←(最後の最後に叩き潰した)
|─────────────
0983デフォルトの名無しさん
2008/09/20(土) 07:49:17分かりやすい解説ありがとうございました。とりあえず、Cのモジュール内で
A BのインスタンスをCのインスタンス化すればオッケイってことのようですね。
なるほどと思いました。試してみたいと思います。
レキシカルな配列〜についてですけど、単純にA Bで生成したデータをCのコードの
中で使いたいってことです。 ただ、カプセル化とかのことを頭にいれると、
まだOOPに不慣れなので、そういうことをしてもいいものだろうか?って思う
部分もあります。一方で、とにかく動けばいいじゃない?という気持ちもあります。
また、ADT(抽象データ型, Abstract Data Types)という手法を考えたときに、
例にあげたCがa bの生成するデータ内容を知っていて、メインプログラムを
介さずにアクセスするってのは、はたして正しい方法なのか?ということも
明白にイメージできていません。
いただいたアドバイスをもろに、さらに勉強してみようと思います。
ありがとうございました。
0984デフォルトの名無しさん
2008/09/20(土) 08:27:31bless とか出てきたころにうんざりして Perl やめた。
awk や sed はまだ使ってる。
なんであんな中途半端な OOP 対応にしたんだろう。
とはいえ互換性をある程度保ちつつ Perl に OOP を入れる
いい方法って俺には思いつかないんだけど。
0985デフォルトの名無しさん
2008/09/20(土) 08:50:230986デフォルトの名無しさん
2008/09/20(土) 08:52:35↓
以下スレ違いの論争
0987デフォルトの名無しさん
2008/09/20(土) 11:27:45現在パー速クリエイタースレで人員募集中です。
現行スレ&テンプレ
http://ex14.vip2ch.com/test/read.cgi/news4gep/1221872491/
・html、CSS、SNSを作れる言語が書ける人(一番大変な部分です。数人必要かも。)
・aiやpsdをいじれる人
・宣伝活動に長けている人
・ちょっとしたスキルがある方(動画作成等)
他にもどしどし募集中。
勉強中の方からプロの方まで、気軽にお願いします。
0988デフォルトの名無しさん
2008/09/20(土) 14:42:180989デフォルトの名無しさん
2008/09/20(土) 15:28:08一番カチカチな言語:Haskell
0990デフォルトの名無しさん
2008/09/20(土) 20:19:28と解釈するなら、LISP系は正反対だろ。
カチカチな言語=VBあたりでないの?
0991デフォルトの名無しさん
2008/09/20(土) 23:26:18文字化けしまくり。
使えん。
0992デフォルトの名無しさん
2008/09/21(日) 00:13:03間違っています。
以上。
はい、次。
0993デフォルトの名無しさん
2008/09/21(日) 00:29:51# GMT
$ENV{'TZ'} = "GMT";
print localtime(time) . "\n";
# JST
$ENV{'TZ'} = "JST-9";
print localtime(time) . "\n";
Linuxだと意図したとおりに動くんですが、
ActivePerl on Windowsだとなぜか動かないらしい。
何か特別な方法とかあるんでしょうか?
#fork()以外の大抵の物はWinでもLinuxでも同じように動くと思っていました・・・
0994デフォルトの名無しさん
2008/09/21(日) 00:55:50広く知られているけれど移植性のあるやり方ではないため、むしろ
「time() に先立って $ENV{TZ} をいじくる」のほうが特別だと思う今日この頃。
単に time() の利用している実装が、環境変数 TZ を見ているか否かという違い。
当然ながら Windows には通常、そんな気の利いた実装はない。
GMT が欲しけりゃ gmtime() を使い、タイムゾーン補正が必要なら time() に対し秒数で加減すれ。
0995デフォルトの名無しさん
2008/09/21(日) 01:34:00例えば日本の環境なら "+0900" を得たい場合。
0996デフォルトの名無しさん
2008/09/21(日) 01:58:410997デフォルトの名無しさん
2008/09/21(日) 02:44:49use Time::Local;
my $t = time;
my $tz = ( timegm( localtime $t ) - timegm( gmtime $t ) ) / 36;
printf "%+04d", $tz;
# GNU っぽい環境限定で:
print "`date +%z`";
# 正解: 質問を書く前に Time::Timezone を試すのが最高にスマートかつクール。
0998デフォルトの名無しさん
2008/09/21(日) 03:18:45↑これって、スコープ解決演算子(scope operator)っていうの?
0999デフォルトの名無しさん
2008/09/21(日) 04:58:44こんな感じでわかりやすく説明してるページある?
1000デフォルトの名無しさん
2008/09/21(日) 06:38:5610011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。