X



Perlについての質問箱 63箱目
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2014/02/19(水) 23:36:23.29
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板: http://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箱目
http://toro.2ch.net/test/read.cgi/tech/1381561905/
Perlについての質問箱 62箱目
http://toro.2ch.net/test/read.cgi/tech/1385039352/
0087デフォルトの名無しさん
垢版 |
2016/02/25(木) 23:12:11.74ID:B0t5yMaC
>>86
デリファレンスは一度代入しなくてもできるけどちょっとわかりにくいかなって
for my $link ( @{ $res->{list}[1]{link} } ) {

新しい書き方だとこんなのもあったり(postfix dereferencing)
$res->{list}[1]{link}->@*
0089デフォルトの名無しさん
垢版 |
2016/02/27(土) 00:21:51.17ID:7I91l6Zs
>>67-68
超亀レスですがありがとうございます、勉強になりました!
0090デフォルトの名無しさん
垢版 |
2016/02/27(土) 00:49:08.38ID:fhIzDVzC
my $date = '平成28年2月26日18:55';
my $week = '金';

$date =~ s/日/日 $week曜日 /;

print $date;
をすると文字化けするのですが原因がわかりません。
0092デフォルトの名無しさん
垢版 |
2016/02/27(土) 13:36:07.74ID:fhIzDVzC
さくらのレンタルサーバーのCGIでPerl 5.14.4です。
$weekを削除すると文字化けはおこりません。

別のプログラムではうまく動いているのですが
009392
垢版 |
2016/02/27(土) 14:09:58.43ID:fhIzDVzC
$week\xe6\x9b\x9c\xe6\x97\xa5になっているみたい

プログラム内に入力している日本語がprint表示するときにくずれるようです。
0094デフォルトの名無しさん
垢版 |
2016/02/27(土) 14:23:16.95ID:VqgeV1ea
${week曜日}
${week}曜日

>プログラム内に入力している日本語がprint表示するときにくずれる
やっぱutf8フラグかなあ…
009592
垢版 |
2016/02/27(土) 14:55:51.07ID:fhIzDVzC
すみませんプログラムミスでした。
0096デフォルトの名無しさん
垢版 |
2016/03/05(土) 17:24:53.21ID:jVpVtd3O
日付で教えて下さい
1/23 12:34
を西暦をくっつけて
2016/1/23 12:34に変換したいのですが

例えば未来の日時の場合は
5/1 12:34
を2015/5/1 12:34と1年引いた年にしたいのですが
下のプログラムでは
2015/05/02 06:45:10になります
年の引き算はどうすればいいのでしょうか

use strict;
use warnings;
use 5.010;

use Time::Piece;
use Time::Seconds;

my $t = localtime;
my $year = $t->year;

my $str = "1/23 12:34";

my $date = Time::Piece->strptime("$year/$str", '%Y/%m/%d %H:%M');

if ($t < $date) {
$date -= ONE_YEAR;
}

say $t->strftime('%Y-%m-%d %H:%M:%S');
say $date->strftime('%Y-%m-%d %H:%M:%S');
0097デフォルトの名無しさん
垢版 |
2016/03/05(土) 17:32:45.69ID:Kk7Ussws
>>96
いや、年の引き算って言っても一年は365日とは
限らないんだから、仕様を決めないとだめでしょ?

例えば2月29日の1年前は何日なのか?っていう。
0101デフォルトの名無しさん
垢版 |
2016/03/07(月) 21:18:09.27ID:jBGm+KXA
pythonのスクリプトの頭に、use strict;って書いた。頭いかれてきたw
0102デフォルトの名無しさん
垢版 |
2016/03/07(月) 23:50:19.65ID:fqGSH3nt
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);
}
# 基本に忠実に。応用はそれから
0103デフォルトの名無しさん
垢版 |
2016/03/08(火) 00:11:41.92ID:2waKAzbH
>>102
$month -= 2;
my $str = "2/29 12:34";
したら、2015/02/29って答が出るコードなんぞ貼るなや

