Perlについての質問箱 48箱目
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2011/08/20(土) 20:36:37.25CGI と Perl の区別がつかない人も WEB プログラミング板に行ってください。
(WEB プログラミング板: http://hibari.2ch.net/php/ )
このスレでは(CGI 以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。
"The duct tape of the Internet" こと、Perl についての質問箱です。
"There's more than one way to do it" ということで、
Perl の奥深さについて皆で語り合い、追求してまいりましょう。
http://www.perl.org/get.html
● 2011/08/20 現在の最新版: 5.14.1
▼ 前スレ
Perlについての質問箱 47箱目
http://hibari.2ch.net/test/read.cgi/tech/1306333092/
リンク集は >>2-3辺り
Perl 日本語処理の基礎の基礎 >>4辺り
0002デフォルトの名無しさん
2011/08/20(土) 20:36:55.47Perl プログラミング講座: ttp://www.site-cooler.com/kwl/perl/
[本]
リャマ: ttp://www.oreilly.co.jp/books/9784873114279/
駱駝: ttp://www.oreilly.co.jp/books/4873110963/
Effective Perl: ttp://ascii.asciimw.jp/books/books/detail/4-7561-3057-7.shtml
クックブック: ttp://www.oreilly.co.jp/books/4873112028/
Perl ベストプラクティス: ttp://www.oreilly.co.jp/books/4873113008/
Perl Hacks: ttp://www.oreilly.co.jp/books/9784873113142/
[オンラインマニュアル]
最新のドキュメント: ttp://search.cpan.org/dist/perl/
perldoc.jp: ttp://perldoc.jp/
perldoc.perl.org: ttp://perldoc.perl.org/
0003デフォルトの名無しさん
2011/08/20(土) 20:37:00.45CPAN.com: ttp://search.cpan.org/
河馬屋二千年堂: ttp://homepage3.nifty.com/hippo2000/
[テクニック]
Perl メモ: ttp://www.din.or.jp/~ohzaki/perl.htm
Perl のページ: ttp://homepage1.nifty.com/nomenclator/perl/
Perl の小技: ttp://homepage3.nifty.com/hippo2000/perltips/index.htm
[Perl 5.8 Unicodeメモ]
ttp://www.rwds.net/kuroita/program/Perl_unicode.html (修正)
ttp://www.namazu.org/~tsuchiya/perl/perl-5.8.html
ttp://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
0004デフォルトの名無しさん
2011/08/20(土) 20:37:09.20# このレスは、Windows の ActivePerl で日本語処理を行う場合のテンプレートです。
# このレスの内容をそのまま、UTF8 形式のソースファイルに保存して下さい。
# 入出力ともシフト JIS 形式のファイルまたは DOS 窓を想定しています。
# まず、以下の行を先頭に入れて下さい。
use utf8;
use open IO => ":encoding(cp932)";
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
binmode STDERR => ":encoding(cp932)"; # ※1
use Encode;
# 次に、あなたが実行したい処理の内容を入れて下さい。
$file = 'C:/なんたら/かんたら.txt';
open my $fh, '<', encode("cp932", $file) or die $! ; # ※2
print <$fh>;
# 以上の内容は、日本語処理が解らない人でも、とりあえず日本語処理ができてしまう
# おまじないです。条件が異なる場合の対処方法は、ご自分で勉強して下さい。
# 【注】※1. の行を入れると、DOS 窓への日本語出力は簡便になりますが、
# ソースファイル名に非 ANSI 文字が含まれる場合に die 文の出力が失敗します。
# ※2. OS に渡す文字列(ファイル名,dos コマンドのオプションなど)は、
# この例のように cp932 でエンコードする必要があります。
0005デフォルトの名無しさん
2011/08/20(土) 20:49:10.670006デフォルトの名無しさん
2011/08/20(土) 21:32:27.300007デフォルトの名無しさん
2011/08/21(日) 12:47:37.75my @lunch_choices = grep &is_edible($_), @gilligans_posessions;
って書いてあったんだけど、$_は自分が展開されるタイミングを自分で
決められるように見えるんだけど、どう理解すればいいですか?
あとこういう事ができる変数を自分で作れるの? $_だけ特別なの?
0008デフォルトの名無しさん
2011/08/21(日) 13:25:03.25$_は手抜きや省力化のための大変素晴らしい特殊な変数です
$_をマスターすることがperlへの理解の第一歩でありかつ終着地点です
$_を制する者がperlを制します
0009デフォルトの名無しさん
2011/08/21(日) 13:49:10.04確かに言われてみればだけど、 grep 式, @array の形だと何か不思議に見えるかもねえ。
この場合同じ意味の grep { 式 } @array に書き換えたほうがわかりやすい。
つまり foreach (@array) { 式 } と同じように、 @array の要素を順に $_ に代入して式を実行してるだけってこと。
0010デフォルトの名無しさん
2011/08/21(日) 14:14:47.950011デフォルトの名無しさん
2011/08/21(日) 14:18:09.530012デフォルトの名無しさん
2011/08/21(日) 15:24:22.22その記法だと今度はブロック内の普通の関数呼び出しでは
&つけなくていいのになんでgrepのときはつけなきゃいけないのーふえぇぇんってなっちゃう
0013デフォルトの名無しさん
2011/08/21(日) 15:34:39.81BLOCKだろーとEXPRだろーとコードがまともなら、
&付けなくても動く
sub yojyou { $_[0] % 2 };
sub yojyou2($){ $_[0] % 2 };
my @dat = grep yojyou ($_) , 1 .. 10 ;
#my @dat = grep yojyou $_ , 1 .. 10 ; # <= 動かん
#my @dat = grep { yojyou $_ } 1 .. 10 ;
#my @dat = grep yojyou2 $_ , 1 .. 10 ;
#my @dat = grep sub{ $_[0] % 2 }->($_), 1 .. 10 ;
0014デフォルトの名無しさん
2011/08/21(日) 15:51:08.23古い古い。
今じゃ特殊な例でない限り使わん。
0015デフォルトの名無しさん
2011/08/21(日) 15:56:07.460016デフォルトの名無しさん
2011/08/21(日) 16:18:34.49mapとかsortとか。
0017デフォルトの名無しさん
2011/08/21(日) 16:54:19.54ケント脳って煽り。
「ケント否定派乙」って煽りなの?それとも「ケント信者乙」って煽りなの?
後者だと思ってたんだけど、ここ最近、ケントの名前を使って
煽ってる人がどうやら前者で煽ってるみたいで、非常に不思議だ。
0018デフォルトの名無しさん
2011/08/21(日) 17:15:25.40ケントとレベルが変わらんコードしか書けない連中のことだよ。
その連中の主観では、「ぼくちんはケントみたいな化石とは違う」と思ってるんだろうが。
0019tokuhirom
2011/08/21(日) 17:23:23.10ケント脳
はい 決定 これ使お
0020デフォルトの名無しさん
2011/08/21(日) 17:26:23.07つーか煽りのタイミングも意図も全く不明で
忍者のレスを見てる気分だったわw
0021デフォルトの名無しさん
2011/08/21(日) 17:29:54.30TPO考えたら?
0022デフォルトの名無しさん
2011/08/21(日) 17:50:44.96中括弧は速度が落ちるので、中括弧でないバージョンは速度が欲しい時かな
0023デフォルトの名無しさん
2011/08/21(日) 20:13:21.23今のは、ここが面白い所。って、自分のコントの説明をするお笑いみたいだ。
0024デフォルトの名無しさん
2011/08/21(日) 22:26:53.85気がつかない。
外から見てる人は冷静なんで、またこの人...と思っては
いるが、いちいち教えてあげない。
それがここ数年のPerlのトレンド。
0025デフォルトの名無しさん
2011/08/22(月) 18:37:18.03$value =~ s/%(..)/pack("c",hex($1))/ge;
と書いてあるところと
$value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg;
と書いてあるところがありますがどちらも同じ意味なんでしょうか?
それとエンコードですが
$value =~ s/(\W)/'%'.unpack('H2',$1)/eg;と
$value =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg;
は同じ意味なんでしょうか?
0026デフォルトの名無しさん
2011/08/22(月) 19:40:14.94前者:
同じ意味ではない。
後者:
同じ結果にはなるが同じ意味ではない。
0027デフォルトの名無しさん
2011/08/22(月) 20:04:53.24前者は同じ結果になりますか?
0028デフォルトの名無しさん
2011/08/22(月) 21:22:02.85なる場合とならない場合がある。
0029デフォルトの名無しさん
2011/08/22(月) 21:24:24.53前者はどっちを使った方がいいですか?
0030デフォルトの名無しさん
2011/08/22(月) 21:51:46.51Perlを勉強する気があるなら…自分で考えてみよう。正規表現の基礎です。
Perlを勉強する気がないなら…サヨウナラ。
0031デフォルトの名無しさん
2011/08/22(月) 21:53:34.730032デフォルトの名無しさん
2011/08/22(月) 22:54:59.45後者も同じ結果にはならない。unpack 'H2' は A-F が小文字として、
sprintf '%%%02X' は A-F が大文字として出力される。
0033デフォルトの名無しさん
2011/08/23(火) 00:14:25.87お前も間違ってるよ。
嘘回答するなよ。
0034デフォルトの名無しさん
2011/08/23(火) 00:38:23.770035デフォルトの名無しさん
2011/08/23(火) 11:10:28.58use strict;
use warnings;
foreach my $n1 (qw(0 1 8 9 A B E F a b e f x -)){
foreach my $n2 (qw(0 1 8 9 A B E F a b e f x -)){
my $d = '%' . $n1 . $n2;
(my $v1 = $d) =~ s/%(..)/pack("c",hex($1))/ge;
(my $v2 = $d) =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg;
printf("%s: %0*v2X %0*v2X\n", $d, ",", $v1, ",", $v2);
}
}
print "\n";
foreach(0x00..0xff){
(my $v1 = chr($_)) =~ s/(\W)/'%'.unpack('H2',$1)/eg;
(my $v2 = chr($_)) =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg;
printf("%d: %s %s\n", $_, $v1, $v2);
}
0036デフォルトの名無しさん
2011/08/23(火) 11:52:57.60keys %hash は、ループ開始時の値のままで、変更されない、
と安心していいんですか。
my $hash= {abc => q(abc), def => q(def) };
foreach my $alph (keys %$hash) {
$hash->{q(A) . $alph}= $hash->{$alph};
}
それとも、my @hash_keys= keys %$hash; と確保してから
foreach alph (@hash_keys) {...} とループ回した方が安全でしょうか。
0037デフォルトの名無しさん
2011/08/23(火) 12:10:01.48s/(\W)/'%' . unpack('H2', $1)/eg;
上のように.の前後と$1の前に半角スペースが入っているんだが
このスペースは必要なのか?削除してはだめなのか?
0038デフォルトの名無しさん
2011/08/23(火) 12:12:02.59自分で確かめるって術を知らんのかな
0039デフォルトの名無しさん
2011/08/23(火) 15:52:20.35悩み事も減っていいような気がする。
0040デフォルトの名無しさん
2011/08/23(火) 16:28:29.75可読性向上のためのスペースでなくても処理に影響はない
演算子の両側、コンマの後だけ、は割と一般的なスタイル
0041デフォルトの名無しさん
2011/08/23(火) 19:29:44.42keysが配列を返して、foreachの引数にした時点で別の配列になってるから大丈夫。
0042デフォルトの名無しさん
2011/08/23(火) 23:02:20.73うまく動きません。
my $filename = $ARGV[0];
open (FN, $filename);
while (<FN>) {
print $_;
}
どうしてでしょうか。
0043デフォルトの名無しさん
2011/08/23(火) 23:29:21.430044デフォルトの名無しさん
2011/08/23(火) 23:41:02.55スペース在りだとグロブと見做す
perldoc perlop では<$fh >と例が書いてあるが、
実際の所は、< $fh>だろうとグロブする。
0045デフォルトの名無しさん
2011/08/24(水) 00:20:34.07メールフォームを作成し、fake sendmailを使用して実際にメールが送れるかどうか確認しようとしていますが上手くいきません。
Apacheを使用しているのでerror.logを調べてみるとfake sendmailへのパスの記述が上手くいっていないようでした。
具体的には、
$SENDMAIL = 'C:\Program Files(x86)\sendmail\sendmail' ;
とパスを指定して代入し、
poen(MAIL, "| $SENDMAIL -i -t -f $FORM{'email'}")
というようにしてパイプを形成するつもりなのですが上手くいかず、error.logを確認すると
C:\\Program' \x82\xcd\x81A\x93\xe0\x95\x94\x83R\x83}\x83\x93\x83h\x82\xdc\x82\xbd\x82\xcd\x8aO\x95\x94\x83R\x83}\x83\x93\x83h\x81A\r,
というような記述があります。指定したパスのスペースのせいでおかしくなってしまっているようなのですが、
この場合、スカラー変数$SENDMAILに代入する「C:\Program Files(x86)\sendmail\sendmail」というパスはどのように記述すればよいのでしょうか?
初歩的な質問ですみません。よろしくお願いします。
0046デフォルトの名無しさん
2011/08/24(水) 02:08:59.31あなたが思ってるよりも PATH に関してはシビアですよ。サーバーのソフトは。
c:\sendmail にインストールしませう。
再インストール出来ないのなら
$SENDMAIL = '"C:\Program Files(x86)\sendmail\sendmail"';
とダブルクォーテーションで囲ってみませう。
0047デフォルトの名無しさん
2011/08/24(水) 14:52:35.52これが正しい
@aaa1=("aaa1,"aaa2","aaa3"");
@bbb=("bbb1","bbb2","bbb3");
&test(*aaa1,*bbb1);
sub test{
(*aaa2,*bbb2)=@_;
}
(@aaa2,@bbb2)=@_;では@bbb2が受け取れない
0048デフォルトの名無しさん
2011/08/24(水) 14:53:39.02@bbb=("bbb1","bbb2","bbb3"); ではなく
@bbb1=("bbb1","bbb2","bbb3"); ね
0049デフォルトの名無しさん
2011/08/24(水) 15:40:32.700050デフォルトの名無しさん
2011/08/24(水) 15:58:18.50グローバルな変数に代入したら引数渡しをする意味が薄れるのでは?
0051デフォルトの名無しさん
2011/08/24(水) 18:17:43.84前スレの質問者の自演か?
それはそうとして、前スレの質問者の希望は、&func(@lines,$aaa); だぞ。
(@aaa でも良いけどさ。)
正しいと主張するからには、せめて受け渡しをグロブではなく
見掛けだけでも配列にしろっての、、、
0052デフォルトの名無しさん
2011/08/24(水) 20:09:16.74sub func {
my ($array1_ref, $array2_ref) = (shift, shift);
}
じゃだめなのか
どうしてグロブを使うのか
0053デフォルトの名無しさん
2011/08/24(水) 20:25:33.59(多分意図とは違うコードを書いたんだろうとは思うけど)
0054デフォルトの名無しさん
2011/08/24(水) 20:26:59.4153のレスは無し。
0055デフォルトの名無しさん
2011/08/24(水) 21:37:48.64func @aaa1, @bbb1 ;
005645
2011/08/24(水) 21:49:05.73お返事ありがとうございます。
空白ありのPATHが危険であるということは知りませんでした。今後は気を付けたい思います。
仰る通りにC:直下にsendmailを移し、パスを設定し直したところ正常に動作しました。ありがとうございました。
ただ、PATHに空白がある場合の設定なのですが、"C:\Program Files(x86)\sendmail\sendmail"
というように" "で括っても、やはり正常に動作しませんでした。やはり空白の部分で区切られてしまうようです。
また、" "で括るようにご指導いただきましたが、" "で括った場合はエスケープシーケンスが
動作してしまうと考えてPATHを' 'で括っていたのですが、これは間違った考え方なんでしょうか?
よく考えるとパイプを形成するところを" "で括っているから、PATHを記述するところだけ''で括っても意味ないのかな・・・?
もし今後、このような空白が存在したり、\sや\nのようなエスケープシーケンスと同じような記述の並びが存在する
ディレクトリを指定しなければならなくなった場合、どのようにすればよいのか知っておきたいのですが、どうすればよいでしょうか。
0057デフォルトの名無しさん
2011/08/24(水) 21:58:33.57さらに単一引用符で囲ってるように見えるよ
005846
2011/08/24(水) 22:36:37.52やっぱりそうですよね。
" "という空白文字に対して"\ "というようにしてみたりしたんですが、上手くいかないです。
" "で括った範囲内の空白は、どのように記述すれば空白文字として認識されるようになるんでしょうか?
0059デフォルトの名無しさん
2011/08/25(木) 01:32:51.95"PATH" ってゆう風になるわけですが、これをさらに1つの文字列として解釈するには
' か " で囲めばいいわけですが、" で囲む場合は " をエスケープする必要があります。
'"PATH"' または "\"PATH\"" です。
006046
2011/08/25(木) 06:40:31.92お返事ありがとうございます。
あなたが仰られていることは、例えば「\n」という文字列は" "内ではエスケープシーケンスとして判別されてしまうので、
" "内で「\n」をエスケープシーケンスとして表現しないようにするときには「\\n」と記述すればよいというようなことですよね?
それは分かるのですが、それと同様に" "内における空白文字「 」に対してはどのような記述をすればよいかが分からないのです。
それとも空白文字は" "内では一切エスケープシーケンスや区切りの記号としての働きはしないということなのでしょうか?
>>45の内容ですが、'"PATH"'で囲い、エスケープシーケンスが働かないように\で防いでもやはりダメでした。
006146あらため45
2011/08/25(木) 06:42:53.85申し訳ありません;;
0062デフォルトの名無しさん
2011/08/25(木) 06:48:24.440063デフォルトの名無しさん
2011/08/25(木) 08:50:33.44http://www.atmarkit.co.jp/fwin2k/operation/command001/command4.html
> 一部ファイル名やパス名には、名前の中にスペース(空白記号)が含まれたものがある。
> たとえば、プログラムがインストールされる「Program Files」ディレクトリなどがこれに該当する。
> スペースは、コマンド プロンプトでは、引数やオプションの区切りに使われるため、
> このようなパスを指定する場合、引数全体をダブルクオートでくくる必要がある。
> 具体的には、
> dir "c:\program files\common files"
> などとする。
0064デフォルトの名無しさん
2011/08/25(木) 09:14:42.07perlに対するエスケープとOSに対するエスケープが混ざってるよ。
OSに対して"PATH"を渡す必要がある。
別の方法としてはdir /Xとかで表示される短いファイル名を使う。
>>63 の例だと dir C:\PROGRA~1\COMMON~1
0065デフォルトの名無しさん
2011/08/25(木) 12:42:11.81Cygwinだとpathの区切りは'/'だし、スペースは'\'でエスケープできるし。
/cygdrive/c/Program\ Files\(x86\)/sendmail/sendmail
どっちにしても丸ごと「"」で括ればスペースがあっても問題ないけどね。
"/cygdrive/c/Program Files(x86)/sendmail/sendmail"
ところでpath区切りは「\」のままで大丈夫なの? 「\\」じゃなくてもいいの?
"C:\\Program\ Files\(x86\)\\sendmail\\sendmail"
0066デフォルトの名無しさん
2011/08/25(木) 14:08:16.320067デフォルトの名無しさん
2011/08/26(金) 17:18:47.69http://msdn.microsoft.com/ja-jp/library/78f4aasd%28VS.80%29.aspx
> 二重引用符の直前にある円記号以外は、円記号 (\) として解釈されます。
↓ここからPerlの質問。
0068デフォルトの名無しさん
2011/08/27(土) 01:16:06.12ただ回答者はみんな紳士的だがな
0069デフォルトの名無しさん
2011/08/27(土) 01:20:23.900070デフォルトの名無しさん
2011/08/27(土) 07:03:53.92Perlについて
http://hibari.2ch.net/test/read.cgi/tech/1217851121/
0071デフォルトの名無しさん
2011/08/27(土) 10:43:00.53主に正規表現とファイル、ディレクトリの扱い
どう勉強したらいいんだろ
0072デフォルトの名無しさん
2011/08/27(土) 10:44:25.120073デフォルトの名無しさん
2011/08/27(土) 11:17:30.29細部まで理解しないで正規表現が必要になったときに書いてみて「この文字はこういうもの」って覚えてた
0074デフォルトの名無しさん
2011/08/27(土) 11:24:10.40正規表現使わないならperlを使う意味がない
0075デフォルトの名無しさん
2011/08/27(土) 11:41:45.31たくさんプログラム書いたほうがいいのはわかるけど
理解がいまいち浅いから中々難しいわ
>>73
しばらくはそ場面で参照しながら段々覚えていけばいいか
>>74
テキスト処理考えると当然重要になってくるもんな
その内詳説正規表現かクックブック買おうと思ってるんだが
0076デフォルトの名無しさん
2011/08/27(土) 12:03:25.13正規表現なんてPerlに限らずエディタとかgrep/sedでも使えるから
そういうので正規表現検索や置換やって覚えりゃいいんじゃないかな
あとはPerlでその正規表現をどうやって利用するかだけ覚えりゃいい
0077デフォルトの名無しさん
2011/08/27(土) 12:46:49.280〜Zまでの36進数に変換するにはどうしたらいいんですか?
0078デフォルトの名無しさん
2011/08/27(土) 13:54:56.00商を置換する
0079デフォルトの名無しさん
2011/08/27(土) 14:27:09.40便利な関数は無いから、自分で基数変換(底変換)。
http://ja.wikipedia.org/wiki/%E4%BD%8D%E5%8F%96%E3%82%8A%E8%A8%98%E6%95%B0%E6%B3%95#.E8.87.AA.E7.84.B6.E6.95.B0.E3.81.AE.E8.A1.A8.E8.A8.98
0080デフォルトの名無しさん
2011/08/27(土) 15:12:25.75Math::BaseCalc
0081デフォルトの名無しさん
2011/08/27(土) 20:55:42.09昔のperlの組み方の方が使いやすいから使ってるよ
上司もそうだし
モジュールも全く使ってないし、使っているのはjcode.plだけ
サブルーチンは.plファイルをrequireして&呼び出しで使っている。
あと使っているはprint,foreach,open,push,popなどの基本的な関数だけ
それでもちゃんと動作するからいいんだよ
0082デフォルトの名無しさん
2011/08/27(土) 20:59:46.980083デフォルトの名無しさん
2011/08/27(土) 22:59:49.18みたいな使い方で用が足りているなら
それはそれで問題ない
この先もずっとそれで用が足りる保証はないけどね
0084デフォルトの名無しさん
2011/08/27(土) 23:08:44.46釣りなんだろうけど
0085デフォルトの名無しさん
2011/08/28(日) 00:25:14.70jcodeだめだわーw
だって中国語を扱えない。
0086デフォルトの名無しさん
2011/08/28(日) 00:38:55.96データ保存ファイルがANSI形式で、ユニコード文字を送信して書き込んだ場合
ブラウザが勝手に〜;の形にしてくれるから、それを読み出せば
ブラウザにはユニコード文字が表示される
だから問題なかったよ
0087デフォルトの名無しさん
2011/08/28(日) 00:40:29.59モジュールにする時点で、出来る限り汎用性を持たせた方が良いの?
0088デフォルトの名無しさん
2011/08/28(日) 00:44:49.37データ保存ファイルがANSI形式じゃなかったら?
そりゃ、お前に都合のいい条件なら、
できるだろうさw
でもな。それはお前の限界の範囲までの話だ。
お前の上司も限界が低そうだな。
0089デフォルトの名無しさん
2011/08/28(日) 00:49:11.47>>81の上司よりもPerlに詳しい自信があるなw
まあ他の言語も多数やってきたからってのもあるんだろうが。
新しいことに手を出さない人間はダメだよ。
「これで今までやってこれた」は自慢じゃなくて
諦めた人間のセリフだから。
0090デフォルトの名無しさん
2011/08/28(日) 01:02:17.927以降はどうなるの?
0091デフォルトの名無しさん
2011/08/28(日) 01:08:38.70「時代に背を向け古いコードを書く俺って、なんかかっこ良くね?」
って中二病患者のガキだろ。
>>90
6がvaporwareなのに7の心配をして何の意味がある?
0092デフォルトの名無しさん
2011/08/28(日) 20:08:39.14そういうサーバーだと昔のperlで書くしかないね
0093デフォルトの名無しさん
2011/08/28(日) 21:03:52.08>>84
0094デフォルトの名無しさん
2011/08/28(日) 21:16:01.49アホか? 薦めてないだろ。
お前みたいな独りよがりは死ねよ。
0095デフォルトの名無しさん
2011/08/28(日) 21:25:08.04スレの流れを読んだうえで、その擁護レスとも取れるレスを書いたのか?
>>47
↓
>>51
↓
>>81
この流れだと読み方によっては「昔のperl」=「perl4記法」だぞ。
0096デフォルトの名無しさん
2011/08/28(日) 21:27:21.27◯普通に読めば
0097nobodyさん
2011/08/28(日) 23:58:47.23仮面ライダーV3みたいなもん。
0098デフォルトの名無しさん
2011/08/29(月) 00:01:06.010099デフォルトの名無しさん
2011/08/29(月) 00:38:56.42> 今でもモジュールが使えないサーバーとかあるからね
今はVPSでroot権限持てるサーバーが格安であるんだが?
開発したいのなら、開発向けのサーバー使えよ。
> そういうサーバーだと昔のperlで書くしかないね
”昔の”ってPerlのバージョンなんだ?言ってみろ。
知らないから昔のって言ってるんだろ?
俺にとっては昔のはオブジェクト指向はもとより
Encodeモジュールも搭載してないPerlだ。
それはPer.5.8よりも前のPerl。5.8は2002年登場。
10年近く前のPerlで書くしかない状況なんてまず無い。
10年以上前のPerlでそこから成長してない奴はプログラマ失格だ。
0100デフォルトの名無しさん
2011/08/29(月) 00:39:43.100101デフォルトの名無しさん
2011/08/29(月) 00:51:32.950102デフォルトの名無しさん
2011/08/29(月) 01:26:09.78対応が含まれてないのならご愁傷さまだよなw
ハードで言えば、ハードウェアが古くなったのでリプレイスしますが、
ハードウェアは全く同じものにリプレイスします。性能は変わりません。
みたいなw
0103デフォルトの名無しさん
2011/08/29(月) 06:37:55.461993/02/28 programming perl 日本語第一版(赤ラクダ、perl4対応版)
1994/10/17 perl5.000
1997/12/25 programming perl 日本語第二版(perl5対応版)
ttp://examples.oreilly.com/cjkvinfo/doc/jp-trans.catalog
2000/XX/XX Larry: Perl6 開発開始
2001/04/08 perl5.6.1
2002/XX/XX Larry:「クリスマスにはリリースするよ。いつのクリスマスかは解んないけど(意訳)」
2003/09/25 perl5.8.1 => 以降のperl5系は「メンテバージョンになるだろう」と皆が思った
2003/12/25 裸で PC の前で一晩待った
2005/02/06 Audrey姐さん、あまりの遅さに切れ Pugs 発表
2007/12/18 perl5.10.0 => ああ、これが5系の最終ver.か…、にしては新機能てんこ盛り??
2009/04/17 Parrot1.0 => 9年すか…、、、
2009/XX/XX Rakudo Perl 開発スタート、これが perl6 になるのか?
2010/04/12 perl5.12.0 => えっ?
2010/07/29 Rakudo Perl 最初のリリース
2011/04/14 perl5.14.0 => おいおい
0104デフォルトの名無しさん
2011/08/29(月) 06:57:40.36ループを回したいのですが、どうやればいいですか?
Date::manipとかTime:Pieceとかを使うんでしょうか?
0105デフォルトの名無しさん
2011/08/29(月) 11:53:12.340106デフォルトの名無しさん
2011/08/29(月) 11:58:13.66my $start = Time::Piece->strptime('1900-01-01', "%Y-%m-%d");
my $end = Time::Piece->strptime('2011-08-29', "%Y-%m-%d");
my $day = 24 * 3600;
for (my $t = $start; $t < $end; $t += $day) {
## 祝日判定
}
こんな感じでやりましたが、まだ祝日判定がうまく行ってません。
0107デフォルトの名無しさん
2011/08/29(月) 12:24:33.24ないかと。
1900年からならもう明治になってるし、どういう日が祝日かは調べりゃ
わかると思う。
0108デフォルトの名無しさん
2011/08/29(月) 18:12:25.04プログラムなんてエラーが出なくて動作して使えればいいわけだから
好きな方の組み方で良いと思う。
0109デフォルトの名無しさん
2011/08/29(月) 18:26:04.820110デフォルトの名無しさん
2011/08/29(月) 18:45:37.830111デフォルトの名無しさん
2011/08/29(月) 18:59:22.760112デフォルトの名無しさん
2011/08/29(月) 19:56:14.14祝日と、そしてもしかして土日で何か分岐するような
大掛かりなことをやりそうなのは銀行かそれに携わる人かなぁと
祝日の他に、もう一つ、処理すべき巨大で長大な時系列のデータが背後に控えてる……ってのが直感
0113デフォルトの名無しさん
2011/08/29(月) 20:02:54.52想像力不足だな
0114デフォルトの名無しさん
2011/08/29(月) 20:23:58.88他にどんなものが……
0115デフォルトの名無しさん
2011/08/29(月) 20:47:43.27大手IT会社とかの人間だぞ、三菱とか。
それが、平日の昼間に2chに書き込むか?
logで直ぐバレるのに?
って言う具合の想像力の事じゃね?
俺は単なる宿題に一票。
0116デフォルトの名無しさん
2011/08/29(月) 20:51:11.58そんなアタリマエのことどうでもいい。
0117デフォルトの名無しさん
2011/08/29(月) 21:04:47.570118デフォルトの名無しさん
2011/08/29(月) 21:06:16.170119nobodyさん
2011/08/30(火) 22:35:03.30祝日判定用マクロ
http://www.h3.dion.ne.jp/~sakatsu/holiday_logic.htm
0120104
2011/08/31(水) 00:34:05.18ちなみに銀行関係ではありません。
0121デフォルトの名無しさん
2011/08/31(水) 00:41:21.92このまま教えてくれないままだったら俺の夏が終わりそうにない
ね、お願い
0122デフォルトの名無しさん
2011/08/31(水) 00:58:36.19祝日が増えたり、定義が変わった段階でのパターンファイルを用意するとかすれば
色々対応できそうだが。。。
0123デフォルトの名無しさん
2011/08/31(水) 01:01:44.360124デフォルトの名無しさん
2011/08/31(水) 01:33:14.950125デフォルトの名無しさん
2011/08/31(水) 02:08:36.440126124
2011/08/31(水) 02:27:29.10春分と秋分の計算式が1900年まで考慮されてたから早合点したわ
1948年より前なら春分・秋分に相当する日でもちゃんと祝日扱いしないようになってるね
http://api.metacpan.org/source/KZTOMITA/Calendar-Japanese-Holiday-0.03/lib/Calendar/Japanese/Holiday.pm
0127デフォルトの名無しさん
2011/08/31(水) 14:41:42.220128104
2011/08/31(水) 21:00:21.02ほかにも大量の雑多なデータがあって、、、
1948以前に対応しようとすると、大変なのですね。、
0129デフォルトの名無しさん
2011/08/31(水) 21:08:47.270130デフォルトの名無しさん
2011/08/31(水) 22:08:57.05これでいいじゃん
0131デフォルトの名無しさん
2011/08/31(水) 22:10:41.670132デフォルトの名無しさん
2011/08/31(水) 22:23:19.33ここ100年間の祝日つまり休みの日のリストが欲しいってことは、
銀行じゃなきゃ何かしらの史学科の学生か、
それとも株か。
史学科や民俗学系統の文系の学生ならそういう祝日リストを研究室単位で持ってそうなモンで、
でもそれはない。
時系列で記録された大量のデータを喰わせて、そのレコードの祝日判定してく……
ってな案件はそうそう転がってない。
0133デフォルトの名無しさん
2011/08/31(水) 22:33:13.161900年以降なら、明治33年以降だから、問題ないだろう。
一応wikipedia
http://ja.wikipedia.org/wiki/%E4%BC%91%E6%97%A5
0134デフォルトの名無しさん
2011/09/01(木) 02:03:41.760135デフォルトの名無しさん
2011/09/01(木) 23:03:37.460136デフォルトの名無しさん
2011/09/01(木) 23:23:45.900137デフォルトの名無しさん
2011/09/02(金) 03:03:06.020138デフォルトの名無しさん
2011/09/02(金) 10:00:10.76(?!fuga)hoge
と書いたらうまくいきません。どうしたらいいの
ちなみに条件判断とかじゃなくて、できれば正規表現だけでやりたいです
0139デフォルトの名無しさん
2011/09/02(金) 10:05:08.040140デフォルトの名無しさん
2011/09/02(金) 10:27:10.84いえ、やってないです
もっと厳密にいうと、ほんとは「fugaではじまらない」でなくても「fugaが含まれない」でもいいんです。なので条件判断と組み合わせれば可能だと思うのですが、できれば正規表現だけでやりたいのです
0141デフォルトの名無しさん
2011/09/02(金) 10:39:39.220142デフォルトの名無しさん
2011/09/02(金) 10:41:13.22もし期待した結果が得られないなら正規表現が間違って
いるんじゃないかなぁ。fugaとhogeを具体的に示して
駄目な例も出さないと一般論では難しいな。
たぶん正規表現は書いたとおりに動いてると思うw
0143デフォルトの名無しさん
2011/09/02(金) 10:49:34.34直前でなくてもいいです
>>142
これなんですけど
use strict;
use warnings;
while (my $str = <STDIN>) {
chomp ($str);
last if ($str eq 'end');
if (
$str =~ /
(?!fuga)hoge
/x
) {
print "$& --- match¥n";
} else {
print "no¥n";
}
}
実行すると
fugahoge
hoge --- match
となって、fugaがついているhogeにもマッチしてしまうんです
勉強中の初心者なのでなにかとんでもない勘違いしてたらすみません
0144デフォルトの名無しさん
2011/09/02(金) 11:21:37.15たとえば $str =~ / hoge(?!fuga) /x と指定すると
hogehoge にはマッチするが hogefuga にはマッチしない。
ということのようだ。
条件式も併用してたとえば
$str =~ / (.*)hoge /x and $1 !~ /fuga/
みたいにしないとだめっぽいが。
あとは識者待ち。
0145デフォルトの名無しさん
2011/09/02(金) 11:22:15.60要するに以下のような条件を1つの正規表現にまとめたいと?
if ( $str !~ /fuga/ and $str =~ /hoge/ )
0146デフォルトの名無しさん
2011/09/02(金) 11:28:33.90そうなんです。hoge(?!fuga) だと前方には効かなくて
>>145
そうです。
やはり正規表現だけでは無理なものなんですかね
0147デフォルトの名無しさん
2011/09/02(金) 11:37:45.510148デフォルトの名無しさん
2011/09/02(金) 11:44:37.44すごい、できました!ありがとうございます
みなさんもありがとうございました
0149デフォルトの名無しさん
2011/09/02(金) 11:47:13.97> (?<!fuga)
これってバージョンいくつ以降で有効?
0150デフォルトの名無しさん
2011/09/02(金) 11:52:07.16取出しは$&でなく$1になるけど。
/^(?:(?!fuga).)*(hoge)(?!.*fuga)/
0151デフォルトの名無しさん
2011/09/02(金) 13:06:14.75$str = pops ($str) ; とかの代入なしで、 pops ($str) ; と書ける方法ありませんか?
下は書いたモンです
sub pops ($) {
my @t = split // , shift ;
pop @t ;
return join "", @t ;
}
sub pushs ($$) {
my $c = shift ;
my @t = split // , shift ;
push @t , $c ;
return join "", @t ;
}
my $str = "apple" ;
print "original : $str\n" ;
$str = pops ($str) ;
print "pops : $str\n" ;
$str = "apple" ;
$str = pushs ("s",$str) ;
print "pushs : $str\n" ;
0152デフォルトの名無しさん
2011/09/02(金) 13:26:32.541998年リリースの5.005から
http://perldoc.perl.org/perl5005delta.html#New-regular-expression-constructs
>>151
プロトタイプを(\$)とかにしてリファレンスで受ければできるけど、
ところでchopという標準関数をご存知だろうか
0153デフォルトの名無しさん
2011/09/02(金) 13:57:22.51use utf8 してれば、各関数はそれぞれ下の1行で済む。
pops → substr($str, 0, 1);
pushs → $str .= 'TEST';
もっと付加価値を付けなきゃ作る意味が無いよ。
0154デフォルトの名無しさん
2011/09/02(金) 15:47:46.46$_[0]が引数のエイリアスだからそれを操作すれば呼び出し元を操作したことになるよ
sub pops ($) {
my @t = split // , $_[0] ;
pop @t ;
$_[0] = join "", @t ;
}
0155デフォルトの名無しさん
2011/09/02(金) 16:27:18.62> 1998年リリースの5.005から
おお。ありがとう。
手元の「新Perlの国へようこそ Perl5対応版」には (?<= ) と (?<! ) は載ってなかった。
かわりに ?PATTERN? なんてのを再発見。こんなの使ったことなかったなあ。
いい機会なんで正規表現の仕様を見直して覚え直しておきます。
0156デフォルトの名無しさん
2011/09/02(金) 16:30:51.290157デフォルトの名無しさん
2011/09/02(金) 16:36:34.01(?<= ) と同じような機能で量指定子も使える\Kというのも最近できたよ
0158デフォルトの名無しさん
2011/09/02(金) 16:40:03.27/^(?!.*?fuga)(?=.*?hoge)/
でどう?
>>154
返り値は?
0159デフォルトの名無しさん
2011/09/02(金) 22:45:51.20どうしても lookahead で表現したいとなると、以下みたいな超絶マゾ正規表現になる。
メリット皆無。
while( <DATA> ){
chomp ;
if (m{ (?: # キャプチャしない。
(?<=(?!fuga).{4}) # fuga じゃない 4 文字 の右にカーソル
| # か、
(?<=^.{3}) # 行頭の任意の 3 文字 の右にカーソル
| # か、
(?<=^.{2}) # 行頭の 2 文字 の右にカーソル
| # か、
(?<=^.) # 行頭の 1 文字 の右にカーソル
| # か、
(?<=^) # 行頭の 0 文字 の右にカーソル
)
hoge # で且つ hoge
}x ){
print "$_: hit!\n" ;
}
}
__DATA__
fugahoge
hoge
dhoge
ddhoge
dddhoge
ddddhoge
dddddhoge
0160デフォルトの名無しさん
2011/09/02(金) 23:06:02.145.14.1だと、m{\K(?:(?!fuga).{4}|^.{0,3})hoge} で行けるみたい。
へ〜
0161デフォルトの名無しさん
2011/09/03(土) 00:35:11.960162デフォルトの名無しさん
2011/09/03(土) 01:03:35.710163デフォルトの名無しさん
2011/09/04(日) 14:22:30.05imgタグでdata-src属性のURLが特定の正規表現にマッチするもののみを、全て抽出することは出来るでしょうか?
imgタグのsrc属性であれば$mech->find_all_images(url_regex => qr//)としてやることで出来ると分かったのですが、
data-src属性の場合のやり方がわかりません。どなたかご助言していただけると幸いです _ _
0164デフォルトの名無しさん
2011/09/04(日) 18:39:36.69聞いたことないんだが。
0165デフォルトの名無しさん
2011/09/04(日) 19:15:05.120166デフォルトの名無しさん
2011/09/04(日) 21:38:51.91$mech->content()を別のパーザに突っ込むしかない。
0167デフォルトの名無しさん
2011/09/04(日) 22:43:02.41しかしHTML5ってまだ勧告レベルでもないんだろ。(2014年仕様確定予定らしい)
世の中気の早い奴が多すぎるわな。
0168163
2011/09/05(月) 09:10:35.64>>165 ありがとうございます。なるほど・・・
>>166 ありがとうございます!そうしますー
>>167 ですねー
ありがとうございました!
0169デフォルトの名無しさん
2011/09/05(月) 19:14:38.22最近のメールフォーム用CGIは機能が多すぎてJqueryのバリデーションと機能が被ってしまいます。
そこでJqueryでバリデーションしてデータだけをpostさせたいのですが、ただデータを送るだけのメールフォームCGIはどういうふうに書けばいいのでしょうか。
0170デフォルトの名無しさん
2011/09/05(月) 19:19:38.27>>1
webprogへ行け
0171デフォルトの名無しさん
2011/09/05(月) 21:34:28.95既存のCGIからバリデーション部分を削除すれば目的は達せられる。
だがJavaScript(jQuery)の動作しない環境から送られたデータはどうするつもりだ。
あるいは悪意をもって偽装したデータを投げてくる奴がいないとも限らないぞ。
スレ違いでアレだが、送信されてきたデータは常に疑ってかかれ。検証しろ。
問題ないシロモノという前提で扱ってるといつか痛い目をみるぞ。
0172デフォルトの名無しさん
2011/09/05(月) 22:11:49.39171さんはmalaさんですか???
まじ頭がセキュオタになってますよ
0173デフォルトの名無しさん
2011/09/05(月) 22:14:18.160174171
2011/09/05(月) 22:35:02.65いや、セキュオタ(?)でなくてもこれくらいは普通に気を使うでしょ?JK
ユーザが自分だけなら多少のコーディングの手抜きは運用でカバーもできるけど。
受付フォーム(を受け取るCGI)なんて誰がどう使うかわかんないんだからさ。
0175デフォルトの名無しさん
2011/09/05(月) 22:36:28.720176デフォルトの名無しさん
2011/09/05(月) 22:44:39.38誘導されてるんだから煽りにかまってないで放置でおk
0178Perl忍者
2011/09/05(月) 22:52:25.12なにを今更感でっぱなし
0179デフォルトの名無しさん
2011/09/05(月) 22:54:42.610180Perl忍者
2011/09/05(月) 22:54:50.430181デフォルトの名無しさん
2011/09/06(火) 00:37:35.040182デフォルトの名無しさん
2011/09/06(火) 01:49:50.970183デフォルトの名無しさん
2011/09/06(火) 03:20:52.67何が原因なんでしょうか? 技術面、それとも人的資源面?
ttp://strawberryperl.com/
リポジトリもコミットが途絶えているみたいですし、心配です。
ttp://hg.curtisjewell.name/Perl-Dist-Strawberry-BuildPerl-5140
ttp://hg.curtisjewell.name/Perl-Dist-Strawberry-BuildPerl-5141
ここでもドンピシャな回答はなかったみたいです。
ttp://www.perlmonks.org/?node_id=910099
0184デフォルトの名無しさん
2011/09/06(火) 06:31:53.13放置放置
0185デフォルトの名無しさん
2011/09/06(火) 15:19:26.18どのようにしたら良いのでしょうか?
ためしにglobで拾ってみると下記のようになります。
�@の部分をデスクトップディレクトリにしたいのですが、どう書けばよいのでしょうか?
use utf8;
use Encode;
#拾える(Documents and SettingsをDocuments*としてスペースを書かない)
my $path = [ map{ encode('utf8', decode('cp932', $_ ) ) } glob( encode('cp932', "/Documents*/user/デスクトップ/*" ) ) ];
#拾えない
my $path = [ map{ encode('utf8', decode('cp932', $_ ) ) } glob( encode('cp932', "/Documents and Settings/user/デスクトップ/*" ) ) ];
my $outPath = "�@どう書いたらいい???";
open(OUT, ">$outPath")
print OUT encode('utf8', "あああああ");
close(OUT);
0186185
2011/09/06(火) 15:27:11.93今ググっていたらeclipseの問題のような気がしてきた。。
0187デフォルトの名無しさん
2011/09/06(火) 16:02:43.691ハッシュとは別にキーの配列作る
2ハッシュの持つ要素に順序数を含める
どっちがよさそうですか?
1は
@key=(qw/aaa bbb ccc/);
@hash{@key} = (9,8,7);
2は
$hash{aaa}=[0, 9]
のような感じです
それとも単純に[0, 'aaa', 9]と全部配列にまとめてしまうのがいいでしょうか?
0188デフォルトの名無しさん
2011/09/06(火) 16:07:20.10http://perldoc.jp/docs/perl/5.10.1/perlfaq4.pod#How32can32I32always32keep32my32hash32sorted63
0189デフォルトの名無しさん
2011/09/06(火) 17:45:02.85個数が変化するので$1などは使えないです。
m|value=([^ ]+)|gxms;
0190デフォルトの名無しさん
2011/09/06(火) 18:32:17.11while等でループまわして$1を適当な配列にpush
0191デフォルトの名無しさん
2011/09/06(火) 18:34:40.102.はhash呼ぶ度に、sort かけなきゃいけないから、
頻繁に呼ぶ場合にはメリットがない
for ( sort keys %hash ){ #normal
for ( sort { $hash{$a}->[0] <=> $hash{$b}->[0] } keys %hash ){ #順序数を含める
1.は良く使う手段。
>>188はウィザードのやる事で、
>本当にこれが必要ですか? :)
てーのは、1.みたいな手段を念頭に入れた上での記載。と、いらぬフォロー。
>>189
my @dat = m|value=([^ ]+)|gxms;
my @dat = ( $hoge =~ m|value=([^ ]+)|gxms ) ;
0192デフォルトの名無しさん
2011/09/06(火) 18:41:30.76my $str = <<'EOD';
value=foo
value=bar value=baz
value=
quux
value=
lvalue=corge
rvalue=grault
EOD
my(@v1, @v2);
push @v1, "[$1]\n" while $str =~ m|value=([^ ]+)|gxms;
push @v2, "[$1]\n" while $str =~ /\bvalue=(\S+)/g;
print @v1, "---\n", @v2;
0193デフォルトの名無しさん
2011/09/06(火) 19:47:00.69my $path = [ map{ encode('utf8', decode('cp932', $_ ) ) } glob( encode('cp932', q{"/Documents and Settings/user/デスクトップ/*"} ) ) ];
my $outPath = "/Documents and Settings/user/デスクトップ/foo.txt";
0194185
2011/09/07(水) 01:10:47.58一つ目は出来ました。
二つ目はやはりできないようです。
eclipseでググッたらスペースうんたらとあるのでやはりeclipseの問題のようです。
ありがとうございました。
0195デフォルトの名無しさん
2011/09/07(水) 02:36:27.74perlは、SJIS、EUC、UTF-8の3つの文字コードの中で何が一番適しているのですか?
それぞれの良い点と悪い点も教えていただきたいです。
もし、ほとんど差がないとすれば、ホームページをつくる上でこれから主流になると
考えられる文字コードがどれか教えてください。よろしくお願いします。
0196デフォルトの名無しさん
2011/09/07(水) 02:42:19.81あとは内部表現でggr
0197デフォルトの名無しさん
2011/09/07(水) 03:39:06.29今のPerlはUTF-8(かLatin-1かascii)で書くことが前提なのでUTF-8一択。
他のコードで書けなくもないけど実行前にフィルターかけるだけでいろいろ問題がでるので強く非推奨とされている。
ホームページ → 個人的な感触では既にUTF-8が主流
0198デフォルトの名無しさん
2011/09/07(水) 08:27:35.87-------------------
AAAA_A9999.jpg
AAAA_B1111.jpg
AAAA_C0000a.jpg
-------------------
といった感じでファイルがあるんですが、
これを _[ABC]以降の文字列でソートした結果を得たいです。
AAAA_C0000a.jpg
AAAA_B1111.jpg
AAAA_A9999.jpg
が期待する結果
dir /b | perl -ne "〜"
とワンライナーで行いたいです、ご教授お願いします。
0199デフォルトの名無しさん
2011/09/07(水) 08:46:47.40http://perldoc.jp/docs/perl/5.10.1/perlfaq4.pod#How32do32I32sort32an32array32by32anything41
dir /b | perl -e "@i=map/(?<=_[ABC])(.+)/,@f=<>;print@f[sort{$i[$a]cmp$i[$b]}0..$#i]"
0200デフォルトの名無しさん
2011/09/07(水) 08:47:27.920201デフォルトの名無しさん
2011/09/07(水) 09:59:03.82$outPathをencodeし忘れてない?
0203デフォルトの名無しさん
2011/09/07(水) 14:53:17.89'"document files"'
0204194
2011/09/07(水) 16:47:53.40おおおーーー!!
出来ました。
冷静に考えればglob()の時encodeしてるんだからopen()の時もencodeしないとですね。
スコーンと抜けてました。
ありがとうございます。
0205デフォルトの名無しさん
2011/09/08(木) 00:54:41.53大文字や小文字を同一視したり、
9の次に10が来たりするような感じの
0206デフォルトの名無しさん
2011/09/08(木) 01:21:17.16使ったことはないけど
0207デフォルトの名無しさん
2011/09/08(木) 18:58:02.37何時間ぐらいで身につくの?
やる気さえあれば
0209デフォルトの名無しさん
2011/09/08(木) 19:13:46.16トリッキーなやり方気にしないなら数時間〜数十時間?
当分の間はファニー文字付け忘れてコンパイラに怒られると思うがw
0210デフォルトの名無しさん
2011/09/08(木) 19:30:43.370211デフォルトの名無しさん
2011/09/08(木) 19:45:28.90最初のうちは???だろうなあ
0212デフォルトの名無しさん
2011/09/08(木) 20:08:31.890213デフォルトの名無しさん
2011/09/08(木) 20:26:09.450214デフォルトの名無しさん
2011/09/09(金) 02:16:57.82その流れからか、% や @ を使わずに、無駄に
$data = []
とか、
$data = {}
とかやるクセが付いたw
0215デフォルトの名無しさん
2011/09/09(金) 07:21:31.560216デフォルトの名無しさん
2011/09/09(金) 09:17:53.500217デフォルトの名無しさん
2011/09/09(金) 12:27:31.840218デフォルトの名無しさん
2011/09/09(金) 12:33:28.67use lib qw(/cgi-bin/mycpan/);
use URI::Escape;
use SHA::PurePerl qw(hmac_sha256_base64);
なぜかこれが通りません
Escape.pmは/cgi-bin/mycpan/URI/に
PurePerl.pmは/cgi-bin/mycpan/SHA/に入っており、実行ファイル(test.cgi)は/にあります。
/ test.cgi
└cgi-bin−mycpan┬SHA−Escape.pm
└URI−PurePerl.pm という感じになっています。
これだけでエラーの原因が分かる方いませんか?
0219デフォルトの名無しさん
2011/09/09(金) 12:34:49.640220デフォルトの名無しさん
2011/09/09(金) 12:44:57.740221デフォルトの名無しさん
2011/09/09(金) 12:47:42.11だから困っていて・・・
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, xxx@xxx and inform them of the time the error occurred,
and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
0222デフォルトの名無しさん
2011/09/09(金) 12:56:10.32下記よりシンプル&同等以上の速度で処理するにはどのように書けばよいでしょうか?
my @hoge = ( "AAA","BBB" )
my @fuga = ();
map{ push( @fuga, { NAME => $_ } ) } @hoge;
0223デフォルトの名無しさん
2011/09/09(金) 12:57:00.58板違いだからwebprog板へどうぞ。
ブラウザの結果じゃなくて鯖側にエラーログのファイルがあるから探すように。
0224デフォルトの名無しさん
2011/09/09(金) 12:58:50.71失礼しました
0225デフォルトの名無しさん
2011/09/09(金) 13:06:07.88文面どおりに解釈すると
my @fuga = ( {NAME=>'AAA'}, {NAME=>'BBB'} );
とか?
でも速度の問題は実際に計ってみないとわからないし、そんな些細な部分の速度を気にしても費用対効果が悪すぎる。
>>222の書き方でも十分シンプル&高速だと思うよ。
0226デフォルトの名無しさん
2011/09/09(金) 13:28:50.21速度はほとんどかわらないが(ちょっとだけ速かった)、シンプルはシンプル。
my @fuga = map {NAME => $_}, @hoge;
0227デフォルトの名無しさん
2011/09/09(金) 13:54:03.030228デフォルトの名無しさん
2011/09/09(金) 14:11:01.97うん。そゆこと。
2個ぐらいなら、普通に Hoge($opt1, $opt2, $opt3) とか渡してるんだけど、
3個以上になったり、その戻り値をそのまま他の関数に渡したいときはハッシュのリファレンスが
もの凄く楽ちん。
0230デフォルトの名無しさん
2011/09/09(金) 18:13:32.03if($LOGIN==0){
print "location:login_form.cgi\n";
}
print "\n";
if($FORM{'soushin'} ne ""){
&toukou_write; #投稿の書き込み
}
書き込みのsoushinボタンを押したとき、ログインしてないときはログインフォームに飛ばすようにしていますが
ログインフォームに飛んだはずなのに投稿の書き込みが実行されてしまいます。
locationで飛んだらそれ以降は実行されないんじゃないんですか?
0231デフォルトの名無しさん
2011/09/09(金) 18:20:05.47誘導も面倒だから答えてあげるけど
Content-typeの記述したらそうなるさ。
0232デフォルトの名無しさん
2011/09/09(金) 18:25:30.020233デフォルトの名無しさん
2011/09/09(金) 18:39:24.00#perlでは全てが文字列
use strict ;
use warnings ;
my $s = 4 ;
my $t = 7 ;
print $s . $t,"\n"; # 「47」を出力 (文字列として結合)
print $s + $t,"\n"; # 「11」を出力 (数値として足し算)
print $s x $t,"\n"; # 「4444444」を出力 (文字「4」を7回出力)
print $t x $s,"\n"; # 「7777」を出力 (文字「7」を4回出力)
0234デフォルトの名無しさん
2011/09/09(金) 18:55:17.30全て文字列…ではないぞ
. + x といった演算子が文字列として解釈するだけだ
0235デフォルトの名無しさん
2011/09/09(金) 23:55:58.630236デフォルトの名無しさん
2011/09/10(土) 01:19:17.94これに5を足して下記のようにしたいのですが、シンプルに書くとどんな感じになりますか?
mapあたりを活用するんでしょうか。
my $aaa = [ '01:00', '02:00', '04:00',〜,〜 ];
my $bbb = 〜
結果→ $bbb = '06:00;07:00;0900;〜;〜'
0237デフォルトの名無しさん
2011/09/10(土) 01:35:23.270238236
2011/09/10(土) 01:47:53.41どんな書き方になりますか?
今はこんなどんくさいことになっています。。↓
my $aaa = [ '01:00', '02:00', '04:00',〜,〜 ];
foreach( @$aaa ){
if( m|^(\d+):(\d+)$|xms ){
$time .= sprintf(",%02d:%02d",$1+5,$2);
}
}
$time =~ s/^,//xms;
0239デフォルトの名無しさん
2011/09/10(土) 03:16:52.14$bbb =~ s/([0-9]{2}):/sprintf '%02d:', $1 + 5/ge;
こんな感じでどう?
19時以降だとありえない時間になるけどw
0240デフォルトの名無しさん
2011/09/10(土) 03:58:39.44my $bbb = join(';',
map{
m/(\d\d):(\d\d)/ ? sprintf("%02d:%02d", ($1 + 5) % 24, $2) : $_
} @{$aaa}
);
0241デフォルトの名無しさん
2011/09/10(土) 06:17:52.52その m// と s/// についてる xms ってオプション、すげー気持ち悪いんだけど…。
0242デフォルトの名無しさん
2011/09/10(土) 06:30:16.08strict, warnings と同様、空気同然に付ける人もいる
0243デフォルトの名無しさん
2011/09/10(土) 06:31:08.890244デフォルトの名無しさん
2011/09/10(土) 07:18:08.96/x 使ってる割には空白も入れてないし、
/m 使うんなら ^ $ と \A \z の使い分けも普段から正確にしといたほうがいい
0245デフォルトの名無しさん
2011/09/10(土) 07:20:03.080246デフォルトの名無しさん
2011/09/10(土) 08:05:06.641つのスカラー変数に文字列と数値が共存してるから各々を使い分けたりもできるね
404 Blog Not Found:perl - Scalar::Util::dualvar()
http://blog.livedoor.jp/dankogai/archives/51129553.html
0247デフォルトの名無しさん
2011/09/10(土) 09:29:42.31バイナリデータと文字列って区別つくの?
0248デフォルトの名無しさん
2011/09/10(土) 10:21:18.940249デフォルトの名無しさん
2011/09/10(土) 10:37:44.32つまり一般的に
文字列 ⊆ バイナリデータ
が成り立つ。
これを
文字列 = バイナリデータ
とするのが、UNIX に古くから伝わるテクニック
で、UNIX 版の Perl は binmode 関数を必要と
していない。binmode 関数はDOS系のOS、あるいは
DOS系OS用スクリプトと互換性を持たせたい場合
に用意されている。
0250デフォルトの名無しさん
2011/09/10(土) 10:47:39.10テキストデータとバイナリデータの区別はつくのかという一般的な命題?
0251デフォルトの名無しさん
2011/09/10(土) 11:31:15.68そうそう。文字列はバイナリデータと違ってメタ情報を含んでいる。
バイナリデータは単なるバイトの並びだが、文字列は、文字コードというメタ情報
1文字を構成する要素(1文字=何バイトか)とかそういう情報を含んでいる。
だから、数値はどの文字コードでも1バイトで同じコードであるように(文字コード側が譲歩して)
作られているから数値も文字列で扱うのは可能だけど、少なくともバイナリと文字を見分けるための
型情報が必要になるのではないかと。
数値は同じコードって書いたけどJIS系は同じコードで数値じゃない場合もあるか。
でも、JISは最初は(エスケープシーケンスがでるまでは)ASCIIモードであると定義されているよね。
ということで、バイナリデータを扱うなら全部文字列として扱うってのは不可能でしょ?
型情報が必要になる。
0252デフォルトの名無しさん
2011/09/10(土) 11:56:35.15メタ情報はおれ達の頭の中にあるんじゃないか。
0253デフォルトの名無しさん
2011/09/10(土) 12:24:15.48関数呼び出しに使えないから、一旦EUCに変換して呼び出してまた戻して・・・
あれ? 今この変数の文字コードはどうなってるんだ?
とかやりたいわけですね。
わかりますwww
0254デフォルトの名無しさん
2011/09/10(土) 17:50:25.87> そうそう。文字列はバイナリデータと違ってメタ情報を含んでいる。
「含んで」はいないだろ。
同じバイト列を、バイナリとしてでも文字列としてでも、
扱う人間の側がそう扱いたいと思うように扱えばいいだけでしょ。
ただ、その構造が一般的なテキストデータとして破綻していた時に、
一般的なテキストデータとして扱おうとすると不都合が生じるってだけの話。
そのへんを必要に応じてチェックするのは扱う人間の側の仕事で、
データがその属性を「含んで」いる訳ではないと思うんだが。
そしてそれは別にPerlに限った話じゃないし。
どんな言語のどんな「文字列」データでも事情は同じことでしょ。
「文字コード」とか「1文字何バイト」とかの「メタ情報」を「含んで」いる
文字列のデータフォーマットなんて聞いたことない。
少なくともPerlで扱えるのはそんな特殊なフォーマットのデータじゃないんじゃ。
ってことを >>252 が一言で言っちゃってるね。(今気づくな>俺)
0255デフォルトの名無しさん
2011/09/10(土) 19:48:27.93なければ文字列
0256デフォルトの名無しさん
2011/09/10(土) 19:55:15.26map{ push( @fuga, { NAME => $_ } ) } @hoge;
mapの中で処理が多すぎると気持ち悪くないか
push( @fuga, { NAME => $_ } ) for @hoge;
のほうが見やすいなぁ
>>242
自動的に付加されるモジュールも紹介されてたけど、さすがにないわwと思った
0257デフォルトの名無しさん
2011/09/10(土) 19:57:42.06binmode必要ないとか知らなかった、、、、
0258デフォルトの名無しさん
2011/09/10(土) 20:09:30.62関数に書き出せばいいじゃん
0259デフォルトの名無しさん
2011/09/10(土) 20:21:27.24バイナリでも \0 が含まれない可能性もあるわけだが
0260デフォルトの名無しさん
2011/09/10(土) 20:23:45.30> \0が含まれる可能性があればバイナリ
> なければ文字列
UTF16やUTF32は?
16bit、32bit単位で見れば、\0は含まれていないが
8bit単位でみると\0を含んでいる。
0261デフォルトの名無しさん
2011/09/10(土) 20:44:37.10> 「文字コード」とか「1文字何バイト」とかの「メタ情報」を「含んで」いる
> 文字列のデータフォーマットなんて聞いたことない。
そうか? たとえばJavaではUTF16というメタ情報を含んでいる。
正確に言えばString型はかならずUTF16でなければならないので、
String型がそのメタ情報のかわりになってる。
0262デフォルトの名無しさん
2011/09/10(土) 20:56:22.04> そうか? たとえばJavaではUTF16というメタ情報を含んでいる。
> 正確に言えばString型はかならずUTF16でなければならないので、
> String型がそのメタ情報のかわりになってる。
それは「含んでいる」とは言わないんじゃないの普通。
データに「含んでいる」っていったら、普通は具体的な
フラグなり識別子なりの形で保持しているってことだろ。
とりあえずおまえの言葉の使い方がおかしいということはわかった。
0263デフォルトの名無しさん
2011/09/10(土) 21:03:43.46でもBOMの並びから始まるバイナリだって広い世界には一つくらいはあるはずだ
結局やっぱりメタ情報は人間の頭の中にしかないよ
0264デフォルトの名無しさん
2011/09/10(土) 21:13:07.68> データに「含んでいる」っていったら、普通は具体的な
> フラグなり識別子なりの形で保持しているってことだろ。
つまり、Perlで言えば、UTF8フラグのことですね?
0265デフォルトの名無しさん
2011/09/10(土) 21:15:44.45# UTF8フラグ ON
% export PERL5OPT=-MDevel::Peek
% echo "ほげ" | perl -CSDL -ne 'Dump $_ ' #2.
SV = PV(0x100801130) at 0x100834478
REFCNT = 1
FLAGS = (POK,pPOK,UTF8)
PV = 0x100206180 "\343\201\273\343\201\222\n"\0 [UTF8 "\x{307b}\x{3052}\n"] #2.
CUR = 7
LEN = 80
>>256
見やすさの問題では無く、左辺値を用いないmap使用(=前者)は、
コストの問題から良く無い。と、されて来た。
5.8.1にて解消されてはいるが、お作法として前者の使用は嫌われる。
ttp://logsoku.com/thread/hibari.2ch.net/tech/1306333092/
の997からも参照の事。
0266デフォルトの名無しさん
2011/09/10(土) 21:15:45.51ちがう
0267デフォルトの名無しさん
2011/09/10(土) 21:16:36.99型で見分けるか、データにフラグをもたせるかの
どちらかしかや利用がないだろう。
あとは人間が自分で判断するという、ご苦労なやり方もあるがw
0268デフォルトの名無しさん
2011/09/10(土) 21:17:11.88あってるだろw
0269デフォルトの名無しさん
2011/09/10(土) 21:19:59.53> データの並びだけで、文字列とバイナリを見分けることはできないのだから、
> 型で見分けるか、データにフラグをもたせるかの
> どちらかしかや利用がないだろう。
未知のデータを処理する時の話?
そりゃ中身で見分けるしかないだろ。
「どちらかしかや」がどういう意味かはわからんが。
> あとは人間が自分で判断するという、ご苦労なやり方もあるがw
必要に応じてそれをプログラムにやらせるんだろ。
0270デフォルトの名無しさん
2011/09/10(土) 21:22:20.49中身じゃ見分けられんぞ。
文字コードの自動判定なんてあてにならんし。
0271デフォルトの名無しさん
2011/09/10(土) 21:23:51.610272デフォルトの名無しさん
2011/09/10(土) 21:35:29.77つまり文字列には\0が含まれてないってことですよ。
0273デフォルトの名無しさん
2011/09/10(土) 21:35:50.40あんなの当てにするやついるのかよw
0274デフォルトの名無しさん
2011/09/10(土) 21:38:22.19ちがう。
use utf8; するとバイト列に utf8フラグが付く。
データにutfのフラグそのものが含まれていれば、わざわざutf8フラグなんてものは要らないし、
それにデータにutfのフラグが含まれていても、そのフラグがUTFだ何だと分かることはない。
データに含まれる自己言及的なメタデータは、それを解釈する側が、まずはその自己言及的な部分があるかどうかを知っているとき、
そして言及する対象がどのくらい・何種類あるか、つまりはメタデータそのものの種類やそれらの表記方法を知っている時にだけ、有効。
0275デフォルトの名無しさん
2011/09/10(土) 21:40:43.25は? use utf8の意味わかってないじゃん。
use utf8はソースコードに書かれた文字の話であって、
バイト列とか関係ないんだけど。
http://perldoc.jp/docs/perl/5.8.1/utf8.pod
> utf8 - ソースコード内に、UTF-8(か、UTF-EBCDIC)を有効/無効にするためのプラグマ
> use utf8プラグマは、Perl パーサーに、現在のレキシカルスコープ内の
> プログラムのテキストに、UTF-8(EBCDICベースのプラットフォームなら、
> UTF-EBCDIC) を許すように伝えます。
0276デフォルトの名無しさん
2011/09/10(土) 21:50:26.75バイト列の意味わかってないのか?
とりあえず上のURLでバイト列が関係する部分を抜き出しておいた
>no utf8 プラグマは Perl に、現在のレキシカルスコープのソーステキストを リテラルなバイトとして扱うように伝えます。
>ソースコード中の恣意的なバイト列を許していました。
>高ビットのセットのあるソーステキストにあるバイトは、
>バイト列は、ほとんどの場合、適切なUTF-8ではないからです。 そのようなバイト列がいるなら、
>たとえば、例で使われているように、ISO 8859-1 (Latin-1) のバイト列を
>または 文字列がバイトとして保持されている場合に真を
0277デフォルトの名無しさん
2011/09/10(土) 21:56:03.64だから、あくまでソースコードにかいてある文字列の話だって。
ソーステキストってのが見えないの?
データにフラグを持ってるというのは
>>265から明らかだろ。
0278デフォルトの名無しさん
2011/09/10(土) 21:56:40.23見えないところに追加されているのも、データだ。
0279デフォルトの名無しさん
2011/09/10(土) 22:01:42.28% perl -e 'Dump "ほげ"'
SV = PV(0x100801280) at 0x1008275e8
REFCNT = 1
FLAGS = (POK,READONLY,pPOK)
PV = 0x100208560 "\343\201\273\343\201\222"\0
CUR = 6
LEN = 16
% perl -MO=Deparse -e 'print "ほげ"'
use Devel::Peek;
print "\343\201\273\343\201\222";
-e syntax OK
% perl -Mutf8 -e 'Dump "ほげ"'
SV = PV(0x100801090) at 0x100827618
REFCNT = 1
FLAGS = (POK,READONLY,pPOK,UTF8)
PV = 0x10020ac40 "\343\201\273\343\201\222"\0 [UTF8 "\x{307b}\x{3052}"]
CUR = 6
LEN = 16
% perl -MO=Deparse -Mutf8 -e 'print "ほげ"'
Wide character in print at /PATH/TO/lib/5.14.1/B/Deparse.pm line 1213.
use utf8;
use Devel::Peek;
print 'ほげ';
-e syntax OK
0280デフォルトの名無しさん
2011/09/10(土) 22:02:10.61ファイルなどから読み込んだ文字にはuse utf8したからって
勝手にUTF8フラグはつかない。
こっちの値はUTF8フラグ付き。こっちはついてないと
データごとにもっている情報。
もちろんすべてのバイナリにUTF8フラグがつくわけもない。
0281デフォルトの名無しさん
2011/09/10(土) 22:03:50.69コメントが何もかかれてないんで、何を言いたいのかサッパリわからないけど
念の為にいっておくけど、-e の後に書いたものも、
ソースコードだからね。
0282デフォルトの名無しさん
2011/09/10(土) 22:05:11.06>>> データに「含んでいる」っていったら、普通は具体的な
>>> フラグなり識別子なりの形で保持しているってことだろ。
>>つまり、Perlで言えば、UTF8フラグのことですね?
>見えないところに追加されているのも、データだ。
元データにはメタ情報が含まれてんの?
それとも、含まれていないからわざわざ追加してるの?
どっち?
0283デフォルトの名無しさん
2011/09/10(土) 22:13:02.74>use utf8; するとバイト列に utf8フラグが付く。
これの先頭に「一例として、」って入れとけば良かったのに。
>>279
>念の為にいっておくけど、-e の後に書いたものも、
>ソースコードだからね。
もちろんw
0284デフォルトの名無しさん
2011/09/10(土) 22:21:55.04元データにメタ情報が付いているのなら、
文字列とバイナリの区別つくだろw
元データにメタ情報がついてなくて
コーディングが面倒になるので、
ある言語では型に入れることでメタ情報を付加したり、
PerlではUTF8をつけることでメタ情報を付加するわけだ。
0285デフォルトの名無しさん
2011/09/10(土) 22:59:48.54>元データにメタ情報が付いているのなら、
>文字列とバイナリの区別つくだろw
区別できない。
お前はプログラムの中だけで考え過ぎだ。そこがおかしい。
ソースコードの中だけで考えれば、JavaのStringは必ずUTF16になるだろうけど、
例えば、ネットの某所で拾った、とあるバイナリファイルがあるとき。
そのバイナリがテキストファイルなのか、
それ以外の意味(画像・音楽・動画など)を持つバイナリなのか、
はたまた、全く意味の無いランダムなバイナリなのか、
そのバイナリだけでそれらの判定ができるのか?
メタ情報が付いていたとしても、そのメタ情報が正しいことをそのバイナリからどうやって保証するんだ?
0286デフォルトの名無しさん
2011/09/10(土) 23:03:11.52日本語が不自由なの?
元データにメタ情報がつくのなら文字列のバイナリの区別がつく。
だが事実として文字列とバイナリの区別はつかないんだから
元データに情報はついていないという意味だ。
0287デフォルトの名無しさん
2011/09/10(土) 23:05:28.59これは意味がない問答だなw
メタ情報がついていて、そのメタ情報に従っていないなら
そのデータ(もしくはメタ情報)は壊れていると判断されるだけ。
0288デフォルトの名無しさん
2011/09/10(土) 23:19:22.80> > メタ情報が付いていたとしても、そのメタ情報が正しいことをそのバイナリからどうやって保証するんだ?
>
> これは意味がない問答だなw
>
> メタ情報がついていて、そのメタ情報に従っていないなら
> そのデータ(もしくはメタ情報)は壊れていると判断されるだけ。
俺が言っていることはお前の考えていることとは違う。
0289デフォルトの名無しさん
2011/09/10(土) 23:37:52.980290デフォルトの名無しさん
2011/09/10(土) 23:39:03.81>>247
テキストデータとバイナリデータの区別はつくのかという一般的な命題?
0291デフォルトの名無しさん
2011/09/10(土) 23:39:45.59すべてが文字列というければ、
バイナリデータと文字列って区別つくの?
0292デフォルトの名無しさん
2011/09/10(土) 23:42:10.54すべてがバイナリって世界なら、あるだろうけどね。
バイナリと文字列の区別はつかない。
型ないとバイナリと文字列の区別はどうするかという
問題が常に付きまとう。
0293デフォルトの名無しさん
2011/09/10(土) 23:47:12.63だから型うんぬんはおかしいって散々言われてんだろ
ちょっと黙ってろ低能
0294デフォルトの名無しさん
2011/09/10(土) 23:49:48.92おかしいという根拠は?
0295デフォルトの名無しさん
2011/09/10(土) 23:57:15.960296デフォルトの名無しさん
2011/09/11(日) 00:06:48.26あとは思想信条の問題だな>バイナリデータと文字列
0297デフォルトの名無しさん
2011/09/11(日) 00:09:45.79> 元データにメタ情報がつくのなら文字列のバイナリの区別がつく。
落ち着け。自分が“日本語が不自由”になってるぞ。
0298デフォルトの名無しさん
2011/09/11(日) 00:13:05.98そのレスは揚げ足取り以外の意味があるのか?
0299デフォルトの名無しさん
2011/09/11(日) 00:22:12.69ううん。
0300デフォルトの名無しさん
2011/09/11(日) 00:32:48.70お前は話題をしっかりと認識していないから、あるいは認識するだけの能力がない低能だから、
>>251のここの発言がズレてる。
>文字列はバイナリデータと違ってメタ情報を含んでいる。
お前以外の全員はプログラムの外部にあるだろうとあるファイルについて話しているのに、
お前だけがプログラム内部の文字列について語っている。
だからお前の言うことはおかしい。
ズレてる。
0301デフォルトの名無しさん
2011/09/11(日) 00:48:28.61お前は「JavaならString型自体がメタ情報」「perlにはUTFフラグがあるからそれがメタ情報」、
他は「BOMがメタ情報」、
と答えるはず。
それだけ認識がズレてる。
0302デフォルトの名無しさん
2011/09/11(日) 02:05:27.81いや >>251 は
> プログラム内部の文字列について語っている
つもりで読んでみてもちょっとなにいってんのかわかんないレベルだ。
0303デフォルトの名無しさん
2011/09/11(日) 02:14:57.860304デフォルトの名無しさん
2011/09/11(日) 02:16:34.830305デフォルトの名無しさん
2011/09/11(日) 02:38:23.95の思考実験に近い話を、意識しながら組むやつはいねーよ
組むだけだったら、日本語を扱うストラテジーは
大なり小なり出来あがってんだから、それに従うだけだ。
0306デフォルトの名無しさん
2011/09/11(日) 02:55:24.02全部Unicode扱いで、日本語であるかどうかも意識してないけどねw
0307デフォルトの名無しさん
2011/09/11(日) 09:34:10.38「メタ情報」という分解できないひとつの言葉と考えるかで、
話がすれ違ってしまうよ。
分解できない「メタ情報」は情報になっていないからこそ
「メタ情報」なんであって、例えばコンピュータのメモリ
の中に入り、情報になってしまうと「メタ情報」ではなく
なる。
それはメタな「情報」ということだろう。
0308デフォルトの名無しさん
2011/09/11(日) 09:42:58.51>>233は、明らかにstringsとして表記してるのに、
>>251は、明らかに文字コード付きの
0309デフォルトの名無しさん
2011/09/11(日) 09:45:13.680310デフォルトの名無しさん
2011/09/11(日) 10:19:17.130311デフォルトの名無しさん
2011/09/11(日) 10:59:12.900312デフォルトの名無しさん
2011/09/11(日) 11:14:46.030313デフォルトの名無しさん
2011/09/11(日) 11:26:23.850314デフォルトの名無しさん
2011/09/11(日) 11:38:43.560315デフォルトの名無しさん
2011/09/11(日) 11:45:13.160316デフォルトの名無しさん
2011/09/11(日) 13:53:25.260317uy
2011/09/11(日) 16:36:26.19お前らみたいな時代遅れのゴミクズゴミグラマーが、ITの進化を遅らせるんだろうな
使えもしない足引っ張るだけの老害だ
プログラム作っているw 気になっているだけで実際はゴミグラミングしかしていない
ゴミグラミングされてゴミ量産されてもそれはプラスにはならなくなり負の遺産でしかない
わかったらさっさと死ねば?
ゴミグラマは死ね 死ねゴミグラマ
0318デフォルトの名無しさん
2011/09/11(日) 16:42:48.090319デフォルトの名無しさん
2011/09/11(日) 17:49:52.93IT業界の生産性とか技術力とかが一切向上しないんだろうな。
0320デフォルトの名無しさん
2011/09/11(日) 18:36:51.63両方とも取りたいときはどうしたらよいでしょうか
0321デフォルトの名無しさん
2011/09/11(日) 18:42:56.06標準出力と標準エラー出力を取るなら、
IPC::Open3
0322デフォルトの名無しさん
2011/09/11(日) 20:42:47.49http://perldoc.jp/docs/perl/5.10.1/perlfaq8.pod#How32can32I32capture32STDERR32from32an32external32command63
0323デフォルトの名無しさん
2011/09/11(日) 20:54:36.45perldoc が更新されてなくて古い情報になってる事にも
気をかけて欲しい。今回がまさに該当するが。
0324デフォルトの名無しさん
2011/09/11(日) 21:24:23.14誰が必要とすんだ?
0325uy
2011/09/11(日) 21:39:50.76へええええ
この「停滞」しているITに気づいているのか?
だったらお前もゴミ掃除を手伝ってみませんか?
0326デフォルトの名無しさん
2011/09/11(日) 23:46:57.99古くなってる?
分からないから、教えて欲しい。
0327デフォルトの名無しさん
2011/09/12(月) 05:56:48.75例えば、
>local *CATCHOUT = IO::File->new_tmpfile;
>local *CATCHERR = IO::File->new_tmpfile;
>my $pid = open3(gensym, ">&CATCHOUT", ">&CATCHERR", "cmd");
IO::File->new_tmpfile が「ファイルハンドルを返すもの」と理解してれば、
今の時代にこんな書き方はしない。
se IPC::Open3;
use IO::File ;
use Symbol qw(gensym) ;
my @cmd = qw( ls ) ;
my $tmpout = IO::File->new_tmpfile;
my $tmperr = IO::File->new_tmpfile;
my $pid = open3 gensym, $tmpout, $tmperr, @cmd ;
waitpid $pid, 0 ;
print while <$tmpout>;
0328デフォルトの名無しさん
2011/09/12(月) 12:55:44.21それだと">&"の処理に困らない?
0329デフォルトの名無しさん
2011/09/12(月) 17:36:39.360330デフォルトの名無しさん
2011/09/12(月) 17:38:41.940331デフォルトの名無しさん
2011/09/12(月) 18:43:59.98http://perldoc.jp/docs/perl/5.10.1/perlfaq4.pod#How32can32I32tell32whether32a32certain32element32is32contained32in32a32list32or32array63
0332デフォルトの名無しさん
2011/09/12(月) 23:43:15.08{$foo == $_} より {$foo eq $_} の方がいいかも
ケースバイケースだろうけど
List::MoreUtils の any も試してみたら
grepの10倍遅かったw
0333デフォルトの名無しさん
2011/09/13(火) 23:44:12.38> 今の時代にこんな書き方はしない。
今の時代に合わない、ネットの書き込みを
全部排除してくれ。
世の中モダンPerlだけでいい。
0334デフォルトの名無しさん
2011/09/14(水) 00:32:46.980335デフォルトの名無しさん
2011/09/14(水) 01:25:13.82いるわけだから、過去のノウハウが活かせない
ものは先行きが怪しいと考える。
0336デフォルトの名無しさん
2011/09/14(水) 01:50:13.21もっともらしく見えないこともないが意味不明。
Perlとは関係なし。
0337デフォルトの名無しさん
2011/09/14(水) 02:10:04.36しようとしているけど、それは得策ではない
ってこと。
無理に削除するんじゃなくて、だんだんと廃れて
使われなくなるのを待てばいいってこと。
Perl4 が使われている間は"Perl4 to Perl5 Traps"
は必要ってこと。
慌てて過去を取り消す類の技術は、今後も慌てて
取り消される恐れありってこと。
0338デフォルトの名無しさん
2011/09/14(水) 02:34:02.95perldocを「むやみに」削除はしない方がいいってのは同意だけど
> 科学技術はこれまでの積み重ねで成り立って
> いるわけだから、過去のノウハウが活かせない
> ものは先行きが怪しいと考える。
そもそもプログラミング言語が「科学技術」か、ってのは置いとくとして
たとえば過去のノウハウが足枷なCOBOLとか先行き安泰でもなんでもないしね。
0339デフォルトの名無しさん
2011/09/14(水) 02:52:53.320340デフォルトの名無しさん
2011/09/14(水) 03:27:11.35バカはおとなしく黙って見てろよ
0341デフォルトの名無しさん
2011/09/14(水) 09:15:59.190342デフォルトの名無しさん
2011/09/14(水) 09:21:07.79http://hibari.2ch.net/test/read.cgi/tech/1217851121/
0343デフォルトの名無しさん
2011/09/14(水) 22:23:12.65>>338
でも切り捨てたらある意味、別物になってしまうのだから
切り捨てて「安泰」って考えるのもどうかと。
→ これから雑談に行きます
0344デフォルトの名無しさん
2011/09/16(金) 00:51:42.85Win7 + ActivePerl v5.14.1 でTkがインスコされてないんだけど、なるべくお手軽なインスコ方法を教えてくれい
↓で試したけどムリポだった
ttp://hardsoft.at.webry.info/201005/article_4.html
ttp://dec12.doorblog.jp/archives/3816580.html
0345デフォルトの名無しさん
2011/09/16(金) 00:57:41.53ttp://hardsoft.at.webry.info/201005/article_4.html
でうまくいったけどな
Win7 がうまくいかないのか、64ビット版なのか
0346デフォルトの名無しさん
2011/09/16(金) 16:17:16.25カンマの有り無しどちらも動くし違いがあんまりよくわかっていません。
map{},@hoge;
map{} @hoge;
0347デフォルトの名無しさん
2011/09/16(金) 16:51:16.03動かない
0348デフォルトの名無しさん
2011/09/16(金) 17:10:11.37「map {}, @hoge;」の方は式(EXPR)で、無名ハッシュへのリファレンス。
でもこの場合「map +{}, @hoge;」みたいに書かないとエラーになるよ。
「map {} @hoge;」の方はブロック(BLOCK)。
use Data::Dumper;
my @x = qw(a b c);
my @expr = map +{$_ => 1}, @x;
my @block = map {$_ => 1} @x;
print "Expr:\n", Dumper(@expr);
print "Block:\n", Dumper(@block);
Expr:
$VAR1 = {
'a' => 1
};
$VAR2 = {
'b' => 1
};
$VAR3 = {
'c' => 1
};
Block:
$VAR1 = 'a';
$VAR2 = 1;
$VAR3 = 'b';
$VAR4 = 1;
$VAR5 = 'c';
$VAR6 = 1;
詳しくは→ ttp://perldoc.jp/func/map
0350デフォルトの名無しさん
2011/09/18(日) 09:05:55.84ループの制御文が他の言語では continue や break なのに、
Perl では next や last なんだろう?
0351デフォルトの名無しさん
2011/09/18(日) 10:39:27.660352デフォルトの名無しさん
2011/09/18(日) 10:57:37.45last は分からんが、next は -n や -p のときに
AWKの next に近い目的(残りの処理を飛ばして次の行へ)
で使うことになるから、それが由来じゃね
0353デフォルトの名無しさん
2011/09/18(日) 21:21:59.66じゃあ何故elifにしなかったのか
…いや分かるような気もするw
0354デフォルトの名無しさん
2011/09/19(月) 13:00:20.230355デフォルトの名無しさん
2011/09/19(月) 13:37:10.690356デフォルトの名無しさん
2011/09/19(月) 15:18:46.31>perl hoge.pl
0357346
2011/09/20(火) 12:55:38.51遅くなりました。
ご回答ありがとうございます。
動かないという話ですが、下記の回答でmap{}の後ろにカンマ付きで書いてあります。
こちらは動いているようなのですが、何か私が勘違いしているのでしょうか?
初心者で申し訳ありません。
>>226
my @fuga = map {NAME => $_}, @hoge;
0358デフォルトの名無しさん
2011/09/20(火) 14:27:51.02http://perldoc.jp/func/map
> map BLOCK LIST
> map EXPR,LIST
書式は二種類ある。
use Data::Dumper;
local $Data::Dumper::Indent;
my @hoge = qw(AAA BBB CCC);
my @fuga;
@fuga = map({NAME => $_}, @hoge); # EXPR
print Dumper(\@fuga), "\n";
@fuga = map{ {NAME => $_} } @hoge; # BLOCK
print Dumper(\@fuga), "\n";
0359デフォルトの名無しさん
2011/09/20(火) 14:54:38.83改行を削除したいんですが、 tr/\r\n// とやっても削除されません
tr/\r\n/z/ などとすると改行コードがzに変換されました。
trでは削除は出来ないのでしょうか
0360359
2011/09/20(火) 14:57:34.40tr/\r\n/z/;
print "$_ is good\n";
}
こういうコードで試験しました
0361デフォルトの名無しさん
2011/09/20(火) 15:17:21.89http://perldoc.jp/docs/perl/5.14.1/perlop.pod#Quote32and32Quote-like32Operators32
tr/SEARCHLIST/REPLACEMENTLIST/cdsr
> オプションは以下の通りです:
...
> /d 修飾子が指定されると、SEARCHLIST に指定されて、
> REPLACEMENTLIST に対応するものがない文字が削除されます。
0362デフォルトの名無しさん
2011/09/20(火) 15:18:11.63tr/\r\n// は tr/\r\n/\r\n/ と等価
tr/\r\n/z/ は tr/\r\n/zz/ と等価
0363346
2011/09/20(火) 16:00:57.00map{}で対象になっている部分が違うんですね。
わかりやすい説明ありがとうございました。
省略しまくれるperlの弊害がこんなところで。。
0365デフォルトの名無しさん
2011/09/20(火) 18:42:37.820366デフォルトの名無しさん
2011/09/20(火) 19:36:36.24> map{}で対象になっている部分が違うんですね。
こんだけ説明されてもまだ理解できてないのか…。
0367デフォルトの名無しさん
2011/09/20(火) 22:24:43.11そのケースだったら、
while(<>){
chomp;
print "$_ is good\n";
}
が常套手段
0368デフォルトの名無しさん
2011/09/20(火) 23:05:04.81>>359>>360を見る限りでは「改行を削除」したいとしか言っていない。
chomp で末尾の改行を削除するにしても、対象の改行コードが \r\n なら $/ を合わせて変更(通常、local を使う)する必要があるし、
\n と \r\n の両方を削除したいという場合は chomp は不適。
位置にかかわらず改行を削除する場合、
\n と \r\n は削除しつつ単独の \r は放置するのであれば s/\r?\n//g などとする。
\r\n という並びでない単独の \r も \n と同様に削除していいなら>>362(s/[\r\n]//g とほぼ等価)。
0369デフォルトの名無しさん
2011/09/20(火) 23:15:17.86"\n", "\r\n" 混成のファイルなんてあんの?
0370デフォルトの名無しさん
2011/09/20(火) 23:51:21.51勿論ある。
テキストをなんだと思ってるのか。
0371デフォルトの名無しさん
2011/09/21(水) 00:07:01.37ま、いいや
0372デフォルトの名無しさん
2011/09/21(水) 00:09:40.99たぶんWindows使ったことがない人のプログラム
0373デフォルトの名無しさん
2011/09/21(水) 00:59:35.69それをログに落とししてみたら、\n区切りのコマンドと本体プログラムが吐く\r\nが混在してて、どうしようか迷ったことがある。
0374デフォルトの名無しさん
2011/09/21(水) 01:01:12.41MIFES 7というエディタは、
"\r\n"なら ┛のようにまがった矢印
"\n"なら↓
矢印のちがいだけで、ちゃんと改行してる。
シフトJISなのに"\n"で改行してる状態で、別のファイルにコピペすると、
"\r\n"と"\n"が混在する
0375デフォルトの名無しさん
2011/09/21(水) 01:20:21.39これは、ちょっとおかしい
0376デフォルトの名無しさん
2011/09/21(水) 01:29:02.30いまやってみたこと
JBuilder 7で新規に作成(JBrow.java)
保存
終了
エクスプローラで
JBrow.javaを右クリックしてそのメニューから
MIFES 7を選択して開く
改行マークが↓になっていて、ちゃんと改行してる(プリ/ポストプロセッサなしのモード)
範囲指定してクリップボードにコピー
┛で改行してるファイル(IP.txt)に貼り付けると
↓と┛が混在する。
ENTERをおすと┛になる。
保存。
MIFES 7を終了。
メモ帳でIP.txtを開くと、やっぱり↓と┛が混在している。
0377デフォルトの名無しさん
2011/09/21(水) 01:45:23.36改行箇所を全部\n\rで吐き出していたことがあったっけ。
0378デフォルトの名無しさん
2011/09/21(水) 01:46:38.200379デフォルトの名無しさん
2011/09/21(水) 02:16:53.06という意味かもしれん。
もしそうだとするとMifes 7はMacで作成したテキストを全く考慮してないってことだな。
いずれにしても文字コードと改行コードは本来独立ってのは確かにそのとおりだ。
0380デフォルトの名無しさん
2011/09/26(月) 15:25:55.84per -pi -e "正規表現" ファイル
としますが、ファイルを直接書き換えるのではなく
書き換えた内容を出力するのは
どうすればできますか?
0381デフォルトの名無しさん
2011/09/26(月) 15:52:11.66オプションから i を抜け
0382デフォルトの名無しさん
2011/09/26(月) 15:55:29.49perl -p -e "処理" 入力ファイル名 > 出力ファイル名
と、最後に「> 出力ファイル名」を付けろ
0383デフォルトの名無しさん
2011/09/26(月) 15:58:59.38何も聞かずに問答無用で上書きするから気をつけろよ
0384デフォルトの名無しさん
2011/09/26(月) 16:25:00.72ファイル名の末尾に .bak を付けて取っておいてくれる
perl -i.bak -ple '置換処理' 入力ファイル
とかは良く使うかも?
0385デフォルトの名無しさん
2011/09/26(月) 17:22:55.38詳しくありがとうございます
>>384
これもいいですね
ありがとうございます
0386デフォルトの名無しさん
2011/09/26(月) 20:43:43.84プログラムが同時に実行されるんでしょうか?
Aのプログラムの実行行番号とBの実行行番号が同じかって意味です
0387デフォルトの名無しさん
2011/09/26(月) 20:51:21.180388デフォルトの名無しさん
2011/09/26(月) 21:33:23.87ページって何だよと言わざるを得ない。
CGIについて言ってるならそれはしapacheなどのWEBサーバの問題であってperlの問題ではない。
0389デフォルトの名無しさん
2011/09/26(月) 22:19:27.82``で囲まないで実行させる方法はないですか?
`comamnd1 | perl -lne 'print xxxxxx'`
今はこんな感じです。
よろしくお願いします。
0390デフォルトの名無しさん
2011/09/26(月) 22:24:15.300391デフォルトの名無しさん
2011/09/26(月) 23:19:35.54オプションがあって、そのまま実行してくれたらいいのにと思ったんですが、そういうのはないんですよね?
0392デフォルトの名無しさん
2011/09/26(月) 23:26:24.450393デフォルトの名無しさん
2011/09/26(月) 23:32:23.120394デフォルトの名無しさん
2011/09/26(月) 23:50:12.96s/PHPのhtmlspecialchars()/使えねぇー/g;
0395デフォルトの名無しさん
2011/09/27(火) 00:12:34.63状況が良く分からんが、xargs使えば?
>>393
http://search.cpan.org/~gaas/HTML-Parser-3.68/lib/HTML/Entities.pm
0396デフォルトの名無しさん
2011/09/27(火) 04:51:33.03> 状況が良く分からんが、xargs使えば?
普通にsystem()使えばいいと思うが
0397デフォルトの名無しさん
2011/09/27(火) 06:53:08.65echo `ls | perl -lpe 's/\.txt//'` 的な。
(ちょっと上でワンライナーの質問も出てるし)
そうだとすると、
alias hoge="ls | perl -lpe 's/\.txt//'"
とかやってaliasするけど、ダブルコーテーションでくくるのが
作法的に良いのかは知らん
>-execみたいな
って言い分からだと、
perl -le '$_= `ls` ; s/\.txt//g ; print'
でもいいんじゃねーのと思うが、
やっぱperlの中の``中でperlを呼ぶ話?
0398デフォルトの名無しさん
2011/09/27(火) 07:14:49.85389==391だよね。
for (`command1`) {
chomp;
system 加工($_);
}
とかでいいんじゃないのかな。
0399デフォルトの名無しさん
2011/09/27(火) 08:44:49.20最近は system を直接使わなくなったなあ。
0400デフォルトの名無しさん
2011/09/27(火) 19:04:57.60ファイルに書こうとすると GLOB とか出て書けないのはなんで?
0401デフォルトの名無しさん
2011/09/27(火) 19:08:18.60windows用のファイル名(sjis)を付けようとしている
0402デフォルトの名無しさん
2011/09/28(水) 13:04:50.350404デフォルトの名無しさん
2011/09/28(水) 18:08:27.870405デフォルトの名無しさん
2011/09/29(木) 00:33:01.390406デフォルトの名無しさん
2011/09/29(木) 01:49:31.35カンマ
0407デフォルトの名無しさん
2011/09/29(木) 13:33:47.130408デフォルトの名無しさん
2011/10/03(月) 22:21:04.14どこかでprintの出力先を書き換えてるの?
0409デフォルトの名無しさん
2011/10/03(月) 23:00:27.18CGI.pm はリクエストを標準入力で受け取り
レスポンスを標準出力と標準入力で返す仕様だから
これが Plack だとリクエストをハッシュリファレンスで受け取り、
レスポンスを配列リファレンスで返す事になる。
それと Webアプリ関係は板違いだよ。
0410409
2011/10/03(月) 23:01:29.25レスポンスを標準出力と標準入力で返す仕様だから
↓
レスポンスを標準出力で返す仕様だから
0411デフォルトの名無しさん
2011/10/03(月) 23:09:30.07CGI.pm は、というよりCGIは、だな
0412デフォルトの名無しさん
2011/10/03(月) 23:24:10.84CGI.pm→CGI
Plack→PSGI
にした方が適切じゃね?
0413デフォルトの名無しさん
2011/10/04(火) 00:04:36.860414デフォルトの名無しさん
2011/10/04(火) 01:07:09.48そこまでして使う別用途はちょっととっさには思いつかないけどな
0415デフォルトの名無しさん
2011/10/04(火) 10:47:53.26ありがとうございます。
0416デフォルトの名無しさん
2011/10/04(火) 23:38:26.940417デフォルトの名無しさん
2011/10/05(水) 01:14:53.90CGIに依存してる。
use CGI;はCGIに依存してる。
0418デフォルトの名無しさん
2011/10/05(水) 01:36:36.57このようなやり方で問題ないんでしょうか?
$new_line = "新規投稿\n";
open(IN,"test.dat");
open(OUT,">tmp.dat");
print OUT $new_line;
while($line = <IN>){
print OUT $line;
}
close(OUT);
close(IN);
0419デフォルトの名無しさん
2011/10/05(水) 02:17:53.88いや、普通に環境変数に値入れて渡せばいいだけだよw
0420デフォルトの名無しさん
2011/10/05(水) 04:05:50.11基本的にはそれでいいと思う。
実際に運用するには細かい部分でもっと気を使う必要があるが、状況による。
別の考え方としては、test.datファイルの末尾に新しい行を追加していって、
データを実際に使う時には逆順に使う、という方法もありうる。
ファイル末尾に追加する処理の方がずっと楽だからね。
0421デフォルトの名無しさん
2011/10/05(水) 04:08:22.130422デフォルトの名無しさん
2011/10/05(水) 04:09:03.52CGIに依存してる、ってのは変な物の言い方だなあ。
例えば、Perlスクリプトの書き方はPerl処理系の仕様に依存してる、とは言わんだろ。ふつー。
0423デフォルトの名無しさん
2011/10/05(水) 06:46:38.38速いやり方教えて。わりとマジで。
0424デフォルトの名無しさん
2011/10/05(水) 07:43:06.920425デフォルトの名無しさん
2011/10/05(水) 09:49:43.64open()にエラートラップ付けてくれ。
スクリプトが正常に動いてるのに、ファイルに何も書き込まれません!という質問は飽きた。
0426デフォルトの名無しさん
2011/10/05(水) 10:33:28.730427デフォルトの名無しさん
2011/10/05(水) 10:57:57.76なんだそりゃ。
0428デフォルトの名無しさん
2011/10/05(水) 12:17:49.370429デフォルトの名無しさん
2011/10/05(水) 13:21:47.210430デフォルトの名無しさん
2011/10/05(水) 13:30:16.670431デフォルトの名無しさん
2011/10/05(水) 14:43:38.84>>418
一行ずつ読み込んで一行ずつ書き込むのが遅いっていわれてるんじゃない。
一行読み込むたびに、文字列結合していって、書き込みは1回にする。
>>426 がlocal $/;ってやってるのは、「一行」の定義を改行からundefにすることで、whileで一行ずつ回さなくても$text = <IN>;だけで全文読み取れるようにしてる。
こんなんでどうでしょ。
#!/usr/bin/env perl
use strict;
use warnings;
my $new_line = "新規投稿¥n";
my $in_file = 'test.dat';
my $out_file = 'tmp.dat';
my $read_text = do {
open my $in_fh, '<', $in_file or die "error $in_file";
local $/;
<$in_fh>;
};
open my $out_fh, '>', $out_file or die "error $out_file";
print {$out_fh} $new_line.$read_text;
0432デフォルトの名無しさん
2011/10/05(水) 15:47:46.540433デフォルトの名無しさん
2011/10/05(水) 16:41:25.67レキシカルとローカルの区別も正確にしようぜ。
ファイルハンドルは REFCNT がゼロになった時点で自動で閉じられる。
が、それだと close 時のエラーをハンドルできないことに注意する必要がある。
自動クローズだと autodie (Fatal) も働かないので、
常に close $fh or die "can't close: $!"; (autodie 使うなら close $fh; だけでいい)などとするのがベターだと思う。
0434431
2011/10/05(水) 16:45:02.73use File::Slurp qw/ slurp write_file /;
my $new_line = "新規投稿¥n";
my $in_file = 'test.dat';
my $out_file = 'tmp.dat';
write_file($out_file, $new_line.(slurp($in_file)) );
0435デフォルトの名無しさん
2011/10/05(水) 16:52:54.80ローカルっていっちゃうと、
local 変数名;
のことを指してる風な発言になってしまうのかな?
if(...){ my $hoge;} はレキシカル変数って呼ばないといけないのか。
0436デフォルトの名無しさん
2011/10/05(水) 18:32:00.04わざわざCPANモジュール入れなくても、
この目的だったらcore moduleのTie::Fileでいいんじゃね?
use Tie::File;
tie my @array, 'Tie::File', 'hoge.txt' or die ;
unshift @array "新規投稿\n" ;
untie @array ;
2万行程度だったら苦痛にならない速度だし。
0437デフォルトの名無しさん
2011/10/05(水) 20:25:41.050438デフォルトの名無しさん
2011/10/05(水) 20:44:34.54% perl -MModule::CoreList -le 'print Module::CoreList->first_release_by_date( q{Tie::File} )'
5.007003
% perldoc perlhist
>5.7.3 2002-Mar-05
モダンなやり方だったら、log取り専用のモジュールがあるだろ。
0439デフォルトの名無しさん
2011/10/05(水) 20:47:17.69あれ、標準モジュールでなかったけ
0440デフォルトの名無しさん
2011/10/05(水) 20:51:52.19モダンの意味わかってる?
今のやり方=モダンなんだよ。
0441439
2011/10/05(水) 20:55:09.240442デフォルトの名無しさん
2011/10/05(水) 20:55:22.23>>439
perl5.10以降の人ならModule::CoreListで確認取れる。
% perl -MModule::CoreList -le 'print Module::CoreList->find_modules( qr/Slurp/ )'
0443デフォルトの名無しさん
2011/10/05(水) 20:57:19.99でないと、いつまでたっても成長できないでしょ。
0444デフォルトの名無しさん
2011/10/05(水) 21:00:07.720445デフォルトの名無しさん
2011/10/05(水) 21:31:30.03ファイルの一行を変更する/ファイルのある行を削除する/ファイルの中程で一行挿入する/ファイルの先頭に追加するには?
http://perldoc.jp/docs/perl/5.10.1/perlfaq5.pod#How32do32I32change44delete44or32insert32a32line32in32a32file44or32append32to32the32beginning32of32a32file63
0446デフォルトの名無しさん
2011/10/05(水) 21:41:44.02別の意味で感動した
0447デフォルトの名無しさん
2011/10/05(水) 22:30:23.70なぜ成長がおかしいの?
頑張るとか勉強するとか鼻で笑うタイプ?
0448デフォルトの名無しさん
2011/10/05(水) 22:32:43.80>>445のperldocのがいっちゃんわかりやすくてええな。
0449デフォルトの名無しさん
2011/10/05(水) 22:44:35.22自力で調べる事しない奴が成長って言うなよw
0450デフォルトの名無しさん
2011/10/05(水) 23:34:26.68http://hibari.2ch.net/test/read.cgi/php/1030548610/227-
CGIをPerlという意味で使っている人も昔は結構いたし誤解されやすいのかな。
0451デフォルトの名無しさん
2011/10/05(水) 23:52:27.89> CGIをPerlという意味で使っている人も昔は結構いたし
それとはまたちょっと違う気がするが。
0452デフォルトの名無しさん
2011/10/06(木) 01:35:29.31ことができるのかどうかがまず大事。その上で、実装が分かり
やすいのかどうかが次の焦点になる。
一般的には古くからある機能はシンプルなので分かりやすい。
新しい実装は、必要もないのにごちゃごちゃしていて分かりに
くいし、遅かったりもする。実行するためのコンピュータも
高性能でないといけないのでいつでも使えるソリューション
とはいえない。
0453デフォルトの名無しさん
2011/10/06(木) 07:05:39.85…という傾向は確かにあるな。
0454デフォルトの名無しさん
2011/10/06(木) 08:12:17.81他のスタイルをつかうってこと?それともインデント自体がめずらしいって意味?w
0455デフォルトの名無しさん
2011/10/06(木) 08:48:03.79{
print OUT;
}
このスタイルは珍しいと思うけどな
珍しくなったのは使われないからで、なんで使われないかと言えば、
この方法を誰もがダメと思っているか、それとももっといい方法があるか、のどっちかか?
個人的にはなんとなくダサい気がする
0456デフォルトの名無しさん
2011/10/06(木) 08:55:55.05閉じブレースが行頭に来ないのでオフサイドルールのある言語向けかも
0457デフォルトの名無しさん
2011/10/07(金) 22:46:31.78必ずしも開けなかった場合の例外処理をする必要はないですよね?
開けなかった場合はファイルを作るというようにしたいんですが
開けなかったらプログラム終了だと先に進まないから
0458デフォルトの名無しさん
2011/10/07(金) 23:21:32.650459デフォルトの名無しさん
2011/10/07(金) 23:52:07.70open(IN,$file);の方では例外処理はしなくて
open(OUT,$file);の方で例外処理をすればいいと思いますが
問題ありますか?
0460デフォルトの名無しさん
2011/10/07(金) 23:53:30.070461デフォルトの名無しさん
2011/10/07(金) 23:59:01.900462デフォルトの名無しさん
2011/10/08(土) 00:15:00.78http://search.cpan.org/~pjf/autodie-2.10/lib/autodie.pm
0463デフォルトの名無しさん
2011/10/08(土) 01:00:36.52if (-e $file) { open (IN, $file); }
0464デフォルトの名無しさん
2011/10/08(土) 01:11:48.46下は間違い
0465デフォルトの名無しさん
2011/10/08(土) 01:33:39.34それしたらファイルがないときプログラム終了しちゃうじゃん
ファイルが存在しないときはファイルを作る
ファイルがあるときはそのファイルの最後の行に書き込みしたいんです
0466デフォルトの名無しさん
2011/10/08(土) 01:36:50.50エラーぐらいトラップしろよ。
0467デフォルトの名無しさん
2011/10/08(土) 03:19:41.60http://perldoc.jp/docs/perl/5.10.1/perlfaq5.pod#How32come32when32I32open32a32file32read-write32it32wipes32it32out63
0468デフォルトの名無しさん
2011/10/08(土) 04:44:52.68あれ?間違ってる?
あれば開く。これで行けると思うけど
0469デフォルトの名無しさん
2011/10/08(土) 05:02:48.92perl -e "print -e qq/./"
1
だそうで
0470デフォルトの名無しさん
2011/10/08(土) 06:13:26.51$fileの中がユーザーから貰う値なら危険だな
if (-e $file && -f $file) { open (IN, $file); }
これならどうだ
0471デフォルトの名無しさん
2011/10/08(土) 08:26:13.99ファイルが存在したら、必ずopenできるんかい?
0472デフォルトの名無しさん
2011/10/08(土) 08:36:59.840473デフォルトの名無しさん
2011/10/08(土) 09:13:00.35どういう事なの?
用意されてるファイルじゃないの?
読み込めないようなファイルを置いている環境なの?
シチュがわからんが・・・
if (-e $file && -f $file && -r $file) { open (IN, $file); }
何か、どんどん冗長的な感じになってきたけど・・・
0474デフォルトの名無しさん
2011/10/08(土) 09:27:49.29ファイル消された場合なんかが典型的では
0475デフォルトの名無しさん
2011/10/08(土) 09:35:45.54正解。
エラーが出ることがあるから、先にチェックしてようという
アプローチは(無意味とは言わないが)完璧ではない。
0476デフォルトの名無しさん
2011/10/08(土) 09:42:55.02until (mkdir("./lock")) { sleep(1); }
if (-e $file && -f $file && -r $file) { open (IN, $file); }
rmdir("./lock");
0477デフォルトの名無しさん
2011/10/08(土) 09:43:31.500478デフォルトの名無しさん
2011/10/08(土) 09:46:44.57・・・ってか、どういうシチュかがわからん
もっと別で対策できそうだけど・・・
my $count = 0;
until (mkdir("./lock")) {
if (++$count > 5) { exit; }
sleep(1);
}
if (-e $file && -f $file && -r $file) { open (IN, $file); }
rmdir("./lock");
0479デフォルトの名無しさん
2011/10/08(土) 09:59:27.03これだけ言われても分からんのか?
なぜopenの戻り値をチェックしようとしない?
0480デフォルトの名無しさん
2011/10/08(土) 10:03:42.27言い訳じゃないけど、>>463の2番目の方法で、
ダメだと言われたから、その流れでこんな状態になったんだけどね
んじゃこれで。
open(IN, $file) || &error();
0481デフォルトの名無しさん
2011/10/08(土) 10:09:58.18> open(IN,$file);でファイルを開く場合
> 必ずしも開けなかった場合の例外処理をする必要はないですよね?
必要はある。
ファイルが開けない以外でも、予期せぬエラーが発生した場合に、そのまま後の処理を続けるべきではないから。
> 開けなかった場合はファイルを作るというようにしたいんですが
> 開けなかったらプログラム終了だと先に進まないから
ファイルの存在如何によって処理の内容を変える場合は、
open ではなくファイルテスト演算子(-e など)で条件分岐させる。
ファイルテストが通ったにもかかわらず実際に open した時にエラーが出るのなら、
仕様として想定していない事態が起こっているのだと考え、
やはりそこで実行を中止させて何が起こったのか($! の内容)を確認するべき。
0482デフォルトの名無しさん
2011/10/08(土) 12:08:37.64考え方が逆だと思うが
正常に開けた場合に限って処理を続行する、だろ
0483デフォルトの名無しさん
2011/10/08(土) 13:32:11.40#test.datを開けなかった場合test.datを作ってプログラム終了
open(OUT,">test.dat");
close(OUT);
print "error";
exit(0);
}
#test.datを開けた場合は以下の処理
@lines = <IN>;
push(@lines,"新しい行\n");
open(OUT,">test.dat");
foreach(@lines){
print OUT $_;
}
close(OUT);
close(IN);
これでいいだろ
0484デフォルトの名無しさん
2011/10/08(土) 13:37:32.280485デフォルトの名無しさん
2011/10/08(土) 13:37:39.82だめ。
> }
> #test.datを開けた場合は以下の処理
> @lines = <IN>;
> push(@lines,"新しい行\n");
>
> open(OUT,">test.dat"); ← ここでopenできなかった場合の処理が抜けている。
> foreach(@lines){
0486デフォルトの名無しさん
2011/10/08(土) 13:42:11.93、、、、、ところで >>467 の切り詰めるってどういう意味ですか
0487486
2011/10/08(土) 13:46:58.790488デフォルトの名無しさん
2011/10/08(土) 13:50:37.60この場合は一部じゃなく全部をすっかり消して上書きするってことだからこの訳は微妙だな
0489デフォルトの名無しさん
2011/10/08(土) 13:51:52.180490デフォルトの名無しさん
2011/10/08(土) 14:51:06.16また質問なんだけど、
ファイルの1行に単語とその出現回数などが書かれているデータがあって、それを読み込んで木を作成してる。
んで、ファイル全行を読み込むのはメモリ食うからダメかなと思うんだけど、
1単語ごとにmake_tree($word)みたいな関数を呼ぶのもオーバーヘッド過ぎるのでは、と思う。
だから以下のように100行ずつ読み込むといったことがしたいのだけど、簡潔な書き方はないでしょうか。
whileの条件式の中にまとめて読む行数を指定できれば読み易そうなんですが。
my @line;
while (<$IN>) {
push @line, $_;
if ($. % 100 == 0) {
make_tree(\@line);
@line = ();
}
}
ただ問題解決の方向性自体が間違ってる感もあるので、合わせて募集。板チだろうか。
0491デフォルトの名無しさん
2011/10/08(土) 15:18:11.56「ファイルの総行数が 115行だったら、15行make_tree走査しないじゃん。
しゃーないから eof 条件に追加。」
↓
if ( $. % 100 == 0 or eof ){
とかするくらいだったら、普通にコード走らしたら?
後、実際にBenchmark取れ。
0492デフォルトの名無しさん
2011/10/08(土) 15:36:41.44http://perldoc.perl.org/Tie/File.html
http://perldoc.jp/docs/perl/5.10.1/perlfaq3.pod#How32do32I32profile32my32Perl32programs63
0493デフォルトの名無しさん
2011/10/08(土) 16:00:35.30そのDevel::DProfなりDevel::NYTProfなり、常用してんのか?
0494デフォルトの名無しさん
2011/10/08(土) 16:35:36.14ちょっと出直してきます。
perldocのFAQは全部読んでおいたほうがいいですね、すげぇ。
0495デフォルトの名無しさん
2011/10/08(土) 18:08:08.71if( !open(IN,"test.dat") ){
#test.datを開けなかった場合test.datを作ってプログラム終了
if( !open(OUT,">test.dat") ){
print "書き込みerror";
exit(0);
}
close(OUT);
print "error";
exit(0);
}
#test.datを開けた場合は以下の処理
@lines = <IN>;
push(@lines,"新しい行\n");
if( !open(OUT,">test.dat") ){
print "書き込みerroer";
exit(0);
}
foreach(@lines){
print OUT $_;
}
close(OUT);
close(IN);
書き込み部分のopenのエラー処理もしたぞ
ファイルロックとかは考えなければこれで完璧だろ?
0496デフォルトの名無しさん
2011/10/08(土) 18:30:33.66open(OUT, ">>", "test.dat") or die "cannot open/create `test.dat': $!";
print OUT "NEW LINE\n";
close(OUT);
0497デフォルトの名無しさん
2011/10/08(土) 19:10:34.46それだとwindows環境で使えない
0498デフォルトの名無しさん
2011/10/08(土) 19:29:01.420499デフォルトの名無しさん
2011/10/08(土) 19:39:24.81printのエラー処理が抜けてる
0500デフォルトの名無しさん
2011/10/08(土) 19:44:56.13をい。
0501デフォルトの名無しさん
2011/10/08(土) 19:55:20.650502デフォルトの名無しさん
2011/10/08(土) 20:24:59.800503デフォルトの名無しさん
2011/10/08(土) 22:42:52.49結構見落としがちだけど、出力先の空きがなくなったりすることもある
0504デフォルトの名無しさん
2011/10/09(日) 00:39:52.91へぇー、なるほど
0505デフォルトの名無しさん
2011/10/09(日) 01:21:29.90プログラミングPerlには名前が短いから常にforを使うっていう記述がおそらくギャクで書いてあるんだけど。
0506505
2011/10/09(日) 01:24:09.43でも後置のときはforで書いてるな。見かけるサンプルがそうだったからだと思う。
0507デフォルトの名無しさん
2011/10/09(日) 01:52:22.55というか原則的にはこう↓
> ・われわれが3回繰り返すことは真実である:
> システムコールの戻り値は必ずチェックせよ。
> システムコールの戻り値は必ずチェックせよ。
> システムコールの戻り値は 必 ず チ ェ ッ ク せ よ!
(青ラクダ本第 3 版「24.3 プログラミングの書法」)
実際には die, <> のようにチェックできない・チェックすると
不自然なコードになるケースもあると思うけど。
0508デフォルトの名無しさん
2011/10/09(日) 01:57:09.65解放されるのにね。
0509デフォルトの名無しさん
2011/10/09(日) 02:00:14.19常にfor。
自分が昔書いた古いスクリプトにforeachを見つけると全部forに直すくらいfor。
0510デフォルトの名無しさん
2011/10/09(日) 06:32:36.33常にfor
Cタイプのforを使う意味が無いから、使い分け自体が成立しない。
509氏の真似じゃないけど、
自分が昔書いた古いスクリプトにCタイプのforが書かれてると、全部書き直す。
もちろんforeachもforに。
0511デフォルトの名無しさん
2011/10/09(日) 07:07:45.040512デフォルトの名無しさん
2011/10/09(日) 07:15:54.94until EXPRと同じレベル。
0513デフォルトの名無しさん
2011/10/09(日) 07:30:57.01だとしたら、俺的には信じられない・・・
for (my $i=0; $i<scaler @ary; $i++) { ... } とかなら良いけど。
0514デフォルトの名無しさん
2011/10/09(日) 07:43:21.310515デフォルトの名無しさん
2011/10/09(日) 07:43:22.23for (my $i = 1; $i <= $max; $i += 2) { ... }
こういうのもforeachか何かに書き換えるの?
for my $i (grep { $_ % 2 } 1..$max) { ... }
for my $i (1..($max+1)/2) { $i = $i*2-1; ... }
とか?
>>513
信じられなくても、perldoc等でもそれが普通に使われてるのが現実。
0516デフォルトの名無しさん
2011/10/09(日) 07:48:45.920517デフォルトの名無しさん
2011/10/09(日) 08:01:50.51my $i = 0 ;
while ( $i <= $max ){
$i += 2;
}
0518デフォルトの名無しさん
2011/10/09(日) 08:57:53.95増分がマイナスの時とか制御変数が複数あると便利な時にはCタイプのforループは普通に使うよん。
Perl脳で見るとなんかPerlっぽくないな〜とつい思っちゃうけど、使うことは使う。
0519デフォルトの名無しさん
2011/10/09(日) 09:03:21.54そりゃforと同じことをwhileでも書けるのは当たり前、
というかwhileを実用に即して糖衣構文化したものがforなのに、
forが適任の場面でそれをあえて使わずにwhile使えというのは主客転倒だろ。
ネタで言ってるんだと信じたいものだが。
あと、それだと$iのスコープが限定されないから、
forと全く同じにするにはさらに全体をブロックで囲む必要がある。
0520デフォルトの名無しさん
2011/10/09(日) 09:11:49.04答え出てんじゃん。Cのforにしなくて良いじゃんw
#実用云々は違うだろ。Cに慣れた人の為のfor(;;){}なんだから。
>あと、それだと$iのスコープが限定されないから、
>forと全く同じにするにはさらに全体をブロックで囲む必要がある。
これは同意。
PBP信者が喜ぶけど、PBP読んでからレスした方がいらん恥は書かんで済むよ。
0521デフォルトの名無しさん
2011/10/09(日) 09:14:30.49狂気の沙汰だ
0522デフォルトの名無しさん
2011/10/09(日) 09:15:07.14for( my $i = 0 ; my $j = 0; $i < 10 and $j < 10 ; $i ++ and $j ++ ){ }
か?
0523デフォルトの名無しさん
2011/10/09(日) 09:15:37.410524デフォルトの名無しさん
2011/10/09(日) 09:22:39.980525デフォルトの名無しさん
2011/10/09(日) 09:31:14.49for,whileのポストフィクス禁止。
ねーよ > PBP
0526デフォルトの名無しさん
2011/10/09(日) 09:38:23.48すまん、糖衣構文の話はそもそも「Cの」while(>>517)とfor(>>515の上)について言ったつもりだ。
俺は場合によって最善手を選べばいいと考えているだけで、
for (LIST) で綺麗に書けるようならもちろんそれを使うよ。
ただし、>>515とか>>518のような場合なら for (;;) を使うこともある。
ちなみにPBPは一応持ってます。
0527デフォルトの名無しさん
2011/10/09(日) 09:42:01.68ループで扱う数がデカ過ぎるときとかは
Cタイプ for 使う事あるよ
for ( my $i = 2; $i <= 600851475143; $i++ ) { ... }
0528デフォルトの名無しさん
2011/10/09(日) 09:49:41.92まだ経験が浅いようだねw
0529デフォルトの名無しさん
2011/10/09(日) 09:54:19.810530デフォルトの名無しさん
2011/10/09(日) 10:08:46.08なんだから、for(;;)完全排除出来て当たり前
それをするかしないかは、個人の勝手
何でこんなに議論になる?
つーか極端な話、whileすら排除出来るけど(読み易さを犠牲にすれば)。
0531デフォルトの名無しさん
2011/10/09(日) 10:23:49.20まったく。goto文さえあればwhileもforもuntilも不要になっちゃうもんな。
0532デフォルトの名無しさん
2011/10/09(日) 10:24:45.500533デフォルトの名無しさん
2011/10/09(日) 10:40:16.63kwsk
0534デフォルトの名無しさん
2011/10/09(日) 12:23:56.160535デフォルトの名無しさん
2011/10/09(日) 13:33:06.780536デフォルトの名無しさん
2011/10/09(日) 13:36:25.710537デフォルトの名無しさん
2011/10/09(日) 13:51:04.96単純にn〜mまで繰り返すとかならforeach(n..m)でやるけど
Cスタイルは結構特殊な挙動を取らせたりできるからね。
まあwhileに書き直すことも勿論できるけどさ
0538505
2011/10/09(日) 14:09:39.68ただCスタイルよりは for my $i (1..100) のほうが速かった。
0539デフォルトの名無しさん
2011/10/09(日) 14:35:11.34{
my $i
while (){
}
}
って書くのは面倒臭いね。ファイルを読み込むときはforじゃなくてwhile使うから、$iが必要なときはこう書かなきゃいけないけど。
>>520
PBPはかなり熟読したけど、whileとforの使い分けはできてないな。気にはしてるけど。
for
固定回数ループのとき
反復カウントや、条件式が1つのとき
反復カウントがインクリメントのとき
while
不規則にカウントされるもの
反復カウント変数や、条件式が2つ以上のとき
反復カウントがデクリメントされるとき
reverse 0 .. 100 でデクリメントするとか忘れてた。
0540538
2011/10/09(日) 14:49:15.57for (my $i=0; $i<@ary; $i++) { print $i };
for my $i (0 .. $#ary) { print $i };
Deparse,-x7で前者はwhileになるが、後者はforeachに変換された。
0541デフォルトの名無しさん
2011/10/09(日) 14:58:43.84変換もなにも、後者はforeachそのもののような
0542デフォルトの名無しさん
2011/10/09(日) 15:18:15.36どうしたら格好よく書けるの?
for文で普通に書いたら当たり前のようにバグった。
0543デフォルトの名無しさん
2011/10/09(日) 15:21:53.64バグがでたからって小手先のテクニックに頼ろうとするな。
単にお前が技術力が低いだけだ。コード書いて練習しろ
それぐらいfor文でもバグ無しで書けるようになれ。
例えば、配列の中の数字が7の倍数の時だけ削除する。などのような
簡単なものを実装してみ。
0544デフォルトの名無しさん
2011/10/09(日) 15:23:39.30@array = grep ! 条件に合致, @array;
0545デフォルトの名無しさん
2011/10/09(日) 15:33:00.34>If any part of LIST is an array, "foreach" will get very confused if
>you add or remove elements within the loop body, for example with
>"splice". So don’t do that.
普通にgrep使え
普通に新規配列作れ
0546デフォルトの名無しさん
2011/10/09(日) 15:58:33.79そうなんだ、、、、
>>542
とりあえずソース。
先頭にスペース入れるのはどうやってるんだ。全角スペースとかか。
テスト
for
for
0547デフォルトの名無しさん
2011/10/09(日) 15:59:55.41> 普通にgrep使え
> 普通に新規配列作れ
grepを使うか、またはforeachを使うなら新規配列を作れ、ってことですね。
0548デフォルトの名無しさん
2011/10/09(日) 16:07:52.27全角スペースでもいいし でもいい
0549デフォルトの名無しさん
2011/10/09(日) 16:09:40.81foreach(huge;foo;bar)はforで、
for(@arr)はforeachで、
for(;;){}(無限ループ)はwhile(1){}で
表示される。
% perl -MO=Deparse -le 'foreach(;;){} for(1){} foreach($i;1;){}'
BEGIN { $/ = "\n"; $\ = "\n"; }
while (1) {
();
}
foreach $_ (1) {
();
}
for ($i; ;) {
();
}
-e syntax OK
>>547
そう。
尻から走査していいなら、perlsynに背いてsplice使う事も出来るけど。
小手先に走らんでも良かろ。
0550デフォルトの名無しさん
2011/10/11(火) 20:25:25.99$time = time;
$ID = $time.$$;で問題ないんですか?
0551デフォルトの名無しさん
2011/10/11(火) 21:33:52.021秒以内にPIDが一巡する可能性がなくて、
運用中にマシンの時刻を修正する可能性もなくて、
"1234567890"."12345" と "12345678901"."2345" のような衝突が起こりうるほど長く運用する可能性もない、
という条件が確実に満たされるのであればなかなか重複しなさそうには見える。
0552デフォルトの名無しさん
2011/10/11(火) 21:42:28.36use Digest::SHA1 qw(sha1_hex);
print genUniqID();
#----------------------------------------------#
#■ユニークなIDを生成する
#----------------------------------------------#
sub genUniqID{
my $seed = shift || 'seed-string';
my $id = join(''
, $ENV{'REMOTE_ADDR'}
, $ENV{'HTTP_USER_AGENT'}
, time
, $$
, rand(9999)
, $seed
);
return(sha1_hex($id));
}
だってさ
0553デフォルトの名無しさん
2011/10/11(火) 23:31:56.35質問場所がここじゃなかったら誘導お願いします。
以下の環境を作成し、
コマンドプロンプトからtest.plをCALLしたのですが
SQLサーバがないとのエラーが表示され、接続出来ませんでした。
値を色々変えてみたりしたのですがどうやっても接続できず…
何が悪いのかお手上げ状態です。
接続文字列が悪いのでしょうか…?
ODBCでの接続は行えており、CSEからのDB参照や
コマンドプロンプトからのsqlcmdコマンドでなら正常にアクセスできます。
[sqlcmd /E /S PC-Name\SQLEXPRESS]
環境
・Windows7
・Microsoft SQL Server 2008
・Perl5.0
Server:PC-Name\SQLEXPRESS
DB:sampleDB
User:user
Password:pass
↓
0554デフォルトの名無しさん
2011/10/11(火) 23:33:22.15test.pl
-----------------------
$dataSource = "dbi:ODBC:".
"driver={SQL Server};".
"Server=(local);" .
"database=sampleDB;".
"Trusted_Connection=yes;".
"AutoTranslate=No;";
#データベースに接続
$user="user"; #ユーザ名
$pwd="pass"; #パスワード
$dbh = DBI->connect($dataSource,$user,$pwd)
or die $DBI::errstr;
# データアクセス(今は処理無し)
$dbh->disconnect;
-----------------------
エラー内容
-----------------------
DBI connect('driver={SQL Server};Server=(local);database=sampleDB;Trusted_Connec
tion=yes;AutoTranslate=No;','user',...) failed: [Microsoft][ODBC SQL Server Driver
][Shared Memory]SQL Server が存在しないか、アクセスが拒否されました。 (SQL-08001
) [state was 08001 now 01000]
[Microsoft][ODBC SQL Server Driver][Shared Memory]ConnectionOpen (Connect()). (S
QL-01000) at dbtst.pl line 28
[Microsoft][ODBC SQL Server Driver][Shared Memory]SQL Server が存在しないか、ア
クセスが拒否されました。 (SQL-08001) [state was 08001 now 01000]
[Microsoft][ODBC SQL Server Driver][Shared Memory]ConnectionOpen (Connect()). (S
QL-01000) at dbtst.pl line 28.
0555sage
2011/10/11(火) 23:35:01.98初心者版に書くつもりで間違えてました(><;
上二件、見なかった事にして下さい;;
0556デフォルトの名無しさん
2011/10/12(水) 17:18:33.94サーバサイドで外からのアクセスに対してユニークID を与える場合だと
Data::UUID 使うと良いんじゃね?
0557デフォルトの名無しさん
2011/10/12(水) 17:20:50.950558デフォルトの名無しさん
2011/10/12(水) 17:23:28.34これで$strの中の「はてな」の数を数えられるらしいんだけど
何が起きてるのか分かりますでしょうか?頭がおかしくなりそうです
0559デフォルトの名無しさん
2011/10/12(水) 17:25:57.26の返り血はリスト、配列。
リストを明示的にスカラーにすれば言うことなしだな
リストをスカラーに=でつなげば文脈で判断してリストの要素の個数が戻り値になる
0560デフォルトの名無しさん
2011/10/12(水) 17:31:21.08はやいっ!ありがとうございました!
配列をスカラー変数に入れると、要素の個数がスカラー変数に入るとは恐るべし
0561デフォルトの名無しさん
2011/10/12(水) 17:32:49.03ズバッ!! ブビュッ!! って感じだね。
> 返り血
0562デフォルトの名無しさん
2011/10/12(水) 18:16:57.59リストコンテキストでは正規表現に当った値を返す。
返り値がリストに固定されているんだったら、()=なんて真似はせずに済む。
my $str = 223 ;
printf "%s\n", scalar $str =~ /2/g ; # => 1
printf "%s\n", pos $str ; # => 1
printf "%s\n", scalar $str =~ /2/g ; # => 1
printf "%s\n", pos $str; # => 2
printf "%s\n", scalar $str =~ /2/g ; # => ''
printf "%s\n", pos $str ; # => undef
当然知ってて省略してるんだと思うが一応。
0563デフォルトの名無しさん
2011/10/12(水) 18:18:01.92◯リストコンテキストでは正規表現に当った値をリストにして返す。
0564デフォルトの名無しさん
2011/10/12(水) 18:26:24.90Parl忍者をアク禁にしてください
0565デフォルトの名無しさん
2011/10/12(水) 18:27:04.20Perl忍者をアク禁にしてください
0566デフォルトの名無しさん
2011/10/12(水) 18:30:08.23perlすげぇ!
0567デフォルトの名無しさん
2011/10/13(木) 18:08:30.64open(OUT,">temp_test.dat");
print OUT "new_line\n";
open(IN,"test.dat");
while($line = <IN>){
print OUT $line;
}
close(IN);
close(OUT);
次のように読み込みファイルを先に開いて書き込むのではどちらがいいんですか?
open(IN,"test");
open(OUT,">tmp_test.dat");
print OUT "new_line\n";
while($line = <IN>){
print OUT $line;
}
close(OUT);
close(IN);
0568デフォルトの名無しさん
2011/10/13(木) 18:20:12.32>>1
http://perldoc.jp/docs/perl/5.10.1/perlfaq5.pod#How32do32I32change44delete44or32insert32a32line32in32a32file44or32append32to32the32beginning32of32a32file63
0569デフォルトの名無しさん
2011/10/13(木) 18:27:38.83普通は読み込みファイルを開いてエラーがないときに
書き込みファイルを作るな。逆だとゴミファイルの
始末がめんどくさい。エラー処理を気にしない人は
どっちでもOK
0570デフォルトの名無しさん
2011/10/13(木) 18:27:54.870571デフォルトの名無しさん
2011/10/13(木) 18:56:37.370572デフォルトの名無しさん
2011/10/13(木) 19:28:22.310573デフォルトの名無しさん
2011/10/13(木) 19:34:39.99回答者の間違いやらに細かい突っ込みが入るところから
理解が広がる場合もあるのに、自ら放棄する行為だし
何より、他者の回答後に貼られて、
「はい、この質問はこれでしゅーりょー」
って言ってる、どや顔が浮んできもい
あのロシア人の超音波歌手みたいな、どや顔が。
0574デフォルトの名無しさん
2011/10/13(木) 19:41:34.30好きな人が好きなスタイルで回答すればよかろ。
説明が足りないとおもったら、補足すればいいし。
0575デフォルトの名無しさん
2011/10/13(木) 19:48:54.570576デフォルトの名無しさん
2011/10/13(木) 20:03:27.48C:\strawberry\perl\bin\perl.exe "-MExtUtils::Command::MM" "-e" "test_harness(0,
'blib\lib', 'blib\arch')" t/*.t
t/arg.t .. ok
t/env.t .. Subroutine Encode::Locale::GetACP redefined at (eval 5) line 2.
Dubious, test returned 253 (wstat 64768, 0xfd00)
Failed 6/13 subtests
とテストでコケるね、
Linux で書いたものを Windows で動作確認したかったんだけど困ったなあ。
0577デフォルトの名無しさん
2011/10/13(木) 20:11:33.56普段は質問側の人間だろ
0578デフォルトの名無しさん
2011/10/13(木) 21:08:14.98ActivePerl5.12.3でもCPAN経由では入らなかった。
たぶん、これかな。
https://rt.cpan.org/Public/Bug/Display.html?id=69256
0579デフォルトの名無しさん
2011/10/13(木) 21:30:14.720580デフォルトの名無しさん
2011/10/13(木) 21:37:22.600581デフォルトの名無しさん
2011/10/13(木) 21:41:51.92役に立つサイトなんだろうけど、横幅固定のデザインがうぜぇ
0582デフォルトの名無しさん
2011/10/13(木) 23:17:42.23MIME::Liteなんだが
Subjectに↓をセットしているのに(実際は、全角スペースは半角)
=?ISO-2022-JP?B?GyRCJCskTyQ/JE8kNSQrJCIkSiReJD8kSiRPJCskSiQ/JGQkSiRPGyhC?=
=?ISO-2022-JP?B?GyRCJCskSiRPJEokKyQ/JEokTyRkGyhC?= - Google
=?ISO-2022-JP?B?GyRCOCE6dxsoQg==?=
as_stringしてみると↓のように各行の頭にスペースが一個付けられてしまう
Subject: =?ISO-2022-JP?B?GyRCJCskTyQ/JE8kNSQrJCIkSiReJD8kSiRPJCskSiQ/JGQkSiRPGyhC?=
=?ISO-2022-JP?B?GyRCJCskSiRPJEokKyQ/JEokTyRkGyhC?= - Google
=?ISO-2022-JP?B?GyRCOCE6dxsoQg==?=
これのせいで受信側では余計なスペースが表示されてしまうんだがどうしたらいいんだ?
0583デフォルトの名無しさん
2011/10/14(金) 01:49:57.68つまりif(!open(IN,"test.dat")){}と
unless(-e "test.dat"){}は同じことですか?
0584デフォルトの名無しさん
2011/10/14(金) 01:55:22.73ファイルロックがかかっている場合や、
パーミッションがなかった場合など
0585デフォルトの名無しさん
2011/10/14(金) 05:08:46.68Subjectに↓をセットしてみては。
=?ISO-2022-JP?B?GyRCJCskTyQ/JE8kNSQrJCIkSiReJD8kSiRPJCskSiQ/JGQkSiRPGyhC?=
=?ISO-2022-JP?B?GyRCJCskSiRPJEokKyQ/JEokTyRkGyhC?= - Google
=?ISO-2022-JP?B?GyRCOCE6dxsoQg==?=
0587デフォルトの名無しさん
2011/10/14(金) 08:30:29.03そもそもメールのSubjectに改行が入ってる時点でなんか気持ち悪いんだが。
0588デフォルトの名無しさん
2011/10/14(金) 08:37:44.23読めるように仕様が作られた。
日本語+MIMEメールじゃ読めたもんじゃないがw
だからメールは76文字ぐらいを超えると
読みやすさのために改行することを推奨している。
また140文字? かいくらか忘れたがを超えると
推奨じゃなくて改行しなさいという仕様。
0589デフォルトの名無しさん
2011/10/14(金) 08:44:15.17単語の区切りにしとけよとか、複数のスペースは一つのスペースに
みなせるよね。英語だと。
じゃあ日本語はどうしろと?という問題もある。
0590589
2011/10/14(金) 22:14:06.71レスもついていないし、修正するわ
英語だと本とか英作文とかでやってると思うけど、改行を入れるとき
this
is
a pen
というように、単語の切れ目で改行を入れる。
this i
s a p
en
なんて改行の入れ方はしない。
また、英文法的には、this is a penでも、this is a penでも
スペース(タブ、改行含む)がいくつあろうが、”スペースで区切られた文章”という形で同じ意味になる。
HTMLとか2ちゃんねるとかそうだけど、複数のスペースをいれても1つになるのはそれが理由。
さて76文字ごとに改行の話だけど、日本語は単語をスペースで区切らないし、文字の途中で折り返したりする。
そうすると文字の途中で改行(スペース)が入ることになる。
これを英文法的に解釈すると、 「文章の初め」「スペース(改行)」「文章の終わり」 という風に
文章の途中に勝手にスペースが入ることになる。
一ついい忘れた。Subjectの二行目の頭にスペースが入るのはメールの仕様だから。
あとヘッダの仕様 http://adiary.blog.abk.nu/0213 76文字とか140文字とか適当だったねぇw
> それぞれの行の文字はCRLFを除いて、決して998文字以下でなければならず(MUST)、
> 78文字以下であるべきである(SHOULD)。
0591589
2011/10/14(金) 22:16:05.71> まとめると「=?ISO-2022-JP?B?(略)?=」ブロックと「=?ISO-2022-JP?B?(略)?=」ブロックの間にある、
> "CR LF SPACE(又はTAB)"の1つ以上の繰り返しは削除すべしということになります。
ということらしいので、受信側のバグじゃね?w
0592デフォルトの名無しさん
2011/10/14(金) 22:34:33.22> > まとめると「=?ISO-2022-JP?B?(略)?=」ブロックと「=?ISO-2022-JP?B?(略)?=」ブロックの間にある、
> > "CR LF SPACE(又はTAB)"の1つ以上の繰り返しは削除すべしということになります。
ふむ。ここのところはHTMLの仕様と一緒だな。
0593デフォルトの名無しさん
2011/10/14(金) 22:50:10.71http://tools.ietf.org/html/rfc5322#section-2.2.3
> Unfolding is accomplished by simply removing any CRLF that is
> immediately followed by WSP.
アンフォールディングは単純にWSPが後に続くCRLFを削除することで完了する。
じゃないの?
> can be represented as:
> Subject: This
> is a test
このCRLF+WSPを消すと、"Thisis a test"になるし。
0594582
2011/10/14(金) 22:51:52.95> まとめると「=?ISO-2022-JP?B?(略)?=」ブロックと「=?ISO-2022-JP?B?(略)?=」ブロックの間にある、
> "CR LF SPACE(又はTAB)"の1つ以上の繰り返しは削除すべしということになります。
これは問題ないよ。受信側のメーラーでもちゃんと処理できてる
今回問題が出てるパターンは
「ほげほげふーばー - Google 検索」のように半角文字列が途中に入ってる場合なんだよね
これをMIMEエンコードすると
=?ISO-2022-JP?B?GyRCJFskMiRbJDIkVSE8JFAhPBsoQg==?= - Google
=?ISO-2022-JP?B?GyRCOCE6dxsoQg==?=
という風になって、MIME::Liteに渡すと
=?ISO-2022-JP?B?GyRCJFskMiRbJDIkVSE8JFAhPBsoQg==?= - Google
=?ISO-2022-JP?B?GyRCOCE6dxsoQg==?=
となる。
これだと「=?ISO-2022-JP?B?(略)?=」ブロックと「=?ISO-2022-JP?B?(略)?=」ブロックの間に「 - GoogleCRLF 」があることになって、上のルールは適用されない
「this
is
a pen」と同じように改行だけを削除するのみ
MIME::LiteはまさかMIMEエンコードされた文字列だとは思わず、CRLFがあったら次にCPACEを入れるようにしているのかもしれない
0595デフォルトの名無しさん
2011/10/15(土) 01:41:35.19お前のせいでリンクはってくれてた人がいなくなったら、すげー迷惑。
0596デフォルトの名無しさん
2011/10/15(土) 02:16:06.50例外クラスを使い分けるにはどうしたらいいですか。
つまり
try { ... }
catch(FooException $ex) { ... }
catch(BarException $ex) { ... }
に相当するコードは、Perlではどうかきますか。
0597デフォルトの名無しさん
2011/10/15(土) 02:32:37.68お前は何を言っているんだ?
0598デフォルトの名無しさん
2011/10/15(土) 07:18:55.44ファイルハンドル(?)をコピーしたい。
Rubyだと
handle = $stdout
で済むことなんだけど、Perlでは
my $SOUT = STDOUT;
print $SOUt "hello"
ってできる?
質問2
print した内容を横取りしたい。
Rubyだとこんなかんじ:
begin
backup = $stdout
$stdout = StringIO.new
# ... print 文を使ったコード ...
output = $stdout.value
ensure
$stdout = backup
end
0599デフォルトの名無しさん
2011/10/15(土) 07:34:04.78"perl try catch 例外クラス +site:perldoc.jp"でググれば、Error.pmの日本語perldoc が出るし、
0600デフォルトの名無しさん
2011/10/15(土) 07:57:59.79前者
% perl -le 'my $fh = \*STDERR ; print $fh q{hoge}' 2> /dev/null
後者
File::Tee, IO::Tee "tee +site:search.cpan.org"
本当はrubyの人にレスるつもりは毛頭なかったけど、
599を書いてる途中で書き込んじまってどうでも良くなった。
0601デフォルトの名無しさん
2011/10/15(土) 08:37:18.68ありがとうございます。参考にします。
0602デフォルトの名無しさん
2011/10/15(土) 08:46:35.05どうしても try-catch形式で書きたければ Try::Tiny 使ってみたら
0603602
2011/10/15(土) 09:04:36.50use Try::Tiny;
try {
...;
} catch {
if ( ... ) {
...;
elsif ( ... ) {
...;
else {<br />
...;
}
0604602
2011/10/15(土) 09:09:11.30use Try::Tiny;
try {
...;
} catch {
if ( ... ) {
...;
elsif ( ... ) {
...;
else {
...;
 }
};
0605デフォルトの名無しさん
2011/10/15(土) 09:19:33.03http://perldoc.jp/func/open
1.
open(my $stdout, ">&", \*STDOUT) or die $!;
print $stdout "hello\n";
2-a. プリミティブなやり方
open(my $backup, ">&", \*STDOUT) or die $!;
close(STDOUT) or die $!;
open(STDOUT, ">", \(my $output)) or die $!;
...
close(STDOUT) or die $!;
open(STDOUT, ">&", $backup) or die $!;
close($backup) or die $!;
2-b. 手抜き
open(my $stdout, ">", \(my $output)) or die $!;
select $stdout;
...
select STDOUT;
close($stdout) or die $!;
2-c. CPANモジュールを使う(お好きなモジュールをどうぞ)
use Capture::Tiny qw(capture);
my ($output, $error) = capture {
print "So many printing...\n";
};
0606デフォルトの名無しさん
2011/10/15(土) 09:43:36.66例示はファイルハンドルのコピーでなくエイリアスなので、>>600でいいのかな?
handle = $stdout.dup
handle = $stdout.clone
のように本当のコピーなら、>>605かな?
0607デフォルトの名無しさん
2011/10/15(土) 09:48:23.78http://perldoc.jp/docs/perl/5.10.1/perlfaq5.pod#How32do32I32dup40a32filehandle32in32Perl63
http://perldoc.jp/docs/perl/5.10.1/perlfaq5.pod#How32can32I32use32a32filehandle32indirectly63
0608デフォルトの名無しさん
2011/10/15(土) 10:36:08.87my $obj = new Foo();
print $obj->__id__; #=> 0x314159265358
$obj = new Foo();
print $obj->__id__; #=> 0x314159298940
みたいなの。
0609デフォルトの名無しさん
2011/10/15(土) 11:07:47.79http://perldoc.jp/docs/perl/5.10.0/perlobj.pod
> オブジェクトは単なるリファレンス
http://perldoc.jp/docs/perl/5.10.0/perlref.pod
> リファレンスを文字列として使うと、参照しているものの型 (perlobj で記述しているように、
> bless しているパッケージを含みます)と、16進数で表現された数値アドレスの両方を生成します。
> perl -e "print map bless({}, 'Foo') . qq/\n/, 0..2"
Foo=HASH(0x298e54)
Foo=HASH(0x187a484)
Foo=HASH(0x187aa84)
0610デフォルトの名無しさん
2011/10/15(土) 11:08:00.61うーん?
そのまま、print $obj で表示される物じゃダメ?
0611デフォルトの名無しさん
2011/10/15(土) 11:18:37.22ほうっておこうと思ったけど、へんな回答があるのでw
$object + 0 とやればいい。
http://blog.livedoor.jp/dankogai/archives/50484421.html
0612デフォルトの名無しさん
2011/10/15(土) 11:29:11.97use Scalar::Utils qw( refaddr );
my $addr = refaddr $objct;
0613デフォルトの名無しさん
2011/10/15(土) 11:30:39.10s/Utils/Util/;
0614デフォルトの名無しさん
2011/10/15(土) 12:12:06.28URIとかTime::PieceとかDateTimeとか
そうでなければ+0とかでもいいと思う
0615576
2011/10/15(土) 13:04:12.72cpan や cpanm ではテストにパスしないとインストール出来ないけど、
ppm にはしっかり Encode-Locale-1.02 があって
問題無く使われているみたいだったので、
テストでコケたのを無視して、
展開された作業用ディレクトリからインストールしたら無事期待通りに使えた。
Encode::Locale自体じゃなくて t/env.t の方に問題があったみたいだね。
しかし、いくら普通に使えるからといってテストでコケるのを放置してるのは何だかなあ。
0616デフォルトの名無しさん
2011/10/15(土) 13:13:18.67テスト無視するだろ?
元のレスもその程度の問題だと認識して「なんだかなー」と思ってたんだが。
0617デフォルトの名無しさん
2011/10/15(土) 13:50:32.42>>610で、=でsplitして、[0]はクラスの型で[1]で参照先のチェックじゃダメなの?
0618デフォルトの名無しさん
2011/10/15(土) 13:52:18.54だめ
0619デフォルトの名無しさん
2011/10/15(土) 14:14:34.74あと>>614の言うような場合には当然使えない。
0620デフォルトの名無しさん
2011/10/15(土) 15:42:23.41$ perl -Mstrict -Mwarnings -le ' print bless({}, q{Foo=Q(})'
Foo=Q(=HASH(0x7fec4a802eb8)
なんで態々数値に変換してるかって、数値である事が保証されてるからだよ。
0621デフォルトの名無しさん
2011/10/15(土) 15:56:51.260と1で出来てるんですが。
コードも0と1だよ。
0622デフォルトの名無しさん
2011/10/15(土) 16:02:44.800623デフォルトの名無しさん
2011/10/15(土) 16:03:34.010624デフォルトの名無しさん
2011/10/15(土) 16:04:17.05ユニークなIDが欲しいだけなら数値コンテキストに置こうが文字列コンテキストに置こうが
同じ事 (一意な文字列である事は保証されている) だが、>>614 のような問題があるので
Scalar::Util::refaddr() が最善。
0626578
2011/10/15(土) 17:32:16.08調べたらこんな感じだった。
env.t
> Encode::Locale::reinit("cp1252");
・Windowsではコードページの変更が出来ない
> $ENV{"m\xf6ney"} = "\x80uro";
・コードページ"cp932"(日本標準)ではこの設定ができない
・なぜかPerlが落ちる
・コードページが元から"cp1252"(西欧標準)の場合は上手く行く
英語版のWindowsだと問題を把握できないかも。
0627デフォルトの名無しさん
2011/10/15(土) 17:37:51.13sub f(&) {
my ($closure) = @_;
}
と定義すると、
f { print 123 };
のように使えます。
同じように、メソッド定義で
package Foo;
sub f($&) {
my ($this, $closure) = @_;
}
のようにしたいですが、$thisのせいで$closureが第1引数にできないようです。
プロトタイプ宣言はメソッド定義では使えないのでしょうか。
0628デフォルトの名無しさん
2011/10/15(土) 17:52:04.08http://perldoc.jp/docs/perl/5.10.0/perlsub.pod#Prototypes
0629デフォルトの名無しさん
2011/10/15(土) 17:59:22.710630615
2011/10/15(土) 18:56:38.68なるほど、英語版の Windows じゃ再現性が無いから、
Encode::Locale のメンテナも何が問題になっているのか把握出来て無いのか。
教えてくれてありがとう。
0631デフォルトの名無しさん
2011/10/15(土) 20:09:10.23そのURL先にこう書いてありました。
> メソッド呼び出しはプロトタイプを行う/行わないによる影響を受けません。
> なぜなら正確な呼び出しコードは、継承に依存しているために コンパイル時には
> 不確定だからです。
やっぱりメソッドでは使えないのですね。分かりました。
0632デフォルトの名無しさん
2011/10/15(土) 20:12:39.090633デフォルトの名無しさん
2011/10/15(土) 20:37:18.47ttp://perldoc.jp/docs/perl/5.6.1/overload.pod#Overloadable32Operations
この中には「=~」が載ってないです。どうしてでしょうか。
0634デフォルトの名無しさん
2011/10/15(土) 20:57:10.99正規表現周りで、実装が他の算術計算やらと別枠になってんじゃねーの?
新しいバージョンでも ~~ がオーバーロード可能になってるだけだし。
(~~ はどっちかっつーと他の正規表現のラッパー的挙動だし)
0635デフォルトの名無しさん
2011/10/15(土) 21:15:24.77package Hoge;
use overload 'qr' => sub { return qr/foo/; };
sub new {
return bless {};
}
package main;
my $h = Hoge->new;
say "foo" =~ $h;
こういうのならできないこともない
0636デフォルトの名無しさん
2011/10/16(日) 02:24:45.58perlの予約語って、どこかにリストアップされてませんか?
0637デフォルトの名無しさん
2011/10/16(日) 02:41:42.16「perl 予約語 一覧」でググって7番目にこんなページがあったが。
http://d.hatena.ne.jp/syohex/20110914/1316010018
実際、変数名に関してはシジルが付くから気にする必要はないし、
組込関数名は perlfunc か http://perldoc.jp/index/function に揃ってるし、
あとは制御構造の if unless elsif else while until for foreach ぐらいだ。
http://perldoc.jp/docs/perl/5.10.0/perlsyn.pod
0638デフォルトの名無しさん
2011/10/16(日) 05:46:42.29and or not xor eq ge le ne gt lt cmp は演算子か…
0639デフォルトの名無しさん
2011/10/16(日) 09:47:14.58だれかご存知の方いらしゃいますか?
0640デフォルトの名無しさん
2011/10/16(日) 14:58:43.120641デフォルトの名無しさん
2011/10/16(日) 15:18:00.680642デフォルトの名無しさん
2011/10/16(日) 15:20:55.440643デフォルトの名無しさん
2011/10/16(日) 17:51:02.66あと tr とかも場合によってはやっちゃいそう。
0644デフォルトの名無しさん
2011/10/16(日) 17:56:28.340645デフォルトの名無しさん
2011/10/16(日) 18:14:59.36use Something qw(aaa bbb ccc ddd eee fff ggg hhh);
のように使いたい名前がたくさんある場合、
use Something qw(*);
のようにまとめて書くことはできませんか。
Pythonだと
from something import aaa, bbb, ccc, ddd, eee, fff, ggg, hhh
をまとめて
from something import *
と書けるので、Perlでも同じように書きたいです。
0646デフォルトの名無しさん
2011/10/16(日) 18:32:59.24この前提の元に話しをすすめると、
use Something qw( /^…$/ );
でこのケースには対応出来る(ハズ)
EXPORT_TAGやら、そこらへんで挙動が変更されるのかも知らんが
詳しくは、 perldoc Exporter して
Advanced features
Specialised Import Lists
を。
TAGとかに関しては使ってるモジュールのpod読めとしか
0647デフォルトの名無しさん
2011/10/16(日) 19:41:04.77ありがとうございます。調べてみます。
でもPythonと比べるとやはりPerlは複雑ですね。
0648デフォルトの名無しさん
2011/10/16(日) 21:52:56.88catalyst.pl perlとしたのですが
perlというのが作れません
どうすればいいのでしょうか?エラーが出ます
0650デフォルトの名無しさん
2011/10/16(日) 22:06:16.85ありがとうございます。
窓の杜を見ると、最新版がXP以降になってたので‥。
とりあえずダウンロードして試してみます。
0651デフォルトの名無しさん
2011/10/16(日) 22:08:02.50エラーが出なくなりました。
バージョンの違いだったのかな・・・
ありがとうございます。
0652デフォルトの名無しさん
2011/10/16(日) 22:19:40.86オ プ シ ョ ン っ て わ か る?
0653デフォルトの名無しさん
2011/10/16(日) 22:22:04.990654651
2011/10/16(日) 22:25:03.15できませんでした
http://codepad.org/gLiZI3zZ
catalyst perlでperlが作成できません
エラーがでます教えてください
0655デフォルトの名無しさん
2011/10/16(日) 22:25:40.340656デフォルトの名無しさん
2011/10/16(日) 23:30:41.33Pythonの -m オプションは、たとえば
python -m hello arg1 arg2
とすると、まず hello.py を探してきて、これが例えば /usr/local/python/site-packages/hello.py にあったとすると、あたかも
python /usr/local/python/site-packages/hello.py arg1 arg2
のように見なして実行してくれる機能です。
ライブラリをインストールすれば、コマンドライン用のスクリプトを別途用意しなくて済むのが便利です。
0657デフォルトの名無しさん
2011/10/16(日) 23:34:51.93http://codepad.org/gLiZI3zZ
同じエラーです
0659デフォルトの名無しさん
2011/10/16(日) 23:50:28.90無いです。
モジュール自体に実行スクリプトとしての機能を組む方法はありますが、
それをしたとしても、
perl `perldoc -l Hoge` arg1 arg2
と二段階の手順を踏む必要が出ます。
そもそも、perl では、モジュール兼実行スクリプトは(ほぼ)
自分で書いたコードでしょうから、置き場所くらいは分るんでは?
ちなみにCPAN moduleで実行スクリプト機能を組み込んだコードは
あまり見たことはありません。
cpan, cpanm, perlbrew, perltidy, perlcritic
とかは別途コードを用意してるし。
0660Perl忍者
2011/10/16(日) 23:50:36.420661Perl忍者
2011/10/16(日) 23:53:56.61http://search.cpan.org/CPAN/authors/id/M/MI/MIYAGAWA/Plack-0.9984.tar.gz
tar xvf Plack-0.9984.tar.gz
perl Makefile.PL
make
make test
make install
cpan -i Catalyst::Devel
catalyst.pl Test
0662651
2011/10/16(日) 23:55:18.84動作致しました。
root@tb:/home/aa# catalyst.pl hello
created "hello"
created "hello/script"
created "hello/lib"
created "hello/root"
created "hello/root/static"
0663デフォルトの名無しさん
2011/10/16(日) 23:56:03.680664デフォルトの名無しさん
2011/10/16(日) 23:56:11.320665デフォルトの名無しさん
2011/10/16(日) 23:59:25.53返答レスが付けられるんだよw
0666デフォルトの名無しさん
2011/10/17(月) 00:36:19.71必要なのがそんないっぱいあるのは、何か間違ってないか
あと全部指定にすると、後々整理するとき不要なのかどうか判断しずらい。
一人で開発してるならいいけど。
0667デフォルトの名無しさん
2011/10/17(月) 00:46:58.41use Scalar::Util qw(blessed dualvar reftype weaken isweak tainted readonly openhandle refaddr isvstring looks_like_number set_prototype);
全部 @EXPORT_OK
前半は、大袈裟な数じゃないと思うが?
必要なモジュールが@EXPORTしてくれてなくて
%EXPORT_TAGも設定してなかったら、結構な数が並ぶ事もある。
後半は同意。
0668デフォルトの名無しさん
2011/10/17(月) 06:57:33.29完全修飾名で呼び出すのがPerl流。
0669639
2011/10/17(月) 08:18:12.462000じゃ無理ですかね。やっぱり。
0670デフォルトの名無しさん
2011/10/17(月) 10:01:09.75つ[Linux]
0671デフォルトの名無しさん
2011/10/17(月) 10:03:42.22今となっては 2K じゃネットに繋いで使うには危な過ぎるから
完全にスタンドアローンで使っているのでなければ
Linux を入れて Perl を使ってみては如何?
0672デフォルトの名無しさん
2011/10/17(月) 10:21:33.13useではなくて、PHPのrequireやinclude、Rubyのload相当を探しています。
0673デフォルトの名無しさん
2011/10/17(月) 10:48:55.710674デフォルトの名無しさん
2011/10/17(月) 11:07:25.57その通りでしたorz
0675デフォルトの名無しさん
2011/10/17(月) 11:23:24.32ttp://perldoc.jp/docs/perl/5.10.0/perldiag.pod
にあるような警告がだされますが、このうち、一部の警告だけを無視することはできますか。
Pythonにこのような機能があって、たとえば古いプログラムを動かす時には、obsoleteなモジュールを読み込んだときに出る警告だけを抑制する、といったことができます。
こんな感じで、特定の警告だけを抑制する方法がPerlにあれば教えて下さい。
0676デフォルトの名無しさん
2011/10/17(月) 11:28:59.240677デフォルトの名無しさん
2011/10/17(月) 11:32:49.380678デフォルトの名無しさん
2011/10/17(月) 12:09:23.38no warnings '...' でいけました。ありがとうございます。
ただ、perllexwarn に書かれてあるカテゴリ名が、perldiagに書かれてある警告メッセージのどれに対応するのか分からず、全部試してみるはめになりました。
どっかに、警告メッセージとカテゴリ名の対応があるといいですね。
0679デフォルトの名無しさん
2011/10/17(月) 16:38:25.11perldiagに書いてあるだろ?
> 上記のうち、最初の三つ (W, D, S) に分類されるメッセージの大部分は warings プラグマで制御できます。
> メッセージが warnings プラグマで制御できる場合、 警告カテゴリは以下の説明で分類文字と共に記されています。
で、例えば
> accept() on closed socket %s
> (W closed) クローズされたソケットに accept を行なおうとしました。 socket() の呼び出し時に、返却値のチェックを忘れたのではありませんか。 "accept" in perlfunc を参照してください。
でclosedカテゴリだってわかるようになってる訳だが。
0680Perl忍者
2011/10/17(月) 19:12:42.700682デフォルトの名無しさん
2011/10/18(火) 02:42:05.72Pythonだとこんな感じのことを、perlでやる方法です。
a1 = [1, 2, 3]
a2 = [1, 2, 3]
a1 == a2 # 同値なのでTrue
a1 is a2 # 同一ではないのでFalse
0683デフォルトの名無しさん
2011/10/18(火) 03:19:28.96http://perldoc.jp/docs/perl/5.10.1/perlfaq4.pod#How32do32I32test32whether32two32arrays32or32hashes32are32equal63
0684デフォルトの名無しさん
2011/10/18(火) 03:36:42.05某スレ用に2chのスレタイを生成するジェネレータみたいなものを作っているのですが、
2chのスレタイのルールは
64バイト以内
全角文字は2バイト、半角文字は1バイト
ただし半角カナは1バイトとして数える
という感じらしいのですが
半角カナ混じりの文字列の長さを2chルールでカウントするためにはどういう方法が考えられますでしょうか…。
半角カナ⇔全角カナ変換などは見かけるのですが、これですと2バイトが2バイトに変換されるだけなので結果変わらず、悩んでます。
0685デフォルトの名無しさん
2011/10/18(火) 03:42:24.48ついでに言えばスレタイの文字数とかは板ごとのSETTING.TXTで決められてる。
0686デフォルトの名無しさん
2011/10/18(火) 03:48:07.30eucで必死にやってました。
変換したらとれました。ありがとうございました。
0687Perl忍者
2011/10/18(火) 14:04:55.380688デフォルトの名無しさん
2011/10/18(火) 14:53:53.03sub foo { };
で定義されたパッケージや関数を、いったん未定義にできますか。
undef Hogehoge;
とかしてみたけど、同然のようにエラーになりました。
0689デフォルトの名無しさん
2011/10/18(火) 15:21:38.37undef *foo; (Hogehoge の中からの場合)
undef *Hogehoge::foo; (同、外)
でいけると思うが、パッケージそのものを定義とか未定義にするって言い方は普通しないな。
package Hogehoge; は、これがあるブロックで定義するグローバル変数やサブルーチンは
基本的に Hogehoge:: に属させることにしますよ、という宣言にすぎないのであって、
package 宣言なしで main から
sub Hogehoge::foo { }
としてもほぼ等価なわけだし。
0690デフォルトの名無しさん
2011/10/18(火) 15:47:31.10#!/usr/bin/perl -w
use strict;
package Foo;
our $foo = 'foo';
sub foo { print "foo(@_)\n" }
package main;
Foo::foo(1);
undef &Foo::foo; # http://perldoc.jp/func/undef
print '&Foo::foo - ', (defined &Foo::foo ? 'defined' : 'undef'), "\n";
# http://perldoc.jp/docs/perl/5.10.0/perlmod.pod#Symbol32Tables
$Foo::{'foo'} = sub { print "bar(@_) [$Foo::foo]\n" };
# *Foo::foo = sub { print "bar(@_) [$Foo::foo]\n" };
Foo::foo(2);
# delete $Foo::{'foo'}; # は効かない?
undef $Foo::{'foo'};
print '&Foo::foo - ', (defined &Foo::foo ? 'defined' : 'undef'), "\n";
print '$Foo::foo - ', (defined $Foo::foo ? $Foo::foo : 'undef'), "\n";
0691デフォルトの名無しさん
2011/10/18(火) 15:57:40.62> とかしてみたけど、同然のようにエラーになりました。
×同然 → ○当然
0692デフォルトの名無しさん
2011/10/18(火) 16:30:26.22ありがとうございます。
よく考えたら、自分の使う範囲では、関数の削除ができれば当面は困らないことが分かりましたので、この方法でやってみます。
0693Perl忍者
2011/10/18(火) 17:42:43.620694デフォルトの名無しさん
2011/10/18(火) 21:56:45.67したときの返り値が↓
(あいう、えお。, かきく、けこ。,なにぬ\n)
みたいにデリミタが残るような自作splitを作りたいんですが、いい方法はないですか?
あとからmapでデリミタを付与するみたいなのは無しで。
0695デフォルトの名無しさん
2011/10/18(火) 22:00:48.18split /(?<=。)/
0696デフォルトの名無しさん
2011/10/18(火) 22:02:03.37ありがとうございます。試してみます。
0697デフォルトの名無しさん
2011/10/18(火) 22:24:03.72試した結果はどうだったんだよ
0698デフォルトの名無しさん
2011/10/18(火) 22:31:56.40別に報告待つまでもないだろ。
0699デフォルトの名無しさん
2011/10/18(火) 22:33:02.76うまく行ってるよ。
0700デフォルトの名無しさん
2011/10/19(水) 09:18:55.570701デフォルトの名無しさん
2011/10/19(水) 10:52:30.28たとえば、/¥.html$/ は拡張子が .html である文字列にマッチしますが、
「拡張子が .html ではない文字列」を表すような正規表現が知りたいです。
もちろん、
if ($str =~ /¥.html$/)
を
if ($str !~ /¥.html$/)
と書けばいいのですが、(設定ファイルを使って)自分が指定できるのは正規表現だけで、
該当のif文は(フレームワークのコードなので)自分では変更できません。
なので、全体を否定するような正規表現が欲しいです。
/(?!¥.html$)/ みたいに書けたりしないですかね?
0702デフォルトの名無しさん
2011/10/19(水) 11:09:03.420703デフォルトの名無しさん
2011/10/19(水) 11:34:40.23#test.datが存在しなければtest.datを作る
unless(-e "test.dat"){
open(OUT,">test.dat");
close(OUT);
}
#test.datが存在する場合
else{
open(IN,"test.dat") || &error;
while($line = <IN>){
print "$line<BR>";
}
close(IN);
}
0704デフォルトの名無しさん
2011/10/19(水) 11:46:09.02否定を表す書き方はありません。
拡張子が.htmlでないというだけでいいなら固定文字列なので否定戻り読み
が使えるから
/¥z(?<!¥.html)/
と書けるけど、これはどっちかというと例外だね。
ある正規表現にマッチしない文字列にのみマッチするような正規表現は
存在するから自分で書けば原理的にはできるけど場合によっては長く
なったりして大変なんだな。正規表現を有限オートマトンに変換するのは
簡単だし、その有限オートマトンから補集合を受理する有限オートマトン
をつくるのは受理状態をひっくり返すだけだから簡単なんだけど、できあ
がった有限オートマトンを正規表現に変換するのはけっこうめんどくさい
のでした。
0705デフォルトの名無しさん
2011/10/19(水) 12:02:42.60ttp://swatmac.info/etc/shibuya_pm/
0706デフォルトの名無しさん
2011/10/19(水) 12:25:42.62http://www.din.or.jp/~ohzaki/regex.htm#Without
print "$_ => ", /^(?:(?!\.html\z).)*\z/ ? 'match' : 'unmatch', "\n" for qw(
foo.txt
bar.html
baz.html.txt
);
0707デフォルトの名無しさん
2011/10/19(水) 13:12:48.38ttp://www.din.or.jp/~ohzaki/regex.htm#Without
0708デフォルトの名無しさん
2011/10/19(水) 13:13:49.610709デフォルトの名無しさん
2011/10/19(水) 13:20:35.27ないですか。
>>705
理論的には可能だけど、標準機能としては用意していない、ということですね。
>>706
リンク先に
> ある文字列を含まないものにマッチする正規表現
> (?:(?!foo).)*
とあるんですが、仕組みがわかりません。
(?!foo) は否定の先読みで、(?: ) は後方参照を行わないグループ化で、それを組み合わせるとなぜ否定の正規表現になるのでしょうか。
^(?:.(?!foo))*$ ならなんとなくわかるのですが。
0710デフォルトの名無しさん
2011/10/19(水) 13:42:29.33http://perldoc.jp/docs/perl/5.10.0/perlretut.pod#Looking32ahead32and32looking32behind
0711デフォルトの名無しさん
2011/10/19(水) 21:25:47.82全て「否定」のチェックボックスを用意するべきだと思うのw
0712デフォルトの名無しさん
2011/10/19(水) 22:21:21.57これらはマルチスレッドに対応していますか?
つまりあるスレッドで「$@」を書き換えても、それが別のスレッドに
影響を与えないかどうかを知りたいです。
0713デフォルトの名無しさん
2011/10/20(木) 05:06:21.65試してみればいいんじゃない?
0714デフォルトの名無しさん
2011/10/20(木) 08:31:06.15すみませんが、そこを読んでもわかりませんでした。
そこを読むと、Pythonの「a1 == a2」(同値判定)に相当するのが、Perlの「~~」のように見えますが、
スマートマッチング演算子はそもそも同値判定のための演算子ではないようです。
またPythonの「a1 is a2」(同一判定)については触れられてもいませんでした。
0715デフォルトの名無しさん
2011/10/20(木) 09:10:47.85同値判定には ~~ が大概有効だが、「1つの決まった書き方」はないってことさ
同一判定についてはそれぞれのリファレンスが等しいかどうかを比較すればいい
…というか、同一判定をする予定があるのなら
リストとして生成するよりも、始めからリファレンスとして生成しておくことも考えてみて
0716デフォルトの名無しさん
2011/10/20(木) 12:22:35.12どこかで見た覚えがあるな
Perlのモットーは「やり方は何通りもある」だからな
0717Perl忍者
2011/10/20(木) 12:52:25.67っていう
かっこいい言葉の裏には物凄い悲惨さが込められてるのは、お前は知らない
どれだけの人間がそれで苦労してるかしらないようだな
0718デフォルトの名無しさん
2011/10/20(木) 13:07:24.29同一ならScalar::Util::refaddr()で判定だろうね。
同値はテスト以外でやったこと無いから分からんちん。
テストではもっぱらTest::More::is_deeplyを使ってる。
Test::DeepやTest::Differenceとかあるらしい。
何にしても、単純に比較できないオブジェクトが紛れると厄介だったり。
0719デフォルトの名無しさん
2011/10/20(木) 13:14:09.020720デフォルトの名無しさん
2011/10/20(木) 13:32:03.740721デフォルトの名無しさん
2011/10/20(木) 13:43:24.670722デフォルトの名無しさん
2011/10/20(木) 13:53:38.760723デフォルトの名無しさん
2011/10/20(木) 17:43:16.85(笑)
0724デフォルトの名無しさん
2011/10/20(木) 17:59:46.56my $str = "/foo/";
my $re = eval "qr$str" if $str =~ /^¥/.*¥/$/;
とやっているのですが、これでいいでしょうか。
もっといいやり方があれば教えて下さい。
0725デフォルトの名無しさん
2011/10/20(木) 18:04:42.80http://perlcritic.com/pod/Perl/Critic/Policy/Subroutines/ProhibitSubroutinePrototypes.html
プロトタイプ宣言がないと、
sub grep (&@) {
my ($sub, @args) = @_;
my @arr = ();
for (@args) { push(@arr, $_) if $sub->($_) }
return @arr;
}
みたいなことができなくないですか?
なぜダメっていわれるのでしょうか。
0726デフォルトの名無しさん
2011/10/20(木) 19:48:35.11プロトタイプの$に配列を与えると、配列長が渡されたりして厄介だし、
自己再帰にも使えないし、今ひとつ使いづらい。
理解して使う分には問題ないと思う。
sub f($;$) {
my ($m, $n) = @_;
print "m: $m n: ", ($n // "(undef)"), "\n";
}
f(3, 4);
f(@{[3, 4]});
my @list = (3, 4);
f(@list);
0727デフォルトの名無しさん
2011/10/20(木) 20:28:23.47>理解して使う分には問題ないと思う。
ありがとうございます!
もうひとつ質問なんですが、
sub f(&) {
my ($sub) = @_;
# $subを使ったコード
}
とあって、
my $sub2 = sub { ... };
があったときに、$sub2 を使って f() を呼び出すやり方がわかりません。
f($sub2);
f(&$sub2);
f(¥$sub2);
どれもだめでした。
rubyだと
def f(&block) { ... }
block2 = proc { ... }
f(&block2)
ということができるので、同じことをPerlでもやりたいです。
0728デフォルトの名無しさん
2011/10/20(木) 20:37:36.910729デフォルトの名無しさん
2011/10/20(木) 21:08:32.76すごい!うまくいきました。ありがとうございます。
0730デフォルトの名無しさん
2011/10/20(木) 21:35:00.42> やり方をガチガチに固める所では使うなってことなんじゃないの
普通はやり方を固めるもんだよ。
もしそれが、自分一人のプロジェクトだとしても、
自分のルールに固めるだろう?
一つのプロジェクトで、日付処理用のモジュールとして
Date::Handler と Date::ICal と Class::Date と Date::Simple と
DateTime と Time::Piece を全部使おう。やり方はいくつもあるんだから!
なんていう人はいないでしょ。
0731デフォルトの名無しさん
2011/10/20(木) 22:18:11.96そういうことを言ってるんじゃないのよねw
0732デフォルトの名無しさん
2011/10/20(木) 22:35:38.99どう言っているかを答えれば良い。
反論を待つ。
0733デフォルトの名無しさん
2011/10/20(木) 23:23:22.520734デフォルトの名無しさん
2011/10/20(木) 23:30:48.770735デフォルトの名無しさん
2011/10/20(木) 23:31:10.61普通に、
my $re = qr/$1/ if $str =~ m{^/(.*?)/$};
eval なんてよっぽどの事が無い限り使わない。
>>726
きちんと先行宣言かませば、再帰にも使えるぞ
sub h ($);
sub h ($){ my $i = shift or return ; printf "%d\n", $i ; h -- $i ; }
h 10 ;
h (10,11) ;
0736デフォルトの名無しさん
2011/10/20(木) 23:35:10.73っていう意味で、
2.「物凄い悲惨さが込められてる」は、それを別の人がメンテナンス
するときの話。
この2つはそれぞれ事実なんだろうけど、おれはそれでもPerlが
好きだし、Perlのこのアプローチが間違っているとは思っていない。
2.メンテできないものは無理してメンテせず、1.自分がメンテ
できるように書き直すのが吉。なんか無駄っぽく感じるけど、そう
いう事態を招いた組織側の責任なので、担当者として責任を感じる
必要はない。
0737デフォルトの名無しさん
2011/10/20(木) 23:56:44.57レス作るから、まじめに相手しても無駄だよ。
実際の悲惨さ知ってるわけないもん。
>>736
>自分がメンテできるように書き直すのが吉。
VBAの変数名が「あ」「い」「う」「え」…てーのの
凄まじいスパゲティーコードを書き直した事があるが、地獄だぞ。
(ちなみに顧客のコード)
2.の業務を押し付けられたらどっちに転んでも悲惨だよ、
前任者がコードの内規守ってる事を祈るのみ。
0738デフォルトの名無しさん
2011/10/21(金) 00:11:14.32>my $re = qr/$1/ if $str =~ m{^/(.*?)/$};
さんくす!
0739デフォルトの名無しさん
2011/10/21(金) 01:40:30.80StrawberryとActiveとかいうのどちらをDLしたほうがいいのか
教えろください
0740デフォルトの名無しさん
2011/10/21(金) 01:52:05.25ActivePerl に不満が出たら Strawberry Perl その他
0741デフォルトの名無しさん
2011/10/21(金) 02:28:35.56少し前までは Strawberry Perl を薦めてたけど、
今はどっちでも大差ないかもね。
ppm で楽をしたいなら ActivePerl、
最初から CPAN経由でいろいろ突っ込みたいなら ActivePerl か?
0742741
2011/10/21(金) 02:29:34.61最初から CPAN経由でいろいろ突っ込みたいなら Strawberry Perl か?
だね。
0743デフォルトの名無しさん
2011/10/21(金) 02:33:59.60ありがとうございました。
まだ使ってないから不満もないし、楽をしたいので
とりあえずActive Perlを
インストールすることにします。
本当にありがとうございました。
0744デフォルトの名無しさん
2011/10/21(金) 05:07:54.492: for (@array) {
3: if ($_ == $value) {
4: $found = 1;
5: break;
6: }
7: }
というコードがあるんですが、これの3行目から6行目にかけてを、もっと簡潔に書きたいです。
Rubyだと break に引数を指定できるので、
found = for x in array do
break true if x == value end
みたいに書けるんですが、Perlでもこんなかんじで簡潔に書く定石みたいなのはありますか。
0745デフォルトの名無しさん
2011/10/21(金) 05:34:57.35$_ == $value and $found = 1, last;
0746デフォルトの名無しさん
2011/10/21(金) 06:53:12.37my $found = grep{ $_ == $value }@array;
ってのはどうかな、Rubyに直訳すると
found = array.select{|v| v == value }.length
って感じなんだけど、PerlはRubyと違ってゼロは偽だから
返された「見つかった個数」をそのまま if に通せば有無の判定になるし
0747デフォルトの名無しさん
2011/10/21(金) 07:00:08.76#my $found = grep { $_ == $value } @array ;
かぶった
5.10以降なら
my $found = $value ~~ @array ;
お遊び
my $found = sub { for ( @array ){ return 1 if $_ == $value } }->() ;
0748デフォルトの名無しさん
2011/10/21(金) 07:00:50.24> 5: break;
break???
0749デフォルトの名無しさん
2011/10/21(金) 08:59:52.33先行宣言忘れてた。
>>744
use List::MoreUtils qw(any);
...
my $found = any{ $_ == $value } @array;
rubyだと
found = array.any? {|x| x == value }
0750デフォルトの名無しさん
2011/10/21(金) 10:57:29.61perl は6年ぐらい前にリャマ本読んで、システム管理用のツールをたまに作るぐらいのレベルです。
オブジェクト指向については全くの初心者です。
よろしくおねがいします。
0751デフォルトの名無しさん
2011/10/21(金) 10:59:10.27package Foo;
sub hello {
print "Hello!¥n";
}
## 通常のメソッド呼び出し
package main;
my $obj = bless({}, 'Foo');
$obj->hello(); #=> Hello!
## あるオブジェクトでだけメソッドを上書き
my $obj2 = bless({}, 'Foo');
$obj2->hello = sub { print "Konnichiwa!¥n" }; ## なんかこんな感じで。
$obj->hello(); #=> Konnichiwa!
みたいな感じで。
PerlでAOPチックなことをしたくて、それでインスタンス別に挙動を変える方法を知りたいです。
0752デフォルトの名無しさん
2011/10/21(金) 11:15:46.65本を買う前にまず perldoc で perlboot, perltoot, perltooc, perlbot を読んでみては?
0753デフォルトの名無しさん
2011/10/21(金) 11:16:40.18教えられたコードが理解できなくて、調べるのに時間がかかりました。
>>745
>$_ == $value and $found = 1, last;
これって
($_ == $value) and ($found = 1, last);
ってことでしょうか。なるほど。
>>746
> my $found = grep{ $_ == $value }@array;
これって、
my @found = grep{ $_ == $value }@array;
my $cound = @found;
ってことでしょうか。grepが返すのは配列なんだけど、それをスカラー変数に代入すると個数になる、という理解でいいでしょうか。
>>747
> my $found = $value ~~ @array ;
こんな演算子があるのですか。初めて知りました。
データ型によって挙動が違うというのは、Rubyの===演算子に似てますね。
> my $found = sub { for ( @array ){ return 1 if $_ == $value } }->() ; その場でクロージャを作って呼び出しているんですか。これはすごい。
JSの (function() { ... })() みたいなもの?
0754デフォルトの名無しさん
2011/10/21(金) 11:26:45.80grepについての疑問のとこは細かい話に見えるかもですが
スカラーコンテキストでは個数が返る、です。
perldoc -f grep
> In scalar context, returns the number of times the expression was true.
0755デフォルトの名無しさん
2011/10/21(金) 13:27:53.49Perlのオブジェクト指向では、「attribute」と「property」の両方が使われているようなんですが、
これらはどのように使い分けられていますか。
ググってみたけど、いまいちわかりません。
package Hogehoge;
sub new {
my $class = shift;
return bless {@_}, $class;
}
sub x { return $_[0]->{x} };
sub y { return $_[0]->{y} };
my $hoge = Hogehoge->new(x=>1, y=>2);
print $hoge->{x}; # これはattribute? property?
print $hoge->x; # これはattribute? property?
0756デフォルトの名無しさん
2011/10/21(金) 13:53:10.03>スカラーコンテキストでは個数が返る、です。
ということは、grep がいつも配列を返すのではなく、
grep自体がコンテキストを認識して、配列が要求されている場面なら配列を、
スカラー値が要求されている場面なら数を返すということなんですね。
興味深い挙動だけど、複雑すぎ!
0757デフォルトの名無しさん
2011/10/21(金) 14:12:31.48> grep自体がコンテキストを認識して
grep自体がじゃなくてPerl処理系がじゃないかな
grepは処理結果としてスカラ値(個数)と処理済の配列の両方を持ってる
0758デフォルトの名無しさん
2011/10/21(金) 14:43:43.08こういう認識しか無いんだけど、こういうのとは違うん?
http://perldoc.perl.org/perlglossary.html
インスタンス変数
> instance variable
> An attribute of an object; data stored with the particular
> object rather than with the class as a whole.
アクセサ
> accessor methods
> A method used to indirectly inspect or update an object's state
> (its instance variables).
0759デフォルトの名無しさん
2011/10/21(金) 15:53:56.50sub y : lvalue { $_[0]->{y} };
こういうのかな。
メソッドでもLvalue subroutineと呼ばれてる希ガス。
0760デフォルトの名無しさん
2011/10/21(金) 16:53:02.26もいっかい調べ直したところ、Perlでの「attribute」というのは、オブジェクト指向とは関係なく、
関数定義において付属的に追加できるデータのことのようです。
ttp://gihyo.jp/dev/feature/01/perl-pluggable/0002
でもオブジェクト指向の説明でもよく見かけるように思うし、どうなんでしょ。
0761デフォルトの名無しさん
2011/10/21(金) 17:06:03.59つけられるやつの方だけど、オブジェクト指向でもattributeという言葉は
よく使われるのでperlのオブジェクト指向ライブラリの一つのMooseみたいに
その意味でattributeを使っちゃってることもある。どれを指しているかは
よく考えながら読むしかないね。
0762755
2011/10/21(金) 17:20:01.32ttp://d.hatena.ne.jp/chaichanPaPa/20100206/1265436393
> 結果的にリファレンスが、ハッシュ変数(プロパティ)とサブルーチン(メソッド)を持つことになるのです。
> プロパティとメソッドと言えば、そう、オブジェクトになるのですね…これが!!
こっちはインスタンス変数とアクセッサの両方をプロパティと呼んでいるっぽい。
http://idocsq.net/page/350
うーん。用語が統一されてない。
0763デフォルトの名無しさん
2011/10/21(金) 18:27:07.76grepの部分に配列を書いても同じことだよ
スカラを要求する文脈で配列が書かれれば配列の長さが返る
例えば「配列@aryの長さより$nが小さい」は $n < @ary と書ける
これがPerlの「コンテキスト」って概念ね
0764デフォルトの名無しさん
2011/10/21(金) 21:46:35.41そのファイルが入っているフォルダがエクスプローラで見れなくなりました
mkdirでフォルダ作成してもこそのフォルダだけエクスプローラで表示されません
どうすれば元に戻りますか?
環境はwindowsでactiveperlです
0765デフォルトの名無しさん
2011/10/21(金) 21:47:02.270766デフォルトの名無しさん
2011/10/21(金) 22:11:32.39できるよ。
まずすべてのインスタンスに何も挙動が変わらない
メソッド定義を付け加えましょう。
0767デフォルトの名無しさん
2011/10/21(金) 22:24:57.63そちらから勉強した方が良くね?
それと真面目に書くんだったら継承するわな、普通は。
package Foo ;
sub new { bless {}, shift }
sub hello { shift ; print qq{hello\n} }
1;
package main ;
use strict ;
use warnings ;
{
no warnings ;
sub Foo::hello { shift ; print qq{bye\n} ; }
}
Foo->new->hello ;
0768デフォルトの名無しさん
2011/10/21(金) 22:39:30.94AOPの知識をつけてからまたおいで。
0769デフォルトの名無しさん
2011/10/21(金) 22:48:57.460770デフォルトの名無しさん
2011/10/21(金) 22:53:22.53置き換える機能は持っていません。
冷静になったら?
0771デフォルトの名無しさん
2011/10/21(金) 23:07:22.58ありがとうございます。
でもこの方法だと、単にメソッド定義を上書きしているため、全部のオブジェクトに影響するんですよね。
そうではなくて、インスタンスオブジェクトごとに、個別に設定したいのですが、perlだと無理そうですか。
やりたいのは、AOPのように、指定したメソッドの前後に処理を挟み込んで、
たとえばロギングを追加したりとか、実行時間を計測したりとかしたいんですが、
それをある特定のインスタンスにだけ適用させたいと考えてます。
クラス定義自体を上書きすると、ほかのインスタンスにも影響を与えるので、
それは希望する動作ではないです。
JavaScriptとかだと簡単なんですけど、それをぜひperlでやりたい。
0772デフォルトの名無しさん
2011/10/21(金) 23:07:42.47インスタンスは完全にオブジェクト指向の用語で、
AOPに使われると混乱するんだが。
0773デフォルトの名無しさん
2011/10/21(金) 23:26:10.64普通はオブジェクト指向と一緒に使うんだが。
0774デフォルトの名無しさん
2011/10/21(金) 23:39:28.14これで望んだ挙動?
package Foo ;
sub new { bless {}, shift }
sub hello { shift ; print qq{hello\n} }
1;
package main ;
use strict ;
use warnings ;
sub hello { shift ; print qq{bye\n}}
my $obj = Foo->new ;
$obj->hello ;
{
no warnings ;
local *{Foo::hello} = sub { main::hello(@_) ; } ;
$obj->hello ;
}
my $obj2 = Foo->new ;
$obj2->hello ;
0775デフォルトの名無しさん
2011/10/21(金) 23:45:33.39×sub hello { shift ; print qq{bye\n}} の行いらない。
×local *{Foo::hello} = sub { main::hello(@_) ; } ;
◯local *{Foo::hello} = sub { shift ; print qq{bye\n} } ;
0776デフォルトの名無しさん
2011/10/22(土) 07:22:38.70それはクラス定義を書き換えている。
もしFoo::helloのなかで新しくFooオブジェクトを作る処理が入っている場合、問題になる。
0777デフォルトの名無しさん
2011/10/22(土) 08:02:23.89「CPAN モジュール 作り方」でぐぐるといろいろでできますが、ページごとにやり方が違ったりするので、
ここだけ読めばおK!というのを教えて下さい。
0778デフォルトの名無しさん
2011/10/22(土) 08:11:28.18sub new {
my $this = shift ;
my $class = ref($this) || $this;
my $self = { data => pop } ;
bless $self, $class;
$self ;
}
sub echo { printf "%s\n", shift->{data}}
1;
package main ;
use strict ;
use warnings ;
my $obj = Foo->new(10) ;
$obj->echo ;
{
no warnings ;
local *{Foo::new} = sub {
my $this = shift ;
my $class = ref($this) || $this;
my $self = { data => 42 + pop } ;
bless $self, $class;
$self ;
} ;
my $obj2 = $obj->new(10) ;
$obj->echo ;
$obj2->echo ;
}
my $obj3 = $obj->new(10) ;
$obj->echo ;
$obj3->echo ;
0779デフォルトの名無しさん
2011/10/22(土) 08:55:52.18use strict;
use warnings;
package Hogehoge;
としたら、use strict や use warnings は package Hogehoge の中でも有効ですか?
やってるうちにわかんなくなってきたので教えて下さい。
0780デフォルトの名無しさん
2011/10/22(土) 09:32:35.27こんなんはどう?
package Foo;
sub hello {
print "Hello!\n";
}
## 通常のメソッド呼び出し
package main;
my $obj = bless({}, 'Foo');
$obj->hello(); #=> Hello!
## あるオブジェクトでだけメソッドを上書き
my $obj2 = bless({}, 'Foo');
{
use Scalar::Util qw(blessed);
no strict "refs";
@{$obj2 . "::ISA"} = blessed $obj2;
*{$obj2 . "::hello"} = sub { print "Konnichiwa!\n" }; ## なんかこんな感じで。
$obj2 = bless $obj2, "$obj2";
}
$obj2->hello(); #=> Konnichiwa!
0781デフォルトの名無しさん
2011/10/22(土) 10:15:59.30package Foo;
sub new { bless {}, shift }
sub hello { print "Hello!\n" }
package main;
use Class::Monadic qw(monadic);
my $obj = Foo->new;
my $obj2 = Foo->new;
monadic($obj2)->add_methods(hello => sub { print "Konnichiwa!\n" });
monadic($obj2)->add_modifier(before => hello => sub{ print "Nice to meet you!\n" });
monadic($obj2)->add_modifier(after => hello => sub{ print "Good bye!\n" });
$obj->hello();
$obj2->hello();
0782デフォルトの名無しさん
2011/10/22(土) 10:19:39.18ありがとうございます。自分なりに、以下のように解釈しました。
package Foo;
sub hello {
print "Hello!¥n";
}
## 通常のメソッド呼び出し
package main;
my $obj = bless({}, 'Foo');
$obj->hello(); #=> Hello!
## あるオブジェクトでだけメソッドを上書き
my $obj2 = bless({}, 'Foo');
{
use Scalar::Util qw(blessed);
no strict "refs";
my $oldclass = blessed $obj2; #=> 'Foo'
my $newclass = "$obj2"; #=> 'Foo=HASH(0x100804110)'
@{$newclass . "::ISA"} = $oldclass; # 継承関係を設定
*{$newclass . "::hello"} = sub { print "Konnichiwa!¥n" }; # メソッドを上書き
$obj2 = bless $obj2, $newclass; # blessし直す
}
$obj2->hello(); #=> Konnichiwa! (上書きされている)
$obj->hello(); #=> Hello! (上書きされてない)
print $obj2->isa('Foo'); #=> true (元クラスを継承しているのでisa関係も成り立つ)
ポイントは、動的に新しいクラスをつくって、それを使ってblessしなおすことですね、きっと。
すばらしいです。感謝にたえません。
0783デフォルトの名無しさん
2011/10/22(土) 10:36:11.68元のオブジェクトと動きが代わるってことだろ。
0784749,781
2011/10/22(土) 10:43:55.590785749,781
2011/10/22(土) 10:47:54.46プラグマの範囲はレキシカルスコープだから、レキシカルスコープでググレ。
前に出てる質問だから、過去ログ漁っても出てくる。
まあ、直接 foo; とか書いてテストした方が早いけどな。
じゃ、また。
0786デフォルトの名無しさん
2011/10/22(土) 10:56:50.03元気でな。
0787デフォルトの名無しさん
2011/10/22(土) 12:53:35.88に、モジュールを分類した一覧が表示されますが、これってどうやって登録するんでしょうか。
たぶんモジュールのなかのメタ情報に書くんだと思いますが、どう書くのかわかりません。
だれかおしえて。
0788デフォルトの名無しさん
2011/10/22(土) 13:08:38.25もしかして>>777か?
そんなことを2chで聞かないとわからないレベルのくせにcpanに何か登録するつもりなのか?
0789デフォルトの名無しさん
2011/10/22(土) 13:19:08.56あるプログラムの戻り値が帰ってきたら全部終了させるってことは
どうすればいいですかね?具体的に教えてもらえるとありがたいです
0790デフォルトの名無しさん
2011/10/22(土) 13:20:05.40訂正します
あるプログラムの戻り値「で特定の値が帰ってきたとき」全部終了させるってことは
0791デフォルトの名無しさん
2011/10/22(土) 17:58:49.25カテゴリ登録の仕方って、どっかに載ってます?
CPANモジュールてきとうに漁ってみたけど、カテゴリを登録してるような記述はどこにもなかったです。
これって、もしかしてパッケージをつくる側が指定するんじゃなくて、運営側が分類してたりするんでしょうか。
0792デフォルトの名無しさん
2011/10/22(土) 18:49:06.780793デフォルトの名無しさん
2011/10/22(土) 21:14:59.91<h3>あ</h3>というタグの位置が欲しいのに、-1が帰ってきます。
index()は日本語は使えないのですか?
文字コードはutf-8です。
0794793
2011/10/22(土) 21:34:17.91文字列に漢字2文字以上の場合または、
カタカナ3文字以上の場合は記録したいのですが、
addWord($c, 2, $word) if($word =~ m/^\p{InCJKUnifiedIdeographs}{2,}$/g);
addWord($c, 2, $word) if($word =~ m/^\p{InKatakana}{3,}$/g);
この正規表現では取得できません。
どのようにすればよいですか?
0795デフォルトの名無しさん
2011/10/22(土) 21:50:53.080796デフォルトの名無しさん
2011/10/22(土) 22:13:14.02<h3>あ</h3>というタグの位置が欲しいのに、-1が帰ってきます。
index()では、どのようにすればよいですか?
0797デフォルトの名無しさん
2011/10/22(土) 22:13:35.110798デフォルトの名無しさん
2011/10/22(土) 22:13:53.56文字列に漢字2文字以上の場合または、
カタカナ3文字以上の場合は記録したいのですが、
addWord($c, 2, $word) if($word =~ m/^\p{InCJKUnifiedIdeographs}{2,}$/g);
addWord($c, 2, $word) if($word =~ m/^\p{InKatakana}{3,}$/g);
この正規表現では取得でき
0799デフォルトの名無しさん
2011/10/22(土) 22:16:09.16そのHTMLの文字コードは何?
0800デフォルトの名無しさん
2011/10/22(土) 22:30:43.85その $word はちゃんと decode('utf8', $source); してあるんだろうな。
0801デフォルトの名無しさん
2011/10/22(土) 23:11:23.150802デフォルトの名無しさん
2011/10/22(土) 23:27:52.760803デフォルトの名無しさん
2011/10/22(土) 23:32:11.850804デフォルトの名無しさん
2011/10/22(土) 23:52:40.19書かない人には関係ない話。
0805デフォルトの名無しさん
2011/10/23(日) 00:21:06.95package tf8;
($package, $script, $line) = caller;
open SCRIPT, $script;
@_ = <SCRIPT>;
close SCRIPT;
$_[$line - 1] =~ s/^/#/;
open SCRIPT, ">$script.tmp";
print SCRIPT @_;
close SCRIPT;
exit system "jperl $script.tmp";
1;
__END__
0807デフォルトの名無しさん
2011/10/23(日) 02:48:46.19あれは初心者や他言語からの人にはなかなか馴染みづらいだろうし仕方ないけど
0808793
2011/10/23(日) 02:55:22.83ええ、調べて書いたんですけどね。
学生の頃、シェルスクリプト代わりに使ってたけど、
日本語を扱うのがこんなに大変とは思わなかった。
0809デフォルトの名無しさん
2011/10/23(日) 02:56:29.92文字列フラグなどという名前だったらよかった。
文字列フラグはPerl固有のものだから
Perlコード外部から渡されるのは文字列ではない。
文字列でなかったらなにか?それはバイナリ。
バイナリを文字として扱いたければ、文字に変換しないといけない。
それがdecode。
ではソースコードに書いてあるのは、文字かバイナリか。
それはuse utf8を使えば文字で、そうでない場合はバイナリ。
話はこれだけ。
0811デフォルトの名無しさん
2011/10/23(日) 07:15:20.77置換するスクリプトを教えてもらえませんか
例:
変換前:2001-01-02,18:01:00,64.30,64.30,64.30,64.30
変換後:2001-01-02 18:01:00,64.30,64.30,64.30,64.30
秀丸の置換だと
検索:([0-9])([0-9])([0-9])([0-9])-([0-9])([0-9])-([0-9])([0-9])\,
置換:\1\2\3\4-\5\6-\7\8 ←スペース
このようなかんじです。
環境
Windows 7 64
perl 5, version 14, subversion 2 (v5.14.2) built for MSWin32-x64-multi-thread
0812デフォルトの名無しさん
2011/10/23(日) 08:52:31.43perl -lpe "s/,/ /" hoge.txt
% perl -MO=Deparse -lpe "s/,/ /" hoge.txt
BEGIN { $/ = "\n"; $\ = "\n"; }
LINE: while (defined($_ = <ARGV>)) {
chomp $_;
s/,/ /;
}
continue {
die "-p destination: $!\n" unless print $_;
}
-e syntax OK
0813デフォルトの名無しさん
2011/10/23(日) 09:02:52.24>ファイルを開いて、全レコードの一番最初に出現する”,”(カンマ)をスペースに
>置換するスクリプトを教えてもらえませんか
だけなら、
while(<>) {
$_ =~ s/,/ /;
print $_;
}
見たいな感じでいいと思うけど、
>検索:([0-9])([0-9])([0-9])([0-9])-([0-9])([0-9])-([0-9])([0-9])\,
>置換:\1\2\3\4-\5\6-\7\8 ←スペース
秀丸知らないからよくわからんけど、この処理の仕様を
「一番最初に出現する”,”(カンマ)をスペースに置換する」
としちゃうのは丸めすぎのような気がする。
元の仕様に忠実(?)に書くなら(多分 ・・・ 秀丸の置換の仕様を知らないの憶測です)、
$_ =~ s/([0-9])([0-9])([0-9])([0-9])-([0-9])([0-9])-([0-9])([0-9]),/\1\2\3\4-\5\6-\7\8 /;
としたほうが、トラブルが少なそう。
0814デフォルトの名無しさん
2011/10/23(日) 10:00:03.83皆さんありがとう
>>812さん
perl -lpe "s/,/ /" hoge.txt
これはうまく実行できるのですが
% perl -MO=Deparse -lpe "s/,/ /" hoge.txt
BEGIN { $/ = "\n"; $\ = "\n"; }
LINE: while (defined($_ = <ARGV>)) {
chomp $_;
s/,/ /;
}
continue {
die "-p destination: $!\n" unless print $_;
}
これは、先頭行に#!/bin/perlを加え、replace.plとでも保存して、実行すればいいのでしょうか?
>>813さん
perl のことが余りわからなくて、すみません、sed のように、置換したあとファイルに保存する場合のスクリプトですが
openモードは書き込み・読み込みどちらで開いたらいいのでしょうか?
0816デフォルトの名無しさん
2011/10/23(日) 11:03:46.94を知っていたら
誰かお願いします
0817デフォルトの名無しさん
2011/10/23(日) 11:08:30.740818デフォルトの名無しさん
2011/10/23(日) 11:50:56.50と考える実装初心者・命名中級者。
0819デフォルトの名無しさん
2011/10/23(日) 12:02:58.18ファイルのタイムスタンプを変更する utime が失敗します。
管理者権限を perl.exe やコマンドプロンプトにつけてみましたが、変わりませんでした orz
なにかヒントがあればお願いします m(__)m
0820デフォルトの名無しさん
2011/10/23(日) 12:07:00.24あれ? まだムキになってるの?w
0821デフォルトの名無しさん
2011/10/23(日) 12:39:35.75そうするとだんだん核心にちかづくw
0822デフォルトの名無しさん
2011/10/23(日) 12:50:56.16ワンライナの挙動の説明、書くのが面倒だったからDeparseしただけ。
保存して使いたければ、どうぞ
>openモードは書き込み・読み込みどちらで開いたらいいのでしょうか?
813氏では無いが、貴方は取り敢えず今回は
perl -i.bak -lpe "s/,/ /" hoge.txt
で満足して、多少は自力で勉強をしてきたら如何か?
0823デフォルトの名無しさん
2011/10/23(日) 12:51:31.020824デフォルトの名無しさん
2011/10/23(日) 12:52:21.340825デフォルトの名無しさん
2011/10/23(日) 12:52:59.230826デフォルトの名無しさん
2011/10/23(日) 12:57:43.86言い出しっぺの一人だけだろ、言ってんの。
0827デフォルトの名無しさん
2011/10/23(日) 13:01:55.33過去にutf8フラグを理解してないって
こてんぱんにやられたやつでしょw
0828デフォルトの名無しさん
2011/10/23(日) 13:04:26.62でいけるだろうけど、そのファイルを出力するプログラム
を変更できるならその方がはやい
0829デフォルトの名無しさん
2011/10/23(日) 13:13:08.89perl -e "print qq/Windows Oneliner\n/"
0830デフォルトの名無しさん
2011/10/23(日) 13:37:40.26>utf8フラグとい名前がまずかったね。
なんでまずいの?utf8だからutf8フラグなんじゃないの?
>>821
>そうするとだんだん核心にちかづくw
核心に近づくとどうなるの?おいしくなるの?それならいいけど
0831デフォルトの名無しさん
2011/10/23(日) 15:10:06.81に書いてある、
「Mooseはデフォルト値にサブルーチンリファレンス以外の裸のリファレンスを渡した場合はエラーが発生します。
これは、裸のリファレンスを渡せるようにしてしまうと、デフォルトでマッピングされるアトリビュートが多くのオブジェクトで共有されてしまうことになりがちだからです」
はどういう意味でしょうか。
複数のインスタンスが同じメモリ上のものを指してしまうのでしょうか。
0832デフォルトの名無しさん
2011/10/23(日) 15:47:26.66そしてそれは多くの場合ユーザーの意図するところではないと考えられるので、
素通しせずエラーで死ぬ仕様にしておくことで、すぐ間違いに気づけるようにしている。
0833デフォルトの名無しさん
2011/10/23(日) 15:50:05.28UTF-8バイナリ文字列と内部表現がUTF8の文字列を混同する人(同一と思ってる人)が多発してるからとか?
0834デフォルトの名無しさん
2011/10/23(日) 16:05:34.630835デフォルトの名無しさん
2011/10/23(日) 16:35:39.87ありがとうございます。ここはsubで新しくスコープ作らないといけないんですね。
0836デフォルトの名無しさん
2011/10/23(日) 17:10:27.81>>809
この人の文章は毎回頭が痛くなる。文字列を strings と置き換えたら意味不明。
>utf8フラグとい名前がまずかったね。
>strings フラグなどという名前だったらよかった。
>strings フラグはPerl固有のものだから
>Perlコード外部から渡されるのは strings ではない。
>strings でなかったらなにか?それは binary strings。
>binary strings を string として扱いたければ、string に変換しないといけない。
>それが decode。
本人は、文字列が狭義な意味しかないとでも思ってるらしいが、読んでる方は
まず広義にとらえる。例えば文字列フラグ以外に、 # の部分でも
「は? 文字列はバイナリも含むだろ」っつー初歩のつっこみが入って混乱する。
ちょっと文章に気を使えば、いらぬ突っ込みは減るだろうし、突っ込みにしても
核心の部分の論争に留めることが出来るだろう。
おまけに perlunifaq の言う通りutf8 フラグに触れる必要すらない。
>(前半完全削除)
>Perlコード外部から渡されるのは utf8 で書かれていようと内部で利用出来る decoded strings ではない。
>decoded strings でなかったらなにか?それは binary strings。
>binary strings を decoded string として扱いたければ、decoded string に変換しないといけない。
>それが decode。
ttp://hibari.2ch.net/test/read.cgi/php/1024741312/
の>>503から
ttp://perldoc.jp/docs/perl/5.10.0/perlunifaq.pod#What32is32the32UTF832flag63
0837デフォルトの名無しさん
2011/10/23(日) 18:19:10.07Perlについて
http://hibari.2ch.net/test/read.cgi/tech/1217851121/
0838デフォルトの名無しさん
2011/10/23(日) 18:51:03.36> なんでまずいの?utf8だからutf8フラグなんじゃないの?
perldocに内部形式がutf8だと意識してはいけないと書いてあるからさ。
http://perldoc.jp/docs/perl/5.10.0/perlunifaq.pod#I32lost32track59what32encoding32is32the32internal32format32really63
> UTF8 フラグ」って何?
>
> 内部をハックしようとしているか、変なものをデバッグしようとしているのでない 限り、
> どうか UTF8 フラグのことは一切考えないでください。
> Perl の内部表現の一つは ” たまたま UTF-8 ” です。
> 残念ながら、Perl は秘密を守れないので、このことはみんな知っています。 ” これが多くの混乱の源です。 ”
> ” 内部表現は何か分からないエンコーディング” で、
> 常に明示的にエンコードと デコードが必要ということにしておいた方がよいです。
> わかりました、どうしてもと言うのなら:
> ”「内部形式」は utf8 であって、 UTF-8 ではありません。 ”
> (もしその他のエンコーディングでないのなら。)
> 迷子になりました; 実際のところ内部形式のエンコーディングは何?¶
>
> 迷子になったのはよいことです; なぜなら内部形式が特定のエンコーディングで あることに依存するべきではないからです。
> しかし聞かれたので答えましょう: デフォルトでは、内部形式は ISO-8859-1 (latin-1) か utf8 で、
> どちらになるかは文字列の歴史に 依存します。 EBCDIC プラットフォームでは、これは異なっているかもしれません。
>
> Perl は文字列が内部でどのように保管されているかを知っていて、この知識を エンコードする ときに使います。
> 言い換えると: ”特定の文字列の内部エンコーディングが何かを 調べようとしてはいけません;”
> 代わりに、単に望みのエンコーディングに エンコードしてください。
0839デフォルトの名無しさん
2011/10/23(日) 18:57:49.30しかも836にURLが張ってあるのの引用だけで
0840デフォルトの名無しさん
2011/10/23(日) 18:59:08.44>「は? 文字列はバイナリも含むだろ」っつー初歩のつっこみが入って混乱する。
そんな突っ込み入ってないじゃんw
文字とバイナリの区別ぐらい普通の人はつくと思うけどねぇ。
バイナリは、その名の通りビットの集まり。
数値型にバイナリが含まれないように文字列型にバイナリは含まれない。
たとえ数値の内部表現がバイナリであったとしてもだ。
たとえばMySQLでデータ型がバイナリなら任意のビット(バイト)列を格納できるが、
文字列型ならそこに指定されたエンコーディング以外の文字が正しく格納される保証はないとわかるはず。
明らかに違うものと認識しているはずだがね。
0841デフォルトの名無しさん
2011/10/23(日) 18:59:56.07ん?俺が命令したらお前
絶対従うの?
0842デフォルトの名無しさん
2011/10/23(日) 19:03:37.700843デフォルトの名無しさん
2011/10/23(日) 19:12:41.36テキストモードとバイナリモードがありますね。
0844デフォルトの名無しさん
2011/10/23(日) 19:33:02.05仕方なくテキストモードを作った。
0845デフォルトの名無しさん
2011/10/23(日) 19:53:26.54> Windows(MS-DOS)がうんこだから
ちがうよ。単に環境によって改行の仕様が違ってるからそれに対処するためだだよ。
それは歴史的事情により仕方ないんだよ。
ftpにもasciiモードとbinaryモードっつーのがあるよ。
0846デフォルトの名無しさん
2011/10/23(日) 20:05:11.030847デフォルトの名無しさん
2011/10/23(日) 20:57:48.14>ちがうよ。単に環境によって改行の仕様が違ってるからそれに対処するためだだよ。
Macは、MacJPerl(OS9)の昔からperlのバイナリモードは無関係だぞ
そもそもDOSとWinの為って公式に書いてある。
>On some systems (in general, DOS− and Windows‐based systems)
>binmode() is necessary when you’re not working with a text
>file.
0848デフォルトの名無しさん
2011/10/23(日) 21:18:59.19だからね、UNIXの改行コードがLFなのもDOS(Windows)の改行コードがCR+LFなのも
それぞれの歴史的事情によるのよ。別にDOSが“タコ”だからとかじゃないのよ。
例えばメールの改行コードは昔からCR+LFだったりするのよ。
> Macは、MacJPerl(OS9)の昔からperlのバイナリモードは無関係だぞ
Macはみそっかすだから考慮外なだけなのよ。きっと。
MacJPerl(OS 9)の改行コード周りの仕様がどうなってたんだかは知らないけど。
0849デフォルトの名無しさん
2011/10/23(日) 21:24:42.65それをファイルの区切りとして処理しちゃうテキストモードというモードを、
システムコールのレベルで作っちゃったことじゃね。
0850デフォルトの名無しさん
2011/10/23(日) 21:37:30.71ちょっと何言ってるかわからない
0851デフォルトの名無しさん
2011/10/23(日) 21:40:29.26だから「DOSとWin」の為だろ。おれはDOSがタコだウンコだ
なんて一言も言ってないし、どーでもいい。
一般化して、「環境依存の改行仕様が原因」と書いてるから
そんなんじゃなくて、特定の環境(DosとWin)に対応する為だと
レスしただけだ。
0852デフォルトの名無しさん
2011/10/23(日) 21:43:42.09> 本来はバイナリモードしかないんだが、Windows(MS-DOS)がうんこだから
> Windows(MS-DOS)がうんこだから
> Windows(MS-DOS)がうんこだから
あれ? 言ってない? あれ?
0853デフォルトの名無しさん
2011/10/23(日) 21:51:25.89> いや、DOS/Winがうんこなのは、改行がCR+LF であることじゃなくて、
> それをファイルの区切りとして処理しちゃうテキストモードというモードを、
> システムコールのレベルで作っちゃったことじゃね。
DOSが改行CR+LFを「ファイルの区切りとして」処理しちゃう?
どゆこと?
システムコールのレベルで? って何?
それとPerlのbinmodeとどう関係するの?
0857デフォルトの名無しさん
2011/10/23(日) 22:08:41.47> perldocに内部形式がutf8だと意識してはいけないと書いてあるからさ。
もともとPerlはUNIXユーザが、こうだったらいいのになあって思った
言語仕様が体現されていてブレークしたわけで、言い訳がましい
ドキュメントでは、勘弁してあげない。
> UTF-8バイナリ文字列と内部表現がUTF8の文字列を混同する人
>(同一と思ってる人)が多発してるからとか?
その意味で、UTF-8バイナリ文字列はUTF8の文字列であるのは当然で
内部表現が異なっていることをプログラマにむき出しにしているの
は、Perl的ではない。
言い訳ドキュメントの有無、既読・未読に依存しないインタフェース
のほうがおいしい。
0858デフォルトの名無しさん
2011/10/23(日) 22:15:10.55お前のひとりよがりの意見を押し付けるな。
0859デフォルトの名無しさん
2011/10/23(日) 22:27:17.89いまは
my $out = tie(local *STDOUT, 'Foo1');
my $err = tie(local *STDERR, 'Foo1');
とやってるんですけど、この方法だとstdoutとstderrが別々になっちゃうんで、
できれば両方を同じオブジェクトにひもづけたいです。
shellでいうところの 2>&1 みたいなの。
0860デフォルトの名無しさん
2011/10/23(日) 22:29:03.65とすると
sh: Sytax error: "|" unexpected
のエラーになってしまいます。
パイプは使えないんでしょうか?
0861デフォルトの名無しさん
2011/10/23(日) 22:29:59.86翻訳するのも決して楽だとは思えない。
一人のひとが読む労力はたいしたことないかもしれないけ
ど、読者総人数の総時間ともなれば、これまた大変な時間
になる。
これってひとりよがりの意見なの?
0862デフォルトの名無しさん
2011/10/23(日) 22:30:30.52俺はDOS/WINをうんこだとは思わないが、一応説明しておこう
Unix系の改行はLFだが、Unix系システムはそれを全く特別扱いしない
あくまで、ただの0Dの値を持つデータでありそれ以上でもそれ以下でもないんだ
だから例えば画像データをそのまま標準入出力に流したとしても
そのまま画像データとしてリダイレクト出来る
一方、Windowsにはテキストモードとバイナリモードという区分がある
バイナリモードはUnix系と同様、データはそのまま流れる
ではテキストモードってのは何かっつーと
簡単に言えば改行コードを特別扱いするモードだ
例えばLFを出力しようとするとCR+LFへ変換される
当然ながらこのモードのまま画像データなど出力してはデータを壊してしまう
んでWindowsのデフォルトはテキストモードであり
コマンドプロンプトも基本それで動く
この差がUnix系とWindows両方で使うようなコードを書いたときに
しばしば問題を引き起こす
特にUnix系で書かれたコードが問題で、開発環境では上手く行くのに
Windowsに持っていくとデータ破壊を引き起こしてしまう
元々PerlはUnix系の文化なんで、そういうコードもあったりするし
WindowsでPerl書いたことない人もたまに居たりして
そういう人は頭では理解しててもバイナリモードの適切な運用が出来ない
0863デフォルトの名無しさん
2011/10/23(日) 22:30:45.360864デフォルトの名無しさん
2011/10/23(日) 22:31:43.17システムコールの概念も知らないなら、
OSの議論になんか首突っ込まなきゃいいのに。
0865デフォルトの名無しさん
2011/10/23(日) 22:39:26.37UTF16で書かれたファイルの場合に、
ちゃんと一行読み取れるの?
0866デフォルトの名無しさん
2011/10/23(日) 22:39:42.04まったくしょうがないOSだな、Windowsっていうのは
0867デフォルトの名無しさん
2011/10/23(日) 22:40:59.030868デフォルトの名無しさん
2011/10/23(日) 23:14:06.58オブジェクトじゃなくファイルハンドルにリダイレクトするのなら、
$ perl -le 'close STDERR; open STDERR, q{>&}, \*STDOUT or die ; print STDERR q{STDERR}; print STDOUT q{STDOUT} ;'
STDERR
STDOUT
それでも必要なら、上のコード加えた上で貴方のコードの$outの方だけ使うとかすれば?
>>860
$ perl -Mstrict -Mwarnings -le 'my $s = q{hoge} ; print `echo $s | wc`'
1 1 5
\"Title\"してみれば?
0869デフォルトの名無しさん
2011/10/24(月) 00:56:09.120870デフォルトの名無しさん
2011/10/24(月) 00:57:52.110871デフォルトの名無しさん
2011/10/24(月) 01:27:50.450872デフォルトの名無しさん
2011/10/24(月) 01:41:42.83>>407
一部変だったので再調査した。
あと、WZ EDITORを追加して、ランクFはキリがないのでTeraPad以外削除。
S: Alpha, FooEditor, NewQX, Notepad, RJ TextEd
A: Editra, EmEditor, Notepad2, otbedit, SciTE, WZ EDITOR, 秀丸エディタ
B: Geany, gedit, JuffEd
C: jEdit
D: AkelPad, MIFES, サクラエディタ
E: Ginnie, Mery, Notepad++
F: TeraPad, etc
428 名前:名無しさん@お腹いっぱい。 投稿日:2011/10/21(金) 01:44:49.43 ID:uBBtnDdt0
S: 完璧に対応。調査した限りでおかしいところは一切なかった。
A: ほぼ完璧だが、RtLのキャレットがおかしい。おしい。
B: 一通りokだが、結合できない文字や扱えない文字がある。
C: RtLに未対応。サロゲートペアと結合文字はok。
D: サロゲートペアまでok。結合は不可。
E: 一応対応したレベル。サロゲートペアすら扱えない。
F: Unicodeは一切扱えない。SJISの文字列をUnicode形式で保存できるだけ。
http://hibari.2ch.net/test/read.cgi/software/1303249708/427-428 テキストエディタをまた〜り語ろう ver.31
0873デフォルトの名無しさん
2011/10/24(月) 01:49:52.560874デフォルトの名無しさん
2011/10/24(月) 02:01:47.71アラビア語とかタイ語とかそういうのはどうやって打ち込んだんだろna
記号を配置するだけでもクソの処理だし、
打ち込んだ記号が正しく配置されてるかなんて、アラビア語かじっただけじゃ分からんだろ
意味の無い記号の並び、実際にはありえない記号のならびとかも機械的に処理しちゃってるんじゃね?
あとxyzzyが無いのは高度すぎて使いこなせなかった……とかか?
emacsもないし。
0875デフォルトの名無しさん
2011/10/24(月) 02:42:35.59デフォルトではそうなってなくて、
設定が必要だが、正解はどれだ!?みたいな感じだからなぁ。
0876デフォルトの名無しさん
2011/10/24(月) 09:07:48.31openするときにデフォルトのLatin-1のままでなく、UTF-16を指定すればできるんじゃないのかな?
ただ読み込まれた文字は現在議論の的であるテキスト文字列になるけど。
open my $fh, "<:encoding(UTF-16)", "somedata.txt" or die $!;
0877デフォルトの名無しさん
2011/10/24(月) 11:14:27.02ファイルハンドルにリダイレクトする方法ですが、tieと組み合わせるとうまくいきませんでした。
package Foo1;
sub TIEHANDLE {
return bless { output => "" }, shift;
}
sub PRINT {
my $self = shift;
$self->{output} .= $_ for (@_);
}
package main;
my $out;
{
$out = tie(local *STDOUT, 'Foo1');
open(local *STDERR, '>&', ¥*STDOUT) or die $!;
print "into STDOUT¥n"; # 表示される
print STDERR "into STDERR¥n"; # 表示されない
close STDERR;
}
print "--- output ---¥n", $out->{output};
引き続き、アドバイスお願いします。
0878デフォルトの名無しさん
2011/10/24(月) 15:07:29.62blessするオブジェクトを同じにすれば、同じオブジェクトを操作することになるけど、
目的に合ってるでしょうか?
package Foo1;
my $output = { output => "" };
sub TIEHANDLE {
return bless $output, shift;
}
sub PRINT {
my $self = shift;
$self->{output} .= $_ for (@_);
}
package main;
my $out;
{
$out = tie(local *STDOUT, 'Foo1');
tie(local *STDERR, 'Foo1');
print "into STDOUT\n"; # 表示される
print STDERR "into STDERR\n"; # 表示されない
}
print "--- output ---\n", $out->{output};
0879デフォルトの名無しさん
2011/10/24(月) 16:54:00.81それ、STDOUTとSTDERRが別のインスタンスオブジェクトにtieされませんか?
実行したらわかりますが、最後の print "--- output ---¥n", $out->{output}; で
"into STDOUT¥n" は表示されますが "into STDERR¥n" は表示されません。
最初の質問>>859に書いたように、shellの 2>&1 をしたうえで、printの出力先をオブジェクトにtieしたいので、878のコードだとちょっと違います。
0880デフォルトの名無しさん
2011/10/24(月) 17:28:05.09perl -e 'print $^V,"¥n"'
としたら、5.8では出てこなくて、5.10だと出てきました。
もしかして、5.8では $^V って使えないんでしょうか。
あと、ぐぐるときに「Perl "$^V"」ってやってもうまくヒットしません。
Perlの特殊変数をぐぐるコツを教えて下さい。
0881デフォルトの名無しさん
2011/10/24(月) 17:30:35.07ぐぐらない。
ぐぐるなら、そのまま「特殊変数」だとか、目的である「バージョン」とかで良いんじゃないか。
0882デフォルトの名無しさん
2011/10/24(月) 17:36:43.28http://perldoc.jp/docs/perl/5.14.1/perlvar.pod
をページ内検索
0883デフォルトの名無しさん
2011/10/24(月) 20:25:35.69map {print $_ } (1..100) ;
1から100まで出力する方法、他にありますか?
0884デフォルトの名無しさん
2011/10/24(月) 20:40:14.82print join(' ',(1..100));
0885デフォルトの名無しさん
2011/10/24(月) 20:55:29.350886デフォルトの名無しさん
2011/10/24(月) 21:50:41.39perl -E "do say ++$_ until chr eq 'd'"
0887デフォルトの名無しさん
2011/10/24(月) 21:58:42.40ありがとうございます。
できればその、$^V がPerl 5.8で使用可能かどうかもお願いします。
0888デフォルトの名無しさん
2011/10/24(月) 22:32:24.79>>882を読んだんじゃないのか?
0889デフォルトの名無しさん
2011/10/25(火) 03:22:46.79単純にダウンロードすると < が > になってたりして困っています
0890860
2011/10/25(火) 07:23:49.72$ret = `ls | wc`;
は、ちゃんと動くんですが
$ret = `echo $text | mail $address`
だと、|がシンタックスエラーになってしまう
どうして?
0891デフォルトの名無しさん
2011/10/25(火) 08:54:34.73> 文字列でなかったらなにか?それはバイナリ。
> バイナリを文字として扱いたければ、文字に変換しないといけない。
これこそひとりよがりだと思うけどな。
入力するファイルに"ABC"って書いてあったら、バイナリであると同時
に文字列でもある。文字列フラグと言いかえても、ASCII文字列はフラ
グが立たないから問題のすり替えでしかない。
0892デフォルトの名無しさん
2011/10/25(火) 08:57:04.89HTMLの仕様についてまず勉強しなさい。
0893デフォルトの名無しさん
2011/10/25(火) 09:00:01.58$text の中身は?
0895デフォルトの名無しさん
2011/10/25(火) 10:32:37.19末尾に改行コード入ってないかい?
chomp $text; してからやってみたら?
0896デフォルトの名無しさん
2011/10/25(火) 10:38:13.820897デフォルトの名無しさん
2011/10/25(火) 11:17:06.190898デフォルトの名無しさん
2011/10/25(火) 11:25:50.17私の環境(ActivePerl5.8.9 build 826 for MSWin32-x64-multi-thread)では以下のように出力
されますが、>>879さんの環境は何でしょうか?
--- output ---
into STDOUT
into STDERR
それとも上記出力が意図と違うということでしょうか?
0899860
2011/10/25(火) 21:22:57.71ありがとうございます。できました。
chomp $test;
$ret = `echo $text | /usr/bin/mail mail\@domein.jp -s Title`;
にすると送れました。
ただ、@をエスケープしないとダメなんですね。
アドレスを変数で渡したいんですが、変数に入れる前にエスケープで整形するしか
方法はないんでしょうか?
0900デフォルトの名無しさん
2011/10/25(火) 22:01:58.94やってみれば早いと思うが、
my $address = '[email protected]';
$ret = `echo $text | /usr/bin/mail $address -s Title`;
みたいな感じでいけるよ。
0901899
2011/10/25(火) 22:25:52.49sh: Syntax error: newline unexpected
になってしまうんです。
また、改行コード?と思いchomp $address;
を入れてみたら
sh: cannot open [email protected]: No such file
となります。
0902デフォルトの名無しさん
2011/10/25(火) 22:53:59.42まさか
$ret = `echo $text | /usr/bin/mail "$address" -s Title`;
みたいに $address を " " で囲ったりしてないよね?
$address にメールアドレスを入れるのにちゃんと ' ' (シングルクォート)使ってる?
もしくはシングルクォートを使いながら @ をエスケープしようとしたりしてないよね?
$address = '[email protected]'; …これはOK
$address = "[email protected]"; …これはだめ
$address = 'mail\@domain.jp'; …これもだめ
> また、改行コード?と思いchomp $address;
> を入れてみたら
わざわざ改行コードも入れたの? $address に?
chomp $address; の有無でエラー内容が変わるってことはそうなんだろうけど…。
なんでわざわざ改行コードを入れるの? 何やってるの?
0903デフォルトの名無しさん
2011/10/25(火) 23:06:33.36たぶんすごく基本的なところをミスってるんだと思うぞ。
0904デフォルトの名無しさん
2011/10/26(水) 01:48:24.15本題と関係ないけど、
>>901
> sh: cannot open [email protected]: No such file
これが謎だったんだけど、「<[email protected]>」みたいな
アドレスを渡すと「<」のリダイレクトに失敗して
そういうエラーになりそう。
0905デフォルトの名無しさん
2011/10/26(水) 02:17:59.15> これが謎だったんだけど、「<[email protected]>」みたいな
あー。ありがちかも。
想像だが>>899はメールアドレスが1行に1つ記述されたテキストファイルを読み込んで
それを順ぐりに$address変数に(そのまま)放り込んで次々処理しようとしているのではないか。
だから改行コードがくっついていたり、>>904みたいな <[email protected]> みたいな
文字列が渡ってエラーになったりするのではないだろうか。
違ってたらすまんな。
0907デフォルトの名無しさん
2011/10/26(水) 09:14:28.80解決してなにより。
0908デフォルトの名無しさん
2011/10/26(水) 13:07:02.93mail よりも sendmail コマンドを使ったほうがいいんじゃないかな。
基本的には、
mail : 対話的な利用向けのコマンド
sendmail : プログラム内部から呼び出すためのコマンド
だよね。
でも最近の mail コマンドは高機能でその機能を利用したい、
というケースもあるかな。
0909デフォルトの名無しさん
2011/10/26(水) 13:51:26.27まあオレは面倒だから大抵外部コマンドを使っちゃうけど。
0910デフォルトの名無しさん
2011/10/26(水) 13:57:13.59form.datへフォームデータを書き込む
form.datのロック解除
toukousuu.datロック
toukousuu.datへの書き込み(書き込み数保存ファイル)
toukousuu.datのロック解除
ファイル単位のロックだとform.datの書き込みが成功して
toukousuu.datがロックで書き込めなかった場合
投稿数が合わないことになりますが
こういう場合の対処方法はないんですか?
0911デフォルトの名無しさん
2011/10/26(水) 14:11:27.04誰か教えて
$name="yahoo.co.jp";
print "$name\n";
while($name!='jp'){
$name=~s/[^\.]+\.//;
print "$name\n";
}
print "tes";
0912デフォルトの名無しさん
2011/10/26(水) 14:13:55.55ロックファイルを一つにして
ロックの有無で書き込み実行を制御する。
0913デフォルトの名無しさん
2011/10/26(水) 14:18:17.91$name!='jp' → $name !~ 'jp'
0914デフォルトの名無しさん
2011/10/26(水) 14:23:30.38いやまて、ダブルでおかしいから解答間違えた。
文字列の比較はneとeqだ。
その行間なんとかしろ、見にくい。
0915デフォルトの名無しさん
2011/10/26(水) 14:44:36.04これCGI?
だったらスレ違いだけど
0916デフォルトの名無しさん
2011/10/26(水) 15:28:25.83ありがとw
文字だからne eqかwww
超わかんなっかたw とんくす
0917デフォルトの名無しさん
2011/10/26(水) 15:42:46.79form.datのロック
toukousuu.datロック
form.datへフォームデータを書き込む
toukousuu.datへの書き込み(書き込み数保存ファイル)
form.datのロック解除
toukousuu.datのロック解除
0918デフォルトの名無しさん
2011/10/26(水) 16:43:44.13時間差がある限りそれでも回答としては不完全だな。
0919デフォルトの名無しさん
2011/10/26(水) 17:03:32.23ttp://perl-cgilabo.topsite.ne.jp/LABO/outerdefect.html
0920デフォルトの名無しさん
2011/10/26(水) 19:10:53.96いや、これで行けるだろ・・・
どんなパターンで行けないのさ
0921デフォルトの名無しさん
2011/10/26(水) 19:17:07.15この記事の内容では、
open(LOCK, "$file");
flock(LOCK, 2);
$data = <LOCK>;
close(LOCK)
だと、少し隙間があるとかってなってるけど・・・
これについて、俺も独自で検証した事はあるよ
10万回ループして、ひとつのファイルから読み込んで、
+1して書きこむ。簡単なカウンターを作ってね。
それを、5個同時に走らせたけどカウントは壊れず最終カウント50万になったよ。
どうすれば、その「ロックの隙間」が再現できるのか教えてもらいたい。
0922デフォルトの名無しさん
2011/10/26(水) 19:28:37.90910と五十歩百歩。
0923デフォルトの名無しさん
2011/10/26(水) 19:30:28.45実は自分はその点についてはあんまり重要視してないんだが・・・。
専用のロックファイルを1つ作ったほうが、
複数の書き換えファイルをいちいちロックするよりも処理が簡単になるというのが肝だと思ってる。
その(実用上はめったに起きないであろう)問題へも対処できる、ってのはおまけのようなもんだと思う。
0924デフォルトの名無しさん
2011/10/26(水) 19:34:16.610925デフォルトの名無しさん
2011/10/26(水) 19:42:04.70だから、どういう事なのか言ってみろってば。
どういう時間差が出るんだよ、マジで。
0926デフォルトの名無しさん
2011/10/26(水) 19:49:03.52>どういう時間差
そのまんまの時間差。
ってか時間差が出ないほうの説明が聞きたい。
0927デフォルトの名無しさん
2011/10/26(水) 19:50:49.21いや、待てよ。
答えになって無いだろ
時間差が出るのはわかる
が、どういう時間差が原因で不具合が出るって言ってるんだよ
0928デフォルトの名無しさん
2011/10/26(水) 19:53:00.66>>919のサイトの言ってる事は信用してはいけない
0929デフォルトの名無しさん
2011/10/26(水) 19:55:39.55Kazuho Oku - perl-casual特別企画 Unix Programming with Perl 1/2
http://www.youtube.com/watch?v=mP699JMwuZE
0930デフォルトの名無しさん
2011/10/26(水) 20:02:13.32そのファイルはそのプログラムからしか使われないのか?
万が一でも可能性があるなら排除する。
プログラマの鉄則だろ。
0931デフォルトの名無しさん
2011/10/26(水) 20:05:01.82自分が正しい前提でえらっそうですね。
910がダメで920がダメじゃない理由がしりたいw
0932デフォルトの名無しさん
2011/10/26(水) 20:08:37.12だから、何がダメなのか俺にはわからないから言ってみてくれって言ってんだろ・・・
0933デフォルトの名無しさん
2011/10/26(水) 20:10:41.33おい、まだわからんと?
0934デフォルトの名無しさん
2011/10/26(水) 20:12:01.88910がダメで920が大丈夫な理由は?
まずそれを聞かないともう答えられない。
0935デフォルトの名無しさん
2011/10/26(水) 20:13:30.250936デフォルトの名無しさん
2011/10/26(水) 20:20:49.180937デフォルトの名無しさん
2011/10/26(水) 20:35:06.830938デフォルトの名無しさん
2011/10/26(水) 20:55:50.31「flockの隙間」の項目を読んでいるのだが、openとflockの間に隙間があっても問題ないと思う。
flockから先に行かせない(実際にデータを読ませない)のがflockの役割だろう。
また、同じ項目に、
>全てのスクリプトからファイルの中身が読み取れてしまいます。
とあるが、flockで順番待ちしているのだから、終わったら読み込めるのは当然だ。
0939デフォルトの名無しさん
2011/10/26(水) 21:12:55.490940デフォルトの名無しさん
2011/10/26(水) 21:14:21.120941デフォルトの名無しさん
2011/10/26(水) 21:41:05.87Perlのopenがstdio使ってたら
openとflockの間にstdioがbufferingする可能性はないのかな
0942デフォルトの名無しさん
2011/10/26(水) 21:51:49.13open(LOCK, "$file");
flock(LOCK, 2);
$data = <LOCK>;
close(LOCK)
これだとopenしてからロックしてるじゃん
逆だろ
flock(LOCK, 2);
open(LOCK, "$file");
が正しいはず
0943デフォルトの名無しさん
2011/10/26(水) 22:03:59.310944デフォルトの名無しさん
2011/10/26(水) 22:04:53.230945デフォルトの名無しさん
2011/10/26(水) 22:07:56.16してもbufferingしてるようには見えなかった。そりゃそうか
0946デフォルトの名無しさん
2011/10/27(木) 01:50:27.31> open(LOCK, "$file");
さすがに open もしてないファイルハンドルをロックすることは
できないだろ。
0947デフォルトの名無しさん
2011/10/27(木) 01:55:16.180948デフォルトの名無しさん
2011/10/27(木) 13:12:31.23http://toki.2ch.net/test/read.cgi/scienceplus/1319679294/
C、Lispと来たら次は……
0949デフォルトの名無しさん
2011/10/27(木) 13:40:44.620950デフォルトの名無しさん
2011/10/27(木) 17:33:50.15それは本当に楽しみだな
0951デフォルトの名無しさん
2011/10/27(木) 17:35:07.270952デフォルトの名無しさん
2011/10/27(木) 17:37:37.890953デフォルトの名無しさん
2011/10/27(木) 18:11:46.330954デフォルトの名無しさん
2011/10/27(木) 18:24:51.250955デフォルトの名無しさん
2011/10/27(木) 22:41:38.010956デフォルトの名無しさん
2011/10/27(木) 23:43:02.27formatとparseの略なのかな?
$time = Time::Piece->strptime('2007-01-01', "%Y-%m-%d") は与えた時間をパースして、timepieceのインスタンスにする。
$time->strftime(%Y%m%d) はインスタンスが持ってる時間をフォーマットに整形して返す。
0957デフォルトの名無しさん
2011/10/27(木) 23:50:58.32strftime - format date and time
manコ
0958デフォルトの名無しさん
2011/10/28(金) 01:58:05.98プロペラ先輩だっけか
0959デフォルトの名無しさん
2011/10/28(金) 08:25:43.190960デフォルトの名無しさん
2011/10/28(金) 21:41:59.31明確な答えはないということは分かった
0961デフォルトの名無しさん
2011/10/28(金) 22:35:37.400962デフォルトの名無しさん
2011/10/28(金) 22:53:38.810963デフォルトの名無しさん
2011/10/28(金) 22:59:02.51あまり詳しくは説明できんのだよ。
0964デフォルトの名無しさん
2011/10/29(土) 00:16:07.480965デフォルトの名無しさん
2011/10/29(土) 10:52:47.36use utf8;
binmode(STDIN, ':encoding(euc-jp)');
binmode(STDOUT, ':encoding(euc-jp)');
binmode(STDERR, ':encoding(euc-jp)');
$a="てすと";
$file4="esujisu25.txt";
open(TO2,">:encoding(euc-jp)", "$file4");
print TO2 "てすと\n";
#print TO2 "難しいてすと\n";
close(TO2);
「難しいてすと」だと文字化けせずに「てすと」文字化けします。
なぜですか?教えてください。
0966デフォルトの名無しさん
2011/10/29(土) 11:05:59.23すれ違いです。テキストエディタスレに行ってください。
0967デフォルトの名無しさん
2011/10/29(土) 11:55:02.420968957
2011/10/29(土) 12:47:23.260969デフォルトの名無しさん
2011/10/29(土) 12:49:57.150970デフォルトの名無しさん
2011/10/29(土) 14:41:39.55コードからは文字化けを起こす要素が無い気がするけども。
Perl のコード以外の問題じゃないのかな?
0971デフォルトの名無しさん
2011/10/29(土) 14:49:00.64てすとが文字化けした時ってのは$aにてすとを突っ込んだ時の話じゃねーの?
状況は最初から全部明確に書けアホ
0972デフォルトの名無しさん
2011/10/29(土) 14:59:40.51「てすと」だけだと短かすぎて判別を誤ってるってことでは?
0973デフォルトの名無しさん
2011/10/29(土) 15:17:45.90perldoc perlvar すると
> $a
> $b
>
> Special package variables when using "sort()", see "sort" in perlfunc. Because
> of this specialness $a and $b don't need to be declared (using "use vars", or
> "our()") even when using the "strict 'vars'" pragma. Don't lexicalize them
> with "my $a" or "my $b" if you want to be able to use them in the "sort()"
> comparison block or function.
とあるので sort を使わない限りは関係無いんじゃね?
とはいえ、普通は事故防止の為に $a $b なんて変数は使わないよね。
0974デフォルトの名無しさん
2011/10/29(土) 15:33:04.32確かめもしないでいい加減なことを書いてるんじゃねえよ。
オマエと>>965のレベルはどっこいどっこいだな。
0975デフォルトの名無しさん
2011/10/29(土) 15:40:00.150976デフォルトの名無しさん
2011/10/29(土) 15:44:57.850977デフォルトの名無しさん
2011/10/29(土) 18:45:38.10$s=~/<([^>]+)>/g;
↑のグローバルマッチングでhogeとfooを後方参照で取り出すにはどーしたらいい?
0978デフォルトの名無しさん
2011/10/29(土) 19:25:59.13pos関数で地道にやるのは全然スマートじゃないしなあ。
0979デフォルトの名無しさん
2011/10/29(土) 19:29:57.670980デフォルトの名無しさん
2011/10/29(土) 20:21:46.89/(.)/ の後に $1 を使うのは違う。
0981デフォルトの名無しさん
2011/10/29(土) 23:27:47.47特に日本語文字列あたり
0982デフォルトの名無しさん
2011/10/29(土) 23:35:02.13やることが大幅重なってる言語なんて必要ない
特化が全て
0983デフォルトの名無しさん
2011/10/29(土) 23:36:38.87ttp://ja.wikipedia.org/wiki/%E3%82%B7%E3%82%B8%E3%83%AB_%28%E3%82%AA%E3%82%AB%E3%83%AB%E3%83%88%29
0984デフォルトの名無しさん
2011/10/29(土) 23:51:49.050985デフォルトの名無しさん
2011/10/30(日) 00:36:56.80use utf8;
use Text::CSV;
use Data::Dumper;
use Encode;
binmode STDOUT ':encoding(utf8)';
my $csv_path = shift;
open my $fh, '<:encodeing(sjis)', $csv_path;
my $csv = Text::CSV->new;
$csv->column_names($csv->getline($fh)) {
print $_ for @$row;
}
これをprint Dumper($row)にすると、\{ff84}のような出力になるのはなぜでしょうか。
また、openで使用している<:encodeingは、PerlIOの機能のようですが、これはPerlIOがuse Encodeを呼び出して使用しているのでしょうか。
0986デフォルトの名無しさん
2011/10/30(日) 00:52:46.20ホントにこのスクリプト動くの?
0987デフォルトの名無しさん
2011/10/30(日) 01:24:45.140988デフォルトの名無しさん
2011/10/30(日) 03:21:25.00打ち直してないでコピペしろ。
0989デフォルトの名無しさん
2011/10/30(日) 03:25:09.07print $_ for @$row;
}
謎すぎる構文
0990デフォルトの名無しさん
2011/10/30(日) 03:51:09.96たぶんperldoc text::csvから引っぱってきてるんだろうけど。
当人じゃないとどことどこをどう改変したんだかわかんねえや。
$rowはどこから持ってきてるんだよって。
ところで次スレって>>950が立てるんだっけ?
0991デフォルトの名無しさん
2011/10/30(日) 05:07:55.26use Text::CSV;
use Data::Dumper;
use Encode;
binmode STDOUT, ':encoding(utf8)';
my $csv_path = shift;
open my $fh, '<:encoding(sjis)', $csv_path;
my $csv = Text::CSV->new;
$csv->column_names($csv->getline($fh));
while( my $row = $csv->getline($fh)) {
print $_ for @$row;
}
0992991
2011/10/30(日) 05:09:21.620993デフォルトの名無しさん
2011/10/30(日) 10:53:26.78マニュアルには、{ binary => 1 }とすべきと書いてありますが、これをするとどうなりますか?
my $csv = Text::CSV->new ( { binary => 1 } ) # should set binary attribute.
Text::CSV
http://search.cpan.org/~makamaka/Text-CSV-1.21/lib/Text/CSV.pm#SYNOPSIS
PerlIOがEncodeを呼んでるようです。
Encode::PerlIO
http://search.cpan.org/~jhi/perl-5.8.1/ext/Encode/lib/Encode/PerlIO.pod#How_does_it_work?
0994デフォルトの名無しさん
2011/10/30(日) 10:59:45.120995デフォルトの名無しさん
2011/10/30(日) 11:05:10.92> 最近VertualBoxからコピペできなくなってしまって
バージョンアップの後にExtension Packもアップデートした?
0996デフォルトの名無しさん
2011/10/30(日) 11:10:20.410997デフォルトの名無しさん
2011/10/30(日) 11:27:07.25while(<>){
chomp;
my @row = split(/,/, $_);
for my $row (@row){
jcode::convert(\$row,'utf8','sjis');
print $row;
}
}
0998デフォルトの名無しさん
2011/10/30(日) 11:52:30.05百歩譲ってもJcodeまでだ
0999デフォルトの名無しさん
2011/10/30(日) 11:57:03.041000デフォルトの名無しさん
2011/10/30(日) 12:06:17.06>>993ですが、最初の質問の意味を取り間違えてました。
その文字列は、テキスト文字列といい、 Data::Dumperではその文字のUnicodeのコードポイント
を返してますね。
\{ff84}:Unicode U+FF84
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。