[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 12/06 15:43 / Filesize : 269 KB / Number-of Response : 1047
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Perlについての質問箱 63箱目



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/

201 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 18:23:39.84 ID:wrakKGfW.net]
速度も考えて最近は配列に貯めてからすることがある
ただWindowsだとすぐout of memoryでる

202 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 18:58:39.76 ID:ve4Ih4ce.net]
まあ自分のPCならサブマシンでもメモリ32Gあるし別に・・・って感じだが

203 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 19:00:15.13 ID:ve4Ih4ce.net]
でもPerlってメモリの量が異常に増えるんだよね
10MBのデータを読み込んでごにょごにょしてたらなぜかメモリ200MBになってたり
普通にネイティブな言語使ったほうがいいのでは

204 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 21:45:18.08 ID:0HO5/jac.net]
どんなレス考えても、罵倒しか思い浮ばん。

HDDの負担以前の問題だよ。
open/closeを行数分繰替えすのが、
どれだけ時間の無駄(=マシンに負荷がかかる)か実例貼っとく。

$ perl -le ' sub ps { print `ps ux $$`}; ps ; for( 0 .. 9999999 ){ open my $h, ">>", "test.txt" ; print {$h} "h" } ; ps ;'
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
XXXXX 36471 13.2 0.1 2445400 3344 s002 S+ 8:24PM 0:00.16 perl -le sub ps { print `ps ux $$`}; ps ; for( 0 .. 9999999 ){ open my $h, ">>", "test.txt" ; print {$h} "h" } ; ps ;

USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
XXXXX 36471 22.5 0.0 2445400 1664 s002 S+ 8:24PM 24:21.88 perl -le sub ps { print `ps ux $$`}; ps ; for( 0 .. 9999999 ){ open my $h, ">>", "test.txt" ; print {$h} "h" } ; ps ;

CPU time で24分だけど、実際には、9時半まで処理掛かってる。

205 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 21:49:23.64 ID:0HO5/jac.net]
$ perl -le ' sub ps { print `ps ux $$`}; ps ; open my $h, ">", "test.txt" ; for( 0 .. 9999999 ){ print {$h} "h" } ; ps ;'
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
XXXXX 40081 7.0 0.1 2445400 3324 s002 R+ 9:36PM 0:00.09 perl -le sub ps { print `ps ux $$`}; ps ; open my $h, ">", "test.txt" ; for( 0 .. 9999999 ){ print {$h} "h" } ; ps ;

USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
XXXXX 40081 96.8 0.1 2445400 3340 s002 S+ 9:36PM 0:03.08 perl -le sub ps { print `ps ux $$`}; ps ; open my $h, ">", "test.txt" ; for( 0 .. 9999999 ){ print {$h} "h" } ; ps ;

$ ls -alh test.txt
-rw-r--r-- 1 XXXXX staff 19M 6 12 21:36 test.txt

今の時代の強力なマシンだろうが、こんだけ負担をかける事は、一昔前の人間だったら常識の範囲。

ちなみにフラッシュしようが、出力される量は変動しないんだから、
HDDの負担は変らん。と何回指摘されりゃ気が済むんだ?

206 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 21:54:39.02 ID:0HO5/jac.net]
>>201,>>202は、>>197へ。

207 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 23:18:14.97 ID:wrakKGfW.net]
>>202
今の時代マシーンパワーに物言わせてと言うことが意外と出来きてしまう
勿論、限度はあるけど
朝までに終わればいいわ程度で一度コード作ったらあとは触らないとかね
それと、昔デフラグし過ぎるとHDDが壊れるとか言われてた
出力される量でHDDの劣化が決まるって話だけど、細かいファイルを大量に書いたり作成するのはHDDにとって過大な負担になるんじゃない?
例えばだけど、100GBのファイル一つ書き込むのと、1バイトのファイルを100GB分毎回書き込むのでは違うと思うのだが?

>>199
配列をアホみたいに増やしたらメモリー(SSDで仮想いくらでも増やせるし)が一杯になる前に落ちる

208 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 23:41:21.09 ID:0HO5/jac.net]
>>204
意味不明。
細かいファイルの件なんか、俺のコードにも、>>186にも>>188にも
全く触れられてないんだけど?