元の質問者のコードに、
ふつうに$obj->is_leap_yearの判定加えて、
2/29跨ぎなら、LEAP_YEAR
引けばいいだけだろ。
0106デフォルトの名無しさん
垢版 |
2016/03/10(木) 00:41:03.49ID:m8iGuBqw
要件にない仕様を自己満足で追加してはいけない
この件はTime::Pieceだとうまくこなせない問題
融通がきかないのがオレオブジェクトのつらいところだ
0108デフォルトの名無しさん
垢版 |
2016/03/13(日) 00:11:27.55ID:W4AXq/NT
localtimeとTimelocalは次スレのテンプレに追加するか
同じ質問が繰り返されてみんな同じところではまるからなあ
0109デフォルトの名無しさん
垢版 |
2016/03/17(木) 15:49:56.51ID:HmsCvSUF
クッキーへの書き込み処理での質問

エラーメッセージを取得処理
print "Content-type:text/html\n";

if(エラー数が0の場合){

投稿データをクッキーに書き込む処理

}

print "\n";

エラーメッセージの表示処理

というようにエラーメッセージの取得と表示の間に
print "Content-type:text/html\n";print "\n";を挟む形になってしまうので
これらをまとめてサブルーチン化したくてもできません
こういう場合でもうまくサブルーチン化できる方法を教えてください
0114デフォルトの名無しさん
垢版 |
2016/03/20(日) 23:05:38.19ID:ZT1ttS3p
何をしたかったのかよくわからないけど、せめて cookie と書いてほしかった。
0115デフォルトの名無しさん
垢版 |
2016/03/21(月) 23:09:59.48ID:mpXdX/cy
住所を入れる変数でさ
$adoresu = ・・・
みたいな名前つかうヤツ、いるよね
英語なのか何なのか、よくワカラン
0116デフォルトの名無しさん
垢版 |
2016/03/23(水) 01:56:25.05ID:isz3o5XG
$message = エラーメッセージを取得;
print "Content-type:text/html\n";
if(エラー数が0の場合){
  投稿データをクッキーに書き込む処理
}
print "\n";
print $message; # エラーメッセージの表示処理
0117デフォルトの名無しさん
垢版 |
2016/03/23(水) 21:53:51.11ID:ftv772ff
my $str = "あああabcあああcdefghあああ123456";

この文字列で半角英数字の部分をAAAに置換するにはどうすればいいですか?

あああAAAあああAAAあああAAAになればOKです
0118デフォルトの名無しさん
垢版 |
2016/03/23(水) 23:01:13.44ID:OHojQvKP
ここで聞くよりも
http://perldoc.jp/pod/perlrequick
を読みなさい。その方が早くて正確です。
0119デフォルトの名無しさん
垢版 |
2016/03/24(木) 00:07:44.52ID:3WWxxvBQ
my $str = "あああabcあああcdefghあああ123456";
print $str, "\n";
$str =~ s/[A-Za-z0-9]+/AAA/g;
print $str, "\n";
0120デフォルトの名無しさん
垢版 |
2016/03/25(金) 01:11:07.68ID:v9Mc4pMx
ありがとうございます。おかげで宿題を提出することができました。
リンク先のページを読んでも何が何だかさっぱり分かりませんでした。
0121デフォルトの名無しさん
垢版 |
2016/03/27(日) 01:06:33.94ID:jno5DU+g
パールでまた問題に直面したら話題を提供してあげますので楽しみにしてるんだぞ。
0123デフォルトの名無しさん
垢版 |
2016/04/14(木) 19:01:51.27ID:v1e64Ann
ファイル演算子の-eと-fの違いは?
ファイルが存在するかどうかはどっちを使っても良いのですか?
0124デフォルトの名無しさん
垢版 |
2016/04/14(木) 19:46:27.77ID:G3MchQfa
すみません。初めて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;

もしお分かりの方がいらっしゃったらお願いします。
0125デフォルトの名無しさん
垢版 |
2016/04/14(木) 20:56:59.29ID:rjSU//7G
>>123
-fは指定されたものが通常ファイルで存在した場合のみ真
-eは同名のディレクトリやシンボリックリンクでも真

>>124
openの次の行にbinmode $fh;
0126124
垢版 |
2016/04/14(木) 21:09:45.25ID:G3MchQfa
>>125
ありがとうございました。
初心者なもので、もう丸一日困っておりました。
0127デフォルトの名無しさん
垢版 |
2016/04/24(日) 15:13:08.67ID:mI4IMx9A
centos、zshの環境で、plenvを使っていて、apacheでcgiを動かそうと考えています。

/var/www/html 直下で #!/usr/bin/perl のcgiが動くところまではブラウザで確認できました。
あとは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の環境は、パスさえ設定しておけば、特に支障はないのでしょうか?
0130127
垢版 |
2016/04/24(日) 23:45:45.94ID:WFRvhXno
>>128

