[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 05/09 21:18 / Filesize : 139 KB / Number-of Response : 547
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

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



1 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 16:01:21 BE:176880454-DIA(100004)]

"The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、
Perlの奥深さについて皆で語り合い、追求してまいりましょう。

CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
( WEBプログラミング板 pc11.2ch.net/php/ )

CGIの質問は答えが Perlと全然関係ない話に帰着する場合が
多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。

www.perl.org/get.html
● 2008/04/20 現在の最新版: 5.10.0
● 2008/04/20 現在の開発版: 5.9.5

▼ 前スレ
Perlについての質問箱 34箱目
pc11.2ch.net/test/read.cgi/tech/1199977642/


91 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 15:52:18 ]
>>88
エロイ人への質問はvenus.bbspink.com/hneta/でしなさい。

92 名前:88 mailto:sage [2008/05/10(土) 16:16:44 ]
>>89
ありがとう。正規表現の箇所は全部呼んだつもりだったのに。。。

解法(p.254):

eval { ""=~ /$search_string/ };
warn "パターンが無効 $@" if $@;

>>91
性器表現に困ったときはそうします。ありがとうございました。

93 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 19:00:21 ]
Win32::OLEを使って wordドキュメントの編集をしようとしています。
読み出しはできるのですが、テキスト編集を受け付けてくれません。

下記のようなソースで、「ABC」→「abc」としたいのですが、元の「abc」のまま出力されてしまいます。
どのようにしたらよいでしょうか?
WindowsXP SP2上で、ActivePerl 5.10と、5.8.8で試してみました。

-------------------
use Win32::OLE qw(in with);
use Win32::OLE::Const 'Microsoft Word';

$word = Win32::OLE->GetActiveObject('Word.Application') || Win32::OLE->new('Word.Application', 'Quit') || die;
$doc = $word->Documents->Open( 'test.doc' ) || die;
$paras = $doc->Paragraphs;

foreach (in $paras){
 $_->Range->{'Text'} =~ tr/A-Z/a-z/;
 print $_->Range->{'Text'}."\n";
}

$doc->Close( 0 );
-------------------


94 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 22:36:57 ]
URL転送なんだけど今こうしてます↓

#!/usr/bin/perl
print "Location: *****\n\n";

これに転送するまでHTMLの<meta content="x">みたいに
一定時間ウェイトかける事って出来るのでしょうか?







95 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 22:55:03 ]
いいえ

96 名前:デフォルトの名無しさん mailto:sage [2008/05/10(土) 23:04:42 ]
>>94
>>1

97 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 02:50:29 ]
>>94
できなくはないがやるな。
それと>>1

98 名前:デフォルトの名無しさん [2008/05/11(日) 12:59:18 ]
教えて先生!
01 や 11 などの文字列を数値に変換するにはどうすればいいの?

99 名前:98 mailto:sage [2008/05/11(日) 13:26:41 ]
自己解決っす
他のスクリプト同様 -0 でよかったのかw



100 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 14:17:20 ]
intでいいよ

101 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 21:23:54 ]
モジュールでモジュールのファイル位置を知るにはどうしたらいいでしょうか?
|-foo.pm
|-data/data1
こんな感じのフォルダ構造になってて、foo.pmの中からdata1を相対参照したいのです。


102 名前:デフォルトの名無しさん [2008/05/12(月) 21:31:33 ]
あとcgiとして使う場合。cgiが呼ばれる度毎回dataファイルを読み込むのは処理が重くなると思うんですよ。
最初の一回だけ読み込む方法とかありませんか?

103 名前:デフォルトの名無しさん [2008/05/12(月) 22:57:05 ]
mod_perl

104 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 23:35:05 ]
fastcgi

105 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 00:00:09 ]
>>103 >>104
有難うございました。fastcgiを調べてみます。

106 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 00:14:04 ]
>>105
Speedy-CGI

107 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 00:18:38 ]
perlはインタプリタだから、見下すべき言語なんだろ?

108 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 00:36:37 ]
perlはコンパイラつんでます。

109 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 00:37:57 ]
所詮JIT



110 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 13:52:10 ]
質問です。

package number;
sub get_codeNumber(){
my $number = 1;
if ($number > 0){
print "0より大です。";
}else{
print "0以下です。";
}
}
このplをローカルで実行しても何もコンソールに表示されません。
これをコンソールに表示するには、どうしたらよいのでしょうか。教えて下さい。

111 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 13:56:45 ]
>>110
そんな断片だけ書かれていては釣りだとしか思えない