百歩譲って、断片化の可能性が高まるのは、open/close を繰替えす
>>188のコード(膨大な処理時間中に他のIOが割って入る)だが、
擁護してんのか晒してんのかも不明。

209 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 23:49:21.59 ID:xguVhByI.net]
>>202
> ちなみにフラッシュしようが、出力される量は変動しないんだから、
> HDDの負担は変らん。と何回指摘されりゃ気が済むんだ?

出力される量は変動しなくても
書き込み回数は増えるじゃん。

フラッシュって何をやってるのか知らないの?
HDDに書き込まないでメモリに蓄えているものを
書き出す処理だぞ。

だからHDDの負担は増える。



210 名前:デフォルトの名無しさん mailto:sage [2016/06/12(日) 23:52:30.66 ID:xguVhByI.net]
ちなみに、出力される量も実際に変動する。

HDDに限らないが通常書き込みっていうのは
ブロック単位で書き込まれる。

HDDの場合は512バイトだったり最近は4Kバイトだったりする。
1バイトの書き込みでも4Kバイト書き込まれるわけだ。

だからデータ量が1000バイトだった場合、
フラッシュ無しだと4KBの書き込みだが
1バイト毎にフラッシュすると、4KB×1000=4MBの書き込み量になる。

ファイルサイズはどちらも同じ1000バイトであっても
それを作るための書き込み量は違う。

211 名前:デフォルトの名無しさん mailto:sage [2016/06/13(月) 00:08:38.69 ID:GclKUW1b.net]
>ちなみにフラッシュしようが、出力される量は変動しないんだから、
>HDDの負担は変らん。と何回指摘されりゃ気が済むんだ?
この二行は、あなたのご指摘通り。
訂正します。

>>188
>$| = 1;
は、*OUTのフラッシュになんの関与もしていないけど。

212 名前:デフォルトの名無しさん mailto:sage [2016/06/13(月) 00:32:22.24 ID:Yqh2uzvZ.net]
>>205
205-206が言いたいこと言ってくれた
擁護でも晒すわけでもなく、より適切な方法が見つかれば良いと思う
185にしても、もっとバッファリングしてやればHDDへのIOが減りHDDの負担は減るんじゃないかなと
標準だと4/8KBでフラッシュしてるよね、これを100MBにすればHDDへの負担はぐっと減りそう
今時のキャッシュ大きめのHDDでどの程度意味があるのか分からないし
寿命に影響するかどうかは分からないけど毎日繰り返す処理なら意味があるかも

>>208
そうなの?って思って調べてみた
mikeda.hatenablog.com/entry/20090503/1241365884
みたらselectしないと効かないっぽいな

213 名前:デフォルトの名無しさん mailto:sage [2016/06/13(月) 01:15:56.79 ID:w1lAZiF2.net]
夏場なんで、while ブロックの先頭に
sleep 2 unless $. % 10000;
を入れるとよい。2つの数字は調整してみてくれ。

214 名前:デフォルトの名無しさん [2016/06/13(月) 15:19:04.03 ID:bjrR9GHC.net]
#!/usr/bin/perl -w

use strict;
use File::Path;
use IO::File;

