1 名前:デフォルトの名無しさん [2014/02/19(水) 23:36:23.29 .net] CGIについての質問は板違いです。WEBプログラミング板でどうぞ。 CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。 (WEBプログラミング板: kohada.2ch.net/php/ ) このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。 スレ違いの質問にはスルーか、速やかな誘導をお願いします。 荒らしはスルー推奨。 "The duct tape of the Internet" こと、Perlについての質問箱です。 "There's more than one way to do it" ということで、 Perlの奥深さについて皆で語り合い、追求してまいりましょう。 www.perl.org/get.html Download Latest Stable Source (5.18.2) ▼前スレ Perlについての質問箱 61箱目 toro.2ch.net/test/read.cgi/tech/1381561905/ Perlについての質問箱 62箱目 toro.2ch.net/test/read.cgi/tech/1385039352/
101 名前:デフォルトの名無しさん [2016/03/07(月) 21:18:09.27 ID:jBGm+KXA.net] pythonのスクリプトの頭に、use strict;って書いた。頭いかれてきたw
102 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 23:50:19.65 ID:fqGSH3nt.net] my($year,$month,$day,$hour,$min) = (localtime)[5,4,3,2,1]; my $str = "1/23 12:34"; my($strmonth,$strday,$strhour,$strmin) = $str =~ m|([0-9]+)/([0-9]+) ([0-9]+):([0-9]+)|; if ( sprintf('%02d%02d%02d%02d',$strmonth,$strday,$strhour,$strmin) gt sprintf('%02d%02d%02d%02d',$month+1,$day,$hour,$min) ) { printf("%04d/%02d/%02d %02d:%02d\n",1900+$year-1,$strmonth,$strday,$strhour,$strmin); } else { printf("%04d/%02d/%02d %02d:%02d\n",1900+$year,$strmonth,$strday,$strhour,$strmin); } # 基本に忠実に。応用はそれから
103 名前:デフォルトの名無しさん mailto:sage [2016/03/08(火) 00:11:41.92 ID:2waKAzbH.net] >>101 $month -= 2; my $str = "2/29 12:34"; したら、2015/02/29って答が出るコードなんぞ貼るなや 元の質問者のコードに、 ふつうに$obj->is_leap_yearの判定加えて、 2/29跨ぎなら、LEAP_YEAR 引けばいいだけだろ。
104 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 00:16:20.50 ID:Djq1Ua6S.net] この場合は 2015/02/29 が欲しい答え
105 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 05:51:47.62 ID:BRdU+Z94.net] バギーなコードが眼に見える様だ
106 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 00:41:03.49 ID:m8iGuBqw.net] 要件にない仕様を自己満足で追加してはいけない この件はTime::Pieceだとうまくこなせない問題 融通がきかないのがオレオブジェクトのつらいところだ
107 名前:デフォルトの名無しさん mailto:sage [2016/03/10(木) 06:53:37.48 ID:cOoRDwdC.net] Time::Piece関係ねーだろ。 頭悪いな。
108 名前:デフォルトの名無しさん mailto:sage [2016/03/13(日) 00:11:27.55 ID:W4AXq/NT.net] localtimeとTimelocalは次スレのテンプレに追加するか 同じ質問が繰り返されてみんな同じところではまるからなあ
109 名前:デフォルトの名無しさん mailto:sage [2016/03/14(月) 11:18:30.62 ID:EtVpSr8/Z] Time::Pieceのadd_years()メソッドで解決。 $t = $t->add_years(-1); ただし、2/29は、3/1側に倒される。
110 名前:デフォルトの名無しさん [2016/03/17(木) 15:49:56.51 ID:HmsCvSUF.net] クッキーへの書き込み処理での質問 エラーメッセージを取得処理 print "Content-type:text/html\n"; if(エラー数が0の場合){ 投稿データをクッキーに書き込む処理 } print "\n"; エラーメッセージの表示処理 というようにエラーメッセージの取得と表示の間に print "Content-type:text/html\n";print "\n";を挟む形になってしまうので これらをまとめてサブルーチン化したくてもできません こういう場合でもうまくサブルーチン化できる方法を教えてください
111 名前:デフォルトの名無しさん mailto:sage [2016/03/17(木) 17:41:21.64 ID:H1m/hwv2.net] エラーメッセージの出力時にContent-typeから出力すればいいのでは
112 名前:デフォルトの名無しさん mailto:sage [2016/03/17(木) 18:09:04.11 ID:r8Uypp4J.net] >>109 そのためにCGI.pmなどのライブラリや 各種フレームワークがある。
113 名前:デフォルトの名無しさん mailto:sage [2016/03/19(土) 22:54:54.53 ID:zQsVsKn8.net] my $kukkii =
114 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 14:44:26.98 ID:AaFdygkh.net] '';
115 名前:デフォルトの名無しさん [2016/03/20(日) 23:05:38.19 ID:ZT1ttS3p.net] 何をしたかったのかよくわからないけど、せめて cookie と書いてほしかった。
116 名前:デフォルトの名無しさん mailto:sage [2016/03/21(月) 23:09:59.48 ID:mpXdX/cy.net] 住所を入れる変数でさ $adoresu = ・・・ みたいな名前つかうヤツ、いるよね 英語なのか何なのか、よくワカラン
117 名前:デフォルトの名無しさん mailto:sage [2016/03/23(水) 01:56:25.05 ID:isz3o5XG.net] $message = エラーメッセージを取得; print "Content-type:text/html\n"; if(エラー数が0の場合){ 投稿データをクッキーに書き込む処理 } print "\n"; print $message; # エラーメッセージの表示処理
118 名前:デフォルトの名無しさん [2016/03/23(水) 21:53:51.11 ID:ftv772ff.net] my $str = "あああabcあああcdefghあああ123456"; この文字列で半角英数字の部分をAAAに置換するにはどうすればいいですか? あああAAAあああAAAあああAAAになればOKです
119 名前:デフォルトの名無しさん [2016/03/23(水) 23:01:13.44 ID:OHojQvKP.net] ここで聞くよりも perldoc.jp/pod/perlrequick を読みなさい。その方が早くて正確です。
120 名前:デフォルトの名無しさん mailto:sage [2016/03/24(木) 00:07:44.52 ID:3WWxxvBQ.net] my $str = "あああabcあああcdefghあああ123456"; print $str, "\n"; $str =~ s/[A-Za-z0-9]+/AAA/g; print $str, "\n";
121 名前:デフォルトの名無しさん mailto:sage<
[] [ここ壊れてます]
122 名前:>2016/03/25(金) 01:11:07.68 ID:v9Mc4pMx.net mailto: ありがとうございます。おかげで宿題を提出することができました。 リンク先のページを読んでも何が何だかさっぱり分かりませんでした。 [] [ここ壊れてます]
123 名前:デフォルトの名無しさん mailto:sage [2016/03/27(日) 01:06:33.94 ID:jno5DU+g.net] パールでまた問題に直面したら話題を提供してあげますので楽しみにしてるんだぞ。
124 名前:デフォルトの名無しさん mailto:sage [2016/03/27(日) 15:47:58.07 ID:HfxbfBB0.net] ありがとうございます。
125 名前:デフォルトの名無しさん [2016/04/14(木) 19:01:51.27 ID:v1e64Ann.net] ファイル演算子の-eと-fの違いは? ファイルが存在するかどうかはどっちを使っても良いのですか?
126 名前:デフォルトの名無しさん [2016/04/14(木) 19:46:27.77 ID:G3MchQfa.net] すみません。初めてperlを使うのですが、perlでQRコードを生成したいです。 ブラウザからアクセスしてQRコードの標準出力は出来たのですが、ファイルを生成する方法がわかりません。 以下のソースを実行すると、pngが生成されるのですが、生成されたpngをダブルクリックしても開けなくなります。 use GD::Barcode::QRcode; binmode STDOUT; my $qr = GD::Barcode::QRcode->new('test',{Ecc=>M, Version=>5, ModuleSize=>3})->plot(); open my $fh, '>', 'qr.png' or die; print $fh $qr->png; close $fh; もしお分かりの方がいらっしゃったらお願いします。
127 名前:デフォルトの名無しさん mailto:sage [2016/04/14(木) 20:56:59.29 ID:rjSU//7G.net] >>123 -fは指定されたものが通常ファイルで存在した場合のみ真 -eは同名のディレクトリやシンボリックリンクでも真 >>124 openの次の行にbinmode $fh;
128 名前:124 [2016/04/14(木) 21:09:45.25 ID:G3MchQfa.net] >>125 ありがとうございました。 初心者なもので、もう丸一日困っておりました。
129 名前:デフォルトの名無しさん mailto:sage [2016/04/24(日) 15:13:08.67 ID:mI4IMx9A.net] centos、zshの環境で、plenvを使っていて、apacheでcgiを動かそうと考えています。 /var/www/html 直下で #!/usr/bin/perl のcgiが動くところまではブラウザで確認できました。 あ
130 名前:ニはplenvの下記初期設定をするだけ、と思ったところで詰まりました。 export PATH=~/.plenv/bin:$PATH eval "$(plenv init -)" apacheの自動起動では ..zshrc を指定するところがありません。 とりあえず下記で、plenvでインストールしたパスだけは設定したのですが、 eval "$(plenv init -)" の中でどんな処理がされているのかわかりません。 # echo "PATH=/home/centos/.plenv/shims:$PATH" >> /etc/sysconfig/httpd # /etc/init.d/httpd restart eval "$(plenv init -)" ではどんな処理がされているのでしょうか? また、plenvの環境は、パスさえ設定しておけば、特に支障はないのでしょうか? [] [ここ壊れてます]
131 名前:デフォルトの名無しさん mailto:sage [2016/04/24(日) 16:10:25.44 ID:pOtqw7s6.net] 最後の行だけ。 普通に、echo $(plenv init -)すれば、標準出力に内容が出ます。
132 名前:デフォルトの名無しさん mailto:sage [2016/04/24(日) 17:03:31.20 ID:jLfEtDRT.net] >>127 そーすこーどにぜんぶかいてあります
133 名前:127 mailto:sage [2016/04/24(日) 23:45:45.94 ID:WFRvhXno.net] >>128 なるほど! 評価してるだけだから、echoで出力できますね。 気づきませんでしたありがとうございます。
134 名前:デフォルトの名無しさん mailto:sage [2016/04/25(月) 02:23:47.24 ID:wavxOtJH.net] echoしなくてもplenv init - だけでいいよw もっとも、それ見た後は そーすこーどみれだけどなw
135 名前:デフォルトの名無しさん [2016/04/27(水) 09:59:00.96 ID:I/i5T1uZ.net] openで開いたファイルをcloseで閉じる前にexitなのでプログラム強制終了した場合 自動的に閉じられてますか? 何か問題ありますか?
136 名前:デフォルトの名無しさん mailto:sage [2016/04/27(水) 13:09:15.67 ID:3LxG86Of.net] closeされることが保証されるわけではないが、普通のOSなら OSがcloseを発行する。何を問題とみなすかによるが普通は問題ない
137 名前:デフォルトの名無しさん mailto:sage [2016/04/28(木) 01:35:18.90 ID:rK49iHPu.net] cgiなら問題ないけどmod_perlとかだとファイルディスクリプタ消費したままになる
138 名前:デフォルトの名無しさん [2016/04/28(木) 02:09:41.77 ID:hmSh3kQm.net] exit ではなく die を使うという方法もある。もちろん eval ブロックの中で。
139 名前:デフォルトの名無しさん mailto:sage [2016/04/29(金) 11:09:29.51 ID:OUpC6wqc.net] END { close(FILE); } もしくは open(my $file,'file.txt'); だな
140 名前:デフォルトの名無しさん [2016/04/29(金) 19:53:28.89 ID:WQhKsXVS.net] tmp.datをlog.datにrenameするときrename失敗したら成功するまで繰り返す処理をしたい このようにrename成功したらループを抜けるというやり方でもいいんでしょうか? 他にいいやり方はありますか? for($n=0;$n<=100;$n++){ $rename_seikou = rename("tmp.dat","log.dat"); if($rename_seikou==1){ last; } }
141 名前:デフォルトの名無しさん [2016/04/29(金) 20:40:17.89 ID:bfvjxGWD.net] 本当にそういう繰り返しをしたいのなら sleep を入れた方がいいと思う。 それから、失敗した時は原因を確認した方がいいと思う。つまり、こんな感じ。 use Errno 'EBUSY'; if ( rename( $src,$dest)){ # 成功 } elsif ( $! eq EBUSY){ # 多分、別のプロセスで使用中。少し待てば成功するかも。 } else { # 待っても無駄だろう。 die( $!); }
142 名前:デフォルトの名無しさん [2016/04/29(金) 20:50:54.01 ID:bfvjxGWD.net] ごめん、間違えた。 $! eq EBUSY じゃなくて $! == EBUSY
143 名前:デフォルトの名無しさん [2016/04/30(土) 11:00:17.55 ID:DNyH92Gg.net] 正規表現での置換について質問です。 <ul> <li>あ</li> <li>あ</li> <li>あ</li> <li>あ</li> <li>あ</li> </ul> 上の最後の<li>だけ<li class="a">に置換したです。 1時間以上考えてますができません。
144 名前:140 [2016/04/30(土) 11:01:02.01 ID:DNyH92Gg.net] 間違えました。 置換したです→置換したいです
145 名前:デフォルトの名無しさん mailto:sage [2016/04/30(土) 11:11:29.23 ID:dxKZGhAw.net] 正規表現は少しでもほんの条件が不明瞭であれば誰にも書くことはできない
146 名前:140 [2016/04/30(土) 11:14:44.17 ID:DNyH92Gg.net] 自己解決しました。 $a =~ s/(^.*)\<li\>(.*$)/$1\<li class\=\"a\"\>$2/s;
147 名前:140 [2016/04/30(土) 11:39:47.11 ID:DNyH92Gg.net] すみません。 新たな問題が発生しました。 <ul> <li>あ</li> <li>あ</li> <li>あ</li> <li>あ</li> <li>あ</li> </ul> <ul> <li>い</li> <li>い</li> <li>い</li> <li>い</li> <li>い</li> </ul> 上記の文字列が$aに入っている場合で、各<ul>の最後の<li>だけ<li class="a">に置換したいです。
148 名前:デフォルトの名無しさん mailto:sage [2016/04/30(土) 12:40:49.01 ID:nOun1cZC.net] 木構造のものを正規表現で置換するのは無理 JavaScriptのjQuery の、addClass, removeClass, toggleClass などを使う それか、HTMLをパースする、ライブラリを探す
149 名前:デフォルトの名無しさん mailto:sage [2016/04/30(土) 15:45:10.24 ID:Z/JJxf61.net] 否定の文字クラス使えば、普通に最短マッチで出来る事だろ。 s{<li>([^>]*?</li>¥s+</ul>)}{<li class="a">$1}sg パースするライブラリ使えっつーのは同意だがな
150 名前:デフォルトの名無しさん mailto:sage [2016/04/30(土) 15:46:02.92 ID:Z/JJxf61.net] ああ、否定の文字クラス使わんでも出来るわ。 アホだ俺
151 名前:140 [2016/05/01(日) 14:05:59.88 ID:mZCC86OL.net] >>145 ツリー構造というよりまさにあの並びの時だけの正規表現でいいんでPerlでやりたいんです >>146 ありがとうございます $a =~ s/\<li\>([^\>]*?\<\/li\>\s+\<\/ul\>)/\<li class\=\"a\"\>$1/sg; では動きませんでした
152 名前:デフォルトの名無しさん mailto:sage [2016/05/01(日) 16:22:48.05 ID:EJZ0zho6.net] そのコードそのまま(円マークをバックスラッシュにして) 動かしたから、何らかの置換↓が得られたけど? <ul> <li>あ</li> <li>あ</li> <li>あ</li> <li>あ</li> <li class="a">あ</li> </ul> <ul> <li>い</li> <li>い</li> <li>い</li> <li>い</li> <li class="a">い</li> </ul> 無意味なエスケープは、コードの邪魔になるだけだからしない方がいいよ。 置換 s/// の右辺は正規表現ですらない(よってエスケープの必要無い)し。
153 名前:デフォルトの名無しさん mailto:sage [2016/05/03(火) 07:34:49.17 ID:PeIabFbi.net] \現\実 !−=≡ヘ(* - -)ノ
154 名前:デフォルトの名無しさん mailto:sage [2016/05/03(火) 22:19:44.35 ID:u2mE3+tw.net] /[0-9]{$num}/ のような量子数は変数にできないんでしょうか?(^^?
155 名前:デフォルトの名無しさん mailto:sage [2016/05/04(水) 01:44:17.76 ID:eTkSZ25N.net] # 実行してみて for $num (1..3){ $_ = '1' x ($num - 1); print /[0-9]{$num}/ ? 'ok,' : 'not ok,'; $_ = '1' x $num; print /[0-9]{$num}/ ? 'ok,' : 'not ok,'; $_ = '1' x ($num + 1); print /[0-9]{$num}/ ? 'ok,' : 'not ok,'; print "\n"; }
156 名前:デフォルトの名無しさん mailto:sage [2016/05/04(水) 17:17:13.34 ID:cuRcUS6e.net] >>152 ありがとうございます。 変数は使えたんですね! 演算子が使えないようでした…申し訳ありません。 /[0-9]{$num+1}/ のような使い方がだめでした orz
157 名前:デフォルトの名無しさん [2016/05/04(水) 22:28:29.07 ID:0wPtL/Lt.net] $n = 2; $pat_qr = $n + 1; $pat_qr = qr/[0-9]{$pat_qr}/ ; $pat_ev = eval( sprintf("qr/[0-9]{%d}/",$n+1)); $pat_co = qr/(??{ sprintf("[0-9]{%d}",$n+1) })/ ; print( $_,"\n") foreach $pat_qr,$pat_ev,$pat_co; # 個人的には $pat_qr がいいなぁ。eval を使うほどのことじゃないし $pat_co はデバッグしにくい。
158 名前:デフォルトの名無しさん mailto:sage [2016/05/05(木) 15:20:47.88 ID:W74rdbK+v] >>153 直接埋め込むにはperldoc.jp/docs/perl/5.20.1/perlref.pod#Using32References > 同様に、スカラへのリファレンスを返す式は ${...} で デリファレンスできます。 > 従って、上述の式は以下のように書けます: > > print "That yields ${\($n + 5)} widgets\n"; しかし、お勧めしない。 新しい変数を作るべき。
159 名前:デフォルトの名無しさん mailto:sage [2016/05/05(木) 15:23:19.51 ID:zs5en64n.net] # こうですよ for $num (1..3){ $_ = '1' x $num; print /[0-9]{@{[$num+1]}}/ ? 'ok,' : 'not ok,'; $_ = '1' x ($num + 1); print /[0-9]{@{[$num+1]}}/ ? 'ok,' : 'not ok,'; $_ = '1' x ($num + 2); print /[0-9]{@{[$num+1]}}/ ? 'ok,' : 'not ok,'; print "\n"; }
160 名前:153 mailto:sage [2016/05/05(木) 19:10:09.77 ID:eJss6EWw.net] >>156 すごーい\(^^)/ ありがとうございます! >>154 ありがとうございます!
161 名前:153 mailto:sage [2016/05/05(木) 19:13:26.95 ID:eJss6EWw.net] あのあのもう一つ ファイルハンドルで3行読み込むのを作ってみたのですがうまくいきませんでした… どうしたらよいのでしょうか… while ( $line[0..2] = <DATA> ) { print $line[0]; print $line[1]; print $line[2]; } __DATA__ なんたら かんたら たらのめ
162 名前:153 mailto:sage [2016/05/05(木) 19:19:01.51 ID:eJss6EWw.net] ちょっとサンプル省略しすぎてすみません。 ":encoding(cp932)" 等で漢字の表示は問題ありませんm(__)m while ( $line[0] = <DATA> ) { $line[1] = <DATA>; $line[2] = <DATA>; .... のように分解して書くと問題ありません。(DATAは必ず3行一組になります) 一度に、3行読み込む方法があればお教えくださいm(__)m
163 名前:デフォルトの名無しさん mailto:sage [2016/05/05(木) 21:40:51.68 ID:AhXWZZ47.net] @line[0..2] 配列スライスのシジルは@
164 名前:デフォルトの名無しさん mailto:sage [2016/05/05(木) 23:21:34.59 ID:zs5en64n.net] 都合よく固定長を前提にはできないだろうから、 # 全部読んじゃって chomp(@_ = <DATA>); # 3つづつ処理する while (@line = splice(@_,0,3)) { print map {"[$_]"} @line; print "\n"; } __END__ 1 2 3 4 5 6 7 8 9
165 名前:デフォルトの名無しさん [2016/06/01(水) 11:50:03.90 ID:6wx+Ihuz.net] $text = 'hoge<span class="hoge" id="hoge">"hoge"</span><span class="huge" id="huge">"hoge"</span>huge'; 上のような文字列で<〜>(タグ内)に囲まれた"だけ
166 名前:デフォルトの名無しさん [2016/06/01(水) 11:54:16.91 ID:6wx+Ihuz.net] $text = 'hoge<span class="hoge" id="hoge">"hoge"</span> <span class="huge" id="huge">"hoge"</span>huge'; 上のような文字列(改行されてますが1行です)で<〜>(タグ内)に囲まれた"だけ " に置換したいです s/(<.*?)"(.*?>)/$1"$2/g; 上のように試してみましたが、最初の1つのみ " に置換されるだけです よろしくお願いします
167 名前:162 [2016/06/01(水) 12:36:41.40 ID:6wx+Ihuz.net] タグの外側だけ置換する方法としては下記がどこかに載っていました s/((?:\G|>)[^<]*?)"/$1"/g; タグの内側だけ置換したい場合は>と<を逆にすればいいかと思ったのですができませんでした
168 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 12:56:13.02 ID:UybPRljc.net] >>162-164 $text =~ s{(?<=&lt;)(.+?)(?=&gt;)}{ $1 =~ s/&quot;/"/gr }eg;
169 名前:デフォルトの名無しさん [2016/06/01(水) 13:07:26.71 ID:6wx+Ihuz.net] >>165 ありがとうございます やってみましたがエラーになりました もちろん&は半角に直しました
170 名前:デフォルトの名無しさん [2016/06/01(水) 13:32:03.91 ID:MHn5bFUb.net] どんなエラーか解らないことにはなんとも…… ひょっとして、5.14 以前の Perl を使ってたりする?
171 名前:デフォルトの名無しさん [2016/06/01(水) 13:44:06.85 ID:6wx+Ihuz.net] >>167 5.8系です AddHandler cgi-script-debugが使えなくなってデバッグができないんです この文法チェッカもいつの間にか消えてました homepage2.nifty.com/sophia0/perl.html
172 名前:デフォルトの名無しさん [2016/06/01(水) 14:04:04.96 ID:6wx+Ihuz.net] teraterm入れてSSH登録してエラーチェックしてみました Bareword found where operator expected at test.cgi line 7, near "s/"/"/gr" syntax error at test.cgi line 7, near "s/"/"/gr " test.cgi had compilation errors.
173 名前:デフォルトの名無しさん [2016/06/01(水) 14:11:20.95 ID:MHn5bFUb.net] 置換の r オプションは 5.14 からです。従来通り perl -pe 's{(?<=&lt;)(.+?)(?=&gt;)}{ ( $str = $1) =~ s!&quot;!\"!g ; $str ; }eg' みたいな感じでどうでしょうか。
174 名前:デフォルトの名無しさん [2016/06/01(水) 14:17:56.91 ID:6wx+Ihuz.net] >>170 できました! 本当にありがとうございました! (Perl 5.8.8なのにエラーが出たのは謎ですね)
175 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 20:08:28.85 ID:2S8m0KQ+.net] 5.14(新しい) > 5.8(古い)だぞ
176 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 21:17:48.26 ID:1kxD8r4Z.net] そいや5.24でpushやpop,shiiftなどにリファレンスを渡したときの 自動デリファレンスが止めになったのはなぜ? 折角5.14で入れた機能なのに。
177 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 21:25:33.54 ID:BXoQUtbW.net] なぜも何も。 もともと「実験的に採用した」って宣言してるし、 失敗でした、って delta に書いてあるし。
178 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 14:00:14.87 ID:tGqw3Zei.net] perlは、常にunstable ♪ オレの人生もunstable ♫
179 名前:デフォルトの名無しさん mailto:sage [2016/06/02(木) 14:23:32.77 ID:TTUXXyQU.net] Windows 7で tree D: /f > tree_list.txt これで書き出した物をperlでフルパスに変換したいのですが、 何か良いモジュールなどはありますか?
180 名前:デフォルトの名無しさん [2016/06/02(木) 16:16:38.49 ID:I/c4JKn/.net] File::Spec がそうかも。
181 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 02:13:33.36 ID:7/QVUMn+.net] cmd.exe にまかせるがよろし dir /s /b D: 2>NUL
182 名前:デフォルトの名無しさん mailto:sage [2016/06/03(金) 12:58:52.91 ID:a9xFHzmZ.net] >>177 いまいち良い方法が見つからなかった 再帰処理でがりがり頑張ったけど、ものすごい時間が掛かってしまった >>178 ありがとう 無事いけた コマンドライン詳しくないから、NULでひかかった NULの代わりに、list.txtなどにするとサクッと記録された 速度滅茶苦茶早いなー
183 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 15:10:16.50 ID:d7ojMir6.net] ループの条件を満たしてなくてもredoでループされるんだけど、そうゆうことでいいのかな
184 名前:デフォルトの名無しさん [2016/06/04(土) 15:25:38.27 ID:wKu/P36l.net] そのための redo だから。 perldoc.jp/index/function
185 名前:デフォルトの名無しさん mailto:sage [2016/06/04(土) 16:50:14.92 ID:d7ojMir6.net] >redo コマンドは、条件を再評価しないで、ループブロックの始めからもう一度 実行を開始します そうかそうか、これが欲しかった。どうも。
186 名前:デフォルトの名無しさん mailto:sage [2016/06/08(水) 04:54:48.15 ID:c/sFGpfw.net] ちょっと相談と言うか、バグの原因が想像つかなくてこまっちんぐなんだけど、 $| = 1; for(.....){ ................ ................. print $x; } みたいな感じでいっぱいプリントしてる時、 プロセス実行中は8.00KB(8192B)しか出力されないんだよね。 本来は9.22KB程度出力されるはずで、これはプロセスが終了したら出力される。
187 名前:デフォルトの名無しさん mailto:sage [2016/06/08(水) 05:03:29.17 ID:c/sFGpfw.net] ちゃんとcloseを記述したら直りました。
188 名前:デフォルトの名無しさん mailto:sage [2016/06/08(水) 05:36:30.43 ID:tfudflM8.net] どうしても即時出力したいなら、バッファリングで検索
189 名前:デフォルトの名無しさん mailto:sage [2016/06/08(水) 15:34:08.08 ID:1ofjxszc.net] 10GBくらいのCSVで作成された辞書の文字を置換して出力する場合最も適切な方法はどんな感じ? すぐ思いつくのは下記だけど、膨大な回数HDDにアクセスして大丈夫かと不安になるがバッファリングされるから影響はないかな? open(IN,"<Wikipedia.txt"); open(OUT,">>test.txt"); while(<IN>){ $_ =~ s/<|>/<>/g; print OUT $_; } close OUT; close IN;
190 名前:デフォルトの名無しさん mailto:sage [2016/06/08(水) 15:38:30.27 ID:c/sFGpfw.net] そら最低の理論値でも10GB分HDDから読み出しして10GB分HDDに書き出ししないとな
191 名前:デフォルトの名無しさん mailto:sage [2016/06/08(水) 15:56:29.67 ID:1ofjxszc.net] >>187 単にリードするだけなら10GBは大丈夫だろうけど、 出力のバッファリングが甘いと、何度も書き込みHDDに凄い負担掛かるんじゃないかと思って・・・ 因みに、昔は下記みたいにしてた、やたらHDDがガリガリ言ってた気がする 正しい方法はどうするのが良いのかと思ってね・・・ $| = 1; open(IN,"<Wikipedia.txt"); while(<IN>){ open(OUT,">>test.txt"); $_ =~ s/<|>/<>/g; print OUT $_; close OUT; print $count++; print "\n"; } close IN;
192 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 08:19:20.98 ID:5xTa9iMx.net] >>186 環境によるのでもう少し小さいデータと思いついたコードでベンチ取れとしか。 perldoc.jp/docs/perl/perlperf.pod
193 名前:デフォルトの名無しさん mailto:sage [2016/06/09(木) 08:56:02.57 ID:a3MG4bWs.net] >>186 単純な置換、大きなファイルサイズなら、 perl より sed 使ったほうが速いかもな。
194 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 12:28:41.66 ID:JDueIOd3.net] どんな言語で書いても10GBのHDDをアクセスすること自体に変わりはない。 温度が上昇してエラーになるなら、扇風機で冷やしながら実行するとよい。
195 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 13:25:11.80 ID:ve4Ih4ce.net] そうかなー スクリプトだとなにやられてるんだか分からない印象だけど
196 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 13:26:20.33 ID:0HO5/jac.net] そもそも10GBのテキストなんざ、 今の基準で言えば普通よりちょっとデカい程度。 日常的に扱かってる人間からすれば、質問自体が意味不明。 一回こっきりの捨てスクリプトなんだろうから、 検証以前にさっさと書いて終りにすりゃあいい。
197 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 14:32:37.22 ID:wrakKGfW.net] でも>>188 は毎回やってると流石にHDD痛めそうな気がする ベストな方法や、やってはならない方法はあるでしょ
198 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 15:01:08.44 ID:0HO5/jac.net] ちょっと待って>>188 は、論外だろ? これを含めて、ベスト云々を議論すんなら、 「初歩から教えろ」って言ってるのと変らんぞ? 普通に、>>186 でいいじゃん。 >>187 とか、>>191 とか指摘してる通り、 どうあがこうが、10GBの書き込みは生じるんだから。
199 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 16:03:16.27 ID:ve4Ih4ce.net] まぁ俺は10GB程度のファイル、頻繁にDLしたり削除したりコピーしたり色々してるけどな、ほぼ毎日。
200 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 18:22:13.25 ID:wrakKGfW.net] プログラムもだけど$|=1;使って動作確認してたり、 バッファリング無し、バッチ処理で毎晩10GB1行毎の書き込みは流石にまずいんじゃない? 185も$|=1;使ったらどんな動作になるんだろ? 187はコードが見やすくなるからテストでは結構使ってる そのまま忘れてて大きなファイルを解析させてたりもある みんな185形式で書いてるの?