112 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 14:03:43 ]
>>111
サブルーチンの中身をデバッグしたいのです。

113 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 14:13:19 ]
>>112
問題がサブルーチン内にあるとわかっているのですか?

114 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 14:20:44 ]
>>113
いいえ。perlの仕事がはじめてなのですが、
渡されたサブルーチンが仕様通りに動いているかを自分で確認したくて書き込みました。

Javaでいうと、
public class hoge1{
System.out.println("0より大です。");
}
public class hoge2{
System.out.println("0以下です。");
}
のような確認をしたかったのですが、おかしいでしょうか。


115 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 14:24:25 ]
呼べ

116 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 14:30:44 ]
>>114
ごめん,俺に理解力がないせいか何をしたいのかがよくわからない.
もうちょっと詳しく説明してくれたら助かるんだが.

117 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 14:42:28 ]
もうちょっと実際のplに近いものを書いてみます。
お待ち下さい。

118 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 14:42:50 ]
package number;
#sub get_codeNumber(){
my $number = 1;
if ($number > 0){
print "0より大です。";
}else{
print "0以下です。";
}
#}

119 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 14:55:04 ]
>>118
単純に改行が入ってないからとか
stdout が flush されてないからとか
じゃないよね?




120 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 14:58:48 ]
ちゃんと実行されてるかどうかがあやしいような

121 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 15:05:45 ]
#torikomi.pl

package torikomi;

#戻り値:String(分類コード)

sub get_code(){
    ($organizationcode,$sectioncode,$itemcode) = @_;
    
    $itemcode = "999999";
    
    my $i1cd       ="";
    my $i2cd       ="";
    my $i4cd       ="";
    
    $i1cd=substr($itemcode,0,1);
    $i2cd=substr($itemcode,0,2);
    $i4cd=substr($itemcode,0,4);
    
    
    if($itemcode eq "000000"){ 
        return "A00";
    }
    if( $itemcode eq "999999" ){
        return "Z00";
    }
}

このperlが、きちんとA00やZ00を返しているかを確認したいのです。

122 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 15:11:54 ]
「サブルーチンの中」を詳細に書けっていうんじゃなくて、
それを呼び出す側とか、実行している環境とかの詳細を書けって話だと思うよ。

123 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 15:37:02 ]
あー、呼び出す側や実行環境のソースはもらっていません。

124 名前:デフォルトの名無しさん [2008/05/13(火) 17:03:19 ]
質問です。
1つのデータを複数に分割して、それぞれをgnuplotで
表示しようとしているのですが、実行すると

gnuplot> 'plot './X1.txt' using 1:2 w l 1'
      ^
line 0: invalid command

という風なエラーが分割したデータ全てに対して出ます。
(X1.txtというのが分割したデータの1つです。)
分割まではうまくいっているので、gnuplotの部分で問題があると思うのですが、
わかる方がいましたらよろしくお願いします。
gnuplotの部分のプログラムは以下のような感じです。

for( $j = 0 ; $j < 10 ; $j++ ){
open ( GP "| gnuplot -persist" )
or die "no gnuplot";
print GP "set term postscript color 20\n" ;
print GP "set output './X1.eps\n'" ;
print GP "plot './X1.txt' using 1:2 w l 1\n" ;
close GP;
}

125 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 17:08:42 ]
>>124
スレ違いだが、、、
w l 1 の「1」って何だ? そんなのあったっけ?



126 名前:124 [2008/05/13(火) 17:14:59 ]
>>125
スレ違いで申し訳ありません。
perlでプログラム書いてたんで、perlのスレで質問した方がいいかなと・・・

「1」はlineの色ですのであまり気にされなくても大丈夫です。


127 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 17:20:15 ]
>>125
色だか線種だかを1に指定ってことだったはず.

>>124
gnuplotに流してるコマンドの最初と最後にいらないシングルクオートが入ってるせいじゃないかな?
このコピーでは問題なさそうだけど,ソースのprint文を確認してみたらいいと思う.

128 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 19:57:39 ]
' なんてコマンドはねえよ、って言ってるだけじゃねえの?

129 名前:124 [2008/05/13(火) 23:28:23 ]
124です。
124で書いたプログラムの間違いに気づきました。
プログラム中の「X1」は「X${j}」でした。
じゃないと、for文の意味ないですもんね。。。
あと、今自分で間違いに気づきました。
print GP "set output './X1.eps\n'"
じゃなくて、
print GP "set output './X1.eps'\n"
でしたorz
こんな簡単なミスに気づかないとは。。。
大変ご迷惑おかけしました。