sub diskstat {
 system(

215 名前:デフォルトの名無しさん [2016/06/13(月) 16:48:17.11 ID:bjrR9GHC.net]
https://ideone.com/fUNKyh

このプログラムの意図 : >>186>>188 の違いがディスクアクセスに及ぼす影響の検証。

明らかに >>186 よりも >>188 の方がシステムコールの回数が多い。
しかし、それだけでディスクアクセスに違いが出てくるわけではない。
実行時間を同程度にしてみたらどうなるだろうか。
実行する前に
grep sda5
の sda5 を環境に合わせて書き換えてほしい。

216 名前:デフォルトの名無しさん mailto:sage [2016/06/14(火) 01:15:43.18 ID:M6DJWkXG.net]
> 実行時間を同程度にしてみたらどうなるだろうか。

実行時間を同程度にしたら、遅い方の書き込み量が減るから
比較にならんだろw

217 名前:デフォルトの名無しさん [2016/06/14(火) 20:04:47.85 ID:UhtJW9b9.net]
プログラムを見てくれてないのかな……だとしたらその時点でもう対象外なんだけど。
ろくに見もしないで何を想像したの?

218 名前:デフォルトの名無しさん mailto:sage [2016/06/15(水) 01:35:53.40 ID:7O5/ia9k.net]
そう言えば古いDiffソフト(AikoWin)やたらHDDガリガリ音鳴ってたな
あれ読み出しが少しずつでHDDに相当の負担が掛かるとか聞いたことがある
細かいファイルを書き込むのも良くないけど、自分でソフト作る時にには
呼び出しも気を付けないとまずいんだよなー

219 名前:211 [2016/06/15(水) 12:03:11.68 ID:rzJhZO2i.net]
もう少しマシなプログラムを書いてみたよ。

https://ideone.com/Nh4Esi

Linux 限定だけど無修正で実行できる。
実行時間は 5 分くらいかかるよ。正確なデータを得るにはそうした方がいいみたいなんだ……



220 名前:デフォルトの名無しさん [2016/06/15(水) 13:23:28.38 ID:rzJhZO2i.net]
自分の実行結果を書いておくよ。

sub f_a {
 my $fh = IO::File->new( &genfn(),'>') || die( $!);
 $fh->autoflush( 0);
 $fh->print('h') foreach 0 .. 65535;
 $fh->close;
}

sub f_b {
 my $fh = IO::File->new( &genfn(),'>') || die( $!);
 $fh->autoflush( 1);
 $fh->print('h') foreach 0 .. 65535;
 $fh->close;
}

sub f_c {
 my $fn = &genfn();
 foreach ( 0 .. 65535) {
  my $fh = IO::File->new( $fn,'>>') || die( $!);
  $fh->print('h');
  $fh->close;
 }
}

これらを 16 回ずつ実行した結果、f_a,f_b はそれぞれ 2232 セクタ、
f_c は 2224 セクタ書き込んだみたいだよ。もちろん書き込んだ回数だよ。

221 名前:デフォルトの名無しさん [2016/06/15(水) 17:57:12.29 ID:rzJhZO2i.net]
https://ideone.com/K0qeSx

もう少しユーザーフレンドリーな感じにしてみたよ。これで最後だよ。
Windows ではこういう情報を得る方法は無いの?
非同期書き込みが無いのなら彼らの言うことも間違いではないんだけど。

222 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 11:42:41.43 ID:zTifxauk.net]
$ perl -p -e 〜
となっているのですが、-p と -e の意味を教えてください。

223 名前:218 mailto:sage [2016/06/18(土) 13:00:49.64 ID:zTifxauk.net]
一行構文のOPだとわかりました。

しかし、
C:\perl\bin\perl -e 'for $i (@ARGV) { print $i ,"\n";}' args1 args2 args3
をWindows環境で実行すると
Can't find string terminator "'" anywhere before EOF at -e line 1
と出てしまいます。
解決方法を教えほしいです。

224 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 13:07:12.42 ID:FKPQs3z7.net]
'print "\n"'ではなく"print qq(\n)"のように

225 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 14:22:55.12 ID:zTifxauk.net]
C:\perl\bin\perl -e 'for $i (@ARGV) { "print $i ,qq(\n)";}' args1 args2 args3
で試したがダメでした…

226 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 14:58:07.42 ID:h9LNivvl.net]
>>222

227 名前:
俺は昨日から始めたんで確かなことは言えないけど、
DOSプロンプトだと、''で括ってもダメだったよ
(何か設定があるんだけど昨日からなんで...)
例えば、
perl -e 'print "hello"'

perl -e "print \"Hello World\n\""
ってしないと動かなかった
[]
[ここ壊れてます]

228 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 15:22:54.54 ID:h9LNivvl.net]
よくよく考えたら、コマンドプロンプトで''はいけるはず無いよね
だって、まずコマンドプロンプトで命令が解釈されるわけだから
'a b'だと、連続した文字列とはならずに
'aとb'の2つの引数が指定されたと受け取られちゃうわけだしね