なるほど!
評価してるだけだから、echoで出力できますね。
気づきませんでしたありがとうございます。
0131デフォルトの名無しさん
垢版 |
2016/04/25(月) 02:23:47.24ID:wavxOtJH
echoしなくてもplenv init - だけでいいよw
もっとも、それ見た後は

そーすこーどみれだけどなw
0132デフォルトの名無しさん
垢版 |
2016/04/27(水) 09:59:00.96ID:I/i5T1uZ
openで開いたファイルをcloseで閉じる前にexitなのでプログラム強制終了した場合
自動的に閉じられてますか?
何か問題ありますか?
0133デフォルトの名無しさん
垢版 |
2016/04/27(水) 13:09:15.67ID:3LxG86Of
closeされることが保証されるわけではないが、普通のOSなら
OSがcloseを発行する。何を問題とみなすかによるが普通は問題ない
0134デフォルトの名無しさん
垢版 |
2016/04/28(木) 01:35:18.90ID:rK49iHPu
cgiなら問題ないけどmod_perlとかだとファイルディスクリプタ消費したままになる
0135デフォルトの名無しさん
垢版 |
2016/04/28(木) 02:09:41.77ID:hmSh3kQm
exit ではなく die を使うという方法もある。もちろん eval ブロックの中で。
0137デフォルトの名無しさん
垢版 |
2016/04/29(金) 19:53:28.89ID:WQhKsXVS
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;

}

}
0138デフォルトの名無しさん
垢版 |
2016/04/29(金) 20:40:17.89ID:bfvjxGWD
本当にそういう繰り返しをしたいのなら sleep を入れた方がいいと思う。
それから、失敗した時は原因を確認した方がいいと思う。つまり、こんな感じ。

use Errno 'EBUSY';
if ( rename( $src,$dest)){
# 成功
} elsif ( $! eq EBUSY){
# 多分、別のプロセスで使用中。少し待てば成功するかも。
} else {
# 待っても無駄だろう。
die( $!);
}
0139デフォルトの名無しさん
垢版 |
2016/04/29(金) 20:50:54.01ID:bfvjxGWD
ごめん、間違えた。
$! eq EBUSY
じゃなくて
$! == EBUSY
0140デフォルトの名無しさん
垢版 |
2016/04/30(土) 11:00:17.55ID:DNyH92Gg
正規表現での置換について質問です。

<ul>
<li>あ</li>
<li>あ</li>
<li>あ</li>
<li>あ</li>
<li>あ</li>
</ul>

上の最後の<li>だけ<li class="a">に置換したです。
1時間以上考えてますができません。
0141140
垢版 |
2016/04/30(土) 11:01:02.01ID:DNyH92Gg
間違えました。

置換したです→置換したいです
0143140
垢版 |
2016/04/30(土) 11:14:44.17ID:DNyH92Gg
自己解決しました。

$a =~ s/(^.*)\<li\>(.*$)/$1\<li class\=\"a\"\>$2/s;
0144140
垢版 |
2016/04/30(土) 11:39:47.11ID:DNyH92Gg
すみません。
新たな問題が発生しました。

<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">に置換したいです。
0145デフォルトの名無しさん
垢版 |
2016/04/30(土) 12:40:49.01ID:nOun1cZC
木構造のものを正規表現で置換するのは無理

JavaScriptのjQuery の、addClass, removeClass, toggleClass などを使う

それか、HTMLをパースする、ライブラリを探す
0146デフォルトの名無しさん
垢版 |
2016/04/30(土) 15:45:10.24ID:Z/JJxf61
否定の文字クラス使えば、普通に最短マッチで出来る事だろ。
s{<li>([^>]*?</li>¥s+</ul>)}{<li class="a">$1}sg

パースするライブラリ使えっつーのは同意だがな
0148140
垢版 |
2016/05/01(日) 14:05:59.88ID:mZCC86OL
>>145
ツリー構造というよりまさにあの並びの時だけの正規表現でいいんでPerlでやりたいんです