130 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 00:54:44 ]
>>121
>このperlが、きちんとA00やZ00を返しているかを確認したいのです。
Test::Base使えば良いじゃん。

131 名前:デフォルトの名無しさん [2008/05/14(水) 02:52:29 ]
asciiコードを16進数に変換するにはどうしたらいいでしょうか?
printf "%x","a"
こんなことやっても上手くいきません
61と表示させたいです

132 名前:デフォルトの名無しさん [2008/05/14(水) 03:04:43 ]
www2u.biglobe.ne.jp/~MAS/perl/waza/asc2chr.html
これみたら分かりました

133 名前:デフォルトの名無しさん [2008/05/14(水) 03:21:56 ]
grepでデータ中から目的の行を検索したいのですが
grep(/$foo/i, @ary);
・ignore caseは使いたい
・$fooは「+」などのデータが含まれており、そのままgrepすると正規表現と解釈されてエラーになる
・正規表現はつかわない
何かよい方法はないでしょうか?


134 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 03:32:47 ]
>>133
quote (disable) pattern metacharactersの出番

135 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 03:35:23 ]
ありゃッ、先頭が抜けた。

>>133
\Q quote (disable) pattern metacharactersの出番

136 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 04:14:43 ]
>>134
grep(/\Q$foo\E/i, @ary);
でいけました。ありがとうございます

137 名前:110 mailto:sage [2008/05/14(水) 15:58:33 ]
メインルーチンとの結合でうまくいきました。
相談に乗ってくれた方、ありがとうございました。

138 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 23:04:47 ]
Windows環境で、ディレクトリ一覧を取得、正規化してリネームしたくて
いろいろやってるんだが、shift-jisの文字の扱いに苦労してる
ひょっとしてPerlでやるのあんま向いてなかったりする?

139 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 23:14:21 ]
Unicodeであつかえばいいだろ。



140 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 19:33:10 ]
あまりPERLの構文詳しくないので誰か教えてください
こんなのを作ってみたのですが
sub cont{print "contents\n";}
sub html{print "<html>\n"; $_[0](); print "</html>\n";}
sub body{print "<body>\n"; $_[0](); print "</body>\n";}
body(\&cont);
html(\&cont);
これを、出力が<html><body>cont</body></html>となるように
呼び出したいのですが可能でしょうか
↓動かないですが、こんな感じのことがやりたいです
1. html(\(body(\&cont));
2. sub f{html(\&&_[0]);} f(\&html);
3. sub g{$f=shift; html(\&f);} g(\&html);

141 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 19:43:23 ]
>>140
こういうことか?

sub cont { print "contents\n"; }
sub html { print "<html>\n"; shift->(); print "</html>\n";}
sub body { print "<body>\n"; shift->(); print "</body>\n";}
html(sub { body(\&cont) } );

142 名前:140 mailto:sage [2008/05/15(木) 19:58:14 ]
おお、想定通り動きました。ありがとう。

143 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 20:19:38 ]
use strict;
use warnings;
sub binding{ my($F,@P)=@_;sub{$F->(@P)} }
sub cont {print "contents\n";}
sub html {print "<html>\n"; shift->(); print "</html>\n";}
sub body {print "<body>\n"; shift->(); print "</body>\n";}
sub cont2 {return "contents\n";}
sub html2 {return "<html>\n",shift->(),"</html>\n";}
sub body2 {return "<body>\n",shift->(),"</body>\n";}


html( binding( \&body => \&cont ) );
print html2( binding( \&body2 => \&cont2 ) );


144 名前:デフォルトの名無しさん [2008/05/15(木) 20:21:07 ]
windows上のperlのGDモジュールで、
日本語フォントをjpg画像で出すサンプルってありませんか。
下のサンプルをmsgothic.ttcに変えて実行したら、
どうやっても・という文字になってしまいます。
x68000.q-e-d.net/~68user/webcgi/image-1.html


145 名前:140 mailto:sage [2008/05/15(木) 20:41:48 ]
>>143
このbindingってやつナイスですね
これ参考に、1タグ多要素に拡張してみます


146 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 21:51:34 ]
>>144
PerlMagickでできるかも。
まー、内部はGDかもしれないから、同じ結果かも知れない。


147 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 22:05:34 ]
>>144
よくわからんが、文字コードの問題とか?

148 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 22:32:06 ]
>>144
utf8か、フォントファイルを絶対パスで指定かな。
Imagerも良いよ。

149 名前:プヨー [2008/05/16(金) 18:03:07 ]
Perl で Lisp のマクロのようなものを使うことはできないの?
遅延評価する仕組みがほしい。