229 名前:デフォルトの名無しさん [2016/06/18(土) 15:30:14.88 ID:xZeqh3Cr.net]
Perl の文法上
"\n"
の代わりに
qq(\n)
と書けますよ……という話じゃないのかなあ。

とりあえず、ググって見つけたページ
thinca.hatenablog.com/entry/20100210/1265813598
up-cat.net/%25A5%25B3%25A5%25DE%25A5%25F3%25A5%25C9%25A5%25D7%25A5%25ED%25A5%25F3%25A5%25D7%25A5%25C8%25A4%25CE%25A5%25A8%25A5%25B9%25A5%25B1%25A1%25BC%25A5%25D7%25BB%25C5%25CD%25CD.html

相変わらずカオスなんですね。それがいやで Linux に乗り換えたのは前世紀のことなのに……



230 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 17:13:02.52 ID:Q2VQ6qXf.net]
DOS/Windowsコマンドプロンプトのクォートは "
UNIXのシェルのクォートは '
ただそれだけ
コマンドプロンプトのクォートとして "" を使っているから、Perl部分は
qq() を使ってる

231 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 17:51:48.00 ID:5RdW1n8d.net]
すごいにゃー。ワシは動けばいいやなんで。

232 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 17:53:59.52 ID:qpxG5nAO.net]
動かないんだろ?

233 名前:デフォルトの名無しさん mailto:sage [2016/06/18(土) 20:50:09.79 ID:QKdVDmdU.net]
PowerShell_ISE では、どうなる?

234 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 20:43:06.86 ID:p98kttl2.net]
ファイルの中身じゃなくて、ファイル名をバイナリかなんかで扱いたいときはどうすれば良いでしょうか
どっかの国のどっか語でファイル名書いてあって、ファイル一覧を入手したら全部文字化けみたいな感じになってて困った

235 名前:デフォルトの名無しさん [2016/06/19(日) 22:30:28.43 ID:/GELYJ8A.net]
まず、そのファイルが壊れてないかどうかエンコーディングが判らないことには確認しようがありません。
そして、そこに書かれているファイル名が正しいとしても、問題はそのファイル名で何をするかです。
ファイルを作成するとしたら少々困難を伴うと思いますが、何をしますか?
もう少し説明が欲しいです。

236 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 23:56:05.73 ID:p98kttl2.net]
1: ファイルは壊れてないです。あとファイルの中身はどうでも良くて困ってるのはファイルですね。

2: こちら側からバイナリを含めて希望してるのでそもそも文字コードは問わないです。
なおwindowsですので強制的な解釈としてはcp932でしょうか。文字かどうかは不明ですか。

3: 書いてある通り、ファイル一覧を入手したいです。(と言うよりすでにしました)。その時点での文字化けについてです。

237 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 01:41:13.70 ID:Nxz2d29B.net]
文字化けは君の環境のフォントの問題では…

238 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 01:52:28.59 ID:3dbzY2ue.net]
>>225
単にprintのあと改行したいだけなら、面倒なエスケープを避けてsayを使うのが楽だと思う。

perl -E ‘say “hoge”;’

239 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 01:55:16.19 ID:3dbzY2ue.net]
>>232
CPANにあるWin32::Unicodeを使ってみてはどうだろう。



240 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 02:14:22.79 ID:JJJI2UNm.net]
ちゃんと話を追ってればシングルクォートではコマンド文字列をperlに渡せないってことを理解できるのに
だから>>221では全体をダブルクォートで括ってるわけ

241 名前:230 [2016/06/20(月) 13:40:47.81 ID:cF0IFcLP.net]
>>232
「そのファイルが壊れてないか」と書いたのはファイル一覧のことだったんですが……
まあ、それは置いといて。
困っていると言われても、何をお望みなのかよく分かりません。
マルチバイト文字を作成者が意図した通りの文字として読みたいということなら、
やはりエンコーディングを知る必要があります。
そして、そのエンコーディングを扱うことが出来るソフトウェアと、もちろんフォントも必要です。
どんな環境で、どこからどのような手段で入手して、何をして文字化けだと思ったのか、
それがどうなるのが望みなのかを書いていただけないと、お役に立てそうもありません。