>>146
ありがとうございます
$a =~ s/\<li\>([^\>]*?\<\/li\>\s+\<\/ul\>)/\<li class\=\"a\"\>$1/sg;
では動きませんでした
0149デフォルトの名無しさん
垢版 |
2016/05/01(日) 16:22:48.05ID:EJZ0zho6
そのコードそのまま(円マークをバックスラッシュにして)
動かしたから、何らかの置換↓が得られたけど?
<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/// の右辺は正規表現ですらない(よってエスケープの必要無い)し。
0152デフォルトの名無しさん
垢版 |
2016/05/04(水) 01:44:17.76ID:eTkSZ25N
# 実行してみて
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";
}
0153デフォルトの名無しさん
垢版 |
2016/05/04(水) 17:17:13.34ID:cuRcUS6e
>>152
ありがとうございます。
変数は使えたんですね!

演算子が使えないようでした…申し訳ありません。

/[0-9]{$num+1}/
のような使い方がだめでした orz
0154デフォルトの名無しさん
垢版 |
2016/05/04(水) 22:28:29.07ID:0wPtL/Lt
$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 はデバッグしにくい。
0155デフォルトの名無しさん
垢版 |
2016/05/05(木) 15:23:19.51ID:zs5en64n
# こうですよ
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";
}
0156153
垢版 |
2016/05/05(木) 19:10:09.77ID:eJss6EWw
>>155
すごーい\(^^)/
ありがとうございます!

>>154
ありがとうございます!
0157153
垢版 |
2016/05/05(木) 19:13:26.95ID:eJss6EWw
あのあのもう一つ
ファイルハンドルで3行読み込むのを作ってみたのですがうまくいきませんでした…
どうしたらよいのでしょうか…


while ( $line[0..2] = <DATA> ) {
print $line[0];
print $line[1];
print $line[2];
}
__DATA__
なんたら
かんたら
たらのめ
0158153
垢版 |
2016/05/05(木) 19:19:01.51ID:eJss6EWw
ちょっとサンプル省略しすぎてすみません。
":encoding(cp932)"
等で漢字の表示は問題ありませんm(__)m