Func1( ...exp1..., ...exp2....);
という呼び出しがある場合、状況に応じて exp1, exp2 の
いずれか一方だけを評価したい。

Func1( sub { ...exp1...}, sub {...exp2...} );
のように無名関数を渡す方法は思いついたが、
記法が簡単でないので、もっと簡単に記述できる方法がいい。



150 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 19:09:34 ]
>>149
Lispは名前しか知らないけど、「状況に応じて」の部分を条件文にすればいいんじゃない?
関数を呼んだ時点では、引数の値が決定してないってこと?
そうだとしても、値が決定するまで待つとかすればいいような気がする。
Lispがわからない人でもわかる説明で。


151 名前:プヨー [2008/05/16(金) 19:31:07 ]

> Lispは名前しか知らないけど、「状況に応じて」の部分を条件文にすればいいんじゃない?

そうなんだけど、
if (,,,) { ... } else {...}
のような定型化した条件文が大量にあるから、きれいじゃないんだよね。
それよりも、単に
Func1( ...exp1..., ...exp2....);
のように書けば一行ですむから、保守性が高くてクールだよね。

> 関数を呼んだ時点では、引数の値が決定してないってこと?
そう。Lisp のマクロというのは、必要に応じて引数を eval するみたいなものだよ。

Lisp のマクロはコードを簡単化するために使われることが多い。

152 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 20:02:14 ]
>>151
sub exp1{ .... }
sub exp2{ .... }

Func1(\&exp1, \&exp2)

でいいんでないの?

153 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 20:02:34 ]
>>151
質問が漠然すぎるんだが、、、
my %hash = (
 foo => sub { print "foo\n" ; },
 bar => sub { print "bar\n" ; },
);
$hash{foo}->() ;

こう言うこととかしたいのか?
それともif文を三項演算子?

154 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 20:04:34 ]
常に先行評価のPerlで急に遅延評価になったら保守性が著しく低下するだろ
sub { } で我慢しろ。どうしても黒魔術を発明したいならソースフィルタを使って何とかすればいい

155 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 20:30:18 ]
exp1,exp2が長い場合、保守性がいいとは思えないし
>>149が考えたコードも改行位置ちょっと変えてあげれば複雑にはみえないし
関数を読んだ時点で引数の値が決まってないのは
コードがタコなだけな気がしてならないので
せめて、もう少し具体的に書いてもらえないかな

とりあえずFunc1の中でevalしたいならそうすればいいんじゃ?
Func1(
 q(...exp1...),
 q(...exp2...)
);
sub Func1 {
my($exp1,$exp2) = @_;
#なんかいろいろ
my $exp = $COND ? $exp1 : $exp2;
eval "$exp";
}



156 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 21:45:27 ]
初歩的な質問で申し訳ないのですが

クッキーにデータを入れるときエスケープなどの処理をしてから入れたほうがいいのでしょうか?
よろしくお願いします。

157 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 23:13:35 ]
>>156
URLエンコードと同じエスケープがいるよ。
日本語化されたRFCもあるから、読んでみれば?
もっと簡単にやるなら、CGIモジュールに全部任せる。


158 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 23:57:48 ]
>>157
なるほど。クッキーはURLエンコードですか。勉強になりました。

159 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 01:38:05 ]
最終的に決められた文字だけになるなら、任意のエスケープ方式でいい



160 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 13:25:57 ]
要素数が同じlistとvalueがあるときに、同じ添え字の処理ってどうやって書きますか?
#こんなのがほしい・・
for $i $j(@list @value){print "$i=$j";}

タプルみたいなのがあれば使いたいんですが
やっぱり添え字をインデックスにしてループするしかないんですかね

161 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 13:35:43 ]
どういうときに便利になる?
その例でもwhile shiftで事足りるし。


162 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 13:40:01 ]
use List::MoreUtils qw(each_array);

163 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 13:54:11 ]
zipWithを書けばおk

164 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 13:55:32 ]
単に短く書きたかっただけなんですが、あまりPERL使いこなせてはないので・・
shiftだとこんな感じでしょうか。
while(@list){print shift @list;print "=";print shift @value;}
これはこれで、短くていいですね。


165 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 13:57:38 ]
while($i=shift@list and $j=shift@value){print "$i=$j";}

166 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 14:04:10 ]
>>162
 オブジェクト指向部分はあまりわかってないので後ほど調べてみます。
>>163
 sub zipwith{shift->(shift,shift);}こんな感じですかねw
 ちゃんと動くかはこれから試してみますが・・
>>164
 こっちのが全体的にいいですね、トン






