Perlについての質問箱 40箱目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2009/05/30(土) 06:14:34"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
● 2009/05/30 現在の最新版: 5.10.0
▼ 前スレ
Perlについての質問箱 39箱目
http://pc12.2ch.net/test/read.cgi/tech/1234181856/
リンク集は >>2-3
Perl 日本語処理の基礎の基礎 >>4
過去スレは >>5-6 あたり
0002デフォルトの名無しさん
2009/05/30(土) 06:14:51Perl プログラミング講座: 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デフォルトの名無しさん
2009/05/30(土) 06:14:58CPAN.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メモ]
ttp://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デフォルトの名無しさん
2009/05/30(土) 06:15:03# このレスは、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デフォルトの名無しさん
2009/05/30(土) 06:15:111 http://pc.2ch.net/tech/kako/1017/10177/1017736187.html
2 http://pc3.2ch.net/tech/kako/1033/10336/1033688230.html
3 http://pc2.2ch.net/tech/kako/1041/10412/1041205885.html
4 http://pc2.2ch.net/tech/kako/1048/10485/1048519394.html
5 http://pc5.2ch.net/tech/kako/1053/10530/1053053082.html
6 http://pc5.2ch.net/tech/kako/1060/10606/1060689008.html
7 http://pc2.2ch.net/test/read.cgi/tech/1068051036/ (事故により消滅)
8 http://pc2.2ch.net/test/read.cgi/tech/1074151549/ (事故により消滅)
9 http://pc5.2ch.net/test/read.cgi/tech/1079114157/
10 http://pc5.2ch.net/test/read.cgi/tech/1085564875/
11 http://pc5.2ch.net/test/read.cgi/tech/1090889189/
12 http://pc5.2ch.net/test/read.cgi/tech/1094579428/
13 http://pc5.2ch.net/test/read.cgi/tech/1097851764/
14 http://pc5.2ch.net/test/read.cgi/tech/1101649274/
15 http://pc5.2ch.net/test/read.cgi/tech/1105953092/
16 http://pc8.2ch.net/test/read.cgi/tech/1111034732/
17 http://pc8.2ch.net/test/read.cgi/tech/1117870308/
18 http://pc8.2ch.net/test/read.cgi/tech/1121804136/
19 http://pc8.2ch.net/test/read.cgi/tech/1126977805/
20 http://pc8.2ch.net/test/read.cgi/tech/1131286411/
0006デフォルトの名無しさん
2009/05/30(土) 06:15:1421 http://pc8.2ch.net/test/read.cgi/tech/1134327348/
22 http://pc8.2ch.net/test/read.cgi/tech/1138519327/
23 http://pc8.2ch.net/test/read.cgi/tech/1141742901/
24 http://pc8.2ch.net/test/read.cgi/tech/1146022352/
25 http://pc8.2ch.net/test/read.cgi/tech/1149259409/
26 http://pc8.2ch.net/test/read.cgi/tech/1153412251/
27 http://pc8.2ch.net/test/read.cgi/tech/1157874614/
28 http://pc8.2ch.net/test/read.cgi/tech/1162273941/
29 http://pc11.2ch.net/test/read.cgi/tech/1166708139/
30 http://pc11.2ch.net/test/read.cgi/tech/1173880452/
31 http://pc11.2ch.net/test/read.cgi/tech/1181500187/
32 http://pc11.2ch.net/test/read.cgi/tech/1186995713/
33 http://pc11.2ch.net/test/read.cgi/tech/1192463997/
34 http://pc11.2ch.net/test/read.cgi/tech/1199977642/
35 http://pc11.2ch.net/test/read.cgi/tech/1208674881/
36 http://pc11.2ch.net/test/read.cgi/tech/1215569470/
37 http://pc11.2ch.net/test/read.cgi/tech/1218449440/
38 http://pc11.2ch.net/test/read.cgi/tech/1221967332/
39 http://pc12.2ch.net/test/read.cgi/tech/1234181856/
0007デフォルトの名無しさん
2009/05/30(土) 09:10:020008デフォルトの名無しさん
2009/05/30(土) 12:58:120009デフォルトの名無しさん
2009/05/30(土) 13:19:55「セオリー」の使い方が間違ってるような木が駿河・・・
use strict を宣言すると、変数を my で宣言することを強制される。
スクリプト言語系にありがちな
変数名の単純なタイプミスを事前に防げるわけだ。
必須ではないが、長いスクリプトを書くなら use strict と my は使用した方がいい。
短いスクリプトならどうでもいいいよ。
0010デフォルトの名無しさん
2009/05/30(土) 13:21:21Option Explicit
みたいなもん
0011デフォルトの名無しさん
2009/05/30(土) 14:12:120012デフォルトの名無しさん
2009/05/31(日) 04:50:06なんか $::abc って書いてしまう。
明確な理由はあるけど長くなるから書かない。
0013デフォルトの名無しさん
2009/05/31(日) 06:08:260014デフォルトの名無しさん
2009/06/02(火) 04:25:480015デフォルトの名無しさん
2009/06/02(火) 11:11:02-----------------------
my @a = split(',', ',,,');
print scalar(@a), "\n"; # 「0」と表示される。
-----------------------
my @b = split(',', 'a,,,a');
print scalar(@b), "\n"; # 「4」と表示される。
-----------------------
最初に書いた split(',', ',,,')でなぜ空の配列が返ってくるのが
よく理解できません。
split(',', 'a,,,a'); で4つ返ってくるなら、',,,'なら3つか4つ
返って来そうな感じがするのですが、教えて頂けないでしょうか。
0016デフォルトの名無しさん
2009/06/02(火) 11:36:55split [pattern [, expr [, limit] ] ]
でlimitを省略すると、最後の空フィールドは返されない。
split(',', ',,,')は全て空フィールドだから空のリストが返ってくるのだと思われる。
0017デフォルトの名無しさん
2009/06/02(火) 14:46:37そっちの方が便利なのは判ってるけど、
普通は区切り文字が決まってるから、
わざわざ遅くなりそうな正規表現で書くのに抵抗がある
0018デフォルトの名無しさん
2009/06/02(火) 18:33:33さっきインストールファイルをダウンロードしたんですけど
実行しようとすると
"インストールパッケージを開くことができませんでした。アプリケーションベンダに問い合わせ、
このパッケージが有効なWindowsインストーラパッケージであることを確認してください。"
が出て先に進めないんですけどどうしたらいいんですか?教えてください。
0019デフォルトの名無しさん
2009/06/02(火) 18:51:30MD5チェックサムとかあれば試してみれば?
まあブラウザのキャッシュ消してからDLし直せばいけると思うけど。
0020デフォルトの名無しさん
2009/06/02(火) 20:18:14perlのバージョンを落としたら 5-10-0 1004 (?)から 5-10-0 1005
に変えて実行したらできました
なんだったんでしょうか・・・
0021sage
2009/06/02(火) 20:19:041005から1004でした
1レス無駄にしてすいませんでした。
0022デフォルトの名無しさん
2009/06/02(火) 22:33:52ダウンロードの時にファイルが壊れたんだろ。
0023デフォルトの名無しさん
2009/06/03(水) 00:26:58ありがとう御座います。
最後の空フィールドは返されないって仕様なんですね。
0024デフォルトの名無しさん
2009/06/03(水) 02:19:01print $member[0],"\n";
print $member[4],"\n";
これを実行したんですが、
結果が
あ
お
と表示されるはずが
あ い う え お
と表示されるんですがなぜなんですか?
0025デフォルトの名無しさん
2009/06/03(水) 02:22:420026デフォルトの名無しさん
2009/06/03(水) 02:34:56ちょうどそれが漢字の取り扱いで困ってた時だから、
インデントの全角スペースがエラーだと言われてるのに暫く気付かなかったことがある
0027デフォルトの名無しさん
2009/06/03(水) 06:54:49「あ」と「い」の間が全角スペースになってるだろ。
>>26
俺は全角スペースは下線が出るようにエディタの設定をいじってる。
0とOも0に斜線がつくなどマ向けのフォントを使用。
0028デフォルトの名無しさん
2009/06/03(水) 11:46:45うざいから止めたな
.plの時だけ設定しとこう
0029デフォルトの名無しさん
2009/06/03(水) 12:21:21use threads;
for(1..10){
push @A,threads->new(sub{get"http://www.2ch.net/"})
}
for(@A){$_->join}
このコードのどこが間違ってるんでしょう?
0030デフォルトの名無しさん
2009/06/03(水) 12:51:220031デフォルトの名無しさん
2009/06/03(水) 12:55:420032デフォルトの名無しさん
2009/06/03(水) 12:59:26おい・・・
0033デフォルトの名無しさん
2009/06/03(水) 13:08:47003429
2009/06/03(水) 13:12:5529のコードをcygwinの上で実行するとsegmentation faultが発生します。
cygwinの上でのPerlではスレッドは使っちゃいけないということにして
おいた方がいいのかな?めんどくさいけどC#ならこんなことはないので
0035デフォルトの名無しさん
2009/06/03(水) 23:10:22女か?
0036デフォルトの名無しさん
2009/06/04(木) 00:07:32threads::joinable なものだけ join() するように書き換えた記憶がある。
不具合の詳細は忘れた。
ていうか、use Socket で直接投げるよりはウェイトかかるけど、撃つな。
0037デフォルトの名無しさん
2009/06/04(木) 03:45:10最後はセミコロン無しでもいいよ、って仕様になんか意味があるんだろうか。
ワンライナー?
0038デフォルトの名無しさん
2009/06/04(木) 04:01:53pascalとかは、余分なセミコロンはエラーになる
0039デフォルトの名無しさん
2009/06/04(木) 05:43:500040デフォルトの名無しさん
2009/06/04(木) 06:14:32Larry Wallは、
for(1..10){print}
みたいな書き方ができるから、とも言ってた。
0041デフォルトの名無しさん
2009/06/04(木) 06:16:46$a = {
'abc' => cde,
'fgh' => ijk,
'lmn' => opq,
};
の余計なカンマは(Larry Wallが個人的に)推奨している。
004237
2009/06/04(木) 07:26:48>41
それが出来ない文法って、軽くイラッ☆と来るよな。
昔のCのenumとか。
004329
2009/06/04(木) 11:18:53パスの扱いだけは注意が必要ですが
Windowsでは今度からなるべくこっち使うことにします
0044デフォルトの名無しさん
2009/06/04(木) 17:34:130045デフォルトの名無しさん
2009/06/04(木) 17:47:590046デフォルトの名無しさん
2009/06/04(木) 19:22:20コンマは余らせない方針の人って見たことないよ。
0047デフォルトの名無しさん
2009/06/05(金) 01:36:59知識の少ない学生がおいそれと入っていっても歓迎される…少なくとも冷遇されないもんなんでしょうか
共有されてる情報は欲しいんだけど一歩を踏み出せないです
0048デフォルトの名無しさん
2009/06/05(金) 02:14:00試行錯誤した末に、最適の書き方が出来るように最初から作られてることに気付く
Cとかの固い言語では有り得ない
0049デフォルトの名無しさん
2009/06/05(金) 02:23:05perlのパーサは無理だよね。
0050デフォルトの名無しさん
2009/06/05(金) 08:19:06Cはコンパイラに都合のいいようにできてるから。
Perlは書く人主体で設計されており、本来コンパイラには不要な冗長性も
沢山含まれてるから当然と言えば当然。
0051デフォルトの名無しさん
2009/06/05(金) 09:49:29ed に sh が合体したみたいなもん。
進化の系譜を書くとすると、こうなる。
ed --> sed --> awk --> perl
sh ------------+
0052デフォルトの名無しさん
2009/06/05(金) 15:26:21ちょっとその図には賛同しかねる。そんな単純な話じゃないと思うが。
0053デフォルトの名無しさん
2009/06/05(金) 16:33:350054デフォルトの名無しさん
2009/06/05(金) 16:40:500055デフォルトの名無しさん
2009/06/05(金) 17:05:590056デフォルトの名無しさん
2009/06/05(金) 18:16:230057デフォルトの名無しさん
2009/06/06(土) 01:47:23sed C awk sh -->
0058デフォルトの名無しさん
2009/06/06(土) 03:20:39C --+
awk --+
sh --+
簡単簡単
0059デフォルトの名無しさん
2009/06/06(土) 03:58:27これくらい常識で考えたら素人だってわかんだろーが
金 --> 銀 --> perl -->プレゼント
こうだよ!
0060デフォルトの名無しさん
2009/06/06(土) 07:28:530061デフォルトの名無しさん
2009/06/06(土) 16:37:000062デフォルトの名無しさん
2009/06/06(土) 18:13:190063デフォルトの名無しさん
2009/06/06(土) 18:51:03は、どうして
if $a == 1 {$a = 0}
と書けないんだろう
紛れないと思うんだが
0064デフォルトの名無しさん
2009/06/06(土) 18:56:590065デフォルトの名無しさん
2009/06/06(土) 19:02:26はできないけどな
0066デフォルトの名無しさん
2009/06/06(土) 20:33:09if $a == $b{$a = 0}
は紛らわしくない?
0067デフォルトの名無しさん
2009/06/06(土) 21:19:220068デフォルトの名無しさん
2009/06/06(土) 21:55:370069デフォルトの名無しさん
2009/06/06(土) 22:15:38また、移動先にファイル、ディレクトリがあったばあいは再帰的にマージしたいです現在はlinuxのmvコマンドを呼んでなんとかしてるんですが、
指定したディレクトリの最後が同一でない場合なんかに対応してないし、マージ機能を持ってないし、持ち悪い処理がいっぱいあってダメダメな感じです
こういうディレクトリの処理を簡単にできるモジュールはありますか?
0070デフォルトの名無しさん
2009/06/06(土) 23:00:53ツッコミ所は色々あるが、たとえば、
if sub {$a = 0};
っていうことされたら困るだろ。subと{}は結合力が最も強い「項」であるので先に結合してしまう。
従って無名関数への参照が条件とコンパイラが解釈してしまう(んで構文エラー)。
loop_or_condition(xxx){yyy}の()と{}はセット。
0071デフォルトの名無しさん
2009/06/06(土) 23:07:26通るが。
perl -e "print 'ok' if sub { $v = 1 }; print qq/\n/"
そりゃ通るでそ。。。
$ perl -e 'if sub {$a = 0}'
syntax error at -e line 1, near "if sub "
Execution of -e aborted due to compilation errors.
0073デフォルトの名無しさん
2009/06/06(土) 23:53:02話読んでた?それは通るよ。 >>70で言う所のyyy loop_or_condition xxx構文じゃんかそれ。
0074デフォルトの名無しさん
2009/06/07(日) 00:12:44いまいち理解できんけどそれじゃ
if(sub){$a = 0}
って文になるんじゃね?
sub のところに任意の関数をいれるってなら話は分かるが無名関数のくだりがようわからん
0075デフォルトの名無しさん
2009/06/07(日) 00:19:16紛れない限りは通すのがperlらしい気がする
0076デフォルトの名無しさん
2009/06/07(日) 00:32:20確かに。式中のsubは{...}が必須っぽいから
if sub {...} はエラーで当然だし、通すには if sub {...} {...} って書けばいいだけ
まぁ、これとは別に、ifに括弧を必須としている曖昧な構文が存在することは間違いないだろうけど
0077デフォルトの名無しさん
2009/06/07(日) 06:22:44Perlの文法には「優先順位」ってのがあってだな。
「項」の結合は何よりも優先されることになっているのよ。
これはPerlの一貫した言語仕様。だから、
if sub {$a = 0}
は、残念ながらif (sub {$a = 0})と解釈されることになる。
Perlはそういうものなので、変な例外があると余計ユーザが混乱する。
これを覆したいなら自分で新しく言語作ってそこでやって下さい。
>>75
>>70に紛れるケースを示したが?
>>76
> まぁ、これとは別に、ifに括弧を必須としている曖昧な構文が存在することは間違いないだろうけど
詳しく。
http://search.cpan.org/~tommy/File-Util-3.27/Util.pod#Get_the_names_of_all_files_and_subdirectories_in_a_directory,_recursively
このあたりかしら?
0079デフォルトの名無しさん
2009/06/07(日) 12:10:20いや、そういうことじゃなくて
if sub {$a = 1}
が意図してることが
if(sub){$a = 1}
となるんじゃないかと思った
それだったら普通に最初から通らんよね?
それで、例えば
foreach(@hoge){
if rmtree {$a = '/'}
}
なら言ってることが理解できるって話
0080デフォルトの名無しさん
2009/06/07(日) 12:43:090081デフォルトの名無しさん
2009/06/07(日) 14:09:470082デフォルトの名無しさん
2009/06/07(日) 15:36:22従って、
if bareword { ... };
などとした時、名前空間に bareword() が存在すると、見た目の曖昧さを生じます。
# 個人的に Perl に限れば括弧が必須でなくなっても書いてしまう気はします。
0083デフォルトの名無しさん
2009/06/07(日) 15:59:06いや、それ議論からずれてる。
0084デフォルトの名無しさん
2009/06/07(日) 17:59:41KENTを彷彿とさせる、Perl4なコード
いかにもPerlって感じの、省略の美学バリバリのコード
Cライクなコード
オブジェクト指向っぽいコード
が混在している……。もうやだ……。
0085デフォルトの名無しさん
2009/06/07(日) 18:51:540086デフォルトの名無しさん
2009/06/07(日) 21:34:42Perl歴15年、同意です。
0087デフォルトの名無しさん
2009/06/07(日) 22:15:58仕事だから、仕方なくやってるだけなんだからね!
0088デフォルトの名無しさん
2009/06/08(月) 01:55:34という方向性だと、簡単な方がいいし、
他人に作らせる
だと、オブジェクト指向バリバリになる
まあ、オブジェクト指向だからといって、
タイプ数を増やさなければならないという法は無いのだが
0089デフォルトの名無しさん
2009/06/08(月) 17:26:46今後このコードはどうゆう使われ方、扱われ方をされるのか・・・
ざっくり言えばニーズにマッチしたモノを作れるようになりたい
ってかこれって様々な言語、いや職種にすら限らない仕事一般の話だな
0090デフォルトの名無しさん
2009/06/08(月) 19:36:47$cur_dir = Cwd=getcwd() . "\\";
で取得しているのですが、ディレクトリ名に"("が含まれていると
それ以降の文字列が取得できなくなってしまうのですが、
対処法はありますでしょうか?
009190
2009/06/08(月) 19:58:53>>90はその変数に格納された内容にバッチファイルのアドレスを足して
system($bat_pass);
みたいな形で使用しています。
(までしか認識さず、実行できない状態になっております。
0092デフォルトの名無しさん
2009/06/08(月) 20:17:16use Cwd;
print $0, "\n", getcwd(), "\\\n";
C:\test(1)\test.pl
C:/test(1)\
0093デフォルトの名無しさん
2009/06/08(月) 20:41:230094デフォルトの名無しさん
2009/06/08(月) 20:46:54迷った時は保守性の高いほう。
性能とのトレードオフが生じる時(いまどきそんなに多くない)はベンチマークで測定して、看過できないボトルネックが解消できると分かった場合にのみコメントの上チューニング。
大抵は迷っているので大抵は保守性の高いほうを選ぶ。
そうしない部分のほうを特例扱いにしてコメント及びドキュメントで注意喚起しておく。
経験上それが最も安く付く。
経験上そうもいかないことも多いが。
0095デフォルトの名無しさん
2009/06/08(月) 20:49:31アレには若干のオーバーヘッドがあるのです。
本当に連結してひとつの文字列に変化させたい場合には使います。
0096デフォルトの名無しさん
2009/06/08(月) 21:35:25スクリプトの使用期間が1ヶ月で、特急の受注でも同じ書き方するか?
規模にもよるが、俺だったら少々スパゲティでもいいから納期優先するな。
1ヶ月の間だけなら多少のスパゲティの内容の把握くらいできる。
0097デフォルトの名無しさん
2009/06/08(月) 22:27:31ある二つのテキストファイルがあって、
ファイルAは名前と住所
田中東京
佐藤千葉
鈴木埼玉
のようにあって、
もうファイルBは
田中
鈴木
など名前だけがあります。
ファイルAから、ファイルBに名前がある人の所(上の礼では「田中東京」)などと
とりだしたいのですが・・・どのようにしたらよいでしょうか・・・。
マッチングやgrepを考えたのですがうまくいかないので。
実際は生物の遺伝子名で膨大なのでPerlなどプログラムを書かなければならないのですが・・・・
0098デフォルトの名無しさん
2009/06/08(月) 23:04:43?
ファイルBから1行読んで
あとはファイルAを1行づつ読んではファイルBから読んだ1行と先頭一致するかどうかだけでは?
0099デフォルトの名無しさん
2009/06/08(月) 23:40:200100デフォルトの名無しさん
2009/06/08(月) 23:54:54何がどう「うまくいかなかった」のか書かないと返事のしようがないな。
とりあえず自分が書いたコードをさらせ。
0101デフォルトの名無しさん
2009/06/09(火) 00:23:10田中と東京に区切り文字はないの?
あれば区切ってデータベースにでも突っ込んで少しずつ検索すればいいんじゃね?
0102デフォルトの名無しさん
2009/06/09(火) 01:08:19マッチングやらgrepとか言っといて初心者だとか
どうやったらうまくいかなかったのかとか
取り扱いデータは改変されてるし
聞きたいならネタ隠すなよな・・・
0103デフォルトの名無しさん
2009/06/09(火) 02:09:50ちなみに、
> 実際は生物の遺伝子名で膨大なのでPerlなどプログラムを書かなければならないのですが・・・・
こういう用途は古くからPerlが多用されていた分野だから、十分なライブラリと
ノウハウの蓄積があるぞ。
0104デフォルトの名無しさん
2009/06/09(火) 08:28:370105デフォルトの名無しさん
2009/06/09(火) 10:28:42そもそも普通に書いてスパゲティになるのはおかしいw
たしかに書いてくるコードがことごとくスパゲティの奴って
いるんだが、どうしてできるのか不思議でしょうがないよ。
素直に書く方が圧倒的に楽だろ?
0106デフォルトの名無しさん
2009/06/09(火) 11:04:490107デフォルトの名無しさん
2009/06/09(火) 12:14:52shiftjisで書かれたファイルから文字列を読み込んで、utf8でdecodeした場合、文字列の内容は復旧できないのでしょうか?
utf8でencodeしても元の文字列には戻らなくて困っています。
サンプルです。test.txtはshiftjisで書かれています。
use Encode;
open IN, "test.txt";
my $str = <IN>;
print $str;
my $miss = decode 'utf8', $str;
my $recover = encode 'shiftjis', $miss;
print $recover ;
コマンドプロンプトで実行しても元に戻りません。
0108デフォルトの名無しさん
2009/06/09(火) 12:27:580109デフォルトの名無しさん
2009/06/09(火) 12:52:060110デフォルトの名無しさん
2009/06/09(火) 12:56:37アホ
0111デフォルトの名無しさん
2009/06/09(火) 14:44:32use App::Config;
で、自作のpmを使いたいんだけど上手く読めない…。
Configにsub testって関数があって
print test(); ってやると
Undefined subroutine &main::test called at index.cgi line 11.
ってなる。
App::Config::test();ならちゃんと動く。
ちゃんとuse App::Config;って書いたのになんでエラーが出るんですか?
分かる方たすけてください!!
0112デフォルトの名無しさん
2009/06/09(火) 15:11:35うまくエクスポートされていないだけだろ。
0113デフォルトの名無しさん
2009/06/09(火) 15:16:18どおいうことですか?
是非詳しく教えてください!
0114デフォルトの名無しさん
2009/06/09(火) 15:18:01Exporter 使ってる?
つかってるならlib 以下のディレクトリとパッケージ名がマッチしてない予感
0115デフォルトの名無しさん
2009/06/09(火) 15:26:02つかってないです。
0116デフォルトの名無しさん
2009/06/09(火) 15:27:08BlackJumboDog
ActivePerl 5.10.0 Build 1005
の環境で行ってます。
0117デフォルトの名無しさん
2009/06/09(火) 15:32:37Exporterのマニュアル見れ。
0118デフォルトの名無しさん
2009/06/09(火) 15:55:04えええ、いままでこんなことしてなかったのに…
ありがとうございます。
全てのサブルーチンをエクスポートするとした場合には
@EXPORT = qw(sub1 sub2 sub3 ...);って永遠に書かなきゃダメですか?
それと、use constantで定義した定数とかもuse Config;したところで
使えるようにしたいのですが、そういった場合はどうすればいいですか?
require使ったほうが早いですかね?
0119デフォルトの名無しさん
2009/06/09(火) 16:02:36今までApp::Config::test();ってアクセスしてました(汗。
とっても勉強になりました!ありがとうございました!
0120デフォルトの名無しさん
2009/06/09(火) 16:13:08> 全てのサブルーチンをエクスポートするとした場合には
そんな変なことをしたいのだったら、そもそもpackageするなよ。
0121デフォルトの名無しさん
2009/06/09(火) 16:37:47our @EXPORT = grep {defined &{$_}} keys %Hoge::;
とでもしとけばいいんでね? 勧めないが。
0122デフォルトの名無しさん
2009/06/09(火) 20:15:39PHPのほうがいいよ
0123デフォルトの名無しさん
2009/06/09(火) 21:40:55彼にPHPを勧める理由がわからん
0124デフォルトの名無しさん
2009/06/09(火) 22:01:39Pythonのほうがいいよ
0125デフォルトの名無しさん
2009/06/10(水) 06:56:38Perlコミュニティはオッサンばっかりだ。
Rubyコミュニティは若いがなんかキモイ。
0126デフォルトの名無しさん
2009/06/10(水) 12:42:050127デフォルトの名無しさん
2009/06/10(水) 13:57:08日本語でまともなのが見つかった試しがない
0128デフォルトの名無しさん
2009/06/10(水) 14:29:270129デフォルトの名無しさん
2009/06/10(水) 14:32:53よっぽどのモチベーションがないと日本語の解説って作られない
気がする。
0130デフォルトの名無しさん
2009/06/10(水) 15:13:17困難という法則。
0131デフォルトの名無しさん
2009/06/10(水) 17:10:15ニュアンスが微妙な部分は訳さずに原語を残した方がいい
結局、訳す意味がない
0133デフォルトの名無しさん
2009/06/10(水) 18:18:150134デフォルトの名無しさん
2009/06/10(水) 18:18:57でもよたくさん読む日本語速い
0135デフォルトの名無しさん
2009/06/10(水) 21:10:380136デフォルトの名無しさん
2009/06/10(水) 22:10:54cpanのドキュメントとかも、サンプルコードがあれば、ほぼ目的は達成できるしな
0137デフォルトの名無しさん
2009/06/10(水) 22:18:260138デフォルトの名無しさん
2009/06/11(木) 00:07:42特定の使い方について調べように見つからない
0139デフォルトの名無しさん
2009/06/11(木) 00:47:39この英文難しいなって感じたらそれはマニュアル書いた奴が説明下手ってことにしてる
0140デフォルトの名無しさん
2009/06/11(木) 01:09:55Perlの調べ物はググる前にperldoc
ドキュメントのどこに書いてるかも分からないなら目次から見当つければいい
http://search.cpan.org/dist/perl-5.10.0/pod/perltoc.pod
http://search.cpan.org/dist/perl-5.10.0/pod/perl.pod
0141デフォルトの名無しさん
2009/06/11(木) 06:49:30青らくだ買え
0142デフォルトの名無しさん
2009/06/11(木) 17:21:13場合によっちゃ使い勝手はネットより良いw
Perlバリバリ使えるけど本なんか買ったことねーよって人いるかな?
おいらは駱駝とクックとエフェクティブくらいしか持ってない
0143デフォルトの名無しさん
2009/06/11(木) 18:30:10リャマは続と併せて結構読んだ
でも一番読んだのは、フクロウだな。
0144デフォルトの名無しさん
2009/06/11(木) 20:57:580145デフォルトの名無しさん
2009/06/11(木) 21:13:09perldocより青らくだ買えとは言わないが、
「本はネットがあるからいらない」って人は考えを改めた方がいい。
本でしか手に入らないものもあるし、ネットだと不便な情報もある。
0146デフォルトの名無しさん
2009/06/11(木) 21:26:330147デフォルトの名無しさん
2009/06/11(木) 22:21:38じゃあなんでAmazonがブイブイ言わせてるんだ?
こないだも村上春樹が速攻で100万部突破したそうじゃねーか。
0148デフォルトの名無しさん
2009/06/11(木) 22:31:58Amazonは本だけじゃないよ
村上春樹は、かなり異例。出版業はかなりやばいよ
0149デフォルトの名無しさん
2009/06/11(木) 22:48:20Amazonは元々本が出発点だ。手を広げただけ。
そりゃ媒体が増えたからある程度は仕方ない。
音楽産業の凋落よりはマシだろ。
0150デフォルトの名無しさん
2009/06/11(木) 22:51:04そんなの誰でも知ってるだろ。何得意げに語ってるの?
Amazonがブイブイ言わせてるのは、書籍の売り上げじゃないっていう話だろ?
0151デフォルトの名無しさん
2009/06/11(木) 22:51:34「献本でもらった」「献本でもらった」「献本でもらった」
「献本でもらった」「献本でもらった」「献本でもらった」「献本でもらった」
「献本でもらった」「献本でもらった」「献本でもらった」
ばかりなので、本を買う気なくした。
0152デフォルトの名無しさん
2009/06/11(木) 22:53:35dan?
あれは仕方ない
0153デフォルトの名無しさん
2009/06/11(木) 22:55:19あとは人生転落するだけ。
0154デフォルトの名無しさん
2009/06/11(木) 23:07:4480年代に比べれば売上は今の方が大きい。
近視眼的な数値だけみてヤバイヤバイと騒ぐのは愚か。
0155デフォルトの名無しさん
2009/06/11(木) 23:15:1980年代と比べたら、出版数自体が大きく違う
つまり、売れないから一杯出すのスパイラルになってるんだよ
0156デフォルトの名無しさん
2009/06/11(木) 23:16:07その後あんたどうすんの?と言いたくなるような質問が多い。
一冊本を通読した方がよっぽど近道だと思うんだが。
0157デフォルトの名無しさん
2009/06/11(木) 23:30:05いや、danに限らず、新しい本が出た前後、あるいは出る前に
その本について触れているブログを見ると、「献本でもらった」
ばかりという現象さ。
0158デフォルトの名無しさん
2009/06/12(金) 00:26:04Effective Perlは買った
あれはいい本だ
0159デフォルトの名無しさん
2009/06/12(金) 05:58:35昔はいっぱい出版しても置くとこがなかった=売れなかった。
今はロングテールがそれを下支えしてる。
それはどうでもいいとして、現在一定の売上が上がってる以上、
「本が売れてない」って話は違うだろ。
>>158
青らくだくらいは通読しといた方がいいと思うけどな。
perldoc通読する気にはならんだろ。
このスレには青らくだにちゃんと書いてあるような単純なことで騒ぐやつが多すぎる。
0160デフォルトの名無しさん
2009/06/12(金) 08:07:45お前さんは出版業界の人なのけ?
一般的にニュース等で言われてたり、実際に出版業倒産が相次いでたり
そういう事実を否定してまで、「売れてる」と主張する根拠は?
0161デフォルトの名無しさん
2009/06/12(金) 08:47:46うん、全然売れなくなったな。
コンピュータ関係の本は、もう終わりだと思う。
0162デフォルトの名無しさん
2009/06/12(金) 11:52:280163デフォルトの名無しさん
2009/06/12(金) 18:18:44ttp:// にマッチするってどんな風に書けばいい?
0164デフォルトの名無しさん
2009/06/12(金) 18:21:180165デフォルトの名無しさん
2009/06/12(金) 18:47:060166デフォルトの名無しさん
2009/06/12(金) 20:16:280167デフォルトの名無しさん
2009/06/12(金) 20:21:31東野圭吾とか、今回の村上春樹とか、一部の売れっ子作家以外が殆ど売れない。
そこそこ売れる作家 というのが昔に比べてとても減った。
昔に比べ、どんどん娯楽というかエンターテイメントの多様化が進んでるから仕方ない。
0168デフォルトの名無しさん
2009/06/12(金) 22:59:130169デフォルトの名無しさん
2009/06/12(金) 23:14:48どんな入門書にも答えが書いてあるような質問を
こんなとこでするな、ということだ。
答える方も時間の無駄だし、質問してわかった気になっても全然身につかない。
無駄の相乗。
0170デフォルトの名無しさん
2009/06/12(金) 23:17:42my $self = shift;
my $func = shift;
&{$func($self)}
}
こんな感じで変数に入ってるメソッド名を実行したいのですが、
継承ができる書き方を教えてください
0171デフォルトの名無しさん
2009/06/12(金) 23:39:19$self->$func();
…って事ではなく?
0172デフォルトの名無しさん
2009/06/12(金) 23:56:30いけました。ありがとうございます。
sub hoge{
my $self = shift;
my $Function = {};
$Function->{'hoge'} = shift;
no strict 'refs';
#$self->{$Function->{'hoge'}};#ここがわからない
}
実際のコードだとこんな感じなんですが、
一時変数に代入したら{}とか気にせずにいけたんですね。
ちなみに、一時変数使わない場合の書き方とかあるんでしょうか?
後学のためにご存じでしたら教えて欲しいです。
0173デフォルトの名無しさん
2009/06/13(土) 00:27:49http://perldoc.jp/docs/perl/5.10.0/perlobj.pod
> 矢印の右側は典型的にはメソッド名ですが、メソッド名や
> サブルーチンリファレンスが入った単純スカラ変数も使えます。
あとperlrefとperlmodくらいは通読しとくといいよ
http://perldoc.jp/docs/perl/5.8.8/perlref.pod
http://perldoc.jp/docs/perl/5.10.0/perlmod.pod
0174デフォルトの名無しさん
2009/06/13(土) 00:29:35らくだ本を買おう!
0175デフォルトの名無しさん
2009/06/13(土) 00:33:34素敵なマニュアルまで紹介して頂いて重ね重ね感謝します
隅々まで全部読んできます
0176デフォルトの名無しさん
2009/06/13(土) 01:19:501にマニュアル
2にgoogle
3,4が無くて
5に2ch
だろーが!
0177デフォルトの名無しさん
2009/06/13(土) 01:55:530178デフォルトの名無しさん
2009/06/13(土) 02:07:30そういう強迫神経症的逃避法が存在する。
0179デフォルトの名無しさん
2009/06/13(土) 02:36:225.00xベースの改訂版(第2版)の古本でも買って、
新しい情報はperldocで追いかけた方がいいかもな
http://www.amazon.co.jp/gp/offer-listing/4900900486/
実際押さえるべき基本的な部分は5.00xの頃から大差無いし、
細かいところは第3版だと古いしね
0180デフォルトの名無しさん
2009/06/13(土) 03:13:14読んでないから実際にはウロコ落ちまくりかもしれないけど
0181デフォルトの名無しさん
2009/06/13(土) 05:17:02個人のデータ(苗字、名前、性別、住所、部署等)が載ったテキストを処理し、
特定の苗字で、性別が男の場合はその人のデータをすべて削除し、
それ以外はすべて出力するといったようなコードはどう組めばよいのでしょうか?
例えば、
鈴木 一郎 男 東京都大田区〜、営業部
鈴木 花子 女 千葉県浦安市〜、総務部
といったデータが存在した場合、鈴木花子はテキストに残るが、
鈴木一郎に関する全データは削除される、という処理です。
他の苗字の人のデータは性別関係なくすべて出力されますが、鈴木という苗字で男性のデータはすべて削除します。
どなたかご教示よろしくお願いします。使用環境はUNIXです。
0182デフォルトの名無しさん
2009/06/13(土) 05:58:14Perlでリクに答えるスクリプトを作るスレ
http://pc12.2ch.net/test/read.cgi/tech/1086143976/
0183デフォルトの名無しさん
2009/06/13(土) 05:59:59ありがとうございます。
こちらに書いてみます。
0184デフォルトの名無しさん
2009/06/13(土) 12:12:110185デフォルトの名無しさん
2009/06/13(土) 14:28:58grep -v ' 男 ' data.txt > result.txt
0186デフォルトの名無しさん
2009/06/13(土) 15:54:390187デフォルトの名無しさん
2009/06/13(土) 21:32:130188デフォルトの名無しさん
2009/06/13(土) 21:53:58鈴木 男 女 東京都千代田区
膨大なデータ扱ってると何起こるか分かんないからな。
0189デフォルトの名無しさん
2009/06/13(土) 23:59:320190デフォルトの名無しさん
2009/06/14(日) 01:10:050191デフォルトの名無しさん
2009/06/14(日) 08:38:53@kana = ('ァ', 'ア', (中略), 'ン');
とやるのと同じことをもっと賢くやらせるにはどうすれば?
0192デフォルトの名無しさん
2009/06/14(日) 10:30:17sjisならこれでok
@kana = (map {pack "S" , $_} (0x8340 .. 0x8393) );
0193デフォルトの名無しさん
2009/06/14(日) 11:00:28print "@kana";
すると
@・A・B・C・D・E・F・G・H・I・J・K・L・M・N・O・P・Q・R・S・T・U・V・W・X・Y・Z
・[・\・]・^・_・`・a・b・c・d・e・f・g・h・i・j・k・l・m・n・o・p・q・r・s・t・
u・v・w・x・y・z・{・|・}・~・・・< c ャ с ・ ・ �� ・ 宴 潟 泣 激 鴻 祉 純
帥 巣 茶 塔
こんなんなるよ?
0194デフォルトの名無しさん
2009/06/14(日) 11:15:26$ perl | nkf -w
print (map {pack "S" , $_} (0x8340 .. 0x8393) );
@アィイゥウェエォオカガキギクグケゲコゴサザシジスズセ
ゼソゾタダチヂッツヅテデトド ナニヌネノハバパヒビピフブプヘベペホボポマミ$
先頭1バイトが欠けてる上に「ン」まで行ってないなこれ。ちょっと調べる暇ない。ごめん。
0195デフォルトの名無しさん
2009/06/14(日) 11:33:24print join("\n", map {pack "n" , $_} (0x8340 .. 0x836f , 0x8380 .. 0x8393) );
0196デフォルトの名無しさん
2009/06/14(日) 11:37:39・使ってる環境がビッグエンディアンなのを考慮してなかった。
・カタカナに飛び地があるのを知らなかった。
ビッグエンディアンの問題は環境依存すると思うからよしなに。
0197デフォルトの名無しさん
2009/06/14(日) 12:35:16これでいけました
"n" かー。そういえば前にも使った。意味はよく判らない。
0198デフォルトの名無しさん
2009/06/14(日) 13:00:490199デフォルトの名無しさん
2009/06/14(日) 13:38:260200デフォルトの名無しさん
2009/06/15(月) 19:39:11HTML::Templateを使用しているのですが、TMPL_LOOPはハッシュしか扱えないのでしょうか?
配列を回したいのですが、方法がわかりません。
やりかたがあれば、方法を教えていただけると助かります。
0201デフォルトの名無しさん
2009/06/15(月) 22:37:310202デフォルトの名無しさん
2009/06/15(月) 23:52:42配列を使えばハッシュも回せるよ
0203201
2009/06/16(火) 02:16:150204デフォルトの名無しさん
2009/06/16(火) 09:06:57[{ x => ..., y => ...}, { x=> ..., y => ... }, ...]
そして内側のハッシュのキーがTMPL_LOOPのループ内で
見える変数名になる。
ただの配列 @hoge = (1, 2, 3) みたいので回したければ
適当に変数名を決めてやってこれを
[ { x => 1 }, { x => 2}, { x => 3} ]
のように変換すればいいので、
[ map { { x => $_ } } @hoge }
とかでいいんでね。
0205デフォルトの名無しさん
2009/06/16(火) 10:18:190206デフォルトの名無しさん
2009/06/17(水) 13:03:19なにをいっているのかよくわからなかったですけど
今理解できました!!packageしないとuseしなくてもuse lib "lib"してるから
勝手に読んでくれるのですね!?
ありがとうございました!!
0207cmu04e234.cncm.ne.jp
2009/06/17(水) 13:24:25現在、Perlの勉強をしているのですが、ファイルを分割した際の処理がわかりません。
変数の定義を別ファイルにて行おうと考えているのですが、requireすると変数のスコープが呼び出し元まではいらないのか、うまくいきません。
変数を定義したファイルをrequireして実行してみると
Global symbol "$logfile" requires explicit package name at ./admin.cgi line 179.
このようなエラーが多量にでています。
変数定義はmyでもourでも行ってみました。
どうか助言頂ければと思います。
0208デフォルトの名無しさん
2009/06/17(水) 13:46:05裸のlogfileを使おうとしてるね。その場合は、
----------- test.pl ----------
use strict;
our $a;
require 'test2.pl';
print $a;
----------- test2.pl ---------
$a = 1;
1;
とすればスコープが届くようになる。ourはこうやって使う。
myはファイルをまたいでスコープを持つことはできない。
0209デフォルトの名無しさん
2009/06/17(水) 13:54:18変数定義ファイルをスクリプトじゃなくてモジュールにしてExporterを使う
------
0210デフォルトの名無しさん
2009/06/17(水) 15:46:07>>208様にご解説いただきましたとおり、ourを呼び出し元のファイルに設定することで
エラーを出ないようにすることはできたのですが、requireする側のファイルに
use strict;
をすると、変数宣言をしていないためエラーが出てしまいます。
これを解決する方法はありませんでしょうか?
0211デフォルトの名無しさん
2009/06/17(水) 17:19:16> をすると、変数宣言をしていないためエラーが出てしまいます。
質問が良く分からんのだが、以下のは動くぞ。
--------- test.pl ----------
use strict;
our $a;
require 'test2.pl';
print $a;
--------- test2.pl ---------
use strict;
$a = 1;
1;
コードとエラーメッセージ晒してみ。
0212デフォルトの名無しさん
2009/06/17(水) 17:35:58エラーがでるかどうかと、perl -v | head -2の結果をよろ。
0213デフォルトの名無しさん
2009/06/17(水) 18:58:17$aだからエラーが出ないだけじゃ?
0214デフォルトの名無しさん
2009/06/17(水) 20:28:34use strict;
our $var;
require 'test2.pl';
print $var;
--------- test2.pl ---------
use strict;
our $var;
1;
自分も過去試行錯誤したんだけど結局こうするしかなかった。
include的な動作をさせたいならopenでファイルを読んでevalするしかないと思う。
0215デフォルトの名無しさん
2009/06/17(水) 20:29:310216デフォルトの名無しさん
2009/06/17(水) 20:30:39use strict;
our $var = 1;
1;
の間違いです。
0217デフォルトの名無しさん
2009/06/17(水) 22:02:51our取っ払って$varを$main::varに置き換えても同じことなのは
理解してる?
requireがどうしても必要だという場面が想像できない。
0218214
2009/06/17(水) 22:28:07明示的に指定しない場合は必ずmainになるとは限りません(mod_perl環境下など)。
この場合ourを使ってグローバルな領域へアクセスするのが安心・確実で
そうでない場合__PACKAGE__やcallerを使って管理しなくてはいけないので
自分の場合はバグの温床になりやすかったです。
仰るとおりこうしなければならない局面は少なく代替案はいくらでもあると思いますどね。
0219デフォルトの名無しさん
2009/06/17(水) 22:41:35> 明示的に指定しない場合は必ずmainになるとは限りません(mod_perl環境下など)。
だからー示したテストスクリプトの場合だよ。
グローバル領域をやたらと必要とするのは設計のまずさ故だと思う。
バグの温床になるとか言ってるから、正しい使い方はしていないと思われ。
0220デフォルトの名無しさん
2009/06/17(水) 22:42:320221デフォルトの名無しさん
2009/06/17(水) 23:09:32FOO=hoge
BAR=hage
みたいなtxtfile用意して読んで分割してハッシュにぶちこんだら?
CGI臭いけどww
0222デフォルトの名無しさん
2009/06/17(水) 23:23:25それjson/yamlで。
0223デフォルトの名無しさん
2009/06/17(水) 23:53:45提示したテストスクリプトでの場合を書いてますが。
誤った使い方は論外ですがグローバルが必要なケースは少なくありません。
バグの温床云々は貴方の提示したやり方だとバグの温床になりやすいので
私が提示したやり方の方がそうなりにくいと説明したまでです。
ポイントポイント全てで伝わって無くて残念です
0224デフォルトの名無しさん
2009/06/18(木) 00:29:43みたいなのに固執してないか?
0225デフォルトの名無しさん
2009/06/18(木) 01:39:13グローバル変数はできれば使いたくない
0226デフォルトの名無しさん
2009/06/18(木) 05:59:410227デフォルトの名無しさん
2009/06/18(木) 06:37:19能力ないのに口だけは達者な一番面倒なタイプのプログラマだな。
0228デフォルトの名無しさん
2009/06/18(木) 07:16:48お前、テストスクリプトまで書いてくれたヤツに
礼もなしにその重箱の隅つつきはねーだろ。
Camelの例示だって裸の$varが出てきたら暗黙に$main::varを
前提としてるぞ。
0229デフォルトの名無しさん
2009/06/18(木) 08:23:29重箱の隅ってレベルじゃないだろ。
それにどう勘違いしたら馬鹿な例示に感謝するって話になんだよ
0230デフォルトの名無しさん
2009/06/18(木) 09:54:04グローバル変数なんか使わなくても、共通定数(変数)クラスみたいなの作ればいいし
隠蔽性ってOOPの基本だぜ
0231デフォルトの名無しさん
2009/06/18(木) 16:01:04その間違いっていうのを詳しく。
0232デフォルトの名無しさん
2009/06/18(木) 16:48:15use strict;
require 'config.pl';
print config::param('hoge');
print config::param('fuga');
---- config.pl ----
package config;
use strict;
sub param {
return (
hoge => 'abcdefg',
fuga => '12345',
)[$_[0]];
}
1;
設定を1つに纏めたいなら、ourとか考えずに上記のようにしろ。
万が一の確立で、そんな面倒なソースがまわってきたら嫌だ。
0233デフォルトの名無しさん
2009/06/18(木) 17:11:11TMTOWTDI。
エラーが出るっつーから出ないようにしただけじゃん。
ourだってourで出来ないっつーからourで出来る例示をしたんだろ。
最低限の質問には答えてるんでね?最適解を出すのが質問の内容なら話は別だけどさ。
っていうかこの人最初にありがとうって言ってね?それで充分だろ>>228
0234デフォルトの名無しさん
2009/06/18(木) 17:15:17詳しく。
0235デフォルトの名無しさん
2009/06/18(木) 17:23:350236デフォルトの名無しさん
2009/06/18(木) 17:52:01$url = 'http://hogehoge.com/hoge.html';
$serverName = ($url =~ m(http://(.*?)(/|$)))[0];
このコードを別の書き方で書けないでしょうか?
$)が何かの変数だと解釈されてしまい以下のインデントがずれてしまいます。
0237デフォルトの名無しさん
2009/06/18(木) 17:59:03\z
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlreref.html
0239デフォルトの名無しさん
2009/06/18(木) 19:39:56sleep(5);
print "good";
status: が表示され5秒後にgoodが表示されて欲しいのですが、
これを実行すると5秒後にstatus: goodとまとめて表示されてしまいます。
調べてみた所$|=1にすればバッファリングが無効化され逐一フラッシュされるという事が分かりました。
しかしバッファリングを無効化したいのはここだけで、プログラムの他の部分では普通にバッファリングさせたいのです。
なので$|=1としたあと$|=0としなおさなければいけません。手動でflushする事は出来ないのでしょうか。
0240デフォルトの名無しさん
2009/06/18(木) 20:07:38#!/usr/bin/perl -w
use strict;
use IO::Handle;
my($count, $flush) = (0, 3);
for (split //, $ARGV[0]) {
print and sleep 1;
++$count % $flush or STDOUT->flush;
}
__END__
0241デフォルトの名無しさん
2009/06/18(木) 20:24:56出来ました。
ありがとうございました。
use IO::Handle;
print "status: ";
STDOUT->flush;
sleep(5);
print "good";
0242デフォルトの名無しさん
2009/06/19(金) 01:28:35もっと手軽にフラッシュできればいいのに
0243デフォルトの名無しさん
2009/06/19(金) 05:55:58print "status: ";
flush();
sleep(5);
print "good";
0244デフォルトの名無しさん
2009/06/19(金) 11:49:33use Encode;として、後は入力された物を正規表現なんかで置換したりする前に全てdecode("shiftjis",$hoge)とすれば問題は起きないのでしょうか?
0245デフォルトの名無しさん
2009/06/19(金) 12:17:45それ無名配列の一つ目を表示してるだけじゃね?
0246デフォルトの名無しさん
2009/06/19(金) 12:49:17表示させようと思っていますが、実装方法がわかりません。
設計レベルでは以下のようにしようと思っています。
・ウィンドウを生成する
・バックグラウンド処理を実行させる
・バックグラウンド処理は1ループ終わるたびに処理結果を
ウィンドウに書き込む
・ウィンドウは停止ボタンの押下によりバックグラウンド処理を停止させる。
また、開始ボタンにより再度バックグラウンド処理を開始させる。
以上よろしくお願いします。
0247デフォルトの名無しさん
2009/06/19(金) 13:14:00>>4
入出力のときに変換して内部ではutf8文字列で扱う
ように統一したほうが楽だよ。置換のときだけdecode
なんて混乱の元。
0248デフォルトの名無しさん
2009/06/19(金) 16:47:27最初にeucで書くことに逃げた奴がいるから、perlで対処されずに逃げ続ける羽目になる
2byteコードなのかそうでないのかは区別できるように設計されてるコードなんだから、
たまに認識できない文字があるのはperl側の手抜きに過ぎない
既にCPUは十分に速いんだから、まじめに処理しる
0249デフォルトの名無しさん
2009/06/19(金) 17:04:450250デフォルトの名無しさん
2009/06/19(金) 17:09:12本当だw
プロのプログラマーであるような事を言っておいて配列とハッシュの区別つかない初心者レベルとはひどすぐるw
0251デフォルトの名無しさん
2009/06/19(金) 17:31:18だが・・・それでも
100%の確信をもって書く!それがP板住人の気概ってもんさ
0252デフォルトの名無しさん
2009/06/19(金) 19:34:26ウソを正すことを強いられる。
ネットが本質的にウソと怒りと攻撃性に満ちあふれる世界となる理由だな。
0253デフォルトの名無しさん
2009/06/19(金) 19:39:560254デフォルトの名無しさん
2009/06/19(金) 21:51:36舌の根も乾かないうちに偉そうなこと書くよ。
というわけでどちら様か>>246を答えてくださらないでしょうか?
さもなければもうらくだかクックブックを参照するしか・・・
0255デフォルトの名無しさん
2009/06/19(金) 21:59:190256デフォルトの名無しさん
2009/06/19(金) 22:13:510257デフォルトの名無しさん
2009/06/19(金) 22:23:22ならわかるけど、なんで逆なんだろうな。
0258デフォルトの名無しさん
2009/06/19(金) 22:53:290259デフォルトの名無しさん
2009/06/19(金) 22:59:59⇒時間がかかる
⇒⇒人件費がかさむ
⇒⇒⇒上司ににらまれる
他人に聞く
⇒即、解決。おわり。
0260デフォルトの名無しさん
2009/06/19(金) 23:01:050261デフォルトの名無しさん
2009/06/19(金) 23:37:29ところがその「時間がかかる」の部分でついでに身につくあれやこれやが
とてつもなく大きいんだよな。実力の半分以上はそれで付くってくらいに。
だから、特定の問題一つの解決までの道のり「だけ」を比較しても、あまり意味が無い。
上を繰り返すことで減少していく立ち止まりが、下ばっか選んでいると一向に減らないという点で、
トータルでは上のほうがロスタイム少なかったりするんだな。しかも下は嘘つかれ易いし。
もちろん、自分一人で延々悩んでいても埒が開かない場面ってのもあるけれど。
>>260
でもこの場合は質問者も餅屋だから。餅屋としての修行態勢は整えておこうよっていう。
0262デフォルトの名無しさん
2009/06/19(金) 23:39:58> モチは餅屋っていうじゃん
金払う気あるってこと?
0263デフォルトの名無しさん
2009/06/19(金) 23:50:210264デフォルトの名無しさん
2009/06/19(金) 23:52:07成長したかったら努力しろ
0265デフォルトの名無しさん
2009/06/19(金) 23:52:500266デフォルトの名無しさん
2009/06/20(土) 00:01:20青いな
その理屈はせいぜい社会人3年目くらいまでだろ。
何をするにもコストは発生する。成果物が明らかである以上、コストは
最小に抑えるにこしたことはない。
0267デフォルトの名無しさん
2009/06/20(土) 00:09:12ppでexe化して実行すると下記のようなエラーが出ます。
解決する方法どなたか教えていただけないでしょうか?
C:\Documents and Settings\takeshi\デスクトップ\dialog>pp dialog.pl -o dialog.exe -l Glib.dll -l Cairo.dll -l Gtk2.dll -M Glib -M Cairo -M Gtk2
C:\Documents and Settings\takeshi\デスクトップ\dialog>"C:\Documents and Settings\takeshi\デスクトップ\dialog\dialog.exe"
GLib-GObject-CRITICAL **: g_object_steal_qdata: assertion `quark > 0' failed at script/dialog.pl line 94.
GLib-GObject-CRITICAL **: g_object_set_qdata_full: assertion `quark > 0' failed at script/dialog.pl line 94.
Can't locate object method "signal_connect" via package "Gtk2::Window" at script /dialog.pl line 100.
0268デフォルトの名無しさん
2009/06/20(土) 00:10:28仕事してる人間がここに書き込んだことあるの?
0269デフォルトの名無しさん
2009/06/20(土) 00:10:290270デフォルトの名無しさん
2009/06/20(土) 00:13:29つまり勉強始めて3年以内に「自分でやるコスト<人にやらせるコスト」まで
スキルアップできなかった奴は金で解決しろって事だよな。
0271デフォルトの名無しさん
2009/06/20(土) 00:19:103年やって駄目な奴は辞めて下さい
0272デフォルトの名無しさん
2009/06/20(土) 00:28:06車輪、それも質の悪い奴を再発明しまくっているのに自覚のない
オナニー野郎は悪害だから辞めて下さいという意味
0273267
2009/06/20(土) 00:51:44失礼しましたm(__)m
0274デフォルトの名無しさん
2009/06/20(土) 01:30:48優秀な教育者は、それを見極めて教えたり教えなかったりするが、
多くの先輩はそんなことは考えておらず、面倒なら教えないし、気が向けば教える
0275デフォルトの名無しさん
2009/06/20(土) 02:25:57勉強は学校でするもんだろ?
会社は、勉強した成果を発揮する場所であって
勉強する場所ではない!
おまえは給料ドロボーかっ!
0276デフォルトの名無しさん
2009/06/20(土) 03:53:340277デフォルトの名無しさん
2009/06/20(土) 04:06:28最近プロっぽい人が初心者相手に親切に教えてくれてんじゃん。
0278デフォルトの名無しさん
2009/06/20(土) 04:08:32貴重な時間割いて教えてくれてるんだから感謝しないとな。
0279デフォルトの名無しさん
2009/06/20(土) 04:11:170280デフォルトの名無しさん
2009/06/20(土) 06:09:50黒魔術的な所業で可能だったりしませんでしょうか
あれば他のことにも応用できそうでいいかんじではないでしょうか
0281デフォルトの名無しさん
2009/06/20(土) 06:23:340282デフォルトの名無しさん
2009/06/20(土) 06:54:21増えてきてる実感だけど。
PHPが大きいプロジェクト抱えすぎて破綻寸前なイメージがある。
PHPのフレームワークはフリーウェアをインストールした状態では
重くて使い物にならないしな。
まあCatalystも重いんだけど。Catalyst>>>>PHPのフレームワーク、だし。
0283デフォルトの名無しさん
2009/06/20(土) 08:02:02そんな当たり前なこと偉そうに語るな
このスレは、それでも聞いちゃう人のスレ
そんな質問を見たり、答えたりして楽しむ人のスレ
0284デフォルトの名無しさん
2009/06/20(土) 08:03:19会社によるし、規模にもよる。
0285デフォルトの名無しさん
2009/06/20(土) 11:05:44ImagerとかGDとかImageMagickという画像編集のモジュールがあることは知っていますが、それ以上のことは知りません
0286デフォルトの名無しさん
2009/06/20(土) 14:33:11ググってみました
今やろうとしてることにはたすきに長すぎる感がありますが面白そうですね
そっちに興味が移りました
ありがとうございます
0287デフォルトの名無しさん
2009/06/20(土) 15:36:25だからバッチファイルが書けなくても困りません
0288デフォルトの名無しさん
2009/06/20(土) 19:19:25ImageMagickでcloneしてcropなりchopすれば見た目は分割になるImageMagick
0289デフォルトの名無しさん
2009/06/20(土) 20:56:01画像の分割って画像編集なわけだが
ImagerとかGDとかImageMagickを使ってみればいいじゃん
0290デフォルトの名無しさん
2009/06/21(日) 12:22:24感謝するべきプロの書込ってこれのこと? >>208 >>232
スコープの話するのに$a使うような馬鹿がプロのわけないだろ。
232なんかourは使うなって書いたコードがour使うよりも劣る糞コード。しかも意図通り動作しない。
真偽を判断する事が出来ない初心者にあたかも上級者であるよう装って馬鹿な事を教えるような奴は
感謝するどころか消えて欲しい。
0291デフォルトの名無しさん
2009/06/21(日) 17:58:54何故、そんな明らかなtypoに、レスして熱くなってるんだ?
もうちょっと本質について、語ってみろよ。
>>208が$aでは無く$varで、>>232が[$_[0]]では無く{$_[0]}だとしたら
何が問題で、>>290ならどう解決するかを語って欲しいものだ。
どうでもいいようなtypoを偉そうに煽るだけのような奴こそ消えて欲しい。
0292デフォルトの名無しさん
2009/06/21(日) 19:03:510293デフォルトの名無しさん
2009/06/21(日) 19:09:250294デフォルトの名無しさん
2009/06/21(日) 19:24:17291さんはPerl歴何ヶ月ですか?
0295デフォルトの名無しさん
2009/06/21(日) 19:38:020296デフォルトの名無しさん
2009/06/21(日) 20:01:18どうでもいいようなtypoで自ら$aの罠にはまってるという。もはやギャグとしか思えんw
0297デフォルトの名無しさん
2009/06/21(日) 22:17:370298デフォルトの名無しさん
2009/06/21(日) 23:41:100299デフォルトの名無しさん
2009/06/22(月) 00:29:590300デフォルトの名無しさん
2009/06/22(月) 01:02:55$hoge->param( TEST => @test);
$hoge->param( TEST2 => $test2);
としていた場合、
<TMPL_LOOP NAME=TEST>
<TMPL_VAR NAME=TEST2>
</TMPL_LOOP>
みたくすると、LOOPの中ではTEST2が呼び出せません。
呼び出す方法はありませんか?
0301デフォルトの名無しさん
2009/06/22(月) 01:20:03http://e-words.jp/w/E382BFE382A4E3839D.html
>>292-299
で、誰も問題に答えない…と(w
0302デフォルトの名無しさん
2009/06/22(月) 01:46:33配列やハッシュの基本的な事覚えたいならオライリーから出てるはじめてのPerlマジお勧めです
0303300
2009/06/22(月) 01:55:190304デフォルトの名無しさん
2009/06/22(月) 02:05:32@a[0]でなく$a[0]なのは、言語仕様のバグとしか思えない
0305デフォルトの名無しさん
2009/06/22(月) 02:41:42結局typo修正したちゃんと動くコードは教えてくれないのかな
0306デフォルトの名無しさん
2009/06/22(月) 03:01:20> @a[0]でなく$a[0]なのは、言語仕様のバグとしか思えない
スカラーだから$になるでしょ。
0307デフォルトの名無しさん
2009/06/22(月) 16:35:51@a[0]は、@aから要素0を取り出した配列って意味になるだろ。
結果ほぼ同じになるけど。
hash slice: @hash{ @array } = ();
0309デフォルトの名無しさん
2009/06/22(月) 18:38:570310デフォルトの名無しさん
2009/06/22(月) 18:43:50リンク先見たけど「僕は馬鹿です^^」って宣言してるの?
0311デフォルトの名無しさん
2009/06/22(月) 19:28:25multiとsimultaneous?
>perldoc -f regular expressionとしてみましたが見当たりませんでした。
ご存知の方教えて欲しいです。
0312デフォルトの名無しさん
2009/06/22(月) 19:32:210313デフォルトの名無しさん
2009/06/22(月) 20:11:11しかしperlreという言葉は思いつきませんでした。
どうやらPerlにおける正規表現の実装を総括した名前のようですね。
>>312さんありがとうございました。
0314デフォルトの名無しさん
2009/06/22(月) 20:38:21みたいなことをして、マッチすればそれが$aに入るけど、
マッチしなかったら何もせずに$aを保存、みたいな書き方ってできない?
0315デフォルトの名無しさん
2009/06/22(月) 20:48:460316デフォルトの名無しさん
2009/06/22(月) 20:48:530317デフォルトの名無しさん
2009/06/22(月) 20:57:21perldoc perl
0318デフォルトの名無しさん
2009/06/22(月) 21:10:05/(pattern)/ and $a = $1;
0319デフォルトの名無しさん
2009/06/22(月) 21:42:20>>314のコードでマッチしなかった場合$aには何が入ってるでしょう
0320デフォルトの名無しさん
2009/06/22(月) 21:58:54undef
http://perldoc.jp/docs/perl/5.10.0/perlop.pod#item__PATTERN_msixpogc
0321デフォルトの名無しさん
2009/06/23(火) 00:57:151個ならそれでも大差ないけど、
($a, $b, $c, $d) =
みたいな書き方が出来るのに、$1, $2, $3, $4とあんまり書きたくない
0322デフォルトの名無しさん
2009/06/23(火) 01:09:04($a, $b, $c, $d) = @{[/(pattern)/]} || ($a, $b, $c, $d);
0323デフォルトの名無しさん
2009/06/23(火) 01:15:140324デフォルトの名無しさん
2009/06/23(火) 01:30:44割と基本的な概念だ
0325デフォルトの名無しさん
2009/06/23(火) 01:41:220326デフォルトの名無しさん
2009/06/23(火) 01:47:370327デフォルトの名無しさん
2009/06/23(火) 01:49:120328デフォルトの名無しさん
2009/06/23(火) 02:19:40$kakaku = "2,500";
$kosuu =~ s/\,//g;
$kakaku =~ s/\,//g;
print "$kosuu\n$kakaku\n\n";
# 複数の変数に対して同条件の置換を行いたいのですが
# なにか簡潔な方法はありますか?もしあれば教えてください。
# ($kosuu,$kakaku) =~ s/\,//g;ではできませんでした。
0329デフォルトの名無しさん
2009/06/23(火) 02:26:240330デフォルトの名無しさん
2009/06/23(火) 02:27:250331デフォルトの名無しさん
2009/06/23(火) 02:35:430332デフォルトの名無しさん
2009/06/23(火) 03:05:14リファレンスは知っているだけで全く使っていませんでしたがこういう使い方が出来るんですね。
$_ =~ s/\,//g for($kosuu, $kakaku);でも動くようなんですが、これでは何かまずい事があるんでしょうか。
>>330
map知りませんでした。配列処理に役立ちそうです。
お二方レスありがとうございました。
0333デフォルトの名無しさん
2009/06/23(火) 04:02:42forは参照渡しだからリファレンスにする必要はない。
0334デフォルトの名無しさん
2009/06/23(火) 09:53:210335デフォルトの名無しさん
2009/06/23(火) 12:06:33繰り返し処理以外の用途で使われている時。
繰り返し処理の際は「エイリアス」として働くが、
それ以外の時は単に省略時の「ターゲット」となるだけ。
http://perldoc.jp/docs/perl/5.10.0/perlvar.pod#item__ARG
0336デフォルトの名無しさん
2009/06/23(火) 14:20:24Time::HiResのalarmとか試みましたが貴様のプラットフォームではつかえねーよと拒否られました。
または定期的に処理を実行させる方法でもいいです(その場合時間経過と共に実際の時計との
差が広がらないのが条件です)
よろしくお願いします。
0337デフォルトの名無しさん
2009/06/23(火) 14:25:37定期的にというのが、分以上なら
cronNTとか使えばだろうだろう
あとは、
全体を
$time = 5;
for(;;) {
sleep($time);
(処理)
}
としたものを起動するとか。
これは、5秒置きに実行してるわけじゃないので注意。
あくまでも処理が終わってから、5秒置いて、再度実行してるだけね。
0338デフォルトの名無しさん
2009/06/23(火) 14:44:50レスありがとう御座います。
定期的は秒ですね。
ちなみに後者のが時間がたつにつれてずれが大きくなっていく可能性がある実装の典型ですね。
cronNTというのは初耳なのでちょっと調べてみます。
0339デフォルトの名無しさん
2009/06/23(火) 17:31:02while(<in>) は?
0340デフォルトの名無しさん
2009/06/23(火) 18:03:510341デフォルトの名無しさん
2009/06/23(火) 18:17:590342デフォルトの名無しさん
2009/06/23(火) 18:27:360343デフォルトの名無しさん
2009/06/23(火) 18:31:10なんでそんなに厳密な間隔で実行させたいの?
0344デフォルトの名無しさん
2009/06/23(火) 19:27:45時計描画したいからです。
0345デフォルトの名無しさん
2009/06/23(火) 19:29:220346デフォルトの名無しさん
2009/06/23(火) 19:30:560347デフォルトの名無しさん
2009/06/23(火) 19:50:000:59→0:58→0:57 ・・・
って感じに表示したいってことかな?
だったら、タイマーイベントを使うなんてのはアプローチからして間違ってる。
現在の時刻(から求められた文字列)をループさせて表示させる方がいい。
my $start = 60;
my $startTime = time();
while(1) {
my $past = time() - $startTime;
printf "%d", $start - $past: (ここ、CRで同行表示に出来るよ)
exit if $past <= $start;
}
0348デフォルトの名無しさん
2009/06/23(火) 19:59:13my $start = 60;
my $startTime = time();
while(1) {
my $past = time() - $startTime;
printf "%d\r", $start - $past;
exit if $past >= $start;
}
これで60〜0まで、同じ行でカウントするよ
描画ってのがラインとか図形って意味なら、printfの行を、図形を描画するルーチンに変えればいいだけ。
0349デフォルトの名無しさん
2009/06/23(火) 21:27:54CPU食いすぎじゃないですか?
0350デフォルトの名無しさん
2009/06/23(火) 21:38:020351デフォルトの名無しさん
2009/06/23(火) 21:54:28んでタイマーイベントの発生のさせ方がわからんのですよ。
0352デフォルトの名無しさん
2009/06/23(火) 21:58:18while(1) の高速ぐるぐるが嫌だったら Time::HiRes::sleep 辺りで寝かせればどう?
0353デフォルトの名無しさん
2009/06/23(火) 22:02:03while(1)で回し続けるなんて、デーモンじゃ普通にやること。
$pastが変わらなかったらprintしない方がいいけど、
そういうこと言いだすとコードが複雑になっていくか
0354デフォルトの名無しさん
2009/06/23(火) 22:09:20sleepは必須だけど、デーモンってのは当にwhile(1)
0355348
2009/06/23(火) 22:17:34my $startTime = time();
my $pastOld;
while(1) {
select(undef, undef, undef, 0.1);
my $past = time() - $startTime;
exit if $past > $start;
printf "%d\r", $start - $past;
$pasOld = $past;
}
これでいいかい?
なんつーか、考え方だけをシンプルに書いただけだから
細かい制御は自分で考えてくれよ
0356348
2009/06/23(火) 22:18:56my $start = 60;
my $startTime = time();
my $pastOld;
while(1) {
select(undef, undef, undef, 0.1);
my $past = time() - $startTime;
exit if $past > $start;
printf "%d\r", $start - $past if $pasOld == $past;
$pasOld = $past;
}
0357348
2009/06/23(火) 22:20:54if $pastOld != $past;
$pastOld = $past;
0358デフォルトの名無しさん
2009/06/23(火) 22:55:58最後に想定した時間に終了するので動いてはいるっぽいですが。
まぁタイマー表示は飾りみたいなもんなのでtimeつかって
定期的に描画するとします。
ありがとうございました。
0359デフォルトの名無しさん
2009/06/24(水) 00:02:120360デフォルトの名無しさん
2009/06/24(水) 03:33:12my $startTime = time();
$|=0;
while(1) {
# sleep(1);
my $past = time() - $startTime;
printf "%d\r", $start - $past;
exit if $past >= $start;
}
このコードは秒が描画されるけどsleepのコメントアウト外すと描画されなくなるね。
不思議。なんででしょうか?環境依存?:This is perl, v5.8.8 built for MSWin32-x86-multi-thread
0361デフォルトの名無しさん
2009/06/24(水) 05:53:51普通に表示される。
This is perl, v5.8.6 built for i386-freebsd
コンソールが追いついてないんじゃない?
0362デフォルトの名無しさん
2009/06/24(水) 09:48:090363デフォルトの名無しさん
2009/06/24(水) 10:03:05たまっちゃうよ。
sleep(1)をとるとものすごい勢いでprintされるから
すぐにバッファあふれて描画されるだろうけど、
そうじゃないと1秒に一回2,3バイト書くだけなので、
全部バッファにたまっちゃう。終了時にまとめて
出たのも多分一瞬でシェルのプロンプトに上書き
されて見えなくなるだろう。
0364デフォルトの名無しさん
2009/06/24(水) 10:07:190365デフォルトの名無しさん
2009/06/24(水) 11:15:09\rでflushされるんじゃなかったっけ?
0366デフォルトの名無しさん
2009/06/24(水) 12:08:31\nならされるけど。
0367デフォルトの名無しさん
2009/06/24(水) 16:34:42なのに、あえて、わざわざ $|=0; してるのは、何か理由があるのか?
たぶん、意味も知らずにコピーしてきたコードなんだろうな。
もういちど、1行1行、意味を考えながらコーディングしようよ。
0368360
2009/06/24(水) 16:38:10>>362 俺タイマーの質問者じゃないよ。
>>363
あぁなるほど、バッファがあふれているんですか。
\rすると以降の文字が上書きされ始めるからバッファがあふれることは無いと思っていたけど、
それは表示上だけの問題で実際のバッファの中には%d\rが積もり積もっていくんですね。
$|=1だとsleepの有無に関わらず表示されるのは分かりきった事ですが、
$|=0にするとsleepの有無で表示結果が変わってしまうのが気になりました。
そこを示す為に原文に無い$|=0を書き足したんですが言葉足らずでした。
よく分かりました。レスどうもありがとうございました。
0369デフォルトの名無しさん
2009/06/24(水) 16:53:58windowsならどこでも実行可能なプログラムを作成する選択肢として
PerlでPARつかうのが楽なのでPerlを選んだというセオリーです。
0370デフォルトの名無しさん
2009/06/24(水) 17:27:430371デフォルトの名無しさん
2009/06/24(水) 17:46:130372デフォルトの名無しさん
2009/06/24(水) 17:48:160373デフォルトの名無しさん
2009/06/24(水) 17:52:56↓
猫でもわかるをみる
↓
なるほどWM_TIMERがきたらWM_PAINTを呼ぶのか。
Perlでもそれくらい楽勝で真似あるよな。
↓
みあたんねーおかしいな。じゃぁPerlでは同じことするとき
いったいどうやるの?
というセオリーです。
0374デフォルトの名無しさん
2009/06/24(水) 18:06:000375デフォルトの名無しさん
2009/06/24(水) 18:11:42Win32APIだったらWin32::API使ってゴソゴソ作るか、
CPANでWin32系のモジュール漁るしかない。
0376デフォルトの名無しさん
2009/06/24(水) 18:45:23実際には数値が入っていない事ってあるのでしょうか?
メインとなる「index.cgi」と他のモジュールを分けて使いっています。
最初に別のファイルでPOST/GETデータをエンコードさせ、
「return %hash;」の形で下記ように戻しました。
%reEnc = ENC::enc();
そのファイルを再び下記のように別のファイルに渡しました。
fileLoad::FileSet(\%reEnc);
その後に見た目上は滞りなく処理が進むのですが、
サーバーのログには下記のようにエラーが出てしまいます。
(※確かにエラー行では"reEnc"からデータを取り出し"$value"に入れてます。
index.cgi: Use of uninitialized value $value in string eq at fileLoad/FileSet.pm line *.
当然何かおかしいと思い色々と弄っていたのですが、基本となる「index.cgi」上で、
「%reEnc」のデータを「print」してみたのですが、それは画面上には表示されます。
しかし、if構文で処理させようとすると、その数値が「ない」と判断されてしまいます。
print $reEnc{'pointA'}; ← これは「pointA」の値がちゃんと表示される。
if(!$reEnc{'pointA'}){ print "ない";} ←しかしこの構文では「ない」が表示されてしまう。
でも、何故か表示上は最後まで処理がされてしまうのです。これは一体全体何故でしょうか?
どう考えてもいろいろ駄目な感じはしますが、何カ所かでエラーチェックはかけていますし、
その数値が無ければファイルが呼び出せない「はず」の部分も存在します。
が。何故か処理が進んでしまうのです…。解せぬ。ということで、ご教示願いしまう。
0377デフォルトの名無しさん
2009/06/24(水) 19:09:280が入ったんじゃね〜の〜
0378デフォルトの名無しさん
2009/06/24(水) 21:01:190379デフォルトの名無しさん
2009/06/24(水) 22:07:40最初それをやっていて、「自分大馬鹿」と思っていたのですが、
アルファベットにしても同じでした。
>>378
エラー行というほどの物でもなく、>>>376にある通りに、
画面に表示させると表示ができる。
変数として使おうとすると、何故か存在しなくなるのです。
もしかしたら別ファイルにあるサブジェクトに渡すところで、
何かしらの問題がでているのではないかとも思ったりと…。
0380デフォルトの名無しさん
2009/06/24(水) 22:22:17だからここのコード晒さないのが質問者の態度か?
答えて欲しいなら勝手な判断でネタ隠すな
0381デフォルトの名無しさん
2009/06/24(水) 22:23:46use strict してないから変数名間違っててもわかんないとか?
なんにせよどこでデータがとんでるかプリントデバッグしたらわかるんじゃね?
>別ファイルにあるサブジェクト
別モジュールのサブルーチンの事だよな?
0382デフォルトの名無しさん
2009/06/24(水) 22:24:070383デフォルトの名無しさん
2009/06/24(水) 22:34:29print $reEnc{'pointA'};
if(!$reEnc{'pointA'}){ print "ない";}
「UNKO」とだけ表示される。「ない」は表示されない。
0384デフォルトの名無しさん
2009/06/24(水) 22:41:03うん、正しいね
0385デフォルトの名無しさん
2009/06/25(木) 02:30:330386デフォルトの名無しさん
2009/06/25(木) 08:41:45何言ってんだお前
0387376
2009/06/25(木) 11:35:53>>382の発言でようやく色々なモノに気付き旅に出ます…。
スレ汚しすみませんでした。"Perl"の質問じゃねぇよ。コレ…。
0388デフォルトの名無しさん
2009/06/25(木) 19:13:11ハッシュのキーは同じで値を区別したいので三つのハッシュを使って
データの処理を行っています。データ処理の結果を表示するときに困っています。
具体的にはデータファイルの書式が
aho,34,23,32
baka,31,22,11
manuke,32,22,11
aho,22,22,33
となっており3つのカンマでデータがそれぞれ区切られてます。
そこで1列目(aho,baka,manuke)をキーにして2列目、3列目、4列目の値を
3つのハッシュ(%a,%b,%c)を使って縦方向に足し算しています。
ファイルの終わりにきたら結果を表示するために
foreach $name (sort keys %a){
print "$a[$name]";
}
としてひとつひとつハッシュの値を表示してるのですが、
できればforeachの中に%bと%cのハッシュ値を%aの値と同時に表示したいのですが
どうすればいいでしょうか?
0389デフォルトの名無しさん
2009/06/25(木) 19:31:43$hash->{aho} = \ qw/34 23 32/;
$hash->{baka} = \ qw/31 22 11/;
$hash->{manuke} = \ qw/32 22 11/;
for $n (0..3) {
for $name (keys %$hash) {
print $hash->{$name} , $hash->{$name}->[$n];
}
}
0390デフォルトの名無しさん
2009/06/25(木) 19:32:53その場合は、for文順序逆で。
0391デフォルトの名無しさん
2009/06/25(木) 19:33:42どんなことがしたいのかよくわからん。
aho,34,23,32 →34+23+32を出力
baka,31,22,11 →31+22+11を出力
manuke,32,22,11→32+22+11を出力
aho,22,22,33 →22+22+33を出力
こういう事?
0392デフォルトの名無しさん
2009/06/25(木) 19:37:26foreach $name (sort keys %a){
print "$a[$name] $b{$name} $c{$name}\n";
}
でよくね?
0393デフォルトの名無しさん
2009/06/25(木) 19:40:16現状のソースを貼って、同じ結果になるより良い方法を教えて下さいと書くべき
0394デフォルトの名無しさん
2009/06/25(木) 19:53:32すいません。
期待する出力としては
2列目の値を足し算
aho:34,22 →34+22を出力
baka:31 →31を出力
manuke:32 →32を出力
3列目の値を足し算
aho:23,22 →23+22を出力
baka:22 →22を出力
manuke:22 →22を出力
4列目の値を足し算
aho:32,33 →32+33を出力
baka,11 →11を出力
manuke:11 →11を出力
これの結果として
aho,56,45,65
baka,31,22,11
manuke,32,22,11
を得たいです。
単純に>>392さんの方法でできました。
お騒がせしました。
0395デフォルトの名無しさん
2009/06/25(木) 21:10:46解決したなら良かった。
0396デフォルトの名無しさん
2009/06/26(金) 14:08:44以下ハング箇所最新5行のログです。
C:\strawberry\perl\bin\perl.exe "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib\lib', 'blib\arch')" t/*.t
t/100_load.t ...... ok
t/110_compare.t ... ok
t/120_single.t .... ok
t/200_bl_ex.t ..... 5/22 ※5からすすみません。もう何十分か経過しています。
メモリ使用量をみると、じわじわと増加しています。
これがリークなのかテストしているのか分かればいいのですが。
このまま待つべきでしょうか?
ちなみに環境はXPsp2のstrawberry perlです。
0397デフォルトの名無しさん
2009/06/26(金) 14:40:32もうちょっと何のモジュールのテスト中かわかるぐらいのログを貼って
欲しかったが、これ?
ttp://rt.cpan.org/Public/Bug/Display.html?id=40185
NFSなんてつかってないだろうから無視して先に進むのもありかな。
0398デフォルトの名無しさん
2009/06/26(金) 14:55:41Writing Makefile for File::NFSLock
cp lib/File/NFSLock.pm blib\lib\File\NFSLock.pm
C:\strawberry\perl\bin\perl.exe "-Iblib\arch" "-Iblib\lib" File-NFSLock.spec.PL File-NFSLock.spec
BBB/File-NFSLock-1.20.tar.gz
C:\strawberry\c\bin\dmake.EXE -- OK
Prepending blib/arch and blib/lib of 38 build dirs to PERL5LIB; for 'test'
Running make test
では無視するにはどうすればいいのでしょうか?ctrl+cでいいんでしょうか?
0399デフォルトの名無しさん
2009/06/26(金) 19:23:110400デフォルトの名無しさん
2009/06/26(金) 19:41:18print `grep aaa *.txt`;
みたいなことをして、結果を逐次表示させたいんだけど、
全部終わってからに一気に表示される
本当は
print $result = `grep aaa *.txt`;
みたいにしたいけど、とりあえずその前段階で詰まってる
なにかいい方法は無いかな
環境はXPでactiveperl
0401デフォルトの名無しさん
2009/06/26(金) 20:15:50パイプでどうだ。
open(GREP, "grep aaa *.txt |") or die;
while (<GREP>) {
print $_;
}
1行ずつは無理だけど。grepの出力バッファサイズごとに、ドカッ、ドカッ、と出てくるはず
0402デフォルトの名無しさん
2009/06/27(土) 00:27:12がんがん出力がある状態だと大差ないけど、
ちょろちょろとしか出力が無いと、結局最後に全部まとめて、みたいなことになる
0403デフォルトの名無しさん
2009/06/27(土) 01:17:05そういう時はパイプを前に付けるといいよ。何でかは誰かが答えてくれる。
0404デフォルトの名無しさん
2009/06/27(土) 01:35:08意味が判らない
でもちゃんと動いている
0405デフォルトの名無しさん
2009/06/27(土) 02:34:340406デフォルトの名無しさん
2009/06/28(日) 00:38:13print 1+2;
みたいなことをして、結果を逐次表示させたいんだけど、
全部終わってからに一気に表示される
本当は
1 2 3
みたいに表示したいけど、なぜか 3 だけ表示されて困ってる
なにかいい方法は無いかな
環境はXPでactiveperl
0407デフォルトの名無しさん
2009/06/28(日) 02:09:01> $|=1;
> print 1+2;
だけなら 3 だけ表示されるに決まってるけど?
「逐次表示」させたくてどんなコードを書いてるのかを晒さなきゃ。
試しに
$| = 1;
for (1..3) { print $_, " "; sleep(1) }
というコードで実行したら、ちゃんと1秒ごとに1 2 3が順次表示されました。
0408デフォルトの名無しさん
2009/06/28(日) 02:25:560409デフォルトの名無しさん
2009/06/28(日) 04:27:54それ1+2が計算されてその結果の3が出てるんだよ。
$|=1;
print "1 ";
sleep(1);
print "2 ";
sleep(1);
print "3";
0410デフォルトの名無しさん
2009/06/28(日) 11:53:46print 1..3;
0411デフォルトの名無しさん
2009/06/28(日) 12:03:510412デフォルトの名無しさん
2009/06/28(日) 13:00:530413デフォルトの名無しさん
2009/06/28(日) 19:28:240414デフォルトの名無しさん
2009/06/28(日) 22:44:270415デフォルトの名無しさん
2009/06/28(日) 23:09:14単にもっと馬鹿が来ただけの話
0416デフォルトの名無しさん
2009/06/28(日) 23:22:41えっ?
0417デフォルトの名無しさん
2009/06/29(月) 12:42:08下記のコードの3行目と5行目が何をしているのかわかりません。
特に3行目の@{ $form_data{$name} }っていう書き方を見たことがないので
どういう配列を作っているのかがわかりません。
なぜrefで判定する必要があるのかもわからないので
詳しい方教えて下さい。
if(exists $form_data{$name} ) {
if(ref $form_data{$name} ) {
push @{ $form_data{$name} } , $value;
} else {
$form_data{$name} = [$form_data{$name} } , $value ];
}
else {
$form_data{$name} = $value;
}
0418417
2009/06/29(月) 12:50:47たとえば、$form_data{$name}の値が0x1919だったら
3行目で@0x1919っていう名前の配列を作っているということなんでしょうか?
その辺がいまいちわからないのです
0419デフォルトの名無しさん
2009/06/29(月) 13:19:480420デフォルトの名無しさん
2009/06/29(月) 13:24:46ダンプして調べればいいだけ
0421デフォルトの名無しさん
2009/06/29(月) 13:26:320422デフォルトの名無しさん
2009/06/29(月) 13:42:490423デフォルトの名無しさん
2009/06/29(月) 13:43:11my %form_data = (
a => 'b',
c => [ 'e' ],
);
こういう感じのハッシュがあった時に$nameがcだとすると、$form_data{'c'}は配列のリファレンスだから
ref $form_data{$name}は真になる。
で、その配列の次の要素に$valueを入れたいから3行目の書き方になる
push @{ 配列のリファレンス }, value
要は@{ 配列のリファレンス }が配列を表してる。@arrayと同じだと思えばいい。
push @array, value
と同じ。
で、$nameがaだとすると、ref $form_data{$name}は偽になるので5行目にいく
bをそのまま残したいから配列のリファレンスを作って、その次の要素にvalueを入れてる
つか、配列かどうかを考えるならわかりやすいように2行目を
ref $form_data{$name} eq 'ARRAY'
って俺なら書くな。HASHの場合がないからこういう書き方なんだろうけど。
リファレンスわからないなら
my $array_ref = [0, 1, 2];
for (@{ $array_ref }) { warn $_; }
my @array = (0, 1, 2);
for (@array) { warn $_; }
とか、簡単なのを色々実行して実際に試したらいいよ。
use Data::Dumper;
print Dumper 変数;
ってやると変数がリファレンスかどうかもわかるし
0424デフォルトの名無しさん
2009/06/29(月) 13:44:47if( !exists $form_data{$name} ) {
$form_data{$name} = $value;
} elsif( ref $form_data{$name} ) {
my $ref = $form_data{$name};
push @$ref, $value;
} else {
my $ref = [];
push @$ref, $form_data{$name};
push @$ref, $value;
$form_data{$name} = $ref;
}
上記のようにした場合、どこが不明なのか?
その不明な部分をperldocから参照しろ。
0425417
2009/06/29(月) 15:56:25よーくわかりました
ありがとうございます。
0426デフォルトの名無しさん
2009/06/29(月) 18:30:23あるCGIプログラムを実行したところ
Can't locate CGI/Carp.pm と出ました。
どうやら
use CGI::Carp qw(fatalsToBrowser);
でエラーが出るようです。
ところが、
find `perl -e 'print "@INC"'` -name '*.pm' -print
でモジュール一覧を見たら
/usr/lib/perl5/5.8.0/Carp.pm
とCarp.pmが入ってるようです。
こんな事ってあり得るのでしょうか?
また、どのようにしたら、エラーが起こらず動作するようになりますか?
RHE3 perl5.8.0 です
0427デフォルトの名無しさん
2009/06/29(月) 19:36:10ttp://search.cpan.org/~lds/CGI.pm-3.43/CGI/Carp.pm
別のもの
0428デフォルトの名無しさん
2009/06/30(火) 01:07:280429デフォルトの名無しさん
2009/06/30(火) 01:33:10入ってるはずなんだけどな。
/usr/lib/perl5/5.8.0/CGI/Carp.pm
が存在するのなら動作しているスクリプトで@INCにちゃんとディレクトリが
含まれているか確認した方がいいと思う。
あとset uidしてtaint modeになってる場合は@INCに制限が掛かる。
0430デフォルトの名無しさん
2009/06/30(火) 05:16:49flockが一番手軽で確実そうだと思ったのですが、どこを見ても環境に依存してしまうためあまり使われていないとの記述がありました。
具体的に動作しない環境はどのようなものになるのでしょうか?
現在Perlコードを動作させる予定のターゲット環境は複数あるのですが、基本的に全てGNU/Linux(一番古いもので、RedHat7.0位)か*BSD(FreeBSDかNetBSD)になります。
Perlのバージョンは、全て5以降になります。
このような環境でも、使用できない場合などございますでしょうか?
0431デフォルトの名無しさん
2009/06/30(火) 05:48:030432デフォルトの名無しさん
2009/06/30(火) 06:28:30YAMLでシリアライズ/デシリアライズする実験をしていました
以下に示した上のコードを端末から実行したところ、Undefined subroutine &main:: called at -e line 7. と言われました
下のコードを実行したときはちゃんと "hello\n" が表示されました
$yamlをダンプした結果は上下とも、sub{ print "hello\n"} が入っていました(なぜか下では use strict 'refs' が頭に入っていました)が、
$obj2 = YAML::Load($yaml); の後のタイミングでダンプしてみると 上のコードでは hello => undef でした
違いは use strict のみだと思うんですが、どうして下で hello が undef になるようなことが起こったのでしょうか
my $obj = { hello => sub { print "hello\n";}, name => "hgoe"};
use YAML; $YAML::UseCode = 1;
my $yaml = YAML::Dump($obj);
warn $yaml;
my $obj2 = YAML::Load($yaml);
$obj2->{hello}->();
use strict;
my $obj = { hello => sub { print "hello\n";}, name => "hgoe"};
use YAML; $YAML::UseCode = 1;
my $yaml = YAML::Dump($obj);
warn $yaml;
my $obj2 = YAML::Load($yaml);
$obj2->{hello}->();
0433デフォルトの名無しさん
2009/06/30(火) 09:10:23unix系OSでローカルファイルシステムならまず大丈夫。
NFSで共有したファイルを複数のホストからロックする
とかいうときには問題になりやすいけど。
0434デフォルトの名無しさん
2009/06/30(火) 09:19:49>>433に同意。flockはNFSを使わないBSD/SystemV/Linux系ならまず大丈夫。
NFSの場合はlockfを使うんだっけか。
Windowsは知らん。
0435デフォルトの名無しさん
2009/06/30(火) 14:33:200436デフォルトの名無しさん
2009/06/30(火) 14:43:12UTF-8なら、Unicodeブロックでぐぐれ
0437435
2009/06/30(火) 18:58:36UTF-8へエンコードしてからUnicodeブロックを用いて検索しましたが、エンコード周りでうまくいかなかったようでダメでした
代わりにShift-JIS用の正規表現ライブラリ「ShiftJIS::Regexp」を見つけてそれを使って解決しました
0438デフォルトの名無しさん
2009/06/30(火) 23:28:30CGIじゃ常識だよ?
0439デフォルトの名無しさん
2009/07/01(水) 00:36:45A.環境に依存しないファイルロックならロックファイル方式がいいよ!CGIじゃ常識だよ?
0440デフォルトの名無しさん
2009/07/01(水) 06:34:53ロックファイル?OSによっちゃロックに失敗するぞ。
symlinkかディレクトリ作る方が強固。
http://www.din.or.jp/~ohzaki/perl.htm#File_Lock
0441デフォルトの名無しさん
2009/07/01(水) 07:47:41とターゲットを限定しているけど、どうせ開発・デバッグはWindowsでやるんだろ?
悪いクセをつけないためにも、OSに依存するような実装は避けた方がいいよ。
「今さえよければいいんだ、将来どうなっても知らない。明日のことは明日考えればいいんだ。」
そんな気持ちじゃダメだな。
0442デフォルトの名無しさん
2009/07/01(水) 07:50:210443デフォルトの名無しさん
2009/07/01(水) 08:18:45どうちがうのですか?
0444デフォルトの名無しさん
2009/07/01(水) 09:04:17そんな馬鹿な
0445デフォルトの名無しさん
2009/07/01(水) 09:14:33前者は任意のスコープを取り得るが、後者はlocalスコープしか取れない。
0446デフォルトの名無しさん
2009/07/01(水) 12:44:44> どうせ開発・デバッグはWindowsでやるんだろ?
自分がそうなんですね、分かります。
0447デフォルトの名無しさん
2009/07/01(水) 22:32:530448デフォルトの名無しさん
2009/07/01(水) 22:45:05my $func1 = 'Fuge';
my $func2 = 'Hoge';
no strict "refs";
*{"$func1"} = \&{"$func2"};
Hoge;
Fuge(); #これを上のやつみたいに()省略して呼ぶにはどう書けばいいんでしょう
sub Hoge{
print 'hogehoge';
}
0449デフォルトの名無しさん
2009/07/01(水) 23:22:10こんな感じでは無理?
実験してないから知らんけど
0450デフォルトの名無しさん
2009/07/01(水) 23:30:37どうにも上手く動かない模様です。
0451デフォルトの名無しさん
2009/07/02(木) 02:09:170452デフォルトの名無しさん
2009/07/02(木) 09:28:48コンパイル時にサブルーチンだとわかってないとbaar wordに
なってしまいカッコは省略できない。そもそも元のプログラムじゃ
sub Hogeの定義が遅いのでHoge;もエラーになるだろ。
1. Fuge;の呼び出しより前の位置でBEGINブロック内でやる。
BEGIN {
*{"$func1"} = \&{"$func2"};
}
2. Fugeという名前がわかってるんだからプロトタイプだけでも宣言しておく。
sub Fuge;
0453デフォルトの名無しさん
2009/07/02(木) 17:49:44完璧な解答ありがとうございます。
どちらの方法でもうまくいきました。
0454デフォルトの名無しさん
2009/07/03(金) 22:35:55print "func(5)"; #5×4×3×2×1
sub func()
{
(my $n) = $_;
if($n = 1){
return 1;
}
else{
return $n * func($n);
}
}
0455デフォルトの名無しさん
2009/07/03(金) 22:37:420456デフォルトの名無しさん
2009/07/03(金) 22:47:080457デフォルトの名無しさん
2009/07/03(金) 22:55:47#!/usr/bin/perl
$ans = func(5);
print "$ans"; #5×4×3×2×1
sub func()
{
(my $n) = $_;
if($n == 1){
return 1;
}
else{
return $n * func($n-1);
}
}
exit;
0458デフォルトの名無しさん
2009/07/03(金) 23:01:46> (my $n) = $_;
ここがおかしいからマニュアルをよく読みなおせ。
あとは問題ない。
0459デフォルトの名無しさん
2009/07/03(金) 23:09:38subルーチン内では特殊変数$_ではなく配列にコピーされるんですね。
#!/usr/bin/perl
$ans = func(5);
print $ans; #5×4×3×2×1
sub func()
{
(my $n) = $_[0];
if($n == 1){
return 1;
}
else{
return $n * func($n-1);
}
}
exit;
0460デフォルトの名無しさん
2009/07/03(金) 23:11:20宿題やる。
・コード
$ans = add(1,5);
print "$ans";
・結果
6
関数addを定義してみ。
0461デフォルトの名無しさん
2009/07/03(金) 23:14:41#!/usr/bin/perl
$ans = add(1,5);
print $ans;
sub add()
{
(my $n1, my $n2) = ($_[0],$_[1]);
return $n1 + $n2;
}
exit;
0462デフォルトの名無しさん
2009/07/03(金) 23:15:280463デフォルトの名無しさん
2009/07/03(金) 23:20:19でいいよ。きもい。
0464デフォルトの名無しさん
2009/07/03(金) 23:34:46は「引数なしの関数」だぞ。use strict; ではエラーになる
値渡しの引数を2個とる関数は
sub add($$) {〜}
と書く
0465デフォルトの名無しさん
2009/07/03(金) 23:35:32$ans = add(1,5);
print $ans;
sub add() {
return $_[0]*10-$_[1]+1;
}
0466デフォルトの名無しさん
2009/07/03(金) 23:42:190467デフォルトの名無しさん
2009/07/03(金) 23:59:21sub add($$)
{
my $n1 = shift @_;
my $n2 = shift @_;
return $n1 + $n2;
}
sub add($$)
{
return $_[0] + $_[1];
}
sub add(){
my $wa = 0;
foreach(@_){
$wa += $_;
}
return $wa;
}
sub add(){
my($n1,$n2) = (shift, shift);
return $n1 + $n2;
}
sub add(){
my $n1 = pop;
my $n2 = pop;
return $n1 + $n2;
}
0468デフォルトの名無しさん
2009/07/04(土) 00:08:46sub add(){
shift;
shift;
return 6;
}
0469デフォルトの名無しさん
2009/07/04(土) 00:16:04return 6ってwww
ドンだけ決めうちww
0470デフォルトの名無しさん
2009/07/04(土) 00:17:11@array = ('aiueo',"hoge",'muge');
配列の各要素に'aiueo''hoge''muge'が格納されてますが、
この後使い終わって不要になったら
@array = ();
とすることで中身を空にできます。
C言語のmallocみたいにOSからメモリ借りて使い終わったらfreeで返す
のと似てるんですが、実際のところどうなってるんですか。
@array = ()とすることでメモリが溜めていたメモリが解放されるんだと
思っていいです?
0471デフォルトの名無しさん
2009/07/04(土) 00:29:31NO
0472デフォルトの名無しさん
2009/07/04(土) 00:38:37メモリは解放されないけど、基本的には正しい。
参照しなくなったデータはガベージコレクションの対象になる。
ただし、C言語のfreeしてもOSに返すわけじゃないし、freeしてもプロセスの
使用メモリサイズが減ることもない。
0473デフォルトの名無しさん
2009/07/04(土) 00:41:06perl ではないが、実際これに近い例があった訳だがw
程度の差はあれ、よくあるケースだよね。
>>460 のテストケースだけだったら、彼等ならやりかねない。
0474デフォルトの名無しさん
2009/07/04(土) 18:33:24具体的にどういうときにつかうのでしょうか?
0475デフォルトの名無しさん
2009/07/04(土) 21:01:43sub plot ($$$$){
my ($fn, $min, $max, $step) = @_;
for ($min; $min <= $max; $min += $step){
for (my $num = &$fn($min); $num > 0; --$num){
print '*';
}
print "\n";
}
}
&plot(
sub{
my $x = $_[0];
return $x * $x;
},
1, 5, 2 #1〜5まで2刻みで無名関数にデータを渡してプロットさせる
);
0476デフォルトの名無しさん
2009/07/04(土) 22:15:50そういうのをやるときは、「関数が渡される引数」のプロトタイプを"&"にしとくとカッコイイよ
sub plot(&$$$) { #最初の引数を"&"に変えた
my ($fn, $min, $max, $step) = @_;
for (my $num = $min; $num <= $max; $num += $step) { print '*' x $fn->($num), "\n"; }
}
plot(sub { return $_[0] ** 2; }, 1, 5, 2); # >>475と同じ呼び出し方
plot { return $_[0] ** 2; } (1, 5, 2); # こういう省略形でも書けてうれしい
0477デフォルトの名無しさん
2009/07/05(日) 16:39:51( "foo","bar","baz",)
とあったとすると、
"foo,bar,baz"
としたいです。
私が考えたのは、foreachでカンマ区切りで文字列結合をしていく方法ですが、他に方法があればと思い質問させていただきました。
0478デフォルトの名無しさん
2009/07/05(日) 16:44:13Perlプログラムを作っているのですが、下記のようなエラーが出てうまく動きません。
Can't locate Net/SSH/Perl.pm in @INC (@INC contains: C:/Perl/site/lib C:/Perl/lib .)
test_ssh.pl内の「use Net::SSH::Perl;」の行でエラー出てます。
PPMを使ってNet-SSH(ver0.09)をインストールしてますが、何が悪いのか良く分かりません。。どなたかご教授願います。
ActivePerlはv5.10.0です。
0479デフォルトの名無しさん
2009/07/05(日) 16:52:50join
0480デフォルトの名無しさん
2009/07/05(日) 16:55:32ずばりjoin
print join(",", ("foo", "bar", "baz",));
0481デフォルトの名無しさん
2009/07/05(日) 16:57:090482デフォルトの名無しさん
2009/07/05(日) 16:59:56単に Net::SSH はあっても Net::SSH::Perl がないんじゃないの?
ttp://search.cpan.org/dist/Net-SSH-Perl/
0483477
2009/07/05(日) 17:00:41何か簡略した記法があるかと思い質問させていただいたのですが、まさにまんまの関数が用意されていたのですね・・。
助かりました。ありがとうございます。
0484デフォルトの名無しさん
2009/07/05(日) 17:11:16スカラーを渡したら「要素数1の配列のリファレンス」とみなすってことか?
0485デフォルトの名無しさん
2009/07/05(日) 17:21:19どうせつめいしたらいいのかわからないのですが、現在は
my @array = ( $scalar)
hoge( \@array);
とクッションをおいてわたしているのですが、スマートな方法はありませんか。
0486デフォルトの名無しさん
2009/07/05(日) 17:22:230487デフォルトの名無しさん
2009/07/05(日) 17:28:11よく分からんけど書いてみた
my $ref = [qw(foo bar)];
my $scl = 'hoge';
huga($ref);
huga($scl);
sub huga($){
my @ary;
ref $_[0] eq 'ARRAY' ? push @ary, @{$_[0]} : push @ary, $_[0];
print join ', ', @ary;
print "\n";
}
0488デフォルトの名無しさん
2009/07/05(日) 17:37:01>>481が知りたかったのは>>486だと思うよ。
0489デフォルトの名無しさん
2009/07/05(日) 17:49:15あとは>>481の意図が>>486なのか>>487なのかってことだ
0491デフォルトの名無しさん
2009/07/06(月) 00:41:000492デフォルトの名無しさん
2009/07/07(火) 14:23:27perlとMechanizeのバージョンを上げたところ内部でUTF-8に自動変換
されるようになったようでEUCで書かれたサイトからGETしても
$mech->content()するとUTF-8にデーコードされた内容が返ってきます。
とりあえず一部応急処置的に「$mech->response->content()」
とやる事で受け取る側の処理は問題なくなったのですが
$mech->field("hoge"=>"EUCコードの文字");
とやるとEUCコードがUTF-8に変換されて自動送信され
相手側の方で文字化けした状態で表示されます。
UTF-8ではなくEUCコードでPOST or GETしたいような場合はどのようにすればよいでしょうか?
0493デフォルトの名無しさん
2009/07/07(火) 19:43:250494デフォルトの名無しさん
2009/07/07(火) 19:47:540495デフォルトの名無しさん
2009/07/08(水) 10:59:03サンプルスクリプトを見ていると、画像のアップロードを行った後にFile::Copyにてファイルをディレクトリにコピーしているのですが、コピーしているということは元ファイルがあるのでしょうか?
それともCGIの引数で渡されたものが、メモリに格納されているだけでディスク上にはなく、メモリからコピーしていると考えていいのでしょうか?
0496デフォルトの名無しさん
2009/07/08(水) 11:07:08また、perldocに振られている番号の割り当てを調べたのですが、一覧がありませんでした。
番号の一覧を書いているサイトはありませんでしょうか。
0497デフォルトの名無しさん
2009/07/08(水) 11:07:59ファイル出力を見てみ
0498デフォルトの名無しさん
2009/07/08(水) 11:16:130499デフォルトの名無しさん
2009/07/08(水) 11:18:27File::Copyはファイルからファイルにコピーしかしないので、
そこに到達する前のどこかでファイルに書いているんだろう。
例えば標準のCGIモジュール使ってたら自動的にやってくれる。
0500デフォルトの名無しさん
2009/07/08(水) 11:19:48Module::CoreList使うのは?
0501496
2009/07/08(水) 11:59:03ありがとうございます。
私が行いたいことを書いてなかったので、うまく説明ができていなかったようですので、さいど書き込みをさせていただきます。
私が行いたいことは、現在Perlを利用したプログラムを作成しているのですが、あるモジュールがどのバージョンから標準モジュールとして取り入れられているかがしりたいです。
これは、そのプログラムの動作環境としてPerl単体のバージョンの表記を行いたいためにかんがています。
0502デフォルトの名無しさん
2009/07/08(水) 12:31:15Module::CoreListがコアモジュールになったのはPerl5.8.9からです。
0503デフォルトの名無しさん
2009/07/09(木) 02:41:19for(65..90){
my $i = sprintf "%X", $_;
print "\x"."$i";
}
としてみたのですが、 [NULL]41[NULL]42[NULL]43・・・・・
と表示されてしまいます。(\xと数字がペアになってくれない)
何か良い方法はありませんか?
0504デフォルトの名無しさん
2009/07/09(木) 02:50:07print pack 'C',$_;
}
0505デフォルトの名無しさん
2009/07/09(木) 02:58:050506デフォルトの名無しさん
2009/07/09(木) 05:44:240507デフォルトの名無しさん
2009/07/09(木) 11:02:160508デフォルトの名無しさん
2009/07/09(木) 11:35:330509デフォルトの名無しさん
2009/07/09(木) 12:15:24まずはプロファイラでどこに時間がかかってるか調べること。
話はそれからだ。
0510デフォルトの名無しさん
2009/07/09(木) 15:50:23設計からやり直す。
0511デフォルトの名無しさん
2009/07/09(木) 17:37:34漏れに委託する
0512デフォルトの名無しさん
2009/07/09(木) 17:42:59マジレスするとマシンに金かける。
0513デフォルトの名無しさん
2009/07/09(木) 17:44:50新幹線の中で実行する
0514デフォルトの名無しさん
2009/07/09(木) 17:47:40相対性理論によると、移動中の物体を地表から観測すると移動中の物体は
時間がゆっくり進んでいるように見えるはずだが。
0515デフォルトの名無しさん
2009/07/09(木) 18:07:52うは…手厳しい…
ガチでシステムの処理速度を改善しようってわけではなく、
とりあえず最適化ってやつの練習をしてみようと思いたった次第です
自作セッション管理モジュールで実験したところそれなりに高速化できたと思われるので、
更なる高速化を目指し、インライン展開以外に何か劇的に改善するためのポピュラーな手法がないのかなと…
0516デフォルトの名無しさん
2009/07/09(木) 18:11:05500m 先を 300km で走る新幹線よりも
1m 先を 100km で走る自動車の方が速い
0517デフォルトの名無しさん
2009/07/09(木) 18:12:51ただのアホだろ
0518デフォルトの名無しさん
2009/07/09(木) 18:19:260519デフォルトの名無しさん
2009/07/09(木) 18:24:400520デフォルトの名無しさん
2009/07/09(木) 18:37:260521デフォルトの名無しさん
2009/07/09(木) 22:18:34おそらくあなたの書くコードは、インライン展開なぞするまえに
やるべきことが100くらいあるはず。
0522デフォルトの名無しさん
2009/07/09(木) 23:07:34インライン展開すると速くなるってのは自分で調べたの?
0523デフォルトの名無しさん
2009/07/10(金) 19:19:49できました
ありがとうございました
0524デフォルトの名無しさん
2009/07/10(金) 22:11:41文字列をバイナリで読み込んで、
$str =~ /[\x00-\x1f]/
という表示できなさそうな文字チェックをした時に、
\x1a を含んだ文字列がしれっとパスしてしまいますが、何故ですか
0525デフォルトの名無しさん
2009/07/11(土) 00:12:02ありがとうございます
とりあえずやってみてます
mapのほうがforeachより速かったのはビックリでした
>>519
やっぱりラクダ本は必要ですか。。。
Perl6のが出るまで我慢しようかと思ってましたが。。。
>>522
そうです
どこかで聞きかじってはいたんですが、具体的にどうすれば展開されるかは調べるまで知りませんでした
0526デフォルトの名無しさん
2009/07/11(土) 00:15:01その文字列をバイナリダンプしたら、含まれてる筈の\x1aが無かったりしないか?
とりあえず再現コードくらいは書け。
0527デフォルトの名無しさん
2009/07/11(土) 00:18:11他人にもわかるように書けよ
0528デフォルトの名無しさん
2009/07/11(土) 00:34:50チェックしてない
0529デフォルトの名無しさん
2009/07/11(土) 05:13:18なんかのミスだろ。Perlは0x1Aを特別視しないし。
#!/usr/bin/perl
$str1 = "123". chr(0x1a);
$str2 = "123";
print "str1 has 0x1a\n" if $str1 =~ /[\x00-\x1f]/;
print "str2 has 0x1a\n" if $str2 =~ /[\x00-\x1f]/;
__END__
% perl test.pl
str1 has 0x1a
_
0530デフォルトの名無しさん
2009/07/11(土) 05:33:22現象だけを抽出したサンプルを書こうとすると、ちゃんと動く
多分、getc 周りだったんだと思う
0531デフォルトの名無しさん
2009/07/11(土) 09:02:10> 現象だけを抽出したサンプルを書こうとすると、ちゃんと動く
それは質問する前に最低限しておくべきことだろ。
自分は正しいと思う心が原因不明のバグの一番の発生源だからな。
0532デフォルトの名無しさん
2009/07/11(土) 10:54:26うちも問題なく動いた
% cat > a.pl
#!/usr/bin/perl
$str1 = "123". chr(0x1a);
$str2 = "123";
print "str1 has 0x1a\n" if $str1 =~ /[\x00-\x1f]/;
print "str2 has 0x1a\n" if $str2 =~ /[\x00-\x1f]/;
__END__
^C
% perl a.pl
str1 has 0x1a
0533デフォルトの名無しさん
2009/07/11(土) 11:09:340534デフォルトの名無しさん
2009/07/11(土) 13:37:11ttp://d.hatena.ne.jp/higepon/20080602/1212385423
なるほどね(´・ω・`)
0535デフォルトの名無しさん
2009/07/11(土) 14:10:030536デフォルトの名無しさん
2009/07/11(土) 14:33:15よく分からんけどモジュール化して使うとこで use してやればいいんじゃないかな
0537デフォルトの名無しさん
2009/07/11(土) 14:51:43だな。簡単なコード書いてみた
#---------------------- main.pl
use strict;
use MyData;
print "$scalar\n";
print "@array\n";
print "@{[%hash]}\n";
#--------------------- MyData.pm
package MyData;
use strict;
use Exporter;
our @ISA = qw(Exporter);
our $scalar = 1;
our @array = (1 .. 5);
our %hash = (foo=>6, bar=>7);
our @EXPORT = qw($scalar @array %hash);
1;
0538デフォルトの名無しさん
2009/07/11(土) 19:34:54変数が数十になると、めんどいじゃないか。
0539デフォルトの名無しさん
2009/07/11(土) 20:03:570540デフォルトの名無しさん
2009/07/11(土) 20:25:400541デフォルトの名無しさん
2009/07/11(土) 20:34:25ていうか、>>209で答が出てるじゃん
こういうのは、フツーの方法を使っとけばいいんだよね
0542デフォルトの名無しさん
2009/07/12(日) 00:43:02ハッシュにして渡せばそんなにたくさん渡さなくていい上にグローバルな変数だってことが一目瞭然
0543デフォルトの名無しさん
2009/07/12(日) 00:43:30wizardでも難しいぞこれ
0544デフォルトの名無しさん
2009/07/12(日) 04:26:30現行スレの過去レスくらい読めよ
0545デフォルトの名無しさん
2009/07/14(火) 11:49:36アイサってなにさ、とずっと思ってた。イズアだったのか
0546デフォルトの名無しさん
2009/07/14(火) 12:29:330547デフォルトの名無しさん
2009/07/14(火) 13:57:30fork したプロセスが正常に終わったのかとか、まだ起動中なのかとか、
調べるための手段ってあるんですか?
手前の日記スクリプトで検索の機能付けたんですが、現状2000ほどの
テキストファイルを総スキャンして検索するとタイムアウトが起きてしまいます。
なので今は投稿したエントリを検索用の1つのファイルにまとめて逃げては
居ますが、この現状を打破したいと考え、その前段階として fork にて伺いました。
0548デフォルトの名無しさん
2009/07/14(火) 14:22:06基本的にはwaitすれば子プロセスの終了コードが$?に入る
でもシグナルの設定とかいろいろ面倒なこともあるから、
perldocでperlipcを読みながらちょっとずつ練習するといい
0549548
2009/07/14(火) 14:25:04まさか2000のファイルを総スキャンてレンタルサーバでのな話?
だったら無謀なのでやめれ。ファイルスキャンはIO負荷が高すぎ
自分のマシンでならご自由に
0550デフォルトの名無しさん
2009/07/14(火) 17:53:56perlipc っていうキーワードを元にあっちゃこっちゃうろついてみます m(_ _)m
自鯖です
P!!! 1GHz ってのも、なかなか辛くなってまいりました orz
素直に DB にぶちこんだほうがいいんですかね・・・
ただ 512MB のマシンに DB とか自滅するようなもんだし困ったもんですw
0551デフォルトの名無しさん
2009/07/14(火) 18:33:25> 素直に DB にぶちこんだほうがいいんですかね・・・
全文検索エンジンインストールすればいいだけだろ。
0552デフォルトの名無しさん
2009/07/14(火) 18:54:16車輪の再発明みたいなことをするなよ
0553デフォルトの名無しさん
2009/07/14(火) 20:35:540554デフォルトの名無しさん
2009/07/14(火) 20:51:090555デフォルトの名無しさん
2009/07/14(火) 21:28:10なにも車輪を再開発しなくても、車輪を実現した考え方を盗めばいい。
0556デフォルトの名無しさん
2009/07/14(火) 22:11:41車輪をばらしてもっかい組み立てるんだよ。
再開発もいい勉強にはなるが、結果には繋がらない。
既存の車輪を見て愕然とするのが落ち。
0557デフォルトの名無しさん
2009/07/15(水) 11:33:43それすらやらないやつほどイレギュラーに弱い
0558デフォルトの名無しさん
2009/07/15(水) 12:38:21やっぱり手を動かしてから見ると理解の深さが違うしね。
0559デフォルトの名無しさん
2009/07/15(水) 12:58:160560デフォルトの名無しさん
2009/07/15(水) 13:08:25言葉遊び
0561デフォルトの名無しさん
2009/07/15(水) 14:36:06プログラマは一語一句を正確に読みとってこそだというのはその通りだが、
しかし、「開発」と「発明」の違いがわかっていないバカもいるぜ。
0562デフォルトの名無しさん
2009/07/15(水) 15:01:400563デフォルトの名無しさん
2009/07/15(水) 15:10:390564デフォルトの名無しさん
2009/07/15(水) 15:43:150565デフォルトの名無しさん
2009/07/15(水) 15:45:020566デフォルトの名無しさん
2009/07/15(水) 16:07:06@INCがどのように組み立てられるか知っている方がいたら教えてもらえますか。
perl本体をコンパイルした時に@INCが決まると思うのですが、以下のようにコンパイルしたところ、
$ sh Configure -des \
-Dcc='gcc' \
-Doptimize='-O2' \
-Dinc_version_list=none \
-Dcf_email='root@localhost' \
-Dperladmin='root@localhost' \
-Dotherlibdirs=/usr/local/lib/perl5/i686-linux:/usr/local/lib/perl5
@INCの中に2重で読み込まれるpathが出てきました
$ ./perl -e 'print join "\n", @INC'
/usr/local/lib/perl5/5.10.0/i686-linux
/usr/local/lib/perl5/5.10.0
/usr/local/lib/perl5/site_perl/5.10.0/i686-linux
/usr/local/lib/perl5/site_perl/5.10.0
/usr/local/lib/perl5/i686-linux
/usr/local/lib/perl5/5.10.0/i686-linux
/usr/local/lib/perl5/5.10.0
/usr/local/lib/perl5
.
# 以下の2つが重複しています。
/usr/local/lib/perl5/5.10.0/i686-linux
/usr/local/lib/perl5/5.10.0
で、既にインストール済みのperl5.10.0が同じ@INCなのでこれを読み込んでいるのかな?
と想像しているのですが、実際にどういう動きをしているのかわからないので質問しました。
重複しないようにコンパイルする方法はありますでしょうか?
というか、そもそも何で重複したのかがわからないのです。
0567デフォルトの名無しさん
2009/07/15(水) 16:08:25ファイルの先頭行が
#! /usr/bin/perl
で始まるファイルにだけ実行属性を付与(chmod +x)したいのですが、良い方法はありますか?
0568デフォルトの名無しさん
2009/07/15(水) 16:14:37普通にやればいいじゃん
0569デフォルトの名無しさん
2009/07/15(水) 16:19:19perl -e '<>; `chmod +x $0` if qr(^#!/usr/bin/perl);' *
とか?動くかしらんけど。
0570デフォルトの名無しさん
2009/07/15(水) 16:37:23残念ながらうまくいきませんでした。が、とても参考になりました。後は自力でなんとかなりそうです。ありがとうございました。
0571デフォルトの名無しさん
2009/07/15(水) 17:21:240572566
2009/07/15(水) 17:41:30/usr/local/lib/perl5/5.10.0
が@INCに重複する件ですが、この2つのディレクトリが存在する時に起こるみたいです
2つのディレクトリを消して実行してみると@INCは重複しておらず、
mkdirで空のディレクトリを作成すると@INCが重複してしまう。
どういう仕組みになってるのかわからなくて気持ち悪いのと、何で中途半端な順番で重複するのかというのと。。
0573デフォルトの名無しさん
2009/07/15(水) 18:20:560574デフォルトの名無しさん
2009/07/15(水) 18:50:17たとえばこんな感じで split した際に、$tmpHALL が空だった場合に '-' を入れておくような感じにできますか?
今は強引に
$tmpHALL = '-' if !$tmpHALL;
$tmpNOTE = '-' if !$tmpNOTE;
とかやってます orz
0575デフォルトの名無しさん
2009/07/15(水) 19:01:47my ($tmpDate, …略…) = map { ($_ eq "") ? "-" : $_ } split(/\t/, $line);
データに"0"がないことが確実なら
… map { $_ || "-" } …
でもいいけど、たいてい"0"が入ってきて破綻するw
0576デフォルトの名無しさん
2009/07/15(水) 19:13:40データには 0 は 100% 無いので、この書き方使わせてもらいます m(_ _)m
0577デフォルトの名無しさん
2009/07/15(水) 19:18:320578デフォルトの名無しさん
2009/07/15(水) 19:20:33それはundefにしか反応しないだろ
0579デフォルトの名無しさん
2009/07/15(水) 19:55:12phpだと以下。
http://www.php.net/manual/ja/function.preg-quote.php
0580デフォルトの名無しさん
2009/07/15(水) 19:57:360581デフォルトの名無しさん
2009/07/15(水) 20:02:520582デフォルトの名無しさん
2009/07/15(水) 20:15:21サンクス!
0583デフォルトの名無しさん
2009/07/15(水) 21:04:17× perl6
○ perl5.8.10以降
http://search.cpan.org/dist/perl-5.10.0/pod/perl5100delta.pod#Defined-or_operator
どちらにしろundefではなく空文字列だから使えない。使うならeqかlength
0584デフォルトの名無しさん
2009/07/15(水) 21:05:18○ 5.10.0
だな、すまん
0585デフォルトの名無しさん
2009/07/15(水) 23:30:24なんで '0' を通しちゃう仕様にしたんだろうな
0586デフォルトの名無しさん
2009/07/16(木) 00:23:43疑問の方が、より妥当。
0587デフォルトの名無しさん
2009/07/16(木) 00:25:54なんとなく
0588デフォルトの名無しさん
2009/07/16(木) 01:02:420589デフォルトの名無しさん
2009/07/16(木) 01:08:21正直それは思う。
なんか古い馴染みのスナックみたいだな。いまさら別の店に浮気すんのもアレだし。
でもPerl6が出たら、Pythonに乗り換えようかなw
0590デフォルトの名無しさん
2009/07/16(木) 01:38:03どうせ何を使ってもそこそこ面倒くさい
0591デフォルトの名無しさん
2009/07/16(木) 09:31:520をfalseにしないと、数値コンテキストで偽がなくなっちゃうから。
そして'0'を偽にしても、ファイルの末尾が0で終わって改行がないという
特殊な場合以外、発生しうる問題は全て回避可能だとLarry Wallが判断したから。
>>586
PHPが腐りかけのミカンみたいになってきてる上、
PerlはCatalystとMooseが来てCPANが異常に充実してきてるので、
Webプログラミング界隈はいずれPerlに再移行すると読んでるのだが。
ここんとこPerl関連のコミュニティもなんかやたら熱いし。
0592デフォルトの名無しさん
2009/07/16(木) 10:38:03Perlに回帰することは無いよ
0593デフォルトの名無しさん
2009/07/16(木) 10:42:10win版じゃ無理?外部ファイルから読み込んでも0D0Aになってしまう
0594デフォルトの名無しさん
2009/07/16(木) 13:52:03http://perldoc.jp/docs/perl/5.10.0/perlfunc.pod#item_binmode_FILEHANDLE
http://search.cpan.org/dist/perl-5.10.0/pod/perlport.pod
0595デフォルトの名無しさん
2009/07/16(木) 16:43:100596デフォルトの名無しさん
2009/07/16(木) 17:35:07while (--$count) { ... } とかを
while (--$count != 0) { ... } みたいに書き換えなきゃならない
0597デフォルトの名無しさん
2009/07/16(木) 18:15:52「ゼロになるまで」はループの基本だしな
0598デフォルトの名無しさん
2009/07/17(金) 03:30:360599デフォルトの名無しさん
2009/07/17(金) 03:36:250600デフォルトの名無しさん
2009/07/17(金) 08:05:40for( $count = 10; $count > 0; $count--){}
for( $count = 0; $count < 10; $count++){}
で何か問題あるのか?>>598はforeachの略じゃないと思うぞ
0601デフォルトの名無しさん
2009/07/17(金) 08:58:480602デフォルトの名無しさん
2009/07/17(金) 12:09:09い ま さ ら で き る か よ !
0603デフォルトの名無しさん
2009/07/17(金) 12:09:540604デフォルトの名無しさん
2009/07/17(金) 12:10:360605デフォルトの名無しさん
2009/07/17(金) 12:11:270606デフォルトの名無しさん
2009/07/17(金) 12:48:560607デフォルトの名無しさん
2009/07/17(金) 12:58:52for (1..$loopcount) で間に合う場面も多いだろ。
ループ中にループ変数が不規則な変化をするような場合には使えないけど。
0608デフォルトの名無しさん
2009/07/17(金) 17:57:49とかしない?
0609デフォルトの名無しさん
2009/07/17(金) 18:08:27だから増えたり減ったりって書いてあるだろ
0610デフォルトの名無しさん
2009/07/17(金) 18:17:08print for(@array);
ならする
0611デフォルトの名無しさん
2009/07/17(金) 18:35:35とか
for my $i (0..9) { print $i }
とか
foreach ($i = 0; $i < 10; $i++) { print $i }
って動くんだw
0612デフォルトの名無しさん
2009/07/18(土) 05:57:18って
print @ary;
とどう違うの?
0613デフォルトの名無しさん
2009/07/18(土) 06:11:300614デフォルトの名無しさん
2009/07/18(土) 11:07:08printじゃなくせばわかる
0615デフォルトの名無しさん
2009/07/18(土) 13:57:42print <F>;
print <F>;
print <F>;
2回目以降何も表示されないのだれけど毎回openしないとだめなの?
変数代入せずにprintしたいんだけど
0616デフォルトの名無しさん
2009/07/18(土) 14:06:360617デフォルトの名無しさん
2009/07/18(土) 14:32:410618デフォルトの名無しさん
2009/07/18(土) 15:03:04cpanからXML:RSSをインストールしたが、いざuse XML::RSSを使うと、
Can't locate XML/RSS.pm in @INCとエラーになる。
じゃあインストールされていないのかと >cpan i /XML:RSS/で調べると、
モジュールの一覧が出てくるのでインストールは出来ているみたい。
ただしperldoc XML::RSSで調べるとNo documentation found for "XML::RSS".
と出るので、何らか問題はあるみたい。
どうしたらいいでしょうか?
0619デフォルトの名無しさん
2009/07/18(土) 15:39:00なぜそういう事態に至っているのか調べる
0620デフォルトの名無しさん
2009/07/18(土) 15:53:050621デフォルトの名無しさん
2009/07/18(土) 16:38:070x00はどうやtって出すの?
0622デフォルトの名無しさん
2009/07/18(土) 16:54:30スミマセン。
0623598
2009/07/18(土) 18:02:55やってることは同じだし、Perlの美学からは外れてるかもしれないけど。
>599
カウンタがループ中でも増減するという状況なら、
自分も while を使うかもしれない
0624デフォルトの名無しさん
2009/07/18(土) 19:43:470625デフォルトの名無しさん
2009/07/18(土) 20:34:17気になるんだよね>forとforeach
0626デフォルトの名無しさん
2009/07/18(土) 20:41:350627デフォルトの名無しさん
2009/07/18(土) 22:09:29perlで組んだプログラムはhttpサーバーを通さないと動かせないの?
0628デフォルトの名無しさん
2009/07/18(土) 22:23:07httpじゃ無いアプリならhttpサーバを通さなくても動く。
0629デフォルトの名無しさん
2009/07/18(土) 22:54:04テストコードもろくに書かない主義ですか。
0630デフォルトの名無しさん
2009/07/18(土) 22:58:35馬鹿なの?
0631デフォルトの名無しさん
2009/07/18(土) 23:11:21>>630
0632デフォルトの名無しさん
2009/07/18(土) 23:18:06おいおい・・・・
いまどきコード書いてはブラウザリロードして開発してるわけ?
その分じゃ開発手法もレガシーだろうから、相当工数損してるな。
0633デフォルトの名無しさん
2009/07/18(土) 23:37:450634デフォルトの名無しさん
2009/07/18(土) 23:47:55その「テストコード」とやらは、httpアプリなの?
0635デフォルトの名無しさん
2009/07/18(土) 23:57:27perl ならその程度のテストが一番お似合いだとおもうけど。
0636デフォルトの名無しさん
2009/07/19(日) 00:00:10おまえは死ぬまでブラウザリロードしてろw
0637デフォルトの名無しさん
2009/07/19(日) 00:14:23ブラウザでリロードする以外に、どんな開発手法がありますか?
あと、「perlとはCGIなり、CGIとはperlなり。perlとはCGIの代名詞である」
って認識で合ってますよね?
0638デフォルトの名無しさん
2009/07/19(日) 00:39:36板違い
0639デフォルトの名無しさん
2009/07/19(日) 00:42:24合ってるような合ってないような
今時のPerlは、mod_perlプログラミングだから。
mod_perlがあることで、PHPに対して優位性を保ってると言える。
テストコード云々の話は、ブラウザで結果を確認しなくてもいいような
ドライバのようなもの作るという話でしょ。PerlやWebに限った話でもない。
0640デフォルトの名無しさん
2009/07/19(日) 00:43:07オートリロードしてくれるように設定できるの知ってる?
0641デフォルトの名無しさん
2009/07/19(日) 01:18:57マジックコード埋め込んでテスト楽になったと喜んでたら、
そのままリリースして、リロード繰り返すページになってしまって顰蹙、
という話ですね。わかります。
0642デフォルトの名無しさん
2009/07/19(日) 01:36:090643デフォルトの名無しさん
2009/07/19(日) 01:42:08>って認識で合ってますよね?
⊂ミ⊃^ω^)アウアウ
0644デフォルトの名無しさん
2009/07/19(日) 03:49:530645デフォルトの名無しさん
2009/07/19(日) 04:36:260646デフォルトの名無しさん
2009/07/19(日) 06:08:320647デフォルトの名無しさん
2009/07/19(日) 07:55:16CGIに依存してる。
use CGI;はCGIに依存してる。
0648デフォルトの名無しさん
2009/07/19(日) 08:20:43モジュールを叩くCLIだろjk。
>>637
CLIでデバッグ
Catalystで言うscript/app_server.plなどで動作チェック。
t/*.tでロジックに瑕疵がないかチェック
完成したなと思ったらhttpd+ブラウザで連結テスト。
Apacheとブラウザリロードで開発してるとかいう奴はServerError出たらどうしてんの?
Apacheのログわざわざ見るわけ?malformed headerとか出てたらどーすんの?
原因がSQLエラーだったら今度はsqllog見るわけ?
泣けてくるな。いつの時代だよ。
> あと、「perlとはCGIなり、CGIとはperlなり。perlとはCGIの代名詞である」
PerlはPHPと違ってWebプログラミング言語ではないよ。親和性が高かっただけ。
あとCGIとは何かWikipediaでも何でもいいから勉強しなされ。
>>647
> Perlスクリプトが$ENV{HTTP_REFERER}を期待していた場合、そのPerlスクリプトは、
> CGIに依存してる。
え?REFERERは元々ブラウザのオレオレ実装だろ。
ttp://hoohoo.ncsa.illinois.edu/cgi/env.html
0649デフォルトの名無しさん
2009/07/19(日) 08:35:50最近CUIツールにしか使ってないけど。
0650デフォルトの名無しさん
2009/07/19(日) 08:58:18> In addition to these, the header lines received from the client, if any,
> are placed into the environment with the prefix HTTP_ followed by the header name.
0651デフォルトの名無しさん
2009/07/19(日) 09:12:25おお。これは失礼した。
0652デフォルトの名無しさん
2009/07/19(日) 09:19:00> Apacheのログわざわざ見るわけ?malformed headerとか出てたらどーすんの?
use CGI::Carp qw(fatalsToBrowser);
> 原因がSQLエラーだったら今度はsqllog見るわけ?
use DBI;
use DBD::***;
my $dbh = DBI->connect("……") or die $DBI::errstr;
$dbh->prepare($sql_euc);
die $dbh->errstr if $dbh->errstr;
これでそのとき投げたSQLとともにエラーがブラウザ上から見えます。
もっとも動かす前に perl -wc しとくのがいいけど、実行時エラーはわからないから。
いきなりサーバで動かすと、うっかり無限ループになってあわててsshでログインして
プロセス殺したこともあるけどorz
0653デフォルトの名無しさん
2009/07/19(日) 10:29:440654デフォルトの名無しさん
2009/07/19(日) 11:53:040655デフォルトの名無しさん
2009/07/19(日) 12:13:23元々がawkの代替で、その後sedだのCだのshだののいいとこどりした言語だからな。
0656デフォルトの名無しさん
2009/07/19(日) 12:16:10それなりに工夫はしてるわけだ。
例えば1つモジュールをいじったら、波及するページを
全部表示させて毎回連結テストしてるわけ?
0657デフォルトの名無しさん
2009/07/19(日) 12:18:33>CLIでデバッグ
perl を .NET でデバッグできるんですか。知らなかった。
もう少し調べてみます。ありがとう。
>完成したなと思ったらhttpd+ブラウザで連結テスト。
でも結局は httpd で実行してブラウザでリロードしてんじゃんwww
>>627
>perlで組んだプログラムはhttpサーバーを通さないと動かせないの?
ま、それが正しいってことだな。
0658デフォルトの名無しさん
2009/07/19(日) 12:41:12ググり直せカス
0659デフォルトの名無しさん
2009/07/19(日) 13:11:35以下はエラーします。
#!/usr/bin/perl
use Encode ;
my $char = "��" ;
Encode::from_to($name,"utf8","euc-jp",Encode::FB_XMLCREF ) ;
print $char ;
0660デフォルトの名無しさん
2009/07/19(日) 13:17:180661デフォルトの名無しさん
2009/07/19(日) 13:17:54訂正。エラーってのは日本語のミスです。コードが出ます。
あと6行目の$nameは$charの間違いm(_o_)m
0662デフォルトの名無しさん
2009/07/19(日) 13:19:26すまん。いろいろ試行錯誤している途中のものを出してしまいました。
6行目は以下ですm(_o_)m
Encode::from_to($char,"utf8","iso-2022-jp",Encode::FB_XMLCREF ) ;
0663デフォルトの名無しさん
2009/07/19(日) 13:45:560664デフォルトの名無しさん
2009/07/19(日) 13:46:33それはないですm(_o_)m
0665デフォルトの名無しさん
2009/07/19(日) 14:23:33とりあえずencode/decodeがちゃんと動いてるか確認してみては
use Encode ;
my $utf8 = sprintf("%c%c%c", 0xE3, 0x81, 0x82); # UTF-8で"あ", 適当に変えてみて
my $octet = Encode::decode("utf8", $utf8); # 内部コード。たぶんUTF-8と同じ
my $sjis = Encode::encode("sjis", $octet);
my $eucjp = Encode::encode("euc-jp", $octet);
my $iso2022 = Encode::encode("iso-2022-jp", $octet);
print "utf8: ", unpack("H*", $utf8), "\n"; # e38182
print "octet: ", unpack("H*", $octet), "\n"; # e38182
print "sjis: ", unpack("H*", $sjis), "\n"; # 82a0
print "eucjp: ", unpack("H*", $eucjp), "\n"; # a4a2
print "iso2022: ", unpack("H*", $iso2022), "\n"; # 1b244224221b2842
0666デフォルトの名無しさん
2009/07/19(日) 14:53:53その字って、JIS X 0208にもJIS X 0212にも含まれてない文字なのでは?
自分なら(JIS X 0113に対応している)NKF ver2.0.7以降に投げて変換してもらう。
もしかしたらEncode::JIS2Kモジュールが使えるかも。
0667デフォルトの名無しさん
2009/07/19(日) 15:13:24http://charset.7jp.net/jis.html
「�驕vは水色ですね
0668デフォルトの名無しさん
2009/07/19(日) 15:31:07> PerlはPHPと違ってWebプログラミング言語ではないよ。親和性が高かっただけ。
ちがうな。あのタイミングで他に適切なのが無かっただけだ。
0669デフォルトの名無しさん
2009/07/19(日) 16:27:26PerlはWebプログラミング言語ですか、そうですか。
0670デフォルトの名無しさん
2009/07/19(日) 16:33:010671デフォルトの名無しさん
2009/07/19(日) 16:42:43> ちがうな
否定の否定、つまり肯定だよな。
どう考えても、「PerlはWebプログラミング言語ですぅ!」とほざいてるキチガイにしか見えない。
0672デフォルトの名無しさん
2009/07/19(日) 16:48:310673デフォルトの名無しさん
2009/07/19(日) 16:56:47>>670
0674デフォルトの名無しさん
2009/07/19(日) 16:57:46「「Web言語である」または「Webとの親和性が高くない」」だ
つまり「Webとの親和性が高くない」が>>668の真意であるなら
「Web言語である」という命題はおまえの存在と同じぐらいどうでもいい
0675デフォルトの名無しさん
2009/07/19(日) 17:34:32必死に考えた結果がその駄文すか。
0676デフォルトの名無しさん
2009/07/19(日) 20:23:19aaaaaaaaaaみたいに
同じ文字が10個続いてるのにマッチする
正規表現を教えてくださいな
0677デフォルトの名無しさん
2009/07/19(日) 20:32:430678デフォルトの名無しさん
2009/07/19(日) 20:46:45aaaaaaaaaaにもbbbbbbbbbbにも!!!!!!!!!!にも
マッチするやつが欲しかったんです
0679デフォルトの名無しさん
2009/07/19(日) 20:51:130680デフォルトの名無しさん
2009/07/19(日) 20:51:230681デフォルトの名無しさん
2009/07/20(月) 12:53:55お前その思考回路と読解力でプログラム書けるのか?
用語はググれ。完全に世に遅れを取ってるぞ。
つーか.NETがどーのっていちゃもん自体ググって調べたんじゃないか?
その知識のなさを見ると。
> でも結局は httpd で実行してブラウザでリロードしてんじゃんwww
Webアプリケーション作ってるのにWebで確認しないアホがいるか。
しかしテストにリロードは原則不要だ。
>>perlで組んだプログラムはhttpサーバーを通さないと動かせないの?
> ま、それが正しいってことだな。
CGIスクリプトなんかはコマンドラインから起動するとそっちのモードに切り替わるように
設計しないか普通?俺はめっきりCGIスクリプト書かなくなったから良く覚えてないけど、
use CGIしたら自動的にそうなったりしなかったっけ?
0682デフォルトの名無しさん
2009/07/20(月) 13:55:550683デフォルトの名無しさん
2009/07/20(月) 13:57:55分かったよ調べたよ。
use CGI qw(-debug);
でコマンドラインから実行できる。これで文句ないだろ?
0684デフォルトの名無しさん
2009/07/20(月) 13:59:16ごく簡単なことなんだがな・・・。お前ら大丈夫?
0685デフォルトの名無しさん
2009/07/20(月) 14:49:48質問:
perlで組んだプログラムはhttpサーバーを通さないと動かせないの?
こたえ:
コマンドラインから実行できる
満足かい?
おまいら一生、コマンドラインで動く掲示板、コマンドラインで動くショッピングカートで
遊んでな!
0686デフォルトの名無しさん
2009/07/20(月) 14:49:58ありがとう。
nkf --oc=ISO-2022-JP-1 で所望の変換をしてくれるようです。
Perlではこれに相当するライブラリは無いってことですかね。以下では
変換できずにコードが出力されてしまいました。
Encode::from_to($char,"utf8","iso-2022-jp-1",Encode::FB_XMLCREF ) ;
ちなみに665の実行結果は以下です。
utf8: efa79c
octet: dc
sjis: 3f
eucjp: 3f
iso2022: 3f
0687デフォルトの名無しさん
2009/07/20(月) 14:58:20ライブラリの作成者がメンテナンスを放置しちゃうと。
プログラミングの経験の浅い人は、ナニがなんだかわからない現象に悩まされる。
ライブラリを信用しきっちゃってるからな。
0688デフォルトの名無しさん
2009/07/20(月) 15:21:140689デフォルトの名無しさん
2009/07/20(月) 15:29:000690デフォルトの名無しさん
2009/07/20(月) 15:40:22再発明でも再開発でもないだろう。
0691デフォルトの名無しさん
2009/07/20(月) 15:43:060692デフォルトの名無しさん
2009/07/20(月) 15:44:490693デフォルトの名無しさん
2009/07/20(月) 15:52:490694デフォルトの名無しさん
2009/07/20(月) 16:08:53言葉遊び
0695デフォルトの名無しさん
2009/07/20(月) 17:01:30「再発明」ってのは無いだろうw
その時点で再発明とか言ってる時点でアレ
0696デフォルトの名無しさん
2009/07/20(月) 17:05:280697デフォルトの名無しさん
2009/07/20(月) 17:12:240698デフォルトの名無しさん
2009/07/20(月) 17:31:51reinvent the wheelの訳語だから、「車輪の再発明」の方が正しい。
存在しないと思って新たに作っちゃってるつもりの状態を再発明と表現したんだろ。
一応常套句だから、「車輪の再開発」はいいまつがいかもじり。
あると分かっていて、ソースの汚さや遅さや、単に後学のためにわざと再開発することはある。
0699696
2009/07/20(月) 17:36:23"reinventing the wheel" 日本語訳は「車輪の再発明」。
同じ技術や同じ物が作られるときに、比喩として使われる慣用句だな。
慣用句に突っ込まれても困るわけだが。
と、書いてたら出遅れた。
0700デフォルトの名無しさん
2009/07/20(月) 18:01:580702デフォルトの名無しさん
2009/07/20(月) 18:47:070703デフォルトの名無しさん
2009/07/20(月) 18:52:430704デフォルトの名無しさん
2009/07/20(月) 19:12:320705デフォルトの名無しさん
2009/07/20(月) 19:27:24どうみてもsite/libにファイルが増えてない・・・
0706デフォルトの名無しさん
2009/07/20(月) 21:23:20車輪の再発明は語源も含めてらくだ本に何度も出てくるだろ・・・。
なんつーレベルの低いスレだよ。
0707デフォルトの名無しさん
2009/07/20(月) 21:24:43>>560以降、この件でレスしてる奴全部レベル低いよ
お前もな
0708デフォルトの名無しさん
2009/07/20(月) 22:08:260709デフォルトの名無しさん
2009/07/20(月) 22:09:10全部真っ赤
0710デフォルトの名無しさん
2009/07/21(火) 00:28:150711デフォルトの名無しさん
2009/07/21(火) 02:10:00ファイルが入力されているかいないかの判別を、definedで判別できるかと思ったのですが、
$cgi = new CGI;
if( defined( $cgi->param( "cgi"))) {}
これだと、いつもifの中にはいってしまいます。
わたしが謝ったコードを書いているのでしょうか?
今は、
if( 4 < length( $cgi->param( "cgi")))
で処理していますが、通常はどのような条件分岐を行うのでしょうか?
(上記の条件分岐は、ファイルをzipファイルをアップロード対象としているため、拡張子の分のファイル名を4文字と考えています。
0712デフォルトの名無しさん
2009/07/21(火) 02:53:28>>1
0713デフォルトの名無しさん
2009/07/21(火) 03:04:43ありがとうございます。
defined等の関数の知識が足りていないのかと思いこちらに書き込みをさせていただいたのですが、
ご指摘いただきましたので、移動させていただきます。
0714デフォルトの名無しさん
2009/07/22(水) 20:01:380715デフォルトの名無しさん
2009/07/22(水) 20:07:05Dynamic DNSのサイトから取ってたな
もっといい方法があるんだろうな
0716デフォルトの名無しさん
2009/07/22(水) 20:10:27確認くん
ttp://www.ugtop.com/spill.shtml
とか
診断くん
ttp://taruo.net/e/
0717デフォルトの名無しさん
2009/07/22(水) 20:20:21use Sys::Hostname;
my $ipaddress = join(".",unpack("C4",gethostbyname(hostname())));
print "$ipaddress\n";
0718デフォルトの名無しさん
2009/07/22(水) 20:27:23$str =~ s/addr:(.+)\s?//;
my $host = $1;
0719デフォルトの名無しさん
2009/07/22(水) 20:45:520720719
2009/07/22(水) 20:47:090721デフォルトの名無しさん
2009/07/22(水) 20:49:390722721
2009/07/22(水) 20:51:020723デフォルトの名無しさん
2009/07/22(水) 20:52:580724723
2009/07/22(水) 20:54:040725デフォルトの名無しさん
2009/07/22(水) 21:28:14うちはbge0だよ(´・ω・`)
0726デフォルトの名無しさん
2009/07/22(水) 21:32:02どんだけ力技だよw
0727デフォルトの名無しさん
2009/07/24(金) 17:22:360728デフォルトの名無しさん
2009/07/24(金) 17:24:130729デフォルトの名無しさん
2009/07/24(金) 17:33:530730デフォルトの名無しさん
2009/07/24(金) 17:39:28Tabにしとけ。
相手が勝手に好きな隙間にするから。
0731デフォルトの名無しさん
2009/07/24(金) 17:52:57my $var1, $var2, $var3;
というふうに書けないんでしたっけ。
my $var1;
my $var2;
my $var3;
と書くしかない?
0732デフォルトの名無しさん
2009/07/24(金) 17:53:470733デフォルトの名無しさん
2009/07/24(金) 17:57:30さんくす
my %var = (
'1', "なんたら", # なんたら
'2', "かんたら", # かんたら
'3', "ちんたら", # ちんたら
);
と描きたくなる衝動が。。。
0735デフォルトの名無しさん
2009/07/24(金) 19:19:18for my $x (@list) {
if ($x eq 'foobar') {
$found = $x;
last;
}
}
というコードを、よりかっこよく書く方法があれば教えてください。
ちなみにRubyなら
found = list.find {|x| x == 'foobar' }
だそうです
0736デフォルトの名無しさん
2009/07/24(金) 19:25:38sub f {
print "f()¥n";
}
sub g {
print "g()¥n";
}
というのがあったとして、これを使う時は
use Foo;
Foo::f();
Foo::g();
のようにして使いますよね。
これを、Foo::f()ではなくf()だけで使えるようにするにはどうしたらいいでしょうか。
よろしくお願いします。
0737デフォルトの名無しさん
2009/07/24(金) 19:30:350738デフォルトの名無しさん
2009/07/24(金) 19:37:35初めに見つけたら抜ければいいの?正しい挙動がよくわからないけど、
use List::Util qw( first );
my $found = first { $_ eq 'foobar' } @list;
かなぁ?
0739デフォルトの名無しさん
2009/07/24(金) 19:38:26ttp://search.cpan.org/~ferreira/Exporter-5.63/lib/Exporter.pm
つーか、普通はそんな使い方しない。
コンストラクタ用意して、
my $instance = Foo->new;
$instance->f;
ってしなさい。その後に上のExporterみなさい。
0740デフォルトの名無しさん
2009/07/24(金) 19:48:210741デフォルトの名無しさん
2009/07/24(金) 19:56:16あれ、パッケージって必ずインスタンスオブジェクトにしないといけないんでしたっけ?
単に名前空間として使いたいだけだったんですが。
#そして、その名前空間を一部破りたいというだけの話なんですけど。
0742デフォルトの名無しさん
2009/07/24(金) 20:04:56Exporter使えばできるけど、それはきもいから今はあまりやらない。
0743デフォルトの名無しさん
2009/07/24(金) 20:12:29#!/usr/bin/perl
package Foo;
f();
g();
__END__
>>735
for $found (@list) {/^foobar$/ and last}
だと動かないんだよなぁ。
>>739
$foo::bar()を使わないって・・・。
>>740
お前Exporter使ってるモジュール使用禁止な。
0744デフォルトの名無しさん
2009/07/24(金) 20:34:05キモチワルイ方法でよければこういう手もある。
Foo.pm
=============
#!/usr/bin/perl
package Foo;
sub f{print "f()\n";}
sub g{print "g()\n";}
package main;
sub AUTOLOAD {
our $AUTOLOAD;
$AUTOLOAD =~ s/.*:://g;
eval("Foo::$AUTOLOAD()") if eval(qq(exists &Foo::$AUTOLOAD));
}
1;
__EOF__
0745デフォルトの名無しさん
2009/07/24(金) 21:16:28じゃあ俺もキモイ方法。use Foo;さえいらない
use strict;
f();
g();
exit;
package Foo;
sub f { print "f()\n"; }
sub g { print "g()\n"; }
BEGIN { *::f = \&f; *::g = \&g; }
0746デフォルトの名無しさん
2009/07/24(金) 21:26:17すみません、みなさんのやり方がさっぱり理解できないです。
やりたいことをもう一度整理します。
まずすでにFoo/Bar.pmというファイルがあり、こんな内容になっています。
これは変更することはできません。
package Foo::Bar;
sub f { ... }
sub g { ... }
sub h { ... }
そして、手元のスクリプトでやりたいのは、パッケージ名をつけずにf()やg()を使いたいということです。
ここで、Foo::Bar以下のすべての関数ではなく、指定した関数だけを使いたいんですが、できますか。
(ここでpackage Foo::Barとするとすべての関数が対象となるので好ましくない)
use Foo::Bar;
f();
g();
もしPythonをご存知の方がいれば、from pacakge import f, g ということがやりたい、といえばわかってもらえるでしょうか。
0747デフォルトの名無しさん
2009/07/24(金) 21:29:050748デフォルトの名無しさん
2009/07/24(金) 21:33:05> from pacakge import f, g
use Foo qw(f g);
みたいにしたいならExporter使うのが正道。
Exporterキモチワルイとか言ってる奴はほっとけ。
Exporter perl export_ok辺りでググればサンプルと解説が
出てくるはずだから。
0749デフォルトの名無しさん
2009/07/24(金) 21:49:35どうもありがとうございます。
でもこの方法だと、Exporterを使うようにFoo/Bar.pmを変更しないといけないんですよね。
今回はそれができないんです。困った。
Pythonだとパッケージ側では特になにもする必要がないんですけど、Perlだとパッケージ側でいろいろ準備が必要なんですね。
0750デフォルトの名無しさん
2009/07/24(金) 21:52:05お前、ちゃんと>>739のURL見たのか?
0751デフォルトの名無しさん
2009/07/24(金) 22:04:37え、Bar/Foo.pmに手を加えずにインポートする方法ってあるの?
知らないんだけど。ドキュメントも読んだけど。ちなみに>>749ではない。
0752デフォルトの名無しさん
2009/07/24(金) 22:07:31普通にFoo::Bar::f();じゃどういう風に都合が悪いんだ?
何を困ってるのか分からないとこっちが困る。
0753デフォルトの名無しさん
2009/07/24(金) 22:07:36これでどう
use strict;
*main::f = \&Foo::Bar::f;
f();
exit;
package Foo::Bar;
sub f { print "f()\n"; }
sub g { print "g()\n"; }
0754デフォルトの名無しさん
2009/07/24(金) 22:15:53長すぎて不便。
>>753
おお、これはすごい。関数へのポインタみたい。
ありがたく使わせて頂きます。どうもありがとうございました。
0755デフォルトの名無しさん
2009/07/24(金) 22:16:240756デフォルトの名無しさん
2009/07/24(金) 23:02:05〜
}elsif(){
〜
}else{
〜
}
かな
0757デフォルトの名無しさん
2009/07/24(金) 23:45:51die("error message");
}
if ($@) {
print STDERR, $@;
exit 1;
}
という処理を書いているんですが、エラーメッセージのうしろに
at /usr/local/tmp/hoge.pm line 2
のようなのが付いてきます。
つまり $@ にファイル名と行番号が付いてくるわけですが、これを取り除くいい方法はありますか。
やはり正規表現でちまちま削除しなきゃいけないでしょうか。
0758デフォルトの名無しさん
2009/07/25(土) 00:00:13new ClassName();
ClassName->new();
のどちらでも書けるようですが、どちらで書いた方がいいのかわかりません。
どっちで書いてもいいのか、それともPerlとしてはどちらか一方がお勧めだったりしますか?
0759デフォルトの名無しさん
2009/07/25(土) 00:00:38perldoc -f die
に書いてある
>die LIST
>…中略…
>If the last element of LIST does not end in a newline, the
>current script line number and input line number (if any) are
>also printed, and a newline is supplied. …以下略
つまりエラーメッセージの最後に改行を付加すれば行番号などは付かない
0760デフォルトの名無しさん
2009/07/25(土) 01:05:57->
0761デフォルトの名無しさん
2009/07/25(土) 05:01:27eval {
die("error message\n");
} ;
if($@){
print STDERR $@;
exit 1;
}
0762デフォルトの名無しさん
2009/07/25(土) 05:58:08newに限らず、Perlでクラスメソッドを呼ぶ基本的な記法は
MyClass->myfunc(引数); # 構文(1)
である。もうひとつの
myfunc MyClass(引数); # 構文(2)
というのは、Indirect Object Syntax(間接オブジェクト構文)と呼ばれる一種のシンタクスシュガーである。
perldoc perlobjによれば、構文(2)を使うとPerlのパーサが困る場合があるらしい。
もちろん普通に new Class(); とか書いてるだけなら問題ないし、こっちの書き方もよく使われるので、
構文(2)にも慣れといたほうがいいとperldoc perlobjは言っている。
まあ、C++とかJavaのユーザーが、newに関して構文(2)を使いたがるのはしょうがないねw
0763デフォルトの名無しさん
2009/07/25(土) 06:38:17$obj = new Class(); の構文でパーサが困ることは絶対ない。それは言いがかりだ。
別にC++やJava使いじゃなくても知る限りFile::IOなんかは
print $fh 'hello';
って書く人の方が多いね。別に
$fh->print('hello');
でも動くんだが、意外に知らない人が多くてワロタ。
0764デフォルトの名無しさん
2009/07/25(土) 06:40:30よく読めよ・・・
0765デフォルトの名無しさん
2009/07/25(土) 06:54:29ありがとうございました。
0766デフォルトの名無しさん
2009/07/25(土) 07:24:57use strict;
$VAR = 1;
sub f {
print $VAR;
}
というパッケージを作ると
Global symbol "$VAR" requires explicit package name at Hoge.pm line 3.
Global symbol "$VAR" requires explicit package name at Hoge.pm line 5.
Compilation failed in require at hoge.pl line 1.
BEGIN failed--compilation aborted at hoge.pl line 1.
というエラーがでます。$VARにパッケージ名がないということなので、
package Hoge;
use strict;
$Hoge::VAR = 1;
sub f {
print $Hoge::VAR;
}
とするとエラーは出なくなったのですが、いちいちパッケージ名をつけるのがだるいです。
なんかいい方法はないでしょうか。
0767デフォルトの名無しさん
2009/07/25(土) 07:37:550768デフォルトの名無しさん
2009/07/25(土) 10:54:34ほんとだー
package Hoge;
use strict;
my $var = 1;
sub f {
print $var;
}
でいけました。ありがとうございます。
でも sub f の中から外のmy変数を参照できたのか。。。ちょっと不思議。
0769デフォルトの名無しさん
2009/07/25(土) 11:06:010770デフォルトの名無しさん
2009/07/25(土) 12:17:29my $var=1;
foreach (@hoge) {
print $var;
}
0771デフォルトの名無しさん
2009/07/25(土) 15:23:05あれは何でだろうか…
0772デフォルトの名無しさん
2009/07/25(土) 16:28:01myのスコープ(いわゆるレキシカルスコープ)について
良く勉強しといた方がいい。思わぬところでコケるぞ。
myとlocalの違いを産業で説明できるようになるまでががれ。
0773デフォルトの名無しさん
2009/07/25(土) 17:14:36---- test.pl -----
#!/usr/bin/perl
my $a;
sub a{my($b) = @_ ; print $a += $b }
1;
----別ファイル($aのスコープ外)----
#!/usr/bin/perl
require 'test.pl';
package Foo; # パッケージも変えてみる
main::a(1);main::a(2);main::a(3);main::a(4);
何の問題も起きないが?多分スコープについて勘違いしてるだけだと思われ。
0774デフォルトの名無しさん
2009/07/25(土) 19:19:32今自分でも検証してみた
勘違いはBEGINブロックで宣言した変数がパッケージ内で使えるということだったらしい
今思えばなぜそんな勘違いしたのか謎
0775デフォルトの名無しさん
2009/07/26(日) 01:06:420776デフォルトの名無しさん
2009/07/26(日) 12:35:48Foo::Bar::f()が長くて面倒だという理由で
>>753で解決するとか本気でバカとしか思えないんだが。
単に面倒なだけなら
my $f = \&Foo::Bar::f;
しといて、
$f->();
すりゃいいだろ。
0777デフォルトの名無しさん
2009/07/26(日) 12:51:50まあ>>736,746,754のようなタイプに何いっても無駄
Exporter::import()だって結局>>753みたいなことやってるにすぎないしなw
0778デフォルトの名無しさん
2009/07/27(月) 10:17:380779デフォルトの名無しさん
2009/07/27(月) 10:32:16どんな言語を使っても汚いように、
それはどんな言語も同じ
0780デフォルトの名無しさん
2009/07/27(月) 13:37:140781デフォルトの名無しさん
2009/07/27(月) 14:11:260782デフォルトの名無しさん
2009/07/28(火) 00:58:18スパゲッティ−ソースもperlなら簡単お手軽に作れる、とか、
もうちょっと言葉を選べよw
0783デフォルトの名無しさん
2009/07/28(火) 01:47:21perlのテキスト処理について質問です。
[test.txt]
yamada 10
tanabe 20
+40
yamasita 10
というtest.txtに対して行頭に+があるときは前の行に空白を入れて追加して
out.txtというファイルを出力させたいのですがどうすればよいのでしょう。
[out.txt]
yamada 10
tanabe 20 40
yamasita 10
0784デフォルトの名無しさん
2009/07/28(火) 03:39:41改行コードを空白に置換すればいい。
$unko =~ s/[\r\n]+\+/ +/gs;
0785デフォルトの名無しさん
2009/07/28(火) 06:08:43オブ脳ないのにJavaで書かれたソースに比べれば
スパゲティの方がまだマシ。
0786デフォルトの名無しさん
2009/07/28(火) 06:12:32while(<FILE>){
chomp;
print "\n" if $last ~! /^\+/;
print;
$last = $_;
}
print "\n";
0787デフォルトの名無しさん
2009/07/28(火) 08:40:31$main::hoge1 = 'a';
$main::hoge2 = 'b';
...
この時、JavaScriptでいうwith()の様に、{ } で囲むスコープ内でのみ main:: を省略する書き方は出来ないでしょうか?
0788デフォルトの名無しさん
2009/07/28(火) 10:37:39必要なとこだけpackageをmainに変えればいいはずだけど、
その根拠がperldocのどこに書いてあったか忘れたので、あくまでも参考ということで
use strict;
package main;
our ($foo, $bar);
hoge::func();
print "foo=$foo, bar=$bar\n";
exit;
package hoge;
sub func {
print "I'm in package ", __PACKAGE__, "\n"; #ここはまだhogeパッケージ
$main::foo = 'a';
package main;
print "I'm in package ", __PACKAGE__, "\n"; #ここからmainパッケージ
$bar = 'b';
}
0790デフォルトの名無しさん
2009/07/28(火) 11:31:33I'm in package hoge
I'm in package main
foo=a, bar=b
となったから合ってんじゃねーの?
どういう結果を期待してんだ?
0791デフォルトの名無しさん
2009/07/28(火) 13:21:24可読性落ちるだけだろjk。
0792デフォルトの名無しさん
2009/07/28(火) 13:37:16なるぐらい参照しなければならないプログラムはどうかと思うな。
0793デフォルトの名無しさん
2009/07/28(火) 16:31:59$obj = new;
でFoo::Barクラスのインスタンスが作れないかって質問が来そうだ。
0794デフォルトの名無しさん
2009/07/28(火) 17:54:48ありがとうございました。無事出来ました。
あと質問なんですが$obj = new;でFoo::Barクラスのインスタンスは作れないでしょうか。
あ、やっぱいいです。 ありがとうございました。
0795デフォルトの名無しさん
2009/07/28(火) 22:47:38同じパッケージ名を何百回も書くのは記述性が落ちるどころか
かえって可読性をも落とすだけだと思うんだ
0796デフォルトの名無しさん
2009/07/29(水) 06:53:39前提と結論に整合性がない
論理的でおk
0797デフォルトの名無しさん
2009/07/29(水) 11:23:27というのがあって、ある文字列が$varsのキーに含まれるかどうかを調べるにはどうしたらいいですか。
my $found = 0;
for my $key (keys %$vars) {
if ($key eq "foo") {
$found = 1;
break;
}
}
print "found: $found¥n";
というのを短く書きたいです。
0798デフォルトの名無しさん
2009/07/29(水) 11:25:52でいいじゃん
0799デフォルトの名無しさん
2009/07/29(水) 11:28:420800デフォルトの名無しさん
2009/07/29(水) 11:31:580801デフォルトの名無しさん
2009/07/29(水) 11:32:20でいけました。サンクスです。
0802デフォルトの名無しさん
2009/07/29(水) 11:37:05$vars = {'foo': 1, 'bar': 2}
こういう風に書けるんだね。知らなかった。
0803デフォルトの名無しさん
2009/07/29(水) 11:38:060804デフォルトの名無しさん
2009/07/29(水) 11:45:180805デフォルトの名無しさん
2009/07/29(水) 14:59:09Rubyでは文字列をevalするときに、オプションとしてファイル名や行番号を指定できるのですが、
同じことをPerlでしたいので、方法があれば教えてください。
「perl eval ファイル名」でぐぐってもヒットしませんでした。
0806デフォルトの名無しさん
2009/07/29(水) 15:08:590807デフォルトの名無しさん
2009/07/29(水) 15:25:41do
0808805
2009/07/29(水) 16:45:24たとえば、次のような「hoge.pl」というファイルがあるとします。
1: $s = <<END;
2: package Foo;
3: sub hello {
4: print "Hello¥n";
5: }
6: END
7:
8: eval $s, 'Foo.pm', 1
これを実行すると、evalに渡した文字列が、ファイルFoo.pmの1行目から始まったものとして扱ってくれないかなということです。
この例だとevalはhoge.plの8行目ですが、もし$sの中にエラーがあると、hoge.plにエラーがあったと表示されるのではなく、
あたかもFoo.pmの中にエラーがあったかのようにエラーが表示されてほしいのです。
0809デフォルトの名無しさん
2009/07/29(水) 17:40:590810デフォルトの名無しさん
2009/07/29(水) 17:44:24おまえはもういちど質問の意味を考えるべき
0811デフォルトの名無しさん
2009/07/29(水) 19:37:49#line?
例.
$s =<<END;
#line 200 "Foo.pm"
pacjage Foo; # <- このtypoは Foo.pm の 200行目のエラーになる
1;
END
eval $s or warn $@;
0812デフォルトの名無しさん
2009/07/29(水) 21:19:25何様?こいつ
0813デフォルトの名無しさん
2009/07/29(水) 22:00:08すごく怖いやつだから、逆らわない方がいい。
0814デフォルトの名無しさん
2009/07/29(水) 22:34:42なんでそんな事がしたいの?
0815デフォルトの名無しさん
2009/07/29(水) 22:45:29テキスト(SJIS)で作成した16進データをバイナリに変換したいのですが、
$aaa = pack("H*", @hexdata);
print OUTFILE $aaa ;
みたいな形でやっても上手く行きません。
最大文字列制限とかあるのでしょうか?
0816デフォルトの名無しさん
2009/07/29(水) 23:31:330817デフォルトの名無しさん
2009/07/29(水) 23:45:48質問の仕方がヘタクソだな。それじゃ相手に伝わらない。
0818デフォルトの名無しさん
2009/07/29(水) 23:48:20DSLとか作るときには必須だろう
0819デフォルトの名無しさん
2009/07/30(木) 00:14:43「なんでそんなことしたいの?」とかレス付けたがるんだよな。
0820デフォルトの名無しさん
2009/07/30(木) 00:17:57いや。それは違うぞ。
どうしてそうしたいのか?が分かれば、的確な回答が出来る可能性がある
要件定義の鉄則。
0821デフォルトの名無しさん
2009/07/30(木) 00:20:58とりあえずエスパーで、pack()の書式指定が違ってると言ってみよう
my @hex = ("7761", "6b61", "6e6e", "6169", "3e3c");
my $aaa = pack("(H4)*", @hex);
0822デフォルトの名無しさん
2009/07/30(木) 00:38:26なんでそんなレスしたの?
0823デフォルトの名無しさん
2009/07/30(木) 00:59:30「俺はわかってる!」という根拠の無い自信に満ち溢れた学生さんが
ちょっと大きく出ちゃったんです。
0824デフォルトの名無しさん
2009/07/30(木) 01:13:180826デフォルトの名無しさん
2009/07/30(木) 02:09:12これを同一だと思うような人と飲みに行ったらつまんなそう
0827デフォルトの名無しさん
2009/07/30(木) 02:24:040828デフォルトの名無しさん
2009/07/30(木) 02:55:340829デフォルトの名無しさん
2009/07/30(木) 11:00:17if ( $ARGV[0] eq "autoconf" ) {
if (`/usr/bin/perl $0` eq "" ) {
print "no\n";
exit 1;
} else {
print "yes\n";
exit 0;
}
}
っていうスクリプトを、引数にautoconfを与えて実行すると
Use of uninitialized value $ARGV[0] in string eq at ./sensirion line 2
と怒られます。最初の行で-wオプションを消すと怒られなくなりますが、
正しい対処法があれば教えてください。
0830デフォルトの名無しさん
2009/07/30(木) 11:35:29if (@ARGV and $ARGV[0] eq 'autoconf')
0831デフォルトの名無しさん
2009/07/30(木) 12:12:43お薦めですか?
モダンPerl入門
http://www.amazon.co.jp/gp/product/4798119172/
0832デフォルトの名無しさん
2009/07/30(木) 15:33:45もう旧いよ。
0833デフォルトの名無しさん
2009/07/30(木) 15:44:47最新版は何ですか?
0834デフォルトの名無しさん
2009/07/30(木) 21:46:07Mooseについて知らなかったりコードをMVCのC(とV)にばっかり書いてるようなら
買うべき。
0835デフォルトの名無しさん
2009/07/30(木) 23:35:01を改造してたんですが、昨日から今日のつい先ほどまでブラウザのアドレスバーにローカルホスト入れれば反応してたんですが、しなくなりました。
原因が全く分かりません。試しにActivePerl-5.10.0.1005をインストールし直したのですが解決せず。
もう私の手には負えません、誰か原因がわかる人がいましたら教えていただけませんか?
0836デフォルトの名無しさん
2009/07/31(金) 05:40:42#!/usr/bin/perl
sub func1{print "func1\n";}
sub func2{print "func2\n";}
sub func3{print "func3\n";}
&func1;
&func2;
&func3;
上記を↓のようにしたいです
for(my $i = 1;$i <= 3;$i++)
{
&func$i;
}
このままだとエラーになるのですが、
このような使い方は可能でしょうか?
0837836
2009/07/31(金) 05:49:05for(my $i = 1;$i <= 3;$i++)
{
eval "&func$i";
}
上記でできました。
0838デフォルトの名無しさん
2009/07/31(金) 09:54:480839デフォルトの名無しさん
2009/07/31(金) 09:57:090840デフォルトの名無しさん
2009/07/31(金) 10:00:550841デフォルトの名無しさん
2009/07/31(金) 10:05:000842デフォルトの名無しさん
2009/07/31(金) 10:09:44それはセキュリティの穴になりやすいから気をつけて
0843デフォルトの名無しさん
2009/07/31(金) 10:10:320844デフォルトの名無しさん
2009/07/31(金) 10:20:07大きい会社のことなんか知らない、零細企業の社員のくせにw
0845デフォルトの名無しさん
2009/07/31(金) 10:21:51ははは。俺は大きい会社でも小さい会社でも天才プログラマーとして活躍したんだがな。お前らみたいのと一緒にするんじゃない。
0846デフォルトの名無しさん
2009/07/31(金) 10:29:55配列使えよ。
@func = (
sub { print "func1\n"; },
sub { print "func2\n"; },
sub { print "func3\n"; },
);
foreach (@func) {
$_->();
}
0847デフォルトの名無しさん
2009/07/31(金) 12:30:53手軽で便利だから何気なく使ってる
0848デフォルトの名無しさん
2009/07/31(金) 12:32:07アマゾンもperlらしいな
最近はどうか知らないけど
0849デフォルトの名無しさん
2009/07/31(金) 12:38:11「大きい会社」なのかどうかは知らないが。
YAPC::Asia Tokyoとか、Shibuya Perl Mongersとか行くと
Perl支持企業の多さや、社員レベルので企業の枠を超えたパイプの太さに感心する
0850デフォルトの名無しさん
2009/07/31(金) 12:42:240851デフォルトの名無しさん
2009/07/31(金) 13:00:400852デフォルトの名無しさん
2009/07/31(金) 13:06:28上場までの過程となる、2005年以前でまともなパフォーマンスを発揮出来るWeb系言語は、
PerlとJavaしかなかった。
mod_perl登場&普及以前の2000年〜2003は、Java一択だったが、
Java系企業はスタートダッシュこそ良かったものの、Javaプログラマ不足で
一から教育しなければならず、次第に勢いが鈍りだす。
そうこうしてる間にmod_perlの登場し、元から多かった豊富なPerlプログラマのおかげもあって
ベンチャーが相次いで有名サービスが立ちあげ、どんどん上場していく。
だから、今上場しているような大きいIT企業はPerlが多い。
あくまでもそういう理由で多いだけなので、今後は現在PHPやRubyを採用している会社が
IPOしていく流れが続くはず。最近だとRuby採用のcookpad。
0853デフォルトの名無しさん
2009/07/31(金) 13:14:25言いたいことは、現在上場してるIT企業にPerlが多い理由を書いただけなので勘弁。
0854デフォルトの名無しさん
2009/07/31(金) 13:28:48多数の言語をマスターした俺の感想。
0855デフォルトの名無しさん
2009/07/31(金) 13:33:090856デフォルトの名無しさん
2009/07/31(金) 13:35:420857デフォルトの名無しさん
2009/07/31(金) 13:36:04そこそこメジャーな言語なら車輪の再発明は既に済んでいる。
0858デフォルトの名無しさん
2009/07/31(金) 13:39:23なぜPHPは馬鹿にされるのか
http://pc11.2ch.net/test/read.cgi/php/1240977569/
このスレで活躍してきてください。
ちなみに最終書き込みは、
「別にいいじゃんバカにされても」
です
0859デフォルトの名無しさん
2009/07/31(金) 13:42:48PHPがどう考えてもトップです。
0860デフォルトの名無しさん
2009/07/31(金) 13:45:350861デフォルトの名無しさん
2009/07/31(金) 13:47:540862デフォルトの名無しさん
2009/07/31(金) 13:51:57君はPHPの良さを解っていないんだな。PHPで書いたプログラムの滑らかな動きはどの言語もかなわない。
0863デフォルトの名無しさん
2009/07/31(金) 13:59:270864デフォルトの名無しさん
2009/07/31(金) 14:48:100865デフォルトの名無しさん
2009/07/31(金) 15:28:38> FreeBSDとか入れたら最初から入ってるから
入ってない。
0866デフォルトの名無しさん
2009/07/31(金) 15:59:21基準が書いてないから推測になるけど、「HTMLのテンプレートにそのまま感覚で書ける」ってレベルなら
PHPがトップなのも頷けます。
0867デフォルトの名無しさん
2009/07/31(金) 17:12:27普通にインタプリタで走らせるとフレームワーク激重なんだが。
>>866
そもそもがテンプレートエンジンだからなPHPは。
そういやPHP/FIの実体はPerlスクリプトだったな。
0868デフォルトの名無しさん
2009/07/31(金) 17:18:56インタプリタで走らせる???
なんか勘違いしてないか?
CGI動作は、コンパイル後実行してるから、インタプリタじゃないぜ?
PHPが糞なのは同意だが。
0869デフォルトの名無しさん
2009/07/31(金) 17:41:34そりゃ厳密にはそうだが、mod_perlと違って実行時コンパイル型だから
フレームワークなんて使えたもんじゃねーよって話だよ。
汲んでくれ。
0870デフォルトの名無しさん
2009/07/31(金) 18:04:52なんか君は、いろいろ勘違いや偏見、知識の狭さがあると思う
CGI動作させれば、重いのはPerlだって同じ。
mod_phpで動作させれば、PHPだってmod_perlに匹敵するくらい速い。
そして、mod_phpを使わないPHPは”普通”じゃない
0871デフォルトの名無しさん
2009/07/31(金) 19:22:03それ自体のスピードは似たり寄ったりじゃないの?
0872デフォルトの名無しさん
2009/07/31(金) 19:29:01うん、似たりよったり。
ただ、mod_xxxみたいにメモリ常駐型でも一応差は出る
Java>Python>Perl>PHP>>>Ruby
0873デフォルトの名無しさん
2009/07/31(金) 19:34:390874デフォルトの名無しさん
2009/07/31(金) 19:36:14本には重要って書いてあるけど、そんな重要なの?
0875デフォルトの名無しさん
2009/07/31(金) 19:41:53やっと質問が来たw
例えば、
my $hash = {suzuki => 37, kimura => 43, nakamura => 21};
みたいに人の名前をキーに、年齢を持つハッシュがあれば、
my $name = shift;
print "$nameさんの年齢は、$hash->{$name}歳です";
って出来る。これを配列でやるとめんどいでしょ。
というより、ハッシュというのはPerlに限らず、基本的なデータ構造だよ。
0876デフォルトの名無しさん
2009/07/31(金) 19:42:32今からでも最強言語であるPHPをマスターする事をお勧めする。
0877デフォルトの名無しさん
2009/07/31(金) 19:45:13ダメな技術者ほど、特定の言語を支持するんだよな
0878デフォルトの名無しさん
2009/07/31(金) 19:45:29これが一番気持ち悪い
0879デフォルトの名無しさん
2009/07/31(金) 19:47:57ないわけないだろw
ただ、関数で要素の代入するのはキモイ
0880デフォルトの名無しさん
2009/07/31(金) 19:49:48Perl書ける人ってPHPも余裕で書けると思うけどな
個人的にperlが車のMTでPSPがATってイメージ
0881デフォルトの名無しさん
2009/07/31(金) 19:52:54s/PSP/PHP/
0882デフォルトの名無しさん
2009/07/31(金) 19:53:05PHP出来れば、他も出来るんだよ。あとは、Javaもお勧めするけどな。
まあ、俺みたいな天才は殆どの言語をマスターしてるんだがな。
>>880
書けるよ。俺はPerl→PHPだったが、先にPHPを学んだ方が良いという結論に達した。
0883デフォルトの名無しさん
2009/07/31(金) 20:01:160884デフォルトの名無しさん
2009/07/31(金) 20:01:48お前はまず、
ttp://blog.livedoor.jp/dankogai/archives/50993137.html
これでも嫁
0885デフォルトの名無しさん
2009/07/31(金) 20:18:570886デフォルトの名無しさん
2009/07/31(金) 20:25:39つーかPHPのarrayはperlの配列とハッシュをまぜたような奇怪なモノだからな。
いまだに慣れん
0887デフォルトの名無しさん
2009/07/31(金) 20:26:570888デフォルトの名無しさん
2009/07/31(金) 20:30:580889デフォルトの名無しさん
2009/07/31(金) 21:43:39例えばmod_perlを前提としているCatalystと実行時コンパイルを
前提としているEthnaが根本的に設計思想が違うのを分かってないなお前は。
んで同じ環境でもPHPは圧倒的に遅いんだが。
Perlがモジュールで切り離してるところをPHPは全部抱え込んでるからな。
モジュールやライブラリなしでJSONを一発で読み込んだりセッション管理をやってくれる
プログラミング言語なんてPHPくらいじゃないか?
>>882
> まあ、俺みたいな天才は殆どの言語をマスターしてるんだがな。
これでも眺めて身の程を知れ。
http://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E%E4%B8%80%E8%A6%A7
0890デフォルトの名無しさん
2009/07/31(金) 21:44:12アホか俺は。
0891デフォルトの名無しさん
2009/07/31(金) 22:21:09うん、アホに加え、いろいろ勘違いや偏見、知識の狭さがあると思う
0892デフォルトの名無しさん
2009/07/31(金) 22:40:36その餌じゃちょっと釣られる気がしない。
0894デフォルトの名無しさん
2009/07/31(金) 23:50:13そのEthnaってのがどういうものか知らんが、CGI動作させるかmod_php動作させるかで
技術的に差があるわけじゃないので、もしCGI動作させる前提で出来てるなら、
CGI動作させるメリットを取ってるだけじゃないのか?
mod_php前提のフレームワークだってあるだろうし。とういうかあって当然だし。
0895デフォルトの名無しさん
2009/08/01(土) 04:57:150896デフォルトの名無しさん
2009/08/01(土) 08:05:50無知乙。
例えばmod_perl+Catalystはモジュールをロードして常駐するタイプなので、
リクエストが来たら即座に対応できる。
mod_phpはコンパイラ起動のコストがないだけで、結局インタプリタが
動くのでオーバーヘッドは変わらない。
そしてPHPにまともに動くサーバー常駐型フレームワークは今のところない。
どっちの言語が優れているかという議論には興味ないが、負荷を考慮して
フレームワークを使うならPerl/RubyはあってもPHPという選択はありえんわ。
フレームワークなしで中規模以上の開発をするという選択もありえんし。
逆にお問い合わせフォームとかならPHPが手軽でいいんじゃね?
0897デフォルトの名無しさん
2009/08/01(土) 09:57:18お前は何か勘違いしてる
0898デフォルトの名無しさん
2009/08/01(土) 11:10:110899デフォルトの名無しさん
2009/08/01(土) 11:17:580900デフォルトの名無しさん
2009/08/01(土) 11:38:440901デフォルトの名無しさん
2009/08/01(土) 11:40:400902デフォルトの名無しさん
2009/08/01(土) 11:49:390903デフォルトの名無しさん
2009/08/01(土) 12:54:11一方でコード、一方で実行結果を表示したいです
perl-mode,cperl-modeをdescribe-modeで見てみたけど
そういったコマンドはないみたいなのですが
こういったことは出来ますか?
tuareg-modeやscheme-modeみたいに使えると
開発効率が段違いなんですが
0904デフォルトの名無しさん
2009/08/01(土) 13:40:17もしお分かりでしたらお力を貸して頂けたらと思います。
あるtxtファイルを読み込んで、他のtxtファイルに
10行・23文・150文字
という風に出力するプログラムを作ろうとしています。
$data="This is a raining day.It rain all the time.I feel so boring.";
@sentence = split(/\./, $data);
$i=1;
foreach $in1(@sentence){
@word = split(/ /, $in1);
$j=1;
foreach $in2 (@word){
print "第". "$i" . "行の第" . "$j" . "文字は " . "$in2" . "\n";
$j++;
}
$i++;
}
を書き換えたらできると言われたのですが、どの部分に足せばいいのか分かりません…少しいじるとすぐに動かなくなってしまいます。
0905デフォルトの名無しさん
2009/08/01(土) 14:26:34>>2
0906デフォルトの名無しさん
2009/08/01(土) 15:00:060907デフォルトの名無しさん
2009/08/01(土) 15:48:29○分毎に関数を実行したくてalarm関数を使おうとしたら、
WindowsのActive Perlはalarmが使えないようでできませんでした。
Active Perl 5.8.6 Build 881の環境でalarm使ってみたけど
時間経過しても一切反応無しでした。
WindowsでPerlを使って○分毎に指定の処理を実行させるにはどうすればいいですか?
0908デフォルトの名無しさん
2009/08/01(土) 17:57:30after使えば出来るよ
0909907
2009/08/01(土) 22:04:02ありがとうございます。
でも何故か即1度実行するだけで繰り返してくれませんでした…。
ソースは下記です。
#!/usr/bin/perl
use Tk;
my $autoup_flg;
my $timer_id;
my $cnt = 0;
my $main = MainWindow->new;
my $autoup = $main->Checkbutton(-text=>"auto update",
-variable => \$autoup_flg,-command=>\&auto_update)
->grid(-row=>0,-column=>0);
MainLoop;
sub auto_update{
if($autoup_flg == 1){
print "after 10 start\n";
$timer_id = $main->after(10,\&update);
}else{
print "after stop\n";
$main->afterCancel($timer_id);
}
}
sub update{
$cnt++;
print "$cnt loop\n";
}
0910デフォルトの名無しさん
2009/08/01(土) 22:21:25繰り返すときはafterじゃなくてrepeatでないかい。てかマニュアル読めよ
$timer_id = $main->repeat(10,\&update);
0911907
2009/08/02(日) 09:36:18できました。ありがとうございます。
オンラインマニュアル(http://www.forum.hell.org.ua/Docs/oreilly/perl3/tk/)
読んでるんですが全く知らない状態だと英語なので見つけにくくて…。
次からもう少し調べてみます。
0912デフォルトの名無しさん
2009/08/02(日) 12:55:34入門書なんて買わないでネットで探してやればいいじゃん。わざわざ買う必要ない。
基礎覚えたらソースいじったりして勉強。
0913デフォルトの名無しさん
2009/08/02(日) 13:42:530914デフォルトの名無しさん
2009/08/02(日) 14:18:18まあ、後輩だか知り合いだかに入門書は何が良いの?と聞かれても
ラクダしかまともな本がない時代にPerlかじったやつは答えようがないよね。
「初めてのPerl」だとWindows cmd.exeの挙動の違いでたいがいひっかかってるし。
0915デフォルトの名無しさん
2009/08/02(日) 17:18:36俺なんかまだ英語のらくだしかなかったし、fjですらPerlのまともな
情報は得られん時代だったから役にたたんな。
まあそれでも何とかかけたんだから大丈夫でしょ。
んー、助言するなら、レファレンスに使うならperldocがいい。
日本語訳もたまに転がってる。
普通の人が書いたのは間違ってることが多い。
例えば関数のレファレンスはperldoc perlfunc+検索語 でググれ。
初心者ならperldoc perlintroくらいから読み始めろ。
0916デフォルトの名無しさん
2009/08/02(日) 17:28:40{""}で囲めばできるね
for(my $i = 1;$i <= 3;$i++)
{
&{"func$i"};
}
0917デフォルトの名無しさん
2009/08/02(日) 17:58:55その時代だったら、UNIXマガジンの解説記事、入門記事で育ったんじゃねえの。
0918デフォルトの名無しさん
2009/08/02(日) 18:42:22日本語訳は二冊に分かれてて不便なうえに、
二冊とも買うと10000円超えるってがマヌケだな。
原著をいきなり買って辞書片手に挑戦しながら、
perlと英語の両方の勉強を続けるのが実は一番お得。
自分が知りたい(特殊な)情報は、英語のmlのwebアーカイブで見つかるというパターンが一番多い。
0919デフォルトの名無しさん
2009/08/02(日) 18:45:380920デフォルトの名無しさん
2009/08/02(日) 19:45:41-listvariableで指定した変数or配列の値の変更じゃなきゃできないですか?
Mastering Perl/TkとPerldoc見た感じ、それっぽいメソッドが見当たらなかった…
0921デフォルトの名無しさん
2009/08/02(日) 20:19:04雑誌類は執筆する側だったな当時は。
さすがにユニマガはないけどUNIXUSERとか。
最近は何も書いてないけど。
0922デフォルトの名無しさん
2009/08/02(日) 20:20:23> 辞書片手に
PC使えよって思うが。
0923デフォルトの名無しさん
2009/08/02(日) 21:47:310924デフォルトの名無しさん
2009/08/02(日) 22:04:080925デフォルトの名無しさん
2009/08/02(日) 22:06:03難しいというより、理解の拠り所となる知識が少ないから、見えてこないというか。
そして、そんな人にはリャマ本。
0926デフォルトの名無しさん
2009/08/02(日) 23:24:02時代認識がめちゃくちゃだぜ、おっさん。
0927デフォルトの名無しさん
2009/08/03(月) 00:36:36知識の大半はperldocから仕入れたな
日本語訳はあったけど、英語の方が読みやすかったような
0928デフォルトの名無しさん
2009/08/03(月) 09:58:190929デフォルトの名無しさん
2009/08/03(月) 13:12:57600点しかない、の間違いじゃないか?
そういう俺も600点だが。
0930デフォルトの名無しさん
2009/08/03(月) 22:16:01これだけはどうしても直らない、どうすればいいんだろう
0931デフォルトの名無しさん
2009/08/03(月) 22:20:19すごいね。
相当のトレーニングをしないとそうはなれないと思うわ。
経験的にかなりの長期間外国にいないと難しいと思う。
0932デフォルトの名無しさん
2009/08/03(月) 22:41:29リーディングだけに限れば海外経験なくてもネイティブ並みに上達可能だよ。
つかそういう人はザラにいる。知人も毎日日本語よりも英文のフィードの方を読みまくってる。
日本にいても余暇は英文しか読まないって生活は簡単に送れるからね。
0933デフォルトの名無しさん
2009/08/03(月) 22:43:18昔のK&Rとか、最近だとPEAAは誤訳がひどすぎて結局
原文買いなおしたよ。
0934デフォルトの名無しさん
2009/08/03(月) 22:52:16おまえの能力が劣等なだけ
0935デフォルトの名無しさん
2009/08/03(月) 22:59:29読むスピードが”同じ”になるのは結構難しいと思うよ。
まあそういう人がいることは確かだが、そういう人はスピーキング、リスニングもかなり上手なことが多い。
発音は別だが。
>>933
訳の問題はあるな。
>>934
はいはいワロスワロス
0936デフォルトの名無しさん
2009/08/03(月) 23:08:11スピーキングのスピードや語彙はネイティブと同等でなくてはおかしい。もちろん発音の善し悪しは別問題。
ライティングは「アルファベットを書き慣れる事による書く速さ」とか「英語タイプにどれだけ慣れているか」等
物理的な書く速さに依存するがそれらの基本的にはネイティブと同等であると考えられる。
リスニングは耳の聞き分け能力に依存するのでこれは何とも言えない。
0937936
2009/08/03(月) 23:16:34↓
物理的な書く速さに依存するが基本的にはネイティブと同等であると考えられる。
の間違いね。「それらの」が余計だった。
補足だが100%英語で、っていうのは頭の中の考えが全て英語なのはもちろん、
思考のスピードもネイティブな言語と同様って意味です。
リーディングでネイティブ並な人はほぼ必ずスピーキングもネイティブ並。
(ほぼ、というのは滑舌が悪くて単語を発音するのに時間がかかる人がいるから。)
逆は成立しない。
米国在住でも文字が読めない人の存在を考えればすぐに分かるが。
なぜならリーディングは文字->単語の認識の変換を行う時間を考えなければいけないから。
これは慣れ。もちろんん日本にいてトレーニングが可能なのは主にこの部分である。
0938デフォルトの名無しさん
2009/08/03(月) 23:18:51> そもそもリーディングでネイティブってことは、100%英語で考えられるって事だから、
ちがうだろ。
0939デフォルトの名無しさん
2009/08/03(月) 23:24:55違くないよ。少し考えればわかるだろ。
100%英語で考えられないでリーディングでネイティブなわけないでしょ。
ネイティブっていうのは、
文を見る->文字から単語、文を認識->意味を理解
他の言語を通すと
文を見る->文字から単語、文を認識->翻訳->意味を理解
この「翻訳」が時間の無駄なんだよ。ネイティブはその言語を直接理解できなければならない。
よって思考は全てその言語で行われる必要がある。
もし他言語の思考が入るとしたらそこには必ず翻訳が入っているためそれはネイティブとは呼ばない。
「ちがうだろ」じゃ何も伝わらないよwwちゃんと論理的な反論してね。
0940デフォルトの名無しさん
2009/08/03(月) 23:26:58リファレンス的なサイトを知ってたら教えてもらえませんか?
激しく巨大なわがままを言うと、画像付リファレンスだとパーフェクトです。
0941デフォルトの名無しさん
2009/08/03(月) 23:28:020942デフォルトの名無しさん
2009/08/03(月) 23:32:29俺が言ってるのはさ、
毎日英文ばっかり読んでりゃリーディングは完璧に身につくが、
ちょっとした挨拶とか電話の仕方とかジョークの返しとかはネイティブと喋ってないと
身につかないのよ。タイミングとかさ。一人で勉強してたら誰も直してくれないしさ。
まあ、カンバセーションの英語とマニュアル類の英文は別物だということに気づけ。
つかお前文章長いし粘着気味でキモい。
0943デフォルトの名無しさん
2009/08/03(月) 23:32:530944デフォルトの名無しさん
2009/08/03(月) 23:34:17子供が喧嘩をしている時だったか。
0945デフォルトの名無しさん
2009/08/03(月) 23:34:26> そもそもリーディングでネイティブってことは、100%英語で考えられるって事だから、
誰もそんなこと言っていない件
0946デフォルトの名無しさん
2009/08/03(月) 23:36:30職業になってるくらいだから、翻訳しながら英文読むとかアホのすること。
ボキャビルが足りないから辞書引く時間で損してるけどね。
0947デフォルトの名無しさん
2009/08/03(月) 23:36:58> リーディングでネイティブ並な人はほぼ必ずスピーキングもネイティブ並。
ちがうだろ。
0948939
2009/08/03(月) 23:37:06今日も俺の大勝利だなwwwwwwwwww
やっぱ「俺は英語できます君」は釣りやすくてウケるwwwwwwwwww
0949デフォルトの名無しさん
2009/08/03(月) 23:38:53翻訳なしで普通に読むだけなら誰でも出来るだろ。
問題なのは速さ。日本語と同程度に読めなきゃネイティブとは言わん。
>>947
だからまともな反論は出来ないのか?
スピーキングがネイティブ並じゃないならそいつのリーディングはネイティブ並じゃないんだよ。
0950デフォルトの名無しさん
2009/08/03(月) 23:40:41おつかれさま。
0951デフォルトの名無しさん
2009/08/03(月) 23:41:55>>939
> ネイティブっていうのは、
> 文を見る->文字から単語、文を認識->意味を理解
これに反論しただけだが?俺はネイティブじゃないがこのくらい出来るぞ。
0952デフォルトの名無しさん
2009/08/03(月) 23:43:530953デフォルトの名無しさん
2009/08/03(月) 23:44:30> 問題なのは速さ。日本語と同程度に読めなきゃネイティブとは言わん。
お前な、英語を語るならカタカナ語くらいちゃんと使え。nativeを辞書で引いて来い。
基礎中の基礎単語だろーに。
0954デフォルトの名無しさん
2009/08/03(月) 23:47:10その検索のしかたとってもいいな。ありと。
使えそうなのはすでに知ってた1サイトしかなかったけど。
どうでもいいけど、次スレのテンプレに中学生禁止を書いておいてほしい。
0955デフォルトの名無しさん
2009/08/03(月) 23:49:42それ別人なわけだが。。
>>951
> そもそもリーディングでネイティブってことは、100%英語で考えられるって事だから、
これを違うって言ってた人は君?そもそも日本語で考えた時点でネイティブじゃないっていうのは同意したのかな?
>文を見る->文字から単語、文を認識->意味を理解
できるのはいいとして、問題はその速さだから。
これを「日本語と同様の速さで」出来ないと英語を日本語と同様の速さで読むことはできないよ。
つまり、「意味を理解」の時点で英語での「日本語と同様の速度の」思考が必要とされる。
英語で日本語と同様に思考できるなら英語でのスピーキングは必ず日本語と同様になるはずである。
0956デフォルトの名無しさん
2009/08/03(月) 23:56:32お前、「ネイティブ並みの語学力」を「ネイティブ」だと勘違いしてるようだから、
native辞書で引いて来いって。読んでて恥ずかしい。
あと読むことと喋ることは全然違うから。文語で話す外人いたらキモチワルイだろ。
意味が通じるという点では同意するが、
> リーディングでネイティブ並な人はほぼ必ずスピーキングもネイティブ並。
これは有り得ない。
0957デフォルトの名無しさん
2009/08/04(火) 00:26:59世の中の英会話教室はそういう人をターゲットにしてて、
それまでやらなかった分野なんだから簡単に急成長するのは当たり前だけど、
英会話を見に付けても結局活かす場が無い
0958デフォルトの名無しさん
2009/08/04(火) 00:27:260959デフォルトの名無しさん
2009/08/04(火) 01:00:570960デフォルトの名無しさん
2009/08/04(火) 01:18:340961デフォルトの名無しさん
2009/08/04(火) 01:35:260962デフォルトの名無しさん
2009/08/04(火) 01:42:550963デフォルトの名無しさん
2009/08/04(火) 07:14:200964デフォルトの名無しさん
2009/08/04(火) 08:10:15そのうち、からかって「リンゴはアポー」とかレスする奴が出てきたりした頃、
熱くなってた奴らも無意味さに気づいて収束する。
0965デフォルトの名無しさん
2009/08/04(火) 11:56:560966デフォルトの名無しさん
2009/08/04(火) 12:03:20考え方さえ間違ってなきゃ、入門書片手に作れると思うよ。
まず、ダウンロードのリンク先をCGIにして
そのCGIで外部ファイルなりDBなりを使ってカウントアップ
その後、ファイルを書きだす。(mime_typeを指定すること)
もしくはファイルにリダイレクトでもいいけど。
とか、そういう感じで。
0967デフォルトの名無しさん
2009/08/04(火) 16:20:28WEBです;
スレチでしたか、すみませんでした;
それなのに丁寧にありがとうございます。
本を買って頑張ってみます。
0968デフォルトの名無しさん
2009/08/04(火) 18:33:59GTKっ使いやすい?
0969デフォルトの名無しさん
2009/08/04(火) 18:34:47めっさ誤字脱字してる・・・
GTK2使おうと思ってるんだけど
使い勝手とかどうですか?
それとも定番の他のソフトがあるのかな
0970デフォルトの名無しさん
2009/08/04(火) 18:47:27Perl/Tkが枯れてると思うが、今はGtk2一択じゃねーのかな。
GUIは書かないから何とも言えんが。
0971デフォルトの名無しさん
2009/08/04(火) 19:42:30レスどうも
やっぱりGtk2の一択みたいですね。
Perl/Tkは知りませんでした、調べてみます
0972デフォルトの名無しさん
2009/08/04(火) 23:07:57でも、日本語関係で大変な目に遭う。使うなら日本語の取り扱いからなんとかする必要が出てくる可能性有。
GUIはwindowsじゃないので違和感はあり。
WIN32::GUIは、Tkよりさらに手軽。でもGUIがとっても貧弱。
よくある一般的なGUIや窓を表示する程度だったら最も適切だと思った。
WIN::APIは、あんまやったことないけど、悪い印象はなかった。コーディングはTkよりややめんどい程度。
引数名が直感的じゃなかった。つーか記号みたいなLvに近い?だった。まぁ記号ではないけど。
あと、引数の書き方も見やすく綺麗に書きにくい感は多少だけどあった。
他はやったことナッシング。
0973デフォルトの名無しさん
2009/08/05(水) 08:33:46丁寧なレスありがとうございます。
順番に試して見ます
0974デフォルトの名無しさん
2009/08/06(木) 01:14:17$file = 'AAA.html';
use LWP::Simple;
getstore($url, $file);
この方法じゃ保存できたいんだけど、どうすればいいですか。
0975デフォルトの名無しさん
2009/08/06(木) 01:44:43どこで不具合が起きているのか突き止めてそれを修正すればいいです。
0976デフォルトの名無しさん
2009/08/06(木) 01:48:46レスポンスコードが403だからgoogleがlwpのリクエスト受けないのかな。ちゃんと調べてないので何とも言えないけど。
$url = 'http://search.yahoo.co.jp/search?p=aaa&search.x=1&fr=top_ga1_sa&tid=top_ga1_sa&ei=UTF-8&aq=&oq=';
yahooはいけたよ
0977デフォルトの名無しさん
2009/08/06(木) 01:51:10この方法だと保存できるのとできないのがあるみたいで…
そこでなんですけど、htmlを保存できる万能な方法ってないですかね。
0978デフォルトの名無しさん
2009/08/06(木) 01:57:28use Data::Dumper;
use LWP::UserAgent;
my $url = 'http://www.google.co.jp/search?hl=ja&q=aaa&lr=';
my $file = 'AAA.html';
my $ua = LWP::UserAgent->new( agent => 'bot' );
warn Dumper $ua->mirror($url, $file);
0979デフォルトの名無しさん
2009/08/06(木) 01:59:14ユーザエージェント偽装すれば
0980デフォルトの名無しさん
2009/08/06(木) 12:38:54catch(FooError ex) { ... }
catch(BarError ex) { ... }
のように例外クラスを指定してcatchするのはどうしたらいいですか。
0981デフォルトの名無しさん
2009/08/06(木) 12:54:17つErrorモジュール
0982デフォルトの名無しさん
2009/08/06(木) 13:14:52-----------------------------------
use strict;
#ちょっと画像データを10進数にしてみる
my $file = "./hogehoge.bmp";
my $count;
open FILE, "$file" or exit;{
binmode FILE;
local $/ = \1;
while(<FILE>){
$count ++;
print (sprintf("%03d", unpack("C", $_ )) . ($count % 16 ? " " : "\n")) ;
}
}close(FILE);
-----------------------------------
正常に動作しません。
症状:
1:なんか知らんけど改行の位置が乱れる場合がある。
2:その際、その周辺で高確率でsprintfの整形も乱れる。
3:プログラムを実行するたびにその位置がランダム。
環境:
1:windowsXP
2:ActivePerl5.8.7
3:秀丸5.01から perl -w <con >con を記入して実行。
0983982
2009/08/06(木) 13:46:23local $| = 1;
を書くと圧倒的に乱れる箇所が減少しました。
しかしそれでも整形や改行位置が乱れます。
なぜでしょう?
つーかPerlってメモリの使用具合で処理結果が乱れるんですか?
0984デフォルトの名無しさん
2009/08/06(木) 14:03:57my $pos;
for my $x (@list) {
if ($x eq "foo") {
$pos = $i;
last;
}
$i++;
}
print $pos, "¥n";
という処理をかっこよくかくにはどうしたらいいですか。
Rubyだとこんなかんじ。
pos = list.index {|x| x == "foo"}
print pos, "¥n"
0985デフォルトの名無しさん
2009/08/06(木) 14:10:45最近見たなと思ったら>>735ですか?
>>738で回答したんだけどその後返って来なくて結局どういう仕様なのかわからん
どういう動きが正しいの?
0986デフォルトの名無しさん
2009/08/06(木) 15:16:27use List::Util qw( first );
my $pos = first { $list[$_] eq 'foo' } 0..$#list;
my $pos = (grep {$list[$_] eq "foo"} 0..$#list)[0];
0987デフォルトの名無しさん
2009/08/06(木) 15:46:490988デフォルトの名無しさん
2009/08/06(木) 16:31:20@list = (10, 20, 30, 40, 50);
@list2 = slice @list, 2; # 3番目以降の要素をすべて取り出す
0990デフォルトの名無しさん
2009/08/06(木) 16:55:32ありがとうございます。
my $len = @list;
my @list2 = @list[$n..$len-1];
でできました。
スライス使う時には $list[1..3] ではなくて @list[1..3] なんですね。
ここを間違って悩んでました。
0991デフォルトの名無しさん
2009/08/06(木) 17:13:570992977
2009/08/06(木) 22:03:080993デフォルトの名無しさん
2009/08/06(木) 22:17:30my $name = "map";
my $val = defined &$name;
print Dumper($val); #=> ''
この例だと$valは偽ですが、これが真となるようにできますか。
0994デフォルトの名無しさん
2009/08/06(木) 22:38:340995デフォルトの名無しさん
2009/08/06(木) 23:33:10use strict;
use Test::Simple tests => 1;
my $h1 = {'a'=>1};
my $h2 = {'a'=>2};
ok(%$h1 == %$h2); #=> ok
%$h1 と %$h2 は異なるのに、ok(%$h1== %$h2) が成功してしまいます。
どうしてでしょうか。
0996デフォルトの名無しさん
2009/08/06(木) 23:36:54異なるかどうかを調べていないからでしょう
0997デフォルトの名無しさん
2009/08/06(木) 23:42:37(cf. ttp://d.hatena.ne.jp/yumatsumo/20071207/1197002522)
'1/8' == '1/8'を評価して、数値コンテキストで評価すると、/以降は無視されて、
1 == 1 を評価して真が返る
Test::Moreのis_deeplyを使って
is_deeply($h1, $h2)
としてやればいい
0998デフォルトの名無しさん
2009/08/06(木) 23:47:12ありがとうございます。Perlではハッシュが同値かどうかを簡単に調べる方法はないということなんですね。
自分なりに試した結果、ok(Dumper($h1) eq Dumper($h2)) でうまく動作してくれているんですが、この方法でもいいでしょうか。
0999デフォルトの名無しさん
2009/08/07(金) 00:21:10ハッシュの中身に関数入ってるとうまく動かなくね?
1000デフォルトの名無しさん
2009/08/07(金) 02:39:3010011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。