while ( $line[0] = <DATA> ) {
$line[1] = <DATA>;
$line[2] = <DATA>;
....

のように分解して書くと問題ありません。(DATAは必ず3行一組になります)

一度に、3行読み込む方法があればお教えくださいm(__)m
0160デフォルトの名無しさん
垢版 |
2016/05/05(木) 23:21:34.59ID:zs5en64n
都合よく固定長を前提にはできないだろうから、

# 全部読んじゃって
chomp(@_ = <DATA>);

# 3つづつ処理する
while (@line = splice(@_,0,3)) {
  print map {"[$_]"} @line;
  print "\n";
}
__END__
1
2
3
4
5
6
7
8
9
0161デフォルトの名無しさん
垢版 |
2016/06/01(水) 11:50:03.90ID:6wx+Ihuz
$text = 'hoge<span class="hoge" id="hoge">"hoge"</span><span class="huge" id="huge">"hoge"</span>huge';

上のような文字列で<〜>(タグ内)に囲まれた"だけ
0162デフォルトの名無しさん
垢版 |
2016/06/01(水) 11:54:16.91ID:6wx+Ihuz
$text = 'hoge&lt;span class=&quot;hoge&quot; id=&quot;hoge&quot;&gt;&quot;hoge&quot;&lt;/span&gt;
&lt;span class=&quot;huge&quot; id=&quot;huge&quot;&gt;&quot;hoge&quot;&lt;/span&gt;huge';

上のような文字列(改行されてますが1行です)で&lt;〜&gt;(タグ内)に囲まれた&quot;だけ " に置換したいです

s/(&lt;.*?)&quot;(.*?&gt;)/$1"$2/g;

上のように試してみましたが、最初の1つのみ " に置換されるだけです
よろしくお願いします
0163162
垢版 |
2016/06/01(水) 12:36:41.40ID:6wx+Ihuz
タグの外側だけ置換する方法としては下記がどこかに載っていました

s/((?:\G|&gt;)[^&lt;]*?)&quot;/$1"/g;


タグの内側だけ置換したい場合は&gt;と&lt;を逆にすればいいかと思ったのですができませんでした
0165デフォルトの名無しさん
垢版 |
2016/06/01(水) 13:07:26.71ID:6wx+Ihuz
>>164
ありがとうございます
やってみましたがエラーになりました
もちろん&は半角に直しました
0166デフォルトの名無しさん
垢版 |
2016/06/01(水) 13:32:03.91ID:MHn5bFUb
どんなエラーか解らないことにはなんとも……
ひょっとして、5.14 以前の Perl を使ってたりする?
0167デフォルトの名無しさん
垢版 |
2016/06/01(水) 13:44:06.85ID:6wx+Ihuz
>>166
5.8系です
AddHandler cgi-script-debugが使えなくなってデバッグができないんです

この文法チェッカもいつの間にか消えてました
http://homepage2.nifty.com/sophia0/perl.html
0168デフォルトの名無しさん
垢版 |
2016/06/01(水) 14:04:04.96ID:6wx+Ihuz
teraterm入れてSSH登録してエラーチェックしてみました

Bareword found where operator expected at test.cgi line 7, near "s/&quot;/"/gr"
syntax error at test.cgi line 7, near "s/&quot;/"/gr "
test.cgi had compilation errors.
0169デフォルトの名無しさん
垢版 |
2016/06/01(水) 14:11:20.95ID:MHn5bFUb
置換の r オプションは 5.14 からです。従来通り
perl -pe 's{(?<=&lt;)(.+?)(?=&gt;)}{ ( $str = $1) =~ s!&quot;!\"!g ; $str ; }eg'
みたいな感じでどうでしょうか。
0170デフォルトの名無しさん
垢版 |
2016/06/01(水) 14:17:56.91ID:6wx+Ihuz
>>169
できました!
本当にありがとうございました!
(Perl 5.8.8なのにエラーが出たのは謎ですね)
0172デフォルトの名無しさん
垢版 |
2016/06/01(水) 21:17:48.26ID:1kxD8r4Z
そいや5.24でpushやpop,shiiftなどにリファレンスを渡したときの
自動デリファレンスが止めになったのはなぜ?
折角5.14で入れた機能なのに。
0173デフォルトの名無しさん
垢版 |
2016/06/01(水) 21:25:33.54ID:BXoQUtbW
なぜも何も。

もともと「実験的に採用した」って宣言してるし、
失敗でした、って delta に書いてあるし。
0175デフォルトの名無しさん
垢版 |
2016/06/02(木) 14:23:32.77ID:TTUXXyQU
Windows 7で
tree D: /f > tree_list.txt
これで書き出した物をperlでフルパスに変換したいのですが、
何か良いモジュールなどはありますか?
0176デフォルトの名無しさん
垢版 |
2016/06/02(木) 16:16:38.49ID:I/c4JKn/
File::Spec がそうかも。
0178デフォルトの名無しさん
垢版 |
2016/06/03(金) 12:58:52.91ID:a9xFHzmZ
>>176
いまいち良い方法が見つからなかった
再帰処理でがりがり頑張ったけど、ものすごい時間が掛かってしまった

>>177
ありがとう
無事いけた
コマンドライン詳しくないから、NULでひかかった
NULの代わりに、list.txtなどにするとサクッと記録された
速度滅茶苦茶早いなー
0179デフォルトの名無しさん
垢版 |
2016/06/04(土) 15:10:16.50ID:d7ojMir6
ループの条件を満たしてなくてもredoでループされるんだけど、そうゆうことでいいのかな
0181デフォルトの名無しさん
垢版 |
2016/06/04(土) 16:50:14.92ID:d7ojMir6
>redo コマンドは、条件を再評価しないで、ループブロックの始めからもう一度 実行を開始します
そうかそうか、これが欲しかった。どうも。
0182デフォルトの名無しさん
垢版 |
2016/06/08(水) 04:54:48.15ID:c/sFGpfw
ちょっと相談と言うか、バグの原因が想像つかなくてこまっちんぐなんだけど、

$| = 1;
for(.....){
................
.................
print $x;
}

みたいな感じでいっぱいプリントしてる時、
プロセス実行中は8.00KB(8192B)しか出力されないんだよね。

本来は9.22KB程度出力されるはずで、これはプロセスが終了したら出力される。
0185デフォルトの名無しさん
垢版 |
2016/06/08(水) 15:34:08.08ID:1ofjxszc
10GBくらいのCSVで作成された辞書の文字を置換して出力する場合最も適切な方法はどんな感じ?
すぐ思いつくのは下記だけど、膨大な回数HDDにアクセスして大丈夫かと不安になるがバッファリングされるから影響はないかな?

open(IN,"<Wikipedia.txt");
open(OUT,">>test.txt");
while(<IN>){
$_ =~ s/<|>/<>/g;
print OUT $_;
}
close OUT;
close IN;
0186デフォルトの名無しさん
垢版 |
2016/06/08(水) 15:38:30.27ID:c/sFGpfw
そら最低の理論値でも10GB分HDDから読み出しして10GB分HDDに書き出ししないとな
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況