242 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 14:10:59.68 ID:ppvG3ddJ.net]
ファイル名はテキストだろ。
バイナリのファイル名など、聞いたことがない

フォントが無いだけで、たぶん正常だろ。
それか、ファイル一覧を表示している、端末の文字コードが違うだけ

そのファイル名をエディタにコピーして、色々な文字コードに変えて、試してみる

243 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 14:43:14.96 ID:og12Zqf+.net]
先日も申しましたが、ファイル名はOSの仕様によってcp932扱いで表示されたバイナリです。
windowsにおけるバイナリとテキストの違いは、改行など一部の文字の解釈です
すなわち、ファイル名を入手した時点で破損しています

244 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 15:21:44.17 ID:7O0ObdXP.net]
うーん・・・
関係ないけど
ハートマークのファイル名作ったけど、
ちゃんと表示できたよ

245 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 15:27:52.95 ID:JJJI2UNm.net]
>>239
「ファイルはテキストだが何のコードでエンコードされたものかわからん」をcp932で開いた
ではなくて
「cp932でエンコードしてしまって、もう元のファイルの情報は欠けてしまった文字化けファイル」を開いた
ってことか?

246 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 16:05:49.21 ID:S2CnEqh7.net]
>>239
破損とは何か。期待値と実際値を言わないとわからん

247 名前:デフォルトの名無しさん [2016/06/20(月) 16:53:54.14 ID:cF0IFcLP.net]
もう一度聞くけど、どこからどのような手段で入手して、どうやって見てるの?
どうなってほしいの? 使ったソフトウェアの仕様はちゃんと理解できてるの?

248 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 23:26:05.47 ID:og12Zqf+.net]
Aディレクトリの中のファイル名をopendirでとってくる。
この時のファイル名ってどう言う扱い?バイナリ?テキスト?コードは?フラグは?
とってきたらそれがすでに破損してて開くこともできない。

249 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 23:27:22.44 ID:og12Zqf+.net]
もちろん cp932で定義されてる範囲のバイト列ではバグらないよ



250 名前:デフォルトの名無しさん mailto:sage [2016/06/21(火) 00:30:40.48 ID:zxMwhnoQ.net]
そうですか。
で?

251 名前:デフォルトの名無しさん mailto:sage [2016/06/21(火) 12:21:49.21 ID:yHwsrvxs.net]
-------------------------------------------------------
Perl に関係ない話題は、以上で終了。

252 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 02:03:09.88 ID:pkNIGL7K.net]
>>ファイルの中身じゃなくて、ファイル名をバイナリかなんかで扱いたいときはどうすれば良いでしょうか
特別なことをしなければバイナリで扱うことになる。むしろファイル名は文字列では扱(え|わ)ない。

253 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 06:43:08.46 ID:dLzJGxXLx]
PerlはA系を使うクソ仕様だから、直接win32叩いてU系でディレクトリを読みだすか、
>>235の言うように、Win32::Unicodeでも使う。

254 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 17:07:36.10 ID:NJ9t5GVO.net]
Perlを使って下記のように2文字半角スペースを入れたいのです。
0015000008006a3376 -> 00 15 00 00 08 00 6a 33 76

下記を教えて貰いましたが旨く出来ません・・・アドバイス願います。
$ perl -p -e 's/(..)/$1 /g;'
001500 -> 00 15 00

255 名前:デフォルトの名無しさん [2016/06/22(水) 17:34:24.64 ID:MK9gPhs4.net]
いや、ちゃんとその通りになったけど……どううまくいかなかったの?
末尾にスペースが入っちゃいかんとかなら、方法はあるけど。

256 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 17:34:34.20 ID:zY+0G6HH.net]
それでできたけど。

257 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 17:44:10.61 ID:NJ9t5GVO.net]
試したのは下記ですが、進まないと言うか終らないんです。
連続数字は変えますが・・・123456に変更
perl -p -e 's/ 123456/$1 /g;'

perl -p -e 's/(123456)/$1 /g;'

perl -p -e 's/( 123456)/$1 /g;'

perl -p -e 's/\(123456\)/$1 /g;'