167 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 14:38:21 ]
練習がてら作ってみました
@a=qw(a b c);
sub zipwith{($f,$l,$r)=@_;while($i=shift @$l and $j=shift @$r){$f->($i,$j)}}
zipwith(sub{($a,$b)=@_;print "$a=$b\n";},\@a,[1,2,3]);

関数へ複数の配列を渡す際にはリファレンスにしないとだめってのは少し不便ですね

168 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 17:31:48 ]
perlの勉強中で
カメラ 785円
お菓子 98円

という文字列がファイルであるのですが

if(円という文字を含んでいたら)
$temp = "円より前の数字";

という風に文字の抽出を行いたいのですが
正規表現の部分と、抽出の部分がわかりません
ファイルの読み込みから1行だけを取り込むのは出来たのですが

ご指導お願いいたします。

169 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 17:55:32 ]
/円/ and $temp = $`;



170 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 18:12:27 ]
すいません、上手く動かないみたいです

171 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 18:23:41 ]
ちょっとかんべん

172 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 22:31:48 ]
perlっていうかsendmailについてなんですが…
open(MAIL, "| /usr/sbin/sendmail -t env_addr") or die $!;
# 中略
close(MAIL) or die $!;
のように、パイプ渡しでopenするとき、closeに失敗するときがあるんですが、このとき
エラーメッセージを捕捉する方法どなたかご存じですか? $!には入ってこないのです。

173 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 22:34:32 ]
>>172
エラーメッセージは何処に出るの? 標準出力ならIPC::Open2, 標準エラー出力ならIPC::Open3参照。

174 名前:デフォルトの名無しさん [2008/05/19(月) 11:53:11 ]
#!/usr/bin/perl

$inputfile="test.txt";
open (FILE1, ">>$inputfile") or die "$!";

for ($hoge=0;$hoge<10;$hoge++) {
print FILE1 "$hoge";
  sleep(1);
}
close (FILE1);

このプログラムを同時に2つ実行すると、私の予想ではtest.txtの中身は
00112233445566778899
となると思うのですが、なぜかファイルの中身には
01234567890123456789
と出力されます。
perlは排他制御が勝手に行われたりするんでしょうか?

175 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 11:54:52 ]
バッファリングされてるから

176 名前:デフォルトの名無しさん [2008/05/19(月) 11:56:39 ]
>>175
どういうことでしょうか?
もし正しくバッファリングされるのならflockなどの排他制御は不要な気が…。

すいませんがもう少し詳しくお願いします。

177 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 12:05:50 ]
どのタイミングでflush()されるかわからないのに、それに依存しちゃダメでしょ
ちゃんと排他制御しなよ


178 名前:デフォルトの名無しさん [2008/05/19(月) 12:27:50 ]
なんとなーく分かりました。ありがとうございました

179 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 19:30:53 ]
cryptの返り値はsaltと同じ半角英数字、半角スラッシュ、半角ピリオドの範囲で
salt2文字と残り11文字ってことでってますでしょうか。



180 名前:デフォルトの名無しさん [2008/05/20(火) 19:31:58 ]
あってますでしょうか、の誤字でした。あとあげます。

181 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 20:50:16 ]
いいえ。ホストのcrypt(3)に依存です。

182 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 20:53:22 ]
マニュアルを読むのは身分の低い下賎の民の仕事なので、
高貴な方々は、他人にマニュアルを読ませます。

183 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 21:02:57 ]
だからいつまでたっても

184 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 23:59:36 ]
これだからゆと(ry

185 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 01:05:07 ]
言っても無駄だから、適当にヒントなり与えてスルーしようよ。

186 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 01:13:28 ]
>>182 職業に貴賎なし。

だが、海外にも目を向けるとインプリする人はいっぱいいるから、
そういう志向はありだと思う。


187 名前:デフォルトの名無しさん [2008/05/21(水) 18:46:46 ]
ファイルテスト演算子を再定義することって可能でしょうか?

188 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 20:52:09 ]
むり

189 名前:デフォルトの名無しさん [2008/05/22(木) 01:15:29 ]
「独習 perl」を一冊
やり通したのですが、次は何をすべきでしょうか?
perlの機能を覚えただけで実用的な使い方は学べていません。
次は何をしたらいいでしょうか?



190 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 01:28:32 ]
何かを作る。
ファイルの一括処理プログラムとか、板違いではあるがCGIなんかでもいい。

191 名前:デフォルトの名無しさん [2008/05/22(木) 03:09:43 ]
自分が何をしたいのか、わかりません。

てか?






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

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

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