# [Perl 日本語処理の基礎の基礎] # このレスは、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 でエンコードする必要があります。
JPerl からひさしぶりに Perl な世界でよくわかりませんが
>>4 の
binmode STDIN => ":encoding(cp932)";
binmode STDOUT => ":encoding(cp932)";
が
use encoding "cp932";
でも、いいような気がしるけど、いまいち理解できてないです…
それは気のせいだよ
use encoding "cp932"にするとソースもcp932で書かなきゃ いけなくなるのが余計ってことなんじゃ。
14 :
9 :2011/05/26(木) 13:15:44.46
>>12 さんどうもです。
とりあえず、最初は
use utf8;
use encoding "cp932";
use open IO => ":encoding(cp932)";
binmode STDERR, ":encoding(cp932)";
こんな感じで、UTF-8形式でソース保存しています。
あ…ファイル名に全角文字だとさらにややこしくなるんですね… orz
15 :
9 :2011/05/26(木) 13:17:59.16
実行環境は、Win7 64bit コマンドプロンプトのローカル環境です。
use utf8 するとめんどくさいので、use utf8 は使わないなぁ ソースを utf8 で保存しれりゃ別にえぇんとちゃうのん?と思う。 文字数を数えたいなら decode してフラグ付けりゃいいだけだしさ。
もつ
>>1 乙
テンプレが長いのは過去スレが多いからだが、過去スレはやめても
いいんじゃない?
他のスレでも、省略しているものが多いみたいだし。
19 :
デフォルトの名無しさん :2011/05/26(木) 17:37:42.78
フォームから入力されたデータ 例えば<font size="6">www</font>"aaa"<font color="#0000ff">www</font>"bbb"という文字列の タグの中の"を'にタグ外の"は&quot;に変換して <font size='6'>www</font>&quot;aaa&quot;<font color='#0000ff'>www</font>&quot;bbb&quot;というようにするには どうしたらいいんでしょうか?
>>19 そんなこと聞いてるやつがインジェクション攻撃に
対処できると思わないからタグ自体禁止する。
たぶん聞かないなこりゃ<タグ禁止
>>19 1.行全部のクォートを"にする
2.タグの中の"を'に変換する
3.SQLなどへのインジェクションで泣きを見る
4.あなたは晴れて失業
5.perl忍者が増える
すみません初歩的な質問なのですが ハッシュ変数wordに$word{"テスト"}="だよ"; のような感じで値を渡しているのですが いざif文で if ($word{$a} == "だよ")で判別しようとすると $aがどんな値でも上記の条件式が必ず実行されてしまいます。 意味不明だと思いますがエスパーの方いましたらよろしくお願いします。
初歩の初歩だ 文字列比較には==ではなくeqを使え
== eq != ne 常識
>>24-25 無事解決しました!
なるほど文字列の比較の仕方が間違ってたんですね。
どうもありがとうございました。
>>19 タグの外ってことは > と < にはさまれてるって考えれば良いかと
うーむ、
>>14 の例がどうしてutf8が優先されるのか分からない。
それは置いといて、encodingを使うと、
binmode STDIN => ":raw :encoding(cp932)";
binmode STDOUT => ":raw :encoding(cp932)";
こうなって、"\n"の挙動が変わるから注意は必要だね。
単に記述を短くしたいだけなら以下でいいのでは? use utf8; use open qw(:encoding(cp932) :std);
>>19 >フォームから入力されたデータ
この意味がよくわかんないんだけど、単なる文字列の変換なら
my $str = '<font size="6">www</font>"aaa"<font color="#0000ff">www</font>"bbb"';
$str =~ s/(<[^>]*?)"(.*?)"/\1'\2'/g;
$str =~ s/"/&quot;/g;
文字列の #ff4500ff とか 16進数の 0xff4500ff とかを 0 から 1 までの範囲の RGBA の配列に変換してくれるモジュールには どういったのがあるのでしょうか? サブルーチンを自分で書いた方が早い気がしますが、 CPAN にあるのならそれを使った方が良いかなあ?と思って
34 :
デフォルトの名無しさん :2011/05/27(金) 13:25:00.08
正規表現で.(ドット)は改行以外の任意の1文字ですが 改行を含む任意の1文字はどう表現すればいいですか?
>>34 s修飾子を使うか | で並べる
/./s
/.|¥n/
お好きな方で。
>>30 よく解らなかったので検索したら、たとえば
binmode STDOUT => ":crlf:encoding(cp932)";
という指定で大丈夫でしょうか?
>>36 礼儀正しくやるならそうなるね。
面倒ならSTDINだけ:crlfを追加とか。
binmode STDIN => ":crlf";
38 :
デフォルトの名無しさん :2011/05/27(金) 18:52:12.71
$str="aaa{aaabbbccc}aaa{aaabbbccc}";の {}の中のaaaをAAAにしたいんですけど $str=~s/{aaa}/AAA/g;としてもうまくいきません どうすればうまくいくんでしょうか?
Perlはじめようと思ったのですが やめたほうがいいといわれたのでやめます
>>38 $str="aaa{aaa}aaa{aaa}";
なら $str=~s/{aaa}/AAA/g;でうまくいくよ。
こえぇ…pmとかでお伺いを立てないで CPANにUPすると容赦なくdisられるのな…。
初歩の初歩だけど #!C:/Perl/bin/perl require 'cgi-lib.pl'; require 'jcode.pl'; print "Content-type: text/html\n"; print "\n"; %form = &read_input('euc'); $name= $form['name']; print "$name"; これでなんで何も表示されないのか全くわからん。 ディレクトリ内の「cgi-lib.pl」の名前を変えてみたところサーバーエラーになったらから、 「cgi-lib.pl」の読み込みはちゃんとできていたということになるんだけど。
$name= $form['name']; これなに
連想配列のnameの要素を参照したんだけど。
$name = $form{'name'};
[] 配列 {} ハッシュパピー
あ、そっか。ありがとう! よーし治……らない! なぜ。
print $
print %form した結果はどうなる?
&read_input('euc'); ジャッジメントですの!
Perl4とかゴミだろ
めんどくさいので以下のように書き換えるがよろし use CGI; my $form = CGI->new; print $form->param('name');
500エラー来ました。 もう1度検討を重ねてから出直してきます。
ああ、なんか&read_input('euc');が入ってると問答無用で何一つ出力されなくなるみたい。
なんかよくわかんないけど &read_input('euc'); をやめて &ReadParse; にしたらできた。ていうかcgi-lib.plに「read_input」なんて文字列自体存在しなかったぞ。どうなってんだ^o^
初歩の初歩以前の問題だったようだな
cgi-lib.pl は古いから CGI.pm 使えって
cgi-lib互換モードもあるよ use CGI ':cgi-lib'; %form = Vars;
ご丁寧にありがとうございました。 でもすでに手作業で移行しますた
>>61 > でもすでに手作業で移行しますた
なってねえな〜「でもすでに」じゃねーだろ
そういう時はウソでも「参考になりました」とか「もっと精進します」とか書いとけよ
これ以上ゴミコードを増やす意味はないだろ。
65 :
デフォルトの名無しさん :2011/05/30(月) 11:26:36.12
cpan> install Gtk2 Running install for module 'Gtk2' Running make for F/FL/FLORA/Gtk2-1.223.tar.gz Has already been unwrapped into directory C:\strawberry\cpan\build\Gtk2-1.223-C10W1L 'C:\strawberry\perl\bin\perl.exe Makefile.PL' returned status 512, won't make Running make test Make had some problems, won't test Running make install Make had some problems, won't install なんかこうなるようになっちゃったんですけど 最初からやり直すにはどうしたらいいんざましょ?
>65 エラーメッセージで 「Gtk2-1.223.tar.gz は C:\strawberry\cpan\build\Gtk2-1.223-C10W1L にもう展開してあるよ!」って言ってるんだから コマンドプロンプトで C:\strawberry\cpan\build\Gtk2-1.223-C10W1L に移動して、 make make test make install で良いんじゃないの?
67 :
デフォルトの名無しさん :2011/05/30(月) 14:15:45.27
cpan> look Gtk2
68 :
デフォルトの名無しさん :2011/05/30(月) 21:53:49.88
while(<>){ } この<>はなんですか?
>>68 @ARGVに設定された引数のファイル名の内容を順に1行読むか、引数がない場合は標準入力から読む 、という指定。
I/O Operators in perldoc perlop
>>68 山カッコ演算子。
ダイヤモンド演算子とも呼ばれる。
ダイヤモンド演算子
72 :
70 :2011/05/30(月) 22:35:16.91
73 :
デフォルトの名無しさん :2011/05/30(月) 22:40:02.95
>>69-71 ありがとうございます。検索しても記号だと見つからないようなので助かりました。
いえいえ、どういたしまして。
暇な人に対するアホな質問です。 昔自分で作った記述ですが、昔すぎて作ってた時の記憶が出てきません。 特定のケースで不備が出る場合とか、そうゆうのを思いついたら教えてください。 処理の目的はどんな文字でも一緒に混ぜても大丈夫、みたいな感じです。 たぶん一般的な通信のヘッダーとかの分解にも使えたような気がします。 sub Separator_join ($$;@) { my $separat = shift or return(); my $enclose = shift or return(); my @entity = @_ or return(); $separat ne $enclose or return(); map {s/($separat+)/$separat$1/go} @entity; return( join qq[$enclose$separat$enclose], @entity ); } #▼Separator_joinで生成されたスカラーに対し、安全にセパレータで分割してリストを返す sub Separator_split ($$$) { my ($separat, $enclose, $all) = @_; my @entity = split /$enclose$separat$enclose/, $all; map{s/$separat(?!$separat)//go} @entity; return(@entity);
q{0}
77 :
75 :2011/05/31(火) 13:01:56.41
>>76 ありがとうございます。Perlだったか!という感じです。
アルゴリズム的な問題とか、想定範囲の抜け目とか、その変もお願いします。
おかしな事が起きない確証(?)って言うか確信みたいなのが欲しい感じです。
メモリが足りない場合……とか、そうゆう関数に直接関係ないのはいいですけど。
別に暇な人でいいんで、お願いします。
曖昧な記憶ではメールの仕様と同じだったと思うんで、
どんな内容でもデータは壊れないし復元できると信じたい想いなんですが。
78 :
デフォルトの名無しさん :2011/05/31(火) 13:19:05.51
文字が化けちゃうんですけど化けないようにするにはどうしたらいいんでしょうかね?
>>4 のやり方で、MechanizeでShift_JISのページを取得してファイルに出力したところ、
@Uпァが
\x{fffd}@\x{fffd}K\x{fffd}Z〒に
なってました。
MovableTypeのカスタマイズのためだけにPerlをこれから覚えるのは時間かかりますか?
$separatと同じ文字が$encloseに混じってたりすると嫌なことが 起こりそうとか、メタキャラクタのエスケープしてないぞとか s///o使ってるので$separatや$encloseを違う文字列で呼んだら おかしくなりそうとかその辺が突っ込みどころかなぁ。 ちゃんと仕様を残しましょうww
外部コードは処理する前に内部コードに変換
82 :
75 :2011/05/31(火) 15:33:04.61
ありがとうございます。 >$separatと同じ文字が$encloseに混じってたりすると嫌なことが >起こりそうと 考えてみた結果、 $separat = q(/); $enclose = q(_/); @entity = (q(_/_/)); これで見事におかしくなる予感がしました。 こんな引数使う馬鹿誰だよ、って少し思いますけど。 一文字限定とか仕様変えてもいいんですが、既存のどっかにバグが出たら嫌なので 重複文字列の全チェック関数を作ります。無駄に重たくなりそうだけど…。 >メタキャラクタのエスケープしてない 仰るとおりです。 >s///o使ってるので$separatや$encloseを違う文字列で呼んだら >おかしくなりそうとかその辺が突っ込みどころかなぁ。 あれ、関数を再度呼んだらoは初期化されないんですか? ループの中だけで有効で、スコープ抜けたら初期化される物と勝手に思ってました。 すみません検索してきます。
83 :
デフォルトの名無しさん :2011/05/31(火) 19:44:13.28
>>81 decode('cp932',$cp932_char);
decode('utf8',$utf8_char);
とかやってから処理すればいいんですかね?
なんだかどれがどれと一緒なのかわからなくなっとります
まだこいつ文字コードのことやってんの きもちわる
波ダッシュとか意味わかんないんだもん・・・
やっと解決したよ! Mechanizeが悪かったこの野郎! 勝手にデコードしやがって! 寝る
オブジェクト作るときにエラーが起きたとき bless の結果を返さずに undef を返しても OK なんですよね? new{ $obj = {'is_error' => 0}; bless $obj, $pkg; return $obj; } my $test = TEST->new(); if($test->{'is_error'}){〜} みたいに一々書く必要は無いですよね?(サンプル自体が分かりにくいかもしれませんが・・・^-^;)
TEST->new() or die; むしろ$test->{is_error}でハッシュを参照するのがよろしくない
あっ、ほんとは is_error() の予定だったんだけど、記述を減らしたかったので便宜上そう書かせていただきました。 new() or die みたいな書き方を書かれてるってことは、new でエラーを返したい場合は undef を返しても OK という事ですよね?
90 :
82 :2011/06/02(木) 00:44:32.99
仕事の都合上書くの遅れました。 sub test_1{ my $test = $_[0]; my $test2 = 'aabb'; { $test2 =~ s/$test//og } print "$test2\n"; } &test_1("a"); &test_1("b"); いったいこの o の仕様はどうゆうこと。 スコープ抜けてもoは継続されるわ、 myの変数だからサブルーチン呼んだら新しい変数になってるハズなのに、oがそのまま記憶されてるわ、 なんですかこの仕様。 サブルーチンで o 使えないじゃないですか。 Perl作った人は何考えてるんですか。 なんかoを「ここでoを初期化させる!」みたいな記述とかないんですか?
/oの仕様って知ってる?
>>89 他のモジュールでも参考にして好きにすりゃいいよ
あとreturnはundefじゃなくて引数なしにしとけ
94 :
90 :2011/06/02(木) 01:42:21.43
>>93 ありがとう。
なんとも言いがたいルールでした。
なるほど undef を含む配列となる場合があるから return undef じゃなくて return のみ 書くと良い訳ですね。 ふと思ったけど、たしか関数が何で評価されてるか知る関数ありましたよね? スカラなら return undef で、配列なら return で返せるといいなぁ。 やっぱ undef をちゃんと返したい (^_^;)
2011-06-01 の形式で与えられる日付から 前日(2011-05-31)と、一週間前(2011-05-25)を求めたい 丁度いいモジュールか計算方法を教えて下さい
use Date::Simple;
>>97 use Time::Piece;
use Time::Seconds;
my $t = Time::Piece->strptime("2011-06-01","%Y-%m-%d");
say ($t - ONE_DAY); # Tue May 31 00:00:00 2011
say ($t - ONE_WEEK); # Wed May 25 00:00:00 2011
>>98 Date::Simple もたしかにいいね
>>75 separator やenclosure 自体のエスケープがないのだから、 $enclose$separat$enclose をそのまま並べた文字列がきたらアウトだろ。
CSVの """" や application/x-www-form-urlencoded の %HH のようなエスケープ処理がないと無理。
必ずしもそうではないんだなそれが。元データに$separatが含まれていたら $separatを1つ付け加えることで、$enclose$separat$encloseという並びが 付け加える処理を行った後のデータには含まれてないことが保証されるように するって考えなわけです。$separatは前処理で少なくとも2回以上の繰り返し になっているはずなので一つだけなら区切りだとわかるわけだな。
> $enclose$separat$enclose をそのまま並べた文字列 それは存在出来ないのでは
103 :
75 :2011/06/03(金) 00:33:11.64
>>101 私の代わりに説明ありがとう。
>>100 joinがそれを起こすので、それを起こさないための Separator_join ですね。それじゃjoinと全く同じですw。
そこはメインで解決されてると言うか、そのための関数です。本趣旨がそれなんでw。
蛇足ですが、この前メールのヘッダーを調べてきたら Separator_join(q[.], qq[\n], @hoge); と同じ仕様だったようです。
メーラー作る時はSeparator_split(q[.], qq[\n], $hoge); で文字を壊さずに復元できるようです。
(メールは全文字列を受け付けます。問題は想定ミスや記述ミスだと思います)。
ちなみにセパレーターとかを選べるのは、プログラマーが処理が増大しないような文字を勝手に考えて決めろ、って言うことです。
my @map; foreach my $com1 (0 .. 199){ foreach my $com2 ( 0 .. 150 ){ $map[$com1]->[$com2] = 1; } } 上記の処理をアルファベットの x を使って my と同時に一行で書ける処理があったような気がするんですが、 どうにも思い出せません。 すみませんけど教えてください。
$map = ([1] x 151) x 200; でいいのだろうか? それともこうだろうか? $map = ((([1]) x 151) x 200); ごめんなさい、なんかどうカッコを書けばどうゆうリストが返るのかイマイチ分かってないです。
([(1) x 151]) x 200 こうのような気がしてきました。一応試してみますけど、 カッコとxの関係を誰か教えてください。
>>110 >>107 http://perldoc.jp/docs/perl/5.10.0/perlref.pod #!/usr/bin/perl -w
use strict;
my @map = map [ (1) x 3 ], 0..4; # リストリファレンスを5回作る
print '$map[', $_, '] = ', "$map[$_]\n" for 0..$#map;
print "---\n";
@map = ([(1) x 3]) x 5; # 一度作ったリストリファレンスのコピーを5個入れる
print '$map[', $_, '] = ', "$map[$_]\n" for 0..$#map;
__END__
>>111 すみません、mapを使わなくても出来たような記憶があるんです。
テストしてませんが調べてきました。
xはスカラー値に対しては、その回数を繰り返し連結したスカラーを返すようです。
()に対する x は全く別の働きをし、リストとして複製し、リストを返すようです。
まだテストしてませんが、たぶん
>>110 で大丈夫だと思います。
一応結果報告しときます。 my @test = ([(1) x 3]) x 5; foreach my $ref_ary (@test){ foreach my $print (@$ref_ary ){ print "$print\n"; } print "\n" }
@map = ((1x150)x200); なんとなく書いてみたけど、これでいいような気もしなくはない
>リストリファレンスのコピーを5個入れる まじすみません! 流し読みしてました! ソレは困ります!
>>112 ちょっと考えましたが x だと同じリファレンスのコピーしか生成しない気がしたので、
map関数の記述をありがたく頂くことにしました。
ありがとうございます。
>>114 その記述だともしうまく行っても、Perl特有の暗黙のなんかがあるのだろうけど、
どこでリファレンスが発生するのかよくわからない・・・
しかも安価間違えました。 下らんことで長々すみませんでした。
ファイルハンドルの取り扱いを教えて。 複数のFHを扱うので、ハッシュがいいのですが、 open FH, ファイル名 $test=*FH で変数扱いdと上手くいくけど、 $hash{"FILE1"}=*FH でハッシュだと上手くいきません。
{ } でくくる
>>119 すいません、わかりません ><
具体的に教えて
通報した
>>122 リンク先に具体的にいろいろ書いてあるだろ
隅々までよく読んで勉強せい
質問自体がここは10年前か?みたいなのが多いんだよ。 へんな化石みたいなサイトを見てるくせにまっとうなところは見ない。
まず perldoc して自分が使ってる perl のドキュメントを読む習慣を付けた方が良いと思う。
受身のままじゃ使えない奴のままだよな
ありのままに生きたいと願ったアリはずっとアリのままだった みたいだな
129 :
118 :2011/06/04(土) 17:59:25.89
なんかいろいろスミませんでした。
>>121 さんを参考に努力してみます。
(´Д`;)
∨)
((
今perlがなんていう変数を何個持っててメモリをどのくらい使ってるか 計測するツールはありますか?
WWW::Mechanizeでスクレイピングしていると異常に時間が掛かるのですが、何をチェックすればいいのでしょうか。 システムはFedora13で、webページでログインして数カ所を巡回する程度ですが、1分以上掛かります。 sslが遅いのかもしれませんがよく分かりませんでした。
ストップウォッチのようなものをつける
ファイルの先頭行にメッセージをいれるべく、 `sed -i '1s/^/MESAAGE\n' $file` って書いたのに、 sed: -e 表現 #1, 文字数 10: 「s」コマンドが終了していません とか言われるのは何故?
134 :
134 :2011/06/05(日) 09:35:25.23
`sed -i '1s/^/MESAAGE\n/' $file`
135 :
135 :2011/06/05(日) 10:20:36.57
ちっともPerlについての質問じゃないし。
136 :
136 :2011/06/05(日) 10:34:31.12
メサアゲ
普通のラー油ででかい瓶で安く売ってないのかな。 ふつうのやつって、半分以上容器代だよね。
Perlも半分以上は使いもしない無駄な機能でできています。
ドキュメントも、重要なのは全体の10%だけで、 いつも残りの90%で時間を無駄にしている気がする
例えばオブジェクト指向で得られる利点とはなんですか? my $obj = CGI->new; とか、書くのが書籍などではオブジェクト思考と言われていますが 普通に require や use して、package::package_sub(); として呼び出すだけじゃだめなんですか? そもそも、パッケージ化してその都度呼び出すこと自体がオブジェクト指向じゃないんですか?
>>140 状態を持つオブジェクトを複数同時に扱 うのが楽。
IO::FileのかわりにIO::Stringをサブルーチンに渡すなどの応用が楽。
ただしモジュールを書く側は再利用を考えて設計するので面倒。
初歩的な質問なのですが… @aiueo = ('a', 'b', 'c', 'd', 'e'); $rand = int(rand(6)) if($rand == 0){print "$aiueo[0]";} elsif($rand == 1){print "$aiueo[1]";} elsif($rand == 2){print "$aiueo[2]";} elsif($rand == 3){print "$aiueo[3]";} elsif($rand == 4){print "$aiueo[4]";} このソースをなんとかしてまとめることは出来ませんか? $aiueoの[]の中に乱数をそのまま入れたいんです、お願いします><
@aiueo = ('a', 'i', 'u', 'e', 'o'); $rand = int(rand(6)); print "$aiueo[$rand]"; どうでしょう
@aiueo = qw(a b c d e); print $aiueo[rand @aiueo];
146 :
デフォルトの名無しさん :2011/06/07(火) 00:09:21.69
初歩的な質問します。 代数の値があまりにも大きいとe+○○という数になります。 これを整数で表示させる方法はないでしょうか。
149 :
デフォルトの名無しさん :2011/06/07(火) 00:15:16.55
>>148 use Math::BigInt; ってのがあったんですね。
ありがとうございました。
割り算しないならuse bigint
$# 使えよ
ざわざわっ カイジ「ちょっとまてその場合rand(6)じゃなくてrand(5)だろ?」
154 :
tokuhirom :2011/06/08(水) 00:09:28.93
よかったら僕になんでもきいいてください なんでもこたえられます 職業Perlプログラマです
155 :
tokuhirom :2011/06/08(水) 00:10:26.81
毎日ここをチェックしてるよ
156 :
tokuhirom :2011/06/08(水) 00:11:06.70
僕 書籍に60万円いじょうお金かけてるからすごいよ
157 :
tokuhirom :2011/06/08(水) 00:21:55.01
こiPhoneのブックマークにいれてますね ここのスレ毎日チェックしてますね おもしろいスレですね 2chやってることかくしてましてねえ 小飼弾はしにま
158 :
tokuhirom :2011/06/08(水) 00:22:30.35
もう寝ますね ききたいことあったら明日きいてね ぼくいつでもいるから
159 :
tokuhirom :2011/06/08(水) 00:23:04.12
明日の当番はotsuneだったね ぼくのファンのかた残念だたね おやすみ
160 :
tokuhirom :2011/06/08(水) 00:24:42.20
寝るところがないから新宿の道路でねてま
ネイピア数の簡単なプログラムです。 use Math::BigFloat; for($k = 1,$n = <>;$k <= $n;$k++){ $m = (1+ 1/$k) ** $k; print "$m\n"; } Math::BigFloat;を使っても、 計算精度も桁数も変わらないんですが、なぜでしょうか?
使わなきゃ変わるわけない
え
使っているように見えないが
どうすればいいですか
>>161 use Math::BigFloat;
my $n = <>;
for(my $k = Math::BigFloat->new(1); $k <= $n; $k++){
my $m = (1 + 1/$k) ** $k;
print "$m\n";
}
面倒なら、use bignum;使うといいよ。チョーお勧め。
オブジェクト作る時の最初に new しますが、 new の中から、そのパッケージのメソッドを呼ぶにはどうすれば良いですか? あるメソッドの内容とコンストラクタの中とで重複する処理があるので、コンストラクタから メソッドを呼びたいです。 と書いたところでググってたら、コンストラクタからメソッドは呼ぶな!というのがあって、 めんどくさいけど、同じ内容を書こうと思います。
>>167 何の事か分からんけど、副作用が無ければ、
下のようにして_init内にゴリゴリ書けばいいよ。
package _Foo;
sub new {
my ($class) = @_;
my $self = bless{}, $class;
$self->_init;
return $self;
}
sub _init {
my ($self) = @_;
...
}
オブジェクトの中でprintするか、返した文字列をprintすべきか迷い中。。。
>>166 use bignumを調べてみました
ホントに便利ですねw
貴重な情報ありがとうございました。
それと、
出力結果を、
メモ帳にリダイレクトする方法はありませんか?
>>170 メモ帳はできないみたいだけど、エディタによってはできるんじゃない?
秀丸の場合は
perl hoge.pl | C:\PROGRA~1\Hidemaru\Hidemaru.exe
173 :
172 :2011/06/08(水) 12:37:45.60
>>172 Webサーバを運用してるのなら Webサーバのアクセスログで良くね?
Webサーバを運用なら何か他の目的で必要としない限りは必要無いだろ
175 :
174 :2011/06/08(水) 12:53:04.68
Webサーバを運用なら→Webサーバを運用してないなら
自宅サーバーなので apacheのログだけとれば十分ということでもないようです FreeBSDのportsで入れた後で少し改造した物などでは apacheを経由してないものもあるみたいなのです
窓から投げ捨てろ
(?i:hoge) の逆を表す方法があればご教示ください。よろしくお願いします。
逆ってなんだよ /(?-i:hoge)/i ってことか?
ありがとうございます。それです。
>>171 ありがとうございます。
メモ帳以外ならどこかにリダイレクト可能ですか?
>>181 Tempフォルダにでもファイルとしてリダイレクトして
その後にメモ帳で開けば良いんでね?
コマンドラインに変数は渡せない? $a = `nkf -j $b`; がうまくいかない・・・ どうしたらよい?
184 :
183 :2011/06/08(水) 20:56:10.83
あぁ、nkfはファイル指定だった・・・ $bはファイル名じゃなくてもろに 変換したい文字列だからいけないんだなw 自己解決。
わからないことあったらtokuhiromにきいてね
tokuhiromにdiffの件でYappo氏のモジュールいってたときは吹いた ぜんぜん使い方がちがうのに yappoのString::Diffモジュールだしてて は?wっておもいました だまってました 明らか文字列じゃなくて 行のくらべなのにString::Diffだしてこけてました ですが笑いがこらえられませんでした わざといったのか まじで勘違いしてミスってたのかおもしろかったです
tokuhiromをなめんなよ
//test.pl use strict; use warnings; require 'test_mod.pl'; MYTEST->import; print MYTEST->abcd; //test_mod.pl use strict; use warnings; package MYTEST; sub abcd{ $aaa = '123'; return $aaa; } abcd() の $aaa は my とか our とかで宣言してないからエラーが出るものと思ってましたが、 普通に 123 と表示されてしまいます。 これって何故なんでしょう? あと return $aaa; を print $aaa; # 呼び出しは MYTEST->abcd; のみ とすると、コンソールに何も表示されません。 何故なんだぜ?
すんません。 編集中にファイルを変更してて、編集すべきファイルが異なってました ^-^; ついでなのですが、作った package にオブジェクトと関数を混在して書くのは、 別に行儀の悪い事ではないですよね? package TEST; use base Exporter; our @EXPORT = qw/func1 func2/; sub func1{〜} # ただの関数 sub func2{〜} # おなじく関数 sub new{〜} # おぶじぇくとさくせー sub proc{〜} # おぶじぇくとに対する処理 こんな感じを考えてます。
perlスクリプト内でそれを実行しているperl.exeのパスを取得できますか? Xp SP3, perl 5.10です。
探し物はなんですか? みつけにくいものですか? かばんの中も机の中も探したけれど見つからないのにまだまだ探す気ですか?
>>194 カスラックから許諾とらないとダメですよ。
RTオタクって呼んでください
そういう性格だから
ちょっと沸点が低いよ
if ( 文字列 =~ /^始まりパターン*終わりパターン$/ ) で、引っ掛らないけどアスタリスクってダメなのか
.*
>>203 具体的にその引っかからない元文字列と正規表現パターンを示してみい
206 :
デフォルトの名無しさん :2011/06/12(日) 04:39:05.47
print AAA::BBB:: ってやったら、AAA::BBB って 表示されたんですが、これはバグですか仕様ですか?
あ、printじゃ表示できなかったです。 warn AAA::BBB::; ってやったら、 AAA:BBBってでるんですが(ry
208 :
デフォルトの名無しさん :2011/06/12(日) 09:49:50.87
>>207 > warn AAA::BBB::; ってやったら、
> AAA:BBBってでるんですが(ry
嘘をつくな。
AAA::BBB
と表示されるぞ。
そもそも warn AAA::BBB::; で何がしたいんだ?
210 :
デフォルトの名無しさん :2011/06/12(日) 12:41:37.61
>>209 > AAA::BBB
> と表示されるぞ。
え? だからそれ、嘘じゃなくて自分が
書いている通りの結果ですよね?
warn AAA::BBB:: と書いたら、
AAA::BBB:: ではなく、AAA::BBB ってなる
理由を聞いているのですが。
211 :
デフォルトの名無しさん :2011/06/12(日) 18:17:32.87
$abcという値が5だとします。 それを$abc2という変数で05と表示させたいです。 %02dを使えばできそうですがどのように書けばよいかわかりません。
>>210 perl -MO=Deparse -e 'warn AAA::BBB::;'
warn 'AAA::BBB';
-e syntax OK
文字列'AAA::BBB'と認識されてるから。
なぜそうコンパイラが認識するかは知らん。
>>211 my $abc = 5;
my $abc2 = '%02d';
printf($abc2, $abc);
213 :
デフォルトの名無しさん :2011/06/12(日) 19:15:25.31
>>212 説明不足ですみません
printf('%02d', $abc); を $abc2で表すにはどうすればよいでしょうか。
(printfを使わずに)
あいう$abc2えお と書けば、 あいう05えお
になるようにしたいのですが。
>>213 my $abc2 = sprintf('%02d', $abc);
216 :
デフォルトの名無しさん :2011/06/12(日) 19:40:53.62
pythonのctypesみたいなものはありますか? XSとかInline::Cを使わないでCの関数を呼んだり perlの関数をコールバックとしてCの関数に渡したりしたいです
217 :
デフォルトの名無しさん :2011/06/12(日) 19:43:00.93
218 :
デフォルトの名無しさん :2011/06/12(日) 19:52:03.85
220 :
デフォルトの名無しさん :2011/06/12(日) 20:18:17.63
221 :
デフォルトの名無しさん :2011/06/12(日) 20:57:57.23
掲示板で タグは無効かつ改行は有効にするにはどうしたらいいでしょう。 これだとタグは無効になりますが改行も無効になってします。 $in{'bbs'} =~ s/</</g; $in{'bbs'} =~ s/>/>/g; $in{'bbs'} =~ s/\r\n/<br>/g;
222 :
デフォルトの名無しさん :2011/06/12(日) 21:23:10.01
>>221 あっすいません ここも掲示板なんで&lt;が< &gt;が>に化けちゃってますね
正しくは下記のとおりです
(&は小文字です)
$in{'bbs'} =~ s/</&lt;/g;
$in{'bbs'} =~ s/>/&gt;/g;
$in{'bbs'} =~ s/\r\n/<br>/g;
>>222 たぶんこうだべ。
$in{'bbs'} =~ s/</&lt;/gs;
$in{'bbs'} =~ s/>/&gt;/gs;
$in{'bbs'} =~ s/\r\n/<br>/gs;
改行の変換のところは \r\n 固定でいいのかね?
ぷぷぷ
/s には . が \n がマッチするようになる以外の効果ないと思うけど
s/が/で/
そうか s オプションは関係なかったか。適当なことを書いてすまんかった。 「改行も無効になって」しまう、の意味がいまひとつわからんかったのだが 単に処理対象テキストの改行コードが "\r\n" ではなく "\r" または "\n" だから、 ってだけの気もするよ。 しかしそもそもCGIの質問はスレ違いだったか。
229 :
デフォルトの名無しさん :2011/06/13(月) 01:27:08.04
>>223-227 全部だめでした;
そこらの掲示板はタグは無効かつ改行は有効が普通ですけど、
結構難しいプログラムなんですかね?
手前が何をしたいのかを理解するのが難しいね
$in{'bbs'} 内に本当に改行コードは存在するのか? 入力テキストの改行部分は既に<br>なりに置換済なんじゃないのか? 仮に改行部分が<br>に置換済だとすると $in{'bbs'} =~ s/</&lt;/g; $in{'bbs'} =~ s/>/&gt;/g; の時点でテキスト内の <br> は &lt;br&gt; に置き換わってしまい、 $in{'bbs'} =~ s/\r\n/<br>/g; は何の意味もない。 もしくは、本当に $in{'bbs'} 内に改行(コード)が存在するなら、 $in{'bbs'} =~ s/\r\n/<br>/g; を $in{'bbs'} =~ s/\r\n/\n/g; $in{'bbs'} =~ s/[\r\n]/<br>/g; に置き換えれば動くかもしれない。
232 :
デフォルトの名無しさん :2011/06/13(月) 01:48:25.87
>>228 >>「改行も無効になって」しまう、の意味がいまひとつわからんかったのだが
222の書き方だと改行した部分が<br>になってしまうという意味です
>>しかしそもそもCGIの質問はスレ違いだったか。
これってPerlの正規表現じゃないんですかね;
<br>になってるんなら目論見どおりじゃん。
<br>になってしまうと言いたかったんだとしたら、
>>222 で示されてない部分で何か間違ってるんだろとしか。
my $s = "<span>foo</span>\nbar";
$s =~ s/</</g;
$s =~ s/>/>/g;
$s =~ s,\r?\n,<br />,g;
print $s, "\n";
# 結果
<span>foo</span><br />bar
いまさらPerlかよ
235 :
デフォルトの名無しさん :2011/06/13(月) 03:32:10.20
>>232 デフォルトだとこうなっていました。この状態だと改行されますが、HTMLを入力された場合もタグとして表示されてしまいます。#1、#2を消すと確かにHTMLは文字として表示され無効になりますが、改行も文字として表示されてしまいます。
#タグ禁止処理
#1 $in{'m_com'} =~ s/</&lt;/g;
#2 $in{'m_com'} =~ s/>/&gt;/g;
# コメントの改行処理
$in{'m_com'} =~ s/\r\n/<br>/g;
$in{'m_com'} =~ s/\r/<br>/g;
$in{'m_com'} =~ s/\n/<br>/g;
デフォルトの場合
--------------------------------------------------
あいうえお
<b>かきくけこ</b>
↓投稿後の表示
あいうえお
かきくけこ(太字)
--------------------------------------------------
#1、#2を消した場合
--------------------------------------------------
あいうえお
<b>かきくけこ</b>
↓投稿後の表示
あいうえお<br><b>かきくけこ</b>
--------------------------------------------------
>>235 あのさー。
タグ禁止処理をしてないのに、改行させたい箇所が
ちゃんと“表示上”改行されているんだったら、
そのテキストには改行箇所に"\r\n"とかではなく
"<br>"の形でタグが入ってるってことでしょうが。
そのテキストで「タグ禁止処理」をしたら、
当然"<br>"は"&lt;br&gt;"に変換されてしまって、
改行させたい箇所にそれが"<br>"の形で表示されるでしょ。
何の不思議もないじゃん。
そのテキストで改行の"<br>"のみ有効のままにして
他のタグは全部無効にしたいなら、例えば
$in{'bbs'} =~ s/<br>/[[[BR]]]/g;
$in{'bbs'} =~ s/</&lt;/g;
$in{'bbs'} =~ s/>/&gt;/g;
$in{'bbs'} =~ s/[[[BR]]]/<br>/g;
みたいな処理をせにゃ。まあ上の例は適当だけど。
WWW::MechanizeあたりでGmailにログインして新着と件名をチェックするのを組みたいんですけど 同じようなことをやっている人いますかね? いたらサンプル見せてもらえるとありがたいんですが・・
>>237 無いのかと思ってgoogle先生に聞いてみたら
腐るほどでてきじゃなないか・・・
プログラム全体のサンプルとかスレチ。
ググってもいまいち分からなかった ちなみに英語は完全スルー
ナラアキラメロ
とりあえずいたらお願いします 最悪ログイン部分だけでもいいので
奈良彰メロ
243 :
デフォルトの名無しさん :2011/06/13(月) 20:14:25.32
ファイルのロックをするときよくロック用のディレクトリを作って そのディレクトリがあるかどうかでロックの判断をしている場合が多いけど ディレクトリの変わりにロック用のファイルにして処理すると問題あるんですか? (ロック用のファイルが存在していればロックして書き込めないというように)
>>238 ではサンプルでなくてログインの仕方を教えてください
お願いします。分からないのなら知っている方がいたらお願いします
>>244 ググり方から勉強した方がいいんじゃない?
思いっきりそのままのコードが出てきたよw
そんな言い方したら多分もう誰も教えてくれない。
お前ら意地悪だな
ちゃんと教えてあげなよ!
・・・
>>237 ググったら2個目のリンクに出てくるじゃねぇか
ちゃんと探せよクズw
あ。スレ違いなのでやっぱりいいです どうせあれだし
パッケージの話になると知っている人は少ない。
>>243 排他処理はアトミックに行わないとダメ。
> (ロック用のファイルが存在していればロックして書き込めないというように)
「存在する」と「ロックする」の間で、割り込まれる可能性がある。
251 :
デフォルトの名無しさん :2011/06/13(月) 21:45:44.12
まずテキトーにprintして変数の中身がどうなってるか確認しろよさせろよ
>>247 >>237 にキーワードが沢山あるじゃん
ここまで物を探せないって幼稚園児じゃあるまいし・・・
253 :
デフォルトの名無しさん :2011/06/13(月) 23:36:30.59
初めてPerlをインストールして、 とりあえず対話式で学んでいこうかなと思ったんだけど、 デフォルトではそういう機能ないみたいですね? Rubyで言うところのirbみたいな機能のことですけど。
perl -de 1 ↑これでrubyのirbみたいな感じになるんだね。今調べてみてわかった。
257 :
デフォルトの名無しさん :2011/06/15(水) 16:21:15.71
連想配列の{}の中の文字列は使ってはいけない文字とかあるんですか? ドットとかもいいんでしょうか?
好きなだけ好きな文字を使えばいい
4TB長ぐらいの文字列とか
使えばいんじゃない
やれるもんだったらやってみろ
Out of memory!
out of 眼中
まぁ、使える文字と使える文字数は 別モンの質問だな。
>>237 Perlスレ住民はゴミだからRubyにこい
ログインするところまではかいてやった
>gem install mechanize
require 'rubygems'
require 'mechanize'
require 'kconv'
agent = Mechanize.new
uri = URI.parse("
http://www.google.co.jp/ ")
agent.get(uri)
agent.page.link_with(:text => "Gmail".toutf8).click
#puts agent.page.uri
agent.page.form_with(:name => nil){|f|
f.field_with(:name => "Email").value = " ID "
f.field_with(:name => "Passwd").value = " password"
}.click_button
puts agent.page.uri
require 'rubygems'
require 'mechanize'
require 'kconv'
agent = Mechanize.new
uri = URI.parse("
http://www.google.co.jp/ ")
agent.get(uri)
agent.page.link_with(:text => "Gmail".toutf8).click
agent.page.form_with(:name => nil){|f|
f.field_with(:name => "Email").value = " ID "
f.field_with(:name => "Passwd").value = " password "
}.click_button
puts agent.page.uri
s = Kconv.tosjis(agent.page.body)
a = "</font></font> <b>"
b = "</b>"
puts "si nn tya ku"
s.scan(/#{a}(.*?)#{b}/) do | n |
puts n
end
余裕すぎワロタ
2ちゃんにソース貼るとき、インデントをちゃんと表示するにjはどうすればいいの?
&nbsp;だよ死ねゴミ
270 :
デフォルトの名無しさん :2011/06/16(木) 18:15:00.21
ファイルのロックは書き込みのときだけでいいんでしょうか? ファイルの読み込みのときはロックしなくても問題ないですか?
271 :
デフォルトの名無しさん :2011/06/16(木) 18:20:39.28
それと連動する2つのファイルに書き込む場合 ファイル1のロック ファイル1への書き込み ファイル1のロック解除 ファイル2のロック ファイル2への書き込み ファイル2のロック解除 でも問題ないんでしょうか? ファイル1がロック中でファイル2がロックじゃないとき ファイル1には書き込まれなくてファイル2には書き込まれるということになると 連動する場合ファイル1と2でデータがずれる気もしますが
うん
open してからロックってのが気にくわないんだよね
>>257 $;
ハッシュのキーでこの中にある文字は使ってはいけません。
いや、使ってもいいんだけど、変な事が起きても知りません的なことになりかねません。
>>237 まだ見てるか分からないけど、IMAP 使ったほうが楽じゃない?
2つのファイルをロックするなら 分けてロックするより ロック ファイル1の書き込み ファイル2の書き込み ロック解除 の方がいい
訂正:2つのファイルに書きむなら
テンポラリファイル1に書き込み テンポラリファイル2に書き込み ロック 元のファイルを別名にリネームして、テンポラリファイル1をリネーム 元のファイルを別名にリネームして、テンポラリファイル2をリネーム アンロック の方が、オリジナルファイルに対するファイル操作時間が少なくてオススメ。 もしテンポラリファイルの書き込み途中でスクリプトが kill されてても、 所詮はテンポラリファイルなのでオリジナルのファイルには影響無い。 テンポラリファイルは1時間とかそれ以上の時間があるものなら削除するようにすれば OK。
>>280 その場合、ほぼ同時に二つのプロセスが進入すると、
先に進入したプロセスの結果が消えることがある。
?
テンポラリもロック後ですね 間違えた。
perlで作られたredmineやtrucみたいなものないのでしょうか
Bugzilla
sed の -iオプションみたいな機能ってありますか?
>>287 あるかないか だけ答えろよ。うっとおしいやつだな。
てst
>>288 その言葉から読み取れる脳の思考の意図を読め。
言葉遊びたりともうっとおしいという日本語は存在しない。
× うっとおしい ○ うっとうしい (鬱陶しい)
うっおとしいぞ!
何をするだ
>>290 > 言葉遊びたりともうっとおしいという日本語は存在しない。
そんな「たりとも」の使い方は少なくとも日本語には存在しない。
こんな日本語不自由な奴に他人の日本語の間違いを指摘する資格はない。
YAMLで書いたコンフィグファイル内に環境変数を埋め込んでload側で環境変数を解決したいです。なんかうまい方法ないですか?
一度テンプレートエンジンを通してから読み込むようにすれば?
>> 297 なるほど、それやってみます。ありがとでした。
間違えました。。 >> 298 ありがとでした。
連想配列 %hash を key=value みたいに出力したいんだけど どういう書き方が一番短く出来るの? while( ($key,$value) = each %hash ){ print "$key=$value\n"; } みたいな感じのやつ
map {print "$hash{$_}=$_\n"}%hash;
map {print "$_=$hash{$_}\n"} keys %hash;
print "$_=$hash{$_}\n" for (keys %hash);
連想配列って書いてた奴、以前にもいたなあ。古い言い方。 今はハッシュって言うよね。
すげえなんだこれ perl使いはすげえ
>>305 別に古い言い方ではないよ、同様の要素の総称としてなら現役で使われる用語
ただPerl用語としてはハッシュと呼ぶのが公式だな
ほんらい連想配列という機能があって、それを実装する方法の一つがハッシュだから、 連想配列という名前の方が正しい。
二分木で実装してる言語もあるらしいからね(C++?)
forとforeachとeachってどれがいいの?
eachだけ仲間外れ
forとforeachは変わらないって初めてのPerlに書いてあるのに foreachのほうが処理が速いって言ってるサイトがあるけど、いったいどっちが本当なんだ
And it's faster because Perl executes a foreach statement more rapidly than it would the equivalent for loop.
>>312 コード上で 'for' と書かれているか 'foreach' と書かれているかに関係なく、
条件部が3文から成っていれば「for」ループと解釈され、
リストが置かれていれば「foreach」ループと解釈されるので「変わらない」。
リストの全要素に対して反復処理を行う場合は、「for」ループで
同様の処理を書くよりも専用の「foreach」ループの方が「速い」。
#!/usr/bin/perl -w
use strict;
use Benchmark 'timethese';
my @Array = (0..9,'A'..'Z','a'..'z') x 100;
timethese(-5, {
f1 => sub { for (my $i = 0; defined $Array[$i]; ++$i) {} },
f2 => sub { foreach (my $i = 0; defined $Array[$i]; ++$i) {} },
e1 => sub { foreach my $chr (@Array) { defined $chr } },
e2 => sub { for my $chr (@Array) { defined $chr } },
e3 => sub { my $i = 0; foreach my $chr (@Array) { defined $chr; ++$i } },
e4 => sub { my $i = 0; for my $chr (@Array) { defined $chr; ++$i } },
});
__END__
>>313 foreach( $i=0; $i<@array; $++ ) という形式のことを
慣例上 for と言ってるだけ?
まだお前らこんなカスなことやってんだね いい加減進歩ないね あほみたいですね ばっかじゃねーの バーーーカ
文法なんてできてあたりまえだろはげwwwwwwww wwwwwwwwwwwwwwwwwww wwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwww文法なんてできてあたりまえだろはげwwwwwwww wwwwwwwwwwwwwwwwwww wwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwww文法なんてできてあたりまえだろはげwwwwwwww wwwwwwwwwwwwwwwwwww wwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwww文法なんてできてあたりまえだろはげwwwwwwww wwwwwwwwwwwwwwwwwww wwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwww文法なんてできてあたりまえだろはげwwwwwwww wwwwwwwwwwwwwwwwwww wwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwww文法なんてできてあたりまえだろはげwwwwwwww wwwwwwwwwwwwwwwwwww wwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwww
おえええええええええええええええ! こいつら新車wwwwwwwwwwwww Perl新車だよwwwwwwww「 あと30年たってもPerlPerlわめいてそうですねwwwwwwwwwwwww
にんにん
>>314 なるほど、どっちも正解だったのか
何も考えずforeachで統一することにするよ
ありがとう
>>320 どちらかと言えばforに統一のが良いような…
foreachって書くと、あまり三文形式のforに見えないイメージ
一方のforはforeachの意味で使う言語が結構あるからね
自分はforeachしか使わないな。 こだわりがあったわけじゃないけど、そもそも三文形式のforを使う機会がなかった。
foreachとしてforを使ってた人は 俺のほかに何人いますか
クックブックは、三文形式でない場合はforeachを使うと英語の文になってわかりやすからとforeachを推奨してるね
foreachのほうがわかりやすいんだけどwwwwwwwwwばかだねおまえら
俺は書き分けてるなあ 3文のほうはfor、変数とリストのほうはforeach
326とおんなじルールだけど、ワンライナーとかで後置するときはfor使うね
3文形式とか使わねーし
ワンライナーとかなれてねーくせして無理につかってんじゃねーよw Perl通気取りwwwwwwwwwwwwwwwwwwwwwwwww
ワンライナーでかけるとかわめかれてもほとんど津川ねーからメリットのうちにはいらねーよばーかwwwwwwwwwwwwwwwww
扱う数が浮動小数点数の範囲を越えてしまって 範囲演算子を使えない場合には 3文形式は便利
$iが踊るときには便利かな
元ネタは踊る人形ですね。 わかります。
$iは踊る、されど進まず
はじめましてよろしくお願い致します。 perlのWin32::Registryモジュールについて質問です。 windowsにてレジストリの値を取得するため、使用させていただいてるのですが、たとえば use strict; use Win32::Registry; my $reg = $HKEY_LOCAL_MACHINE; my $key = "SOFTWARE\\value\\value01"; my $value_name = "value_name"; my $value; my $type; my $sub_reg; $reg->Open($key, $sub_reg); $sub_reg->QueryValueEx($value_name, $type, $value); $reg->Close(); これで$valueに値がセットされて取得することができるとおもうのですが、 これを、また別の値を取得しようとして、もういちど繰り返すとエラーがでてしまいます。 どうやら、 $HKEY_LOCAL_MACHINEでつまずいてるようなのですが、解決法がわかりません。 $HKEY_LOCAL_MACHINE自体をprintすると、”Win32::Registry=HASH(0x18e843c)”という文字列で、 HASH以下は、取得するたびに変わるようでした。 サブルーチン化するにしても、結局$HKEY_LOCAL_MACHINEでつまずくので、どうしようもありません・・・ いいお知恵がありましたらご教示いただけると幸いです。
obsolete, use Win32::TieRegistry
>>336 ありがとうございます!下記のようにして、どうにか取得できました!
use strict;
use Win32::TieRegistry(Delimiter => "/");
my $dir01 = $Registry -> {"LMachine/SOFTWARE/value/value01"};
my $value01 = $dir01 -> GetValue("value_name");
my $dir02 = $Registry -> {"LMachine/SOFTWARE/value/value02"};
my $value02 = $dir02 ->GetValue("value_name");
print "$value01\n";
print "$value02";
気がついたらいつのまにか 5.14.1 が出てた。
<> で1行読み込みですが、1行は何文字OKですか?
340 :
デフォルトの名無しさん :2011/06/23(木) 09:40:27.50
変数の大きさは上限いくつですか?
>>341 <>で読み出せる1行の最大の大きさは何文字?
343 :
デフォルトの名無しさん :2011/06/23(木) 10:42:21.59
その1 perl -pe '$i++;print$i' だと各行の先頭に行番号を打てるけど その2 perl -pe '$i++}{print$i' だと全体の行数しか出力しない 行数を数えつつ各行も出力もしてほしかったんだけど なぜその2では各行が表示されなくなってしまったんだ?
CAPN Search にある安定版リリースは 27 Feb 2010 の 0.06 なのに cpan > install Crypt::SaltedHash で入るバージョンが 0.05 なのはなぜなんだろう?
>>343 }{ とかちゃんと意味わかって使ってる?
perl -pe 'CODE HERE' は
while (define($_ = <>) { CODE HERE } continue { print $_ }
に展開される(エラー処理とかも入ってるけど省略)から、
その2は
while (...) { $i++}{print$i } continue { print $_ }
となって、continue ブロックは while ブロックにではなくその外の {print$i } に紐付けられるから、最後に1回実行されるだけになる。
-p で各行を出力しつつループの外でも何かしたかったら BEGIN / END を使うのが無難。
$ perl -pe 's//$. /;END{print"$. lines\n"}'
あえて }{ を使って上と同じ結果を得たいなら
$ perl -ne 'print"$. $_"}{print"$. lines\n"'
$ perl -pe 'print"$. $_"}{$_="$. lines\n"'
>>345 ありがとう! 完全に理解した。
while(<>){ $i++ } と { print $i }continue{ print $_; }
に解釈されるってことか!
perl -pe '$\++}{' なんて書き方に縮まるのか・・・ 恐ろしい・・・
348 :
339 :2011/06/23(木) 14:37:28.71
だれもわかりませんか?
>>348 しるか!環境依存じゃ。
perlでは制限してない。
350 :
339 :2011/06/23(木) 16:18:28.98
>>349 環境依存であることのソースを教えてください
本当に制限していないんですか?
環境依存であるとして、オーバーしたら何がおきますか?
エラーが発生しますか? アウトオブメモリーになりますか?
>>350 疑問を持った君が検証して率先垂範してくれたまえ
>>350 自分の環境でプログラム止まるまで文字足せよw
エディタがエラーになるまでひたすら一行かけよ。
それがなによりのソースだ。
そもそも何その質問の仕方。
釣りかよ。
やれやれ。 質問箱といいながらちょっと難しい質問になるとまったく答えられる人がいないんですね。 かなりがっかりしました。
はあ、そうですか
ウンコみたいな簡単な質問でも 自分がわからないと難しく感じるものですよね。 うんうん、わかりますよ、その気持ち。 捨て台詞とか小学生っぽいことしたくなるの そんな次期に良くある衝動ですよ。 心配しなくても多分治ります、大丈夫ですよ。 どうぞperlと人生を楽しんで下さい。
はい
どうだろうね
アドレス空間の枯渇のほうが先に来るかもしれない
>>339 は1文字が1バイトとは限らないという引っ掛けかと思ってた
すみません。文字コードの文字列をもとに戻すにはどうしたらいいのでしょうか? ソースは utf8 で、cp932の文字コードが入っています。 my @mojilist = unpack('H*', encode('cp932','もじもじ')) print @mojilist; print pack('H*',@mojilist) 2行目で "82e082b682e082b6" となってるのですが、 3行目(実際は22行目です)の結果が "\x{0082}" does not map to cp932 at moji.pl line 22. :(省略) "\x{00a0}" does not map to cp932 at moji.pl line 22. \x{0082}a\x{0082}¶\x{0082}a\x{0082}¶\x{00a0} のようになります。
文字コードの変換をするライブラリで 一番現実的な意味で完璧なものってなんでしょうか? 日本語以外も含まれます。
361 :
デフォルトの名無しさん :2011/06/23(木) 22:54:21.68
下のように$aaaというディレクトリの中にあるファイルとディレクトリを分けて表示するのがうまくいきません windows環境です opendir(D,$aaa); @files = readdir(D); foreach $file(@files){ if(-d $file){ print "ディレクトリ=$file<BR>"; } if(-f $file){ print "ファイル=$file<BR>"; } } closedir(D); windowsでも分けて表示できる方法ってありますか? できればモジュールは使わないでできる方がいいです。
362 :
339 :2011/06/23(木) 22:57:21.34
>>357 ありがとう
32bitOSなら4G-1までですね
>>359 utf8 -> cp932 -> hexdata -> cp932 -> utf8
この最後のutf8に変換が抜けてるのでは。
変換・逆変換が対称になってないしな
mkpath でディレクトリ作ると、読み取り専用の属性がつくっぽいのだが、 エクスプローラのフォルダのプロパティからも、attrib コマンドでも ReadOnly の属性が外れない。。。
>>364 >>365 ヒントありがとうございました。
UTF8フラグ付きに戻す作業が必要でしたm(_ _)m
------
use strict;
use utf8;
use Encode;
binmode STDERR, ":encoding(cp932)";
binmode STDIN, ":encoding(cp932)";
binmode STDOUT, ":encoding(cp932)";
my $sjiscode = unpack('H*', encode('cp932','もじ'));
print $sjiscode,"\n"; # "82e082b6"
my $text = pack('H*',$sjiscode);
print decode('shiftjis', $text);
Perlでfirefoxで表示されているHP情報を取得して Perl内で編集処理してまたfireofxにて編集した内容を再表示させることって可能ですかね? 可能だったらやり方かもしくはそのようなことを詳しく書いてあるようなサイトを教えてもらえるとありがたいです
不可能
スクレイピングってこと?
JavaScriptでするDOM操作みたいなのをPerlでやりたいってことじゃないのかな?
いえ、だから不可能です。 空気嫁よな。
オミトロンをPerlでやりたいみたいなものか
>>368 可能。
webサーバを用意して、firefoxにperlから
URLとしてブックマークレットを投げて
そこでajaxで中身をサーバに送りつけれ。
376 :
デフォルトの名無しさん :2011/06/25(土) 22:18:56.68
kentという時点で間違ってる。 あれを参考にしていいのは 中学生まで。
Jcodeワロタwwww まだ使ってるのか。 標準モジュール使えよ。
一体いつまで過去の遺物を引きずってるんだよ……
380 :
デフォルトの名無しさん :2011/06/26(日) 01:30:59.36
>>377-379 解決法がわからないのに糞レスしてるお前らにワロタwwwww
無論俺も知らないがw
perlは10年くらい触ってないんだけどJcodeってjcode.plのこと?
日本語にしか対応してないアレか
>>376 Jcode関係外して、アルファベットだけでも送れます?
webいじってりゃメール送信くらい誰でもつけるだろ。 POP before SMTPはせんで良いの?
>>384 しない。対応してる送信ソフトなんて存在しないし。
>>388 おまえこそ意味不明なこと言ってるんじゃねえよ。
落ち着こう。
>>376 うちのMTAではそのコードで送信でけましたよ。
送れない原因についてはPBSもそうだろうしSMTP-AUTH必須なのかもしれないし、
OP25B対策されててそのアプリからMTAをつつけてない可能性もありますし、
もしくはあなたが構築したかもしれないMTAが機能してないって可能性もあるし、
原因は山ほど想定されるのでよくわからんという事だと思われます。
394 :
392 :2011/06/26(日) 23:03:22.10
>>376 続きです。
コンストラクタを以下のようにして
$smtp = Net::SMTP->new($mailhost, Debug => 1);
送信してみるのが最初じゃないでしょうか。
SMTPの応答とmtaのログ見て、原因を切り分けたらまたここに質問すればいいですし。
もしかしたらperlの質問ではなくなるかもしれないですしね。
あとみんなが言ってるようにJcodeじゃなくEncodeつかったほうがいいですし、
Net::SMTPじゃなくEmail::Senderとか使ったほうがいいですし、
そもそもuse strict;とuse warnings;付けないのは、やめたほうがいいですよ。
いや、だからまずPBS用のコードを足してみろって。第一の可能性だ。
Perlの質問なんですが Perl忍者が最近来てません どうしたんですか?
397 :
デフォルトの名無しさん :2011/06/27(月) 01:03:38.72
dbi:ODBCでDSNなしでコネクションを作りたいのですが、 DBI->connect("dbi:ODBC:Driver=PostgreSQL ANSI", "postgres", "postgres"); とやっても動きません。 DBI connect('Driver=PostgreSQL ANSI','postgres',...) failed: [unixODBC][Driver Manager]Data source name not found, and no default driver specified (SQL-IM002)(DBD: db_login/SQLConnect err=-1) at ./test.pl line 7 同じセッションからDSNを指定してやると動きます。(PGSQLがDSN) DBI->connect("dbi:ODBC:PGSQL", "postgres", "postgres"); odbcinst.iniにはPostgreSQL ANSIで登録されているのですが、あとなにか設定が必要なのでしょうか?
うむ
Win7 x64/5.12.4使っています。 glob が 3TB HDDでフリーズする… orz 同じスクリプトで 2TB HDD では動くんだけどなぁ。 @filelist = <*.*> もフリーズするし、んがー… 寝ろ… オヤシミ あ、フリーズと言っても CTRL+C でコマンドラインに戻れます。
CTRL+Cで戻れるなら、それはフリーズとは言わない。
402 :
デフォルトの名無しさん :2011/06/28(火) 11:49:02.23
さくら鯖ってEmail::Sender使えねーだろ
403 :
デフォルトの名無しさん :2011/06/28(火) 11:50:07.96
このスレでは(CGI 以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。 スレ違いの質問にはスルーか、速やかな誘導をお願いします。 このスレでは(CGI 以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。 スレ違いの質問にはスルーか、速やかな誘導をお願いします。 このスレでは(CGI 以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。 スレ違いの質問にはスルーか、速やかな誘導をお願いします。 このスレでは(CGI 以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。 スレ違いの質問にはスルーか、速やかな誘導をお願いします。 このスレでは(CGI 以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。 スレ違いの質問にはスルーか、速やかな誘導をお願いします。
はい
まあ、本来CGIの話ではないが、少なくとも
>>376 がその区別がついてないのは
コードから明らかだからな。
わからないことがわからない状態で、他人に質問すべきではない。
だがこうやって質問したおかげで 色んなことが分かる。 勝利したのはどっちかな?w
>勝利したのはどっち んな愚劣なことを言っている限り、一生ダメなまんま終わるよ。 ググって行き当たりばったりでコピペしてたまたま動いたらOK、動かなかったら匿名掲示板で質問、 答えらしきもものをもらえば、なにやらわかった気になる。以下繰り返し。 なんたら忍者もそうだが、耳年増にはなれても、自分のオツムの足しにはまったくなっていない。 糞の役にも立たんゴミでオツムがいっぱいの人間ができあがる。
などと2ちゃんねるで説教垂れて 無駄な時間を過ごすのであったw
コピペだけして分かった気になっちゃうのは中学生で卒業しとけよ
おれが荒らすまでも無く、すでに荒れてるってどういうことなの? このスレはつまらん
412 :
デフォルトの名無しさん :2011/06/29(水) 10:19:35.05
知らないふりして下手に出たらこの調子w マジウケたわwどいつもこいつも、上から目線… 調べりゃ分かる事を書いてんのに、ググれの一言も無い始末。一々釣られて、勝手に厨房呼ばわりですか? 文章力はおろか、勝手に決めつけて考える力も無い様ですねwwwww
if ( /^>(.*)/ ) で指定して >以降の文字を取得してるのですが、この>以降に/が入っているとその行を認識してくれません 対処法が分かる方いましたらお願いします
自己解決
自己解決してなかった。 見やすいように全角で書きます (.*)の部分を/が入ってても無視しなくて、スペースがあってもスペースの手前までじゃなくて">"以降のその行全体を取得するにはどうしたらいいでしょうか
>>414 if(/^(>[^\s]*)/)
でいいんじゃね?あと/が入ってても無視なんてされないよ。
>>416 $_を使わずにちゃんと変数を使う。
>この>以降に/が入っていると・・・
んなこたぁない。問題はその他で起こっている。
レスありがとうございます
>>417 それでいくと
>AAA BBB CCC
>aaa b/b ccc
のAAAとaaaの部分だけしか得られませんでした。後ろのBとCのエリアもまとめて取得したいんです
>>418 元ファイルの/を別の単語に置き換えると問題なく動くんです(´・ω・)
>>419 ふ〜ん、下記してもか?
#!/usr/bin/perl -w
$_='> awsd/ zxc';
print $1 if( /^>(.*)/ );
print "\n";
exit;
>>419 勘違いしてた。 [^\s] を . に変えてやって。
>>414 できたよー。
foreach('>AAA BBB CCC', '>aaa b/b ccc', 'aaa b'){
if ( /^>(.*)/ ) {
print $1, "\n";
}
}
>>422 だからなんだよw
とっくに解決してる。
424 :
422 :2011/06/29(水) 14:24:28.10
そう、最初から問題ない。
>>414 が何をどう勘違いしていたのか微妙に興味をそそられるな。
だからなんで最初から荒れてんの 荒らさせろよ
お客さんが全然来てくれないときがあるからそういうときに来ればいいよ。
430 :
428 :2011/06/30(木) 07:31:27.82
>>429 ありがとうございます。
その説明で納得できそうです。
欧米の知識人には常識とか
単に著者がラクダに馴染みの深い地域出身なのかも知れませんね。
すっかりPerlのラクダ本の方に引きずられてしまっていました•••。
それも意図した洒落た表現なのでしょう。
camel toe
camel clutch
もしかして弾さんはアニオタなの?
若者に話を合わせるために見ているだけだと思う。決して観てはいない。
ヒゲサスペンダーさんの趣味はPerlとは関係ないよね。
あの人の趣味はperlかと思ってた。
「perlについての質問」じゃないだろ、って話でしょ。
小飼アニオタ しね
''=~('(?{'.('[[).[|`%,,/`[/[@$'^'+)@@/^(@@@@@,@),@').'!"})') 上記を実行すると Hello world! と表示されるのですが、 動作原理を教えてください。
''=~ ( '(?{' . ( '[[).[|`%,,/`[/[@$' ^ '+)@@/^(@@@@@,@),@' ) . '!"})' ); '' =~ は空文字列に対する正規表現マッチ (?{ ... }) はマッチしたときに ... をevalする拡張正規表現 '[[).[|`%,,/`[/[@$' ^ '+)@@/^(@@@@@,@),@' は2つの文字列の排他的論理和で、演算すると「print"Hello world」 全部合わせると '' =~ /(?{print"Hello world!"})/ とやってるのと同じこと
443 :
デフォルトの名無しさん :2011/07/01(金) 23:33:44.10
改行はwindowsでは\r\n,UNIXでは\nらしいですが FORMのenctypeがmultipart/form-dataで送信した場合 送信したデータをFORMデータ部分と画像データ部分などに splitなどで分割していく場合もwinは\r\n区切り、UNIXは\n区切りなんでしょうか?
WEB プログラミング板に行ってください。
s/\r|\n|\r\n/\n/g;
chompしてs/\r//gすればいいんじゃない?そういう問題じゃないの?
s/\R//g; 、な。
s/\r\n/\n/gだとアップロードしたファイルの中身の\n\nも\nになっちゃうんじゃないの?
WebProgネタだから向こうで待ってたんだけどお客さん来ないな。 分解前のmultipartをまるごと書き換えにかかる回答はネタだと思いたい。
きっと本気だよ。 そして\rや\nが途中に含まれている バイナリデータを壊すんだw ばかだよなwww
>ばかだよなwww ゴミがなにいってんだか
452 :
デフォルトの名無しさん :2011/07/04(月) 12:14:43.63
分解前のmultipartはform入力部分のデータとアップロードファイルの中身の区切りはOSに関係なく\r\nなのでしょうか?
はいそうです OSには関係ありません
>>452 そう。じゃないと異なるOS間でやりとりできなくなっちゃうだろ。
詳しくはRFC2046あたり読め。
初歩的な質問かもしれませんが、配列の後ろからn番目の要素までを取り出すにはどうしたらいいんでしょうか?
spliceで調べろ もしくはpush pop shift unshift を調べろ
>>452 \r\n でなく \x0D\x0A で、入力をバイナリとして正しく扱っていれば YES
アスキーで入力されたものは環境に合わせて改行コードは変更される :rawで読み込めばいいんだけど:rawで開いたファイルに対して$line=<INPUT>で1行をちゃんと取れるかは不明 大丈夫だとは思うけどね。。。
>>454 でもさ、Perl+メールで有名な
MIME::Toolsってメールをパースすると
\n に統一されるんだよな。
RFC違反。
>>460 送信するときには\r\nになるから安心しろ
>>461 ならねーよw
つーかMIME::Toolsには
送信機能はありません。
MIME::Tools に送信機能が無いなら、送信時に改行コードの変更が行われない。 というお前のコメントも矛盾だぜ?うんこ野郎w o(^-^)o
>>463 あまり弱いモノいじめするな。かわいそうだろ
だからMIME::Toolsの話をしている。 MIME::Toolsは\nに変換する。 ここんところは間違ってないだろ。
>>466 意味がわかららん。
あるライブラリにバグがあって、
それをライブラリ外で修正したからって
ライブラリにバグがあることに変わりはないだろ。
MIME::Tools にメール送信機能が無いってことを知ってるキミは、 メール送信時は別のモジュールを使うって事を知りえてるわけだ。 なのに 「送信するときには\r\nになるから安心しろ」 を否定してる時点でおかしいというワケ これでキミが矛盾を察しない時点で小学生から国語を勉強しなおせ。
なんか会社にもいるよね、こういうの 「おれは間違ってない!」って言い張ってて 矛盾を指摘しても認めない人。
そういう依怙地な人は真っ先に首切り対象になるな つーか自分で言ってることの意味に気付いてないモン、 頭がおかしい
引っ込みがつかないんだよ
>>463 の時点でひどすぎる
ひっこみがつかないからウンコなんだよ
だれうま
speedycgiを使用してみたいと考えています。 これはメモリに常駐させるようなのですが、終了(メモリから消去)させる場合は どうすればよいのでしょうか? 時間がたてば勝手に終了するのでしょうか? あと、cgiを更新した場合、speedycgiが自動で判別して、常駐を再起動するのでしょうか?
>>475 ならねーよw
つーかspeedycgiには
常駐機能はありません。
perldoc CGI::SpeedyCGI
そんなんだからゴミなんだろ はいゴミ死ね
my $temp = {}; こうやって宣言したとき、 $temp->{'abc'} = ''; $temp->{'bcd'} = ''; | $temp->{'ijk'} = ''; のような初期化を1行で済ませたいのですが、やり方を教えてください。 my $temp = {}; $temp = map { {$_ => ''} } qw/abc bcd cde def efg fgh ghi hij ijk/; とやったら Can't use string ("9") as a HASH ref while "strict refs" in use at test.pl line xxx. とでました。 $temp->{qw/abc bcd cde def efg fgh ghi hij ijk/} = ''x9; これだとエラーは出ませんが、初期化できませんでした。
>>480 my $chr = 'a';
my %temp;
for(my $i=0;$i<=8;$i++){
my $chr2 = $chr;
$chr++;
my $str = ($chr2++).($chr2++).($chr2);
$temp{$str} = '';
}
Perl使いは既に知ってそうだけどこんなの見っけたので
http://oreilly.com/catalog/9780596004927/ Programming Perl: Unmatched power for text processing and scripting
By Tom Christiansen, Larry Wall, Jon Orwant
Publisher: O'Reilly Media
Released: October 2011 (est.)
Pages: 1000 (est.)
>>480 %$temp = map { $_ => '' } qw/abc bcd cde def efg fgh ghi hij ijk/;
か
@$temp{qw/abc bcd cde def efg fgh ghi hij ijk/} = ('') x 9;
だな。
484 :
481 :2011/07/05(火) 19:43:06.24
一行かw
上のmapの方がperlくさいな。 9とか入ってないし。
>>483 あ〜なるほど
代入される側に % が必要なわけか
>>485 自分も上の方がしっくりくるって思った
ありがとうございました m(_ _)m
>>483 好みの問題ではあるけど、前者は $temp をデリファレンスするより代入値を無名ハッシュリファレンス化するほうが一般的では。my 宣言も同時にできるし。
my $temp = { map { $_ => '' } qw/abc bcd cde def efg fgh ghi hij ijk/ };
後者なら要素数はベタ書きじゃなくてキーを配列に入れといてそれ使うのがいいね。
my $temp;
my @keys = qw/abc bcd cde def efg fgh ghi hij ijk/;
@{$temp}{@keys} = ('') x @keys;
488 :
483 :2011/07/05(火) 20:21:10.53
ああ、確かに
>>487 の前者が一番しっくり来るな。何やってるか見てすぐわかるし。
ディレクトリの容量を取得するにはどうすればいいんでしょうか? $dir_size = -s $dir;で$dirにディレクトリを指定してもディレクトリの容量が取得できません ファイルの容量なら取得できました。(windows環境です) ディレクトリの中のファイル一覧やサブディレクトリ一覧を取得して それぞれの容量を出して合計するしか方法はないんでしょうか?
後者の方法でどうぞ」
それしかないね。ディレクトリの容量なんてファイルシステムに情報として持ってないもの。 Windowsでもファイルたくさん入ったディレクトリのプロパティとか開くとその場で計算するから容量の数字がだんだん増えてくでしょ。 とはいえ、そういう面倒な部分を引き受けてくれるモジュールはあると思うよ。 Filesys::DiskUsage とか中身は見てないけどそれっぽい。
perl -MFile::Find -le 'find sub { -f and $s += -s }; print $s'
misu perl -MFile::Find -le 'find sub { -f and $s += -s }, qw(.); print $s'
すいません。MIME::Toolsでメールをパースしたら \nに変換されてしまいます。バグですか? MIME::Toolsにはバグと書いてあるようですが・・・
仕様
バグだろ。英語ぐらい読め。
perldoc -T MIME::Tools | perl -le 'print if /bug/'
さすがにそこはgrepちゃん使ってあげたら
TODO FIXME って書いてあるな。
TODO FIXME All encoders currently output the end‐of‐line sequence as a "\n", with the assumption that the local mail agent will perform the conversion from newline to CRLF when sending the mail. However, there probably should be an option to output CRLF as per RFC 2045 内容は、 「今は、全てのエンコーダで"\n" 出力にしてますよーー。 だって、(あんたの使う)local mail agent がCRLFに変換持ってるっしょ? しかしまあ、たぶんCRLF出力オプションを付けるべきなんだろーね。」
RFC 2045 が抜けてる
いや、こんな適当な訳に突っ込み入れられても(汗 真面目に訳そうかとも思ったけど、そのレベルの文章か?コレ
>>493 それだとリンクを考慮してないからだぶって数えちゃうよ。
% ls -li
total 208
3665130 -rw-r--r-- 2 nobody nogroup 100000 Jul 6 07:50 x
3665131 lrwxrwxrwx 1 nobody nogroup 1 Jul 6 07:50 y -> x
3665130 -rw-r--r-- 2 nobody nogroup 100000 Jul 6 07:50 z
% perl -MFile::Find -le 'find sub { -f and $s += -s }, qw(.); print $s'
300000
% du
108 .
結局バグではないことが証明されてしまった
perl素人なのですが、質問よろしいでしょうか。 perl上でURLにアクセスし、送られてくるcookieを保存して そのcookieからある一つのcookieのみを返す。 というような動作は再現可能なのでしょうか。
>>506 返信ありがとうございます。
何か参考にできるサイトがあったら教えてください。
もしよろしければ、簡単に説明してもらえませんか?
>>508 ふむ。そうなのですか。
区別ができないほど素人なもので・・・スレ汚しすみませんでした。
たぶんクライアントサイドだと思うよ。 cookie_jar から /HAP=FOXdayo[0-9a-f]+/ という文字列を集められたら いいのかなという気がした。なんとなく。
@aiueo = (); $i = 0; $ii = 1; while($i < 2){ while($ii < 3){ push(@aiueo, "$ii$i"); $ii++; } $i++; } print @aiueo; これを実行しても@aiueoに1020しか入りません、 本当は1020のあとに1121が入るはずだと思うのですが、うまくいきません 簡単な質問ですみません。どなたか教えてください。
すみません自己解決しました…無視してください
..使えよ for my $i (0 .. 1) { for my $ii (1 .. 2) { push @aiueo, $ii.$i; } } print @aiueo
だって $ii が 3 になってるから。。。 my @aiueo = (); for(my $i = 0; $i < 2; $i++){ for(my $j = 1; $j < 3; $j++){ push(@aiueo, "$j$i"); } } print @aiueo, "\n"; どうしても while を使いたいなら $i++; のあとに $ii = 1; と。
$N=$ARGV[0]; $i=2; while($N>=$i){ if($N % $i ==0){say"$N $i"; $N/=$i} else{$i++} } これより早い素因数分解のプログラムってありますか?
else{$i++} ↓これに訂正します else{$i!=2 ? $i+=2 : $i++} ある奇数で割り切れるのかどうか実際に割り算をする以外に調べる方法はないでしょうか?
use bigint; $N=$ARGV[0]; $i=2; while ($N >= $i**2) { unless ($N % $i){ $N/=$i; print"$i " } else { $i!=2 ? $i+=2 : $i++ } } print $N; これで最後の無駄な割り算をカットできました これ以上はもう無理です誰か助けてください
while ($N >= $i**2) { でイチイチ二乗しているような気がする
my $tgt = 60 ; while( (1 x $tgt)=~/^(11+?)\1+$/ or ( print $tgt . "\n" and 0 ) ){ $tgt /= my $l = length $1 ; print $l . "\n" ; }
print `factor $ARGV[0]`;
WindowsXP ActivePerl 5.12.4です。 Cwd::getcwd(); でカレントディレクトリを得た場合、帰ってくる文字コードはcp932ではないのでしょうか? たとえば、カレントディレクトリがC:\成績表やC:\ソナタ の場合 use Cwd; print getcwd(); すると C:/成績・ やC:/・ナタ となってしまい、うまく得られません。どうしたらちゃんと得られるんでしょうか?
>>519 アルゴリズムの意味がよく分かりません
なぜ^(11+?)\1+$これで素因数を求められるんでしょう・・・
>>520 factor速すぎます。ソース見てよく勉強しないといけないみたいですね
正規表現の意味、分かりました 素因数の数が3個の場合 ^((11+?)\1+)\2+$ 素因数の数が4個の場合 ^(((11+?)\1+)\2+)\3+$ こういう書き方は出来ないんでしょうかね
ひさーしぶり(7年ぶりくらい)にperlに帰ってきたんだが、 いまperl書くとき使うIDEとしては、 Padre と Eclipse + EPIC のどっちがお勧めかな? それともこれ以外の何か?
>>526 やっぱ、秀丸?
7年前も秀丸だったんだが、
最近は Java 書くときに Eclipse さんにおんぶに抱っこだったので、
perlも進化したかなーとおもってさ
情報thx
秀丸も単語補完機能とかプロジェクト管理機能とかついたからな 7年前に比べたらすごい違う なんか、ガンプラの進化を見ているみたいに違う
>>523 perl10以降(?)だと、出来なくもない。
my $tgt = 60 ;
while( ( 1 x $tgt ) =~ /^(?<i>(?<h>11+?)\k<h>+?)\k<i>+?$/ ){
print +( length $+{h} ) . "\n" ;
print +( (length $+{i} ) / ( length $+{h} ) ) . "\n" ;
last ;
}
くわしくは perldoc perlre して。
5.10な
おそろしいな 言われるまでそのままperl5.10だと思い込んでた。 いやあ人間の脳ってすばらしい 存在しない情報を勝手に補完して読みやすくしてくれる 脳みそさまさまだ
ぎゃーー、5.10のつもりで書き込んでた、
>>530 指摘thx.
正規表現を外部のファイルから読み込ませることはできないでしょうか? 例えば次のスクリプトに対して、「/^hoge/」をスクリプトの中に直接書くのではなく あらかじめ正規表現を記載したテキストファイルを別途用意しておいてそこから 読み込ませるようにはできないでしょうか? どうぞよろしくお願いします。 ☆こんなスクリプトがあるとして my $str = 'hogehoge'; if ($str =~ /^hoge/) { print "Match\n"; } else ( print "No match\n"; } ☆正規表現を書いたリストファイルを用意してそちらから読ませたい # cat pattern.txt ^hoge
>>533 できるか否かで答えれば、できる。
それ以上は何が分からないのか分からないから
>>2 の最初のサイトを一通り読めとしか言いようがない。
open H,"pattern.txt"; $regexp=<H>; close H; chomp $regexp; これでいいんでしょ?
なぜスカラなのか
ルカニルカニ
マゾピックつかえ
if(open(my $fh, '<', 'test.txt')){ 〜 } って書いた時、ブロックから出たら $fh は勝手に閉じられるんでしょうか?
はい
でもふつうは open my $fh, '<', 'test.txt' or die $!; とか書くからそもそもそういうifの使い方はしないな
常道とはまた違うひとつの道として、興味深い書き方ではあるね
開こうとしたファイルが開けなかったとき、 そのエラーがスクリプトから見たらクリティカルじゃない場合、 die で止めちゃうのはどうなんだろう? って考えがあるのですが、、、
向こうの板の範疇だと die しないほうが一般的だろうし どうトラップするかどう止めるかみたいなのは状況次第だと思う。
dieしないほうが一般的!?
デフォルトの503よりもエラーメッセージを出した方が親切だと思うが dieしてもエラーログが見れなければだし
dieは終了じゃないよ。 親関数でトラップできる。 try 〜 catchと同じで、親関数にエラーを返すだけ。 親でトラップしていなければ、その親。 その親でもトラップしていなければ、その親。 どの親でもトラップしていないときは異常終了する。 だれもトラップしてないときに終了するだけであって、 本質的には親関数にエラーを返すもの。
一見まともそうに大嘘書くなよ。 die は eval 中で挙動が変化するだけだぞ。 $SIG{__DIE__} でシグナルを掴まえて死ぬ前に特定挙動を させる事が出来るが、基本的には eval 以外でトラップ する事は出来んだろ。 eval { die "TRY:$!" }; if ( $@ ){ print "CATCH:$@" ;} そもそも親関数って何だ?
549 :
533 :2011/07/10(日) 09:32:04.17
お返事遅れました
>>534 さん、
>>535 さん、回答ありがとうございます。
参考になりました。変数の中に前もって正規表現のパターンを入れておけばいいのか。
534さん、書き方が曖昧だったようですね。文章ヘタですみません。今後気をつけます。
>>548 だからevalでトラップするんだよ。
perl例外処理の基本だろ。
evalってそんなほいほいつかっていいものなの?
使っていけない理由がない。
ブロックならほいほい使って良い
俺のことむかつく人いますか?
文字列(特に外部要素によって改変される可能性のある文字列)は危ないけどな ちゃんと用法容量を守ってお使いくださいってことだ
558 :
デフォルトの名無しさん :2011/07/10(日) 18:22:02.20
ディレクトリの中のファイル一覧配列とディレクトリ一覧配列を戻り値としてreturnで返したいんですが returnでは1つの配列しか返せないんでしょうか? 2つの配列を戻り値として返す場合はどうすればいいんでしょうか?
配列へのリファレンス
配列のリファレンスの配列じゃいかんの?
英語読めない癖に「英語読め」って宣言したり、 perldoc誤読して自慢気に書き込んで指摘されたり、、、 忍者が名無しで書き込んでんのか?
>>557 なぜエラートラップするだけのevalに
文字列を入れないといけないのか?
>>563 いや、だから、文字列じゃないから大丈夫だろ、って言いたかったんだが…
565 :
デフォルトの名無しさん :2011/07/11(月) 08:52:11.51
複数の戻り値だけど下のようにやってもなにも表示されませんでしたがどこに問題がありますか? (@www1,@www2)=&func; print "@www1,www2"; sub func{ local(@aaa)=("aaa1","aaa2","aaa3"); local(@bbb)=("bbb1","bbb2","bbbs"); return(@aaa,@bbb); }
忍者さん、名無しで質問やめてください
local される前の @aaa と @bbb はどこに居るんだい? local は関数内でglobalを一時対比するだけのもの。
>>565 558と同じ質問じゃねーか。リファレンス使えって答は出てるだろ。
何も出力されないというのはおかしいけどな。改行問題?
>>565 ActivePerl 5.8.9だけど表示された
表示されたとか書くやつら、use strict と use warnings はちゃんと書いとけよ。
use strict; use warnings; our @aaa; our @bbb; my (@www1, @www2)=&func; print "@www1,www2"; sub func{ local @aaa = ("aaa1","aaa2","aaa3"); local @bbb = ("bbb1","bbb2","bbbs"); return(@aaa,@bbb); }
574 :
デフォルトの名無しさん :2011/07/11(月) 14:16:56.57
糞コテ哀れ(プ
575 :
デフォルトの名無しさん :2011/07/11(月) 18:13:04.16
@www1に全部配列の要素が入って @www2は空でした
www
ハッシュのスライスって配列の入れ替えと同じですか 教えてください
ハッシュドポテトと スライスチーズですか? 美味しそうですね。
わろおおおおwwwwwwwwwwwwwwwwwwwwwwwwwwwww
現代的なPerlでは、サブルーチンの呼び出しに&はつけず()にするというのはわりと普及してる事項なんでしょうか?
YES
ありがとうございます。これから気をつけます。
5.14 のバグっぽいの見つけたんだけど日本語で報告できるところってある?
例の弾さんにけしかけてみる
こがいたまさん。
まあ普通に言ってもとりあわなさそうだから 「これってトリビアになりませんかね?」 みたいにネタっぽく言ったほうがいいだろうな
>>584 TOEIC600程度の英語でよければ俺が翻訳するから、ここに書いてみて
レスありがとう。 一応、内容を書いておきます。 下記を実行すると 「Variable "$_" is not available」の警告が出るのはおかしくないか、ということです。 perldiag を見ても、この挙動が正しいのかバグなのか良くわからないのですが、どうでしょうか? 5.12 では発生しませんでした。 実行環境は Win Vista x64 ActivePerl 5.14.1.1401 x64 です。 use 5.14.0; use warnings; sub main { # main() の中でないと発生しない。 given(1){ # given の中でないと発生しない。 default { func(sub{ my $s='hoge';$s =~ m/./; say $s }); # m// がないと発生しない。その他、s/// や say; でも発生する。 # my $_; するとでなくなる。 # func(sub{ my $_; my $s='hoge';$s =~ m/./; say $s }); } } } sub func { shift->(); } main(); >588 英語か…。やはりそうなるのかな。 報告済みのバグというのは rt.cpan.org を調べればよいのでしょうか? >589 ありがとう。報告するかどうかわからないのですが、それでもよければお願いします。
とりあえず日本語で報告しておけば、メンテナの人で 日本語が分かる人が読んでくれるから大丈夫。 英語うんぬんを気にする必要は全くない。
言わなければ伝わらない
>>590 とりあえず訳しました。
間違いがあればよろしくです。>皆さん
I wonder if it is not valid to give the warning of 'Variable "$_" is not available' when running the following code.
I can't figure out whether it's a proper warning or just a bug even after reading the perldiag.
Let me know the reason if it is proper.
It doesn't take place on Perl 5.12.
My platform is Win Vista x64 ActivePerl 5.14.1.1401 x64.
use 5.14.0;
use warnings;
sub main { # take place just in main()
given(1){ # take place just in "given"
default {
func(sub{ my $s='hoge';$s =~ m/./; say $s });
# doesn't take place without "m//". Also does with "s///" and "say"
# my $_; doesn't with this declaration
# func(sub{ my $_; my $s='hoge';$s =~ m/./; say $s });
}
}
}
sub func {
shift->();
}
main();
その位で通じると思うよ。再現用コードとおかしいと思う現象がきっちり 書いてあるんだからそれで十分。
配列の配列を初期化するにはどうしたらよいでしょうか
>>596 @AoA = (); がしたいのか @{$_} = () for @AoA; がしたいのか
正規表現のオプションを変数にしたいときはどうしたらいいの? $a = 'ig' ; s/unko/chinko/$a ; ってやると2行目がエラーになんだけど
eval "s/unko/chinko/$a";
my $mod = 'ig'; my $global = $mod =~ tr/g//d; my $pattern = qr/(?$mod)buffalo/; my $replacement = 'ba-ro-'; $_ = 'Buffalo buffalo Buffalo buffalo'; if ($global) { s/$pattern/$replacement/g; } else { s/$pattern/$replacement/; } print;
$_ ってなんて呼ぶの?
602 :
598 :2011/07/13(水) 18:18:17.14
>>599 ありがとう!動きましたですよ!すばらしいねeval
610に期待
>>601 多分、デフォルト変数(default variable)
607 :
601 :2011/07/14(木) 01:03:51.36
ありがとう!デフォルト変数かぁ なるほどデフォルトだな
Perl:DBIを使ったMySQLについて質問です。 SELECTにて一致した条件を表示するのに while(@row = $sth->fetchrow_array) { } を使っているのですが、これだと全件表示されてしまいます。 例えば5件目〜10件目のみ表示するにはどのようにすれば良いのでしょうか
______ / \ /\ 5件目〜10件目 のみ見る / し (>) (<)\ | ∪ (__人__) J | ________ \ u `⌒´ / | | | ノ \ | | | ____ / \ ─\ チラッ / し (>) (●)\ | ∪ (__人__) J | ________ \ u `⌒´ / | | | ノ \ | | | ____ /::::::─三三─\ 全件見えた /:::::::: ( ○)三(○)\ |::::::::::::::::::::(__人__):::: | ________ \::::::::: |r┬-| / | | | ノ:::::::::::: `ー'´ \ | | |
>>608 SQLクエリの時点で弾く(LIMIT)か、
素直に全部読んでから、手作業で必要な部分だけ切り取る
特定のHTMLタグに囲まれた中身を正規表現で取りたいのですが、できませんでした。 $str =~ m{ <body> ( [^ (?: </body>) ]* ) }xi; これの問題のあるところは、[ ]に1文字ではなく複数文字を指定している点なのでしょうか? また正しい正規表現はどのようになりますでしょうか、教えてください。
(!:
1回しかでてこないなら、普通に<body>(.*)</body>でいいですね。 複数でてくるタグなら再帰的に生成すると。でもその場合はモジュール使おうと思います。 文字列の否定は否定先読みすればよかったんですね。 (!:はperldocみたけど判らなかったです。。。。
616 :
615 :2011/07/20(水) 16:16:31.15
>>615 なんとかperlで自動化できないものでしょうか
617 :
デフォルトの名無しさん :2011/07/20(水) 23:01:31.56
このように配列と変数を渡す場合、 受け取り側ではpopを使って切り取って配列と変数に分けるしかないんでしょうか? &func(@lines,$aaa); sub func{ local($aaa2); local(@lines2); $aaa2 = $pop(@_); @lines2 = @_; }
だからリファレンスを使えよと
620 :
デフォルトの名無しさん :2011/07/20(水) 23:34:05.05
>>619 それのどこに答えが書いてあるのか分からない
それと字が小さすぎて読みにくい
local 使うな & 付きサブルーチン使うな。 10年前からタイムスリップして来たのか? sub func(\@$){ my @lines = @{$_[0]} ; my $aaa = $_[1] ; } func @lines, $aaa ; 何れにせよリファレンス使おうが使うまいが、 func に渡された「リスト」の何らかの解析作業は必須。 => それだったら普通にpopしてれば? リファレンスも覚える気も無いんでしょ?
フォントサイズぐらい大きく出来るだろw
623 :
デフォルトの名無しさん :2011/07/21(木) 00:16:16.32
>>621 古い参考書しか持ってないから
解析作業は省略して書かなかっただけ
知りたいのは配列と変数を受け取るときにpopして配列と変数に分けるしか方法がないのかってこと
>>623 my も載ってなくて、&付しかないような参考書しか持ってないなら
悪いことは言わないので最近の書籍を買いなおした方が良い。
自力で検索して学ぼうにも下地となる知識が古すぎて不都合が多いと思う。
>>617 use strict;
use warnings;
my @array = qw/LOVE LIKE NG GOOD NEW OLD/;
my $scalar = "電子レンジ";
testfunc(\@array, $scalar);
exit(0);
sub testfunc{
my $array = shift;
my $scalar = shift;
print $array->[1];
print $scalar;
}
#配列のコピーを作りたいなら
# my $array = shift;
# my @array = @{$array};
つーか スカラー1コと配列1コ渡すだけでいいんなら スカラー、配列、の順に渡せば済む話だろ その順に渡せない事情でもあるのか? あと参考書古すぎるなら新しいの買えは同意だ
push()と同じインターフェースに揃えたいんじゃねーの
>>626 おいらもスカラー先に渡せばいいじゃんって思った
>>629 さあ…ね、詳しくは本人にしかわからない
push()を自作データ用にちょっと改変したような動作が欲しいのかも
まあ、リスト自体を渡す方法もどっかにズバリの内容が載ってた気がするんだが
>>623 >解析作業は省略して書かなかっただけ
意味が通じてなかったみたいだな。
local($aaa2);
local(@lines2);
$aaa2 = $pop(@_);
@lines2 = @_;
これのことを「解析作業」と書いたんだ。
俺のコードだと
my @lines = @{$_[0]} ;
my $aaa = $_[1] ;
>>630 > push()を自作データ用にちょっと改変したような動作が欲しいのかも
エスパー乙
単に短い記述にしたいだけなら、これでもいいかな? sub func{ my ($aaa2, @lines2) = (pop, @_); }
>>634 pop の引数を省略すると @_ が対象になるので、@_ を pop して $aaa2 に代入、@_ の残りが @lines2 に代入される。
636 :
デフォルトの名無しさん :2011/07/21(木) 13:08:19.30
>>626 スカラー、配列の順に渡しても
@_は(スカラー、配列)となってしまうので
$_[0]はスカラー、$_[1]は配列の先頭要素のみになっちゃうだろ?
>>636 sub func{ ($scalar, @array) = @_ }
func( $s, @a )
ってことが言いたいんだろ
エスパーだらけで読むのめんどくさいw
>>633 なんだそりゃ。フツーこうだろ。
sub func {
my ($scalar, @array) = @_;
}
たとえば 配列にスカラを追加したい こうゆう関数を作った場合は配列を先に渡したいよね 使い易さを考えないボンクラ大杉だろ
日付関連の関数を作ったときにoreFuncと書く奴らばかり。 これまでのレスを見る限り、そんな感じだ。
>>643 Perl忍者はそんな、まじめに質問しないだろ
"popを使って切り取って配列と変数に分けるしかないんでしょうか? " sub func{ my ( $aaa2, @lines2 ) = ((splice @_, -1 ), @_ ); } sub func{ my ( $aaa2, @lines2 ) = @_[-1,0..$#_-1] ; } 既に書いてあるプロトタイプ利用する方法。 etc... ∴ 答 = "いいえ。他の手段で仕分ける方法もありますが?"
>>643 > リファレンスを理解したくない
>>626 >>637 リファレンスを理解したくないんじゃなくて、
リファレンス使うまでもなくこう書けば済むんじゃない、って話をしてるんだ。
理解力の足りん奴だ。
TMTOWTDIの精神で
649 :
デフォルトの名無しさん :2011/07/23(土) 13:12:56.00
$str="aaa...bbb...ccc"; $s = "\.\.\."; @www = split($s,$str); print"www0=$www[0],$www1=$www[1],www2=$www[2]"; としても配列は何も表示されないけど $s='\.\.\.';とするとなぜか配列が表示されます これはどうしてですか?
//
652 :
デフォルトの名無しさん :2011/07/23(土) 18:11:58.38
テキスト処理はperl 数値計算やグラフ作成はpython こんな使い分けしてるんですが 全部perlでやってる方もいますか? 統一したほうが良い事もあるのでしょうか
ssig33一生お勉強(笑)
617って見れば見るほどPerl忍者だな
>>654 なにそれ?
ググったけどよくわからなかった
>>653 好きなように使い分ければええんでないかい
658 :
デフォルトの名無しさん :2011/07/25(月) 17:33:18.05
外部サイトのソースをログに保存する方法ってあります?
(・∀・)カエレ!
バイナリファイル A,B を ANDして Cに保存したいんだけど かっこうよく実装するにはどうしたらいいかな
>>660 こんな感じでどう?
|ツ ヾ\{ (⌒\;;;;;;;;,, ,,,,;;;;;;;;;;:' //ミっ}
i 仆、\\_,ゝ、 \__ ____ //!シ /
{ 、{ `r‐-、/´,.\ \ー====f'" ,..r―r-、`゙ソノ レ'i }
、 Y ゝ、 \ \ \ ̄ {_ `==≠' /⌒)| ノ バイナリファイル A,B を
\| ( \ \ \ \ ゙=====≠ / |/
、 \ \ 丶、 \ \ / { / ANDして Cに保存
人 \ \ ` ̄`゙ `ー-┘ |/
( {::ハ /\ \ } 実装完了
ハ!:::\! .:: \ }ヽ,
}::::\:::::\ \ /::;ノ
〈:::::::::ノ/ ̄\ |::ィ
package TEST; sub make{ my $self = 'MAKEMOD'; bless {}, $self; } sub func{ my $self = shift; 〜 } ------------------------------------- use TEST; my $test = TEST->make; $test->func(); このように new ではなく別名のコンストラクタでオブジェクト作って、 そのオブジェクトからメソッドを呼ぼうとしたら、そんな関数ねぇよって エラーになりました。 コンストラクタは new でないと駄目なんでしょうか?
すんません。質問後にテストしたら、そっこーで解決しましたw package TEST 内なのに、コンストラクタで使う名前が MAKEMOD とか、 存在しないパッケージ名を指定してたのが原因でした。
どこのサイトで見たのか知らんが、 package 名の決め打ちは引数付きの時にトラぶるから お勧めしない。 #!/usr/bin/env perl package TEST; sub make { my $self = 'TEST' ; bless { dat => shift }, $self } sub echo {printf "%s\n", shift->{dat} ;} 1; package TEST2; sub new { bless { dat => pop }, shift } sub echo {printf "%s\n", shift->{dat} ;} 1; package main; TEST-> make('hoge')->echo; # => 'TEST' TEST2->new ('hoge')->echo; # => 'hoge' 1;
実行結果をcのソースファイル形式で出力したいんだけど どうやったらいいの?
>>666 その質問はあまりに単純か、あるいはもっと深い意味があるのか分からんな
>>665 パッケージ名->メソッド
で呼ばれた場合、第1引数にはオブジェクト名が渡るから、それを考慮しろ。
ってことで OK?
桶
670 :
デフォルトの名無しさん :2011/07/27(水) 00:18:44.21
command1が以下のような出力を返すのですが、 $ command1 Mask Slot7 Valid Mask Slot3 Valid Mask Slot11 Valid $ この出力をperlで処理して、slotの後ろの番号を取り出したいです。 ワンライナーでいろいろ書いてみたのですがうまくいきません。どうやって書けばいいですか? やりたいのはこんな感じです。 $ command1 | perl XXXX 7 3 11 $ どうかよろしくお願いします。 環境はLinuxです。
perl -lne ' print $1 if /Slot(\d+)/' じゃだめか?
672 :
デフォルトの名無しさん :2011/07/27(水) 01:06:09.72
動きました ありがとうございました。
command1が以下のような出力を返すのですが、 $ command1 Mask Slot7 Valid Mask Slot3 Valid Mask Slot11 Valid $ この出力をperlで処理して、slotの後ろの番号を取り出したがってる人が いろいろワンライナーを書いてみたらしいですが、うまくいかなかったそうです。 でも、うまくいかないワンライナーなんて思いつきません。 どんな、ワンライナーを書くとうまくいかないのでしょうか?
674 :
660 :2011/07/27(水) 12:42:57.67
それはPerlの質問じゃなくて哲学の議題か何かか?
最近の小学校では バイナリファイル A,B を ANDしてCに保存するPerlスクリプトをかっこうよく書け、 なんて夏休みの宿題に出すんだな。
Perlじゃ無理
perlじゃバイナリファイルを扱えないからな。
Berlの出番だな
crowbarのようなもの?
これでいける? open my $fa, "<", "A" or die $!; sysread $fa, my $aa, -s $fa; close $fa; open my $fb, "<", "B" or die $!; sysread $fb, my $bb, -s $fb; close $fb; open my $fc, ">", "C" or die $!; binmode $fc; for my $i ( 0 .. length($aa) - 1 ) { print {$fc} pack "C", ord(substr $aa, $i, 1) & ord(substr $bb, $i, 1); } close $fc;
use File::Slurp; my $d1 = read_file('./file1', binmode => ':raw'); my $d2 = read_file('./file2', binmode => ':raw'); write_file('./out', {binmode => ':raw'}, $d1 & $d2);
読み込むファイルが巨大だったら。。。を思うと while(read($fh, $buf, 64)){} みたいにぶん回したほうがいいんじゃないのかな?って思うわけです。はい。
かな
686 :
デフォルトの名無しさん :2011/07/28(木) 02:00:48.77
漢字
変換
>>683 読むファイルが2つあるときはどう書くのがかっこいいんだろうか。
うわあ!!!
今日からPerl戻るからみんな皆さん楽しみにしてください 戻ります うわああ!!!!!!!
691 :
660 :2011/07/28(木) 15:11:40.64
意外と難問だったのか。 perlは奥が深いな
バイナリファイルが読めてAND演算子もあるのに何故難問なのでしょうか? 2つのファイルを同時に読むところ?
真面目に書くと長くなる以外、問題無いと思うが。一度書いて見れば? my @fh; foreach('./file1', './file2'){ open(my $fh, '<:raw', $_) or die $!; push(@fh, $fh); } open(my $wfh, '>:raw', './out') or die $!; LOOP: while(1){ my $data; foreach(@fh){ my $length = read($_, my $buf, 8192); defined $length or die $!; $length or last LOOP; $data = (defined $data ? $data & $buf : $buf); } print $wfh $data; } close($wfh); foreach(@fh){ close($_); }
file1とfile2の長さが違うときは出力がどうなる仕様なのかな? 短い方に合わせるか、長い方に合わせる(後ろは0で補う)の どっちかにするのが自然だとは思うのだけど。
長短はスイッチでやりたいよね それにANDだけとは言わず他の演算もしてみたいよね 2つのファイルと言わず3つ4つのファイルもやってみたくなるのが普通だよね ついでに汎用性がありそうだからcとかで高速な実装をしてみたくなるよね
696 :
660 :2011/07/29(金) 10:50:40.85
>>695 ここはperlスレなので、他の言語はナシで
■□□□■ □■■■□ □■□■□ ■□□□■ □■□■□ ■□□□□ □□■□□ □■■■□ □■□■□ □□□□■ □■□■□ ■□□□■ ■□□□■ □■■■□
>>695 >2つのファイルと言わず3つ4つのファイルもやってみたくなるのが普通だよね
目的がさっぱり見当つかない・・・
んなことして何に使うんだ?
どうみてもネタなのに…
しかもつまんねーネタだ
702 :
デフォルトの名無しさん :2011/07/31(日) 22:26:08.86
文字列の行数を調べるにはどうしたらいいんですか? 例えば$str="AAA\nBBB\nCCC";の場合 $gyousuu = split(/\n/,$str);で(AAA,BBB,CCC)に分解されて3行と出ますが $str="AAA\n\n\n\n\n";の場合splitしてもAAAにしか分解されないので 6行のはずなのに1行になってしまいます
split の第3引数に -1
705 :
デフォルトの名無しさん :2011/08/01(月) 12:30:36.47
データをtextareaに表示するときの質問です $textarea = "AAA<BR>";の場合 $textarea = ~ s/<BR>/\n/g;で テキストエリアではAAA改行となりますが $textarea = "<BR>";の場合 $textarea =~s/<BR>/\n/g;で テキストエリアの中は改行になっていません(カーソルが1つ下に下がりません) そこで$textarea =~/<BR>/\r\n/g;にするとテキストエリアの中では改行になっていますが これだとwindowsの場合だけですよね? OSに関係なく上手く表示できるようにするにはどうすればいいんですか? print "<TEXTAREA ROWS=100 COLS=100>$textarea</TEXTAREA>";
とりあえず HTML 要素の勉強から始めような。
708 :
デフォルトの名無しさん :2011/08/01(月) 18:15:09.37
>>706 >>705 で書いたHTMLのどこがおかしいの?
TEXTAREAにNAMEが設定されてないところか?
これは送信するわけじゃないからNAMEは省略した
>>705 開始タグ直後の改行が無視されるのはHTML(SGML)の仕様。
web制作板の方が詳しい人が居るんじゃないのん。
>>708 要素の機能に関する問題の以前に書き方を覚えろ。
あほかw
a
HTML もまともに書けないヤツが perl とかいじるなやw
おれもよく知らねえや。 つーか、Perlと全然関係ないじゃん。
ってか、もうこれ役目を終えた言語だろ
>>716 そう思うなら「Perlについての質問箱」スレなんかわざわざ覗きに来んな。
718 :
デフォルトの名無しさん :2011/08/03(水) 09:07:42.10
<TEXTAREA ROWS=100 COLS=100>$textarea</TEXTAREA> このHTMLのどこがおかしいのか解らない
>>714 PerlはCGIのための言語じゃないけどな…
しかしCGI以外の用途がない
そりゃ、お前が底辺WebPGだから。
>>720 むしろいまどきはワンライナー御用達で
CGIに使う方が古いというかアホ扱いだろ
最近のPerlは本当に重いよな 久しぶりにawksed使うとあまりの速さにビビる
cron見てみたら半分くらい*plだった…
掲示板もSNSもperl使ってるところが多い まだまだperlは現役だろ
まだまだもなにも消えるわけない。 すくなくても先に俺が消える。 あとの世は知ったこっちゃない。
>>725 現役だけど、新規案件で使うものじゃない
いや、使ってもいいんだけどメインにすべきじゃない
案件で使うわけねーだろ ばかだなこいつ ほとんどPHPとかだけど
アリス・リデル vs mala 黒川かえる vs はまちや VVS vs ssig33 決戦が始まろうとしている
黒川かえる 危険度 ★★★★★★★★★★★★★★★★★ 日本のクラッカー。別名かえる☆ちゃん。最近2世が誕生しパパになったらしい。 過去においてはNEWS23のコメンテーターとしてテレビ出演、また「コンピュータ悪のマニュアル」の編集を務めている。 近年ではYahooBBの顧客リスト流出事件に関与、首謀者として同じくクラッカーのBEAMZと共に頭角を現す。 YahooBB事件においての被害総額は100億円規模と目され、団体に対して与えたクラッキング事件の被害の大きさでは世界一。その割りに名前が知られていない。
>>718 そのHTMLを書いたファイルをlintにかけてみれば分かる。
my $i= 0; my @b = split(//, $a); foreach my $w (@b) { $ar[0][$i++] = $w; } これを、もうちょっと簡単にというか (@ar[0]) = split(//, $a); みたいな書き方(これはエラーでます)できないでしょうか?
@ar = [ split //, $a ] ; 特殊変数$aを普通の変数としては(略
>>733 感謝
でも静的には$ar[1]にも代入できるけど動的には無理なのか
そういや比較かなんかで使ってるんでしたっけ、$aと$b
>でも静的には$ar[1]にも代入できるけど動的には無理なのか 意味不明 my @dat = map { [ split //, $_ ] } qw ( 123 456 789 ); my @ar ; for my $i ( 0 .. $#dat ){ $ar[0][$i++] = $dat[$i] ; } 的な意味? それとも @{$ar[0]} = map { [ split //, $_ ] } qw ( 123 456 789 ); 的な意味?
っても両者に違いなんざ無いんだが。
737 :
デフォルトの名無しさん :2011/08/03(水) 20:20:37.13
>>731 COLSとROWSをダブルクオーテーションで囲んでないってことだろ
べつに囲まなくてもちゃんと表示される
>>737 HTMLのバージョンにもよるが、
属性値が数値のみの場合は必ずしもダブルクォーテーションで囲わなくてもいい。
確かXHTMLでは不可で、HTML 4は可だったかな。
ってスレ違いじゃねーか。フザケンナ。
スレっつーか鼬
HTMLごときで文法を守れないヤツがプログラムとかほざくなとwww
>>732 use strict;
use warnings;
my $abc = 'love-like-ship';
my @ar = ();
push(@{$ar[0]}, split(//, $abc));
print join "\n", @{$ar[0]};
バカ忍者はトリップ使ってくれよ その方が専ブラであぼーんするのに便利だから
Perl忍者を悪く言うなよ かわいそうだろ
まあ忍者は別に悪く言われなくても 存在自体がかわいそうなんだけどね
日付ってどのモジュール使えばいいの?
日付をどうしたいか、によって違ってくるんじゃねーの?
そこんところはどうでもいいよ。 どれ使っても同じことができるのはわかってるから。 もし将来一つに統一されると考えたとき 候補になりそうなのを教えて下さい。
ならどのモジュールが消えてもいいように ラッパー自作して挟んどけば?
>>748 Time::Piece 今のところ標準モジュール
指定したディレクトリ内で、作成されてから10分以上経過したファイルを削除するソースを教えてください。
ソース教えたら重要ファイルまで豪快に全滅させる自滅コード走らせる予感しかしない
findで-mtimeで-execでrmすれば?
>>755 ここはperlスレだ。 無理やりにでもperlで解決してやれよ。
それじゃperlで解決 perl -e 'system "find", ".", "-mtime", "+10m", "-exec", "rm", "{}", "+"'
それよかtouchが欲しい
文字列 $q の末尾に/がついていない場合/を付けるのはどのように書けばいいですか 色々やってみたけどうまくいかない
>>758 '>>' でオープンでいいんじゃないの?
知らんけど
>>759 if( $q !~ m(^/) ) {
末尾に/がついていない場合の処理;
}
ってこと?
間違えたw if( $q !~ m(/$) ) { ... }
$q .= '/' if $q !~ m|/$|; じゃだめなの?
764 :
デフォルトの名無しさん :2011/08/04(木) 13:54:04.80
>>723 perlが重いって数千行のデータベースをページ表示毎に
ソートでもしてるのか?
>>767 先生!センスのあるお手本を是非ここでひとつ。
よほどのことがなければ外部プログラムは呼び出さない方がいいよね プロセス生成のコストは想像以上に高いわけだし
>>770 試してないけど、これでいける?
my $dir = "/foo/bar";
my $ten_min = 1 / 24 / 60 * 10;
unlink grep +(-C) < $ten_min, glob "$dir/*.*";
glob はスペースを含むファイル名のファイルがあるとうまく動かないんじゃなかったかな。
774 :
デフォルトの名無しさん :2011/08/04(木) 20:07:28.17
連想配列の{ }中は全角文字は使えるんでしょうか? $FORM{'データ'}というように
>>758 utime undef, undef, $file1, $file2;
じゃだめかな。
ついでに
>>759 $q =~ s!(?<!/)\z!/!ms;
とか。
>>774 使える。
コードをUTF-8で書いて use utf8 した方がいいと思う。
HTMLを生成するジェネレーター作ろうとplファイルを作ったところ "とか!とかを文字列で扱うためにエスケープ?しないといけない事を知りました その作業量が多く大変困っています。簡単にする方法ないでしょうか! ↓いまひたすらこんなかんじ print $fh " <\!-- コメントアウト(アドビのInstance等・・・) -->\n"; print $fh " <li><a href=\"\" target=\"_blank\"><img src=\"\" class=\"\" /></a></li>\n";
>>777 プログラム始めて1週間ってことろか。
頑張れよw
>>778 おう俺やっぱ初心者丸出しなのかな恥ずかしい
>>777 とりあえず ! はエスケープしなくていい
変数展開やエスケープシーケンス(\nとか)を使う必要がないなら ' を使うか、
HTMLの引用符を ' にするとHTMLでは楽になる
簡単にする方法はあるけどPerlに慣れるまでは使わない方がいい
一応書いておくと
ダブルクォートは qq(<img src="") で、
シングルクォートは q(<img src="") で代用できる
他にもあるけど、クォート風演算子やヒアドキュメントで検索してくれ
>>779 みんな最初は初心者。がんばって
>>780 便利なやり方が色々あるんですね
そもそもprintって少数行をやるものなのか・・・500行もprintでやってしまったよ・・・ハハ
最初からプロなんていないですよね、がんばりますありがとう〜
>>781 500行wwww
最初と終わりを指定するだけで楽にできるよ
print <<"EOM"; 〜HTML〜 EOM だな
my $str = <<EOT; 〜〜 EOT みたいな変数代入もよく使うな。
まだまだカスどもに追いつかれそうにないからPerlやらなくていいや 自分=うさぎ お前ら=かめ
天然だなあ
#!/usr/bin/perl
print "Content-type: text/html; charset=Shift-JIS \n\n";
use Encode;
use LWP::UserAgent;
our $HOME_URL = '
http://www.scollabo.com/banban/jsindex/sample/sample_312.html ';
our $USERNAME = 'USERNAME';
our $PASSWORD = 'PASSWORD';
my $ua = LWP::UserAgent->new;
$ua->agent('Mozilla/5.0');
#$ua->agent(qq(Mozilla/4.0 (compatible\; MSIE 8.0\; Windows NT 5.1\; Trident/4.0\; .NET CLR 2.0.50727\; .NET CLR 3.0.04506.30\; .NET CLR 3.0.04506.648)));
my $req =
HTTP::Request- >new(GET => $HOME_URL);
$req->authorization_basic($USERNAME, $PASSWORD);
$req->referer(qq(
http://www.scollabo.com/banban/jsindex/sample/sample_312.html ));
my $res = $ua->request($req);
$content = Encode::encode('JIS', $content);
print $res->content;
CGIでBASIC認証を自動化しようと考えています。
そのままいったら拒否されたのでAGENTCODEを変えようと思ったのですが・・・
AGENTCODEが表示されない・・・クマッタ
で、そのAGENTCODEってのは何なんだい?
ナンダロウ・・・ワカラナイ
790です 事故解決しました寝ておきたら理由がわかったorz
urlとかそのまま出しちゃった・・・ レス削除依頼って何処にだせばいいんだろう
アクセスしてみてないけど、BASIC認証かけてあるなら別にいいじゃん? 心配だったら管理者に言って 〜/sample/ ディレクトリを移動してもらおう 次からは質問する前にまず寝て起きようぜ
797 :
デフォルトの名無しさん :2011/08/06(土) 20:34:03.22
open(IN, "file.txt"); print <IN>; close(IN); のようにコード書いてたんですが、openの部分だけをcfopenと書き換えて cfopenサブルーチン内でファイルの存在を確認した上でファイルを オープンすることを考えてます。 そこで以下のようなcfopenサブルーチンを書いたのですが、 呼び出し時に、 open(*IN, "file.txt"); とファイルハンドルを 「*IN」と型グロブを使ってサブルーチン渡さないとダメのようですが できるだけ元のコードを変えたくないので、「IN」のまま渡すような cfopenを書く方法はないでしょうか? sub cfopen { my $file = $_[1]; if (-e $file) { open(CFP, $file); $_[0] = *CFP; return TRUE; } return FALSE; }
http://perldoc.perl.org/perlsub.html#Prototypes
STDIN, STDERR, STDOUT 以外のベアワードのファイルハンドル 使うのとりあえず止めれば? 10年前の記法だぞ。
>>798-799 回答ありがとうございます。
ググってみたら、いつのまにかグローバル変数ってことで非推奨になってたんですね。
素直に元のコードを書き直します。
>>797 ってuse strictでも動くんだ、、、 use warningsなら怒られたけど
作りたいものの規模や変更頻度にもよるかもしれないけど、
>>777 はヒアドキュメントに満足することなく、テンプレートをちゃんと覚えたほうがいいよ。
テンプレートがあればエスケープしてくれるし、ヘッダーとか各ページ共通の案内リスト(って言えばいいのか)
も別ファイルとして管理できて、トップページではヘッダーファイルA、ログイン後のメンバーページは
ヘッダーファイルBを使うとか組み合わせも指定できる。
そもそもモジュールの入れ方を知らないのかもしれないけど、今はcpanmがあるから簡単だし、
>>787 のどれか使ってみればいいと思う。
あとhtmlの文字列をprintで直接作成するのも、たぶんダメなんだけど、変更するときに
正規表現とかで書き換えるのはダメだよ。バグ以前に難解になりすぎて目的達成できないだろうし。
HTML文字列ではなくてDOMを操作するモジュール使うべし。
803 :
デフォルトの名無しさん :2011/08/07(日) 12:40:43.10
@lines1にはメインデータ@lines2にはそれの追加データが格納されていて @lines1と@lines2は上からの行番号で対応できるようになっています。 そこで@lines1の条件にあった@lines2を取り出すには このようにするしか方法はないんでしょうか? $lineno = 0; foreach(@lines){ @data = split(/<>/,$_); if($data[1]>100){ push($cyuusyutu_lines1,$_); push($cyuusyutu_lines2,$lines2[$lineno]); } $lineno++; }
804 :
デフォルトの名無しさん :2011/08/07(日) 12:44:41.54
訂正:foreach(@lines)じゃなくてforeach(@lines1)です
805 :
デフォルトの名無しさん :2011/08/07(日) 12:48:27.94
また訂正 push($cyuusyutu_lines1,$_); → push(@cyuusyutu_lines1,$_); push($cyuusyutu_lines2,$lines2[$lineno]);→ push(@cyuusyutu_lines2,$lines2[$lineno]);
for my $lineno (0 .. $#lines1) { my @data = split /<>/, $lines1[$lineno]; # ... }
BigRatで表された分数を、整数に丸めるにはどうすれば良いんでしょうか。 例えば use Math::BigRat; my $x = Math::BigRat->new("1000"); my $y = Math::BigRat->new("3"); $x->bdiv($y); print "$x\n"; とすると実行結果は1000/3なんですが、333にしたい。 JIS丸め希望(round_modeの'even'がそれ?)
>>803 全く別のアプローチ
my @ids = grep { ( split /<>/, $lines1[$_] )[1] > 100 } 0 .. $#lines1 ;
my @ cyuusyutu_lines1 = @lines1[@ids] ;
my @ cyuusyutu_lines2 = @lines2[@ids] ;
>>807 Math::BigRat は恣意的に分数に表示するためのモジュール。
使用目的が明かに違う。そんな風に使うべきじゃない。
どうしてもってんなら
print int eval $x
って手もある。 eval STR なんて非推奨もいいとこだけど。
浮動小数点誤差に困っているんですが、 固定小数点数型ってないですよね?
無い
やっぱりですか。 Perlを始め、変数に型がない言語って 大抵ないですよね。
Math::BigFloat じゃダメ?
>>812 Perl => Math::BigFloat
Ruby => BigDecimal
Python => Decimal
"固定小数点数型"を理解してないなら書き込むなよ。 Math::BigFloat は固定小数点数型を提供するもんじゃねーぞ。 浮動小数点誤差を防ぐもんでもねーし。
>>815 固定小数点では無いが、精度をちゃんとすれば浮動小数点誤差は防げるぞ?
浮動小数点誤差に困ってるんだろ?
Math::BigRat->as_int() を知りたかったのか Math::BigFloat->round_mode('even') で許容範囲なのか 汎用機屋さんが言う(BCDの)固定小数点数が意地でも欲しいのかよくわからない
>>812 luaはないってサイトに書いてたけど実際のところ知らん
Term::ReadKeyを使った際の質問です。 プラグラムとしては実装出来て、問題なかったのですが、報告したところリーダーの人から 自動テストが出来ないとダメと言われています。 手動テストでは問題ないことは確認したのですが、自動テストする際に、 ReadKeyが受け取る値をテストのソースコードから操作するにはどうすればよいでしょうか?
んなもん、ReadKeyをオーバーライドすればいいだろう。
822 :
807 :2011/08/08(月) 02:02:51.46
>>809 レスdクス
evalメソッドを有難く使わしてもらおうかと
少なくとも今個人的に直面しているのがBigRatだけではにっちもさっちも行かないケースでして、
つまり整数の階乗じゃなくて有理数の階乗を計算する羽目になったわけで、
ストレートにΓ関数を計算しろというのは曰くごもっともですけども、
どっちにせよ有理数では話が済まないという、
事情が許すならPerl以外の数値演算向け言語(よく知らないけど)を使ってみては
>>807 my $x = Math::BigRat->new("1000");
my $y = Math::BigRat->new("3");
$x /= $y;
$x = $x->as_float->ffround(0);
print "$x\n";
その計算だけ行うプログラムをcppで作ってsystemで呼ぶってゆう手抜きもw
Cの勉強が終わりつつあるので、次にPerlかPythonを勉強したいんだけど、 どっちがいいですか?
>>826 Cからなら…Perlかなぁ?
Cには無いワンライナーや、高機能なテキスト処理、
お手軽なリスト&ハッシュ処理の世界を知ってみては
Pythonは良くも悪くも万能言語なので、微妙に被る場面が出てくるかも知れない
でも、Cでやりたいことを取り敢えず速記するのには良いかもね
あ、待った Cの勉強が終わり…と言うが、Cに終わりは無いぜ Cを言語として極めたと思うなら、Cで出来る各専門分野に手を出してみたら?
829 :
デフォルトの名無しさん :2011/08/09(火) 23:13:48.18
ファイルのオープンだけど open(IN,"<$FILE_PATH"); @lines = <IN>; close(IN); ↑をページの最初だけファイルを読み読み込んで@linesに格納するのと 各サブフーチンごとに読み込んで@linesに格納するのでは 後者のほうが速度がかなり遅くなりますか? 速度がそれほど遅くならないのなら各サブルーチンごとに@linesに格納したいと思いますが なるべく変数はローカル化したいので
何回も開けると少し遅くなりそう whileとかで1万回くらいループさせてどっちがどのくらい早いか比べてみたら
開けっ放しで適宜読み込みだと思ったけど
>>829 ディスクキャッシュにのってしまえば気にならないほどかと
デバッグのことも考えて後者で良いと思う。
cpanから取ってきたモジュール(DBD::mysql)がMakefile作成まではこぎつけたけど コンパイル段階で型の不一致エラーを吐いてしまうだす。 x64 ちなみにDBIは通りました。
>>826 Pythonがいい。
今さら廃れた言語をする必然性はない。
>>834 そう思ってるならそんな廃れた言語の質問箱スレなんか覗きに来てんじゃねーよw
あほしかいませんえっここのスレは
>>832 逆だろ
何度もクローズするってことは何度もフラッシュするってことだからな
>>829 私は内容を変数に突っ込むかな。
サブルーチンごとにファイルオープンするとなると、
処理中にファイル内容が変更されることを考えないといけないし、面倒。
Perlってこれから廃れていく言語なのかい? それなら学ぶ必要はなさそう・・・
pythonは日本ではなんであんま人気ないの?
廃れて行くというより、一時期の盛り上がり方(CGIの頃)が異常だっただけ 今は元の鞘に戻ったという感じだよ
>>839 ロシア語ってこれから廃れていく言語なのかい?
みたいな話だろそれ
仕事上やむなく覚えなきゃいけない、とかいうんでないなら perl、pythonに限らず面白そうと思ったものはひととおりかじってみれば。
Cからならpythonを先にやった方が良いだろう。 ぐにゃぐにゃした言語ばかり独学でやっていると、変な手癖が直らなくなる。
おっpy
とりあえずここはPerlスレなので、Perlのメリットだけ挙げればそれで良くね Pythonのことは他所にお任せする ワンライナー、正規表現、文字列処理、リスト(とリスト処理)、ハッシュ(連想配列や辞書とも呼ばれる)辺りがお手軽に使えるのが利点だな あとはメモリ管理が要らない…とまでは言わないが、Cに比べりゃ雲泥の差でテキトーに出来ることか
テキトーに書いても動いちゃうから、クソみたいなサンプルが多いんだよね。 サンプルから strict に書き直そうとする意欲が無ければ perl はおすすめ出来ないなぁ
うちでは、シェルスクリプトだとちょっと面倒な作業くらいに大活躍してくれてる
Perlの世界のオブジェクト指向って 現在はMoose(Mouse)を使うのが標準なんですか?
Perlが持つ特徴を挙げればいい? デフォルト変数、特殊変数、コンテキスト指向、単に名前空間のオブジェクト指向
>>847 phythonがぐにゃぐにゃしてるんだよ・・・
> phythonがぐにゃぐにゃしてるんだよ・・・ おっ 新しい言語だな。
ふぁいそん。
行末をセミコロンで終われない言語は使いたくない
ぱいそんもるびーも行末をセミコロンで終わることはできるよ ほぼ意味はないけど
逆にperlでもほとんどの場面でセミコロン無しでプログラミングできる
一部が“出来る”というだけで、全てに於いて回避というわけじゃないだろ 文脈の区切りとしてはセミコロン最高!
>>859 いや、perlでも全てのセミコロンを回避する方法はあるよ
それちょっと知りたい どうやるの
まさか、Filter::Simple使うとか?
どうすんのかわからない、とか言っているやつは全員KENT汚染者な。
まじで分らん。 use strict; use warnings; 下だよな?もちろん。(<=この時点でKENTとは対極)
よくわからんがblock使いまくるとかかな? いずれにしても答は馬鹿馬鹿しそうな予感。 もしくは単なるブラフか。
無理矢理演算子で繋ぐんじゃね
全てをブロックで囲んだり、関数の引数の中に入れるとか、そんなんだろ。
>>863 の方がどうかしてると思うよ。
カンマで繋いで、ブロックの最後のセミコロンを省略に一票。
@perl5.10 use strict, use warnings 「しなくても」 { use feature qw(say) and say "hello" } # => x { use feature qw(say) , say "hello" } # =>x { use feature qw(say) }{ say "hello" } # =>x pragma系の呼び出し全滅じゃね? BEGIN{ } あたりで対処も出来ねーし。
ん、そのへんはこれでいいんじゃ? BEGIN { require feature and feature->import('say') } say "hello" and say "goodbye"
featureに関してはその通りでした、失礼。
そんなことより、Perlの世界のオブジェクト指向って 現在はMoose(Mouse)を使うのが標準なんですか?
>>872 そうムキにならなくても。
ハカーさま方はそうおっしゃってる方が多いです。
個人的にもお勧めです。
Moose/Mouseを利用したCPANモジュールも結構あるようです。
でもPerlディストリビューションに付いてくるいわゆる標準モジュールではありません。
>>873 標準モジュールで似たようなのあるのですか?
>>874 似たような…というと語弊があるけど、
OO支援という意味では Class::Struct というのがある。
Lisp風味に書けばセミコロンは要らないかも知れないが、変数が面倒すぎる。 sub factorial { if ($_[0] <= 1){ return $_[1] } else { return factorial($_[0]-1, $_[0]*$_[1]) } } print factorial(10, 1)
必ず中でreturnする、という条件なら while (my($x, $y) = @_) { ... } とする手があるな。letっぽく。
>>877 その条件は無くても大丈夫
while(my(...)=@_ or 1){ ... } continue {last}
if(my($x,$y)=@_ or 1) { ... }
for ([my($x,$y)=@_]) { ... } 等。
givenの事も忘れないであげて given (my(…) = @_) {…}
given my chocolate
階乗計算のプログラムなんですが my $fact = sub { my $n = shift; if (n == 1) { 1; } else { n * $fact->(n-1); } }; $fact->(5); なぜこれは実行できないのでしょうか?
if ($n == 1) { でした。申し訳ございません。
n * $fact->(n-1);
ARRAY(0x...)やHASH(0x...)という文字列はその実体がある場所を示していて 配列やハッシュにアクセスするための文字列と見て問題ないでしょうか?
文字列って解釈じゃなくて、実体のある (配列やハッシュの場合は先頭の) アドレス C みたいにアドレスを意識する必要が無いので、perl の場合は C の様に実体のあるアドレスという 解釈よりもリファレンスのユニーク ID って思った方が分かりやすいかも
>>884 考え方が逆かな
「実体がある場所」がデータとして入ってて
それを文字列として表現するとそうなる、が正しい
例えば、文字列として出て来た表現をそのまま別の変数に文字列として入れても
その文字列からは元の変数のデータにはアクセス出来ない
使いどころは eq で同一のリファレンスかどうかを比較するときぐらいのもんかねえ "" を overload してるクラスのインスタンスだとだめだけど
>>885-887 データにアクセスできる特別な文字列が入るのではなく、実体がある場所のアドレスが入っていて
それをprintした場合は文字列として表現したものになるってことですか
これってリファレンスに関連したものだったんですね・・・
分かりやすかったです、ありがとうございました
889 :
デフォルトの名無しさん :2011/08/16(火) 02:38:03.25
push (@LIST, [$1, $2]) while (/ (\d+)_(\d+) /g); みたいな処理をmapを使ってやる方法はないでしょうか?
>>889 map にする理由がわからん。
無理やり map で書くならこうか?
map{ push (@LIST, [ split /_/ ]) } (/ (\d+_\d+) /g);
上級者っぽくマイナーなmapで書きたがるんだよ雑魚だから
>>889 my @list;
...
@list = (@list, sub{ map{ [splice(@_, 0, 2)] } (1..int(@_ / 2)) }->(/ (\d+)_(\d+) /g));
リストコンテキストの /.../g がすべてのキャプチャをべたっと平らなリストで 返すからいらない苦労が必要なんだよなぁ。1回のマッチごとに無名配列でまとめて くれれば便利だったのに。
リストでの返り値は恩恵のほうが多いと思うけどなあ
それこそ必要なら
>>889 みたいにスカラーコンテキストでイテレートするという指針で特に困ったことないし
>>892 2となってるところを
>>895 さんの教えてくれた$#+で置き換えるとそのものずばりの処理が完成しました
どうもありがとうございました
897 :
デフォルトの名無しさん :2011/08/16(火) 18:23:41.88
フォームに,(カンマ)を入力して送信すると勝手に‚に変換されるんですけど これって仕様ですか?勝手に変換されるのはカンマだけですか?
かなり汚いんですがこれでも動きました $_="1aA2bB3cC4dD"; @LIST = grep {$_} map { if ($i++ % $#+ == $#+ -1) { $r=[@prev,$_]; @prev=(); $r } else { push @prev, $_; undef } } /(\d)(\C)(\C)/g; print "[$_->[0], $_->[1], $_->[2]]\n" for @LIST;
899 :
デフォルトの名無しさん :2011/08/16(火) 18:33:32.72
900 :
デフォルトの名無しさん :2011/08/16(火) 18:49:47.92
もっと詳しく書くと,(カンマ)を入力して確認送信して 確認画面で$FORM_DATA{'text'} =~s/,/&sbquo;/g;でカンマを&sbquo;に変換して それで書き込むでも$FORM_DATA{'text'} =~s/,/&sbquo;/g;で カンマを&sbquo;として書き込もうとしているのですが 実際にファイルに書き込まれているのは‚;とかいうデータになっているんです
901 :
デフォルトの名無しさん :2011/08/16(火) 18:50:41.16
&#8218;とかいうデータになっているんです
Perlはもう終わりなの?
>>903 本来の役割であるUnix系システムにおけるテキスト処理の用途では
むしろ以前にも増して必須言語なってるかと
「シェルスクリプトやAWKよりPerlで書いたほうが多くのUnix系環境で期待通り動く」
と言っても今や過言ではないと思う
.crontabを開くと*.plが並んでるというのは、あながち冗談じゃないのか
crontabは人によるかも知れないが、そこいらのLinuxディストリビューションを デフォルトインストールしただけでもPerlスクリプトがいくつかインスコされてると思うよ ちなみにUbuntuでは「perl-base」パッケージを削除しようとすると 「この操作を行うと、システムが不安定になる可能性があります。続行しますか?」 と聞かれるほどにシステムに入り込んでるみたい
@data=(100,200,300); foreach $nnn(@data){ $nnn = &henkan($nnn); } foreach (@data){ print "data=$_<br>"; } sub henkan{ my($henkan_data) = $_[0]; $henkan_data = "30000"; return($henkan_data); } @dataが全部30000に置き換わっていました。 どうして置き換わってしまうんでしょうか? $nnnの値を変えると@dataも変わってしまうのですか?
何故そうなるか説明出来ないけど、そうなるのが仕様。 まぁそもそもループとなる対象を、そのループ内で書き換えるのはお行儀が良いとはいえないかな。
perldoc perlsyn In other words, the "foreach" loop index variable is an implicit alias for each item in the list that you're looping over. 言い換えると、forループの帰納変数がループの対象となっているリスト中の 個々のアイテムに対する暗黙のエイリアスである。 帰納変数 => ここでは、$nnn
>>907 のような場合、
どう書き換えるのが正しいの?
>>907 はコードが多すぎる。
henkanは30000を戻しているだけ。
だからこう書き換えられる。
@data=(100,200,300);
foreach $nnn(@data){
$nnn = 30000;
}
ループの変数は、@dataの中身をコピーしたのではなく、
エイリアス。同じものを指している。
だから書き換わる。
>>911 foreach $nnn(@data) {
$mmm = &henkan($nnn);
}
>>912 いや、そこまで省略すると意図が解りにくいと思うぞ。
>>914 henkan($nnn) とわざわざ書いたことで
「元の値を処理した結果を使いたい」って部分が明確になる。
即値を入れちゃうコードにするとその辺がちょっと曖昧になってしまうからね。
確かに意味としては=30000でも通じなくもないんだけど
「コードが多すぎる」って指摘は流石に的外れだと思うのよ。
ひとつ処理を噛ませたことで意味がより明確になってんだから、多すぎるってこたあない。
henkan関数見てみろよ。 その中で何してようが結局は30000返してるだけだろ。
>>912 のコードの方がいいな。「何をしたいか」どころか「何をしているか」まで明確になってるし。
「コードが多すぎる」はまず sub henkan {} の中の話だな。なにがやりたいんだか意味不明。
PBPやらのお作法本を一通り読めば、913氏の主張にはなり得ない。 この場合明らかな初期化だから、ループを回す必然性すら無く 素直に、@data = (30000) x @data;あたりのコードにしとけ。 てのは別の話し。
919 :
デフォルトの名無しさん :2011/08/17(水) 13:14:15.10
INPUTタグはhiddenで&lt;&gt;で送ると勝手に<>に変換されるけど textで&lt;&gt;と入力すると<>になはならいんだな
バカはいい加減お引き取りください
>>919 テキストで入力するのは全部変換されるよ
perlにはまったく関係が無い
perl-5.13.3 で以下のコードだけを走らせるとどちらのサブルーチンもメモリを解放してないっぽいです(Mac の Activity Monitor で見ている限り)。 明示的に undef すればいいと思ってたんですが、なにが起こっているのでしょうか。 ついでに hoge() より hoge2() の方が二倍のメモリを消費しているようです。 これも意味がわかりません。 なんだか気持ち悪いので、どなたか救って下さい。 hoge(); hoge2() sleep(); sub hoge { my $str = ""; $str .= " " for (1..10000000); undef $str; 1; } sub hoge2 { my $str = " " x 10000000; undef $str; 1; }
tset
>>923 perlがOSからmallocした領域をfreeせずに持ち続けてるだけで、
perlの変数的には解放されてるんだろう。
関数呼ぶ度にメモリが増えていくとかじゃないだろ?
何でMacでperlをコンパイル出来ないと思い込んでんの?
なんで野良ビルドなんか使って気持ち悪いとか言うの
ぱーるはじっこうちゅうはめもりかいほうはしないよ あんでふしてもじつめもりはかくほしたまま
あ、あんでふってー
てsst
>>907 foreachよかmap使えmap。
その方が美しく書ける。
一時変数$nnnも無くて済む。
@dataHenkan = map{henkan($_)}@data;
それと一時変数の$nnnをそのループ内で書き換えるのはかなり気持ち悪い。
プログラミングの扇子無し。
>>933 そういう話じゃねーだろ。
なんで中身読まないでレスしてんだ?
もだんなひとはあいだのれすなんかよみません! だからじだいのながれとかかんけいなしにもだんもだんいってるのです はいはいもだんもだん
ファイルからデータを読み込み、読み込んだデータの一部を整数とか、数字として扱いたいときに my $line = <FH>; chomp $line; my $integer = int($line); とするのはバカな行為なんでしょうか? $line が整数と分かっていた場合、例えば if($line == 5) とやってもいいものなんでしょうか?
おっけいです
>>936 数値である限り通るけど
eval したり内容チェックしたりする方が身のためだよねってだけじゃない?
939 :
923 :2011/08/18(木) 10:56:30.83
>>930 あんでふしてもだめなら、メモリ解放する方法はないってことでしょうか。
リファレンスカウンタの状態まではわかりませんが。
あるいは、そもそもこんなメモリ圧迫コードは常に避けることができるってことでしょうか。
>>938 外部データはevalしちゃだめよ
もし改変されててrmとかだったらどうすんの
…ごめんrmでもPerlの文じゃなければ大丈夫か "`rm -rf /`"みたいな文字列に改変されてたらってことね
looks_like_numberでおk
>>939 Cで書きなよ
自分でメモリ管理するってええよ
>>933 > それと一時変数の$nnnをそのループ内で書き換えるのはかなり気持ち悪い。
Perlでは常套手段。
おまえはもうPerl使うな。
active perl 5.12.1 で引数与えてスクリプト起動しても @ARGV に入ってくれないんだけど。。。 同じスクリプトを同じ起動の仕方で 5.10.0 で実行させたら @ARGV には入る。。。
mapを使用する基準って何かね。 書きながら考えてるから最初にmapを書くと、 よっぽど簡単な処理のとき以外は、あとから処理が増えていくから foreachに書き換えることが多い。 だからforeachで一通り書いて、mapに直せるところは直すって感じでやってるんだけど、
既存リストから新しいリストを作るときはmapかなあ
ただね。mapで簡単にかけたからと言って、 速いとは限らないんだよな。
俺は割と積極的にmap&grepするなあ。 迷う時には確かにforeachでエイヤで書いちゃうほうが楽なんだけどね。
>>945 省略した書き方で デフォルト変数 @_ に入ってくれない時があったけど同じようなもんかな
文字通り変換作業なら map で、逐次作業なら foreach では。 あと特に配列がでかいときは foreach のほうが省メモリでよいと言いませんか。
952 :
デフォルトの名無しさん :2011/08/19(金) 12:42:55.11
my $h= {AA => q(aa), BB => q(bb) }; undef($h->{AA}); delete($h->{BB}); print scalar(keys %$h),"\n"; とすると1が返って、 $h は { AA=> undef } というhashになるが、 これが仕様? undef($h->{AA}) と delete($h->{AA}) は違うのか…
配列やハッシュの要素削除には delete 使えってどこかに書いてあった
955 :
952 :2011/08/19(金) 13:14:40.86
FAQ なのか、知らなかった。 どうもありがとう。
delete された要素が含むであろう配列やハッシュで、 データとして長さゼロの文字列や0を持つ場合は、 exists で存在有無を確認しながらブン回すこと。
957 :
945 :2011/08/19(金) 16:00:31.28
perl test.pl opt1 opt2 ってやると引数とれた むぅ・・・
どうやってこれまでとってた
5.12.4だが関連付け起動でもちゃんと入るぞ
&#数字;(数値参照文字)が含まれているかどうかを正規表現で判別するにはどうしたらいいですか? $str="あああ&#12354;あああ"; if($str =~/[0-9]/g){ print "数値参照が含まれています"; } これで行かないんです><
>>960 こんなでも動く。
てか、webprog板で質問してる人じゃないのか。
use utf8;
my $str="あああああああ";
if($str =~/&#[0-9]/g){
print "Numeric character references INCLUDE !!!\n";
}
962 :
945 :2011/08/19(金) 20:03:43.37
>>958-959 5.6.x (過去の実行環境) とか 5.10.0 (開発環境) の環境だと普通に出来る
でも 5.12.1 (現在の実行環境) だとダメ。
test.pl
print join "\n", @ARGV;
っていうスクリプトさえ 5.12.1 だと表示されない。けど perl test.pl ならいける。
5.12.1 を捨てろって言われればそれまでなんだけどw
964 :
945 :2011/08/19(金) 23:12:46.91
直った!! まさか関連付けとは思いもよらなかったorz thx♪
なんということでしょう
>>951 mapがメモリくうのって、
@A = map { $_ + 1 } @A;
みたいに、左辺と右辺で、同じ@Aを使用した場合だけじゃないかな。
それ、新規に@Bを作った場合に比べ省メモリだぞ(perl5.10) 実際にコード作って動かしてみ? 同様に、 my @dat = 1 .. 10000000; for( @dat ) {$_ = $_ * 2 } #1 @dat = map { $_ * 2 } @dat #2 #1 と #2 は top で見たかぎりはメモリ使用量に 顕著な差は見られなかったが?
Perlで3次元の配列を表現するにはどのような方法があるでしょうか? 変数$aにx,y,zの3変数から求まる値を代入したいのです。 $a=val[x][y][z]みたいなイメージなんですが。
あ、usemymallocしてないから、perlのmallocね。
Hogeパッケージ内の関数func0から 同じHogeパッケージ内の関数func1を呼ぶには Hoge::func1( ) とする以外にありますか?
単に func1() でいいんじゃねえの?
972 :
970 :2011/08/20(土) 17:32:19.69
>>971 すみません大切なこと書いてありませんでした。
実際のプログラムで呼ばれている関数名が exists なので
main::exists との区別をするための呼び出しをする必要があります。
そんな名前を付けるなよ
974 :
970 :2011/08/20(土) 18:05:42.18
>>973 それって、パッケージ/モジュールの根幹を否定してません?
今のところ、Hoge::exists( arg ) って呼べば良いってのは分かってる(当たり前ですが)
同じパッケージ内なら別の呼び出し方あるのかなぁ、と思い質問しました。
>>966 > @A = map { $_ + 1 } @A;
こんな場合は
map $_++, @A;
でよろしい。
>>969 orz...
これは、697の補足で
>あ、usemymallocしてないから、perlのmallocね。
usemymallocしてないからsystemのmalloc使ってるって事でした。
毎回間違える。
>>968 実際に求めてるのはハッシュかもしれないから
perldoc perllol するか、perllolをググるかして下さい。
977 :
971 :2011/08/20(土) 19:02:48.38
>>974 それなら &exists( arg )
あと細かいこと言うと、区別しなきゃいけないのは main::exists とじゃなくて CORE::exists な。
ともあれ俺も
>>973 に同意。
予約語とかぶる名前を使うなんてのは、何の言語だろうとよほどの必要性がない限り避けるべきじゃないかね。
たとえば、同じパッケージ内からしか呼ばないのが前提の関数なら _exists とかにしたほうがいい。
オブジェクト指向モジュールでコア関数と同じ名前のメソッドを持ちたいってことはあるけど、でもそういう場合なら $self->exists で呼ぶだけだから関係ないな。
先生URLがなんか危険な香りがします
すまん。怪しい薫りが確かにするわw つーことで、perldoc perlsub より >Finally, some built‐ins (e.g. "exists" or "grep") can’t be overridden.
次スレ立てる人は
>>1-3 の確認と修正よろしく。
ただでさえ面倒な次スレ立てなのにそりゃないだろう 確認修正テンプレ貼っとくから立ててくれってならわかるが
確認修正して次スレ立てる旅に出ますよ。 ところでこのスレ立てたとき過去スレ要らんぞと言われたけど切ってもよい? 自分でも貼ってて長いよなーと思った。
確かに過去スレは要らない
正規表現が無限ループに陥ったのを関知する方法をおしえてください。
s/www\.(perldoc\.jp)/$1/; 立ててきます。
たぶん無理なのでalarmでもかけとけば?
正規表現が無限ループになる前に ソースコードを読んで無限ループ部分を検出する正規表現を書けばいいジャン!!! オレって甜菜!
991 :
985 :2011/08/20(土) 21:06:11.44
みなさん回答ありがとうございます。 alarmを使ってみます。
無限ループ検出とはちょっと違うが、昔流行った Smart::Commentsは、ループの進捗が把握出来て 何気に便利 と埋めついでにコメント。
Perlで条件判定して強制的に終了するようなコマンドってありますか? cのexit(0)みたいなのです。
,,,,wwWWwwWwWム,,, ミミ三ミ川ミミ川三ミ川ミ川ミ ミ_川ミ_ミ川ミミミ_ミ_ミ_ミ三ミ_゛ミ ミ_川三川三ミ ,.--"゛~~~~''´゛゛゛ミ_ ミミ川三ミ川ミミ_. 丶 ミ川ミ_リ川ミミ_川 | ミ川ミリ川川ミ川 ‐、_‐rッ, i、 'ニi.ア, 川川リ,r' ミミ_川  ̄ .!i ヽ、 | 川川リ(,(, 6 リ川 ィ.___)) | リ川川`ー |川!、 . _.i'I. | 川リ川 l))) -´=ェエ=,` / リ川) 川  ̄ / /人 ヽ ゛゛ー,,,,_...,ノ / ヽ 入´
perlでもexit
/ / /| : / i: ∨/ ノリ /⌒) /イ : / ⌒ト | /| ∧ |: |、__,彡 { ⌒) |/ . : : :| :/ | l |/ /⌒ト、:/∨:!: |/: : : ハ / ̄ ̄ (⌒ヽ レイ: : : : 〃⌒心八 │ ∨ | :/\| : | : : : : : | ヽ ヽ、 -、:|: :|: イ{{. i_ノ:.:ハ \| |/ :|/ 厶L:_:」_:リ \ `( }八八ハ. 弋いソ __ / ,: : : : : | はっじまるよー / ⌒ヽ ∨ : : :j(//) . ⌒¨¨~ヾ /: : / : リ 〈 ´ ̄) | : { _ (//) : : / : : | ' '⌒) }i| : :丶 「 } ∠/: : / : : : | '. ノ´ {八 : :∧\ __ノ / : : : / : : : : 人| } \厶:∨::> _,,,... ´/: :/| 〃丶:∧: :/ /〉 ∧ /{:::|「::::::::::::::::: ∧ // /|/::::::::::\|/
>>967 埋めがてら。自己レスと975への反論レス。
# 当然 malloc に挙動が影響されるスクリプト
sub myps { print `ps ux $$`};
sub map_overwrite { my @dat = 1 .. 5000000 ; @dat = map { $_ + 1 } @dat ;}
sub map_overwrite2 { my @dat = 1 .. 5000000 ; map { $_ ++ } @dat ; }
sub map_new_array { my @dat = 1 .. 5000000 ; my @dat2 = map { $_ + 1 } @dat ; }
sub for_overwrite2 { my @dat = 1 .. 5000000 ; for(@dat) { $_ ++ } ; }
myps ;
CODE:
{
if ( $ARGV[0] == 1 ){ map_overwrite ; last CODE ; }
if ( $ARGV[0] == 2 ){ map_overwrite2 ; last CODE ; }
if ( $ARGV[0] == 3 ){ map_new_array ; last CODE ; }
if ( $ARGV[0] == 4 ){ for_overwrite2 ; last CODE ; }
}
myps ;
実行結果 % perl hoge.pl 1 USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND HOGE 54445 98.2 31.1 3765716 1303964 s001 R+ 10:08AM 0:03.48 perl hoge.pl 1 USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND HOGE 54445 100.0 32.0 3804780 1343036 s001 R+ 10:08AM 0:06.14 perl hoge.pl 1 % perl hoge.pl 2 USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND HOGE 54467 100.0 31.1 3765716 1303968 s001 R+ 10:08AM 0:03.49 perl hoge.pl 2 USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND HOGE 54467 100.0 34.5 3935852 1447636 s001 R+ 10:08AM 0:05.40 perl hoge.pl 2 % perl hoge.pl 3 USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND HOGE 54514 98.8 31.1 3765716 1303968 s001 R+ 10:08AM 0:03.48 perl hoge.pl 3 USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND HOGE 54514 99.0 33.0 3843844 1382100 s001 R+ 10:08AM 0:06.30 perl hoge.pl 3 % perl hoge.pl 4 USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND HOGE 54548 99.5 31.1 3765716 1303964 s001 R+ 10:08AM 0:03.47 perl hoge.pl 4 USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND HOGE 54548 99.3 32.0 3804780 1343036 s001 R+ 10:08AM 0:04.85 perl hoge.pl 4 メモリ使用量(初期キープ分 - 実行後メモリ)は、 @dat = map { $_ + 1 } @dat ;# => 0.9% map{ $_ ++ } @dat ;# => 3.4% my @dat2 = map { $_ + 1 } @dat ; # => 1.9% for(@dat) { $_ ++ } ; # => 0.9% 左辺値の値を利用しないmapがこれだけ無駄なのは 左辺値用の値をどっか無名配列にキープし続けてるからと 考えるべきか… ま、何れにせよ使うべきでは無いコードだ。
×メモリ使用量 ◯解放されてないメモリ量
梅ー
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。