258 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 18:37:34.12 ID:ZXocXNxo.net]
>>253
いや、そのドットが重要なのでは…?

259 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 19:34:58.14 ID:NJ9t5GVO.net]
>>254
色々と試行錯誤した中で試してみましたが、ドットを入れるならスペース入れても
同じような・・・
perl -p -e 's/(12.34.56)/$1 /g;'



260 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 19:45:27.49 ID:9eEpB7QB.net]
もう連続した数値を2桁ずつ区切るとは話が違ってきてるぞ
まあ色々試しているんだろうが、まず正規表現をちゃんと勉強した方が結局は早道だよ

261 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 20:13:59.90 ID:SZhXzwW9.net]
>>255
正規表現を使っているという事は理解してる?
ドット一つは「任意の一文字」を意味しているのだけれども…

262 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 20:14:45.08 ID:GjDXavCQ.net]
$string = '012345';
$string =~ s/(..)/$1 /g;

263 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 20:36:25.70 ID:jdKVcriH.net]
s/(..)/$1 /g

( ) で囲むと、キャプチャーできて、$1〜9 で後方参照できる。
. は、任意の1文字だから、.. で2文字

その2文字を、$1で参照して、その後ろに、半角空白を付けている。
$1の後ろに、半角空白があるだろ

g(global)フラグは、すべて置換する

だから、ab なら、ab半角空白 となる。
正規表現の説明を参照

264 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 20:38:53.55 ID:q7cmPaAS.net]
質問者は本当にやりたいことを隠して質問してるからもうどおでもいいけど
なぜ  perl -p -e 's/(..)/$1 /g;' でうまくいっちゃうんだろうね。

ぱっと見だと
001500 -> 00 01 15 50 00
になってもおかしくないのになと思った。

265 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 21:11:10.25 ID:NJ9t5GVO.net]
>>251->>260 皆さまスレ汚してすみませんでした。
Perlは使うばかりで、プログラミングはど素人です。
(..)は顔文字だと思っていました・・・お恥ずかしい

○○○@H170M-PLUS ~
$ perl -p -e 's/(..)/$1 /g;'
123456
12 34 56

あ〜スッキリした。
有難うございました。

266 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 22:35:11.08 ID:jdKVcriH.net]
>>260
1234なら、12 23 34 にはならない

.. は2文字に一致するから、12に一致する。
すると次は、3からスタートするから、34に一致する

つまり、一致した次の文字から、スタートする

267 名前:デフォルトの名無しさん mailto:sage [2016/06/22(水) 23:26:29.09 ID:q7cmPaAS.net]
なるほろー。
最初はこんな感じが頭にうかんだけど冗長だね。ワンライナー3級ですな。
perl -ne 'for( $i = 0; $i < length() ; $i += 2 ){ print substr($_,$i,2)" " }'

268 名前:デフォルトの名無しさん mailto:sage [2016/06/23(木) 09:02:33.36 ID:9bmKWFfz.net]
もう顔文字にしか見えない(..)どうしてくれる

269 名前:259 mailto:sage [2016/06/23(木) 10:28:45.02 ID:mgh0+o+/.net]
>>264 _(_^_)_ m(_ _)m



270 名前:デフォルトの名無しさん [2016/06/23(木) 14:28:28.61 ID:Fa0lhzij.net]
>>244
もう見てないと思うけど、一応書いとくよ。君はまず、
Perl readdir Windows
でググってみるべきだった。

271 名前:デフォルトの名無しさん mailto:sage [2016/06/28(火) 23:22:27.94 ID:sQcX3Fgh.net]
複数の文字列フィルタ (grep や s) を連続で通す書き方って、どうだったっけ?
ある文字列を
 ・grep でフィルタ → grep で再度フィルタ → s で置換 → split で分割 → 先頭要素だけスカラー変数に格納
これをスマートに(可能ならば1行で)やりたい。

