Perlについての質問箱 21箱目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2005/12/12(月) 03:55:48"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 http://pc8.2ch.net/php/ )
CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
http://www.perl.org/get.html
● 2005/12/12現在の最新版: 5.8.7
● 2005/12/12現在の開発版: 5.9.2
リンク集は>>2-3
過去スレは>>4-5
0002デフォルトの名無しさん
2005/12/12(月) 03:56:16Perlプログラミング講座: http://www.site-cooler.com/kwl/perl/
[本]
リャマ: http://www.oreilly.co.jp/books/4873111269/
駱駝: http://www.oreilly.co.jp/books/4873110963/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/books/4873112028/
[オンラインマニュアル] (追加)
最新のドキュメント: http://search.cpan.org/~nwclark/perl-5.8.7/
perl5.8.xのドキュメント(一部): http://www.kt.rim.or.jp/~kbk/perl-5.8/
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/~kbk/perl5.005/
日本語ドキュメント検索: http://www.cpan.jp/search.cgi
perldoc.jp: http://www.perldoc.jp/
Perldoc.com: http://www.perldoc.com/
0003デフォルトの名無しさん
2005/12/12(月) 03:56:46CPAN.com: http://search.cpan.org/
河馬屋二千年堂: http://homepage3.nifty.com/hippo2000/
[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
Perlの小技: http://homepage3.nifty.com/hippo2000/perltips/index.htm
[Perl5.8Unicodeメモ]
http://www.pure.ne.jp/~learner/program/Perl_unicode.html
http://www.namazu.org/~tsuchiya/perl/perl-5.8.html
http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
0004デフォルトの名無しさん
2005/12/12(月) 03:57:301 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/
0005デフォルトの名無しさん
2005/12/12(月) 03:58:0011 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デフォルトの名無しさん
2005/12/12(月) 07:21:570007デフォルトの名無しさん
2005/12/12(月) 07:57:00テンプレにあるサイトくらい回るのが当然だし
質問者はそれでも分からないっていってるんだろうから
…蒸し返してごめん。一乙
0008デフォルトの名無しさん
2005/12/12(月) 08:03:03回答したいやつが勝手に回答すればいいだけのこと。
質問者が分からないならお前が回答してやれ。
0009デフォルトの名無しさん
2005/12/12(月) 08:15:150010デフォルトの名無しさん
2005/12/12(月) 08:25:22乙
0011デフォルトの名無しさん
2005/12/12(月) 09:48:25埋まった質問は掘りだされることないし。
0012デフォルトの名無しさん
2005/12/12(月) 14:26:59何ムキになってるんですか?
0013デフォルトの名無しさん
2005/12/12(月) 14:51:170014デフォルトの名無しさん
2005/12/12(月) 15:12:39まあまあ落ち着いて。
にしても……こういう時に限って質問無いんだよな。
0015デフォルトの名無しさん
2005/12/12(月) 15:16:05use Hoge qw(abc def);
use Hoge qw{abc def};
どれが一番クールですか
0016デフォルトの名無しさん
2005/12/12(月) 15:33:52qw// はリストコンストラクタだから、通常の ( ... ) と合わせて
qw( ... ) と書くのが一番「自然」。他の演算子やマニュアルの
凡例との整合を取るなら qw/ ... / 。B::Deparse の出力では
qw[ ... ] をよく見る。それ以外の文字を使う理由は寡聞にして
知らないし、好みの問題で優劣は無い。
0017デフォルトの名無しさん
2005/12/12(月) 20:01:14もしかして僕らのヒーロー、ラリーヲールたん?
0018デフォルトの名無しさん
2005/12/12(月) 20:11:520019デフォルトの名無しさん
2005/12/12(月) 22:04:13if ($in{'command'} eq "start") { $first = 5; }
elsif ($in{'command'} eq "next") { $first ++; }
startボタンを押したらnextボタンが表示されるようにしてあります。
nextボタンを押したら $first に1加えるようにしたいのですがうまくいきません。
どうすればうまく動くようになるのでしょうか?よろしくお願いします。
0020デフォルトの名無しさん
2005/12/12(月) 22:09:040021デフォルトの名無しさん
2005/12/12(月) 22:17:160022デフォルトの名無しさん
2005/12/12(月) 22:19:130023デフォルトの名無しさん
2005/12/12(月) 22:22:54よりわかりやすく説明できるように整理しよう。
・やってみたこと
・出た結果
・期待した結果
をそれぞれその場にいない人にも伝わるように日本語に直してみよう。
現場で現象を見ているあなた自身で「わかりにくい」と思う説明では誰にも理解できんです。
また整理しているうちに、それだけで解決してしまうケースも多々あるのよ。
0024デフォルトの名無しさん
2005/12/12(月) 22:56:02if ($in{'command'} eq "start") { $first = 5; }
elsif ($in{'command'} eq "next") { $first ++; }
print "$first";
最初startボタンを押したときに $first の値として 5 が表示されて、
次にnextボタンを押したら $first の値として 1 が表示されました。
startボタンを押したあとnextボタンを押したときに、
$firstに代入された5という数字に1を加えた6を表示させたいと思ってたのですがうまくいきませんでした。
0025デフォルトの名無しさん
2005/12/12(月) 23:10:170026デフォルトの名無しさん
2005/12/12(月) 23:21:340027デフォルトの名無しさん
2005/12/12(月) 23:23:43その次にnextボタンを押したら前に代入された5に1を加えた6が代入されるのではないかと思いまして。
そのように動作させるためにはどうすればよいのでしょうか?
0028デフォルトの名無しさん
2005/12/12(月) 23:27:28何所から説明したものか…とりあえず…それCGIか?
CGIならWebProg板に移動してもらおうか。
CGIならCGIで根本的な動作原理すらわかってないようだし…
0029デフォルトの名無しさん
2005/12/12(月) 23:27:37$firstもしくは"5"が伝わってない以上仕方ねえよ。webprog行ってくれ
0030デフォルトの名無しさん
2005/12/12(月) 23:29:120031デフォルトの名無しさん
2005/12/12(月) 23:31:01Perl/Tkで$inとか出てくるかな
まあその可能性も無いわけじゃないから一応CGIかどうか訊いた訳だが
0032デフォルトの名無しさん
2005/12/12(月) 23:44:33スレ違いでしたらすいませんでした。
0033デフォルトの名無しさん
2005/12/13(火) 01:28:490034デフォルトの名無しさん
2005/12/13(火) 04:10:29Linuxならできる
0035デフォルトの名無しさん
2005/12/13(火) 04:11:410036デフォルトの名無しさん
2005/12/13(火) 06:42:260037デフォルトの名無しさん
2005/12/13(火) 07:47:38印刷のダイアログ自体のデザインを
変えたりなんかは出来るんでしょうか
0038デフォルトの名無しさん
2005/12/13(火) 08:19:120039デフォルトの名無しさん
2005/12/13(火) 08:21:400040Lavi
2005/12/13(火) 11:38:03現在、メールフォームを作っておりまして、
regist.cgiでファイルにログ書き出しと同時に
&send_mail();という具合でsendmailを呼んでいるのですが、
うまく指定したアドレスにメールが送信されません。
原因はわかりますでしょうか?以下ソースです
# sendmailのパス
$path_sm = '/usr/sbin/sendmail';
$MailTo = '[email protected]';
$MailFrom = 'hoge Official';
0041Lavi
2005/12/13(火) 11:38:33sub send_mail{
foreach $key (keys %FORM){
$MAIL_FORM{$key} = &jcode::jis($FORM{$key});
}
@r = ("男性", "女性");
$MAIL_FORM{'sex'} = &jcode::jis($r[$MAIL_FORM{'sex'}]);
open(MAIL, "|$path_sm -t");
my $tpl = new CGI::FastTemplate("./cgi-bin/template/");
$tpl->define(main => "mail.tm");
$tpl->assign(NUMBER => $count);
$tpl->assign(DATE => $date);
$tpl->assign(SEND_ADDRESS => $MailTo);
$tpl->assign(NAME => $MAIL_FORM{name});
$tpl->assign(ADDRESS => $MAIL_FORM{address});
$tpl->assign(SEX => $MAIL_FORM{sex});
$tpl->assign(AGE => $MAIL_FORM{age});
$tpl->assign(TEL => $MAIL_FORM{tel});
$tpl->assign(EMAIL => $MAIL_FORM{email});
$tpl->assign(TEXT => $MAIL_FORM{text});
$tpl->parse(RESULT => main);
print MAIL $tpl;
close(MAIL);
}
おねがいしますm(__)m
0042デフォルトの名無しさん
2005/12/13(火) 11:53:15そのままsendmailのパイプにprintしてもどうにも
ならんと思うが。
CGI::FastTemplateのマニュアルのfetchの説明
あたりをよく嫁。
0044デフォルトの名無しさん
2005/12/13(火) 13:02:51if 文について勉強しる。
0045Lavi
2005/12/13(火) 14:07:14http://perldoc.jp/docs/modules/CGI-FastTemplate-1.09/FastTemplate.pod
を読破してきましたが、結果
print MAIL $tpl; ⇒ print MAIL $$tpl;
とすればいいということでしょうか?
0046Lavi
2005/12/13(火) 14:10:36メールの書式にtemplate使いながら、
他のCGIでsendmailを呼び出して,送信すること自体 無理なんですかね
orz
0047デフォルトの名無しさん
2005/12/13(火) 14:17:48コマンドラインから引数nを一つとって
n=3なら
◆
◆◆
◆◆◆
◆◆
◆
n=4なら
◆
◆◆
◆◆◆
◆◆◆◆
◆◆◆
◆◆
◆
nが文字列ならエラー表示して終了といったスクリプトを
for文一回のみ、配列は無し、if文も無しで1行で組むということは可能でしょうか?
0048デフォルトの名無しさん
2005/12/13(火) 14:27:52宿題はこちらへ。
Perlでリクに答えるスクリプトを作るスレ
http://pc8.2ch.net/test/read.cgi/tech/1086143976/
0049デフォルトの名無しさん
2005/12/13(火) 14:32:41どこをどう読んできたんだお前は(;´Д`)
0050Lavi
2005/12/13(火) 14:36:47━━前略━━
$tpl->parse(RESULT => main);
$mail_data = $tpl->fetch("RESULT");
#print MAIL $tpl;
print MAIL $mail_data;
close(MAIL);
}
考えてみたのですが、もしかしてこういうことでしょうか;
0051Lavi
2005/12/13(火) 14:50:18うごかね orz
0052デフォルトの名無しさん
2005/12/13(火) 14:58:54どうしてそこまでいって間違えるかね...
print MAIL $$mail_data;
だろ。
あとコマンドに食わせる奴がうまくいかないときは、
まずファイルに書いてみて期待した通りの出力に
なってるか確認する、とかしてみるのがセオリー。
0054デフォルトの名無しさん
2005/12/13(火) 15:21:53あと厳密にはスレ違いなんで今度から>>1読んでくれ。
0055デフォルトの名無しさん
2005/12/13(火) 17:20:40perl -e 'die if (($n = shift) ne $n+0); print "◆" x ($n-abs($n-$_)),"\n" for (1..$n*2-1)' 3
0056デフォルトの名無しさん
2005/12/13(火) 19:51:13ActivePerl をインタプリタとして組み込みたいんだが
PerlEz(限定インタフェイス)
perl58.dll 参照
以外にお手軽に組み込める、COMインタフェイスとか存在しない?
なければ自分で作ろうと思うのだけど、できれば
perl58.dll が見つからなくても動くバイナリを作りたい。
PerlEz を使ってみたけど、機能的に限定されすぎてるし、
実行形式が perlez.dll を要求するようになっちゃう。
0057デフォルトの名無しさん
2005/12/13(火) 20:03:12できれば標準モジュールで
0058デフォルトの名無しさん
2005/12/13(火) 20:44:06ありますね
0059デフォルトの名無しさん
2005/12/13(火) 20:51:340060デフォルトの名無しさん
2005/12/13(火) 20:58:26わざわざ検索しないでも、トップページのド真ん中にリンクがあるよ。
http://search.cpan.org/modlist/File_Name_System_Locking
0061デフォルトの名無しさん
2005/12/13(火) 21:04:53どうもです
具体的にはどれがいいんですかね
0062デフォルトの名無しさん
2005/12/13(火) 22:04:48えーと、staticにリンクしたいってこと?
0063デフォルトの名無しさん
2005/12/13(火) 22:21:01うんにゃ
手元では、perl.h のダイナミックリンクは成功してるけど
インポートライブラリを使いたくないのだ。
ActivePerlない環境でもそれなりに動いてほしいので。
環境は BCB
0064デフォルトの名無しさん
2005/12/14(水) 02:52:34普通にLoadLiblary & GetProcAddressはだめなの?
0065デフォルトの名無しさん
2005/12/14(水) 11:21:17それを(ある程度)勝手にやってくれる方策を探してたのだけど
あきらめて自分で作りまつ
ヘッダ&インポートライブラリから定義抜き出してラップすんのマンドクサッ
いいものができたらBCB&デルスレに貼るyp
0066デフォルトの名無しさん
2005/12/14(水) 15:22:05Windowsで、Script機能を自作プログラムに組み込むための標準的な機構として、
Windows Script Interfacesというのがある。
ttp://msdn.microsoft.com/library/en-us/script56/html/4c750627-6797-4857-9f5e-e5f54371f83c.asp?
JScript/VBScriptと同じようにPerlScriptもイケルはず。
0067デフォルトの名無しさん
2005/12/14(水) 17:52:27$hoge[0]='あああ',$hoge[1]='いいい',$hoge[2]='ううう',$hoge[4]='えええ''
があるとしたら、'ううう'という言葉から$hoge[2]の2という数字を知りたいのです。
0068デフォルトの名無しさん
2005/12/14(水) 17:56:10そういう用途には逆マップのハッシュを使え。
もちろん要素は重複しないのだな?
%reverse_map{@hoge} = (0..$#@hoge);
0069デフォルトの名無しさん
2005/12/14(水) 17:59:04ありがとうございます。
ディレクトリのファイル名を読み込んで、使いたかったんです。
0070デフォルトの名無しさん
2005/12/14(水) 18:01:31List::MoreUtilsにfirst_indexなんてのもある、と一応紹介。
繰り返し処理するならハッシュに突っ込んだほうが良いね
http://search.cpan.org/~vparseval/List-MoreUtils-0.17/lib/List/MoreUtils.pm
my @list = (1, 4, 3, 2, 4, 6);
printf "item with index %i in list is 4", firstidx { $_ == 4 } @list;
__END__
item with index 1 in list is 4
0071デフォルトの名無しさん
2005/12/14(水) 18:04:04ありがとうございます。
使い方よく見てみます。
0072デフォルトの名無しさん
2005/12/14(水) 18:25:35for($i=0; …を書くのめんどいから使いまくってたよアヒャ
0073デフォルトの名無しさん
2005/12/14(水) 18:30:19ttp://perldoc.jp/docs/perl/5.6.1/perlop.pod
のRange Operators
> 現状の実装では、foreach ループの式の中で範囲演算子を使っても一時配列は作りませんが、古い Perl は以下のようなことを書くと、大量のメモリを消費することになります:
> for (1 .. 1_000_000) {
> # code
> }
foreach(for)に限っては新しいPerlなら大丈夫
0074デフォルトの名無しさん
2005/12/14(水) 18:44:11そうなんだぁ、最適化解釈されてて大丈夫なんだ。ありがとうございます。
0075デフォルトの名無しさん
2005/12/14(水) 19:17:360076デフォルトの名無しさん
2005/12/14(水) 19:19:440077デフォルトの名無しさん
2005/12/14(水) 19:20:01kwsk
0078デフォルトの名無しさん
2005/12/14(水) 19:21:140079デフォルトの名無しさん
2005/12/14(水) 19:25:210080デフォルトの名無しさん
2005/12/14(水) 19:26:19とかなら文法的には合ってるよな
0081デフォルトの名無しさん
2005/12/14(水) 19:43:58この展開ってできるんですか?! いろいろテストしても書式エラーになってしまう...
いままで逆マップはforで作ってたけどこれやりたい
0082デフォルトの名無しさん
2005/12/14(水) 19:48:33my %reverse_hash = ();
my @hoge = qw(a b c);
@reverse_hash{@hoge} = (0 .. $#hoge);
0083デフォルトの名無しさん
2005/12/14(水) 19:49:32打ち間違い。わりいわりい。
@hash{@a} = 0..$#a;
0084デフォルトの名無しさん
2005/12/14(水) 19:50:310086デフォルトの名無しさん
2005/12/14(水) 20:10:48その配列、確か先日5000万突破してんねんで。メチャメモリ喰ってんぜ
0087デフォルトの名無しさん
2005/12/14(水) 20:14:270088デフォルトの名無しさん
2005/12/14(水) 20:16:34171!で1.#INFという結果になってしまいました
もっと大きい数を扱うにはどうすればいいですか?
0089デフォルトの名無しさん
2005/12/14(水) 20:22:47%INSTALL_PATH%\lib\Math
http://search.cpan.org/modlist/Data_and_Data_Types/Math
0090デフォルトの名無しさん
2005/12/14(水) 20:40:58newだけでいいのか、楽だ
0091デフォルトの名無しさん
2005/12/14(水) 21:12:57use bigint;
まあ、中身はMath::BigIntだけどね
0092デフォルトの名無しさん
2005/12/15(木) 09:37:300093デフォルトの名無しさん
2005/12/15(木) 10:01:15C言語のcharのように文字を操作したく、現在
@chars = split(//, $string);
こんな事してるんですが、もっと効率のいい方法ってありますか
よろしくお願いします
0094デフォルトの名無しさん
2005/12/15(木) 10:12:12逆説的だがC言語のようには操作しないのが一番。
Perlならもっと高級な文字列操作ができるのでうまく使え。
0095デフォルトの名無しさん
2005/12/15(木) 10:32:060096デフォルトの名無しさん
2005/12/15(木) 10:48:011文字ずつに分解するのはそれが楽。
でもCっぽくってことならunpackとpackを使った方がいいと思う。
そうでなければsubstrとかでいちいち文字列の長さを使って操作することになる。
それにしてもわざわざC風に扱いたくなるPerlの文字列処理ってなんだろう?
0097デフォルトの名無しさん
2005/12/15(木) 10:48:09009893
2005/12/15(木) 11:15:47物凄い複雑な正規表現を使うより、
C風に扱った方が後々メンテする人が楽だと思いました。
すみませんでした。
0099デフォルトの名無しさん
2005/12/15(木) 11:42:17ケースバイケースだけど、多くのロジックは正規表現を上手く使えば、
C 風の文字列処理よりずっとスッキリする。複雑だな、と感じるのは
正規表現に対する理解が足りないからじゃね?
メンテナンスする人間も正規表現(ひいては Perl)に対する理解が浅いと
いうことが今の時点で分かりきってるなら、開発言語を変えることを勧めるよ。
010056
2005/12/15(木) 12:09:18遅レスだけど遅延ロードはOSの実装ではなく
ヘルパライブラリの実装であることに気付いた今日この頃。
いまターゲットにしているBorlandでも
遅延ロード&インタプリタ駆動はできました。
あとはライブラリが見つからなかった際のエラーハンドリング。
0101デフォルトの名無しさん
2005/12/15(木) 12:32:120102デフォルトの名無しさん
2005/12/15(木) 12:48:18UNIXのPerlにはsharedLibraryの関数を直接ロードできるモジュールってあるの?
0103デフォルトの名無しさん
2005/12/15(木) 12:52:02ねーよwww
0104デフォルトの名無しさん
2005/12/15(木) 12:58:13入ってないような
ttp://perl.infoware.ne.jp/documents/stdmodule5.6.0.html
0105デフォルトの名無しさん
2005/12/15(木) 13:02:02どうもありがとう
0106デフォルトの名無しさん
2005/12/15(木) 19:00:47近頃は佐藤くんや鈴木さんでもエディタの検索窓で正規表現使えるんだから。
0107デフォルトの名無しさん
2005/12/15(木) 22:58:27Web系ならCatalystじゃね?
0108デフォルトの名無しさん
2005/12/15(木) 23:05:08C に無い関数はほとんど使わない。
正規表現やハッシュを一切使わない。
for とかも for $val ( @array ) { print $val } じゃなく
for($i=0;$i<$max;$i++){ print $array[$i] } みたいに必ず添字付きだし。
自分には理解しづらくてメンテしにくい。
人それぞれだからかまわないんだろうけど...
自分の書いたスクリプトも、そいつにしてみたらすごく変に見えるんだろうなぁ。
0109デフォルトの名無しさん
2005/12/15(木) 23:13:35> いるよね。変数に$を付けただけの C みたいなスクリプト書くヤツ。
Cに移植する可能性も考えて試験的実装をしてみるというケースもあるけどな。
0110デフォルトの名無しさん
2005/12/15(木) 23:21:47C言語使える人の数 >>>> Perl 使える人の数
そもそも Perl わかりにくい。
なんで変数に$を付けないといけないんだ?
読みにくくてしかたない
0111デフォルトの名無しさん
2005/12/15(木) 23:24:470112デフォルトの名無しさん
2005/12/15(木) 23:37:12( Д ) ゚ ゚
0113デフォルトの名無しさん
2005/12/15(木) 23:58:36&call("&disp();");
sub call(){
my $func = shift;
eval $func;
}
sub disp(){
print "Hello!!";
}
ってなことをやりたいんですが、もう少しエレガントな方法はないものかと。。。
0114デフォルトの名無しさん
2005/12/16(金) 00:02:55ふつうに eval( "disp()") しない理由は何?
0115デフォルトの名無しさん
2005/12/16(金) 00:05:23&{$func_name};
0117デフォルトの名無しさん
2005/12/16(金) 00:49:50書かれるとコメントがついていても意図が汲み取れない
ケースが出てくる
何でも正規表現で書こうとするのは病気
0118デフォルトの名無しさん
2005/12/16(金) 01:17:10そもそも、そういうケースって Perl で処理するのに向いてるのか?
具体例を示さないと。
0119デフォルトの名無しさん
2005/12/16(金) 02:56:11動的ってのが、文字列からプサブルーチン名を得ないと
イケナイノならeval なのだけど、
たいていのケースではサブルーチンのリファレンスで事足りるのでね?
0120デフォルトの名無しさん
2005/12/16(金) 03:21:34my %sub = (foo => \&foo, bar => \&bar, error => \&error);
sub call {
my $name = shift;
$sub{ UNIVERSAL::isa($sub{$name}, 'CODE') ? $name : 'error' }->(@_);
}
call(foo => 0..4);
このページ全部読んでおく事を勧める。
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq7.html
0121デフォルトの名無しさん
2005/12/16(金) 05:57:27変数に$付けたくて仕方なし
0122デフォルトの名無しさん
2005/12/16(金) 13:13:18リンク先のコンテンツをGETし続けたいのですが、
url_regex や text_regex、また、n=> も指定できない状況にあります。
HTMLソースの中で指定できるのは、NEXTというイメージリンクのURLである
<img src="http://www.hoge.com/hoge.gif" border="0">の
http://www.hoge.com/hoge.gifなのですが、
これを使ってうまく次のページをGETする方法はありますか。もし知ってたら
方法を教えていただけますか
0123デフォルトの名無しさん
2005/12/16(金) 13:42:05ここはCGIのスレじゃないです。
0124デフォルトの名無しさん
2005/12/16(金) 13:52:21おちつけ
0125デフォルトの名無しさん
2005/12/16(金) 14:18:21<a href="hoge.html"><img src="hoge.gif"></a>
というリンクを含んだコンテンツを食わせて$mech->links()で
WWW::Mechanize::Linkオブジェクトをとりだしてみたが、
imgタグを特定できるような情報がないので今のままじゃ
どうにもならないと思われる。かろうじてimgがふくまれていた
というのが[IMG]でわかる程度だな。
$VAR1 = [
bless( [
'hoge.html',
'[IMG]',
undef,
'a',
bless( do{\(my $o = 'http://example.jp/foo.html')}, 'URI::http' ),
{
'href' => 'hoge.html'
}
], 'WWW::Mechanize::Link' )
];
0126デフォルトの名無しさん
2005/12/16(金) 15:05:52$hoge{'aaa'} = 0;
$hoge{'bbb'} = 1;
$hoge{'cac'} = 2;
$hoge{'ddd'} = 3;
でキーに'a'を含むもの
$hoge{'aaa'} = 0;
$hoge{'cac'} = 2;
を取り出すように。
0127デフォルトの名無しさん
2005/12/16(金) 15:09:020128デフォルトの名無しさん
2005/12/16(金) 15:43:08http://search.cpan.org/~davecross/Tie-Hash-Regex-0.10/Regex.pm
0129デフォルトの名無しさん
2005/12/16(金) 15:52:03「効率的に」ってことであればデータ構造の持ち方を考えるしかない。
単純にってことだったら grep keys なんかでいいんでは?
@hoge{grep(/a/, keys %hoge)
0130デフォルトの名無しさん
2005/12/16(金) 16:04:44そのモジュールにある他の関数などを使わない場合、
use Hoge qw( 使う関数 );
を使うとモジュールの読み込みは早くなりますか?
0131デフォルトの名無しさん
2005/12/16(金) 16:13:23モジュールの実装にもよるが通常はExportしてるだけだからならない
逆に言えばなる物も有り得る
0132デフォルトの名無しさん
2005/12/16(金) 16:15:06>>131 に補足。
http://perldoc.jp/docs/perl/5.8.0/AutoLoader.pod
CGI.pm も自前で遅延コンパイルしているな。
使用する関数を明示する意味で use Hoge qw( ... ) する事もある。
0133デフォルトの名無しさん
2005/12/16(金) 16:19:10ちょっと見てみました。
なんかできそうです。今から試してみます。
ありがとうございます!
0134デフォルトの名無しさん
2005/12/16(金) 23:37:400135デフォルトの名無しさん
2005/12/16(金) 23:41:17スレ違いもしくは板違い
0136デフォルトの名無しさん
2005/12/17(土) 00:23:180137デフォルトの名無しさん
2005/12/17(土) 05:17:56式は自分で書けます。
0138デフォルトの名無しさん
2005/12/17(土) 06:46:57use Math::Matlab;
0139デフォルトの名無しさん
2005/12/17(土) 19:54:43他の方法があったらおながいします。
0140デフォルトの名無しさん
2005/12/17(土) 20:00:150141デフォルトの名無しさん
2005/12/17(土) 20:41:01ハンドラでそれを参照したりしたいのですが、
グローバル変数を使う以外の方法はないでしょうか?
0142デフォルトの名無しさん
2005/12/17(土) 22:21:04クロージャ
0143デフォルトの名無しさん
2005/12/18(日) 01:05:20ある二つの正規表現がある。
ただし限定条件として、どちらも/^foo$/の形式を取る。
両方の正規表現にマッチする文字列を一つ見つけるか、
もしくは一つも存在しないことを示したい。さてどうする?
0144デフォルトの名無しさん
2005/12/18(日) 01:13:520145デフォルトの名無しさん
2005/12/18(日) 01:17:53とりあえず ?{ } や ??{} が登場したら解くのをあきらめて逃げる。
0146デフォルトの名無しさん
2005/12/18(日) 02:35:230147デフォルトの名無しさん
2005/12/18(日) 03:22:34標準モジュールもさがせないんですか?
低脳な質問はWebProg板でしてね。
ここはPerlのプロフェッショナル専用のスレだから
0148147
2005/12/18(日) 03:23:270149デフォルトの名無しさん
2005/12/18(日) 03:29:22あるよ。なにしたいの?
0150146
2005/12/18(日) 04:58:480151デフォルトの名無しさん
2005/12/18(日) 13:46:10時刻オブジェクトの保持と、strptime()やstrftime()を
効率良くやりたいんです。POSIX.pmはstrftime()しか
無いしリソースを食うので…
0152デフォルトの名無しさん
2005/12/18(日) 16:35:180153デフォルトの名無しさん
2005/12/18(日) 18:58:15ところで、%{パッケージ::}というハッシュにアクセスすると、
そのパッケージ内の変数・関数・子パッケージすべて列挙できるんだな。
さっき必要性があって調べたら、こんな方法とは目から鱗だった
0154デフォルトの名無しさん
2005/12/18(日) 19:18:12…
0155デフォルトの名無しさん
2005/12/18(日) 19:19:20&{
my $sub= sub{
print $_[0];
$sub->("再起\n");
};
}("初起\n");
#動く。
&{
my $sub; $sub= sub{
print $_[0];
$sub->("再起\n");
};
}("初起\n");
コンパイル時でのmyとsubの認識の順番が原因と思ったのですが、正解でしょうか?
代入演算子が右側から処理していくため、コンパイル時も右からの認識と言うことでしょうか??
もしそうだとしたら、コンパイルは静的にレキシカルであってほしい。
見た目とスコープが噛み合わないのはいかがなものだろう。
よって、この処理結果を改善してほしい。
0156デフォルトの名無しさん
2005/12/18(日) 21:21:17順番じゃなくてスコープの問題。
myが左辺で使われた時、右辺はmyのスコープ外。
my $a = $a; で、左辺の$aと右辺の$aは別の変数。
my $sub = sub {...;$sub->...;}; でも同じ。
左辺の$subと右辺の$subは別の変数。
0157デフォルトの名無しさん
2005/12/18(日) 21:51:32右辺に{}があるときは実行時にその定義を変更してほしいですな。
実行そのものは、リファレンス代入のほうが先にされるわけだし…。
これは順番が噛み合わなくなって変になる仕様だ。
0158デフォルトの名無しさん
2005/12/19(月) 02:41:28その方が仕様として整合性が取れないじゃないか。逆に直感的じゃなくなるよ。
0159デフォルトの名無しさん
2005/12/19(月) 04:37:51localtime とか time とか use Time::Local して timelocal 使うとか。
文字列に変えたり文字列から値を切り出したりするのは perl だから
自分で作っても大差ないような気がする。
0160デフォルトの名無しさん
2005/12/19(月) 11:04:52それに適したモジュールや解説ページなどはないでしょうか
0161デフォルトの名無しさん
2005/12/19(月) 13:51:510162デフォルトの名無しさん
2005/12/19(月) 20:56:32$buf eq 'hoge'
より
$buf =~ /^hoge$/
の方が早いのはなんで・・?
0163デフォルトの名無しさん
2005/12/19(月) 22:18:53たぶん、測定時の$bufが、パターンが成立可能な文字列長よりも短かったから。
0164デフォルトの名無しさん
2005/12/20(火) 00:13:29途中で改行があると、動作しません。改行をはさんだ削除はどうすればいいでしょうか?
改行あると動作しないソース
#!C:/perl/bin/perl
$file="a.txt";
$outfile="result.txt";
open (IN, $file) ;
open (OUT, ">$outfile") ;
while (<IN>) {
s/<.*?>//g;
print OUT $_;
}
close (IN);
close (OUT);
0165デフォルトの名無しさん
2005/12/20(火) 00:49:39メモリに余裕があるなら1行ずつじゃなくて一度に全部読み込めば簡単。
どうしても1行ずつ処理したければ状態をもって頑張れ。
0166デフォルトの名無しさん
2005/12/20(火) 01:04:450167デフォルトの名無しさん
2005/12/20(火) 03:28:14普通に正規表現でやると結構失敗するよ。
0168デフォルトの名無しさん
2005/12/20(火) 03:43:110169デフォルトの名無しさん
2005/12/20(火) 04:43:33検索で出てくる例は while( 使ったものばかりで複数行だと使えないし・・・
置換コマンドは分かるんです s/<image(.|\n)*>//ig <image..改行・・改行・・>を削除できる
実際に動くスクリプトが作れなくて。
BEGIN
aaa
sd
??
END
BEGIN〜ENDを削除したい。
0170デフォルトの名無しさん
2005/12/20(火) 06:55:47・$/(入力レコードセパレータ)をundefとか、local $/してから読み込む
行で読んでから@htmlをjoinするのもいい
htmlまとめてスカラ変数に入ったらsオプションつけて置換実行
・どうしても1行ずつやりたい時はflagを1個使えばいい
while(<HANDLE>){
$flag and s!.*END!! ? $flag=0 : next;
s!BEGIN.*END!!g;
$flag = s!BEGIN.*!!;
print;
}
0171デフォルトの名無しさん
2005/12/20(火) 06:59:1630C2 → (30*29)/(2*1)
を
mCn
の形でmとnを入力して実行させたい場合、どのような式にすればいいのでしょうか。
0172デフォルトの名無しさん
2005/12/20(火) 08:21:03ありがとうございました。キーワードいただいたらすぐにできました。
while (<IN>) { の前に undef $/; を一行足すとできました。
#!C:/perl/bin/perl
$file="a.txt";
$outfile="result.txt";
open (IN, $file) ;
open (OUT, ">$outfile") ;
undef $/;
while (<IN>) {
s/BEGIN(.|\n)*END/BEGIN\r\nEND/ig;
print OUT $_;
}
close (IN);
close (OUT);
0173Lavi
2005/12/20(火) 11:21:32require "jcode.pl";
require "cgi-lib.pl";
require "apply.pl";
の呼び方だと動くのですが、
cgi-binディレクトリの中に、これら3つのplファイルを入れて
require "./cgi-bin/jcode.pl";
require "./cgi-bin/cgi-lib.pl";
require "./cgi-bin/apply.pl";
のように、呼んだとたん、以下のようにエラーが出てしまいます。
Premature end of script headers: confirm.cgi, referer: http://localhost/official/demae/menu.html
Can't locate ./jcode.pl in @INC (@INC contains: C:/usr/local/lib C:/usr/local/site/lib .) at ./cgi-bin/cgi-lib.pl line 2.\r, referer: http://localhost/official/demae/menu.html
Compilation failed in require at C:/Program Files/Apache Group/Apache2/htdocs/official/demae/confirm.cgi line 5.\r, referer: http://localhost/official/demae/menu.html
File does not exist: C:/Program Files/Apache Group/Apache2/htdocs/favicon.ico
どうしたら、よいでしょう?
0174デフォルトの名無しさん
2005/12/20(火) 11:37:180175デフォルトの名無しさん
2005/12/20(火) 13:33:06エラーメッセージを読んで、どんなエラーか理解すればいいよ。
以下は、エラーメッセージが理解できない人向け。
require './cgi-bin/jcode.pl';
$INC{'./jcode.pl'}=$INC{'./cgi-bin/jcode.pl'};
require './cgi-bin/cgi-lib.pl';
念の為、こんなの普通は使わないからな。
0176デフォルトの名無しさん
2005/12/20(火) 14:24:44perlのテンプレートの種類にTemplate Toolkitがありますが、
foreachなどもっと楽に記述できるテンプレートはないですか?
template toolkitの場合
[% FOREACH temp=list %]
[% temp %] :
[% END %]
これを
[%
foreach @a{
$a;
}
%]
みたいな、perlそのままでかけるような感じのテンプレートはないでしょうか?
0177デフォルトの名無しさん
2005/12/20(火) 14:25:360178デフォルトの名無しさん
2005/12/20(火) 15:08:54Template Toolkitなら
[% PERL %]
...
[% END %]
でいいんでねーの。オプションで使えるようにしとく必要はあるが。
0179デフォルトの名無しさん
2005/12/20(火) 15:16:31そんなのがあったんですか…
0180デフォルトの名無しさん
2005/12/20(火) 15:27:26> foreach @a{
> $a;
> }
> %]
テンプレート使ってる意味ないし。
0181デフォルトの名無しさん
2005/12/21(水) 00:38:00全部繋げろや。HTMLはread()で塊全部読め。
それから s/\s+/ /g; だ。これやると <pre></pre> の中が失敗するが、気にするな。捨てろ。
0182デフォルトの名無しさん
2005/12/21(水) 05:49:160183デフォルトの名無しさん
2005/12/21(水) 11:05:39http://pc8.2ch.net/test/read.cgi/tech/1131286411/307
> 307 名前:デフォルトの名無しさん[sage] 投稿日:2005/11/18(金) 17:10:06
> >>306
> BEGIN {
> eval "use Hoge"; # try
> if ($@) { # catch
> # モジュールが無かった
> } else {
> # モジュールがあった
> }
> }
的外れな回答だったかな?
0184デフォルトの名無しさん
2005/12/21(水) 11:19:54if( grep { -e "$_/Hoge.pm" } @INC ){
# モジュールがあった
}
0185デフォルトの名無しさん
2005/12/21(水) 12:28:54表示するスクリプトを作成しています。
Crypt::SSLeayはほぼLWPでのHTTPSアクセス専用みたいだったので、
Net::SSLeayを使えば出来そうだと考え、試しに、
use Net::SSLeay;
($reply, $err, $server_cert) = Net::SSLeay::sslcat('ほげほげ.jp', 443, '/');
print Net::SSLeay::X509_NAME_oneline(Net::SSLeay::X509_get_subject_name($server_cert)) . "\n";
などとしたところ、証明書のサブジェクトが表示されました。
同様に有効期限も取得できると思い、
print Net::SSLeay::X509_get_notBefore($server_cert) . "\n";
print Net::SSLeay::X509_get_notAfter($server_cert) . "\n";
などとしましたが、なんだか良く分からない数字が出てきます。
(アクセスするごとに違う(増えたり減ったりする)ので、これは時刻ではなさそうです。)
opensslのソースを見てみましたが、私はCが分からないため、
意味不明です。
具体的にどのようにすれば有効期限を取得できますか?
0186デフォルトの名無しさん
2005/12/21(水) 13:44:45戻り値がASN1_UTCTIMEとかいう形式なので、
Net::SSLeay::P_ASN1_UTCTIME_put2stringを通せばいい
Net::SSLeay付属のQuickRefというファイルに書いてあるよ。
いまいち不親切なドキュメントだが。
$asn1_utctime = Net::SSLeay::X509_get_notBefore($x509);
$asn1_utctime = Net::SSLeay::X509_get_notAfter($x509);
$x509_name = Net::SSLeay::X509_get_subject_name($x509);
$x509_name = Net::SSLeay::X509_get_issuer_name($x509);
Return information from a certificate.
$string = Net::SSLeay::P_ASN1_UTCTIME_put2string($asn1_utctime);
Convert a asn1_utctime structure to a printable string.
0187デフォルトの名無しさん
2005/12/21(水) 17:42:52my $hoge = HOGE::not_export_function( $tmp );
のように呼び出すことができるのですが、これはアリなんですか?
EXPORTとlib hoge qw( ... )は使用関数を明示したりするためだけにあるのでしょうか?
速度的にかわったりしますか?
0188デフォルトの名無しさん
2005/12/21(水) 18:59:350189デフォルトの名無しさん
2005/12/21(水) 21:11:11$a=['任意のstring'] のとき $a->[0] として print させたいのですが、
この場合はいいとして、$a=[{}] のとき、$a->[0] として表示させると、
HASH(0x??????)というアドレスが入ってしまいます。
表示させる前に、$a が ['任意のstring'] か [{}] かチェックしたいのですが、
うまいチェックの仕方がないでしょうか?
お願いします。
0190デフォルトの名無しさん
2005/12/21(水) 21:13:36ref $a->[0] で判定できるお
0191デフォルトの名無しさん
2005/12/21(水) 21:34:48ただ、$a=['string'] の場合は、ref の戻り値がありませんね。
0192デフォルトの名無しさん
2005/12/21(水) 21:45:44'string'はリファレンスじゃないから
0193デフォルトの名無しさん
2005/12/21(水) 22:36:43ダイアログを表示した時点でメインの処理が止まってしまうので困っています。
ダイアログはPerl/Tkで表示しています。
0194デフォルトの名無しさん
2005/12/21(水) 23:32:310195デフォルトの名無しさん
2005/12/22(木) 03:31:10threadは無理だったはず。
0196デフォルトの名無しさん
2005/12/22(木) 06:38:47最初に $dialog->update; で表示して、最後に $dialog->destroy; で破棄。
処理の最中は定期的にDoOneEvent(0); の呼び出し。
0197デフォルトの名無しさん
2005/12/22(木) 16:43:04ファイルのタイムスタンプを取得したいのデスが、
どうするのが一番簡単でしょうか。
年月日時分秒 までほしいところデス。
0198デフォルトの名無しさん
2005/12/22(木) 16:45:20わたしはエミリー・ブラウンです。
Perlスレへようこそ。
0199デフォルトの名無しさん
2005/12/22(木) 16:55:27やあトム、お姉さんは元気かい?
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq5.html#how_do_i_get_a_file_s_timestamp_in_perl
つーか困ったらとりあえずググれや。
0200デフォルトの名無しさん
2005/12/22(木) 17:11:18use Exporter;
use vars qw( @ISA @EXPORT );
@ISA = qw( Exporter );
@EXPORT = qw( sub1 sub2 );
と
use Exporter;
use vars qw( @ISA @EXPORT );
BEGIN {
@ISA = qw( Exporter );
@EXPORT = qw( sub1 sub2 );
}
の違いが分かりません。
あえてBEGINにするのには何か意味があるのですか?
0201デフォルトの名無しさん
2005/12/22(木) 19:13:140202デフォルトの名無しさん
2005/12/22(木) 19:42:28トムです。
おかげでタイムスタンプが見事にゲットできたデス。
ありがとう。お礼に姉さんを紹介するよ。
0203デフォルトの名無しさん
2005/12/22(木) 20:11:26ところで私も質問があるの。
UNIX時間を適当にフォーマットしたいけれど
どうするのが一番簡単かしら。
"date +'%Y/%m/%d %H:%M:%S' --date '" . localtime($sec) ."'"
とかをopenで実行してたみたいだけど、ダサいのよね
0204デフォルトの名無しさん
2005/12/22(木) 20:31:37use strict;
my $mode = $ARGV[0] || $ENV{QUERY_STRING};
print "Content-type:text/plain\n\n" if exists $ENV{QUERY_STRING};
print $::{$mode} ? $::{$mode}() : "undefined\n";
sub aaa { "im aaa\n";}
このスクリプトをsetuid+CGI経由で実行すると
Can't coerce GLOB to string in cond_expr at hoge.cgi line 5.
と怒られてしまうのですが何かグッドアイディアはありませんでしょうか。
0205デフォルトの名無しさん
2005/12/22(木) 20:45:38use POSIXしてstrftimeを使うのがまあ楽といえば楽かな。
0206デフォルトの名無しさん
2005/12/22(木) 22:52:12"Taintモード" でgoogle検索ってのはどうだ?
204みたいな場合だと、
my $mode;
my $m = $ARGV[0] || $ENV{QUERY_STRING};
for my $s qw(aaa) {
$mode = $s if $m eq $s;
}
print $::{$mode} ? $::{$mode}() : "undefined\n";
sub aaa { "im aaa\n";}
あたりでの汚染除去が無難という気がする。
0207デフォルトの名無しさん
2005/12/22(木) 23:35:16検証過程で
($mode) = $mode =~ /(.*)/;
としても改善しなかったのですが再度検証したら
別の部分で間違ってたらしく自分の勘違いでした。
ありがとうございます。
0208デフォルトの名無しさん
2005/12/24(土) 04:43:55$time_string = sprintf('%6$4d/%5$02d/%4$02d %3$02d:%2$02d:%1$02d', (@temp=(localtime $sec)[0..5], $temp[5]+=1900, $temp[4]++));
0209デフォルトの名無しさん
2005/12/24(土) 06:23:21どう見ても POSIX::strftime() を使うべきです。
本当にありがとうございました。
0210デフォルトの名無しさん
2005/12/24(土) 07:26:19本当にありがとうございました
0211デフォルトの名無しさん
2005/12/24(土) 11:47:49入門にはオライリーの『はじめてのPerl』が良いのでしょうか?
それとも駱駝の本の方が後々手元に置いておくには良い本なのでしょうか
0212デフォルトの名無しさん
2005/12/24(土) 12:12:070213デフォルトの名無しさん
2005/12/24(土) 14:04:330214デフォルトの名無しさん
2005/12/24(土) 16:04:260215デフォルトの名無しさん
2005/12/24(土) 16:36:19ttp://naoya.dyndns.org/~naoya/mt/archives/000657.html
ラクダ本買う金があったら、perldoc でごまかしながら
- Effective Perl
- Perl デバッグ
- Perl プログラミング救命病棟
あたり買っとけって。絶版が混じってるけど。
0216デフォルトの名無しさん
2005/12/24(土) 18:37:41どうするのが一番良いのかは、君の才能の程度によって変わってくる。
0217デフォルトの名無しさん
2005/12/24(土) 20:50:360218デフォルトの名無しさん
2005/12/24(土) 21:14:530220デフォルトの名無しさん
2005/12/25(日) 15:02:49クリックしてもらえるとおもってるんですかね?
0221デフォルトの名無しさん
2005/12/25(日) 21:42:210222デフォルトの名無しさん
2005/12/26(月) 00:26:40つか、復活してるの知らなかったヨ。
0223デフォルトの名無しさん
2005/12/26(月) 02:23:17Perlチェック(Kent WEBで配布されているもの)ではえらーなしなんですが、なぜか設置すると500エラーになってしまいます。
何が原因か分かりますでしょうか?
ちなみに設置場所はland.to
#!/usr/bin/perl
use strict;
use CGI;
require"./jcode.pl";
my $mailPath='/usr/sbin/sendmail';
my $fromAddress='[email protected]';
#引数を取り込む
my $cgi = CGI::new();
my $address = $cgi->param('address');
my $subject = $cgi->param('subject');
my $body = $cgi->param('body');
#エンコード
my $enc_sub = &Base64Encode($subject);
&jcode'convert(*body,'jis');
if($address !~/^.+@.+$/){ &error('Input Error','addressを入れてください。');}
if($enc_sub =~/^\s*$/){ &error('Input Error','SUBJECTを入れてください');}
if($body =~/^\s*$/){ &error('Input Error','BODYを入れてください');}
0224デフォルトの名無しさん
2005/12/26(月) 02:25:05CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
0225デフォルトの名無しさん
2005/12/26(月) 02:26:410226デフォルトの名無しさん
2005/12/26(月) 02:29:15if(open(SENDMAIL,"| $mailPath")){
print SENDMAIL<<"EOM";
From:$fromAddress
To:$address
Subject:$enc_sub
MIME-Version:1.0
Content-Type:text/plain; charset="ISO-2022-JP"
$body
EOM
close(SENDMAIL);
} else {
&error('System Error','システムエラー');
}
print<<"EOM";
Content-type:text/html
<html><head>
<title>Submarine mail</title>
<META HTTP-EQUIV="Content-Type"CONTENT="text/html;CHARSET=Shift-JIS">
</head>
<body>
送信完了
</body></html>
EOM
0227デフォルトの名無しさん
2005/12/26(月) 02:30:53sub Base64Encode {
my ($target) = @_;
my ($base) = "ABCDEFGHIJKLMNOPQRSTUVWXWZ"
."abcdefghijklmnopqrstuvwxyz"
."0123456789+/";
my $eStr ="";
&jcode'convent(*target,'JIS');
my $pStr = unpack("B*",$target);
for (my $i = 0; my $cStr = substr($pStr,$i,6); $i+= 6) {
$eStr .=substr($base,ord(pack("B*","00" .$cStr)),1);
if (length($cStr) ==2) { $eStr.="==";}
elsif (length($cStr) ==4) { $eStr.="=";}
}
return("=?iso-2022-jp?B?$eStr?=");
}
sub error {
my ($mes,$com) =@_;
print<<"EOM";
Content-type: text/html
<html><head><title>$mes</titie>
<META HTTP-EQUIV="Content-Type"CONTENT="text/html;CHARSET=Shift-JIS">
</head><body>$com</body></html>
EOM
exit;
}
exit;
1;
0228デフォルトの名無しさん
2005/12/26(月) 02:37:150229デフォルトの名無しさん
2005/12/26(月) 02:51:020230デフォルトの名無しさん
2005/12/26(月) 02:55:49別スレで誘致されたので>>1を見もせず、書き込んでました
迷惑かけて申し訳ありませんでした
0231デフォルトの名無しさん
2005/12/26(月) 08:49:250232デフォルトの名無しさん
2005/12/26(月) 09:01:220233デフォルトの名無しさん
2005/12/26(月) 09:09:520234デフォルトの名無しさん
2005/12/26(月) 10:33:12Windowsでperlを学ぶなら
初めてのPerl Win32システムと
初めてのPerl 第3版
お薦めなのはどちらでしょうか?
0235デフォルトの名無しさん
2005/12/26(月) 10:58:410236デフォルトの名無しさん
2005/12/26(月) 11:41:05以上。
0237デフォルトの名無しさん
2005/12/26(月) 12:58:36すみません。ユニックスかわからないんですが、ここのカウンターが変になってしまい、困っています。
多分、最後の画像結合処理が上手くいってないと思うんですが、
print &gifcat::gifcat(@dat);#関数を実行して、カウンターの画像をひとつの画像にまとめる
exit; #処理終了
ここの、、、初心者なので全然わからないんですが、誰か教えてたも。
0238デフォルトの名無しさん
2005/12/26(月) 12:59:170239デフォルトの名無しさん
2005/12/26(月) 14:59:20【Perl,CGI】参考書籍 第三版
http://pc8.2ch.net/test/read.cgi/php/1030209573/
>>237
CGI設置について質問 【Part2】
http://pc8.2ch.net/test/read.cgi/php/1104624784/
0240デフォルトの名無しさん
2005/12/26(月) 15:59:13誘導乙.
でも、237はアニメGIFの各Disposal Methodが2(表示前の状態を復元する)に
なっているのが原因だから、CGI設置だと解決しない気もする。
Perl上で誤魔化すなら s///g 一撃なんだが、「初心者なので全然わかんない」
という相手に誤魔化しを教えるのも気がひける。
0241デフォルトの名無しさん
2005/12/26(月) 17:39:530242237
2005/12/26(月) 19:51:49どこが悪いのかわかっているなら教えていただけませんか?
それとも、初心者に説明するのは難しいですか?
0243デフォルトの名無しさん
2005/12/26(月) 20:18:410244デフォルトの名無しさん
2005/12/26(月) 20:32:450245237
2005/12/26(月) 20:57:10$file = "./data.txt"; #変数file=./datta.txtの中身
$gif_file = "./image/"; #GIFファイルまでのアドレス(GIFファイルの入ったフォルダ)
#ファイル読み込み
open (FP,"$file"); #$file=data.txtを開く
$data = <FP>; #変数$dataに<FP>を格納
close(FP); #ファイルを閉じる
#カウント
$data = $data + 1; #$dataに1プラスする処理
#ファイル書き込み
open (FP,">$file"); #変数$fileに$data=<FP>を格納
print FP $data; #$dataの表示
close(FP); #FPを閉じる
0246237
2005/12/26(月) 20:57:41for($i=0 ; $i <= $#dat ; $i = $i + 1 )
{
$dat[$i] = "$gif_file$dat[$i].gif";
} #ループ($iに0を代入;$iが$#datに入った3桁以下だったらループする;#iに1プラスする)$datを$dat{$i}.gifに置き換える
#HTML表示
#print "Content-type: text/html\n\n"; #おまじない
print "Content-type: image/gif\n\n"; #おまじない
require "./gifcat.pl"; #gifcat.pl読み込み
binmode(OUT);#おまじない
print &gifcat::gifcat(@dat);#関数を実行して、カウンターの画像をひとつの画像にまとめる
exit; #処理終了
こうなっているのですが、どこが悪いのでしょうか?
0247デフォルトの名無しさん
2005/12/26(月) 21:01:370248デフォルトの名無しさん
2005/12/26(月) 21:12:100249酩酊 ◆TWARamEjuA
NGNG0250デフォルトの名無しさん
2005/12/26(月) 21:56:40思ったのですが一台もありません。
Windows2003(IIS6)に思い切ってCGIを設置し
ブラウザーで動作確認したのですが
HTTPヘッダーが出力された瞬間に上司に見つかりました。
慌ててソースを修正したと言い訳したのですが
どう見ても精子です。
本当にありがとうございました。
IIS6に移行したら、クッキーの設定内容がブラウザー
表示されているのを見て・・・・・オワタ OTL
0251デフォルトの名無しさん
2005/12/26(月) 22:00:21×Windows2000(IIS6) ○Windows2000(IIS7)
もうだめぽ
0252デフォルトの名無しさん
2005/12/26(月) 22:27:050253デフォルトの名無しさん
2005/12/26(月) 22:53:04IEで表示されちゃうってことじゃね。
Javaにしろ、Javaに
0254デフォルトの名無しさん
2005/12/27(火) 02:27:140255237
2005/12/27(火) 05:13:23#!/usr/local/bin/perl
use strict;
use warnings;
$file = "./data.txt"; #変数file=./datta.txtの中身
$gif_file = "./image/"; #GIFファイルまでのアドレス(GIFファイルの入ったフォルダ)
#ファイル読み込み
open (FP,"$file"); #$file=data.txtを開く
$data = <FP>; #変数$dataに<FP>を格納
close(FP); #ファイルを閉じる
#カウント
$data = $data + 1; #$dataに1プラスする処理
#ファイル書き込み
open (FP,">$file"); #変数$fileに$data=<FP>を格納
print FP $data; #$dataの表示
close(FP); #FPを閉じる
0256237
2005/12/27(火) 05:14:29for($i=0 ; $i <= $#dat ; $i = $i + 1 )
{
$dat[$i] = "$gif_file$dat[$i].gif";
} #ループ($iに0を代入;$iが$#datに入った3桁以下だったらループする;#iに1プラスする)$datを$dat{$i}.gifに置き換える
#HTML表示
#print "Content-type: text/html\n\n"; #おまじない
print "Content-type: image/gif\n\n"; #おまじない
require "./gifcat.pl"; #gifcat.pl読み込み
binmode(OUT);#おまじない
print &gifcat::gifcat(@dat);#関数を実行して、カウンターの画像をひとつの画像にまとめる
exit; #処理終了
これでいいのでしょうか?
0257デフォルトの名無しさん
2005/12/27(火) 06:29:28strictつけたら、そのソースじゃうごかないしとりあえずエラーログ見ようね。
あとおまじない多すぎ。binmode(OUT)ってOUTなんか使って無いじゃん。
あと、きになるのは、ファイル読み込み〜ファイル書き込みの間に
複数人のアクセスあったらどうなっちゃうんだろう。
0258デフォルトの名無しさん
2005/12/27(火) 06:48:57本当にありがとうございました。
0259デフォルトの名無しさん
2005/12/27(火) 08:25:05use strict;
use warnings;
use IO::File;
use File::Spec;
my $datafile = './data.txt';
my $gif_dir = './image/';
my $fh = new IO::File $datafile, 'r+' or die q|Can't open datafile.|;
flock $fh, 2;
my $count = <$fh>;
truncate $fh, 0;
seek $fh, 0, 0;
print $fh ++$count;
undef $fh;
my @dat = map { File::Spec->catfile($gif_dir, "$_.gif") } split(//, $count);
# 以下CGIのため略
いや、問題の解決にはなってないけどね
0260デフォルトの名無しさん
2005/12/27(火) 08:33:12> CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
日本語も読めないアホは帰れよ。あぁ、冬休みですか、そうですか。
>>259
> my $fh = new IO::File $datafile, 'r+' or die q|Can't open datafile.|;
$! マジオススメ。perlvar(1) 参照。
0262デフォルトの名無しさん
2005/12/28(水) 01:59:040263デフォルトの名無しさん
2005/12/28(水) 03:41:080264デフォルトの名無しさん
2005/12/28(水) 03:44:020265デフォルトの名無しさん
2005/12/28(水) 04:13:240266デフォルトの名無しさん
2005/12/28(水) 10:56:320267デフォルトの名無しさん
2005/12/28(水) 15:01:05んでIO::Fileは早くなるどころかopenより遅くなるハズ
じゃぁなんでIO::Fileを使うかだけど
・オブジェクト指向であつかえる
・閉じ忘れてもスコープ抜ければ勝手に閉じてくれる
・グロブつかうと名前空間ぶつかりやすい
(最近はopen($fh,'filename')でも解決できるが)
・グロブはわたすのめんどくさい
ってとこかな?
http://www.cpan.jp/mirror/perldoc.jp/docs/perl/5.6.1/perlfaq5.podを
読むと参考になるかもしれません。
0268デフォルトの名無しさん
2005/12/28(水) 15:33:16>>259 みたいに書くなら use Symbol; して gensym() 使うか
>(最近はopen($fh,'filename')でも解決できるが)
で充分だと思うんだ。わざわざ IO::File を使う理由としては
説得力に乏しいな。
0269デフォルトの名無しさん
2005/12/28(水) 16:22:55my $fh = new IO::File $datafile, 'r+' or die q|Can't open datafile.|;
よりも、
my $fh = IO::File->new($datafile, 'r+') or die "Can't open datafile: $!\n";
のが好み。
0270デフォルトの名無しさん
2005/12/28(水) 16:26:240271デフォルトの名無しさん
2005/12/28(水) 17:55:140272デフォルトの名無しさん
2005/12/28(水) 18:00:36至高と究極で対決か。
0273デフォルトの名無しさん
2005/12/28(水) 23:03:40何もいいこと無い
0274デフォルトの名無しさん
2005/12/29(木) 13:17:010275デフォルトの名無しさん
2005/12/29(木) 13:21:58printf "%.2f", $n;
0276デフォルトの名無しさん
2005/12/29(木) 20:18:550277デフォルトの名無しさん
2005/12/29(木) 20:32:190278デフォルトの名無しさん
2005/12/29(木) 20:47:380279デフォルトの名無しさん
2005/12/29(木) 22:10:31負数の扱いはどうしたらいい?
0280デフォルトの名無しさん
2005/12/30(金) 02:46:03%..2fがそうなんだって
printf "%.3f -> %.2f\n",$_,$_ for( 0.004, 0.005, -0.004, -0.005);
0.004 -> 0.00
0.005 -> 0.01
-0.004 -> -0.00
-0.005 -> -0.01
0281デフォルトの名無しさん
2005/12/30(金) 15:26:58かならずしもそうとは限らないけどな。
0282デフォルトの名無しさん
2005/12/30(金) 16:04:01こうか?
$n = int($n * 100 + 0.5) / 100;
0283デフォルトの名無しさん
2005/12/30(金) 16:35:430284デフォルトの名無しさん
2005/12/30(金) 16:55:230285デフォルトの名無しさん
2005/12/30(金) 17:58:350286デフォルトの名無しさん
2005/12/30(金) 18:03:390287ヽ(´ー`)ノ ◆.ogCuANUcE
2005/12/30(金) 22:17:020288デフォルトの名無しさん
2005/12/30(金) 23:48:55のリンク先に、「int()関数は単純に小数値を取り除き、整数部を戻すので」とありました。
perldoc -f int には「You should not use this function for rounding:」とあります。
四捨五入するため 0.5 を足す場合は int を使っても問題ないのでしょうか?
問題があるとしたら、 int(6.725/0.025)の結果が 268 になるといったような具体例を教えていただけないでしょうか?
0289デフォルトの名無しさん
2005/12/31(土) 00:10:18小数計算して最後にintで切り捨てれば何も問題ないと思うが。
というかやってみれば一発でわかることジャン。
0290デフォルトの名無しさん
2005/12/31(土) 00:24:07278 が例に出しているように
print (6.725/0.025) → 269
print int(6.725/0.025) →268
になるのはやってみれば一発でわかる。
切り捨てにintを使うのはやめておいたほうが無難。
0291290
2005/12/31(土) 00:26:17番号がめちゃくちゃだ。290 の最初二行は
>289
288が例に出しているように
が正しい
0292ヽ(´ー`)ノ ◆.ogCuANUcE
2005/12/31(土) 00:44:38Q. Does Perl have a round() function? What about ceil() and floor()? Trig functions?
> Rounding in financial applications can have serious implications, and
> the rounding method used should be specified precisely. In these
> cases, it probably pays not to trust whichever system rounding is
> being used by Perl, but to instead implement the rounding function you
> need yourself.
(IEEE 754 的に)正しい結果が得られたかったら自前で実装するしかないようだ。
>>290
ということは、int($n + 0.5) ではなくて floor($n + .5) がいいんかね?
大人しく Math::Round::round() を使った方がいい気はする(笑)。
0293デフォルトの名無しさん
2005/12/31(土) 03:05:58>(IEEE 754 的に)正しい結果が得られたかったら
コンピュータ言語はすべて小数演算は自前でごまかすものと思ってたけど、
そうでない言語もあるってこと?
0294293
2005/12/31(土) 03:13:280295デフォルトの名無しさん
2005/12/31(土) 08:27:31意味がわからん。なんのためにCPUにFPUがあったり、OSでエミュレートしたり、
ライブラリ(libm)があると思ってんだ。
0296デフォルトの名無しさん
2005/12/31(土) 10:44:35あんたの言ってることのほうがおれには意味不明。
0297デフォルトの名無しさん
2005/12/31(土) 10:58:46もちろん、自前の勝手な方法ではなく、(IEEE 754的に)厳密な方法で
行えるモノ(言語とは限らない)もあるよ。
0298デフォルトの名無しさん
2005/12/31(土) 16:53:1710万行くらいのtextには手も足も出ないし、置換するtextのブロックごとの目印を
もとに読み込むやりかたはロジックの使いまわししずらそうでめんどいし。
複数行置換をサポートしたテキストエディタの正規表現置換みたいな使い方ができる
汎用的な複数行置換ロジックがほしいす。
0299デフォルトの名無しさん
2005/12/31(土) 17:04:54じゃだめなの?
0300デフォルトの名無しさん
2005/12/31(土) 19:20:03置換前「\n[0-9]」置換後「」
自分がつかってるエディタの複数行置換だとこれそのまま置換に使うことができるですが
これと同じことをperlでやろうとすると$_がどの行読んでて、ある行にくるまでスカラーに
行をためこみつつ置換して、ある行にきたらprintしてスカラーを解放するみたいな
めんどくささがあってやなのです。
ちなみにおれ>>169じゃないっす。
0301デフォルトの名無しさん
2005/12/31(土) 20:51:12Tie::File を使うといいかもね。
0302デフォルトの名無しさん
2005/12/31(土) 21:49:29もしスレ違いでしたら誘導お願いします。
perlでパスワード認証cgiを作っています。
認証された人のみサーバーに隠しもっているドコモの着メロ(MLD)が
ダウンロードできるようにしたいのですが、
PCでうまくいっても、携帯だとうまくいきません。
どなたか、お知恵をお貸しくださいませ
□cgiの内容
#!/usr/local/bin/perl
open( IN, "<./test.mld" );
my @data = <IN>;
close(IN);
print "Content-type: application/octet-stream\n";
print "Content-disposition: filename=\"test.mld\"\n";
print "Content-length: @data\n\n";
print @data;
□,htaccessファイルの内容
<Files ~ "\.(mld)$">
deny from all
</Files>
0303デフォルトの名無しさん
2005/12/31(土) 22:07:260304デフォルトの名無しさん
2005/12/31(土) 22:33:55@dataの要素数がプリントされる気がするが
0305302
2005/12/31(土) 22:51:17変に簡略化したソースのせてしまいました。
実際は
open( IN, "<./test.mld" );
my @data = <IN>;
my $data_len = (-s IN);
close(IN);
として、Content-lengthにdata_lenを使ってますます。
0307デフォルトの名無しさん
2006/01/01(日) 01:28:250308デフォルトの名無しさん
2006/01/01(日) 06:14:55今年もよろしく
0309デフォルトの名無しさん
2006/01/01(日) 11:37:10CGIスレってどこにありますか?
0310デフォルトの名無しさん
2006/01/01(日) 11:40:40その質問がスレ違い。
0311デフォルトの名無しさん
2006/01/01(日) 12:45:41プ、おまえに聞いてないと思う
0312デフォルトの名無しさん
2006/01/01(日) 12:51:12…で良いんだっけ
0313デフォルトの名無しさん
2006/01/01(日) 12:54:030314302
2006/01/01(日) 13:03:09スレ汚し大変しつれいしました
ついでに
あけおめ
0315デフォルトの名無しさん
2006/01/01(日) 18:03:000317デフォルトの名無しさん
2006/01/01(日) 18:21:580318デフォルトの名無しさん
2006/01/01(日) 22:41:42http://www.site-cooler.com/kwl/perl/2.htm#2-7
0319デフォルトの名無しさん
2006/01/02(月) 02:30:44$|=1;
これは何を意味するのでしょうか?
(変数に代入?)
0320デフォルトの名無しさん
2006/01/02(月) 02:42:20syntax的には $| = 1;。 |= ではない。
意味は man perlvar すれ
0321デフォルトの名無しさん
2006/01/02(月) 03:09:36調べたら|(縦棒)は定義済み変数なんですね。どもです!
$| 0 以外に設定されると、その時点で選択されている出力チ
ャネルに write や print を行なうごとに、強制的にフラ
ッシュします。 デフォルトでは 0 となっています。
STDOUT は通常では、端末への出力時には行バッファリン
グ、それ以外ではブロックバッファリングであることに注
意してください。 これは、Perl のスクリプトを rsh 配
下で実行して、実行状況を確認したい場合のように、パイ
プに出力するときに特に便利でしょう。 (記憶法: パイ
プをホットな状態にしておくために使う。)
0322デフォルトの名無しさん
2006/01/02(月) 10:16:30下の一行が何をしてるのかわかりません。
教えてください。
print join("\n", @{ $self->{captions}->{$i} });
0323デフォルトの名無しさん
2006/01/02(月) 11:23:44それを \n でjoinして出力してるだけ
0324322
2006/01/02(月) 12:13:04わかりました。ありがとうございました。
助かりました。
0325デフォルトの名無しさん
2006/01/02(月) 16:31:09メイン処理実行中にWin32::MsgBoxを使用して別スレッドでメッセージボックスを表示しています。
メイン処理がある程度すすんだところでメッセージボックスを消したいのですがどのようにすればいいでしょうか?
スレッドはThreadモジュールを使用しています。
0326デフォルトの名無しさん
2006/01/02(月) 16:53:200327デフォルトの名無しさん
2006/01/02(月) 17:21:52追加でモジュール入れないでWM_DESTROYとか投げつける方法ないですかね?
いや、それでうまくいくかはわからないですが。
0328デフォルトの名無しさん
2006/01/02(月) 18:43:58をDOSウィンドウで実行した場合に、入力の終わりを伝える方法が分かりません。
初めてのperlという本ではコントロールZと書かれていたのですが、その方法では
上手くいきませんでした。どなたかお教え下さい。
環境は Windows XP ActivePerl 5.8.7です。
0329デフォルトの名無しさん
2006/01/02(月) 19:44:35Perlを使わなければいい
0330デフォルトの名無しさん
2006/01/02(月) 21:07:05Ctrl+Z 押すと ^Z って表示される
と思うけどその状態で Enter じゃムリ?
0331デフォルトの名無しさん
2006/01/02(月) 22:27:44ありがとうございました・・・簡単な事だったのですね。
0332デフォルトの名無しさん
2006/01/02(月) 22:33:46それを成し遂げるためにはどのような本はどれを読むといいだろうか?
この質問はwebプログラム逝き?
0333デフォルトの名無しさん
2006/01/02(月) 22:46:310334デフォルトの名無しさん
2006/01/02(月) 22:54:45WebProg板だな。書籍スレもWebProgにある。
ひょっとしたらBlog板に関連スレがあるかも。
0335デフォルトの名無しさん
2006/01/02(月) 23:22:18> perl+SQL(or XML)でBLOGを作成しようとしているのですが、
> それを成し遂げるためにはどのような本はどれを読むといいだろうか?
なぜ本? なぜそんな遠回りを?
あえて困難に挑戦しようというのか?
0336デフォルトの名無しさん
2006/01/03(火) 02:25:12でやってくもんなんでしょうか?
というのはcygwin perlはcpanモジュールのインスコにことごとく失敗するのです(Tkはmakeで失敗。
ほかもいろいろインスコしたけど、しょっちゅうmake testに失敗する)。
cygwin上のこまわりのきくスクリプトってな感じにつかいたいのでactive perlは
つかいたくないっす。みなさんどんな環境でperl使ってますか?
0337デフォルトの名無しさん
2006/01/03(火) 02:54:34失敗するっつっても特殊な環境だから動作確認されて
ないモジュールが多いだけでしょ。バグレポートする
しかないわな。それが嫌ならそもそもCygwin使うの
やめたほうがいい。Perlに限らずそのままビルド
できないもの多いから。
0338デフォルトの名無しさん
2006/01/03(火) 02:58:29最初から色々入ってるから便利やわ
0339デフォルトの名無しさん
2006/01/03(火) 03:11:20環境依存を防ぐために一行目の#!/usr/bin/perl
を省略したいのですが、可能でしょうか?
毎回パスが変わるたびに何百ものファイルを置き換えるのは非効率で面倒でして。
パス変更という環境依存は避けたい所存で御座います
「#!/usr/bin/perlを省略」ぐぐっても「Perl パスを省略」
でググッても即座に省略する方法が簡単に見つからないのですが
これについて調べるにはどんなキーワードが適切でしょうかね?
0340デフォルトの名無しさん
2006/01/03(火) 03:13:28漏れの場合は、その#なんたらの1行目はまったく書いてないヨ。
0341デフォルトの名無しさん
2006/01/03(火) 03:27:19つーかパスが変わるってどういう状況だ?
0342デフォルトの名無しさん
2006/01/03(火) 03:34:08とでもしておいて
環境ごとに
ln -s
するとか
0343デフォルトの名無しさん
2006/01/03(火) 04:01:42の方がましじゃね
0344デフォルトの名無しさん
2006/01/03(火) 04:08:480345デフォルトの名無しさん
2006/01/03(火) 04:36:39envは必ず/usr/binにあるの?
0346デフォルトの名無しさん
2006/01/03(火) 05:11:19perlよりは。
0347デフォルトの名無しさん
2006/01/03(火) 05:21:19他のログ読まずに書き込み
winならcoLinuxが激しくお勧め
詳しい事はぐぐるとよろし
0348デフォルトの名無しさん
2006/01/03(火) 05:26:530349デフォルトの名無しさん
2006/01/03(火) 08:10:18Cygwin, Linux, FreeBSD, Solaris で/usr/binにあった。
(バージョン・デストリ依存はあるかもしれんが。)
0350デフォルトの名無しさん
2006/01/03(火) 08:22:040351デフォルトの名無しさん
2006/01/03(火) 09:49:14おめでとう。perl-Tk は cygwin 本家から配布されるようになりました。Cygwin/X 版だけどね。
っつーか、環境依存の激しそうなもん(Tk なんてその最たるものかと)をビルドするんだったら、
自前でパッチを当てるくらいの気合いがないと苦しいかと。
ちなみに Active Perl と Cygwin Perl の両方を使ってる。
0352デフォルトの名無しさん
2006/01/03(火) 11:26:390353デフォルトの名無しさん
2006/01/03(火) 14:00:12OSがLinuxからBSDにかわったとき、
同じLinuxでもディストリビューションが変わったとき、SolarisやCygwin
に変わったとき、などです。
#!/usr/bin/perl を #!/usr/local/bin/perl や #!/usr/sbin/perl
などに変えないとうごかないときがあります。
>>340
今Eclipseの E.P.I.C. Perl プラグイン + Cygwinを使っているのですが
書かなくてもPerl5.8.xでは動くのですか?
どのPerl入門サイトにもPerlのソースコードの戦闘には
必ず#!/usr/bin/perl 書けと書いてありまして。困惑しております。
0354デフォルトの名無しさん
2006/01/03(火) 14:02:26coLinuxは便利そうですね。しかしエミュレータのように
重たそうなところやある程度のハンデを背負いそうなところが恐いですね。
何か副作用はありましたか?
0355デフォルトの名無しさん
2006/01/03(火) 14:11:430356デフォルトの名無しさん
2006/01/03(火) 14:14:51#!を書けば、perl hoge.plじゃなくて、hoge.plだけで実行できるようになるだけのこと。
Windowsのコマンドプロンプトならあってもなくても関係ない。
で>>344は見たか?
0357デフォルトの名無しさん
2006/01/03(火) 14:17:540358デフォルトの名無しさん
2006/01/03(火) 14:26:210359デフォルトの名無しさん
2006/01/03(火) 15:07:46Windows上のファイルとかクリップボードとかプロセスとか
その他もろもろCygwinとおんなじ程度には扱えるんかな。
扱えるんなら導入してみてー。
0360デフォルトの名無しさん
2006/01/03(火) 15:20:180361デフォルトの名無しさん
2006/01/03(火) 18:28:210362デフォルトの名無しさん
2006/01/03(火) 20:59:10読みましたが、
#!/usr/bin/env perl は書いたほうがパフォーマンスに
プラスといった効果があるのでしょうか?
0363デフォルトの名無しさん
2006/01/03(火) 21:16:23コマンドラインから実行するときに、わざわざ頭に perl を付ける必要がなくなるだけのこと。
0364デフォルトの名無しさん
2006/01/03(火) 22:36:09samba入れてwinのドライブにマウント
0365デフォルトの名無しさん
2006/01/04(水) 00:03:04shebang について勉強してください
0366デフォルトの名無しさん
2006/01/04(水) 13:09:56どうもうまく動きません。
testUndefined subroutine &Test::MyClass::new called at C:/Documents and Settings/ユーザ名/workspace/PerlTest3/Test/Main.pm line 6.
と表示されます。
コンストラクタとして使用するnew()メソッドはすでにTest::MyClass定義済みのはずなのですが。
//ファイル名Main.pm
package Test::Main;
print 'test';
$a = Test::MyClass::new();
#my $a = Test::MyClass->new();
$a->test();
//ファイル名MyClass.pm
package Test::MyClass;
sub new {
print "Hello world!!\n";
my $pkg = shift;
my $hash = {
name => shift,
weight => shift
};
bless $hash, $pkg;
}
sub test(){
print "Hello TEST world!!\n";
}
0367366
2006/01/04(水) 13:10:23C:\Documents and Settings\ユーザ名\workspace\PerlTest3\Test
に存在。
IDE : Eclipse 3.1 * epi Perlplugin
cygwin Perl5.8
Eclipse内でのプロジェクト名 : PerlTest3
EclipseのプロジェクトではPerl IncludePathを
C:\Documents and Settings\ユーザ名\workspace\PerlTest3
に設定済み。
です。
0368デフォルトの名無しさん
2006/01/04(水) 13:19:180369デフォルトの名無しさん
2006/01/04(水) 17:26:03Can't locate MyClass.pm in @INC (@INC contains:
/cygdrive/c/documents and settings/ユーザ名/workspace/perltest3
c:/usr/local/apps/eclipse/3.1/eclipse/plugins/org.epic.debug_0.2.0/
/usr/lib/perl5/5.8/cygwin
/usr/lib/perl5/5.8
/usr/lib/perl5/site_perl/5.8/cygwin
/usr/lib/perl5/site_perl/5.8
/usr/lib/perl5/site_perl/5.8
/usr/lib/perl5/vendor_perl/5.8/cygwin
/usr/lib/perl5/vendor_perl/5.8
/usr/lib/perl5/vendor_perl/5.8)
at C:/Documents and Settings/ユーザ名/workspace/PerlTest3/Test/Main.pm line 3.
BEGIN failed--compilation aborted
at C:/Documents and Settings/ユーザ名/workspace/PerlTest3/Test/Main.pm line 3.
0370デフォルトの名無しさん
2006/01/04(水) 17:29:09先は暗いな...
0371デフォルトの名無しさん
2006/01/04(水) 17:30:36つまりincludeパスに入っていないということですか?
いやMyClassは入っているはずですが
0372デフォルトの名無しさん
2006/01/04(水) 17:35:22に変えてみましたが
エラーの変えたヶ所で赤線が現れています。
吹き出るエラーメッセージは
Test/MyClass.pm did not return a true value at - line 3.
BEGIN failed--compilation aborted - line 3.
です。
メソッドでtrueを返さないと?
ということはMyClass::new()メソッドで
戻り値としてreturn TRUE;
と書けばよいと。
以下のように書き換えてみましたが全然ダメですよ。
sub new {
print "Hello world!!\n";
my $pkg = shift;
my $hash = {
name => shift,
weight => shift
};
bless $hash, $pkg;
return TRUE;
}
いったいこれは・・・・・・・
0373デフォルトの名無しさん
2006/01/04(水) 17:44:450374デフォルトの名無しさん
2006/01/04(水) 17:46:08http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_use_Module_VERSION_LIST
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_require_VERSION
0375デフォルトの名無しさん
2006/01/04(水) 18:06:07Huh?
0376デフォルトの名無しさん
2006/01/04(水) 18:08:12そこで
use Module VERSION LIST
がでてくる意味がわからないのですが。
0377デフォルトの名無しさん
2006/01/04(水) 18:11:32意味がわからないのですが、
とりあえずuse v5.6.1;
を追加してみましたがまったく事態はかわりませんでしたよ。
一体何がいいたいのでしょうか?
0378デフォルトの名無しさん
2006/01/04(水) 18:37:02に変更しても事態は解決しませんね
0379デフォルトの名無しさん
2006/01/04(水) 18:39:290380デフォルトの名無しさん
2006/01/04(水) 18:42:57まて、お前はEclipseを使ったことがあるのか?
0381デフォルトの名無しさん
2006/01/04(水) 18:44:440382デフォルトの名無しさん
2006/01/04(水) 18:47:47Perlでパッケージ宣言するとき
パッケージ名にドメイン名ちゃんと割り当てているの?
たとえば2chだったら
net::2ch::www::test::package1::ClassName;
みたいな
0383デフォルトの名無しさん
2006/01/04(水) 18:49:01すまんな、 fragment identifier は単に「そこから下を読め」という意味で
付けただけなんだ。
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_use_Module_VERSION_LIST
> Module が単なる単語でなければならないことを除けば、
> BEGIN { require Module; import Module LIST; }
> と等価です。
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_require_VERSION
> 初期化コードの実行がうまくいったことを示すために、ファイルは真を
> 返さなければなりませんから、真を返すようになっている自信がある
> 場合を除いては、ファイルの最後に 1; と書くのが習慣です。実行文を
> 追加するような場合に備えて、1; と書いておいた方が良いでしょう。
http://search.cpan.org/~nwclark/perl-5.8.7/pod/perldiag.pod#%s_did_not_return_a_true_value
0384デフォルトの名無しさん
2006/01/04(水) 18:49:100385デフォルトの名無しさん
2006/01/04(水) 19:09:281;を書いてuseの問題は突破しました。
とりあえず一旦、どうもありがとう御座いました。
0386デフォルトの名無しさん
2006/01/04(水) 19:29:07パッケージ名に _ 入れて我慢してる
0387デフォルトの名無しさん
2006/01/04(水) 19:38:310388デフォルトの名無しさん
2006/01/04(水) 20:34:22他の大抵の言語でも、最初はエディタ+コンソールでやるだろ…
0389デフォルトの名無しさん
2006/01/04(水) 21:35:430390デフォルトの名無しさん
2006/01/04(水) 22:04:44いや、今までにEclipseでC,C++,PHP,Java開発をやっておりまして。
その影響でEclipseを使ってPerlの世界でオブジェクト指向、デザインパターンを
実践することに挑戦しているのです。
Perlでどれほどオブジェクト指向を実践できるかがわかったら
次はRubyの出番です。
PHPでオブジェクト指向を実践しようとしましたが名前空間が使えず
>>386のようなやり方しかできずに非常にがっかりしました。
しかしPerlならそんな心配もせずパッケージが使えるので期待できそうですね。
しかし気になるのはメソッド引数の型を指定できるかどうかですね。
PHP5からは多少は指定できるのですがPerlではどうもそうでもなさそうですかね。
それにPerlも双方ともC++やJava, C#, Dのように戻り値の型を指定できない
のでしょうか。PHPではそれができずに姑息な手段を使わなければならずがっかりしました。
Perlが、ちゃんとDesign By Contractに乗っ取った開発手法をどこまで実現できるか
もっと知りたいと思ったためにPerlに手を出してみました。
0391デフォルトの名無しさん
2006/01/04(水) 22:09:07Perlにはtelnetプラグインやsshプラグインがあります。
とはいってもクライアントサイドでやってみたいというのがありまして
cygwinを使ってやっています。
私もはじめはPerl以外の言語を使うとき、エディタ+SDKという組み合わせでやっていました。
最近ではEclipse + Apache Ant + Apache Maven + 各種Eclipseプラグインという
組み合わせで開発を行っております。
perlをよりC++やJavaのような言語と同じような言語として扱えるようになるために、
Perl6が出て欲しいですが、開発資金を私用につかったとかで揉めて
その期待もしばらくの間はかなり薄いままでしょうかね。
PHPをC++やJavaのように使いたかったのですが、あらゆる面でPHPには失望しました。
Perlならその失望感をぬぐってくれるでしょうか?
私は、Perlでオブジェクト指向をどこまで実践できるかもっと知りたいのです。
0392デフォルトの名無しさん
2006/01/04(水) 22:32:34Eclipse+epicでしばらくやってみた。
ペンタM1.5GHz(Let'snoteY2)/768MBでさえ重くてやめた。
P4-2.6GHz/1.5GBでやっと実用ぎりぎりって感じかな。
で、俺は
Unixではvi、WindowsではEmEditor、MacではJeditでガリガリ書いてる。
秀丸やterapadはUnicodeの扱いが半端なので( ゚Д゚)マズー。
IDEまではいかないけど補完とか欲しければ
Emacs+Perlplus、Macならmi、Windowsではez-HTML。
oopやるならこっちのが若干便利。
0393デフォルトの名無しさん
2006/01/04(水) 22:53:26>しかし気になるのはメソッド引数の型を指定できるかどうかですね。
>PHP5からは多少は指定できるのですがPerlではどうもそうでもなさそうですかね。
多少なら指定できるよ。「Perl プロトタイプ」でググること。
>それにPerlも双方ともC++やJava, C#, Dのように戻り値の型を指定できない
>のでしょうか。PHPではそれができずに姑息な手段を使わなければならずがっかりしました。
これは指定できない。Perl でもがっかりすることに決まったね。
0394デフォルトの名無しさん
2006/01/04(水) 23:10:04戻り値の型は……
あ、wantarrayでscalarと(ARRAY|HASH)は切り替えられるよ。
あと、OO-Perlなメーリングリストがあったハズなので、入ってみると良いかも。
0395デフォルトの名無しさん
2006/01/04(水) 23:10:12すごいな。初めて触った言語がJava+Webアプリだったり
するとVMとコンテナの中で世界が完結するからこんなに
モノリシックな思考回路になるんだろうか…
変にPerlのプロトタイプなんて教えたらメソッド呼び
出しではプロトタイプが効かないぞ!って発狂しそうだなw
lispとかSmalltalk触らせたら何て言うんだろう。
0396デフォルトの名無しさん
2006/01/04(水) 23:15:06いや、「メソッド引数」の型は指定できません。
もっとも、必要はあまり感じないですが。
$foo->bar( array => \@array, hash => \%hash )
とかすればいいわけだし。
あるいは$foo->bar( \@array )と$foo->bar( \%hash )で挙動を変えたい場合は
refとか使えばいいわけで。
それがダサいってのはわかるけど。
0397デフォルトの名無しさん
2006/01/04(水) 23:20:33引数の型指定はプロトタイプで可能。
ttp://www.rfs.jp/sb/perl/02/07.html
あたり山椒。
戻り値指定は出来ないつうかやらないのがPerl流。
メソッド呼び出し元のコンテキストを解析して引数の型に応じて
「同一名称で引数の異なる複数のメソッド」でなく、「ひとつのメソッド」で
戻り値を変えるようなこともやるのでね。
というか恐らく貴方が言っているC/Java的なプリミティブな「型」はそもそも
Perlには存在しないんだな。多次元配列もないし。(厳密には「リスト」は
あるが「配列」さえない)
この根本部分が他の言語と大きく違うので、他の言語をマスターしてPerlに
入ってくる場合注意して勉強したほうが良い。
逆にPerl使いが多用する柔軟で手軽なハッシュ、リスト、リファレンス回しが
出来る言語はほかになかなか見当たらないな。まあバグの温床でもあるしな。
0398デフォルトの名無しさん
2006/01/04(水) 23:33:33結論からいうと型指定はできそうだが
メソッドのオーバーロードができぬってか?
0399デフォルトの名無しさん
2006/01/04(水) 23:47:08「PerlやPHPのOOPは後付けであり、オブジェクト指向言語ではない」
これだけ覚えておけば結構
0400デフォルトの名無しさん
2006/01/05(木) 00:36:560401デフォルトの名無しさん
2006/01/05(木) 00:52:31なに、オーバーロードができると?
同じ名前のメソッドを同一クラス内で
複数定義できると?
まさか。
0402デフォルトの名無しさん
2006/01/05(木) 02:11:33語ること自体がナンセンスだわ。継承でさえ単なるハックなのに。
コンパイル時のおまけチェックを型指定と言ってみたり。
ところでuse overloadってあるんだなw
いわゆるオーバーロードじゃないけど
0403デフォルトの名無しさん
2006/01/05(木) 02:42:37変数の「中身」には型あるけど
変数や引数自体には型無いぞ
Perlだけでなく、いくつかの言語では
型指定が無いのがむしろ利点だったりするんだがな
私はDelphi以来、型指定には飽きたよ
0404デフォルトの名無しさん
2006/01/05(木) 03:14:54そう言う機能を提供するモジュールを作るのも不可能では無いと思うがどうだろう。
勿論Perlには型が無いから例えばマッチングを行なって振り分ける事になるが。
0405デフォルトの名無しさん
2006/01/05(木) 03:39:210406デフォルトの名無しさん
2006/01/05(木) 04:04:310407デフォルトの名無しさん
2006/01/05(木) 06:50:440408デフォルトの名無しさん
2006/01/05(木) 12:25:300409デフォルトの名無しさん
2006/01/05(木) 13:20:07型指定が大前提だが
Java SE 5 Tigerでいうところのこんな感じのをPerlで実現する方法
知りたかったり。
(ListオブジェクトにはString型以外の型を入れることは許されない、という指定)
List<String> list = new ArrayList<String>();
0410デフォルトの名無しさん
2006/01/05(木) 14:26:16だから、C的な意味の「型」なんてないって、みんな言ってるでしょ。
$foo = 333;
とすれば、$fooは「333」という数値でもあるし、「333」という文字列でもある。
$fooに対して数値演算もできれば、文字列操作もできる。
OOPの前にPerlの基本的なことを勉強汁。
0411デフォルトの名無しさん
2006/01/05(木) 14:36:310412デフォルトの名無しさん
2006/01/05(木) 15:17:490413デフォルトの名無しさん
2006/01/05(木) 17:00:33上記環境サーバ(RedHat9)にてExcelシートを作成しています。
日本語出力はUnocode::Stringにてeuc→utf16変換し、write_unicodeメソッドにて書き出しています。
2バイト文字の"−"を出力する際に、半角"-"と全角"−"の中間位のサイズの、コード
"&#8722;"(ギリシア文字のマイナス。コードは実際は半角)に置き換わってしまいます。
そのため、このシートをCSV形式に変換しますと、置き換わった部分が?となって出力されてしまいます。
これを回避し、全角の"−"(ハイフン)を出力する方法はありますでしょうか?
クライアントはWindows98/2000/XPです。よろしくお願いします。
0414デフォルトの名無しさん
2006/01/05(木) 17:30:16化ける余地がありそうなところがeucからutf16に変換するところとwrite_unicodeの
2箇所あるので、どっちかぐらいは切り分けてから質問した方がいいと思われる。
最初の変換で化けているならSpreadsheet::WriteExcelが云々というのは全く無駄だし、
write_unicodeで化けているならUnocode::Stringで変換したとか曖昧なことを言わずに
化けるutf16文字の文字コードをきっちり書くべきだ。
0415デフォルトの名無しさん
2006/01/05(木) 18:09:43− は − 。U+2212 は MINUS SIGN なので正しいと
言えば正しい。U+FF0D (FULLWIDTH HYPHEN-MINUS) に変換したい
という話なら、確認した限りでは Unicode::Japanese がそう変換してくれる。
http://search.cpan.org/~hio/Unicode-Japanese-0.32/
#!/usr/local/bin/perl -w
use Encode qw(from_to);
use Unicode::Japanese;
my $str1 = "\xA1\xDD"; # EUC-JP の '−'
my $str2 = Unicode::Japanese->new($str1, 'euc')->utf16;
from_to($str1, 'euc-jp' => 'UTF-16BE');
print unpack('H4', $str1), ',', unpack('H4', $str2); # 2212,ff0d
__END__
>>414
というわけで化けてるのではなく Unicode のマッピングの話。
http://www.asahi-net.or.jp/~hc3j-tkg/unicode/
0416デフォルトの名無しさん
2006/01/05(木) 18:49:260417デフォルトの名無しさん
2006/01/05(木) 19:13:00ありがとうございます。お陰で解決しました。
調べたところ、Unicodeコンソーシアムがテキトーに文字設定しちゃったからこんな状態に
なってるようですね。勉強になりました。
0418デフォルトの名無しさん
2006/01/05(木) 21:44:23infoseek、tok2、uuhpのレン鯖では0になり、まいっちんぐです。
自分では確認していないのですがniftyも0になるらしいです。
ほかに0になる環境のやついますか?
#!/usr/local/bin/perl
print "Content-Type: text/html\n\n";
# 検証用の 10 バイトの test.dat を作成
if (open OUT, '>test.dat') {
print OUT '0123456789';
close OUT;
} else {
print $!;
}
if (open IN, '+>>test.dat') { # eof(IN)が1のはず
print "os:$^O<br>\n";
print "perlver:$]<br>\n";
print 'tell():', tell IN;
close IN;
} else {
print $!;
}
0419デフォルトの名無しさん
2006/01/05(木) 22:19:52出てきてしまうあたりがJava厨の悲しさ…
0420デフォルトの名無しさん
2006/01/05(木) 22:26:37Perl の open() の ">>" は C ライブラリの fopen() の append
mode に対応している。少なくとも POSIX における append mode の
定義は「ファイルの seek 位置に関係なく末尾に追記する」こと
なので tell() で 0 が返されるのはおかしくない。
標準 C の規格は手元にないけど、レンタルサーバならほとんど
UNIX だから POSIX 準拠だろう。
0421デフォルトの名無しさん
2006/01/05(木) 22:43:43ここ、ム板だから。一応。 >>1
#!/usr/local/bin/perl -w
open OUT, '>' . './test.dat' or die $!;
print OUT '0123456789';
close OUT;
open IN, '+>>' . './test.dat' or die $!;
print tell IN, "\n";
__END__
ActivePerl Build 522 (5.005_03) on Win98SE → 0
ActivePerl Build 815 (5.8.7) on Win98SE → 10
5.005_03 on FreeBSD 4-STABLE → 10
5.8.7 on FreeBSD 4-STABLE → 10
5.8.5 on RHL 7.3 (glibc 2.2.5) → 10
5.6.1 on RHL 7.3 (glibc 2.2.5) → 10
0422デフォルトの名無しさん
2006/01/06(金) 06:50:31現在perlでhtmlの出力をしております。 この内、<body>の内容は
データファイルに丸々保管されています。
この為、処理自体はprintで htmlヘッダ/ファイル/htmlフッタ
という単純な出力で正常に動作しています。
そこで、このbodyファイルの出力についてですが、現在は
open(FILE, 'hoge.dat');
print <FILE>;
close(FILE);
とありきたりに出力しているのですが、これは別の書き方で更に高速化
する余地はあるでしょうか?
p.s. データファイルをいじってlocationで飛ばす方法は、URLが変わって
しまう為、断念しました。
0423デフォルトの名無しさん
2006/01/06(金) 08:13:34undef $/;
0424デフォルトの名無しさん
2006/01/06(金) 09:13:44syscallでsendfileシステムコールを呼ぶ
0425デフォルトの名無しさん
2006/01/06(金) 09:43:310426デフォルトの名無しさん
2006/01/06(金) 10:48:28どうしてPerlスレ見てんの?
0427デフォルトの名無しさん
2006/01/06(金) 12:12:330428デフォルトの名無しさん
2006/01/06(金) 12:36:05適材適所。
>>427
理由は?
0429デフォルトの名無しさん
2006/01/06(金) 13:31:03428ではないが、前者は一度全部メモリに読み込んでから書き込みになるが、
後者だと読み込みと書き込みが交互に行われる。
速度的にどっちが有利かは場合によりそうだが、メモリ消費は後者が圧倒的に
少ないと思われる。
0430デフォルトの名無しさん
2006/01/06(金) 14:18:42$aaa=<>;
chomp($aaa);
if ($aaa eq "dog"){
print "オマエヤルナ";
} else{
print "逝け";
}
0431デフォルトの名無しさん
2006/01/06(金) 15:00:450432デフォルトの名無しさん
2006/01/06(金) 16:00:38>更に高速化する余地はあるでしょうか?
この動物を英語で何というか解れば、高速化できる。
∧∧ ∧∧ A_A
(*゚ー゚) ミ*゚ー゚ミ (*゚ー゚)
〜(,,,uu) @ミ__ミ 〜(,,,uu)
0433デフォルトの名無しさん
2006/01/06(金) 16:06:410434デフォルトの名無しさん
2006/01/06(金) 16:32:59まずはベンチマークだ
0435デフォルトの名無しさん
2006/01/06(金) 17:20:52CPU負荷はBenchmarkで計れますが、そのメモリ版です。
WinXP ActivePerl5.8.7
0436デフォルトの名無しさん
2006/01/06(金) 17:23:05CPANで探したら思わず名前にワラタ
http://search.cpan.org/~salva/Memchmark-0.01/lib/Memchmark.pm
0437435
2006/01/06(金) 18:16:16ありがとうございます。Devel::Sizeしか見つからなくてまいっちんぐでした。
Winでは動かないようなので、ぶっ壊れたRedHatが返ってきたら試してみます。
0438デフォルトの名無しさん
2006/01/06(金) 20:53:42system('cat hoge.dat');
これがいちばん速いだろう
0439デフォルトの名無しさん
2006/01/07(土) 00:03:58こんなのは?
open(FILE, "hoge.dat");
while ($len = sysread(FILE,$buf, 1024)) {
syswrite (STDOUT, $buf, $len);
}
close(FILE);
メモリ使用量は1024を変えて調整。
0440439
2006/01/07(土) 00:11:16printはバッファリングするのかな?それともいちいちflushしてる?
0441デフォルトの名無しさん
2006/01/07(土) 00:37:24http://www.sysarch.com/Perl/slurp_article.html
0442デフォルトの名無しさん
2006/01/07(土) 00:41:470443デフォルトの名無しさん
2006/01/07(土) 01:58:48my $obj = Foo::Bar->new(module => $hoge, %hash);
上のように呼び出して、Foo::Bar::$hogeってモジュールの
newメソッドを呼び出すようにしたいんだけどFoo::Bar.pmをどう書けばいいか教えてくれ
具体的には、$hoge = 'Hoge'だったら実際に呼び出すのはFoo::Bar::Hoge->new(%hash)
$hoge = 'Piyo'だったらFoo::Bar::Piyo->new(%hash)
0444デフォルトの名無しさん
2006/01/07(土) 02:16:490445デフォルトの名無しさん
2006/01/07(土) 02:23:37@list=(20,1,3);
@result = sort { $a <=> $b } @list;を実行すると
配列は(1,20,3)のようになってしまいます
昇順だから(1,3,20)にならなければだめなのに
どうしたらちゃんと昇順にソートできるんですか?
0446デフォルトの名無しさん
2006/01/07(土) 02:28:18> 配列を昇順にソートしたいんですけど
> @list=(20,1,3);
> @result = sort { $a <=> $b } @list;を実行すると
> 配列は(1,20,3)のようになってしまいます
少なくともこっちではならない
目を皿のようにして自分のプログラムをチェックしなさい
0447デフォルトの名無しさん
2006/01/07(土) 02:31:32->演算子の左辺が文字列のときはクラス名と解釈されるので、
evalを使うまでもなく
"Foo::Bar::$hoge"->new(%hash);
とか書ける。
0448デフォルトの名無しさん
2006/01/07(土) 02:32:38おお、すごい
0449443
2006/01/07(土) 06:57:44ありがとう、助かった。
そっか、そんな簡単なことでよかったのか。
0450418
2006/01/07(土) 07:23:36遅漏ですみません。
あれから他のレン鯖10箇所以上でも確認してみたのですが
OS依存でもなければPerlのバージョン依存と言うわけでもないという結論に至りました。
+>>で開くときは追加してから読み込むはずなので嵌る事は無いと思いますが
篠沢教授に1500点くらいの微妙さなので気をつけたほうがよさそうですね。
ありがとうございました。
0451デフォルトの名無しさん
2006/01/07(土) 09:33:43CGIではないので、$ENV{'SERVER_ADDR'}とかは使えません。
できれば、eth0とかeth1とかbr0とかNICを指定して調べられると良いのですが…
0452デフォルトの名無しさん
2006/01/07(土) 10:07:36この辺とかどう?
http://search.cpan.org/~tpaba/Net-Ifconfig-Wrapper-0.09/Wrapper.pm
0453デフォルトの名無しさん
2006/01/07(土) 13:35:55それでもわからないお
正解を教えてお
0454デフォルトの名無しさん
2006/01/07(土) 14:00:430455デフォルトの名無しさん
2006/01/07(土) 14:08:59使えない言語だな
0456デフォルトの名無しさん
2006/01/07(土) 14:18:05そうだよ。
使わなくていいよ。
0457デフォルトの名無しさん
2006/01/07(土) 16:01:190458デフォルトの名無しさん
2006/01/07(土) 17:16:54の全変数名と値を出力したいのですがよい方法ありますでしょうか。
0459デフォルトの名無しさん
2006/01/07(土) 17:42:280460デフォルトの名無しさん
2006/01/07(土) 20:04:400461デフォルトの名無しさん
2006/01/07(土) 20:09:50どうせ、1 10 11 12 2 3 4 …になる、と言いたいんだろ?
“文字列”と“数値”の違いについて、一から勉強し直せ。
0462デフォルトの名無しさん
2006/01/07(土) 21:15:260463デフォルトの名無しさん
2006/01/07(土) 21:21:48また馬鹿を一匹発見。今日は収穫多いなw
0464デフォルトの名無しさん
2006/01/07(土) 23:34:590465デフォルトの名無しさん
2006/01/08(日) 02:52:091/4のステップで同じものができた。
コーディング時間も大してかからなかった。
正直うれしかった。
そしてperlの強力さを知った。
0466デフォルトの名無しさん
2006/01/08(日) 04:01:520467デフォルトの名無しさん
2006/01/08(日) 05:11:07言語の質はともかくステップ数の少なさだけならRubyも使ってみな
0468デフォルトの名無しさん
2006/01/08(日) 05:39:34言語の質はともかく、ステップ数の少なさ
ならPerlのが上では?…分野によりけりか
0469デフォルトの名無しさん
2006/01/08(日) 06:19:28CPAN があるので Perl の方が上
0470デフォルトの名無しさん
2006/01/08(日) 06:41:46Cで同じ事しようと思ったら、考えただけでうんざりする。
0471デフォルトの名無しさん
2006/01/08(日) 07:26:38うんざりすることに対しては、
たいていの場合、
うんざりしないようにしようという努力が傾けられている。
0472デフォルトの名無しさん
2006/01/08(日) 11:38:58@lines=("番号<>名前<>得点","1<>aaa<>600","2<>bbb<>500","3<>ccc<>800");
のようなデータベース配列で得点の高い順にソートして
@lines=("番号<>名前<>得点","3<>ccc<>800","1<>aaa<>600","2<>bbb<>500");
のような配列にするにはどうすればいいんでしょうか?
0473デフォルトの名無しさん
2006/01/08(日) 12:18:28<>でsplitして得点でソートすればいいよ。
0474デフォルトの名無しさん
2006/01/08(日) 12:56:17http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq4.html#how_do_i_sort_an_array_by__anything_
0475デフォルトの名無しさん
2006/01/08(日) 13:08:49ありがとう試してみます
0476デフォルトの名無しさん
2006/01/08(日) 13:55:14@lines=("番号<>名前<>得点","3<>ccc<>800","1<>aaa<>600","2<>bbb<>500");
list(\@lines);
@lines = sort {(split(/<>/,$a))[2] <=> (split(/<>/,$b))[2]} @lines;
list(\@lines);
sub list{ my $a=shift; print $a; print join("\t",(split '<>',$_)),"\n" for (@$a);}
0477デフォルトの名無しさん
2006/01/09(月) 19:28:24ちゅまんね
0478デフォルトの名無しさん
2006/01/09(月) 21:50:39>>143のおれのお題を考えてみてくれよ。
文字そのものと「.」「*」「?」「[ ]」しか使わないという条件もつける。
解法のとっかかりでもいい。
0479デフォルトの名無しさん
2006/01/09(月) 21:54:20日本語でおk
0480デフォルトの名無しさん
2006/01/09(月) 22:03:51そんなの文字クラス[]にマッチする文字のリストアップだけ出来たら終了じゃね?
[]の中身が空集合でなかったらマッチするの作れるだろ。
[]の中身が空集合だったらその文字クラスごと * や ? で潰せないか確認。
0481デフォルトの名無しさん
2006/01/09(月) 22:10:43これ以上どう書けばいいのかわからない。
>>480
文字列長は不定だよ。
/^abc$/と/^a.+$/くらいなら全文字列を列挙していけばどこかでひっかかるけど。
0482デフォルトの名無しさん
2006/01/09(月) 22:16:08http://search.cpan.org/~bowmanbs/Regexp-Genex-0.06/lib/Regexp/Genex.pm
0483デフォルトの名無しさん
2006/01/09(月) 22:25:59それを使っても総当たり方式にしかならんでしょ。
0484デフォルトの名無しさん
2006/01/09(月) 22:38:07総当たりで得た文字列を数えればいいじゃないか。
@both_match = grep $count{$_}++, @regex1, @regex2;
0485デフォルトの名無しさん
2006/01/09(月) 22:40:29「初めてのPerl」という本を読んでいます。
続・初めてのperlは専門的な内容とアマゾンのレビューに
書かれているのを見かけたのですが、
次に読む本としてはperlクックブックと続・初めてperlの
どちらが良いでしょうか?
0486デフォルトの名無しさん
2006/01/09(月) 22:44:55だから文字列は不定長なんだって。
blute forceは使えない。
0487デフォルトの名無しさん
2006/01/09(月) 22:49:130488デフォルトの名無しさん
2006/01/09(月) 22:59:17【Perl, CGI】参考書籍 第三版
http://pc8.2ch.net/test/read.cgi/php/1030209573/
0489デフォルトの名無しさん
2006/01/09(月) 23:17:53すれ違いでしたか、すいません
0490デフォルトの名無しさん
2006/01/10(火) 08:55:040491デフォルトの名無しさん
2006/01/10(火) 09:24:050492デフォルトの名無しさん
2006/01/10(火) 09:55:05もしどちらの正規表現にもマッチする文字列があるなら、
その最短のものの長さには上限がありそうだから、
うまいことそれを証明すればあとは総当りでOKなんじゃ
ないか、と考えてみた。
0493デフォルトの名無しさん
2006/01/10(火) 12:00:39サニタイズするのは当然ですがsysopenを使った方がいいのでしょうか。
0494デフォルトの名無しさん
2006/01/10(火) 12:21:36「>」や「<」とファイル名はopenでも別々の引数にできる
例:
open FH, '>', $file
ので、こう書けば$fileについてはsysopenと同等。
0495デフォルトの名無しさん
2006/01/10(火) 12:23:260496デフォルトの名無しさん
2006/01/10(火) 12:38:120497デフォルトの名無しさん
2006/01/10(火) 13:03:47regex-A: ^(aaa)+$
regex-B: ^(aaaa)+$
どっか移動するスレ無いだろうか
0498デフォルトの名無しさん
2006/01/10(火) 13:53:42こんなテキストがあって(一行)
foo('a','b'); foo('c','d'); foo('e','f'); foo('g','h');
このfooの第一引数、つまりa, c, e, gを抜き出して処理したいのですが(引数は2つ固定)、
こういう場合どうするのが定石でしょうか
よろしくお願いします。
0499デフォルトの名無しさん
2006/01/10(火) 14:02:130500デフォルトの名無しさん
2006/01/10(火) 14:10:45正規表現を使うのが定石
$line = q|foo('a','b'); foo('c','d'); foo('e','f'); foo('g','h');|;
@aceg = ($line =~ /\bfoo\('([^']*)'/g);
0501デフォルトの名無しさん
2006/01/10(火) 14:12:06それが書き捨てかどうかによるが、
書き捨てなら漏れなら>>500よりももっと簡潔にこう書く
@args = $line =~ /\('(.*?)'/g;
0502デフォルトの名無しさん
2006/01/10(火) 14:29:13ありがとうございます。かなり書き捨てなのですが両方ともども参考にさせていただきます!
どもでした。
0503デフォルトの名無しさん
2006/01/10(火) 15:06:43引数3つにすると、use open ':encoding(hoge)';が使えねー。
0504デフォルトの名無しさん
2006/01/10(火) 17:41:140505デフォルトの名無しさん
2006/01/10(火) 18:08:54板全体のレベルがアレなので、華麗にスルー。これ。
0506デフォルトの名無しさん
2006/01/10(火) 22:00:44いう文字が含まれている、あるいは行頭に「ddd」がある、と言う場合は'NG'と
判定します。
foreach(@all_line) {
$line_ok_ng = '';#OKかNGか
if ((/aaa/)||(/bbb/)||(/ccc/)||(/^ddd/)){
$line_ok_ng = 'NG';
}else{
$line_ok_ng = 'OK';
}
#$line_ok_ngに沿って処理
}
しかし、条件が増えてきた為、aaa bbb ccc等の条件を他のファイルに
書き出す必要が出てきました。そこで次のように変更しました。
0507506
2006/01/10(火) 22:01:39foreach(@all_line) {
$line_ok_ng = &line_check($_);
#$line_ok_ngに沿って処理
}
sub line_check {
my $line_ok_ng = 'OK'; #始めはOK
my $each_line = $_[0]; #調査対象
my @ng_word = @other_file::ng_word;
my @ng_header = @other_file::ng_header;
foreach (@ng_word) {
$line_ok_ng = 'NG' if $each_line =~ /$_/;
}
foreach (@ng_header) {
$line_ok_ng = 'NG' if $each_line =~ /^$_/;
}
return($line_ok_ng);
}
#other_fileの中に@ng_word=("aaa", "bbb", "ccc")が記入してあります
やりたいことは実現出来たのですが、微妙に遅くなった気がします。
@all_lineは1万行弱なので、特に困りはしないのですが、上記のことを
もっと綺麗に実現するような方法、あるいは私が覚えておいた方が
良いような手法がありましたら、ぜひ御示唆いただけないでしょうか。
よろしくお願いします。
0508デフォルトの名無しさん
2006/01/10(火) 22:11:04http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq6.html#how_do_i_efficiently_match_many_regular_expressions_at_once
0510デフォルトの名無しさん
2006/01/10(火) 22:46:55>>508 が順等な答え。
で、わざわざ /$_/ と /^$_/ を分けるんじゃなくて、
^ddd
なものも、aaa, bbb, ccc と一緒に入れて大丈夫。
できればファイル中では ^ddd を先に持ってきた方が良いかも。
他にはファイルに入れたパターンを join して、evalする方法もある。
0511506
2006/01/10(火) 23:48:53qrとかmapとか\bとか、いろいろ勉強になりました。
mapの部分とかが時間がかかるのならば、サブルーチンの中に入れるよりも、
一番最初にグローバル変数として作っておくべきですかね。あとnextで
抜けるのも忘れていました。^dddを一緒に、というのは明日職場でやってみます。
またよろしくお願いします。
0512デフォルトの名無しさん
2006/01/11(水) 00:51:09考えているのですが良い方法が思いつきません。
何か良い方法ありませんでしょうか?
0513デフォルトの名無しさん
2006/01/11(水) 01:07:00UN*Xなら/var/runに<script_name>.pidファイルを置くのが常套手段。
起動時にvar/run/<script_name>.pidを検索しあったら起動しない。
丁寧にやるなら多重起動につき起動キャンセルの旨のログを
cronやほかのprogramから起動時はログに吐く
コマンドラインから起動されたらSTDOUTにもアラートを吐かせる。
winはどうやるのかなあ?
0514デフォルトの名無しさん
2006/01/11(水) 01:13:080515デフォルトの名無しさん
2006/01/11(水) 11:45:150516デフォルトの名無しさん
2006/01/11(水) 12:02:31#!/usr/bin/perl
use strict;
use warnings;
use IO::File;
use Fcntl qw(:flock);
my $lock_f= $ENV{SCRIPT_NAME} || $0 || '/tmp/lock';
my $lock= new IO::File($lock_f,'+<') || die("$lock_f:$!");
flock($lock,LOCK_EX|LOCK_NB) ||die($!);
# 適当に処理
0517デフォルトの名無しさん
2006/01/11(水) 12:20:32http://www.site-cooler.com/kwl/perl/environment.htm#helloworld
のサイトの通りwindowsのmsiファイルをダウンロードしてインストール
したんですけどコマンドプロンプトでperl -vと入力してもエラーになるし
.plファイルを実行しても一瞬で消えてしまうんですけど
何かインストールの仕方に問題があったのでしょうか?
機種はxpです
0518デフォルトの名無しさん
2006/01/11(水) 12:24:33エラーメッセージくらい書けよ
0519デフォルトの名無しさん
2006/01/11(水) 12:31:07環境変数いじったときだけ再起動するのかと思ってました。
スレ汚しすいません。
0520デフォルトの名無しさん
2006/01/11(水) 23:28:10相手にされませんでした。
ここで質問させてください。
perlのリャマ本で、以下の文がありました。
open passwd, "/etc/passwd"
or die "How did you get logged in ? ($!)";
while (<passwd>) {
chomp;
if (/^adminidtrator/i) {
print "iroiro!";
}
}
Unixのかわりにcygwinで実行したら、
die 以下が実行されました。
なんで、passwdが開けないのですか?
宜しくお願いします。
0521デフォルトの名無しさん
2006/01/11(水) 23:53:43ActivePerlを実行しているとか
0522デフォルトの名無しさん
2006/01/12(木) 00:18:32何の為にエラーメッセージを表示しているんだ?
http://search.cpan.org/~nwclark/perl-5.8.7/pod/perlvar.pod#OS_ERROR
0523デフォルトの名無しさん
2006/01/12(木) 00:33:22環境変数を直接読むのが普通です。
ただ、近頃は、CGI.pm を使うの方法も増えているようです。
でも、聞いた話によると、CGI,pmを読み込む分、環境変数を直接扱うより遅くなるそうですし、
使えない環境もあるそうです。
なんか、CGI.pmのマニュアル見ても難しそうだし、結局、CGI.pmを使うメリットというのは何なのでしょう?
0524デフォルトの名無しさん
2006/01/12(木) 00:43:39目を覆いたくなるような悲惨なスクリプトだな。
0525デフォルトの名無しさん
2006/01/12(木) 00:46:040526デフォルトの名無しさん
2006/01/12(木) 00:56:520527デフォルトの名無しさん
2006/01/12(木) 01:06:26>>1
0528523
2006/01/12(木) 01:32:10WEBプログラミング板で聞き直します。
でも、とほほさんのスクリプトって、そんなに酷いのでしょうか?
みんなここを見て勉強しているはずですけど。
とほほさんより良いサイトがあれば教えてください。
0529デフォルトの名無しさん
2006/01/12(木) 01:37:04>とほほさんより有名なサイトを作れない雑魚どもは黙れ
とほほにもKENTにもWeb裏技にも世話になったし感謝もしてるけど
今となってはどうしようもなく汚く移植性にも再利用性にも欠ける
最悪スクリプトなのは確かだ。
かつては先生として、今は反面教師として役に立っているwww
0530デフォルトの名無しさん
2006/01/12(木) 01:43:09と、移植性や再利用性が自己目的化して、本来の目的を
達成できない大量のJavaだけプログラマを見ていると思う
0531523
2006/01/12(木) 01:45:10技術力がマイナス成長したということ?
あまり、あり得ない気がするのですが。
ここが悪いというのであれば、反面教師でないサイトを具体的に教えてもらいたいのですが。
0532デフォルトの名無しさん
2006/01/12(木) 01:48:51知名度は質と比例しない
>>528
テンプレや本(詳細は書籍スレ)
0533523
2006/01/12(木) 02:01:11http://www.site-cooler.com/kwl/perl/
を見てみましたが、とほほさんのところが悪くて、ここが良いといわれる理由がわかりません。
そもそも、OLE使って Excel を使うとかソケット使ってメールを送るとか、難しいことは書いてあるのに、
肝心のCGI の説明が全くありません。
普通にCGIを使うだけならとほほさんのところが一番良いように見えるのですが。
本に関しては、今すぐ見れないので何とも言えないのですが....
0534デフォルトの名無しさん
2006/01/12(木) 02:16:10自分が良いと思ったら他を否定してないで信じて学べ。
とほほで勉強してPerlでいろいろ作って2年ぐらいしたら
KENTやとほほ流のやり方の限界がきっと見えてくる。
すぐ正解を求めないで、もっといろいろ勉強することだ。
とりわけ、こんなところにカキコしている暇があるなら
1ステップでもコードを書いたほうがいい。そしてコードを膨らませて
取り返しの付かないような失敗もするべきだな。
0535デフォルトの名無しさん
2006/01/12(木) 02:16:13煽りしかできない根暗オタクどもは逝ってよし!
0536デフォルトの名無しさん
2006/01/12(木) 02:19:380537523
2006/01/12(木) 02:51:36http://www.site-cooler.com/kwl/perl/ を否定するつもりは有りませんでした。
もし、否定しているように見えたのならすみません。
# どちらかというと、否定されているのは とほほさん のような....
でも、マジで、どの辺がどうダメなのか具体的に教えて欲しいのです。
ダメだダメだといわれるのに、どこが悪いかわからないと、勉強しようがないじゃないですか?
# とほほさんに対する単なるヒガミってことは無いですよね?
0538デフォルトの名無しさん
2006/01/12(木) 03:16:28>>529とかに書いてある。推測だけど、今となっては…ってのは
何にも知らない頃はわからなかった悪いところがわかるようになった、ってことでは。
入門編としてはわかりやすいと思うけど門から先に入るにはちょっとね。
0539デフォルトの名無しさん
2006/01/12(木) 03:22:49まともな話ができるWebProg板に行こうぜ!
0540デフォルトの名無しさん
2006/01/12(木) 04:40:54KENTもPerl初心者の頃は行単位の処理がわかりやすかった。
0541デフォルトの名無しさん
2006/01/12(木) 06:50:10use lib $hoge;
のようなことをしたいのですが、このようにすると
use lib $hoge; のとこどでエラーになってしまいます。
use lib 変数というのはできないのでしょうか?
0542デフォルトの名無しさん
2006/01/12(木) 07:04:130543デフォルトの名無しさん
2006/01/12(木) 07:23:57そんなことを言っていると、とほほを手本にした糞スクリプトが大量に発生してしまう。
(既に大量発生しているのだが)
確かに、向上心のあるヤツならがんばって、そのうち限界が見えて来るかもしれない。
だが、ほとんどの人間はがんばりもせず、やり方に疑いも持たずに糞スクリプトを日々生産するだけだ。
0544デフォルトの名無しさん
2006/01/12(木) 07:48:48use が実行されるタイミングは、$hoge="/foo/bar"より前になるので、できない。
0545デフォルトの名無しさん
2006/01/12(木) 09:19:24若いものがその体たらくではわしらの時代もまだまだ安泰じゃのう。
ガッハッハッハ
───大原巌@月下の棋士
0546デフォルトの名無しさん
2006/01/12(木) 09:35:450547デフォルトの名無しさん
2006/01/12(木) 09:55:24わけがわからない質問者よりわかってる分悪質だ。
0548デフォルトの名無しさん
2006/01/12(木) 09:55:330549デフォルトの名無しさん
2006/01/12(木) 11:29:56とほほの方法は非常に仕組みを理解しやすい反面、環境変数決め打ちなので
・参照できない、或いは存在しない環境変数
・参照した結果なにも入っていない環境変数
を判定できない。
具体的なところではCONTENT_LENGTHやCONTENT-TYPEはCGIの場合
POSTでデータが送信されないとそもそも存在しないわけだが、
件のスクリプトでは存在して空文字列が入っているように見えてしまう。
また、
・指定していないが実は存在する環境変数
・サーバのバージョンアップなどで新しく追加された環境変数
もキャッチアップできない。
print "Content-Type: text/plain\n\n";print "$_ = ",$ENV{$_},"\n" for (sort keys %ENV);
こんなワンライナで、参照可能な全環境変数を確認できるし、
Content-Typeにtext/plainを利用すればタグ出力も不要だし
ターミナルからコマンドで確認する場合も楽だ。
(1行目を読み飛ばせば良いだけだからな)
まずそんなことはないと思うが絶対無いとは言い切れない
「どこかの環境変数に"</xmp>"という文字列が入っていたら?」
「どこかの環境変数に悪意のvbsやJavaScriptが入っていたら?」
という潜在問題への対処でもある。
こういうのは本やWebを読んでるだけじゃダメでたくさんスクリプト
書いて、ハマって、解決しないと身に付かないし、そもそも経験則
なので、blogなどに散見されるがまとまったFAQにはなりにくいんだ。
0550デフォルトの名無しさん
2006/01/12(木) 11:47:38♪高値で掴んで走り出す 行く先もわからぬまま
暗い夜の帳の中へ
これ以上損し出したくないと 損切った昨日の引けに
自由になれた気がした その日の夜
0551デフォルトの名無しさん
2006/01/12(木) 13:38:11> $ perl -d -e 42
というのがありました。
この 42 って一体何なんでしょうか?
「銀河ヒッチハイクガイド」と関係ありますか?
0552デフォルトの名無しさん
2006/01/12(木) 14:14:41perldoc perlrun
0553デフォルトの名無しさん
2006/01/12(木) 16:12:56よろしくお願いいたします。
data.txt data1.txt
1,山田,A 1,山田さん,10
2,鈴木,B 2,鈴木さん,15
data3.txt
1,山田,A,1,山田さん,10
2,鈴木,B,2,鈴木さん,15
0554デフォルトの名無しさん
2006/01/12(木) 16:22:432. 置換で行末に , を付ける
3. data1.txtを開き、全て選択してコピーする
4. data.txtに矩形貼り付けする
5. 名前を付けて保存でdata3.txtを作成する
0555デフォルトの名無しさん
2006/01/12(木) 16:28:300556デフォルトの名無しさん
2006/01/12(木) 16:34:05#!/usr/bin/perl
use strict;
use warnings;
use IO::File;
my %data1= parse('data1.txt');
my %data2= parse('data2.txt');
my @keys= unique( keys %data1, keys %data2 );
my $fh= new IO::File('data3.txt','>');
for( sort @keys ){
my $key= $_;
my @data1= @{ $data1{$key} || [] };
my @data2= @{ $data2{$key} || [] };
print $fh join(',',map {nval($_)} ($key,@data1[1..2],@data2[0..2]))."\n";
}
sub nval{defined $_[0] ? $_[0] : ''}
sub unique{my %t;grep !$t{$_}++,@_}
sub parse {
my $file= shift;
my $fh= new IO::File( $file ) || die("$file:$!");
my %r= ();
while(<$fh>){
chomp();
my @data = split /,/,$_;
$r{ $data[0] }= \@data;
}
return wantarray ? %r : \%r;
}
0557553
2006/01/12(木) 16:36:170558553
2006/01/12(木) 16:43:58556さん 感動です。感謝申し上げます。
宿題ではないです。有り難うございました 。
0559デフォルトの名無しさん
2006/01/12(木) 17:01:320560デフォルトの名無しさん
2006/01/12(木) 18:37:56Perl のスレだからな。
open eyes, pop or die;
open mind, pop or die;
chomp, print, print "\054".
<eyes> for @your = <mind>
0561デフォルトの名無しさん
2006/01/12(木) 20:18:430562デフォルトの名無しさん
2006/01/12(木) 20:19:18open IN1,"data.txt"; open IN2,"data1.txt"; open OUT,">data3.txt";
while(<IN1>){chomp; print OUT $_ . ',' . <IN2>;}
close OUT; close IN2; close IN1;
じゃダメなのか?
まあこんなことは俺も迷わず>>559と同じことをするけど。
0563デフォルトの名無しさん
2006/01/12(木) 20:43:430564デフォルトの名無しさん
2006/01/12(木) 21:58:01>>561
0565デフォルトの名無しさん
2006/01/12(木) 22:51:25>>556→>>563
0566デフォルトの名無しさん
2006/01/12(木) 22:54:18↑片想い↓
>>561←>>562
0567523
2006/01/12(木) 23:42:17確かに前半部分は
print "Content-Type: text/plain\n\n";print "$_ = ",$ENV{$_},"\n" for (sort keys %ENV);
で済むし、書き方がスマートで無いことはわかりました。
スレ違いなのに、ありがとうございました。
0568523
2006/01/12(木) 23:43:51とほほさんのコードで、もっともよく使うのは以下の部分です。
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $query_string, $ENV{'CONTENT_LENGTH'});
} else {
$query_string = $ENV{'QUERY_STRING'};
}
@a = split(/&/, $query_string);
foreach $a (@a) {
($name, $value) = split(/=/, $a);
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
print "$name = $value\n";
$FORM{$name} = $value;
}
これが最悪とおっしゃる方々に質問です。
これを、最良の書き方をすればどうなりますか?
WebProg板で普通のコードが最悪とまで言われているのがいまだに理解できないのです。
「最悪」「反面教師」とまで言っておきながら、どこが悪いのか549以外は指摘しないし、
とほほさんを否定するばかりで、とほほさん以上のサイトを紹介してくれないですし。
0569デフォルトの名無しさん
2006/01/12(木) 23:48:540570デフォルトの名無しさん
2006/01/12(木) 23:51:43それは別に普通のコードだと思うけど…
妙にmap{}とか使ったりしてるコードの方が読みにくい
0571デフォルトの名無しさん
2006/01/12(木) 23:59:580572デフォルトの名無しさん
2006/01/13(金) 00:00:27この板にいるのは口先で悪口言っているだけで、実際自分では何もできない煽りばっかりなんだから、
あんまりまじめに相手するなよ。
0573デフォルトの名無しさん
2006/01/13(金) 00:06:53コーディングに限った話をすればフォーマットの"C"が無駄なくらいだな
0574デフォルトの名無しさん
2006/01/13(金) 00:49:50DoS攻撃を受けるな
0575デフォルトの名無しさん
2006/01/13(金) 00:52:36したらCGIの内容によっては大変なことになるかもね
0576デフォルトの名無しさん
2006/01/13(金) 00:54:09> これが最悪とおっしゃる方々に質問です。
> これを、最良の書き方をすればどうなりますか?
自分で「最良の書き方」を考えても車輪の再発明どころか
劣化版ができあがるだけなので世の中で広く使われている
モジュールを使います。Perlに限ったことではありません。
0577デフォルトの名無しさん
2006/01/13(金) 00:59:59それもとほほの実装をコピペして使わないといけない。
てゆうかあるのか?w
0578デフォルトの名無しさん
2006/01/13(金) 01:02:080579デフォルトの名無しさん
2006/01/13(金) 01:30:43し
ま
り
参
て
盛り上がっ
0580デフォルトの名無しさん
2006/01/13(金) 02:01:46で >>568 のコード現代的な Perl としてはいまいち.
簡単にいって,
1. use strict; がない (コンパイル時のチェックがきかない)
2. CGI, CGI::Util モジュールの再実装
3. my を使ってない,あと変数名がいまいち
がだめ.いま perldoc 見れない環境だからうろおぼえでかくけど普通↓だろ.
use strict; # この行がないのは基本的にだめ
use CGI;
use CGI::Util;
my $q = CGI->new;
my @names = $q->param;
foreach $name (@name) {
my $value = CGI::Util::unescape($q->param($name));
print "$name = $value\n";
$FORM{$name} = $value;
}
0581580
2006/01/13(金) 02:04:06処理内容としても一対一で翻訳したので微妙だがなー
0582551
2006/01/13(金) 02:32:32読んでもよくわからないのですが・・・
一応確認なのですが、
42 でなくても、 0 でも 1 でも 100000 でも効能は変わらんのですよね?
0583デフォルトの名無しさん
2006/01/13(金) 03:53:55もう1回読め。
0584583
2006/01/13(金) 04:40:07http://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%BF%E6%A7%8B%E6%96%87%E5%A4%89%E6%95%B0
perlfaq3では強調されているな。
0585デフォルトの名無しさん
2006/01/13(金) 04:47:11なんでperl4から5に移り変わる前後に思考停止してそれ以上向上しようとしない人達を
信じてこだわっているのか自分にはよくわからないんだけど...
膨大なモジュールの中から標準モジュールとして選ばれ、多く人から検証されているモジュールをなぜ否定するんですか?
そしてより少ない人からしか検証されていないコードを良しとするのですか?
広く知れ渡っている設計モデルやデザインパターンを否定し、あえてスパゲッティーになりやすい冗長ないコードを書き続けるのはなぜですか?
なぜ、バグの混入が少しでも少なくなるように提供されそして、使う事を推奨されているてる機能を使わず、
たびたびバグを発生させるのですか?(使っていてもバグは発生するのに...)
なぜ、同じコードを何度も(コピペだろうけど)書こうとするのですか?
なぜ、10行コーディングすれば済むプログラムをわざわざ100行かけてコーディングしようとするのですか?
色々考えそして経験していけばそのうちわかると思う。
0586551
2006/01/13(金) 05:02:43http://sumo.genetics.ucla.edu/pipermail/bioinfo/2003-July/000020.html
0587551
2006/01/13(金) 05:07:41まあとりあえず数字に深い意味はないことがわかったので良しということで。
0588デフォルトの名無しさん
2006/01/13(金) 08:30:26まあ落ち着け
0589デフォルトの名無しさん
2006/01/13(金) 09:02:19>「42」はメタ構文変数に似た使い方をされることがある。「42」は、integer(整数)型変数の初期値として、プログラムのテストに使われることがある。
0590549
2006/01/13(金) 12:44:01説明すると長くなるから
ttp://perldoc.jp/docs/perl/5.6.1/perlfaq9.podの
How do I decode a CGI form?の項を1000回読め。
とほほのコードがどうしてまずいのかがよ〜く解るだろう。
ついでにCGI.pmはpure perlだから読んでみるとよかろう。
もし君が解読しきれなくても本当に正しくフォームデコード
するというのはどんなに大変なことなのかぐらいは解るだろう。
CGI/util.pmのunescapeメソッドを読むだけでも君は
ここで「とほほのコードはWebProg板では普通のコード」
と言い切ってしまったことをとても恥ずかしく思うようになるはずだ。
cgi.pmのマニュアルがよく解らないというのはオブジェクト指向や
参照渡しがよく解ってないからじゃないのかな。
cgi.pmにはcgi-lib.plもどきの関数インターフェースもあるので
Webを漁って探してみてくれ。日本語訳もあるよ。
まあ頑張れ。
0591デフォルトの名無しさん
2006/01/13(金) 14:12:43あんなクソ重くて不要な機能テンコ盛りのモジュールのどこがいいんだか
こればかりは車輪の再発明させてもらったよ
0592デフォルトの名無しさん
2006/01/13(金) 14:21:330593デフォルトの名無しさん
2006/01/13(金) 14:23:04やりたいようにやればいいんじゃない?プゲラッチョ
0594デフォルトの名無しさん
2006/01/13(金) 14:31:02そっとしておいてやれ。
0595591
2006/01/13(金) 14:37:17マジで教えてほしいんだけど、頼む
0596デフォルトの名無しさん
2006/01/13(金) 15:13:160597デフォルトの名無しさん
2006/01/13(金) 15:20:460598デフォルトの名無しさん
2006/01/13(金) 15:26:460599デフォルトの名無しさん
2006/01/13(金) 15:34:100600デフォルトの名無しさん
2006/01/13(金) 15:36:110601デフォルトの名無しさん
2006/01/13(金) 15:49:18かと言って車輪を再発明するのはいやなので、既存ので良いのがあれば良いのですが、
基本的な機能だけの機能限定版とか、必要なときに必要な機能だけを use するとか、
そういうのでおすすめなものがあれば教えていただきたいです。
0602デフォルトの名無しさん
2006/01/13(金) 16:24:53今時重いとか何言っちゃってんの?
0603デフォルトの名無しさん
2006/01/13(金) 16:40:160604デフォルトの名無しさん
2006/01/13(金) 16:54:02use strict;
use warnings;
use Benchmark qw(:all);
## テスト2ではコメントアウトをはずす
# use CGI;
# use CGI::Lite;
my $count= 10000;
sub use2 {
delete $INC{ my $pkg = shift };
eval "use $pkg;";#テスト2ではコメントアウトする
return $pkg;
}
sub func {my$p=use2(shift);my$o=$p->new();}
timethese($count, {
'CGI'=> sub {func('CGI')},
'CGI::Lite'=> sub {func('CGI::Lite')}
});
1;
__END__
0605デフォルトの名無しさん
2006/01/13(金) 16:54:54OS :CentOS4.2
CPU:AMD Duron 1GHz
MEM:256MB
■テスト結果1
Benchmark: timing 10000 iterations of CGI, CGI::Lite...
CGI: 9 wallclock secs ( 9.18 usr + 0.00 sys = 9.18 CPU) @ 1089.32/s (n=10000)
CGI::Lite: 6 wallclock secs ( 5.94 usr + 0.00 sys = 5.94 CPU) @ 1683.50/s (n=10000)
■テスト結果2
Benchmark: timing 10000 iterations of CGI, CGI::Lite...
CGI: 3 wallclock secs ( 3.18 usr + 0.01 sys = 3.19 CPU) @ 3134.80/s (n=10000)
CGI::Lite: 1 wallclock secs ( 0.66 usr + 0.00 sys = 0.66 CPU) @ 15151.52/s (n=10000)
0606デフォルトの名無しさん
2006/01/13(金) 16:55:510607デフォルトの名無しさん
2006/01/13(金) 16:57:200608デフォルトの名無しさん
2006/01/13(金) 16:58:300609デフォルトの名無しさん
2006/01/13(金) 17:03:280610デフォルトの名無しさん
2006/01/13(金) 17:07:28>MEM:256MB
高スペック杉
0611デフォルトの名無しさん
2006/01/13(金) 17:14:39use される時や new() の中でやってる処理の内容が全然違うから
そんなの比較しても何の意味も無いよ。
0612デフォルトの名無しさん
2006/01/13(金) 17:18:410613デフォルトの名無しさん
2006/01/13(金) 17:24:58($u, $s) = times();
print $u + $s, "\n";
これで十分なベンチだろ
ちなみに俺の環境(Cel2.4G + 512MB ActivePerl5.8 WinXP)だと
0.14〜0.155で安定しとる
0614デフォルトの名無しさん
2006/01/13(金) 18:21:53塵も積もればはわかるが事実上デフォルトなモジュールなんで
なるべく使うようにしてる
multipartなんかの処理も論理的に書かれてるし。
0615デフォルトの名無しさん
2006/01/13(金) 18:24:07./abc.pl mode=preview&name=taro
でフォームと同様に値を取れるのでデバッグ時にも便利。
0616デフォルトの名無しさん
2006/01/13(金) 18:39:08他モジュールでCGI.pmへの依存度が高いのはなんだかなとは思う
それこそCGI::Applicationなんかquery、header、cookie位なんだからリファクタして欲しい(他人任せ)
0618デフォルトの名無しさん
2006/01/13(金) 22:17:03それは敢えてそうしてるんだと思うよ。
0619デフォルトの名無しさん
2006/01/13(金) 22:35:31とほほのコピペともなれば尚更無意味
あっ、でも遊びで書いてる人はいいのかな
0620デフォルトの名無しさん
2006/01/13(金) 22:37:17それのどこが高スペックなんだ・・・
今時ノートPCでもそれ以上あるし、サーバ用途ならむしろ
低スペックだっつーの
0621デフォルトの名無しさん
2006/01/13(金) 22:43:460622523
2006/01/13(金) 23:33:37「CGI.pm を使う」というだけで、実際にCGI.pmを使ったコードを
書いたのは 結局 >580さんだけですね。
この >580 のコードには
>574 さんの指摘した「Content-Lengthの最大値が無いのでメモリ食い潰し」
>575 さんの指摘した「readのエラーチェック」
>578 さんの指摘した「フォームの値はデコードしてるのに名前はデコードしないの」
というのは対応済みなのでしょうか?
>585 「そしてより少ない人からしか検証されていないコードを良しとするのですか?」
google で検索した結果
とほほ CGI の検索結果のうち 日本語のページ 約 338,000 件
CGI.pm の検索結果のうち 日本語のページ 約 32,000 件
一桁以上違いますね。
「知名度は質と比例しない」と言われてしまえばそれまでですけど。
0623523
2006/01/13(金) 23:34:09以前は「勉強しろ」「何年か使い続ければわかる」「それぐらいもわからないのか」
と言った抽象的な精神論みたいなコトばっかり言われて、どこが悪いのか、
さっぱりわかりませんでした。
どこが悪いかも指摘せずに、そんな言い方をされても、簡単には納得できないのは
普通だと思います。
間違っているかもしれませんが、自分の理解としては、
とほほさんのやり方は「最悪」と言うよりも......不完全?...というか、足りない?..
...というか漏れがある?....みたいな雰囲気なんですね。
でも、なんで有名サイトはCGI.pmを使っってないんでしょう?
とほほさんとか KENT とか、みんなCGI.pm を使ってません。
0624デフォルトの名無しさん
2006/01/13(金) 23:40:17以前より衰えたとはいえ、主流はまだまだとほほ系だよ。
0625デフォルトの名無しさん
2006/01/13(金) 23:41:00敢えて 5.005 をひきずったコードを参考にすることはないっしょ。
5年前なら「とりあえず KENT やとほほのコードを見れ」で良かったかも知れんけど。
0626デフォルトの名無しさん
2006/01/13(金) 23:43:32>でも、なんで有名サイトはCGI.pmを使っってないんでしょう?
>とほほさんとか KENT とか、みんなCGI.pm を使ってません。
なんであんなサイトがなぜ有名なのか、こっちが聞きたい。
0627デフォルトの名無しさん
2006/01/13(金) 23:44:49CGI.pmがデフォで置かれてないサーバもあるし、みんながそうしているから。
今はどうなっているか知らないけどURI unescapeもなぜか効率の悪くて汚いコードが驚くほど出回ってた。
CGI界の不思議。
0628520
2006/01/13(金) 23:45:51cygwinのshellで実行しているので、それなないです。
>522 よくエラーメッセージを読んで解決しました。
open passwd, "../../etc/passwd"#<-----------------相対パス
or die "How did you get logged in ? ($!)";
while (<passwd>) {
chomp;
if (/^Administrator/) {
print "eureka!";
}
}
相対パスじゃないとダメみたいです。
絶対パスはなんでダメなんでしょう。
これはcygwinのperlの仕様なんでしょうか?
スレ違いならごめんなさい。
0629デフォルトの名無しさん
2006/01/14(土) 00:19:57>cygwinのshellで実行しているので、それなないです。
perl -v で確認したのか?
0630デフォルトの名無しさん
2006/01/14(土) 00:28:00どういうサイトのほうが有名になるべきなのか教えていただけますでしょうか?
0631デフォルトの名無しさん
2006/01/14(土) 01:09:51ずっととほほのコード使ってればいいと思うよ
どうせ中学生の趣味プログラミングだろうし
その昔、BASICのGOTOプログラミングに夢中になった
子供たちと同じだと思えば実に微笑ましい
0632580
2006/01/14(土) 01:12:01基本的に貴方の示したコードを 1:1 に直訳しただけですからね.
CONTENT_LENGTH -> $CGI::POST_MAX=1024; # 1024 バイトに制限
read のエラーチェック -> 十分ではないですが,標準でされてます.
デコード -> CGI::Util::uscape() 使ってください
正直とほほとか KENT とかは一瞥しただけでコメントしかねますが,
かわりにオススメの Perl 入門を…
1. Learning Perl(O'reilly 入門 Perl)
Windows ユーザーなら Win32 のほうを.2. 以降は結構高度なので,まずこれを飽きるまで読むといいですよ.
2. Programming Perl(邦訳:プログラミング言語 Perl )
3. Advanced Perl (邦訳:実用 Perl プログラミング)
4. Object Oriented Perl (邦訳:オブジェクト指向 Perl マスターコース)
今は Perl Best Practice を読んでます.これはすごくイイ.
0633580
2006/01/14(土) 01:12:550634デフォルトの名無しさん
2006/01/14(土) 01:17:17なんで"日本語のページ"?
0635デフォルトの名無しさん
2006/01/14(土) 01:20:000636デフォルトの名無しさん
2006/01/14(土) 01:22:43困るような重要なWebプログラムは、そもそもPerl+CGIで
書かれないから。例外はいくつもあるけどね。MovebleTypeは
Perlだっけ。
だから、PerlのCGIプログラムを探すと必然的にどうでもいい
コードばかりザックザック出てくるわけですw
ハカーに攻撃されても困らないからいい! ちょっと負荷が
掛かったらポシャルくらいは別に気にしない! プログラムの
メンテナンスなんて不要! バグなんて知るか! そういう
場合はとほほ式のプログラムを作るといいでしょう。
あ、皮肉じゃあ無いですよ。適材適所ってことです。
0637デフォルトの名無しさん
2006/01/14(土) 01:23:350638デフォルトの名無しさん
2006/01/14(土) 01:28:290639デフォルトの名無しさん
2006/01/14(土) 01:29:001年くらいで使わなくなる程度の案件なら
冗長(というかいい加減に)書くこともあるし
時と場合だよねぇ
0640デフォルトの名無しさん
2006/01/14(土) 03:42:33> 以前は「勉強しろ」「何年か使い続ければわかる」「それぐらいもわからないのか」
> と言った抽象的な精神論みたいなコトばっかり言われて、どこが悪いのか、
> さっぱりわかりませんでした。
知りたい側が成長しなきゃ理解できないことのほうが世の中多いんだよ。
「今の自分がどんなに未熟でも、説明のほうがちゃんとしていればどんな物事も理解できるはず」
っていう間違った信念持ってない?
0641デフォルトの名無しさん
2006/01/14(土) 04:53:51これでどういう成長を期待してるんだかw
0642デフォルトの名無しさん
2006/01/14(土) 05:08:59知らせる側がきちんと説明しないと理解してもらえないことの方が世の中多いんだよ。
「説明がどんなに酷くても、自分が正しければ相手は理解するはず」
っていう間違った信念持ってない?
たいていの場合、どんなに正しくても、権限を持っているお偉いさんたちに、わかりやすく説明できないと、
予算が取れないのですよ。
逆に、どんなに間違っていても、わかりやすく説明して、納得してもらえると、あっさりハンコもらえる。
君も大きくなって、苦労したららわかると思うよ。
0643デフォルトの名無しさん
2006/01/14(土) 05:37:17> 以前は「勉強しろ」「何年か使い続ければわかる」「それぐらいもわからないのか」
> と言った抽象的な精神論みたいなコトばっかり言われて、どこが悪いのか、
これで伸びる奴も居れば、辞める奴もいる。
まあ発奮させるにしても下手な煽り方ではあるな。
0644520
2006/01/14(土) 05:40:07申し訳ありません、嘘ついていました。
perl -vで確認したところ、
This is perl, v5.8.6 built for MSWin32-x86-multi-thread
(with 3 registered patches, see perl -V for more detail)
Copyright 1987-2004, Larry Wall
Binary build 811 provided by ActiveState Corp. http://www.ActiveState.com
ActiveState is a division of Sophos.
Built Dec 13 2004 09:52:01
略)
Active State社のものでした。
さらに、パスは
/cygdrive/c/Perl/bin/perlでした。
私は、cygwinのperlでなく、Active〜のを使っていたようです。
それが原因か調査してみます。
0646640
2006/01/14(土) 07:14:32といっても仕方ないんだよな。
学習者の理解度より数段階先の話や、経験から思い知ったことへの対策の重要性を、
「現時点の学習者」に技術面で理解させ、納得させるのは至難だもん。
その辺は学習者にコツコツとステップアップしてもらうしかない。
ちなみに君のすぐ上に、主人公もゴールもまったく異なる話を始めて俺に噛み付いてる人が
いるんだけど、この人のラスト一行って、ものを理解するための必要事項として
「経験を積む」ことを挙げるという、俺の主張とまったく同じ内容になってるんだよね。
一体何に噛み付きたかったんだろw
0647523
2006/01/14(土) 08:24:49とほほ方式はココがダメ!と指摘されているのに、CGI.pm方式で書いても、
同じ問題が残っているように感じたので質問させてもらいました。
・CGI.pmで書いても書き方によってはとほほ方式で指摘された問題が残る場合がある。
・ただし、その問題解決のための関数は既に用意されている。
ということですね。
オススメの Perl 入門まで教えていただき、ありがとうございます。
(邦訳って...なにか、英語の原書を薦められてるような気も....)
週末、O'reilly 入門 Perl を買ってきます。
これまでの意見で一番参考になりました。ありがとうございました。
0648523
2006/01/14(土) 08:28:08成長しないと理解できないことが多いことは痛いほど承知してます。
ただ、2chで全く理由を示さないまま否定されても、
単なる煽りなのか、本当に問題があるのか判断できないのです。
たとえば、2chで
「Perl はダメだ。 Rakuda のほうがいい。理由? そんなの勉強すればわかる」
と言われて、Perlをやめて Rakuda を勉強する人は少ないと思うのです。
実際、まだみなさんの説明が完全に理解出来ているとは言えません。
でも、568 以降の書込はきちんと悪い理由を示してもらっているので、
煽りではなさそうだということがわかったし、なんとなくCGI.pmを使った
ほうが良さそうだとも思えるようになりました。
これからCGI.pmの使い方とか勉強していこうと思います。
いつか、理解できるようになったら、とほほ方式を頭ごなしに否定するのでなく、
「この点がこんな風に悪いんだよ」と説明できるようになりたいです。
スレ違いの上、チラシの裏ですみませんでした。
0649デフォルトの名無しさん
2006/01/14(土) 09:11:07まったりいこうよまったり
0650デフォルトの名無しさん
2006/01/14(土) 09:47:29以後この話題続けた奴は荒らし決定な
0651デフォルトの名無しさん
2006/01/14(土) 10:31:54> 単なる煽りなのか、本当に問題があるのか判断できないのです。
嘘を嘘と(ry
0652デフォルトの名無しさん
2006/01/14(土) 10:44:59勉強しようとするなよw
0654デフォルトの名無しさん
2006/01/14(土) 11:12:50末期だな
0655デフォルトの名無しさん
2006/01/14(土) 11:20:00良い流れも悪い流れもアッサリ死ぬのが2ch
0656デフォルトの名無しさん
2006/01/14(土) 14:51:22,′ i′ ヽ| l
l l __ __ | l
| | ィ´:::}' {:::::::l\ | |
| ,|/弋ン ,. 弋_ソ l |. |
|:.:.{ノ }⌒{ } -|.:.:. . .:. . l
|:.:.ト---‐′ ヽ、_____,ノ |:.:.:.:.:.:.:.:.:.:.:.:.l
. |:.:.', |:.:.:.:.:.:.:.:.:.:.:./
. |:.l:.\ ゚ |:.:.:.:.:.:.:.:.:.:./
l∧,ハ/')、 _,.|:.;.:.:.:.:.;.:.:./
′ / /__ `7 _┬ _|Vj/∨∨ル′
/ ´ -┤__ノ  ̄ ̄ \_
r| _┤: l:{ー ^ー ^ァ' ̄: :\
0657デフォルトの名無しさん
2006/01/14(土) 17:56:50なら、それが原因だな。
とりあえず、cygwin perlで実行した結果を得たいだけなら
$ /usr/bin/perl 〜.pl
として明示的にcygwin perlを起動すれば良かろう。
もっとも、Cygwinのシェル内で実行したときには、cygwin perlが起動するように
pathを設定し直した方が良いと思うが。
0658デフォルトの名無しさん
2006/01/14(土) 18:05:14cpanにあるモジュールは再配布しても良いですか?
0659デフォルトの名無しさん
2006/01/14(土) 18:12:09CPAN で配布されているか否かは関係無い。
それぞれのモジュールが採るライセンスに準じる。
http://search.cpan.org/~smylers/CGI-Lite-2.02/Lite.pm#COPYRIGHT_INFORMATION
0660デフォルトの名無しさん
2006/01/14(土) 18:19:09行方不明とのことなのでいいんじゃないでしょうか。
0661デフォルトの名無しさん
2006/01/14(土) 18:22:18どのような方法があるのでしょうか?
0662デフォルトの名無しさん
2006/01/14(土) 18:29:04$a = <<UNKO;
・・・・・・
UNKO
と
$a = <<UNKO
・・・・・
UNKO
;
って何か違いがありますか?
0663デフォルトの名無しさん
2006/01/14(土) 19:06:26ありがとうございます。
勉強になりました
0664ヽ(´ー`)ノ ◆.ogCuANUcE
2006/01/14(土) 19:10:49ライセンスあるよ。>>659 のリンク先に書いてある。
>>661
呼び出して何したいかによる。
exec*、system、libperl、お好きなのをどうぞ。
0665661
2006/01/14(土) 19:50:40CプログラムからPerlプログラムを利用して得られた結果(文字列)を
Cプログラムで受け取りたいのですが、
このような場合にはどの方法が良いでしょうか?
0666ヽ(´ー`)ノ ◆.ogCuANUcE
2006/01/14(土) 20:57:37受け取るだけ(対話的な Perl スクリプトじゃない)なら、popen() が簡単。
凝った事をしたいなら exec* を。
0667デフォルトの名無しさん
2006/01/15(日) 01:07:33perlに関しては、ver.4の頃の知識止まりで、最近の事を良く知らんのですが、
モダンなperlをサクッとエレガントに解説してくれるようなお勧め参考書ってありますか?
cgiやら正規表現の初歩やら、スクリプトやOOPの何たるかをダラダラ書いてるような
本はNGってことで。
0668デフォルトの名無しさん
2006/01/15(日) 01:09:560669デフォルトの名無しさん
2006/01/15(日) 01:12:510670デフォルトの名無しさん
2006/01/15(日) 02:00:34こう書けば分かりやすい?
$text = join "\n"x3,
<<_P_
1段落目
_P_
,
<<_P_
2段落目
_P_
;
$text = join "\n"x3, <<_P_, <<_P_;
1段落目
_P_
2段落目
_P_
違いと言えば、通常ありえないけど開始識別子の直後に複数行にわたるコードを書きたいときはセミコロンを後ろに持っていくしかないね
0671デフォルトの名無しさん
2006/01/15(日) 02:10:16CTBCPPの延長で、Perl5のチュートリアルがあればなぁ・・・。
0672デフォルトの名無しさん
2006/01/15(日) 02:45:59上の方で誰かも書いてたけど、全くの初心でないなら
SMART
ttp://www.rfs.jp/sb/perl/index.html
を必要なところから読めばいいかなと。
5.8からI/OやThread、文字コードの扱いなどかなり変わったので、
今からなら5.005や5.6はブッチして5.8に入るのが良策かと。
あとは>>3あたり
0673デフォルトの名無しさん
2006/01/15(日) 04:22:57SMART は駱駝本 2nd の劣化コピーに作者の偏った主張や
嘘を紛れ込ませたものという印象が強くて人には勧め難いな。
一見良サイトな分、余計にね。
0674デフォルトの名無しさん
2006/01/15(日) 04:30:150675デフォルトの名無しさん
2006/01/15(日) 04:34:410676デフォルトの名無しさん
2006/01/15(日) 05:04:360677デフォルトの名無しさん
2006/01/15(日) 05:32:05「ズブの素人が取っかかりに読む」より上のものをお望み
なら、素直に駱駝本 or perldoc 、が正解だと思うよ。
変に噛み砕かれた説明で誤解して覚えるより、ほんの少し
苦労して正しく覚えた方が結局近道だしね。読み易い一次
情報なんだからそれ以上は望めないでしょ。
0678デフォルトの名無しさん
2006/01/15(日) 08:38:460679デフォルトの名無しさん
2006/01/15(日) 09:17:18うん。実際のところ最近の流れで初めてCGI.pmを取っ掛かりに標準モジュールで
PurePerlなヤツ幾つか読んだけどスゲー勉強になった。星の数あるCPANから標準
になったものはPerlコーディングのお手本でもあるね。
やはりソースに勝る教科書はないな。
0680644
2006/01/15(日) 12:56:47できました。
明示的にcygwinのperlを指定したら、
絶対パスで起動できました。
pathも切り替えます。
大変勉強になりました。
ありがとうございます。
0681デフォルトの名無しさん
2006/01/16(月) 02:02:17そういう仕組みがあるんですね。知りませんでした
どうもありがとうございます
0682デフォルトの名無しさん
2006/01/16(月) 23:32:24以下のタグを結合したい。
(1)<M>hogeM</M><X>hogeX</X> → <X>hogeMhogeX</X>
(2)<X>hogeX</X><M>hogeM</M> → <X>hogeXhogeM</X>
(3)<M>hogeM</M><X>hogeX</X><M>hogeM</M> → <X>hogeMhogeXhogeM</X>
※<M>hogeM</M><X>hogeX</X><M>hogeM</M><X>hogeX</X> は結合しない。
<例>
※以下は一行で、\ は連結の意味です。
......hoge.......<M>hogeM</M><X>hogeX</X>.....\
........hoge......<X>hogeX</X><M>hogeM</M>.....\
.....hoge.........<M>hogeM</M><X>hogeX</X><M>hogeM</M>...\
.........<X>hogeX</X>................<M>hogeM</M>..\
..<M>hogeM</M><X>hogeX</X><M>hogeM</M><X>hogeM</X>
↓
......hoge.......<X>hogeMhogeX</X>.......\
......hoge......<X>hogeXhogeM</X>..........hoge....\
.....<X>hogeMhogeXhogeM</X>............<X>hogeX</X>...\
.............<M>hogeM</M>...\
.<M>hogeM</M><X>hogeX</X><M>hogeM</M><X>hogeM</X>
正規表現でも、何でもOKなのでお願いします。
0683デフォルトの名無しさん
2006/01/16(月) 23:38:50Perlでリクに答えるスクリプトを作るスレ
http://pc8.2ch.net/test/read.cgi/tech/1086143976/
0684デフォルトの名無しさん
2006/01/16(月) 23:41:11おおー
そんなすれが〜
ありがとん。
0685デフォルトの名無しさん
2006/01/17(火) 20:08:16MorningMusume.pmのソースを読むべし。
0686デフォルトの名無しさん
2006/01/17(火) 23:06:48別に特にいいと思われる所は無かった
smartので十分
0687デフォルトの名無しさん
2006/01/18(水) 02:50:590688デフォルトの名無しさん
2006/01/18(水) 03:15:220689デフォルトの名無しさん
2006/01/18(水) 03:16:07さらっと斜め読みしただけだから知らんけどね
0690デフォルトの名無しさん
2006/01/18(水) 03:20:580691デフォルトの名無しさん
2006/01/18(水) 03:40:16やっぱ>>686に変わりないわ
付け足すとしたら
ttp://www.pure.ne.jp/~learner/program/Perl_oo.html
これぐらいかな
0692デフォルトの名無しさん
2006/01/18(水) 03:47:45別にぃ・・って感じ・・
0693デフォルトの名無しさん
2006/01/18(水) 03:48:20失礼失礼^^;
0694デフォルトの名無しさん
2006/01/18(水) 04:01:43勘弁してくれ
0695デフォルトの名無しさん
2006/01/18(水) 04:24:54(Shift_JIS)
$file = 'D:\picture\ニーソックス.jpg';
これを
D picture ニーソックス.jpg
に分割したいんですが
split(/[\\\/:]/, $buf);
こうすると ニーソックス の "ソ" の2byte目が "\" である事から
D picture ニー・ ックス.jpg
と、中途半端な所で切れてしまいます。
そこで
split(/[^\x81-\x9f\xe0-\xef][\\\/:]/, $buf);
と、Shift_JISの特性を考慮した所
\pictur ニーソックス.jpg
となってしまいます。
何かスマートな書き方はないでしょうか。
0696695
2006/01/18(水) 04:37:18encodingプラグマは使わない方向でお願いします
0697デフォルトの名無しさん
2006/01/18(水) 06:23:06@list = $file =~ /((?:sjis|asciiから\と:を抜いた正規表現)+)/g
0698デフォルトの名無しさん
2006/01/18(水) 09:36:47ループ毎に行うのしかないのでしょうか?
0699デフォルトの名無しさん
2006/01/18(水) 10:30:02@hoge
に1Gのデータが入ってるとして
@hoge = ();
と初期化したらメモリは開放されるのでしょうか?
0700699
2006/01/18(水) 10:31:20失礼しました。。。
0701デフォルトの名無しさん
2006/01/18(水) 10:44:080702デフォルトの名無しさん
2006/01/18(水) 11:52:54結局はループだが一行でどうだ
$_ = Jcode->new($_)->euc foreach @hoge;
mapを使っても書けるがこっちはメモリ効率が悪いからお勧めしない
@hoge = map { Jcode->new($_)->euc } @hoge;
0703デフォルトの名無しさん
2006/01/18(水) 11:59:03Perlは何やってもメモリ解放なんぞせんよ。
undefしても内部のメモリプールに返すだけ。
@hoge = (); はそれすらしない。
メモリ消費が心配だったら、その部分だけforkすればいい。
0704699
2006/01/18(水) 11:59:11だそうです。他のサイトも見たけど
undef @hoge;
は開放できて
@hoge = ();
は開放できないみたい。
====
えと、すみません。 今度は調べたのですが分からないので
また新しい質問させてください。
# a.pl
$hoge = "a";1;
# b.pl
require "a.pl";print $hoge."\n";exit 0;
で以下のように実行すると
$ perl -w b.pl
Name "main::hoge" used only once: possible typo at b.pl line 3.
a
$
と出てしまいます。この警告を消すことは出来ないのでしょうか?
よろしくお願いします。
0705デフォルトの名無しさん
2006/01/18(水) 12:03:49# b.pl
BEGIN { require "a.pl"; } print $hoge."\n";exit 0;
でもこのスレ的にはmy宣言してstrictなソースを書いたほうがいいかと
0707689
2006/01/18(水) 13:42:30ありがとうございます。こうしてみました。
my $jconv = new Jcode;
$_ = $jconv->set($_, 'sjis' )->euc foreach @hoge;
0708デフォルトの名無しさん
2006/01/18(水) 13:43:410709デフォルトの名無しさん
2006/01/18(水) 14:22:59UTF-8 -> ISO_2022_JP へ 文字コードを変換しているのですが、
全角チルダ(〜)が文字化けし、? に置き換わってしまいます。
Jcode を使うと正常に変換されているようなのですが、
今回勉強を兼ねて Perl5.8標準のEncodeを使用したく思っております。
何か解決策などありますでしょうか・・・?
0710デフォルトの名無しさん
2006/01/18(水) 14:26:54それに関する質問は、もう散々既出。
0711デフォルトの名無しさん
2006/01/18(水) 15:33:06>>Perl は、ガーベジコレクションの機能を備えています。
>だそうです。
そうそう。そのおかげでスクリプトを実行し終えると
使ったメモリはきれいさっぱり解放してくれるわけだよ。
実行中には解放なんてしないんだって。
0712デフォルトの名無しさん
2006/01/18(水) 15:38:58適宜解放するってのがGCだべさ
終了時に全解放されるのは当たり前
0713デフォルトの名無しさん
2006/01/18(水) 15:42:02後Encodeモジュールが標準搭載されたのもお願いします
0714デフォルトの名無しさん
2006/01/18(水) 15:45:195.8から。
0715デフォルトの名無しさん
2006/01/18(水) 15:46:43どうもありがとうございます。
0716709
2006/01/18(水) 16:04:46こんな感じで対応しておきました。
s/\x{ff5e}/\x{301c}/g;
0717デフォルトの名無しさん
2006/01/18(水) 16:58:52なんかすごい釣りだな。
0718デフォルトの名無しさん
2006/01/18(水) 17:22:29open関数はパイプや標準出力を開く事ができますが
sysopen関数はファイルだけなのでしょうか?
宜しくお願いします
0719デフォルトの名無しさん
2006/01/18(水) 18:42:27まぁ、黒豹でも読んでくれ
0720デフォルトの名無しさん
2006/01/18(水) 19:12:25> undefしても内部のメモリプールに返すだけ。
> @hoge = (); はそれすらしない。
@hogeの各エントリも返さない?
0721デフォルトの名無しさん
2006/01/18(水) 19:21:58なることがあるので undef してるけど、ps 見る限り解放はされて
ないような・・・
PerlのGCはメモリプールに返すためのものなのでは?
0722デフォルトの名無しさん
2006/01/18(水) 19:35:03俺もそんなことあった気が。
誰か真相を教えてくれ。
0723デフォルトの名無しさん
2006/01/18(水) 19:42:12気になったので、軽く確認してみた。ActivePerl 5.8.6
方法は、\@hogeの文字列値を使ってunpackのPで変数内を覗き見
@hoge=() では $hoge[0..$#hoge] が未アロケート状態に,
undef @hoge では加えてxav_array(配列管理用の領域)も未アロケート状態になった。
また、
・各要素($hoge[0..$#hoge])の文字列領域
・アレイ構造体のxav_array(中身はポインタの配列)
は開放時にメモリもfree(OSへのメモリ返却はライブラリに依存)されたが、
・各スカラーヘッダ構造体
・各スカラー構造体
はfreeされなかった。
xav_arrayの変化は、例えば
$#hoge=63; # xav_fill=63,xav_max=63
$#hoge=31; # xav_fill=31,xav_max=63;
@hoge=(); # xav_fill=-1,xav_max=63
undef @hoge; # xav_array=NULL,xav_fill=-1,xav_max=-1
といった感じ。
0724デフォルトの名無しさん
2006/01/18(水) 22:53:06検証乙。Devel::Peek使うと楽だったんじゃないか?
0726デフォルトの名無しさん
2006/01/19(木) 13:41:29・undefしとけばfreeは呼ばれる。
・freeで開放されるかどうかはOSに寄る。
・()での初期化はfreeがよばれないので可能性すらない。
っていうことですか?
0727デフォルトの名無しさん
2006/01/19(木) 19:32:400728デフォルトの名無しさん
2006/01/19(木) 19:43:51オブジェクト指向・デザインパターンバリバリ使ってる香具師いる?
0729デフォルトの名無しさん
2006/01/19(木) 20:16:09sub mem_check {print "$_[0],",`ps auxw|grep mem.pl|grep -v grep`;}
$a = 'x' x 1000000;mem_check('scalar1');
$a = '';mem_check('scalar2');
undef $a;mem_check('scalar3');
$#a = 1000000;mem_check('array1');
@a=();mem_check('array2');
undef @a;mem_check('array3');
$a{a} = 'x' x 1000000;$a{b} = 'x' x 1000000;mem_check('hash1');
delete $a{a};mem_check('hash2');
undef %a;mem_check('hash3');
sub test1 {my @b;$#b=1000000;}
test1();mem_check('test1');
sub test2 {my @b;$#b=1000000;undef @b}
test2();mem_check('test2');
0730デフォルトの名無しさん
2006/01/19(木) 20:17:56scalar2,***** 2693 0.0 1.3 9896 3336 pts/1 S+ 13:25 0:00 perl mem.pl
scalar3,***** 2693 0.0 0.9 8916 2360 pts/1 S+ 13:25 0:00 perl mem.pl
array1,***** 2693 0.0 2.5 12824 6276 pts/1 S+ 13:25 0:00 perl mem.pl
array2,***** 2693 0.0 2.5 12824 6284 pts/1 S+ 13:25 0:00 perl mem.pl
array3,***** 2693 0.0 0.9 8916 2376 pts/1 S+ 13:25 0:00 perl mem.pl
hash1,***** 2693 0.0 2.5 12836 6296 pts/1 S+ 13:25 0:00 perl mem.pl
hash2,***** 2693 0.0 2.1 11856 5320 pts/1 S+ 13:25 0:00 perl mem.pl
hash3,***** 2693 0.0 1.7 10876 4340 pts/1 S+ 13:25 0:00 perl mem.pl
centOS 4.2上のperl 5.8.5でためしてみたのですが
VSZもRSSもundefをしたところでへってるように見えます。
0731デフォルトの名無しさん
2006/01/19(木) 23:28:34perlで認証付きサイトを構築しようと考えています。
まずlogin画面があり、認証後サイトを見れるという感じなのですが
認証後のサイトURL直入力などを防止する為にはどのような対応が良いのでしょうか?
idとパスワードを画面遷移ごとにpostデータとして送るというのはなんか
パスワードがソース内に表記されているという事で嫌な感じがしますが
一般的なのでしょうか?
最近のセキュリティソフトではリファラを出さないそうなのでこれも使用しない
方向で考えています。
0732デフォルトの名無しさん
2006/01/19(木) 23:35:29CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
(WEBプログラミング板 http://pc8.2ch.net/php/ )
0733デフォルトの名無しさん
2006/01/20(金) 00:07:27という文がうまくいかないので、
print "1番目は";
print [split(/,/, $aaa)]->[0];
print "\n";
としているのですが、何か他に良い書き方があるのでしょうか。
おねがいします。
0734デフォルトの名無しさん
2006/01/20(金) 00:27:23カンマでいいじゃないか
print '1番目は', (split(/,/, $aaa))[0], "\n";
先日思いついたBad Tips
print "1番目は${\do{(split(/,/, $aaa))[0]}}\n";
print "1番目は${proc((split(/,/, $aaa))[0])}\n"; sub proc {\shift}
0735デフォルトの名無しさん
2006/01/20(金) 08:23:440736デフォルトの名無しさん
2006/01/20(金) 08:39:36コードをいかに短くするかという点においては凄いと思う。
だけど、サーバのスクリプトには使いたくないな。
短さを求めるこれらの美学には、エラー検証・セキュリティ対策が抜け落ちてるから。
そんなわけで、C/Java風のコードになってしまう。お前らはそんなことない?
0737デフォルトの名無しさん
2006/01/20(金) 09:04:33やはりperlfaq4とperlrefに同様の方法が載ってたか。すっかり見落としてた…
>>736
書き捨ては書き捨て、サーバの管理スクリプトは管理スクリプトでしょ
漏れはそういうのは結構エラー処理して書くよ。
しかし、それでもCやJavaっぽくなることはないと思うが・・・
短く書くことだけがPerlらしさではないと思うがどうかな
0738デフォルトの名無しさん
2006/01/20(金) 09:36:25737の言うように短く簡潔なコードを書くこととエラー/例外処理を丹念に行うことは相反しない。
ただperlerは短く書くことそのものが目的になってしまいがちなのも事実。
0739デフォルトの名無しさん
2006/01/20(金) 09:42:270740デフォルトの名無しさん
2006/01/20(金) 09:45:34コードを短くした上で結局コメントつけて解説するくらいなら、基本構文で書く
0741デフォルトの名無しさん
2006/01/20(金) 09:48:48Javaはエラー処理せざつを得ないから当たり前
0742デフォルトの名無しさん
2006/01/20(金) 10:22:51なんでだろ?
0743デフォルトの名無しさん
2006/01/20(金) 10:51:050744デフォルトの名無しさん
2006/01/20(金) 11:03:40俺C++でも結構三項演算子使う。
0745デフォルトの名無しさん
2006/01/20(金) 12:26:10ヘボだからでしょ。
0746デフォルトの名無しさん
2006/01/20(金) 12:49:520747デフォルトの名無しさん
2006/01/20(金) 12:59:15> お前らって絶対難癖付けないと気がすまないタイプだよな
頼もしいねえ。
0748デフォルトの名無しさん
2006/01/20(金) 13:04:04>>746
0749デフォルトの名無しさん
2006/01/20(金) 13:04:350750デフォルトの名無しさん
2006/01/20(金) 13:12:41ttp://www.google.co.jp/search?q=Cookie+%E6%9C%80%E5%A4%A7
0751デフォルトの名無しさん
2006/01/20(金) 13:15:370752デフォルトの名無しさん
2006/01/20(金) 13:18:39http://www.au.kddi.com/ezfactory/
http://developers.vodafone.jp/dp/
http://www.nttdocomo.co.jp/p_s/imode/make/index.html
http://www.willcom-inc.com/ja/service/contents_service/club_air_edge/for_phone/homepage/index.html
まぁここら辺見て容量確認しなはれ
0753デフォルトの名無しさん
2006/01/20(金) 13:20:070754733
2006/01/20(金) 23:00:45カンマですか、言われてみればピリオドでもいけますね。
気づきませんでした。ありがとうございます。
>>735
@{[[split(/,/, $aaa)]->[0]]}の @{[ ]} あたりがいったいどうなって
いるのか見当もつかないのですが、何を勉強すればよいのでしょうか。
「@[{」でぐぐってみたのですが、何も出ませんでした・・・
キーとなる言葉が御座いましたら御示唆くださいませ。
0755デフォルトの名無しさん
2006/01/20(金) 23:39:02> キーとなる言葉
>>737
> やはりperlfaq4とperlrefに同様の方法が載ってたか。
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq4.html#how_do_i_expand_function_calls_in_a_string
http://www.kt.rim.or.jp/~kbk/perl5.005/perlref.html
0756クロエ
2006/01/21(土) 00:00:14【2】☆・△・■ ユーザーが任意入力した3つの数値を総計
【2】÷【1】を結果として表示
以上の様なCGIをプログラミングしてもらおうと、代行屋さんに見積もりしてもらいました。17000円との事でしたが、普通のお値段でしょうか?カモられていないか心配ですw
0757デフォルトの名無しさん
2006/01/21(土) 00:09:110758デフォルトの名無しさん
2006/01/21(土) 00:10:46一日2.5万円。
半日で1.75万円。
まぁ妥当なとこじゃねーの?
0759デフォルトの名無しさん
2006/01/21(土) 00:20:07>>756のような頭の足りない人間の相手をしなきゃならんし。
0760デフォルトの名無しさん
2006/01/21(土) 00:41:27めちゃくちゃ安いな。
赤字でてるだろ向こうは。
0761デフォルトの名無しさん
2006/01/21(土) 01:18:15地域によっても違うが、かなり安い。(正直、自分だったらこんな仕事受けない)
ただ、こんなところで聞いても何の役にも立たない。
心配なら他の業者に合見積もりをとること。
0762デフォルトの名無しさん
2006/01/21(土) 01:20:360763デフォルトの名無しさん
2006/01/21(土) 01:54:56学生だけど小使稼ぎと勉強がてらにコーディング出来るバイト探そうかな
0764デフォルトの名無しさん
2006/01/21(土) 01:59:39>763 みたいな素人が作るとしたらもっと安くできる。ただし出来は......
0765デフォルトの名無しさん
2006/01/21(土) 02:01:360766デフォルトの名無しさん
2006/01/21(土) 11:07:58それ間違いなくぼったくり。作成時間5分。
my @k = (1..14, '☆', '△', '■');
my ($s1, $s2) = (0) x 2;
for (@k) { print "$_ は? "; (/^\d+$/ ? $s1 : $s2) += <>; }
print join('+', grep /^\d+$/, @k), " = $s1\n";
print join('+', grep !/^\d+$/, @k), " = $s2\n";
print "$s2 / $s1 = ", $s2 / $s1;
0767デフォルトの名無しさん
2006/01/21(土) 11:56:221ページ辺りの相場は10000〜30000円程度、
CGIスクリプトはフルスクラッチで50000円くらい?
0768デフォルトの名無しさん
2006/01/21(土) 12:00:26せんせえ、それCGIになってねえっす。
あ、ちゃくっとuse CGIで技術サイトにあるようなForm部品むき出しのようなの
取って付けても駄目っす。
みっともなくない程度に最低限のデザインもしなきゃクライアントに怒られるっす。
それに加えて、概要設計書、詳細設計書、仕様書、テスト設計書とテスト結果、
それにまつわる数回の打ち合わせ、瑕疵対応まで入れて半人日17,000円で
じゃキツいっす。(この規模だから概要設計書と詳細設計書は仕様書で代用
させてもらうとしても・・・)
どんな小さな、たとえ3行スクリプト作成10秒でもCGI一本\17,000は安いっすよー
俺SOHOで今仕事に困ってますけど、その値段ではCGI作成は受けられないですぅ。
0769デフォルトの名無しさん
2006/01/21(土) 12:07:29そりゃ、こういう仕事やったことないなら、ボッタクリと思うかもしれんけどね。
CGIなんだから、それだけじゃ動かないだろ? フォームのHTMLの方も必要だし。
しかも>>756はどう見ても超ド級初心者なんだから、納品後に質問が来ることも
考えないといけない。「どうやって設置するの?」「FTPって何?」とか。
設置したサーバがメンテナンスに入っただけなのに、「動かない」と言ってくる
ことも考えられる。
(アフターサポート一切無しという契約でも、電話がかかってきて40分ロスするだ
けで、0.1人日くらいは損をする)
さらに納品書・仕様書や、請求書も作らないといけない。
打ち合わせなり納品時なりの交通費も問題だ。
そう考えると、>>761と同意見で俺は17000円では引き受けない。ペイしないもん。
フォームHTMLとセットで最低4-5万円はもらわないと。
0770デフォルトの名無しさん
2006/01/21(土) 12:15:19まあ、実務経験者と趣味でやってる素人の違いということで。
今頃766は顔真っ赤にしてるだろうから、そろそろ勘弁したれw
0771デフォルトの名無しさん
2006/01/21(土) 12:18:520772デフォルトの名無しさん
2006/01/21(土) 12:28:36print $1 if $t=~/(a.*?$)/;
この場合、*? を使用しての最短一致なので abc となると思ったのですが、abcabc となります
なぜでしょうか?
0773デフォルトの名無しさん
2006/01/21(土) 12:30:200774デフォルトの名無しさん
2006/01/21(土) 12:31:380775デフォルトの名無しさん
2006/01/21(土) 12:36:07「欲張りマッチ」でググる
0776デフォルトの名無しさん
2006/01/21(土) 12:52:41初心者が嵌りがちなとこ。よって、あんたはまっとうな初心者。
今後もまじめにやる気があるなら、推奨書を買いなされ。
0777766
2006/01/21(土) 13:51:45よくわからんけど暇な業者が必死っぽいのでこっちに張っておいた。
http://pc8.2ch.net/test/read.cgi/php/1036141603/
0778デフォルトの名無しさん
2006/01/21(土) 14:23:22分かりやすいサンプルでもいいのでお願いします。
0779デフォルトの名無しさん
2006/01/21(土) 14:24:08Google で検索ぐらいしろよ。
0780デフォルトの名無しさん
2006/01/21(土) 14:34:36print OUT '<html>';
close OUT;
0781クロエ
2006/01/21(土) 16:34:45777さんありがとうございます。試してみます。
0782デフォルトの名無しさん
2006/01/21(土) 16:58:05推奨書ってこれ?
http://www.oreilly.co.jp/books/4873111307/toc.html
>>772
最短一致とか最長一致とかいう表現が悪いんだと思うよ。
非欲張りマッチと欲張りマッチって言うとまだマシ。
正規表現エンジンの気持ちになって考える。
1. abcabc に対して /(a.*?$)/ がマッチするか試し、NG なら次
2. bcabc に対して /(a.*?$)/ がマッチするか試す、NG なら次
3. cabc に対して /(a.*?$)/ がマッチするか試す、NG なら次
4. abc に対して /(a.*?$)/ がマッチするか試す、NG なら次
5. bc に対して /(a.*?$)/ がマッチするか試す、NG なら次
6. c に対して /(a.*?$)/ がマッチするか試す、NG なら次
で、1. でいきなり成功しちゃってるから。abcabc になる。
/.*(a.*?$)/ で欲張りマッチの方に余計なもの奪わせるといいんじゃね?
正規表現なんか使わない方が速そうだけど。
0783デフォルトの名無しさん
2006/01/21(土) 18:51:42こうなるとPerlスレとしては小飼さんの様子が
気になるな。
0784デフォルトの名無しさん
2006/01/21(土) 20:11:43ふつーに元気そうですが。
ttp://blog.livedoor.jp/dankogai/
この間もEncodeのバージョン上げてたしねぇ。
0785デフォルトの名無しさん
NGNG0786デフォルトの名無しさん
2006/01/21(土) 21:34:58今パンフレット見てて気づいた。
0787デフォルトの名無しさん
2006/01/21(土) 21:36:170788デフォルトの名無しさん
2006/01/21(土) 21:37:020789デフォルトの名無しさん
2006/01/21(土) 21:58:080790デフォルトの名無しさん
2006/01/21(土) 22:06:460791デフォルトの名無しさん
2006/01/21(土) 22:15:05brainfuckとまではいかないが、言語仕様が明確で簡潔な言語を使用するべきだと思う
0792デフォルトの名無しさん
2006/01/21(土) 22:17:020793デフォルトの名無しさん
2006/01/21(土) 22:18:50あれ? 高度区分は疑似言語しか出ないんじゃなかったっけ?
プログラミング言語自体が出題されるのは第二種(今の"基本")だけだったような
まぁ、はるか昔のことなのでもう忘れたが
0794デフォルトの名無しさん
2006/01/21(土) 22:45:02僕もあまり詳しく無いんですけど、テクカルエンジニア(情報セキュリティ)試験でC++,Java,Perlが使われるみたいです。
巻末にCASL�Uの仕様書とPerlの仕様書が付いてます。
IPA テクカルエンジニア(情報セキュリティ)
http://www.jitec.jp/1_13download/leaflet_200509-ts.pdf
0795デフォルトの名無しさん
2006/01/21(土) 22:47:510796デフォルトの名無しさん
2006/01/21(土) 22:50:220797デフォルトの名無しさん
2006/01/21(土) 23:39:220798デフォルトの名無しさん
2006/01/21(土) 23:40:590799デフォルトの名無しさん
2006/01/21(土) 23:49:03下巻今のうちに買っておこう
0800デフォルトの名無しさん
2006/01/22(日) 00:13:170801デフォルトの名無しさん
2006/01/22(日) 09:14:00use strict;
my $hoge = require './abc.pl';
print $hoge->{a};
------
---abc.pl---
$VAR = { a => 123, b => 456};
------
mod_perlの環境で動かすと2回目以降のアクセスで
Can't use string ("1") as a HASH ref while "strict refs" in use at hoge.pl
が出てしまいます。
これは1回目は$hogeには$VARが代入されるが2回目以降はコンパイル済みなのでrequireが1を
返すためだと思われます。
$INC{abc.pl}を意図的に消せば毎回読み直してくれますが他に良いアイディアはありませんでしょうか?
0802デフォルトの名無しさん
2006/01/22(日) 09:38:09つdo './abc.pl';
ってかrequireの戻り値はエラーが発生したかどうか調べるためのものだから、
そういう風に使うのは避けたほうがいいかと思うが
0803デフォルトの名無しさん
2006/01/22(日) 10:07:22Data::Dumperで出力した値をよくこの手法でデシリアライズしたりしていたのですが
requireだとファイルに文法エラーや存在しなかったりするとエラーになるので
doの方がいいかもしれませんね。エラー出さない方が良いのかは微妙ですけど。
このような目的では本来はData::Serializerを使うべきなんでしょうけどお手軽なので
やめれません-_-;
0804デフォルトの名無しさん
2006/01/22(日) 10:17:040805ヽ(´ー`)ノ ◆.ogCuANUcE
2006/01/22(日) 11:54:170806デフォルトの名無しさん
2006/01/22(日) 12:37:01出題「この処理を実現できるモジュールを、CPANからみつけなさい」 とか
0807デフォルトの名無しさん
2006/01/22(日) 13:37:54ttp://use.perl.org/articles/06/01/21/1733227.shtml
0808デフォルトの名無しさん
2006/01/22(日) 13:47:48わくてか
0809デフォルトの名無しさん
2006/01/22(日) 13:57:380810デフォルトの名無しさん
2006/01/22(日) 14:43:39時にはファイルを手で弄りたいときもあるのです。
セキュリティ・速度よりも何よりも手軽さを優先したい時はDumperが便利!
後で他のシリアライザに変更するのもそれほど手間じゃないし。
0811デフォルトの名無しさん
2006/01/22(日) 21:08:48改善って、どんな希望があるの?
0812デフォルトの名無しさん
2006/01/22(日) 21:34:290813デフォルトの名無しさん
2006/01/23(月) 02:11:22まぢで。おまえどのスレがおもすれー( ^ω^)のかおしえてけろよん
0814デフォルトの名無しさん
2006/01/23(月) 02:13:33#カウントファイルの読み込み
open(IN,"<./count.dat");
$count=<IN>;
close(IN);
++$count;
#カウントファイル書き込み
open(OUT,">./count.dat");
print OUT $count;
close(OUT);
#鯖出力
print<<END;
Content-type:text/html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head><title>アクセスカウンタ</head></title>
<body>
あなたは$count番目の訪問者
</body></html>
END
文法チェックでは通るんだが
[Mon Jan 23 02:07:40 2006] [error] [client 127.0.0.1] malformed header from script. Bad header=<!DOCTYPE HTML PUBLIC "-//W3C/: 3-3.cgi, referer: http://127.0.0.1/tendaysmyself/3-3/
ってエラーが出ます。
0815デフォルトの名無しさん
2006/01/23(月) 02:25:04<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
1行空ける
0816デフォルトの名無しさん
2006/01/23(月) 02:33:24低レベルすぎておもすれー( ^ω^)なのです
0817デフォルトの名無しさん
2006/01/23(月) 03:03:510818デフォルトの名無しさん
2006/01/23(月) 06:53:07ありがつございます。
ず〜っとコレで詰まってました。
助かりました。
0819デフォルトの名無しさん
2006/01/23(月) 07:37:34こういうのはPerlに関する問題じゃないから、次からはCGIの質問はWebProg板行ってくれよ。
>>1
> CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
> CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするので
> WEBプログラミング板に行って聞いたほうが得ですよ。
0820デフォルトの名無しさん
2006/01/23(月) 09:11:17-------
my $val = 10;
my @result = &hoge( $val );
sub hoge{
my $val = shift;
# 2進数に変換し、1がたっている箇所だけ10進数にして返す。
# (例) 10 => (1010) = 2^3 + 2^1 = 8 + 2
# return で (8,2) を Array で返したいです。
}
-------
Perlだとこういう場合どういう風にするもんなんでしょうか?
0821デフォルトの名無しさん
2006/01/23(月) 09:32:04自分が以前に作ったのはこんなん
65536 より小さい数しか扱わないことがわかってたから
for 文での開始数を 16 にしてるけど増やせばまだ大丈夫と思う
sub hoge {
my $val = shift;
my @ret = ();
for (my $i = 16; $i >= 0; $i--) {
my $power = 2 ** $i;
if ( int ($val / $power) != 0) {
$val %= $power;
push (@ret, $power);
}
}
return @ret;
}
もっといい方法あったら教えてください
0822デフォルトの名無しさん
2006/01/23(月) 09:55:47何に使うのか知らないけどそれ遠回りしてる気がするなあ
sub hoge {
my $val = shift;
my @ret = ();
my $flag = 1;
do{
$val & 1 and push @ret, $flag;
$flag <<= 1;
}while( $val >>= 1 );
return reverse @ret;
}
0823デフォルトの名無しさん
2006/01/23(月) 10:10:54pushしてreverseならunshiftでいいんじゃないのだろうか。
0824デフォルトの名無しさん
2006/01/23(月) 10:39:21http://www.nminoru.jp/~nminoru/programming/bitcount.html
0825デフォルトの名無しさん
2006/01/23(月) 10:49:02my $val = shift;
my @retval;
while ($val != 0){
my $ntz = $val&(-$val);
unshift @retval, $ntz;
$val -= $ntz;
}
return @retval;
}
0826デフォルトの名無しさん
2006/01/23(月) 11:22:22負の数はどうするの?
0827デフォルトの名無しさん
2006/01/23(月) 12:29:08my $val = shift;
my $n = 2**32;
map { $n/=2; $_ ? $n : (); } split(//,unpack("B32",pack("N",$val)));
}
0828デフォルトの名無しさん
2006/01/23(月) 13:13:260829デフォルトの名無しさん
2006/01/23(月) 14:10:03%0A 区切りにして一行ずつ読込みたいのですが、
調べたら「$/」に区切り文字入れろって書いてありました。
ただ、これだと入力ストリーム全部が%0A区切り読み込みになってしまうので困ります。
ストリーム個別に読込区切り文字を指定する方法がないでしょうか?
$/='%0A'; #←ストリームを指定したいができない
print $_=<DATA>; # aiueo%0D%0Aを出力
__END__
aiueo%0D%0Akakikukeko%0D%0Asasi(ryaku
0830デフォルトの名無しさん
2006/01/23(月) 14:53:160831デフォルトの名無しさん
2006/01/23(月) 15:34:520832デフォルトの名無しさん
2006/01/23(月) 15:57:200833デフォルトの名無しさん
2006/01/23(月) 16:07:03必要なところで local を使って代入するか、
IO::Handle->input_record_separator() を使うか。
perldoc perlvar に書いてあるサンプルを読めば、普通は思い付くと思うんだが…。
0834デフォルトの名無しさん
2006/01/23(月) 16:13:330835デフォルトの名無しさん
2006/01/23(月) 16:23:260836デフォルトの名無しさん
2006/01/23(月) 16:27:280837デフォルトの名無しさん
2006/01/23(月) 16:28:11変な奴はwebprog行けよw
0838デフォルトの名無しさん
2006/01/23(月) 16:32:20この辺まとめてだな。俺もかよ
0839デフォルトの名無しさん
2006/01/23(月) 16:40:000840デフォルトの名無しさん
2006/01/23(月) 17:22:24___
/孕/二 パラリラパラリラ
。 / ̄ − 。 − 。 。 。 − __
o孕o三 @孕@三 o孕孕孕o三 /孕/ 。 −
。 − / ̄ ̄ o孕o三
o孕o三 _/ ̄ ̄\_//=3
___ 。 − ━┷-○ー○ー┘三
/孕/二 o孕o三 。 −
。 / ̄ − 。 − @�u@三 。 −
o孕o三 o孕o三 ワーワー @孕@三
0841デフォルトの名無しさん
2006/01/23(月) 17:23:260842デフォルトの名無しさん
2006/01/23(月) 18:32:18あとプロピアもバーの近くにあるからラリーも呼んで。
0843831
2006/01/23(月) 18:50:180845デフォルトの名無しさん
2006/01/23(月) 22:02:260846829
2006/01/24(火) 01:50:42キタコレ!調べてみる!サンクスおにいさん!
>perldoc perlvar に書いてあるサンプルを読めば、普通は思い付くと思うんだが…。
坊やだからさ。サンクスおにいさん!
って、あんだよ!input_record_separatorのソース見たらまんま >>830 じゃねーか
スレッドとかmod_perlとかに弱そうだったからグローバル変数での切替はイヤだったんだよ!うんこ!みたいな。
sub input_record_separator {
my $old = new SelectSaver qualify($_[0], caller);
my $prev = $/;
$/ = $_[1] if @_ > 1;
$prev;
}
このソース見る限り、ストリームごとに個別に設定は無理そうですね。
ありがとうございます。
0847829
2006/01/24(火) 01:53:110848デフォルトの名無しさん
2006/01/24(火) 09:30:06そんな名前のバーは世界中にありそうな気がする。
0849デフォルトの名無しさん
2006/01/24(火) 09:47:340850デフォルトの名無しさん
2006/01/24(火) 10:01:280851デフォルトの名無しさん
2006/01/24(火) 10:05:15まさに今仕事中に見ている俺に、そんな注意をするおまいは俺の上司か!?
それとも俺のディスプレイ見つめてる後ろの席の奴か!?こわいわ!
0852デフォルトの名無しさん
2006/01/24(火) 18:00:55Argument "O_RDONLY" isn't numeric in sysopen at HOGE.pl in line 31.
というエラーが出てくるのですが
O_RDONLY ってあってますよね。。。
どなたかこうなる理由に心当たりあるかたお願いします。
# HOGE.pl line 31
sysopen IN, $file, O_RDONLY, 0400 or die "Can't open '$file' : $!";
0853852
2006/01/24(火) 18:13:24すみません;;
0854デフォルトの名無しさん
2006/01/24(火) 19:02:48法則?
普段からよく調べもせずに質問するからそうなる。
0855デフォルトの名無しさん
2006/01/24(火) 19:26:56> 『質問すると自己解決できる』の法則。。。
> すみません;;
質問しようとすると問題点を頭の中で整理するため、
答が見えることがあるわけです。
0856デフォルトの名無しさん
2006/01/24(火) 20:10:34use Fcntl;
0857デフォルトの名無しさん
2006/01/24(火) 23:21:20他人事だと思ってもイライラしてくるわw
周りから嫌われてそう
0858デフォルトの名無しさん
2006/01/24(火) 23:39:49最初はみんな不快だったはずだ。
が、この業界はこんなもの、と慣れてしまった。
そして同じ事を平気でするようになる。
0859デフォルトの名無しさん
2006/01/24(火) 23:42:04>>746の人? それも難癖のような気が。
0860デフォルトの名無しさん
2006/01/24(火) 23:50:50任意の10進数を16 bitの二進数データに変換したい場合について質問させてください。
下のように記述しても、何故か8bit分の文字列しか帰ってきません。
お手数ですが御教授頂けないでしょうか。
$data = 72;
$out_data=unpack("B16",pack("C*",$data));
$out_dataに、"0000000001001000"が戻ってくることを
期待しますが、"01001000"が戻ってきます。
0861デフォルトの名無しさん
2006/01/24(火) 23:53:52なるほど
>>859
チガウヨ
0862デフォルトの名無しさん
2006/01/25(水) 00:42:24pack() の型指定子に 'C' 使ってるから
$out_data = unpack("B16", pack("s*", $data));
以下、perlfunc から引用
s A signed short value.
S An unsigned short value.
(This 'short' is _exactly_ 16 bits, which may differ from
what a local C compiler calls 'short'. If you want
native-length shorts, use the '!' suffix.)
0863デフォルトの名無しさん
2006/01/25(水) 01:56:16御教授ありがとうございます。
重ねて質問をよろしいでしょうか。
教えて頂いた方法で、例えば
"$out_data = unpack("B16", pack("s*", 511)); "
10進"511"は、2進"111111111"(1x9個)ですので、
出力が
で、実行してみますと、
"1111111100000001"が出力されます。そこで、教えて頂いた事と
エンディアンを考慮してpack()の型数に"n"を使用してみました。
"$out_data = unpack("B16", pack("n*", 511)); "
すると出力は"0000000111111111"となり、所望の結果となりました。
ですが、今度は24bit"000000000000000111111111"で出力させようと思い、
"$out_data = unpack("B16", pack("N*", 511)); "
で実行すると、"000000000000000000000001"と出力されてしまいます。
これを,"000000000000000111111111"と出力させるには如何したらよろしいでしょうか。
御多忙の折に申し訳ありませんが、御教授頂けましたら幸いです。よろしくお願いいたします。
0864デフォルトの名無しさん
2006/01/25(水) 01:58:46>> 862 様
御教授ありがとうございます。
重ねて質問をよろしいでしょうか。
教えて頂いた方法で、例えば
"$out_data = unpack("B16", pack("s*", 511)); "
10進"511"は、2進"111111111"(1x9個)ですので、
出力がは"0000000111111111"を期待します。
で、実行してみますと、
"1111111100000001"が出力されます。そこで、教えて頂いた事と
エンディアンを考慮してpack()の型数に"n"を使用してみました。
"$out_data = unpack("B16", pack("n*", 511)); "
すると出力は"0000000111111111"となり、所望の結果となりました。
ですが、今度は24bit"000000000000000111111111"で出力させようと思い、
"$out_data = unpack("B16", pack("N*", 511)); "
で実行すると、"000000000000000000000001"と出力されてしまいます。
これを,"000000000000000111111111"と出力させるには如何したらよろしいでしょうか。
御多忙の折に申し訳ありませんが、御教授頂けましたら幸いです。よろしくお願いいたします。
0865デフォルトの名無しさん
2006/01/25(水) 02:32:30但しNが32ビットである場合のみ有効。
N は big-endian で unsigned long ということは保障されていても
unsigned long が 32 ビットであることは保障されていない。
0866デフォルトの名無しさん
2006/01/25(水) 04:03:37$bit = 24; #表示させたいビット数
foreach(1..$bit){
if($data & 1 << $bit - $_){
print "1";
}
else{
print "0";
}
}
これじゃだめか?
0867デフォルトの名無しさん
2006/01/25(水) 09:12:07inetdから起動される簡単なものでいいんですが・・・
0868デフォルトの名無しさん
2006/01/25(水) 09:19:14いつからかはわからないですが今は32bitであることが保証されています。
5.8.7のperlfunc(1)のpackの項から抜き出したものですが、最後のカッコ内
に注目。
n An unsigned short in "network" (big-endian) order.
N An unsigned long in "network" (big-endian) order.
v An unsigned short in "VAX" (little-endian) order.
V An unsigned long in "VAX" (little-endian) order.
(These 'shorts' and 'longs' are _exactly_ 16 bits and
_exactly_ 32 bits, respectively.)
0869ヽ(´ー`)ノ ◆.ogCuANUcE
2006/01/25(水) 09:33:36> Perlで書かれたHTTPDってどこかにありますか?
HTTP::Daemon とか。
> inetdから起動される簡単なものでいいんですが・・・
こっちはしらね。
0870デフォルトの名無しさん
2006/01/25(水) 10:12:50あ、本当だ。32ビットは保証されていたのか。
やっぱ互換性を保ちたいということかな。
(そういや昔は Perl バージョンアップしたら
動かなくなるスクリプトあったな…)
0871デフォルトの名無しさん
2006/01/25(水) 10:32:30ローカルのドキュメントを表示するだけのものが欲しかったんですが、
これだけでOKでした・・・
#!/usr/local/bin/perl
$METHOD=<STDIN>;
$PATH=$1 if $METHOD=~/GET (.+) HTTP/;
if(! -f $PATH){exit}
undef $/;
open FH,"$PATH";
$document=<FH>;
close FH;
print STDOUT $document;
これと/etc/inetd.confに下の一行を追加して、
http stream tcp nowait root /home/junya/bin/httpd.pl httpd.pl
ブラウザからこんな感じで
http://localhost:80/usr/share/doc/...
つか、これならシェルで十分すね・・・
0873デフォルトの名無しさん
2006/01/25(水) 11:16:17/etc/hosts.allow,/etc/hosts.denyで規制してるし、どうせローカルでしか使わないし。
でもあんまり良くないかな。
0874デフォルトの名無しさん
2006/01/25(水) 11:54:54>任意の10進数を16 bitの二進数データに変換したい場合について質問させてください。
sprintfを使え。
つーか、これまでそう言った人がいないのは、どうしたわけだろうか?
0875デフォルトの名無しさん
2006/01/25(水) 12:04:44「○進数を×進数に…」の質問は散々既出なので、sprintf の %b を
知ってる間は質問を読みもしない。
0876デフォルトの名無しさん
2006/01/25(水) 12:54:56setenv CLASSPATH…
が羅列されたcshファイルを
シェルのsourceのように
perlの中から読み込んで、環境変数CLASSPATHに設定すること
は出来ますか?
0877デフォルトの名無しさん
2006/01/25(水) 13:22:20http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq8.html#i__changed_directory__modified_my_environment__in_a_perl_script__how_come_the_change_disappeared_when_i_exited_the_script_how_do_i_get_my_changes_to_be_visible
http://www.nurs.or.jp/~asada/FAQ/UNIX/section2.8.html
0878デフォルトの名無しさん
2006/01/25(水) 13:36:13$ENV{CLASSPATH} = `csh -c 'source $csh_file >/dev/null ; echo -n \$CLASSPATH'`;
0879デフォルトの名無しさん
2006/01/25(水) 13:49:20ありがとう!
先ほどsage忘れました、ごめんなさい
0880デフォルトの名無しさん
2006/01/25(水) 20:49:29UNIXコマンドでのwc -lのようにファイルの中の行数を
出力するにはPerlでどうすればできますか?
0881デフォルトの名無しさん
2006/01/25(水) 20:54:09>Perl初心者です
あっそ、だから何
0882デフォルトの名無しさん
2006/01/25(水) 21:01:39print `wc -l foo.txt`;
0883デフォルトの名無しさん
2006/01/25(水) 21:10:220884デフォルトの名無しさん
2006/01/25(水) 22:04:53ファイルを開いて
open my $fh, 'file' or die "Can't open file: $!";
後は数える。
my $c = 0;
$c++ while <$fh>;
富豪的解法
my $c = scalar @{[ <$fh> ]};
閉じるのをお忘れなく
close $fh;
おまけのワンライナー
perl -ne 'END { print $. }' < file
>>881
「初心者」を振りかざして免罪符にしようとするのであれば確かにそれは間違っているが、
あまり詳しくないことを初めに言っておくことは質問方法として重要なことだと思うが?
まあこの場合は質問内容からそれが解るし、自らはどのようにやってみた等が欠けてはいるけど。
この回答でも「Perl初心者です」という一言があるからこそ、
ファイルの開き方を軽く説明しているつもりだし。
0885デフォルトの名無しさん
2006/01/25(水) 22:22:13は、人生の初心者でした。
0886デフォルトの名無しさん
2006/01/25(水) 22:25:020887デフォルトの名無しさん
2006/01/25(水) 23:07:190888デフォルトの名無しさん
2006/01/25(水) 23:08:050889860
2006/01/25(水) 23:08:21御教授ありがとうございました。
sprintfに "b"があるとは知りませんでした。
866様の例も勉強になりました。
大変ありがとうございました。
0890デフォルトの名無しさん
2006/01/25(水) 23:11:04何かこのスレ潰そうってかperlを貶めようってかしてる椰子が
1個流れてるな。
0891860
2006/01/25(水) 23:14:07>>」881
氏ねや ゴミはよ!
0892デフォルトの名無しさん
2006/01/25(水) 23:14:47phfを思い出した
0893デフォルトの名無しさん
2006/01/25(水) 23:56:47初心者を煽るのを含めて楽しもうぜ
0894デフォルトの名無しさん
2006/01/26(木) 01:24:050895デフォルトの名無しさん
2006/01/26(木) 01:31:430896デフォルトの名無しさん
2006/01/26(木) 05:30:040897デフォルトの名無しさん
2006/01/26(木) 05:53:230898デフォルトの名無しさん
2006/01/26(木) 07:55:42長い間いい感じで進行してたのに残念ですな。
0899デフォルトの名無しさん
2006/01/26(木) 13:13:290900デフォルトの名無しさん
2006/01/26(木) 14:16:350901デフォルトの名無しさん
2006/01/26(木) 14:40:250902デフォルトの名無しさん
2006/01/26(木) 17:06:37---------------------
・ファイルの中身
%s=('id',q(1),'name',q(40),'logouttime',q(2006-01-26 15:38:36),'m',q(1),'rowsize',q(10),'s',q(7f02f000320007d0106a));
---------------------
・ソース
if (ろぐいんok) {
require ふぁいる;
%mainhash = %s;
}
---------------------
普通に使えていたのですが、use strictを入れたらフォーカスがあいまい?だと怒られた為、
---------------------
・ソース
if (ろぐいんok) {
my %s;
require ふぁいる;
%mainhash = %s;
}
---------------------
のようにしたのですが、これですとエラーは出なくなるのですが、
my %sとrequire内の%sが別扱いになってしまうのか、hashが空で読み込まれるようになってしまいました。
requireを使う前提で、なにか解決策などありますでしょうか。
ファイルのデータ構造を変えて普通にファイルとして読み込んでからハッシュに格納するようにすればいいんでしょうが、
こういう使い方ができないのかどうか激しく疑問です。。
以上、ご教授よろしくお願いします。
0903デフォルトの名無しさん
2006/01/26(木) 17:35:01our %s=〜 で明示的にグローバルにするか、
ハッシュの中身を返すサブルーチンに替える。
0904デフォルトの名無しさん
2006/01/26(木) 17:56:45%mainhash = require ふぁいる;
っていけないのかな?
試してないけど。
0905デフォルトの名無しさん
2006/01/26(木) 18:04:21この場合は require を使う方が面倒が起きるんだけどな。
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq8.html#what_s_the_difference_between_require_and_use
---------------------
・ファイルの中身
{'id',q(1),'name',q(40),'logouttime',q(2006-01-26 15:38:36),'m',q(1),'rowsize',q(10),'s',q(7f02f000320007d0106a)};
---------------------
・ソース
if (ろぐいんok) {
my %mainhash = %{ do ふぁいる };
}
---------------------
0906デフォルトの名無しさん
2006/01/26(木) 18:07:58ありがとうございます。
ourは気持ちわるいっすね。。
サブルーチンに変えるというのはこういう解釈で問題ないでしょうか。
---------------------
・ファイルの中身
sub fileread() {%s=('id',q(1),'name',q(40),'logouttime',q(2006-01-26 15:38:36),'m',q(1),'rowsize',q(10),'s',q(7f02f000320007d0106a));}
---------------------
>>904
それは試したんですが、無理でしたです。
すみません、説明不足でした。
0907デフォルトの名無しさん
2006/01/26(木) 18:21:14訂正
---------------------
・ファイルの中身
sub fileread() {my %s; %s=('id',q(1),'name',q(40),'logouttime',q(2006-01-26 15:38:36),'m',q(1),'rowsize',q(10),'s',q(7f02f000320007d0106a)); return %s;}
>>905
ありがとうございます、できました!
動いてた頃よりもソースが美しいっす!
>>903-905
ありがとうございました。
0908デフォルトの名無しさん
2006/01/26(木) 18:21:59> hashを書いたファイルを作成して、requireで読み込んでそのまま使おうとしています。
の方がキモいけどなぁ。
0909デフォルトの名無しさん
2006/01/26(木) 18:39:11インストーラ自体はFTPにあったのですが、インストールしても
ライセンスがないというダイアログが出てはじかれてしまうんですよ。
オフィシャルの
b) provide unlimited licenses for the current 2003/2002 plug-ins;
ってのはKomodoのライセンス持ってる人にだけってことでしょうか?
0910デフォルトの名無しさん
2006/01/26(木) 19:18:160911デフォルトの名無しさん
2006/01/26(木) 19:53:490912デフォルトの名無しさん
2006/01/26(木) 21:02:13ある2つの配列のハッシュ(%A, %B)で、各 key に対する値が、A, B ともに
あったら、それを A から削除したいのですが、よい方法ありますでしょうか。
今、思いつくのはこんな感じです・・・
foreach $key ( keys %A ) {
foreach $i ( 0 .. $#{ $A{$key} } ) {
if ($A{$key}[$i] = $B{$key}[$i]) {
ここで削除処理 ?
}
}
}
0913デフォルトの名無しさん
2006/01/26(木) 21:18:250915デフォルトの名無しさん
2006/01/26(木) 23:09:140917デフォルトの名無しさん
2006/01/27(金) 00:45:38そういう時は一旦ハッシュに入れてみるのが常套手段
my %A = ( hoge => [1, 2, 3, 5], fuga => [50] );
my %B = ( hoge => [2, 3, 4], piyo => [] );
foreach my $key (keys %B) {
next if !exists $A{$key};
my %e = ();
$e{$_} = 1 foreach @{$B{$key}};
my @newA = ();
$e{$_} or push @newA, $_ foreach @{$A{$key}};
$A{$key} = \@newA;
}
0918デフォルトの名無しさん
2006/01/27(金) 01:03:08通りすがりの初心者です。間違っていたら指摘よろです。
foreach my $key(keys %B){
$A{$key} = [undef] if($A{$key} != undef);
}
0919918
2006/01/27(金) 01:09:03$A{$key}=[undef]
じゃなくて
$A{$key}=[]
でした。
0920デフォルトの名無しさん
2006/01/27(金) 01:18:24仕様が要件を満たしているかどうかは置いておくとして、
$A{$key} != undefの所はdefined $A{$key};と書かないと。
-wやuse warningsを使うと、そういうことを結構教えてくれるから使ってみることをお勧めする。
0921デフォルトの名無しさん
2006/01/27(金) 01:49:36if (exists($B{$key}) {
delete($A{$key});
}
}
0922デフォルトの名無しさん
2006/01/27(金) 04:11:30each の途中で、delete ってしていいの?
0923デフォルトの名無しさん
2006/01/27(金) 06:02:280925デフォルトの名無しさん
2006/01/27(金) 09:15:38一般にはダメだが、eachが最も最近に返した要素のdeleteだけは
安全。perlfunc(1)のeachのとこに書いてある。
If you add or delete elements of a hash while you're
iterating over it, you may get entries skipped or duplicated,
so don't. Exception: It is always safe to delete the item most
recently returned by "each()", which means that the following
code will work:
while (($key, $value) = each %hash) {
print $key, "\n";
delete $hash{$key}; # This is safe
}
0926デフォルトの名無しさん
2006/01/27(金) 10:40:20$ perl hoge.pl -i input_file
または
$ perl hoge.pl < input_file
のように使うスクリプトがあって
引数に -i があるときはファイルを開いて
無いときはSTDINからデータを読んでるのですが
$ perl hoge.pl
とどちらも忘れたときにSTDINで止まってしまって
強制終了以外で止められません
$ perl hoge.pl[enter]
I can't find input file!
$
のようにする方法をずっと考えているのですが
結局思いつきません。。。
どなたかいい方法をお願いします。
0927デフォルトの名無しさん
2006/01/27(金) 11:23:16よく使われる手は -t STDIN で標準入力がttyかどうか調べる、だな。
リダイレクトで明示的にttyを標準入力につないだときに誤判定するが
それはアキラメで。
0928デフォルトの名無しさん
2006/01/27(金) 11:23:46STDINが、コンソールか、ファイルかなんて、
C言語でも、かなりOSに依存したコード書かないといけないと思うからperlだと難しいんじゃないかな。
一応、seek(STDIN,0,0) してみたら、
コンソールの場合は、0が返ってきて、
ファイルの場合は、1が返ってきたので、
これで判断できると思うけどOSに依存するかもしれん。
0929928
2006/01/27(金) 11:26:16http://flex.ee.uec.ac.jp/texi/perl/perl_22.html#IDX82
-t ファイルハンドルが tty にオープンされている
こんなファイルテスト演算子があったとはしらんかった (;゚д゚)...
0930928
2006/01/27(金) 11:34:10print "defined PackageName" if defined(PackageName);
↑でできるかなと思ったのですが、
defined("PackageName")としていることが
まったく同じような気がするので常に1が返ってきて無駄でした。
0931デフォルトの名無しさん
2006/01/27(金) 11:48:37馬鹿だなオマエ。そういう時は「引数に何も付けなかった時は
標準入力から入力する。」という仕様にしてしまえばいいじゃ
ないか。実際その方が便利だぞ。
0932926
2006/01/27(金) 11:51:25-t STDIN
を利用して
$ perl hoge.pl -i input_file
$ perl hoge.pl < input_file
$ cat input_file | perl hoge.pl
で期待通りに動作しました!ありがとうございます!
それと
『リダイレクトで明示的にttyを標準入力につないだとき』
なのですが、というのが分かりません。。。
どういうことでしょうか。。。?
0933926
2006/01/27(金) 11:53:42あ、本来の仕様は
perl [-i input_file] [-o out_putfile]
なんでそれは無理です。
質問のために省略しました。
ただ、その方法も確かに簡単でいいですね!
0934デフォルトの名無しさん
2006/01/27(金) 12:05:01紫色を透明色にしたいんだが何か間違ってる?
use Image::Magick;
$image = Image::Magick->new;
$image->Read('test.bmp');
$image->Set(transparent=>'Purple');
$image->Set(colorspace=>'Transparent');
$image->Set(matte=>'True');
$image->Write("test.png");
0935デフォルトの名無しさん
2006/01/27(金) 13:27:07$ perl hoge.pl < /dev/tty
0936デフォルトの名無しさん
2006/01/27(金) 14:55:441. ○○がしたい
2. 自分はこうやった
3. 結果は××になってほしいが△△になってしまった
3 が抜けてて返答のしようがない。
0937デフォルトの名無しさん
2006/01/27(金) 16:21:59CPANで拾うとppdが入っていません。かなりググりましたが他に
見つかりませんでした。
自動でインストールできるものはどこで入手できますでしょうか?
あと、みなさん普段どこからモジュールを手に入れてますか?
オススメのリポジトリとかあれば教えてください。
0938デフォルトの名無しさん
2006/01/27(金) 16:51:40cpan -i HTML::FormatText で普通に入るけど。
0939デフォルトの名無しさん
2006/01/27(金) 17:27:58古い5.81ので拾った記憶が
既に入らなかった。あきらめたけど
ppmでオフラインで入らないのは古いから対応してないよ警告なんだと思う。
namazuでもそうだったし
野良で使えるとは思うけど
もしかしたらアーカイブ鯖からppmで入れられるのかね?
5.81アーカイブに繋いで入れられるのかな?
不明
0940937
2006/01/27(金) 20:23:47こんなのがあったんですね・・・(ppmの立場は!?)
いままでppmを使っていたので、モジュールのインストールによく躓いていました。
perlのモジュールって,統一感がある様で結構バラバラな感じですね。
Image::Magickもppmでは入りません。DLLのインストーラでオプション指定
しないといけない現状です。
ウエブにあふれてる解説が古いままなのが、躓く原因だと思います。
0941デフォルトの名無しさん
2006/01/27(金) 21:01:050942デフォルトの名無しさん
2006/01/27(金) 21:59:14> ppmの立場は!?
ActivePerlで確実に使えるパッケージである。
コンパイル済みなので、コンパイラを持っていないユーザーでも使える。
0943デフォルトの名無しさん
2006/01/27(金) 22:07:570944デフォルトの名無しさん
2006/01/27(金) 22:51:06またでんのかよ
0945デフォルトの名無しさん
2006/01/27(金) 23:21:310946デフォルトの名無しさん
2006/01/28(土) 04:23:46$val=$list[$#list]
これを一文でやる方法はありますか?
あるリストの最後の要素を取得する方法が知りたいです。
0947デフォルトの名無しさん
2006/01/28(土) 05:03:24foreach my $key( @list) {
print "$key", "\n";
}
という書き方がよく行われていますが
my $key;
foreach $key( @list) {
print "$key", "\n";
}
とすべきではないのでしょうか?
0948デフォルトの名無しさん
2006/01/28(土) 05:09:08foreach my $key( @list) {
print "$key", "\n";
}
print "$key", "\n";
my $key;
foreach $key( @list) {
print "$key", "\n";
}
print "$key", "\n";
0949デフォルトの名無しさん
2006/01/28(土) 05:11:13$val=[glob("*.c")]->[-1];
とか?
0950デフォルトの名無しさん
2006/01/28(土) 05:15:29便乗しての質問なのですが、なぜ
@list=glob("*.c");
$val = pop(@list);
は出来るのに
@list = pop(glob("*.c"));
はType of arg 1 to pop must be array (not null operation) というコンパイル
エラーになってしまうのでしょうか?
0951ヽ(´ー`)ノ ◆.ogCuANUcE
2006/01/28(土) 05:23:06こうじゃね?
$val=(@list = <*.c>)[-1];
もっとも、俺なら後から見てワケワカメになるので、こうするけどな。
my @list = <*.c>;
my $val = $list[-1];
あと、deprecated というわけじゃないようだが、glob() じゃなくて
File::Glob か <> 演算子を使っとけ。
>>950
pop() は引数を与えた場合、与えられた配列を変更するので、変更できない
(lvalue じゃない) サブルーチンの返り値やリテラルを渡すとエラーになる。
0952デフォルトの名無しさん
2006/01/28(土) 05:42:230953デフォルトの名無しさん
2006/01/28(土) 06:09:16ところでこのソートって必要だと思いますか?
>as the standard Unix shell /bin/csh would do.
/bin/cshはファイル名でソートしてくれる仕様なのかな、どうなんだろ。
0954デフォルトの名無しさん
2006/01/28(土) 06:11:46こうだった。
0955デフォルトの名無しさん
2006/01/28(土) 10:02:58>あと、deprecated というわけじゃないようだが、glob() じゃなくて
>File::Glob か <> 演算子を使っとけ。
なんで?
0956デフォルトの名無しさん
2006/01/28(土) 11:55:08少なくとも 5.6.0 から組込関数の glob() は内部で File::Glob 呼んでるし、
ファイル名グロブ演算子としての <> は行入力演算子としての <> と紛ら
わしいうえ実体は glob() だから、「glob() より <> を使え」って根拠は謎だな。
http://search.cpan.org/~nwclark/perl-5.8.7/pod/perlfunc.pod#glob_EXPR
まぁ File::Glob::bsd_glob() を直接使えばフラグを与えて細かく制御できるし、
そういう事を言いたいんじゃない? 俺は面倒だから glob() 使うけど。
>>953-954
という事で File::Glob を読むんだ。
http://search.cpan.org/~nwclark/perl-5.8.7/ext/File/Glob/Glob.pm
0957ヽ(´ー`)ノ ◆.ogCuANUcE
2006/01/28(土) 12:38:34File::Glob の方が細かく制御できるから…と思ったけど、
:globally なら glob() にも <> にも影響あるんだな。
これはスマンカッタ。
>>953-954
unlink() かよ。
0958デフォルトの名無しさん
2006/01/28(土) 13:35:54Windowsで言う『切り取り→貼り付け』、UNIXで言う『mvコマンド』みたいな事をしたいんですが
モジュールとかありますか?
0959デフォルトの名無しさん
2006/01/28(土) 13:45:54モジュールって…
rename() でええがな。
0960デフォルトの名無しさん
2006/01/28(土) 13:51:37あえてモジュールを使いたいならFile::Copyにmvがある。rename直でいいと思うが。
ところでこのスレでPerl6の質問ってしてもOK?
まだ質問があるわけじゃないんだけどさ
0961デフォルトの名無しさん
2006/01/28(土) 13:51:46ttp://www.rfs.jp/sb/perl/02/08.html#TRY!%20ファイルハンドルを変数に格納する
↑以外で良いサンプルの書いてあるサイトを知ってる人いませんか。
ポイントへの格納の仕方、読み方の二つがわかれば十分なんですが…
0962デフォルトの名無しさん
2006/01/28(土) 14:04:480963デフォルトの名無しさん
2006/01/28(土) 14:09:24http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq5.html#how_can_i_use_a_filehandle_indirectly
http://www.kt.rim.or.jp/~kbk/perl5.005/perlref.html
0964デフォルトの名無しさん
2006/01/28(土) 14:34:40ありがとうございました!
>>962
すみません、どう表現したらいいのかもよくわかってなくてニュアンスで書きました。
0965デフォルトの名無しさん
2006/01/28(土) 16:26:45ここいってくらさい。
次世代Webプログラミング言語の大本命Perl6/Parrot [WebProg]
0966デフォルトの名無しさん
2006/01/28(土) 21:35:32[@match = ] $j->m($pattern, $opt);
を使って、以下1行のSJIS文
あいうえお/かきくけこ/さしすせそ
を/でsplitするにはどうしたらいい?
0967デフォルトの名無しさん
2006/01/28(土) 23:45:42>>960
renameは同一ファイルシステム内でしか移動できないので、
ファイルシステムまたぐ可能性があるならFile::Copyのmvを
使うべし
0968デフォルトの名無しさん
2006/01/29(日) 00:54:03my $rec = {
title => '11',
genre => '77',
};
push(@list, \$rec);
&test(\@list);
sub test(\@) {
my ($lst) = @_;
foreach my $aaa (@$lst) {
# ここでデリファレンスする方法をおしえてください。
print $aaa->{title};
}
}
よろしくお願いします。
0969デフォルトの名無しさん
2006/01/29(日) 01:26:010970デフォルトの名無しさん
2006/01/29(日) 01:30:58push(@list,\$rec) を push(@list,$rec) にするとかは?
0971960
2006/01/29(日) 01:36:31りょーかいです
>>967
ファイルシステムを超えて移動したことなかったので知らなかったorz
やっぱり一般的な関数もちゃんとドキュメントは読まないと駄目ね・・・
>>968
>>969 書き間違えてますぞい。
print $$aaa->{title};
0972デフォルトの名無しさん
2006/01/29(日) 01:39:280973968
2006/01/29(日) 01:45:57my @list;
my $rec = {
title => '11',
genre => '77',
};
push(@list, \$rec);
これ「ハッシュのリファレンスのリファレンス」になってしまうのでしょうか?
0974968
2006/01/29(日) 01:51:430975969
2006/01/29(日) 02:17:19print $$aaa->{title};
これだと
Not a SCALAR reference
になるんだが
0976969
2006/01/29(日) 02:18:310977デフォルトの名無しさん
2006/01/29(日) 05:01:050978デフォルトの名無しさん
2006/01/29(日) 06:31:54Winの場合は、rename で内蔵HDDから外付けUSB HDDに移動できたけどな。
0980デフォルトの名無しさん
2006/01/29(日) 07:09:22それはファイルシステムとは言わないような気がするんだけど気のせい?
0981デフォルトの名無しさん
2006/01/29(日) 07:10:07はぁ?
0982デフォルトの名無しさん
2006/01/29(日) 07:16:47アホみたいに煽るだけじゃなくて実のあること書いてよw
FATとかNTFSのことじゃないの?
0983デフォルトの名無しさん
2006/01/29(日) 08:32:27Linux Perl の場合:無効なクロスデバイスリンク と出て失敗。
Win98SE(ActivePerl)の場合:正常に移動できた。
デュアルブートのマシンなので、ハードウェアは全く同じ環境。
誰か理由を説明できる人、よろしく。
0984デフォルトの名無しさん
2006/01/29(日) 08:35:050985デフォルトの名無しさん
2006/01/29(日) 08:53:07内部でcpとrmを実行してなかった?
0986デフォルトの名無しさん
2006/01/29(日) 09:22:05mvで違うファイルシステムにファイルを移動しようとしたら、
renameでエラーを検出した後に、read/writeでファイルをコピーしてる。
0987デフォルトの名無しさん
2006/01/29(日) 09:27:05その通り。
まず rename を試み、失敗したら自分で移動処理してる。
ActivePerlのrenameは、そういうコードが入ってるってことかな?
0988デフォルトの名無しさん
2006/01/29(日) 09:39:52Windowsの関数の方が親切だよね。
0989デフォルトの名無しさん
2006/01/29(日) 09:45:00MoveFileExならフラグの制御でUNIXと同じ動作にも
出来たんだろうけど、あえてMoveFileを使う辺りが適当というか。
ユーザーにとっては便利だけど。
0990デフォルトの名無しさん
2006/01/29(日) 09:56:30Win9xでも動くようにするためじゃない?
0991デフォルトの名無しさん
2006/01/29(日) 10:03:21MoveFileExってNT系にしかないのか…
0992デフォルトの名無しさん
2006/01/29(日) 10:16:340993デフォルトの名無しさん
2006/01/29(日) 10:17:340994デフォルトの名無しさん
2006/01/29(日) 16:19:140995デフォルトの名無しさん
2006/01/29(日) 16:26:45次スレ
http://pc8.2ch.net/test/read.cgi/tech/1138519327/
0996デフォルトの名無しさん
2006/01/29(日) 16:56:43z
0997デフォルトの名無しさん
2006/01/29(日) 17:11:49それは、すみません。 でも、ゆっくり味わいたいと思います
(身をよじるはやてに微笑をむけながら)
ふふ、可愛らしいですね……、大人になったらするんですから……
はやてちゃんの場合でしたら、したいって相手がいっぱい居ると思いますよ?
ですから、あまり恥ずかしがらないでくださいね。
(そう話しかけながら、胸の蕾を指で転がしている)
ん、ふ……ちゅ、ぺろぺろ……
(乳房の輪郭を、手で探りながら、胸の蕾を舌先で転がす)
ふふ、どうですか……?
んちゅ……、ちゅ……
(はやての身体に跨り、首筋に顔を伸ばして唇を這わせる)
0998デフォルトの名無しさん
2006/01/29(日) 17:11:58(ペニスが下腹部に当たると、身体を浮かして)
もう、したいんですか……?ふふ、まだ早いですよ。
(はやてちゃんの胸を揉みながら、微笑む)
んふっ……ぺろっ……
(胸から鎖骨へとゆっくり舌を這わせながら、身体を浮かす)
それでは、私のを、はやてちゃんの唾液で濡らしていただけますか?
(そう言うと、69の体勢になるため、お尻をはやてへ向け
身体をペニスの方へと寝かせていく)
………………
(ペニスを掴んで扱きながら、はやてからの愛撫を待っている)
0999デフォルトの名無しさん
2006/01/29(日) 17:12:07(ペニスを扱かれて、腰が動く)
シャマル………うち…頑張る……
ちゅ……ん……
(ペニスへの刺激に耐えながら、懸命にシャマルのアソコをチロチロ舐める)
1000デフォルトの名無しさん
2006/01/29(日) 17:12:13ぁん……、はい、頑張ってくださいね……
ちゅ……ん…、ちゅっ……
(嬉しそうに腰を振りながら、
ペニスの先端を舌先でくすぐる)
ふぁ……ぁ、ん………
(秘部をはやての唾液を、自分の愛液で濡らしながら、腰を揺らす)
ちゅ、ぺろ……ふ、ぁ……
(咥内にペニスを含み、ペニス全体に舌を絡め唾液で濡らす)
ふふ、これは、どうでしょうか……
(上半身を軽く浮かし、はやてのペニスを豊満な胸で挟む)
(そして、挟んだまま胸でペニス扱く)
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。