272 名前:デフォルトの名無しさん mailto:sage [2016/06/28(火) 23:31:42.78 ID:IoEHfO5D.net]
@result = map {(split //)[0]} map {s//;$_} grep {} grep {} @strings;
こんな雰囲気でええんでないかい?

273 名前:デフォルトの名無しさん mailto:sage [2016/06/29(水) 01:53:58.12 ID:edw32cCt.net]
mapやgrepを一行で複数書くのはアホの代表だと思いまーす

274 名前:デフォルトの名無しさん mailto:sage [2016/07/02(土) 14:22:47.36 ID:UtcihNE2.net]
基本的に日本語で書いたときの逆順に記述するだけなんだけどね
マニュアル読んで分からなければたぶん無理だろう

275 名前:デフォルトの名無しさん mailto:sage [2016/07/02(土) 15:01:42.19 ID:9DiVepfM.net]
批判するならコードかけや

276 名前:デフォルトの名無しさん mailto:sage [2016/07/04(月) 00:55:08.84 ID:xC//1vCA.net]
id="011"<width>1</width>

この文字列から011だけ正規表現で抜き出す方法教えてください
idの数値だけを抜き出したい

277 名前:デフォルトの名無しさん mailto:sage [2016/07/04(月) 00:57:21.80 ID:eDhj/6QR.net]
>>272
これで文字列全体?
その前後にいろんなタグがありそうないやな予感がするんだが?

278 名前:デフォルトの名無しさん mailto:sage [2016/07/04(月) 01:08:21.29 ID:xC//1vCA.net]
>>273
ありますが、かなり長いxmlなので必要だと思った部分だけ抜き出しました
もう少し抜き出してみるとこんな感じです

source="hogehoge.xml" />
<name="foo" id="0110"

このような文字列が大量にあってそのなかからidの数値だけが欲しいです

279 名前:デフォルトの名無しさん mailto:sage [2016/07/04(月) 01:29:50.90 ID:xC//1vCA.net]
>>272
/id="([0-9]*)/g
これでできたような気がします



280 名前:デフォルトの名無しさん mailto:sage [2016/07/04(月) 22:53:37.85 ID:0oVcG5wM.net]
HTMLパーサーを使うのが一番簡単で正確
コメントの中にHTMLがあったらどうするんだ?

つーか正規表現を乱用するな。

281 名前:デフォルトの名無しさん mailto:sage [2016/07/04(月) 22:54:10.05 ID:0oVcG5wM.net]
XMLパーサーか

282 名前:デフォルトの名無しさん [2016/07/05(火) 17:36:47.05 ID:QGn+r4HY.net]
>>272 だとタグの外にあるように見えるのに >>274 ではタグの中になってる。
だから静観してたけど、結局どっちなの?

283 名前:デフォルトの名無しさん mailto:sage [2016/07/05(火) 17:48:38.40 ID:gL12vNid.net]
なんか最初のだと後に<width>のある特定のidの値が欲しいのかな?って思ってたけど
そうでもなくて全部のidの値でいいんだってのが>>275でわかったんで拍子抜けしたところ

284 名前:デフォルトの名無しさん mailto:sage [2016/07/08(金) 23:33:47.61 ID:l/0Eyz2z.net]
うん、自称ベテランにありがち。

285 名前:初心者です [2016/07/09(土) 07:48:40.33 ID:g+Tip2fR.net]
宜しくお願いします。

$ua->cookie_jar(HTTP::Cookies->new(file => "cookie.txt",autosave => 1));
でcookie.txtにクッキーを取得できるのは分かりますが
削除したい場合にはどのようなコードを書くんでしょうか?

286 名前:デフォルトの名無しさん [2016/07/09(土) 16:55:14.14 ID:ce8+Vk05.net]
そういえばいつもお世話になってるのに知らないな……と思ってマニュアルを読んでみた。
どうやら clear を使うらしいな。まずは scan で中身を見てみるのが良さそうだ。
これ以上は説明のしようがない。自分で頑張ってほしい。

287 名前:デフォルトの名無しさん [2016/07/09(土) 21:07:47.73 ID:g+Tip2fR.net]
ウィッス

288 名前:デフォルトの名無しさん mailto:sage [2016/07/11(月) 17:00:44.97 ID:ELH2iWp3.net]
マルチプロセス処理の Parallel::Prefork は、
Windows の StrawberryPerl か ActivePerl に、インストール可能ですか?
pass.cpantesters.org/distro/P/Parallel-Prefork.html

Strawberry、Active、旧バージョン、32bit、64bitなど色々試したけど、
>Can't locate Parallel/Prefork.pm in @INC (you may need to install the Parallel::
>Prefork module) (@INC contains: C:/...

289 名前:デフォルトの名無しさん mailto:sage [2016/07/12(火) 01:04:59.55 ID:BoIJCZeB.net]
cpanmやらppmでやってみたら



290 名前:デフォルトの名無しさん [2016/07/14(木) 20:00:42.23 ID:GgJblQeZ.net]
突然文字が正しく表示できなくなるゴミPerl
人をイラつかせるために作られた言語だなこれ
存在価値がないどころか存在事態が害悪
早く消滅すればいいのに

291 名前:デフォルトの名無しさん [2016/07/14(木) 20:06:36.90 ID:GgJblQeZ.net]
マジで使い物にならない
「ゴミPerlで文字がいきなり変になる対処」
「産廃Perlの文字取り扱いがおかしいのをなんとかする方法」
「糞Perlが文字をまともに扱えないことへの特効薬」
もう数時間検索してるが解決案が出てこない
こんなに酷い言語はPerlくらい

292 名前:デフォルトの名無しさん [2016/07/14(木) 20:15:06.51 ID:GgJblQeZ.net]
Perlは本物のゴミ
文字すらまともに表示できないとか利用価値なし

293 名前:デフォルトの名無しさん [2016/07/14(木) 20:25:10.95 ID:GgJblQeZ.net]
Perlのゴミなところ

文字「あ」すら表示すらできないためとてつもなくイライラする

294 名前:デフォルトの名無しさん [2016/07/14(木) 20:28:38.21 ID:GgJblQeZ.net]
明日納品なのに解決する兆しなし
こういうときは一から書き直すことも多いが何千行もあるシステムを明日までに書き上げられるわけもない
本当にPerlはゴミすぎる

295 名前:デフォルトの名無しさん mailto:sage [2016/07/14(木) 23:24:13.01 ID:RqQ+21r9.net]
だからバイナリで扱えと口が酸っぱくなるほど言ってきたわけで聞き入れないお前が悪い。

296 名前:デフォルトの名無しさん mailto:sage [2016/07/15(金) 08:14:17.03 ID:rP1+mz2q.net]
文字コードを理解してないだけでは・・・?

297 名前:デフォルトの名無しさん [2016/07/15(金) 08:34:29.93 ID:XWIPLqFW.net]
テンプレの>>5 を誰かが勝手に変えたからだ。
元々はこうなっていた。
pc12.2ch.net/test/read.cgi/tech/1234181856/4
------------------------------------------------------------
# [Perl 日本語処理の基礎の基礎]
# このレスは、Windows の ActivePerl で日本語処理を行う場合のテンプレートです。
# このレスの内容をそのまま、UTF8 形式のソースファイルに保存して下さい。
# 入出力ともシフト JIS 形式のファイルまたは DOS 窓を想定しています。
# まず、以下の行を先頭に入れて下さい。
use utf8;
use open IO =>

298 名前:デフォルトの名無しさん mailto:sage [2016/07/15(金) 08:36:25.21 ID:XWIPLqFW.net]
ありゃ?途中で切れちゃった。>>293のリンク先見てね。

299 名前:デフォルトの名無しさん [2016/07/15(金) 09:08:17.43 ID:ATzxunsm.net]
とりあえず Data::Dumper と PerlIO::get_layers を使えば助けを求めるのに役立つと思うが
責任転嫁しかできないゴミに言ってもなぁ……



300 名前:デフォルトの名無しさん mailto:sage [2016/07/15(金) 12:22:26.70 ID:XWIPLqFW.net]
>>287 それからな、
> ゴミPerl
> 産廃Perl
> 糞Perl
どれも、なかなかいいところを突いているが、ちょっと外れているな。
正解は「ガラクタ」だ。

Perl とは「pathologically eclectic rubbish lister」
(病的折衷主義のガラクタ出力装置)の 略なのだ。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<269KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef